日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。+ M' |4 y p) ?, E% c% t3 F
0 P# r% w0 H5 p4 vSymantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。
9 h& p8 a/ k+ _
% [: K6 F/ i' G$ Q$ |研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:9 G% f V8 G1 T( c2 ^+ a$ K4 y
/ Z1 a5 o9 T2 }" S9 h3 }7 }( ]+ s/ B
1 D6 z( g e7 l. j1 [. r
2 Z& a& g7 @% j. w2 e7 H7 z3 ]3 c/ ]; mfunction at 0x10024C20 is responsible for dispatching ioctl codes:7 w; A+ g. z2 R4 d0 P0 b
- c* i4 H. g6 A/ L0 z) V7 ~.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)
. E# d5 D. K! [$ u5 u! Z/ G) J.text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap \; z. r8 t0 \
.text:10024C20# R7 O9 s: p: t' N) z9 O
.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch6 x6 W- n) h7 h5 v% r; q
.text:10024C20 var_31 = byte ptr -31h# x) T# I" b3 k
.text:10024C20 var_30 = dword ptr -30h
, ?2 k9 ^. J1 Q6 z.text:10024C20 some_var = dword ptr -2Ch
9 ?6 V, ^; ?- j# Z. S3 N( x.text:10024C20 var_28 = dword ptr -28h+ @. ~& C3 }( q4 z# R6 i
.text:10024C20 var_24 = byte ptr -24h
! `, U! g" w: P# O2 d.text:10024C20 var_5 = byte ptr -52 p# T( T: y8 D' \2 ^
.text:10024C20 var_4 = dword ptr -4
U# _& F% g- M.text:10024C20 ioctl = dword ptr 86 G- s: q' J% W
.text:10024C20 inbuff = dword ptr 0Ch
2 J1 E- Y" D3 ~8 O: K. d8 `. `' M.text:10024C20 inbuff_size = dword ptr 10h+ k& t% {( g; `8 Y
.text:10024C20 outbuff_size = dword ptr 14h" A6 Q6 T* O8 {) _5 p6 u
.text:10024C20 bytes_to_return = dword ptr 18h$ B. a: p9 \3 ^. f* t& z- a7 o
.text:10024C20
/ V1 ]$ S8 P5 y/ f0 L, r1 X/ n.text:10024C20 push ebp# o+ h9 I0 ?3 F" Q1 f6 G) J& k
.text:10024C21 mov ebp, esp
# n' k1 U6 y* ] Y.text:10024C23 sub esp, 3Ch
& ]6 |( I$ G+ z.text:10024C26 mov eax, BugCheckParameter2
# k2 j0 M' g/ \8 H' g3 J. P. _! K.text:10024C2B xor eax, ebp& C- P: D2 M3 z
.text:10024C2D mov [ebp+var_4], eax# Q, e% l/ |9 Z, Q
.text:10024C30 mov eax, [ebp+ioctl]
# M& q, R9 S0 F* o; e.text:10024C33 push ebx% h* N8 I) O, |" F( A- m
.text:10024C34 mov ebx, [ebp+inbuff]- I7 L* z* j" E4 h2 i s" x4 p/ o# R
.text:10024C37 push esi# T7 Q( A) ?' D8 X% X( P* B) T
.text:10024C38 mov esi, [ebp+bytes_to_return]9 X9 W. M& O9 ^7 J' I& t
.text:10024C3B add eax, 7FFDDFD8h, K0 |, n- x4 L1 i
.text:10024C40 push edi( D+ d4 O' t) K/ V1 E
.text:10024C41 mov edi, ecx4 x/ i1 z' v2 ]- V2 [
.text:10024C43 mov [ebp+some_var], esi3 b- X5 L. T6 X+ J
.text:10024C46 mov [ebp+var_28], 08 c1 I" J9 l3 w! f* @
.text:10024C4D cmp eax, 0A4h ; switch 165 cases" F7 g1 N3 d* e9 t2 ~3 d# a" q
.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case
( G1 m- z) {! v8 I1 r. O.text:10024C58 movzx eax, ds:byte_10025BF0[eax]" d) r) Z0 K5 {& q! {. n( u7 ?
.text:10024C5F jmp ds ff_10025B50[eax*4] ; switch jump7 U6 P5 K& O- x1 o% q6 D# [
2 @- \* T! v0 l3 h/ x, ^$ t$ W[..]% x- Y; T7 g7 q8 f a/ r
8 ?! M' e* C- y5 }) G" J
0x80022058 case: no check for outbuff_size == 0! <--- FLAW!
6 [. C* \ @7 q& v( R* K
2 t% f9 l% {8 @.text:10024F5A lea ecx, [edi+958h]" M i# @3 d* E. h6 m6 D0 |0 R
.text:10024F60 call sub_100237B0
% r0 W2 A2 Y* c; m( Z. O& d.text:10024F65 mov [ebp+some_var], eax
) J1 P G! N: l; v% D% O9 i.text:10024F68 test eax, eax, [( P. T! y. y' m* a! E. d
.text:10024F6A jnz short loc_10024F7D$ r6 u$ C2 y8 b4 T- \; G5 s
.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh C6 e$ J: \% z( G
.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer
8 e0 `5 f: |/ q/ p# A& Y U8 o# i
/ Q: `$ a( m7 M" d3 H$ Wnext in IofComplete request will be rep movsd at pointer, that is under attacker's control
- S6 t0 [& Z8 {7 D
P" D0 z W# v$ 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.
5 i2 q1 j; }9 ^
2 p7 h1 p6 d* q; S T3 o6 JSymantec表示在2月份的补丁包中修复该漏洞。
' x# J- Z" V* d7 W* `% d8 |1 @! r$ D7 }2 |5 |* d
相关阅读:9 B( G3 l5 _2 b0 w
0 g2 ~* t6 ~ }( L( j% z
赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。
5 p }; [% F' J- a2 k4 R, \% L( m' C4 [" [+ y' f6 ^/ P
|