文章总结: 该论文研究C代码自动翻译为Rust代码的安全性提升方法,重点分析c2rust工具翻译后存在的unsafe代码问题。研究发现原始指针解引用是最主要的不安全因素,提出通过编译器钩取和代码重写技术消除四类关键不安全特征(原始指针解引用、内存分配、外部调用和全局变量访问),实验表明该方案可显著减少不安全函数比例。 综合评分: 82 文章分类: 安全开发,代码审计,应用安全,二进制安全
G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust
原创
G.O.S.S.I.P G.O.S.S.I.P
安全研究GoSSIP
2021年12月13日 21:47
在小说阅读器读本章
去阅读
最近学编程语言不提Rust都不好意思和别人打招呼了,可是我们这些只会C语言的老程序员怎么办呢?别怕,今天的论文推荐给你介绍一篇将C代码自动化翻译成Rust代码的论文,来自SPLASH 2021 (OOPSLA)
本文一开始并没有关注怎么去开发一个新的C语言-Rust语言翻译系统,而是调查了当前工业界和学术界在实现C语言-Rust语言翻译这一目标取得的已有成果,并对存在的问题进行分析。其中作者特别关注了c2rust这个工具( https://c2rust.com ),并调查了该自动化翻译工具在翻译过程中可能会引入unsafety的问题
之后,作者才相应地提出了相关技术,通过hook Rust编译器,提取更多的信息,将一些翻译后的存在unsafety状态的代码进行重写,消除其中的不安全内容。
作者首先建立了一个C代码的语料库(corpus),其中部分是c2rust工具手册中已经提到的。
然后,作者也简单介绍了一下Rust语言里面的一个特性——允许unsafe code的存在,具体是由具备下列特征的代码引入的:
作者对自己的语料库中导致unsafe code的因素进行了统计分析,发现其中最容易引起unsafety的是raw pointer dereference这一特征
接下去,作者定量分析了如果要减少翻译后的代码中的unsafe function,主要应该考虑哪几个方面。分析结果表明,要去除一半以上的unsafe function,只需要想办法处理最容易引入unsafety状态的四类特征(raw pointer dereference, memory allocation, extern calls, access to globals)
作者在第三章介绍了他们的代码重写技术,针对一个c2rust翻译得到的结果(如下图所示),经过一系列处理后得到了更为安全的代码(具体的细节,小编才疏学浅,请熟悉rust的读者不吝留言评论啊)
作者评估了他们提出的技术的优势,可以从下表中看到,他们的重写技术能够消除很大比例的unsafe functions
论文页面: https://dl.acm.org/doi/10.1145/3485498
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全研究GoSSIP G.O.S.S.I.P G.O.S.S.I.P《G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论