日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。
3 N& F5 }1 m2 j3 l$ N: i1 f3 J
: x% B% T$ Z+ F$ Q7 C9 A& BSymantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。
/ ^' w! c# E+ ^ l7 Q! n5 ` V/ Z( V' ~1 h- d- N6 Q0 ^* Z% n4 c U8 v
研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:
2 C5 I1 N- ~& V" E( T
! Z. v9 |9 A0 U
9 O8 ^* `) B* x2 k. c
3 L$ ]; _5 p7 |% K( \, |function at 0x10024C20 is responsible for dispatching ioctl codes:
" B9 j' @ O4 C5 ?" i7 V
% V9 k2 \. m$ Y; I/ d7 P! e" g.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)
3 Z. p/ F& A2 r* F# R+ ^.text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap5 {* |8 t# R) I1 a! l6 Z
.text:10024C205 h W* `3 P) Z# J( s
.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch- V z6 [9 H4 v$ a6 o z4 P5 L
.text:10024C20 var_31 = byte ptr -31h% U* L9 t0 e4 [3 [+ v; p& i" _: ]
.text:10024C20 var_30 = dword ptr -30h
3 P1 q6 F. D* v. t* A2 D# H.text:10024C20 some_var = dword ptr -2Ch
* \5 e, }* L/ Y; M# S4 g# Y.text:10024C20 var_28 = dword ptr -28h" c+ V# d( y- G/ Y
.text:10024C20 var_24 = byte ptr -24h* i# N/ K: u4 M- p
.text:10024C20 var_5 = byte ptr -5
5 V0 ^6 E1 G* h* X.text:10024C20 var_4 = dword ptr -41 |' i6 N) x! e* {2 M; f1 |/ W0 _8 B
.text:10024C20 ioctl = dword ptr 80 g/ g) l7 a! S1 f$ x8 J) ]
.text:10024C20 inbuff = dword ptr 0Ch
5 B% _4 T j) q$ D4 Q) o.text:10024C20 inbuff_size = dword ptr 10h
: q' |; O N" F# ~5 ^9 b. s! ?, {.text:10024C20 outbuff_size = dword ptr 14h
( F. L8 {/ z3 b+ j i8 Y.text:10024C20 bytes_to_return = dword ptr 18h
B' x# s; y; m. x! \.text:10024C20; H# W7 }" l. P. b
.text:10024C20 push ebp' C; ^6 L- |1 q" f( a9 ~
.text:10024C21 mov ebp, esp! d* T3 ~7 D, Y- i* p2 [5 x9 }' Y8 Z
.text:10024C23 sub esp, 3Ch6 G. s0 ~5 H1 f g" H# I
.text:10024C26 mov eax, BugCheckParameter2- w1 t' Q0 J5 i$ f6 u
.text:10024C2B xor eax, ebp
: U; o4 J/ A L7 E) Z; Q/ ?.text:10024C2D mov [ebp+var_4], eax+ y' Z) H: v; q5 B [6 F0 Z
.text:10024C30 mov eax, [ebp+ioctl]
2 l4 p$ E2 m% ^0 v8 f& _! \& {1 M.text:10024C33 push ebx8 o J7 |7 u3 V5 m H! m5 t/ f
.text:10024C34 mov ebx, [ebp+inbuff]
2 D5 K: k; T" B/ o% b) ].text:10024C37 push esi
: Z& C4 ^- W( A- f; k/ U: k.text:10024C38 mov esi, [ebp+bytes_to_return], O, Q, I3 L* K
.text:10024C3B add eax, 7FFDDFD8h
6 g5 c1 c0 c' Y! w. O6 A.text:10024C40 push edi4 s+ b+ D* P0 g+ v( h
.text:10024C41 mov edi, ecx
, E4 ]2 a1 |- P: R" V.text:10024C43 mov [ebp+some_var], esi$ L- o. C4 ?: Z3 m _3 A& w( Z
.text:10024C46 mov [ebp+var_28], 0 U2 D9 l: Y' n" |! P$ z
.text:10024C4D cmp eax, 0A4h ; switch 165 cases
5 S5 o4 D4 b8 S) `' _8 d4 |1 g( l.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case
( Q' a/ d, Y* y.text:10024C58 movzx eax, ds:byte_10025BF0[eax]
2 ?% \& V- v; O9 H5 d.text:10024C5F jmp ds ff_10025B50[eax*4] ; switch jump3 Y# i4 \! f: J( b$ o' o v
! I' [' b! O! M+ o: H$ \' g6 j[..]6 I- o5 v. O1 ~2 b* v
, [1 v2 ?1 o* Z5 l% P0x80022058 case: no check for outbuff_size == 0! <--- FLAW!
% j: h0 h. h: e2 K! ?
8 Y" G0 |, ~* I$ U% Q, [.text:10024F5A lea ecx, [edi+958h], y# r4 }6 A. C4 e0 [
.text:10024F60 call sub_100237B00 b. D) n4 b) p P. q e& r
.text:10024F65 mov [ebp+some_var], eax
* t/ r ?$ \. ?# b7 [5 Q% f.text:10024F68 test eax, eax1 R$ W7 F" T- Y L) W1 }0 @
.text:10024F6A jnz short loc_10024F7D4 h3 y& q$ {7 ~) g4 ?
.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh! [+ K9 v8 M6 t. M, [3 a
.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer
) P q$ ^. _8 r% i0 R. |8 e! x% C& m# W6 h+ H
next in IofComplete request will be rep movsd at pointer, that is under attacker's control
9 W2 P) w7 X9 C! ^
7 q& `3 \# E. ~0 Y" |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. 8 G- J5 N! ^7 U% _% T
# a% \% D3 X$ X! | @Symantec表示在2月份的补丁包中修复该漏洞。
+ m1 G7 d) z. i8 E0 Z$ K$ S4 V
" l, d+ N" F+ p/ O8 R# [相关阅读:
2 ?1 [& z6 R7 l* `2 d7 c7 {' L1 P0 Y
1 y. y( V q# r2 j赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。" j* @% O* S: N6 ` h F% d
5 T$ P, B* B; k |