日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。
' Q! l4 v1 g9 P% d/ B4 c, u9 R* j k0 c
Symantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。) q+ q# X0 h+ r
8 ]% j+ ^ h) B" i# ]- Y$ D0 K研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:
, p: V) F' H b2 i& }* C2 S K, v* J1 \) d
( g; V z* t; X8 u; \7 y* x1 o7 ]2 V% o, }
function at 0x10024C20 is responsible for dispatching ioctl codes:
) T& }2 s7 K2 l5 i+ P
3 f5 x. B5 `# O0 [0 ]7 Q% ?7 c) 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)
7 g! V# {1 _) m+ c# Y @1 [9 x+ e9 i.text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap
) r- @7 g: }# W3 U: x' _* b O- ^. n.text:10024C200 M# i* y2 f# N" T, Q
.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch% H: m' k: Q' r4 Y& |6 K
.text:10024C20 var_31 = byte ptr -31h7 B; [5 X0 {7 l( M$ O1 U8 S
.text:10024C20 var_30 = dword ptr -30h$ `- N: `' G: x. E% A* Z" ^- L
.text:10024C20 some_var = dword ptr -2Ch
* X: C) w% O( ]: N: J l6 @.text:10024C20 var_28 = dword ptr -28h
8 D! T L' m9 u0 x- w.text:10024C20 var_24 = byte ptr -24h
! \: ?7 Q% Y6 w) Y3 T.text:10024C20 var_5 = byte ptr -50 H9 W: Z* X9 k3 T0 q* g+ S, ?4 U
.text:10024C20 var_4 = dword ptr -4* [' n% ?% y0 U
.text:10024C20 ioctl = dword ptr 8
0 y! n% O( Q* T' F9 f.text:10024C20 inbuff = dword ptr 0Ch% r9 a7 t* |$ c: h0 D
.text:10024C20 inbuff_size = dword ptr 10h
& C- i; F% i+ L' X.text:10024C20 outbuff_size = dword ptr 14h
_( i7 V x+ A" U& B H.text:10024C20 bytes_to_return = dword ptr 18h
6 ?3 ~" B- S) D( l# `! K' q.text:10024C207 T6 G+ |3 s3 a$ B
.text:10024C20 push ebp$ B, z7 k9 m1 ~
.text:10024C21 mov ebp, esp
' U/ m+ D% S, ^ `.text:10024C23 sub esp, 3Ch
0 X) p: g1 a( L( T" h; Q7 U.text:10024C26 mov eax, BugCheckParameter2
0 t/ j9 d. V" }) ~7 Y' A.text:10024C2B xor eax, ebp' H4 S( A3 H1 R1 S5 u H! ~7 H
.text:10024C2D mov [ebp+var_4], eax. B2 m) P/ Y7 s$ R' Y x, b
.text:10024C30 mov eax, [ebp+ioctl]
2 `# v- ?6 t9 H.text:10024C33 push ebx, O8 A: J( K. H* K$ n
.text:10024C34 mov ebx, [ebp+inbuff]7 V9 Q) g3 K5 W p3 c
.text:10024C37 push esi
1 a e; p A% k.text:10024C38 mov esi, [ebp+bytes_to_return]
% z2 a4 K% |- g( W.text:10024C3B add eax, 7FFDDFD8h
- [4 X* v1 X7 g. h.text:10024C40 push edi
. s: A# ?' {7 {0 X8 |/ u.text:10024C41 mov edi, ecx
0 b; I% y1 J: h; H; P.text:10024C43 mov [ebp+some_var], esi" i- Z; o+ n: I4 P0 ^1 ]$ }
.text:10024C46 mov [ebp+var_28], 0
( V$ Y: ^% s5 R; s0 ], `.text:10024C4D cmp eax, 0A4h ; switch 165 cases
3 k! m z: k" x.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case
; K. s8 ]: i8 e+ i6 H, x.text:10024C58 movzx eax, ds:byte_10025BF0[eax]
9 x- g7 b- I' ] t3 h# u4 Q.text:10024C5F jmp ds ff_10025B50[eax*4] ; switch jump
+ V; q6 c7 ]. ~ Z" m& \7 J
- O$ ]) B: l1 Z[..]
2 D. |7 V4 Y1 e5 Q6 H! g" d
% u8 W. f) }& N0 _, V. Y0x80022058 case: no check for outbuff_size == 0! <--- FLAW!
j/ M' ~. O+ N; S: m7 D6 f, }1 r4 f# J, ^4 h6 W4 {$ i
.text:10024F5A lea ecx, [edi+958h]
6 p) _; ~& @2 t! R.text:10024F60 call sub_100237B0
( |/ T+ b; y. z$ e.text:10024F65 mov [ebp+some_var], eax; l9 {9 X& \; ~: y7 a& U: W; v& X( U j
.text:10024F68 test eax, eax y1 v% M- y, t8 A& w1 W
.text:10024F6A jnz short loc_10024F7D
. E& l$ a) [# R& l; n: R7 ^* k.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh `' y* M$ N9 L) ] \3 V
.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer' h8 |/ i! a9 z2 n9 |& J
& f% h" ~) |3 j" t8 g
next in IofComplete request will be rep movsd at pointer, that is under attacker's control
! z9 p: h o) C3 U: e; B4 t" G1 b' Q4 D+ _2 e( h \" [. k
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.
/ M6 M I; {3 E' H6 u
7 K) d" p- G) K9 p" KSymantec表示在2月份的补丁包中修复该漏洞。2 c* E9 G8 \( _) R, T2 N) S# b
2 @" q! B- K3 k# b
相关阅读:6 M$ T0 j! z* q ? K3 g
1 D5 `+ D i( z. c( D# w5 T; Y
赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。
: q- L% F1 b# g% b7 @7 S
* o/ T' D+ N! j4 {( Q- r: A |