受影响系统:
ALWIL Software Avast! Antivirus 5.0
ALWIL Software Avast! Antivirus 4.8
不受影响系统:
ALWIL Software Avast! Antivirus 5.0.418
描述:
BUGTRAQ ID: 38363
Avast! Antivirus是ALMIL公司开发的杀毒软件。
Avast!杀毒软件所使用的aavmker4.sys内核驱动在处理某些IOCTL请求时存在错误,本地用户可以通过特制的0xb2d60030 IOCTL请求破坏内核内存,导致内核崩溃或执行任何代码。
aavmker4.sys内核驱动的0xb2d60030 IOCTL调用未经充分验证便接受了用户输入,以下是aavmker4.sys的反汇编(avast! 4.8,文件版本4.8.1356.0):
[..]
.text:00010E46 [1] cmp eax, 0B2D60030h ; vulnerable IOCTL
.text:00010E4B jz loc_10EEF
[..]
.text:00010EEF loc_10EEF:
.text:00010EEF cmp byte_1262C, 0
.text:00010EF6 jz short loc_10F0C
[..]
.text:00010F0C loc_10F0C:
.text:00010F0C [2] mov edi, [ebx+0Ch]
.text:00010F0F [3] cmp esi, 878h ; InputBufferSize == 0x878?
.text:00010F15 jz short loc_10F21
[..]
[1] 有漏洞的IOCTL
[2] EDI指向了用户控制的IOCTL输入数据
[3] IOCTL输入数据的大小必须等于0x878
[..]
.text:00010F21 loc_10F21:
.text:00010F21 and [ebp+var_4], 0
.text:00010F25 cmp dword ptr [edi], 0
.text:00010F28 jz loc_10FC5
.text:00010F2E [4] mov esi, [edi+870h]
.text:00010F34 mov [ebp+v34_uc], esi
.text:00010F37 mov eax, ds:MmUserProbeAddress
.text:00010F3C [5] cmp esi, [eax] ; user space or kernel space?
.text:00010F3E jnb short loc_10F46
[..]
[4] 如果输入大小等于0x878,从用户提供的IOCTL输入数据获得指针值并保存在ESI中
[5] 检查ESI指向用户空间还是内核空间
[..]
.text:00010F46 loc_10F46:
.text:00010F46 push esi ; VirtualAddress
.text:00010F47 [6] call ds:MmIsAddressValid
.text:00010F4D test al, al
.text:00010F4F jz short loc_10F5F
.text:00010F51 lea eax, [esi+8]
.text:00010F54 push eax ; VirtualAddress
.text:00010F55 [7] call ds:MmIsAddressValid
.text:00010F5B test al, al
.text:00010F5D jnz short loc_10F65
[..]
[6] + [7] 如果ESI指向了内核空间中的地址,检查ESI和ESI+8是否指向有效的内存地址
[..]
.text:00010F65 loc_10F65:
.text:00010F65 [8] mov eax, [esi]
.text:00010F67 mov [ebp+v32_uc], eax
.text:00010F6A [9] mov esi, [esi+4]
.text:00010F6D mov [ebp+var_4C], esi
.text:00010F70 [10] xor [ebp+v32_uc], 55667788h
.text:00010F77 [11] xor esi, 11223344h
.text:00010F7D mov [ebp+var_4C], esi
.text:00010F80 mov eax, dword_125E8
.text:00010F85 [12] cmp eax, [ebp+v32_uc] ; check pattern1
.text:00010F88 jnz short loc_10F93
.text:00010F8A mov eax, dword_125EC
.text:00010F8F [13] cmp eax, esi ; check pattern2
.text:00010F91 jz short loc_10F99
[..]
[8] + [9] 如果地址有效,使用用户所定义的空间地址的数据填充EAX和ESI
第一个值(EAX)与0x55667788做异或(见[10]))然后与dword_125E8的0x85B8DA8F(见[12])做比较。
.data:000125E8 dword_125E8 dd 85B8DA8Fh
第二个值(ESI)与0x11223344做异或(见[11])然后与dword_125EC的0x198E3FE(见[13])做比较。
.data:000125EC dword_125EC dd 198E3FEh
如果均匹配,就会执行以下代码:
[..]
.text:00010F99 loc_10F99:
.text:00010F99 xor edx, edx
.text:00010F9B mov eax, [ebp+v34_uc]
.text:00010F9E mov [eax], edx
.text:00010FA0 mov [eax+4], edx
.text:00010FA3 lea esi, [edi+4] ; src
.text:00010FA6 mov ecx, 21Ah ; len
.text:00010FAB mov edi, [eax+18h] ; dst
.text:00010FAE [14] rep movsd ; memcpy
[..]
在[14]使用以下参数调用memcpy函数:
memcpy (EDI, ESI, ECX);
EDI (dst):该值从用户定义的内核空间地址获得
ESI (src):指向用户控制的IOCTL输入数据
ECX (len):0x21A
如果攻击者能够临时的在内核空间中用户定义的地址存储用户控制的数据,就可以绕过[5]处的检查,memcpy()调用会导致可利用的内存破坏。
<*来源:Tobias Klein
链接:http://secunia.com/advisories/38677/
http://marc.info/?l=bugtraq&m=126698563003303&q=p3
*>
建议:
厂商补丁:
ALWIL Software
————–
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
0 条评论。