日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。
7 S' E; W9 w: z, h- L- |! J% M) k6 v* B2 i1 D @- U7 T) L$ R, V/ R, b
Symantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。" |+ X- T* C+ D) a% {$ h
: v7 W% o9 L4 H- @0 ?研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:
) q. u: ^* Y8 _6 T3 i
& j6 B; ~8 ~4 L& r7 k " y( Z. R: u1 R6 k. a
' W- [- D% L- [/ K3 Q( W
function at 0x10024C20 is responsible for dispatching ioctl codes:1 R% P# p4 H* C9 P3 T! a
% O7 p; l/ j$ b- Q0 {.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)
9 T7 H" U, B& ].text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap
2 _6 @7 _% ?, ?6 _, S.text:10024C20
) T7 E2 ]8 f1 \ i1 g# }2 b.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch
( r9 ^4 o! ^0 ]+ n+ {( X: N2 S.text:10024C20 var_31 = byte ptr -31h
" ^1 k8 e# s1 J, w( Z" ^) ^.text:10024C20 var_30 = dword ptr -30h
3 B$ m1 F/ ~9 ?4 A! L.text:10024C20 some_var = dword ptr -2Ch
0 N4 W$ W4 P2 q% V% I.text:10024C20 var_28 = dword ptr -28h/ @. i' i+ m* O- y
.text:10024C20 var_24 = byte ptr -24h
% M3 D, ~) h5 a.text:10024C20 var_5 = byte ptr -59 ^# L: E- g. @
.text:10024C20 var_4 = dword ptr -4
- W ^0 @; f) I$ j- d' {9 B.text:10024C20 ioctl = dword ptr 8( I' b$ t& s% S; R' j* A" e) c
.text:10024C20 inbuff = dword ptr 0Ch
z9 o; O V# ~% p.text:10024C20 inbuff_size = dword ptr 10h
; {% L0 S5 _/ L# N5 u. L6 ?4 d' h.text:10024C20 outbuff_size = dword ptr 14h' e. d" U8 M9 t( z; @
.text:10024C20 bytes_to_return = dword ptr 18h
' k/ L$ k9 E2 b.text:10024C20: W. v& d8 u5 G, i! b; e% `3 z
.text:10024C20 push ebp
5 {3 {. k- N* Y6 b* h: @' T' n9 x.text:10024C21 mov ebp, esp- H6 [! k* F9 Y* p
.text:10024C23 sub esp, 3Ch
) u! @( y, [2 }0 l. H9 R.text:10024C26 mov eax, BugCheckParameter2. k+ Y% E1 s+ b+ z' V
.text:10024C2B xor eax, ebp
( o7 ^& p+ t: L4 K1 l.text:10024C2D mov [ebp+var_4], eax5 d! q6 i; u: i# `1 S- v; E
.text:10024C30 mov eax, [ebp+ioctl]
3 m: U- T+ N3 Q9 x& V.text:10024C33 push ebx
8 _; a2 ^6 U4 F" o* @4 s3 g+ E.text:10024C34 mov ebx, [ebp+inbuff]
9 w0 G* V/ v2 M' v. w# K1 w0 y.text:10024C37 push esi
# I, c) _- b8 _# T9 W.text:10024C38 mov esi, [ebp+bytes_to_return]4 ? n6 X4 J( U$ _% d
.text:10024C3B add eax, 7FFDDFD8h
H, L: h( r: y) w p.text:10024C40 push edi
& ~, u7 A5 X- N9 e1 p$ K.text:10024C41 mov edi, ecx# d0 w) m/ n6 l- x% y
.text:10024C43 mov [ebp+some_var], esi
+ L* Y' J8 Y Z.text:10024C46 mov [ebp+var_28], 01 [4 D2 Z& w+ X- j& U5 {5 \
.text:10024C4D cmp eax, 0A4h ; switch 165 cases
1 e0 N) v& R* \.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case
" q' A3 q& p( s" F! H& S$ Y% X.text:10024C58 movzx eax, ds:byte_10025BF0[eax]
3 F+ o4 L, M: g; v$ G.text:10024C5F jmp dsff_10025B50[eax*4] ; switch jump o1 {+ j) m7 U6 x7 n* c6 g
) v# r! d+ Y# b% B[..]3 E; R- s7 b- k8 \ I% {! `# `
/ _! j" N6 E6 v& X0x80022058 case: no check for outbuff_size == 0! <--- FLAW!, R! b& {) W; y% c6 W$ {, c& x' q4 A
6 \: e6 I9 o" I) L/ x3 E.text:10024F5A lea ecx, [edi+958h]
* N6 i6 f& r* k& z, [. {.text:10024F60 call sub_100237B0
7 |) A/ N% `' L0 }2 j.text:10024F65 mov [ebp+some_var], eax
" [6 z% m! y- _# \" q.text:10024F68 test eax, eax9 |, Z$ ^6 M, I5 A
.text:10024F6A jnz short loc_10024F7D) s$ d8 h. M/ b" U
.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh" J& d0 A4 \, D8 ]$ e7 c" Y
.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer; Q! f$ }0 u) y! t4 K
+ ?, u7 l- R1 D3 t8 o' }8 U
next in IofComplete request will be rep movsd at pointer, that is under attacker's control
& I0 r$ I9 q3 \$ b* f5 ~% @! d/ ?1 ^( C# q1 ?$ M" T L+ N
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. " t6 a" J, L0 Q) H w
Z3 l5 ^% f2 l9 L
Symantec表示在2月份的补丁包中修复该漏洞。
- Y0 C6 ^5 k' m' q# I: Z
f* J- v& l9 r: T/ |; I, h/ Q( m9 o/ Y0 a相关阅读:
v: F) v1 s7 a# j& W& @5 _+ j% o" y
赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。7 V$ {4 n- l# _ M) h0 B* D/ k. K+ C
% T' g0 ~: ]7 G1 k
|