0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用GCC插件实现代码分析和安全审计

zz爱尚科技 来源:zz爱尚科技 作者:zz爱尚科技 2022-10-13 14:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

利用GCC插件实现代码分析和安全审计

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

下图为GCC编译架构****

image.png

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

image.png

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

开源GCC插件列表**** (来自https://gcc.gnu.org/wiki/plugins):

image.png

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

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

图形化对象可以是控制流图、函数调用图、支配图、Tree结构、Gimple结构、RTX结构、Pass列表等等。

下图是Gimple层次图**** :

image.png

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

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

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

总结:

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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • GCC
    GCC
    +关注

    关注

    0

    文章

    112

    浏览量

    26070
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73148
  • 插件
    +关注

    关注

    0

    文章

    345

    浏览量

    23417
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    现代功率分析仪的演进

    仪的演进不仅反映了技术进步,更深刻影响着新能源、电动交通、智能制造等关键领域的发展。本文将深入探讨现代功率分析仪的核心特点及其未来发展趋势,揭示其在推动能源高效利用中的
    的头像 发表于 11-10 14:40 119次阅读
    <b class='flag-5'>现代</b>功率<b class='flag-5'>分析</b>仪的演进

    如何利用 gcc 编译Ccode?

    最近在玩e203_hbirdv2,利用默认的case 可以仿真。现在想自己写C code 进行仿真,请问该如何利用 gcc 编译?有没有 详细的教程。
    发表于 11-05 12:37

    中软国际审计大模型创新驱动智领未来

    智领未来》的演讲,深入剖析了大模型如何为审计行业打破传统局限、重构工作模式。她表示,审计大模型不仅是技术驱动的必然趋势,更是推动审计行业突破传统瓶颈、实现智能化跃迁的关键力量。
    的头像 发表于 09-28 12:35 821次阅读

    GCC编译器,怎么才能实现c文件中未被调用的函数,不会被编译呢?

    GCC编译器,怎么才能实现c文件中未被调用的函数,不会被编译?有什么编译选项可以设置吗? 移植代码,有些函数没被调用的函数想留在代码里,但不想被编译,编译的话报错报警告啥的太多了,而且
    发表于 09-28 12:25

    协议分析仪能监测哪些异常行为?

    协议分析仪通过深度解析网络通信中的协议字段、时序和状态,能够精准识别多种异常行为,涵盖从配置错误到恶意攻击的广泛场景。以下是其可监测的核心异常行为类型及具体实例:一、协议实现违规:违反标准或规范
    发表于 07-22 14:20

    中软国际以AI赋能某省构建统一智能审计整改系统

    随着审计监督从“查问题”向“促整改、强治理”延伸,如何推动审计整改从“事后补救”迈向“系统治理”,已成为提升国家治理体系和治理能力现代化水平的关键。面对整改周期长、跟踪难度大、管理方式分散等挑战,
    的头像 发表于 07-10 11:50 826次阅读

    CW32L010 MCU在VSCode+GCC+EIDE+JLink下的使用示例

    、安装Embedded IDE、Cortex-Debug等插件。 2、下载安装gcc-arm-none-eabi工具链。 3、运行VSCode,打开CW32L010 MCU的GCC示例工程
    的头像 发表于 07-01 14:52 802次阅读
    CW32L010 MCU在VSCode+<b class='flag-5'>GCC</b>+EIDE+JLink下的使用示例

    KiCad-Parasitics:KiCad 寄生参数分析插件

    “   这是一款用于分析 PCB 编辑器中走线(wires)寄生参数的插件。   ”     要使用该插件,您必须在电路板上标记两个点。通常情况下,最好是选择由同一根走线连接的两个焊盘。标记后,该
    的头像 发表于 06-25 11:14 1766次阅读
    KiCad-Parasitics:KiCad 寄生参数<b class='flag-5'>分析</b><b class='flag-5'>插件</b>

    使用 QWQ:32B 模型搭配 VSCode 的 Cline 插件实现自动化代码编程!

    。结合 Visual Studio Code(VSCode)的 Cline 插件,开发者可以实现高效的自动化代码编程。本文将详细介绍如何配置和使用 QWQ:32B 模型与 Cline 插件
    的头像 发表于 03-21 18:12 1075次阅读
    使用 QWQ:32B 模型搭配 VSCode 的 Cline <b class='flag-5'>插件</b><b class='flag-5'>实现</b>自动化<b class='flag-5'>代码</b>编程!

    如何一眼定位SQL的代码来源:一款SQL染色标记的简易MyBatis插件

    作者:京东物流 郭忠强 导语 本文分析了后端研发和运维在日常工作中所面临的线上SQL定位排查痛点,基于姓名贴的灵感,设计和开发了一款SQL染色标记的MyBatis插件。该插件轻量高效,对业务
    的头像 发表于 03-05 11:36 734次阅读
    如何一眼定位SQL的<b class='flag-5'>代码</b>来源:一款SQL染色标记的简易MyBatis<b class='flag-5'>插件</b>

    分析C语言代码结构的设计问题

    分析一个C语言代码结构的设计问题。 这段代码,使用了两次malloc,分别给 p1 和 p2 申请了内存。用完后,内存释放,防止内存泄漏。 大家觉得,这样的代码设计有没有问题。
    的头像 发表于 02-11 09:31 666次阅读

    MariaDB配置日志审计

    确认插件路径下是否有日志审计插件server_audit.so。
    的头像 发表于 02-05 13:34 717次阅读

    彻底移除Calico网络插件

    0.前言 参考文档:https://github.com/containernetworking/cni Pod网络插件,为了实现Pod网络而需要的插件、组件。由于Kubernetes通过开放
    的头像 发表于 01-23 17:26 1795次阅读
    彻底移除Calico网络<b class='flag-5'>插件</b>

    如何提高嵌入式代码质量?

    技术 现代的嵌入式开发工具和测试技术可以极大地提升代码质量和开发效率: 1. 静态分析工具:如Coverity、Lint等,能够帮助发现潜在的代码缺陷和
    发表于 01-15 10:48

    Kubernetes的CNI网络插件之flannel

    Kubernetes设计了网络模型,但却将它的实现讲给了网络插件,CNI网络插件最重要的功能就是实现Pod资源能够跨主机通信。
    的头像 发表于 01-02 09:43 1189次阅读