日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。' L9 S. t# `& f: B8 E: n
+ {$ N/ x- w: n4 E" V- K% Y
Symantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。5 N" F. T+ h) X0 v4 W( z
) q4 q+ @% u& z |9 v, e$ u
研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:
' Y2 f& l7 A- J; o/ W% B
# G" Y& }$ i$ ] & o! b/ N1 r9 a3 E$ m9 k
9 M6 x( j, t) M, \* k
function at 0x10024C20 is responsible for dispatching ioctl codes:, E0 j; x( X$ r. [
. x/ Y0 j; v1 @( _/ O
.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)
, j% k0 j/ i- n0 K: A" Y" h4 }" v" N6 q.text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap
& F% {9 \4 B! I0 j, t.text:10024C20
1 M9 F; {! \7 @! x( ]; ]: T.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch0 l2 \/ {: @$ b! j
.text:10024C20 var_31 = byte ptr -31h3 b8 f! \, q& T) N
.text:10024C20 var_30 = dword ptr -30h
6 c! j4 @! U6 c) F2 f. ^9 T.text:10024C20 some_var = dword ptr -2Ch, ~- R! _% E$ M
.text:10024C20 var_28 = dword ptr -28h& C$ @+ P$ x8 A* W$ m8 r
.text:10024C20 var_24 = byte ptr -24h
: M; B, I' ~8 K+ T+ S" B4 P.text:10024C20 var_5 = byte ptr -5
$ v3 `& D M, E3 ~, E.text:10024C20 var_4 = dword ptr -4# x& F' g; P9 p- t w4 A
.text:10024C20 ioctl = dword ptr 8
) ~ B" i. S, L1 v- N) {.text:10024C20 inbuff = dword ptr 0Ch- J+ [7 H: Z. `
.text:10024C20 inbuff_size = dword ptr 10h; E6 k ]' p; n/ F( }/ G- l& d" a
.text:10024C20 outbuff_size = dword ptr 14h' K1 O( a2 g6 R6 z: n3 y* l6 H
.text:10024C20 bytes_to_return = dword ptr 18h
; J5 G0 H8 C2 B, I* M- Y% v.text:10024C20# I& ^. A8 L) x( N% {
.text:10024C20 push ebp
: o0 Q v! A& P( ]8 \+ S.text:10024C21 mov ebp, esp
: E- ]- G9 T9 k4 g.text:10024C23 sub esp, 3Ch
+ ?# `2 Y! S9 K2 Q( w.text:10024C26 mov eax, BugCheckParameter2
6 I( |8 V9 D/ ]9 K; p5 U/ w.text:10024C2B xor eax, ebp( R5 h: C* I" s5 m
.text:10024C2D mov [ebp+var_4], eax* _) N' Q- ]4 U+ j
.text:10024C30 mov eax, [ebp+ioctl]! C. E8 s* v! J$ P
.text:10024C33 push ebx
3 {3 t T' R2 j4 `1 L# X& [2 y.text:10024C34 mov ebx, [ebp+inbuff]
. F1 G/ \. C# y, |/ A: \ u4 q6 O.text:10024C37 push esi6 p! k3 `( p, ?( W4 w* }
.text:10024C38 mov esi, [ebp+bytes_to_return]
- m5 }7 v! ^8 }! ?0 z.text:10024C3B add eax, 7FFDDFD8h8 D1 G- K4 o! O0 Y# V! G: P
.text:10024C40 push edi/ W- M! ^0 b* K; j# s
.text:10024C41 mov edi, ecx j& `( F" _& m" C5 j9 p, }' K
.text:10024C43 mov [ebp+some_var], esi& T0 y' ] c2 z8 }" E
.text:10024C46 mov [ebp+var_28], 0# y/ _4 @% i0 V. d: \% C
.text:10024C4D cmp eax, 0A4h ; switch 165 cases
2 v8 H3 o; a# ^3 a0 U.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case
. l+ Y# `5 T% [) |8 o8 F$ [.text:10024C58 movzx eax, ds:byte_10025BF0[eax]5 O( S* D6 q4 W4 u! N m1 J
.text:10024C5F jmp ds ff_10025B50[eax*4] ; switch jump5 s$ _) t1 z% k. V! E/ G3 w
$ g, [9 ^& c0 R5 @( v/ @[..] y! x- c i& |+ L4 l D4 W4 y
1 W4 D* y. h B2 x' O& @
0x80022058 case: no check for outbuff_size == 0! <--- FLAW!
4 o& R$ \# r, Z9 w6 C4 [8 J G, }. L U7 G. k7 t' I
.text:10024F5A lea ecx, [edi+958h]
% t/ B) J" R4 i5 W4 l7 q4 b' {.text:10024F60 call sub_100237B0
; v2 ~) R. a' R }, v1 v.text:10024F65 mov [ebp+some_var], eax
2 D) ~9 s# M) Z' X8 ^2 K y d.text:10024F68 test eax, eax
: @* w& L: t! d$ u: q" N+ Z.text:10024F6A jnz short loc_10024F7D: u3 r5 p5 c3 w" Y. H
.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh, ~7 o( i$ J/ O3 a/ K
.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer
% M# H! \. W9 F P Q; Z" K: g, I# f, k8 U1 a: c
next in IofComplete request will be rep movsd at pointer, that is under attacker's control# A/ j; f! c% A" Q+ Z# N, e: ]. {- A
- O5 H: q2 g' P( r" \: h$ y
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. - A. Y" v# [( | x( T$ s/ ~3 z7 x
- _" b% W: f' A! D
Symantec表示在2月份的补丁包中修复该漏洞。* J6 ^$ V; ^# L2 v
9 p) [& p' m9 \0 x1 ^相关阅读:
/ B; z/ `% G& U f" [+ C e/ _; f: [: R0 P8 {2 P; o
赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。/ g* `3 Q6 ^8 O O: [
& \* _2 l4 T; T H/ ^$ q
|