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

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

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

下图为GCC编译架构

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

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

开源GCC插件列表

(来自https://gcc.gnu.org/wiki/plugins):

基于GCC此插件特性,从安全测试的角度来看,可以用它来干什么呢?

A、 可以把GCC编译过程的内部数据结构图形化,方便分析应用程序。

图形化对象可以是控制流图、函数调用图、支配图、Tree结构、Gimple结构、RTX结构、Pass列表等等。GCC VCG Plugin就是一个实现该功能的GCC插件(参考链接信息:http://code.google.com/p/gcc-vcg-plugin)。

下图是Gimple层次图

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

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

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

总结:

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

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

点击关注,第一时间了解华为云新鲜技术~

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

  1. Python:利用python编程将上海十六区,2020年5月份房价实时地图(数据来源房天下)进行柱状图、热图可视化

    Python:利用python编程将上海十六区,2020年5月份房价实时地图(数据来源房天下)进行柱状图.热图可视化 目录 上海十六区,2020年5月份房价实时地图(数据来源房天下)可视化 雷达图.柱 ...

  2. 大数据“高烧不断”,“得数据者得天下”的关键在哪?

    大数据的广泛应用,未来超过90%的社会组织将转型成为"数字化原生组织":一面是资本的火爆跟进,由微软.谷歌.特斯拉领衔投资的"大数据独角兽"Databricks ...

  3. Vue —— mockjs 模拟数据、轮播图插件 Swiper

    mockjs 的使用 项目安装 mockjs : cnpm install mockjs 使用步骤 (1)在项目 src 下创建 mock 文件夹. (2)mock 文件夹准备相应的 JSON 数据文 ...

  4. 数据智能让天下没有难做的营销——友盟+首席运营官吕志国 确认出席第七届GDMS!...

    随着年轻消费主力的崛起,他们追逐个性.寻求情感共鸣.强调"自我觉醒".在消费者时间和媒体无限碎片化的大背景下,传统意义上的品牌概念面临解构,年轻消费者不再唯大牌论,小众狂欢迎来大众 ...

  5. 友盟+吕志国:数据智能让天下没有难做的营销

    2021年,在疫情黑天鹅.新消费群体崛起.存量竞争加剧等发展趋势的相互作用下,营销行业迎来了一个崭新阶段.营销数字化成为了企业转型升级的重中之重,而在此过程中,企业应如何通过数据智能,让营销" ...

  6. 得数据者得天下!作为后端开发必备技能之一的MySQL,这份十多年经验总结的应用实战与性能调优我想你肯定是需要的!

    MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作 ...

  7. python office插件_Office 数据可视化8大实用插件推荐

    原标题:Office 数据可视化8大实用插件推荐 1.EasyCharts: http://easychart.github.io/post/Easycharts/ 作者:张杰 EasyCharts是 ...

  8. 大数据产业大有可为 得数据者的天下

    大数据产业大有可为 得数据者的天下 随着大数据时代的到来,军事数据正在成为举足轻重的战略资源,"数据战"作为一种崭新的作战样式逐步显现,这将是一种以数据攻击与防护为基本手段的全新作 ...

  9. c4android插件下载,c4droid gcc插件下载

    gcc for c4droid最新版是手机编程学习软件c4droid的一款支持C++语言的插件,更高效的处理cpp语句,有效提升编辑速度和调试效率,欢迎感兴趣的朋友来IT猫扑网下载. c4droid ...

最新文章

  1. 关于RTP和SRT之间的互操作性,你需要了解什么?
  2. 网络验证php接口逆向,一个专利查错的逆向(网络验证)
  3. RabbitMQ镜像策略set_policy
  4. elipse安装php
  5. Sentinel服务熔断配置fallback和blockHandler_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0052
  6. 程序员面试中常见的哈希表,到底是什么?
  7. yum离线安装rpm包
  8. ln软链接调试mininet
  9. Cisco VPP IKEV2 配置说明
  10. 沧小海读《图解TCP/IP》笔记——第一章 网络基础知识
  11. Mac mini M1使用简单体验(编程、游戏、深度学习)
  12. 目前中国计算机水平如何,中国现在计算机水平现状是怎样的
  13. android 微信高仿,Android 高仿微信发朋友圈浏览图片效果(转)
  14. 这几款软件的隐藏功能,你们知道多少?
  15. Andriod studio manifast中添加权限却还无效日历api设置定时闹钟却不生效
  16. java正则表达式初探——java.util.regex.Pattern类
  17. package.json 详解
  18. Enable Geolocation in a WebView (Android)
  19. javafx控件Button
  20. 腾讯手游助手弹窗提示检测到兼容的Hyper-v正在运行,请关闭后重试

热门文章

  1. 汇编edx_开源社区开始热议edX
  2. (15)Node.js 自定义模块
  3. MyBatis 实例
  4. Bootstrap3 编译版本的文件结构
  5. Bootstrap 模态对话框
  6. qt 程序异常结束。_软件特攻队|VLC-Qt,功能齐全的跨平台多媒体开发利器
  7. 视觉SLAM笔记(45) 搭建 VO 框架
  8. TensorFlow笔记(9) ResNet
  9. 深度学习笔记(16) 误差分析(一)
  10. 扫描代码重大漏洞 java_超过 75% 的开源软件安全漏洞存在于间接依赖中 | Linux 中国...