日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。- g! ^( `6 j A$ U1 t3 o, G3 V
/ `- K. G4 \' U- L
Symantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。3 V% N' o; T! t
) Q* W- X6 q. K1 q1 E研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:1 I4 m# Z* e; |1 \6 n" D+ ]
& e& s; ^/ m" N/ k0 B3 S
' P2 b9 d; ]' B0 p
( U2 h* P- O) W' p" z, Wfunction at 0x10024C20 is responsible for dispatching ioctl codes:
4 l/ e# A [/ m) B! T8 ~' d2 R/ f6 o) @7 ]- H8 ~/ Z
.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)
" [% |& |% v5 e2 M# P. \* c! Z.text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap" A* R \# W6 u1 Q- F7 ]4 @) Y
.text:10024C20
$ s( ^0 {" v. _! M* V/ E.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch8 ~1 m* u- D/ M ]) q
.text:10024C20 var_31 = byte ptr -31h
' z: T- f: Y$ e: I5 h.text:10024C20 var_30 = dword ptr -30h
9 b7 K$ K4 o3 |.text:10024C20 some_var = dword ptr -2Ch9 G* }( X: L0 e
.text:10024C20 var_28 = dword ptr -28h
3 } v) a2 w+ D5 V.text:10024C20 var_24 = byte ptr -24h8 o6 q5 @1 p% s# r
.text:10024C20 var_5 = byte ptr -5
# }5 p4 V v" y8 I1 @4 s.text:10024C20 var_4 = dword ptr -4
4 c7 Y: o( Z3 I* o2 [2 t1 Y# x8 T.text:10024C20 ioctl = dword ptr 8* L, \6 S2 r4 P ]% C2 T7 @
.text:10024C20 inbuff = dword ptr 0Ch
7 z' E9 o) X" ~2 Q% o.text:10024C20 inbuff_size = dword ptr 10h
A- i9 B/ |2 w" m.text:10024C20 outbuff_size = dword ptr 14h
& N# ^# {5 O' X# \' E: u.text:10024C20 bytes_to_return = dword ptr 18h+ R. b( o3 L1 M+ s; s) S
.text:10024C202 D, R& {& H: M% c7 s8 ` q
.text:10024C20 push ebp3 [' }+ C8 Z8 l. N" B) [; q
.text:10024C21 mov ebp, esp
& X1 {. O, L9 a d.text:10024C23 sub esp, 3Ch
3 h1 r% Z w6 U2 C.text:10024C26 mov eax, BugCheckParameter2! a% D. F! \9 M% j! Y! e
.text:10024C2B xor eax, ebp2 R; n5 |8 \4 w
.text:10024C2D mov [ebp+var_4], eax
* `4 }% S9 p! d6 b- U* d$ s5 A& ^! R# H.text:10024C30 mov eax, [ebp+ioctl]
8 ?4 v o" W8 {4 H" O* J X.text:10024C33 push ebx
' A4 r# p0 W9 S& h% r.text:10024C34 mov ebx, [ebp+inbuff]+ q! L. X9 d( ^+ r) J, F
.text:10024C37 push esi( T0 S" H2 L" d6 Z& c: i/ X0 A3 G, I
.text:10024C38 mov esi, [ebp+bytes_to_return], C. K+ M0 E, `# h5 n' e8 e
.text:10024C3B add eax, 7FFDDFD8h
! ]7 P g: k% h.text:10024C40 push edi# E1 o3 m5 s! }3 Q' e) `+ V
.text:10024C41 mov edi, ecx9 l6 g" q' ~6 I
.text:10024C43 mov [ebp+some_var], esi: l% f+ T5 ^' v7 U$ s* @% S
.text:10024C46 mov [ebp+var_28], 0
0 K" W K( Y4 M0 d# W.text:10024C4D cmp eax, 0A4h ; switch 165 cases+ v* s2 {5 M, r7 s W& r6 S) L
.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case8 }8 y1 a" ^# y3 }
.text:10024C58 movzx eax, ds:byte_10025BF0[eax]
0 X& q* x7 ` d.text:10024C5F jmp ds ff_10025B50[eax*4] ; switch jump' r2 Z! y% T# [. M' h8 W
6 _% N- n4 ^2 N! {) w
[..]! L4 h# V& K B) Z% N
; g6 G( s$ V0 \
0x80022058 case: no check for outbuff_size == 0! <--- FLAW!
! f0 C+ W) V* e3 v+ y ~1 K$ S8 U5 C2 N: x0 b. z$ c0 v
.text:10024F5A lea ecx, [edi+958h]
/ L6 S3 Z5 c9 t* v. g.text:10024F60 call sub_100237B0( |2 k' J( z( ^& [! z
.text:10024F65 mov [ebp+some_var], eax6 R& y# @6 H1 L" w
.text:10024F68 test eax, eax
$ p. A! {; y' o.text:10024F6A jnz short loc_10024F7D
' Y* z# S: j0 @3 \* [7 @! H9 K.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh
. t1 L8 H: N6 }- e: y/ @$ q# K.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer, Q; i! O O, `+ @! O7 A
4 ?+ h, T [, Z% b$ d/ i/ enext in IofComplete request will be rep movsd at pointer, that is under attacker's control: P! z* i: u1 t4 ~/ A
: k: }+ P+ w0 |. w/ l( p
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.
( k, V2 O( K# V+ z
4 b6 B$ G2 ~% S& D+ s" y' h$ fSymantec表示在2月份的补丁包中修复该漏洞。
2 s! N' V' v$ P3 O- g/ ^3 ^3 `3 {3 J. a6 _7 n6 K9 a, L
相关阅读:
% c) q# C% s1 [( C& ?4 P6 A4 v: D, M' I( B$ x6 x3 R
赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。
. J9 J6 U+ j; K5 ~, u9 L
! O( C; i! @2 g3 r |