面向二进制程序崩溃的多级释放后重用漏洞检测技术 - cas...prog. crash...

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

Upload: others

Post on 28-Feb-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 面向二进制程序崩溃的多级释放后重用漏洞检测技术 - CAS...Prog. Crash Reproduction Crashes # of Inst. Crash Point UAF Crash Object Ident. Ref Offset 2014-8142 PHP

数据集:

面向二进制程序崩溃的多级释放后重用漏洞检测技术

和亮 苏璞睿 杨轶 闫佳黄桦烽

联系方式: [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. 多级释放后重用导致的漏洞检测困难