Macrovision SafeDisc是一款PC游戏的安全保护技术。 Macrovision SafeDisc不正确过滤用户输入,本地攻击者可以利用漏洞提升特权。 问题存在于*secdrv.sys*驱动中,在METHOD_NEITHER IOCTL存在一个输入问题,问题代码如下: .text:00015E2C cmp [ebp+var_10], 0CA002813h .text:00015E33 jz short loc_15E69 可以看到IOCTL是METHOD_NEITHER: .text:00015ED9 call dword ptr [eax+10h] ; Internal Dispatcher .text:00015EDC mov [ebp+var_1C], eax .text:00015EDF cmp [ebp+var_1C], 0Ah .text:00015EE3 jz short loc_15EFC .text:00015EE5 mov eax, [ebp+arg_4] .text:00015EE8 mov dword ptr [eax], 0C0000001h .text:00015EEE mov eax, [ebp+arg_4] .text:00015EF1 and dword ptr [eax+4], 0 .text:00015EF5 mov eax, 0C0000001h .text:00015EFA jmp short loc_15F21 .text:00015EFC ; ------------------------------------------------------------------------ --- .text:00015EFC .text:00015EFC loc_15EFC: ; CODE XREF: sub_15E12+D1j .text:00015EFC mov ecx, [ebp+var_4] .text:00015EFF mov esi, [ebp+var_C] .text:00015F02 mov eax, [ebp+arg_0] .text:00015F05 mov edi, [eax+3Ch] ; Input Buffer .text:00015F08 mov eax, ecx ;...
Macrovision SafeDisc是一款PC游戏的安全保护技术。 Macrovision SafeDisc不正确过滤用户输入,本地攻击者可以利用漏洞提升特权。 问题存在于*secdrv.sys*驱动中,在METHOD_NEITHER IOCTL存在一个输入问题,问题代码如下: .text:00015E2C cmp [ebp+var_10], 0CA002813h .text:00015E33 jz short loc_15E69 可以看到IOCTL是METHOD_NEITHER: .text:00015ED9 call dword ptr [eax+10h] ; Internal Dispatcher .text:00015EDC mov [ebp+var_1C], eax .text:00015EDF cmp [ebp+var_1C], 0Ah .text:00015EE3 jz short loc_15EFC .text:00015EE5 mov eax, [ebp+arg_4] .text:00015EE8 mov dword ptr [eax], 0C0000001h .text:00015EEE mov eax, [ebp+arg_4] .text:00015EF1 and dword ptr [eax+4], 0 .text:00015EF5 mov eax, 0C0000001h .text:00015EFA jmp short loc_15F21 .text:00015EFC ; ------------------------------------------------------------------------ --- .text:00015EFC .text:00015EFC loc_15EFC: ; CODE XREF: sub_15E12+D1j .text:00015EFC mov ecx, [ebp+var_4] .text:00015EFF mov esi, [ebp+var_C] .text:00015F02 mov eax, [ebp+arg_0] .text:00015F05 mov edi, [eax+3Ch] ; Input Buffer .text:00015F08 mov eax, ecx ; Inline memcpy .text:00015F0A shr ecx, 2 .text:00015F0D rep movsd .text:00015F0F mov ecx, eax .text:00015F11 and ecx, 3 .text:00015F14 rep movsb 可以看到疑难高呼提供的缓冲区不正确检查,可导致覆盖任意地址,即使使内核地址。不过这段代码由于覆盖的是作为输入矢量的相同缓冲区因此比较难利用。理想条件是从输入缓冲区拷贝字节到输出缓冲区。 --- .text:00015EFC .text:00015EFC loc_15EFC: ; CODE XREF: sub_15E12+D1j .text:00015EFC mov ecx, [ebp+var_4] .text:00015EFF mov esi, [ebp+var_C] ; Input Buffer .text:00015F02 mov eax, [ebp+arg_0] .text:00015F05 mov edi, [eax+3Ch] ; Output Buffer (Irp->UserBuffer) .text:00015F08 mov eax, ecx ; Inline memcpy .text:00015F0A shr ecx, 2 .text:00015F0D rep movsd .text:00015F0F mov ecx, eax .text:00015F11 and ecx, 3 .text:00015F14 rep movsb 输入缓冲区的开始4DWORDs拷贝到输出缓冲区没有任何验证,但是这里有个限制:InputBuffer[1]必须是固定值以叨叨此段代码。 Macrovision Safedisc 目前没有解决方案提供: <a href=\"http://www.macrovision.com/support/by_category/Safedisc.shtml\" target=\"_blank\">http://www.macrovision.com/support/by_category/Safedisc.shtml</a>