日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。' v) n9 {. [( E- T0 E( q% f# [8 N6 L
5 S: ]; k! G( `$ y# \4 e! k
Symantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。
& B, o6 K8 G0 j' _
, l4 X8 f* L" b# H研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:
/ F8 _0 O3 R, t/ }/ l( h" Q' X
$ u, E, |! ^# \- w& S5 @ q* D 3 J0 Z' H& P8 t. h2 Y/ o, Z
, o/ P' r* x8 R+ k
function at 0x10024C20 is responsible for dispatching ioctl codes:/ \) X3 V8 E1 k7 P. k
; s6 x: H" n) q0 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)
. }# O* V8 Y& e4 a" |.text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap
4 l& ^! W7 T7 f; t.text:10024C20; n4 r3 j: g+ V1 t; {
.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch. T# i- i! H) j. ^5 P# M
.text:10024C20 var_31 = byte ptr -31h" e" q* I+ c% _5 J0 K: t
.text:10024C20 var_30 = dword ptr -30h) H/ t/ ^9 Z) i, H( P/ E9 n
.text:10024C20 some_var = dword ptr -2Ch# O1 q0 h; O; K( n! G1 D
.text:10024C20 var_28 = dword ptr -28h" V* [) y* Z8 h- S% w" e
.text:10024C20 var_24 = byte ptr -24h: A3 ?* r: j$ C( z
.text:10024C20 var_5 = byte ptr -5
9 b) r$ d; @; W) Z, X.text:10024C20 var_4 = dword ptr -4/ n( z2 [) ^; c
.text:10024C20 ioctl = dword ptr 8
* I! i2 u) z m4 U: x1 `8 t.text:10024C20 inbuff = dword ptr 0Ch0 M% K; F8 G6 G
.text:10024C20 inbuff_size = dword ptr 10h" A+ h5 Y& @' k4 y' ^' R8 p' K
.text:10024C20 outbuff_size = dword ptr 14h
6 [$ }1 H) Y2 S- G( g$ u0 E& o9 N.text:10024C20 bytes_to_return = dword ptr 18h
% |* W( x1 R+ b+ L+ g& F0 P.text:10024C20! O( B# @4 L2 X& E' f7 R- F
.text:10024C20 push ebp8 R* w* o5 t3 @- A( n$ C u
.text:10024C21 mov ebp, esp( I0 ^) o6 V: j' `& c, g. \) x" n
.text:10024C23 sub esp, 3Ch8 c* |& _( x1 L+ v
.text:10024C26 mov eax, BugCheckParameter2
8 _3 J. m! D: _4 j/ A.text:10024C2B xor eax, ebp
! |% U7 y' o2 ^) e; z.text:10024C2D mov [ebp+var_4], eax( P o }. [ P* d
.text:10024C30 mov eax, [ebp+ioctl]
; I/ x( c4 b9 X. t% g J2 a4 s% X.text:10024C33 push ebx
' n) |3 c: u" ?9 I; v, ].text:10024C34 mov ebx, [ebp+inbuff]
; B& L* W- \( i3 l, V: D.text:10024C37 push esi
$ v" {- k; F- n6 I.text:10024C38 mov esi, [ebp+bytes_to_return]7 J1 A5 Z! y- q0 Q; I' Y3 ~' P% e
.text:10024C3B add eax, 7FFDDFD8h/ e9 g( A# [4 G4 b) u
.text:10024C40 push edi. {$ {; `, @: P) ~3 K$ ]8 j
.text:10024C41 mov edi, ecx0 j1 R4 G! d6 @
.text:10024C43 mov [ebp+some_var], esi0 m a# i2 R3 h# C- R
.text:10024C46 mov [ebp+var_28], 0& o% k# ^6 I. ?: ?$ `
.text:10024C4D cmp eax, 0A4h ; switch 165 cases5 q6 W! u5 [6 l, m+ K
.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case# \: m8 k/ k" ^; A C( r7 G6 U
.text:10024C58 movzx eax, ds:byte_10025BF0[eax]0 }: R J: B, E! z" \4 y
.text:10024C5F jmp ds ff_10025B50[eax*4] ; switch jump4 P. @5 K# B8 z* l _2 z8 M
3 J3 O, v0 O( `4 n( h[..]8 x% I& x8 Z" [+ ?3 s. g
9 L7 `) G) [+ d, z0x80022058 case: no check for outbuff_size == 0! <--- FLAW!
1 n1 `- h( W8 J; t
# }* [9 ?) P t2 b7 v0 E.text:10024F5A lea ecx, [edi+958h]) X* a) e' y0 H
.text:10024F60 call sub_100237B00 O0 o, I! ^ S8 n! ]
.text:10024F65 mov [ebp+some_var], eax
+ E& u7 j: Y7 N H- L.text:10024F68 test eax, eax9 p. C- y+ G7 z) d6 o
.text:10024F6A jnz short loc_10024F7D/ l+ `3 T3 ?: s2 q. R- _$ o
.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh
& a8 z0 V; _8 \) T.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer* t8 g' c( m3 I. J3 z* \! e
2 }6 ]" V, `0 ^
next in IofComplete request will be rep movsd at pointer, that is under attacker's control
. R8 p6 \3 u* ]
/ H& T& V& o9 y& Z3 i. O' B8 K8 cDue 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 j8 K1 s- @- m3 {* `# A9 H* C- p9 o' A0 O4 \; C
Symantec表示在2月份的补丁包中修复该漏洞。
1 `7 J! B8 q5 Z$ {' b9 ~3 t7 t+ G8 y* z$ _5 H
相关阅读:
8 T4 i7 M. b5 U2 _; s1 k4 d$ ]6 d) y i$ m
赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。5 K# B8 T7 A q& U2 u
9 [2 i/ x/ I1 E w; W$ ] |