-
作者GoSSIP @ LoCCS.Shanghai Jiao Tong University
-
简介
Modular Control-Flow Integrity是发表在PLDI‘14会议上的论文 。这篇文章研究了如何使用一个动态的数据结构来表示CFG,并封装相应的对数据结构进行读写的事务来保证线程安全。
摘要
过去CFI不支持单独编译,影响了CFI技术的推广。
MCFI支持模块独立插桩、静态和动态链接。组合多个模块,用每个小模块的CFG生成一个新的CFG。一个难点是在多线程的动态链接中如何保证从旧的CFG安全地转换到新CFG去。文中使用一个动态的数据结构来表示CFG,并封装相应的对数据结构进行读写的事务来保证线程安全。
引言
分离编译,编译器能独立地编译应用程序的每个模块,并连接这些模块,添加CFI规则时,无需考虑其他模块,独立地插桩,并将插桩好的模块连接到一个工作可执行程序中。
MCFI中,一个app被分成了多个模块,每个模块都有代码,数据以及帮助与其他模块进行链接和生成模块CFG的辅助信息。当一个模块与其他模块连接后,应该生成一个新的CFI规则,新规则允许原来的ICF能够跳到更多的target上去。故在连接时CFI规则发生了变化。
MCFI在链接lib时,两个挑战是:
- 在多线程中如何在运行时安全有效地更新规则
- MCFI在代码段之后,用一个独立地表来表示CFG。为保证表的平稳更新,MCFI设计了table-check和table-update 事务,使用了一个轻量级的STM(software Transactional Memory)算法
-
在模块进行组合是,如何有效地生成精度高的规则
- 使用辅助类型信息来生成cFG 贡献:
-
MCFI是第一个支持单独编译的有效CFI插桩方法,很大改善了CFI实践性
- 基于类型匹配的C程序CFG生成的方法,高效且可在动态链接中使用,C程序无需或只需做小的修改即可与CFG生成过程兼容
- 实现了一个编译工具链,可对X86的C程序进行插桩。
- 在多线程中如何在运行时安全有效地更新规则
-
援引http://www.securitygossip.com/blog/page/2/
-
提示本站仅做资料的整理和索引,转载引用请注明出处
相关推荐
-
2016-04-15 10:24:53
-
2016-03-16 14:48:35
-
2023-04-29 16:02:52.484768