面向二进制程序崩溃的多级释放后重用漏洞检测技术 - CAS...Prog. Crash...
Transcript of 面向二进制程序崩溃的多级释放后重用漏洞检测技术 - CAS...Prog. Crash...
数据集:
面向二进制程序崩溃的多级释放后重用漏洞检测技术
和亮 苏璞睿 杨轶 闫佳黄桦烽
联系方式: [email protected]
2020
技术背景:
释放后重用漏洞是目前公认的最为常见也
是可利用性最高的一类漏洞。现有检测方案的
共同特点是需要从程序正常执行开始,如图1
左侧,记录海量的内存分配、释放以及重分配
等行为,导致检测与判定效率低下,同时由于
存在如图2所示的多级释放后重用,使得现有
检测方案难以准确检测出所有问题。
技术思路:
如图1右侧,通过实时捕获程序运行时的
内存异常访问所导致的崩溃,随后借助多级逆
向切片技术来实现多级指针解引用的恢复,最
后通过对每一级的目标对象实施“最后一次赋
值”时刻查询,并与目标对象的内存分配与释
放时间区间进行关联分析,从而不仅能够快速
判定与检测出释放后重用漏洞发生的位置,同
时还能有效检测出多级释放后重用的位置。
检测效果:
Obj1
Obj0
(a) Forwards Reference Propagation (b) Backwards Dereference Stitching
1. mov [pObj1], pObj0
Obj6
2. mov pObj1, [pObj4+0x4]
3. mov pObj4, [pObj8+0x8]
1. mov pObj0, [pObj1]0. call [pObj0+0x4]
Obj2
Obj3Obj4 Obj5 Obj6
Obj7 Obj8 Obj9
图1. 正向检测方案 vs. 回溯检测方案
objB
lifecycle
objA
lifecycle
①Store RefobjA
④ Load RefobjA
(RefobjB UAF)
(HeapBlock1)
size=0x30
(HeapBlock2)
size=0x60
(HeapBlock3)
size=0x10objC
lifecycle
objD
lifecycle
② Store RefobjB ③Load RefobjB
⑤ Crash!
(RefobjA UAF)
图2. 多级释放后重用导致的漏洞检测困难