日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。$ h( [* B5 S, ^* S8 _ R& j
: \6 v6 \7 D, ^" ~, o O$ w8 CSymantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。5 `, G6 X0 y8 q4 l5 r& c0 q
4 e) k$ R' P0 z! I研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:6 Z0 E) E* [ J* ?
* o* c* D; R+ U; z9 s
! {1 y+ N7 q" `- |" g6 L; o* R/ l, g+ _* k3 _
function at 0x10024C20 is responsible for dispatching ioctl codes:
h2 t% j, X, n" C3 h o
/ ^# @# s V* o9 c$ H.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)
5 h- E2 s" @! c8 i7 m" _3 t3 e7 D.text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap
* @0 D" W. q. ~9 a* i( F9 P8 T.text:10024C20! Y. _2 b# I a
.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch
, T* F6 k. I- |1 p/ I) u.text:10024C20 var_31 = byte ptr -31h! h# I- K# |' H8 E
.text:10024C20 var_30 = dword ptr -30h
8 u) Z8 X/ X' i! l.text:10024C20 some_var = dword ptr -2Ch
, j% Q" V$ m: |" _. N# p: `+ V2 h, B.text:10024C20 var_28 = dword ptr -28h# H0 t+ @ k [
.text:10024C20 var_24 = byte ptr -24h
8 e9 l6 V7 F7 m+ p* N3 @4 m.text:10024C20 var_5 = byte ptr -5
3 F& X+ E! i: j7 V+ V- h; d3 z y.text:10024C20 var_4 = dword ptr -4
5 G7 ~# x$ v+ V- f.text:10024C20 ioctl = dword ptr 8
- I* ?0 }- U" Y3 w8 A.text:10024C20 inbuff = dword ptr 0Ch1 E- m' O8 U/ E8 Z1 ~9 z
.text:10024C20 inbuff_size = dword ptr 10h
6 q6 D2 j. L: B0 f2 K.text:10024C20 outbuff_size = dword ptr 14h- D% o, B& e6 m
.text:10024C20 bytes_to_return = dword ptr 18h
+ U7 } a4 [ N, w6 w+ _.text:10024C20" Z+ a, |5 x$ h8 c i7 g
.text:10024C20 push ebp
; p: ^) v r$ S# V; m.text:10024C21 mov ebp, esp
; S# E# Y: G: ]5 [) i.text:10024C23 sub esp, 3Ch' ]9 x/ @$ u6 I, r% [
.text:10024C26 mov eax, BugCheckParameter2
+ [4 \7 V4 Q0 }! H& m.text:10024C2B xor eax, ebp
6 n; m3 k, f- X8 x: R1 M; T, a.text:10024C2D mov [ebp+var_4], eax1 r9 W6 k( n. b4 `9 Y7 ^; n, {
.text:10024C30 mov eax, [ebp+ioctl]* W0 X1 e. I) V3 k/ k4 s
.text:10024C33 push ebx7 ]# f& t9 K+ W H6 i+ f
.text:10024C34 mov ebx, [ebp+inbuff]
$ m# O. V5 I$ a1 r# `9 B- b.text:10024C37 push esi
* z g. Z2 t' l! Z6 C' f. Y.text:10024C38 mov esi, [ebp+bytes_to_return]
1 D) y/ a- h- k8 d# g* S1 E.text:10024C3B add eax, 7FFDDFD8h
! s; U% V' U& Z1 ~5 g1 F.text:10024C40 push edi; j* A" V$ R! k
.text:10024C41 mov edi, ecx2 v, I$ Q: u: V
.text:10024C43 mov [ebp+some_var], esi7 @* k8 B# e7 P2 W$ W3 P* I! t
.text:10024C46 mov [ebp+var_28], 0
9 N- m/ C; O0 k.text:10024C4D cmp eax, 0A4h ; switch 165 cases9 V" ]. K# D/ |: T! l
.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case( Y/ V$ h% u5 F3 v8 Q" s7 F9 }8 `
.text:10024C58 movzx eax, ds:byte_10025BF0[eax]
/ T7 h3 D$ a* \3 H+ H/ I8 b.text:10024C5F jmp ds ff_10025B50[eax*4] ; switch jump5 m2 F4 }: x! _: j+ f
# j7 A( g; P5 t. {
[..]# O# f1 V2 Q! v9 B' ?& ~6 M
: ^, Y. W. a6 Q3 J7 U2 Q7 \0x80022058 case: no check for outbuff_size == 0! <--- FLAW!
2 m* I" l+ k `9 z7 `6 [4 z% e0 d* n
.text:10024F5A lea ecx, [edi+958h]
" ?& z) g) r) ]2 A/ T) R.text:10024F60 call sub_100237B0
& H2 `/ @0 G5 ?4 ?9 J* v( j5 x8 R.text:10024F65 mov [ebp+some_var], eax
6 W; @1 v2 U/ G& P0 G& l% N.text:10024F68 test eax, eax
^4 b& i" ?" B7 q4 y$ n.text:10024F6A jnz short loc_10024F7D
( Y6 M4 x( [1 Z, n.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh
: A; L! V0 m* F) q/ q.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer- m4 ?% ^' @$ n- n% f& [& b" j
! ]/ S' n$ ^& I2 {4 p
next in IofComplete request will be rep movsd at pointer, that is under attacker's control; S$ x( ^* B8 ]' E; B
4 _' m' U2 x0 O/ n' e* v
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. * ?. q! S% O2 J, J; v" ^* N0 k
5 ]0 U; T, M W4 X4 k2 M; `* T
Symantec表示在2月份的补丁包中修复该漏洞。
# O: q( z0 N( b4 [! N5 q* Z. q# X6 m+ }( @: I- Z
相关阅读:* w. Q3 j: e) S
2 u8 b# {% I& E: J" ]9 v) L赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。9 D7 d! M) d8 @9 h0 D
0 Z4 T5 Q5 t* e& W) E |