首页
社区
课程
招聘
[原创]SDC2024 议题回顾 | 探秘语法树:反编译引擎驱动自动化漏洞挖掘
发表于: 2024-11-8 17:55 2659

[原创]SDC2024 议题回顾 | 探秘语法树:反编译引擎驱动自动化漏洞挖掘

2024-11-8 17:55
2659

目前源码分析领域存在很多优秀的静态分析工具,比如 Fortify、Joern、codeql 等,在二进制分析领域这类工具则很少见,本议题将介绍演讲者在二进制程序分析工具上的探索。


一起来回顾下罗思礼在SDC2024 上发表的议题演讲:《探秘语法树:反编译引擎驱动自动化漏洞挖掘》

罗思礼:安全研究员



*以下为速记全文


大家好,我是罗思礼,今天给大家带来我最近在二进制分析领域的一些探索,这是前段时间在解决一些逆向困难时想到的思路。


当时我遇到的第一个困难是目标软件有很多的二进制模块,它分散在不同的进程和共享库中,逆向时需要逐个打开 IDA 实例分析比较麻烦,而且IDA插件、脚本无法实现跨模块分析。

面临的第二个难点是同类问题排查,目前针对二进制目标缺乏自动化分析工具,可以去批量的去排查类似问题。但这种情况的话在源码领域却是不一样的,它有很多类似的工具可以用,比如 codeql、Joern、Fortify 等。

我当时的第一个思路是利用图数据库和 IDA 的 CFG 生成跨模块的调用路径分析、字符串引用分析等。


思路是利用 IDA脚本将 CFG 和字符串引用导到一个图数据库,然后我们给它建好对应的边,之后就可以去利用图数据库引擎,快速查询各种路径、引用关系,之后再用对这些路径做一些过滤、清洗,可以辅助我们去分析。


进一步探索后发现可以考虑将 IDA 等反编译工具的分析结果与源码分析工具结合,就能复用源码分析领域的能力了。


对目前业界反编译工具进行分析后,考虑到反编译效果、开发难度决定基于 IDA 开发。

IDA 反编译流程如下:

它首先将汇编指令转换为它的中间语言(microcode),然后然后再在microcode上面做一些反编译的算法,然后最终会生成ctree,即IDA的语法树。


ctree 由 cexpr_t 和 cinsn_t 组成,可以通过 op判断 citem_t 的具体类型,然后根据类型的定义获取每个语法树节点的操作数。

以二元运算符为例,通过 op 的值确定二元运算符的类型, x是左成员,y是右成员,右图是一个实例,它的x是 result,然后y的话是一个number,它是一个立即数。

完成对 IDA 语法树的分析后,就可以开始开发插件将语法树的信息导出,便于后续分析,考虑到开发便捷、IDA版本兼容等特点,决定使用 IDA Python 开发。


导出后的语法树结构如下(具体的代码细节可自行下载查看):

拿到语法树信息后,就需要考虑如何将其与源码分析工具结合,下面介绍一下源码分析工具相关细节。

两个工具的区别在于主要的核心区别就在于 codeql 基于编译的,它提取的信息也更精准,但是问题是在于 codeql 本身是不允许商用的,所以只能个人在工作之外使用。


Joern 的特点是不需要编译,这个条件对于一下审计项目来说是非常友好的。


下面先来介绍 Joern 的技术原理:

它使用不同的工具分析源码,提权源码的语法树,然后基于语法树构建 CFG、DDG 等,生成 CPG,之后用户可以编写规则对 CPG 进行分析。


目前 Joern 也支持使用 Ghidra 分析二进制,但是他没有利用反编译的信息,而是在 pcode 指令上展开分析,这样的话对于规则的编写是比较麻烦的,同一种漏洞模式在指令层面可能会有多种表示。


其次很多情况下我们使用扫描工具时首先会人工分析目标,然后对 IDB 处理,这样反编译后代码会变得更加结构化,利于分析但是在指令层面这些信息是没有的。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 29
支持
分享
最新回复 (18)
雪    币: 139
活跃值: (101)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
2
赞!
2024-11-11 14:58
0
雪    币: 565
活跃值: (3024)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
赞!
2024-11-11 16:25
0
雪    币: 2
活跃值: (1081)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
赞!
2024-11-11 19:24
0
雪    币: 1388
活跃值: (2887)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2024-11-12 10:18
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
赞!
2024-11-12 17:49
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
赞一个
2024-11-12 17:50
0
雪    币: 1014
活跃值: (607)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
赞一个
2024-11-12 17:56
0
雪    币: 22
活跃值: (868)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
赞一个
2024-11-12 18:06
0
雪    币: 1239
活跃值: (2846)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
赞一个
2024-11-12 19:19
0
雪    币: 185
活跃值: (477)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
赞一个 学习一下
2024-11-13 10:55
0
雪    币: 8894
活跃值: (4208)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12

fireworld 
  11 楼
赞一个,学习学习
2024-11-13 14:39
0
雪    币: 105
活跃值: (4447)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
99999999999
2024-11-13 17:25
0
雪    币: 22
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
赞一个
2024-11-13 22:03
0
雪    币: 5459
活跃值: (2507)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
赞一个
2024-11-14 09:19
0
雪    币: 2840
活跃值: (2201)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
赞一个
2024-11-14 18:25
0
雪    币: 141
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
看看这是什么
3天前
0
雪    币: 141
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
打印堆栈是不是就可以了 虽然是动态
3天前
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
1天前
0
游客
登录 | 注册 方可回帖
返回
//