让数据大白于天下:GCC插件实现代码分析和安全审计

网友投稿 400 2022-10-05


让数据大白于天下:GCC插件实现代码分析和安全审计

摘要: 如何利用GCC的插件功能,辅助安全分析人员实现对程序的安全审计、漏洞检测、安全加固等自动化处理能力,提升分析效率和精准度。

本文分享自华为云社区​​《利用GCC插件实现代码分析和安全审计》​​,作者:安全技术猿 。

GCC 4.5.0开始引入的一项插件功能,允许用户通过插件来干预GCC的编译过程,获取到GCC编译过程中的各种数据,甚至可以修改编译过程中生成的中间数据,从而达到修改最终生成的二进制文件行为的目的(注:特别需要注意的是GCC-Plugin的API是会随版本变化的)。此特性从程序员的角度来看,就相当于把原来GCC的黑盒编译过程一下子打开了,GCC编译的过程数据可以“大白于天下”,可以清清楚楚的看个够。

下图为GCC编译架构

GCC编译过程与插件的交互流程

注:图引自DragonEgg 在"Reimplementing llvm-gcc as a gcc plugin"

开源GCC插件列表(来自​​VCG Plugin就是一个实现该功能的GCC插件(参考链接信息:http://code.google.com/p/gcc-vcg-plugin)。

下图是Gimple层次图:

B、 利用可以修改中间数据的能力,可以不用修改源代码就能添加新功能的功能,从而实现动态安全分析、安全加固的能力。

在安全测试中为了监控程序执行路径情况,需要通过动态插装来实现,常见的插装工具有Pin、Dynamo,但这些动态插装会对程序的运行性能产生影响,降低程序运行效率,严重的会导致程序不能正常运行。但如果能预先在目标程序中把插装代码编译进去,这样既兼顾到性能,有兼顾到实现插装的目的,一般要实现这个目的都是在源代码层面由开发人员增加插装代码,但增加的代码只是为了测试的目的,在实际发布版本中是不需要的,因此直接在源代码层面增加插装代码就给代码维护带来的不便,但如果我们应用GCC编译器的插件能力,在编译构建过程中自动添加插装代码到最终生成的二进制文件中,这样只需根据需要重新编译就能得到不同目的的应用程序而不需要修改任何一行源代码,既增加插装代码的动作对上层是透明的。

基于上述在编译过程中自动增加插装代码,可以实现对测试活动的度量和提升测试效率,比如测试时代码覆盖率的统计与度量,基于执行路径来优化测试用例提升fuzz效率等等功能。

总结:

利用GCC的插件功能,可以利用编译过程中的内部数据来帮助安全分析人员对程序进行安全分析和安全加固等事情,提升程序分析效率和分析精准度。

可以试试下面的漏扫服务,看看系统是否存在安全风险:​​>>>漏洞扫描服务​​


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:#yyds干货盘点# 浏览器跨域请求 原理和个人理解
下一篇:使用SpringBoot请求参数过滤空格
相关文章

 发表评论

暂时没有评论,来抢沙发吧~