MS14-019 の解析 と拡張カーネルv2.4b2
MS14-019 来ました
解析してみたところ、セキュリティホールの内容は、CMDファイルやBATファイル を起動する CMD /C を経由して起動されるが、起動者の意図しない場所にあるCMD.EXEから起動される恐れがあるというものでした。
Windows 2000 Kernel32 改造計画【BM】
というわけで、拡張カーネル v2.4bで同梱した、kernel32.dllは %systemroot%\system32\cmd.exe から強制的に起動するように実装してみました。
あと、拡張カーネル v2.4a以降v2.4bまでのゲーム対応版 kernel32.dll で一部の Vista 対応(Firefoxなども含む)アプリが不安定になる不具合が見つかりました。
というわけで、4/10 0:30に v2.4b2に差し替えてあります。
注意点として、HFSLIP 作成イメージ v13g の kernel32.dllは この影響を受けることがあります。
以下は 分析内容
CreateProcessInternalW
L7C82A17B: push [ebp-00000720h] mov esi,[ntdll.dll!wcslen] call esi push [L7C885848] mov [ebp-00000908h],eax call esi pop ecx pop ecx mov ecx,[ebp-00000908h] add ecx,[ebp-000008D4h] add eax,ecx lea ecx,[eax+edi+01h] mov [ebp-000009A4h],ecx mov eax,fs:[00000018h] mov [ebp-00000950h],eax add ecx,ecx push ecx push [L7C8856D4] mov eax,[eax+30h] push [eax+18h] call [ntdll.dll!RtlAllocateHeap] mov esi,eax mov [ebp-00000958h],esi cmp esi,ebx jz L7C8428E3 push [L7C885848] push esi call [ntdll.dll!wcscpy] pop ecx pop ecx cmp [ebp-000006ADh],bl jnz L7C82F1F9 cmp [ebp-00000716h],bl jnz L7C82F1F9 SWC7C82B44C_cmd__c_: |
旧バイナリ
L7C827A74: mov eax,fs:[00000018h] mov [ebp-000009A8h],eax push 00000210h push [L7C8856D4] mov eax,[eax+30h] push [eax+18h] call [ntdll.dll!RtlAllocateHeap] // jmp L7C842D82 // L7C842D82: mov edi,eax mov [ebp-00000854h],edi cmp edi,ebx jz L7C842A40 push 00000104h push edi push SWC7C843A5C_ComSpec call GetEnvironmentVariableW mov [ebp-00000680h],eax cmp eax,00000104h jc L7C842DD4 push C000000Fh call SUB_L7C809419 mov eax,fs:[00000018h] mov [ebp-000009B0h],eax L7C842DC5: push edi L7C842DC6: push ebx mov eax,[eax+30h] push [eax+18h] call esi jmp L7C81D09E L7C842DD4: cmp eax,ebx jnz L7C842E0F push 000000F3h push edi push SWC7C843A44_SystemRoot call GetEnvironmentVariableW mov [ebp-00000680h],eax cmp eax,000000F3h jnc L7C842E69 cmp eax,ebx jz L7C842E69 push SWC7C843A20__system32_cmd_exe push 00000104h push edi call SUB_L7C8631AF mov [ebp-000009B8h],eax L7C842E0F: push L7C843A14 push 00000108h push edi call SUB_L7C8631AF mov [ebp-000009D4h],eax cmp [ebp-00000725h],bl jnz L7C842E3F cmp [ebp-0000074Fh],bl mov [ebp-00000918h],ebx jz L7C828CCD L7C842E3F:< br /> mov dword ptr [ebp-00000918h],00000001h jmp L7C828CCD L7C828C8C: mov eax,fs:[00000018h] mov [ebp-000009F0h],eax push [ebp-0000085Ch] push ebx mov eax,[eax+30h] push [eax+18h] call [ntdll.dll!RtlFreeHeap] mov [ebp-0000085Ch],ebx jmp L7C8183F1 L7C828CB6: push [ebp-00000678h] call [ntdll.dll!NtClose] mov [ebp-00000678h],ebx jmp L7C8183FD L7C828CCD: cmp [ebp-00000725h],bl jnz L7C82CB03 cmp [ebp-0000074Fh],bl mov [ebp-00000914h],ebx jnz L7C82CB03 L7C828CEB: push edi mov edi,[ntdll.dll!wcslen] call edi push [ebp-0000079Ch] mov [ebp-00000930h],eax call edi pop ecx pop ecx mov ecx,[ebp-00000930h] add ecx,[ebp-00000914h] add eax,ecx mov ecx,[ebp-00000918h] lea ecx,[eax+ecx+01h] mov [ebp-000009DCh],ecx mov eax,fs:[00000018h] mov [ebp-000009E4h],eax add ecx,ecx push ecx push [L7C8856D4] mov eax,[eax+30h] push [eax+18h] call [ntdll.dll!RtlAllocateHeap] mov edi,eax mov [ebp-000009ECh],edi cmp edi,ebx jz L7C842E4E push [ebp-00000854h]// push edi call [ntdll.dll!wcscpy] jmp L7C842E84 SWC7C843A20__system32_cmd_exe: |
新バイナリ
SWC7C5C696C_cmd_exe__c_: unicode 'cmd.exe /c ',0000h L7C5C6984: push 00000200h push L7C5CE55C push L7C5C6940 call ExpandEnvironmentStringsW test eax,eax jnz L7C5C69AB push SWC7C5C696C_cmd_exe__c_ push L7C5CE55C call lstrcpyW L7C5C69AB: push [L7C5CB158] jmp L7C5959D3 |
Windows 2000 パッチ用コード
Comments