日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。+ h ?; r! t6 ?8 d# Q* `! e: L
0 B8 k! O+ d( W0 J% HSymantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。6 e- N9 D0 t9 g6 w0 L4 `! A0 Q
; c" R7 O# g7 K( o3 D" U L研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:- y$ [8 f) e& S: t( _7 f+ Y
4 J% v$ G2 a9 F/ C2 E3 P- A 4 c3 M- b2 v k F# m) e
% w5 O1 R/ k7 }' O8 \5 M
function at 0x10024C20 is responsible for dispatching ioctl codes:
5 t0 o1 P% i$ d1 o. W' V
, H# u2 \8 P' {, ^.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)( i+ a' J/ u( u
.text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap
# w: _$ v) H }8 o V1 d.text:10024C20
+ \" y! k% w. r.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch
, ?- W5 Z9 W( q% e% z. \.text:10024C20 var_31 = byte ptr -31h
$ {6 H+ ~& F/ F- s.text:10024C20 var_30 = dword ptr -30h
; I ]" B: X6 @/ P0 c* N.text:10024C20 some_var = dword ptr -2Ch4 I/ I. a4 O, |7 g5 ^0 Z9 p, Z5 y/ v
.text:10024C20 var_28 = dword ptr -28h
$ u. Q$ A, a5 t0 [.text:10024C20 var_24 = byte ptr -24h
- N, n/ m# x/ t6 |: ~.text:10024C20 var_5 = byte ptr -5
4 N) p5 N6 }( ]6 U. R' l }.text:10024C20 var_4 = dword ptr -4, ?( [4 ^1 r$ Y8 }
.text:10024C20 ioctl = dword ptr 84 @9 x" s3 \( S8 X# H1 S6 } `
.text:10024C20 inbuff = dword ptr 0Ch
7 V$ K, P. r. _.text:10024C20 inbuff_size = dword ptr 10h$ o, s; e' y: |3 O) R# W% m* d
.text:10024C20 outbuff_size = dword ptr 14h
8 `7 r& i9 [, E* o) a.text:10024C20 bytes_to_return = dword ptr 18h1 R/ I' ^5 C" T0 X+ v' d7 u
.text:10024C20
+ y; i& Z' Q* m) @ {' U.text:10024C20 push ebp1 |* |; h( J3 b1 [8 y
.text:10024C21 mov ebp, esp3 f# L6 U7 |7 }( s5 C% W
.text:10024C23 sub esp, 3Ch( t1 X+ K! F& a. O
.text:10024C26 mov eax, BugCheckParameter2
s0 d( ^' ^' f M+ Q1 d# ^+ H.text:10024C2B xor eax, ebp
0 j. r p7 ?# r/ N* A4 X9 a6 m* a.text:10024C2D mov [ebp+var_4], eax7 u. k6 h6 x0 \+ @+ Q6 s
.text:10024C30 mov eax, [ebp+ioctl]
9 D. U$ K: O0 G6 D" C1 X.text:10024C33 push ebx9 v# T9 R+ l- b
.text:10024C34 mov ebx, [ebp+inbuff]: j: d2 Q1 B$ {4 E! r# h. w
.text:10024C37 push esi% C' e% M% j: a/ Y9 `" C. i
.text:10024C38 mov esi, [ebp+bytes_to_return]
1 ^% A2 K: G' ~4 X4 n1 O.text:10024C3B add eax, 7FFDDFD8h @. p8 O0 r7 h! t, M( h# w* n! a' [
.text:10024C40 push edi9 R) u1 |/ S) F/ t: i6 h( _9 K
.text:10024C41 mov edi, ecx
+ z% @0 {7 ~ ]+ d1 h4 V.text:10024C43 mov [ebp+some_var], esi3 f$ r; E" W, |5 X* F
.text:10024C46 mov [ebp+var_28], 0' \; e: `: Z F1 S5 v1 _" S/ h
.text:10024C4D cmp eax, 0A4h ; switch 165 cases
& \9 M, t; F% ~) v# o% `% n.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case
6 | H; T1 L8 ~* T. m5 D. W.text:10024C58 movzx eax, ds:byte_10025BF0[eax]
. k: e S7 [# d# X.text:10024C5F jmp ds ff_10025B50[eax*4] ; switch jump9 F9 f }+ \' K
7 v% B; }2 y9 W# ]$ N$ L8 ^
[..]4 H! L V U. P! T$ K: {" j
: W) ]( E3 d/ L8 m: I \" {0 N6 C
0x80022058 case: no check for outbuff_size == 0! <--- FLAW!; o9 ~% Z2 t* u9 n! D/ F3 d
8 J3 ^* s8 T0 M.text:10024F5A lea ecx, [edi+958h]4 u' J+ o+ ]: L. k
.text:10024F60 call sub_100237B0
$ }7 @7 Q5 N4 d+ ?- m- g0 `; M.text:10024F65 mov [ebp+some_var], eax
4 r! }5 l& ^3 t3 s3 D' F/ a.text:10024F68 test eax, eax7 L8 j# Z& E% }& |
.text:10024F6A jnz short loc_10024F7D
, M7 i! j& }( B* p9 z5 b.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh1 ~5 y% z. ?2 @$ O% n2 a2 M
.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer
: a, D( ~. }- k# B5 T7 \- Z( q1 z
6 ]9 G: Y. n8 \next in IofComplete request will be rep movsd at pointer, that is under attacker's control+ g I) l' O2 b8 D: n3 K
- H1 s3 {8 u" Z) T" w; x2 FDue 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. * d" W7 Q3 q' M- U
! y1 p7 R6 E5 c, r# tSymantec表示在2月份的补丁包中修复该漏洞。
0 ?- P; m) ?0 V8 Y7 u! }
, b% e: {- k+ p& J' j5 [相关阅读: q* j' M6 S/ R1 u
7 x# X1 X& O5 U/ c. @ e) g
赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。# R* G. H7 q/ ]" A. s) Y
d' y3 |/ E l1 ]% q! S |