日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。
" p& g7 b( v: k& T1 }: z- g( `. h4 U: r7 Q: e
Symantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。
& t# s# x% G" ?8 U6 i, f( l5 J& _, ?
研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:( d) i0 Y6 i6 K: L/ P
8 s6 k7 q* b: b# i o
3 E0 d/ {" X/ S6 ^
7 I2 G# _* d; `3 g9 ^0 Q; yfunction at 0x10024C20 is responsible for dispatching ioctl codes:
( c' v) r, C( v2 U& c
7 C8 F# R+ {, S: o2 f3 U. j.text:10024C20 ; int __thiscall ioctl_handler_deep(int this, int ioctl, PVOID inbuff, unsigned int inbuff_size, unsigned int outbuff_size, PDWORD bytes_to_return)
6 R- c( j1 Z, _, K* b5 g.text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap
, F. }* F. ?& ?6 S* @& M% G( D.text:10024C209 H* G7 q' Z0 {' g5 G4 }
.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch
) F! N) U1 E" G' ].text:10024C20 var_31 = byte ptr -31h
5 G) E7 B) \4 ^: i1 Q/ v.text:10024C20 var_30 = dword ptr -30h
: M7 Q) C u2 g- ]9 {+ S.text:10024C20 some_var = dword ptr -2Ch
* ~* M' V7 ^; W' q4 r( r.text:10024C20 var_28 = dword ptr -28h; j) o" |" n, ^- }8 c* }4 T
.text:10024C20 var_24 = byte ptr -24h( p9 M% J$ Y+ H3 {) G% z
.text:10024C20 var_5 = byte ptr -5
5 S) |; u( f1 g* J. `! v.text:10024C20 var_4 = dword ptr -46 ?! E* x6 `7 z" j
.text:10024C20 ioctl = dword ptr 8$ @5 p4 s( c8 g) ~ r) {
.text:10024C20 inbuff = dword ptr 0Ch* R5 k/ \/ U$ t7 w
.text:10024C20 inbuff_size = dword ptr 10h
3 l) ^5 z1 D. N- L+ D) P.text:10024C20 outbuff_size = dword ptr 14h
$ s; w: b% _# i/ s$ t.text:10024C20 bytes_to_return = dword ptr 18h
8 |; R& q3 M: l0 Q+ o.text:10024C20/ u$ i: K$ A8 g- R- b6 Y
.text:10024C20 push ebp$ I; `, n: P' t1 w8 I% v
.text:10024C21 mov ebp, esp- z' B8 m! ^5 |
.text:10024C23 sub esp, 3Ch& s8 P: J: Y- v
.text:10024C26 mov eax, BugCheckParameter2
, O. m$ a% X+ M5 X! V: X.text:10024C2B xor eax, ebp% g4 N& \+ F" q; f9 ]/ _5 a: `
.text:10024C2D mov [ebp+var_4], eax
: j! ~9 r6 J' n* o p, `.text:10024C30 mov eax, [ebp+ioctl]; C5 l6 `$ X, V2 p
.text:10024C33 push ebx
$ j P) M6 v; @6 x: ^6 H.text:10024C34 mov ebx, [ebp+inbuff]0 V% N: G! Z( S/ c4 J7 _# n" x
.text:10024C37 push esi
H0 N# }& c1 n- W* _1 g: U& z7 ?.text:10024C38 mov esi, [ebp+bytes_to_return]& a) h& w: Z, V' d0 j% s4 b
.text:10024C3B add eax, 7FFDDFD8h9 Z B* C1 X$ V9 f3 _
.text:10024C40 push edi
* m, s8 t) h& h* M' S8 }: x4 s* a.text:10024C41 mov edi, ecx& O, Y7 ]- J( H4 L+ s3 y$ m' D0 w
.text:10024C43 mov [ebp+some_var], esi
; G$ M |+ ?, _.text:10024C46 mov [ebp+var_28], 0
, ^% d* l( I( \7 _7 @, b.text:10024C4D cmp eax, 0A4h ; switch 165 cases- [* M! I g7 y- W6 v' Q
.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case
" E. S: ]3 ^! L. z! w9 a3 C: O, h.text:10024C58 movzx eax, ds:byte_10025BF0[eax]
# S" S+ M6 \" G2 m8 i5 Y4 ?.text:10024C5F jmp ds ff_10025B50[eax*4] ; switch jump
f; Z9 k& @. A0 b6 w9 \7 ]9 K# e5 J8 n& D6 [$ A5 X2 O
[..]" [9 [. f' Y4 H* v" y# d( S
4 A% x# U* _+ Q: _2 Q& I/ D' N0x80022058 case: no check for outbuff_size == 0! <--- FLAW!
) ]$ o) y) n: m0 O1 T
" `" L( W5 b0 ^2 Z6 Y6 y+ q% l.text:10024F5A lea ecx, [edi+958h]: Q; X# x/ I e" D' \; K
.text:10024F60 call sub_100237B0$ n9 T0 p5 D+ w; ?. Q
.text:10024F65 mov [ebp+some_var], eax' r- y/ t, s* L4 T. o9 v5 I- \: C
.text:10024F68 test eax, eax
R1 n7 X6 X* ?6 A4 a1 K8 e.text:10024F6A jnz short loc_10024F7D" @- w7 b# F: J9 z' [
.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh
A- i) C! M; y8 M( o; W, t.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer
3 V2 v/ [ X8 P
2 i) G6 P# D# D9 Y* gnext in IofComplete request will be rep movsd at pointer, that is under attacker's control9 _& Q) h& I" d L( ^% {- I0 z+ A
- e. x3 E# D4 E T5 n+ v9 W
Due the type of vulnerability (METHO_BUFFERED with output_size == 0) exploit works only on Winows XP/2k3, cause in later Windows OS I/O manager doesn't craft IRP if ioctl is METHOD_BUFFERED and output_size == 0. ) U, p) d$ a# v2 S$ e" j
& d, i3 Y# o0 P8 m' M j
Symantec表示在2月份的补丁包中修复该漏洞。
2 ?. P- e o- c) a+ {* g+ U; a% p: ~' S& a; i9 n
相关阅读:5 N5 i n& ]$ X p+ m$ H/ v0 A
! y3 f% i, L/ |8 D! J: t
赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。
! x) P9 ]0 o7 f7 `
" y9 v) E! P# R/ I' J |