日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。' ~, h3 `/ q+ v* M" h( X) D; }8 v" _' V
; Z2 p. Y8 I% k3 x2 W% q! C% n
Symantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。
. R1 z- j- k$ [9 N" V4 c( ^& }9 d6 L8 J
研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:5 f1 S- f" l5 m- |3 ]0 `
! Z) [! ?- ^$ S' `4 J
$ {4 n" l4 X5 [0 Z/ R1 }
/ W$ i5 q$ x/ f8 I/ k9 Zfunction at 0x10024C20 is responsible for dispatching ioctl codes:7 b; Q6 W6 y5 H: R8 l
& v" D) `9 N/ C" v, |1 H8 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 H3 @3 C* ]8 K2 k# q# W3 T.text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap
X" l9 q5 _- k" T.text:10024C20- \7 ?0 @' R1 _7 h$ T9 P: }! i
.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch
2 } a4 Z7 ~' e( ^1 L& `.text:10024C20 var_31 = byte ptr -31h( {/ i7 a+ T+ Q# }! I4 x
.text:10024C20 var_30 = dword ptr -30h
% o7 [% H& U: }; I* g& E6 T.text:10024C20 some_var = dword ptr -2Ch
0 b! w0 x2 ^4 E# m. U6 z.text:10024C20 var_28 = dword ptr -28h1 q/ _+ }: c8 `. K
.text:10024C20 var_24 = byte ptr -24h
; f- Q$ ]$ c- k/ y" {& U3 ?$ a5 k P1 |.text:10024C20 var_5 = byte ptr -5
2 h" `- R$ G; E6 S0 R.text:10024C20 var_4 = dword ptr -4
% ]% \0 f) g, O0 m: {: S) l# V.text:10024C20 ioctl = dword ptr 8+ K7 t$ e: o+ N( v8 a0 [
.text:10024C20 inbuff = dword ptr 0Ch
, P& O/ V. w9 C. i% z.text:10024C20 inbuff_size = dword ptr 10h) r0 i* K; i0 {! b) r1 t( K% H9 y# X
.text:10024C20 outbuff_size = dword ptr 14h
6 p. F' Z( F! f: [1 h- {& w.text:10024C20 bytes_to_return = dword ptr 18h0 C2 w2 [+ J( d
.text:10024C20
$ o2 O. w( @$ H: S/ K: E.text:10024C20 push ebp J2 s# \5 S3 o6 C0 X' n
.text:10024C21 mov ebp, esp$ W, \) e1 _0 G: C9 i% n N) ^
.text:10024C23 sub esp, 3Ch
2 ~, z3 s; K7 s4 Q; C7 s.text:10024C26 mov eax, BugCheckParameter2; `6 r1 B: f" O5 Q7 F; G4 M
.text:10024C2B xor eax, ebp Q+ ^. c2 D1 P8 Y) I
.text:10024C2D mov [ebp+var_4], eax
# ?- L5 n, A+ [3 e; N.text:10024C30 mov eax, [ebp+ioctl]" E* `; e' V8 [- v
.text:10024C33 push ebx5 P. g* o8 a8 V; M
.text:10024C34 mov ebx, [ebp+inbuff]
* |( r- t. A" T5 |: v6 C.text:10024C37 push esi
- p4 S/ Z0 V* V+ Y.text:10024C38 mov esi, [ebp+bytes_to_return], x$ W! `# d; I- l: A
.text:10024C3B add eax, 7FFDDFD8h
3 S) u% X6 y; F+ v& g.text:10024C40 push edi+ d5 {: T1 w0 ?4 }/ y2 V; W- N( ?( y
.text:10024C41 mov edi, ecx
q; M$ A/ n9 l.text:10024C43 mov [ebp+some_var], esi
s `; C) ]; t2 O1 k1 s1 ?.text:10024C46 mov [ebp+var_28], 0$ E* p1 e+ t0 ^, m9 C1 N
.text:10024C4D cmp eax, 0A4h ; switch 165 cases
% r: E, ?+ D' \" C9 I.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case3 v( |5 G2 `# {
.text:10024C58 movzx eax, ds:byte_10025BF0[eax]
, G: F E5 U& H( {.text:10024C5F jmp dsff_10025B50[eax*4] ; switch jump
7 i/ V3 C1 n9 o# a6 j x- g$ Y- ]/ c8 i
[..]
8 ? B2 Y2 k9 H! I
1 E C' d' [6 q% L0x80022058 case: no check for outbuff_size == 0! <--- FLAW!9 a. T" O8 v% y; C, {9 d, G, t
6 e! |) ?. J" X1 x" \; {+ I.text:10024F5A lea ecx, [edi+958h]+ |8 ~( |& M1 H$ n# Q. f# r3 S3 G
.text:10024F60 call sub_100237B0
% C W9 f* t0 _& d.text:10024F65 mov [ebp+some_var], eax
( R& J' _+ T9 t.text:10024F68 test eax, eax. q% l+ Z& [: ? e) m5 q5 P4 Q
.text:10024F6A jnz short loc_10024F7D R1 ~5 `3 E ^0 N& e. P# s
.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh
4 A% e; X) N7 o. I9 |.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer
. A$ w6 |6 x5 Y- ]% S2 T2 a
& R' l/ p! r2 s# Tnext in IofComplete request will be rep movsd at pointer, that is under attacker's control
1 u: I7 W! Q+ ?3 h$ {5 i
: @* N% j- I8 t- g1 NDue 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.
9 w" d3 z0 R; L" E7 e' O8 T3 Z$ a3 d) |: }/ t9 k
Symantec表示在2月份的补丁包中修复该漏洞。 i) s" U- {3 z/ \' F
8 ]+ K$ \2 D! Z9 B7 @' n
相关阅读:
% j; z: M8 x2 N
4 G- n6 [ ~& C5 M/ h/ c) F% \4 n赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。 ?3 ^1 e9 d# R u4 K- }
! ?. a/ ~( @2 g9 [$ X+ N2 d, u |