日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。! {/ @5 q/ t; Y* x8 X, `
" O4 o: D7 S4 }5 [9 F
Symantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。
1 x+ @& J& a$ L) r% S J! n6 t
研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:1 H4 D+ }+ \5 U, y& S' c- x% D% x
4 X& i- _7 w: W$ _5 [
0 S k+ \: f. ?# L0 u+ |; b# b9 ?0 g7 \
function at 0x10024C20 is responsible for dispatching ioctl codes:
, y4 |' C$ h4 e9 W
# }3 C5 F' ]' Q+ [.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)
; y, Q3 y# ~) C; U$ H.text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap
& B% t. R& g4 D3 z.text:10024C20
1 J% ]% [2 D5 ^* l9 x0 {1 u& p.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch
7 n1 N+ X& w4 o7 _) @* A.text:10024C20 var_31 = byte ptr -31h
9 }. [- `8 f7 V; c% }.text:10024C20 var_30 = dword ptr -30h
- [* D' V! N- M' N.text:10024C20 some_var = dword ptr -2Ch
: E0 v, M. F( W% A3 _+ M.text:10024C20 var_28 = dword ptr -28h
# `: Q! |! q, u.text:10024C20 var_24 = byte ptr -24h
5 b- R: C# j" l8 t/ _4 _.text:10024C20 var_5 = byte ptr -5 Q% J+ t$ q! c& V3 H: ]
.text:10024C20 var_4 = dword ptr -4
' H, F2 J1 x- n( v2 T.text:10024C20 ioctl = dword ptr 8
8 M2 C2 B: O& |+ V.text:10024C20 inbuff = dword ptr 0Ch
, J4 H; A9 O' p& S.text:10024C20 inbuff_size = dword ptr 10h
2 O5 n. z) R7 j; \.text:10024C20 outbuff_size = dword ptr 14h
4 t- c+ o( U6 H8 k0 A$ u2 T.text:10024C20 bytes_to_return = dword ptr 18h. Q5 V' T4 o3 D* D2 w# m2 c* ]3 {
.text:10024C20" s/ l9 s% K6 ^3 L8 l
.text:10024C20 push ebp
% d/ M0 B( V# @4 x% _.text:10024C21 mov ebp, esp
* B% D9 O3 u" s- e- U( z.text:10024C23 sub esp, 3Ch
D3 A& g2 h5 f7 a6 c+ Y: U.text:10024C26 mov eax, BugCheckParameter2
% S$ f' w% h6 E x$ e+ P3 Q6 R6 m.text:10024C2B xor eax, ebp
; F& q' l5 B! }0 R.text:10024C2D mov [ebp+var_4], eax4 M: W+ Z' B2 t6 N
.text:10024C30 mov eax, [ebp+ioctl]
5 u; Z" m( e3 V N( S6 D' Y4 b.text:10024C33 push ebx! W C0 w9 |+ F" r/ X: {6 k
.text:10024C34 mov ebx, [ebp+inbuff]
! ]+ l C, ~7 t" j' B; [1 q w: N( N.text:10024C37 push esi
: f& F0 F! \7 @& M; f/ {.text:10024C38 mov esi, [ebp+bytes_to_return]
( ?( S/ j* A! ]$ x1 A& S2 v.text:10024C3B add eax, 7FFDDFD8h
, \1 _; U7 A# Y.text:10024C40 push edi
! c" z; U) C" g' W: C.text:10024C41 mov edi, ecx/ y. r3 c6 n4 Z4 y& d1 g; f
.text:10024C43 mov [ebp+some_var], esi, U' E7 z& b* T+ k8 T2 P7 q8 z2 F
.text:10024C46 mov [ebp+var_28], 0" I5 j4 C j; v& v; }. Q
.text:10024C4D cmp eax, 0A4h ; switch 165 cases" M0 f) P, c6 y/ ^4 l. u* e
.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case
& E) ~. A# |; Z6 ?3 F* C.text:10024C58 movzx eax, ds:byte_10025BF0[eax]! ^0 u8 j! c) Z! T: }& g- H: c# q# T- i
.text:10024C5F jmp dsff_10025B50[eax*4] ; switch jump6 k( _- e" U3 X* r) o: y0 C, o! m
. t" ~) c, N# x+ k v
[..]
" z" P% h# f+ C" U) P# y* {( l* `# t
) q( d9 u; p/ g4 G9 G( i0x80022058 case: no check for outbuff_size == 0! <--- FLAW!
% T* S) n! W) T! [) \4 M2 ~
" R9 u/ L# d4 @( y6 ^.text:10024F5A lea ecx, [edi+958h]) |3 c1 v& v# a( d
.text:10024F60 call sub_100237B0
- A( S. t: N& e# S% s.text:10024F65 mov [ebp+some_var], eax, p. l& l0 T# l- X
.text:10024F68 test eax, eax9 z: v1 l8 ?+ u
.text:10024F6A jnz short loc_10024F7D
) w' g8 j3 S# t1 b1 h- Z' f.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh& p* \) S9 y9 O* z6 D3 D' P
.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer3 c$ Y9 W. i7 J3 Z
: P8 z/ F$ c) ]4 X0 k! i8 Znext in IofComplete request will be rep movsd at pointer, that is under attacker's control8 S* v! k; D4 G/ m+ J4 S W5 p
9 u& O: `( R: e! |5 `
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.
) S) k6 W: v* L1 r9 c w1 M# R
7 R# e9 z& f* h* P* Z3 T! eSymantec表示在2月份的补丁包中修复该漏洞。
1 R+ O8 b5 _! J* y4 I; U' o! ~( ?" H* r4 B
相关阅读:4 O1 L7 q* a; U8 ]2 k
! ]; P7 ]: k2 `2 g' N- x
赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。
/ M( E, t' G( f$ V3 p% J6 r" P+ S& g7 A# `; o; Z A
|