マイクロソフト セキュリティ情報 MS10-068 の解析
マイクロソフト セキュリティ情報 MS10-068 - 重要 : Local Security Authority Subsystem Service (LSASS) の脆弱性により、特権が昇格される (983539)
について解析を行いました。
SUB_L424CCA84: push 0000001Ch push L4239CBB8 call SUB_L4249C414 mov dword ptr [ebp-1Ch],00000001h lea eax,[ebp-24h] push eax push [ebp+0Ch] call [RPCRT4.dll!I_RpcBindingInqSecurityContext] xor esi,esi cmp eax,esi jnz L424CCAFF |
旧コード1(XPSP3)
SSZ4239CBB4_NtlmSessionKey: db 'NtlmSessionKey',0 SUB_L424CCAD8: push 00000004h push L424F69E4 push SSZ4239CBB4_NtlmSessionKey call SUB_L42425E1E retn ;------------------------------------------------------------------------------ SUB_L424CCAEF: push 0000001Ch push L4239CBC8 call SUB_L4249C448 mov esi,C0000001h mov [ebp-1Ch],esi xor eax,eax inc eax mov [ebp-24h],eax xor edi,edi cmp [L424F69E8],edi jnz L424CCB1D mov [L424F69E8],eax call SUB_L424CCAD8 L424CCB1D: lea eax,[ebp-20h] push eax push [ebp+0Ch] call [RPCRT4.dll!I_RpcBindingInqSecurityContext] cmp eax,edi jnz L424CCBAC cmp [L424F69E4],edi jz L424CCB52 lea eax,[ebp-2Ch] push eax push 0000001Ch push [ebp-20h] call [Secur32.dll!QueryContextAttributesW] mov [ebp-1Ch],eax cmp eax,C00000BBh jnz L424CCB52 mov [ebp-1Ch],esi L424CCB52: cmp [ebp-1Ch],esi jnz L424CCB69 |
新コード1(XPSP3)
L4246DC75: mov ecx,[ebx+000000A4h] cmp ecx,00000003h jz L4246DD11 cmp ecx,00000006h jz L4246DD11 mov eax,[ebx+6Ch] dec eax jz L4246DCC3 dec eax jnz L4246DD7D push 0208086Ch push 00000000h push 00000100h push [ebp-04h] call SUB_L423A62EB mov ecx,[ebp-0Ch] mov esi,[ebp+18h] mov edi,eax mov [ebx+74h],eax mov [ebx+70h],ecx rep movsd jmp L4246DD7D |
旧コード2(XPSP3)
L4246DCAB: mov ecx,[ebx+000000A4h] cmp ecx,00000003h jz L4246DD52 cmp ecx,00000006h jz L4246DD52 mov eax,[ebx+6Ch] dec eax jz L4246DD04 dec eax jnz L4246DDBE mov esi,[ebp-0Ch] cmp esi,00000040h jnc L4246DDC2 push 02080878h push 00000000h push 00000100h push [ebp-04h] call &nb sp; SUB_L423A62FB mov [ebx+70h],esi mov ecx,esi mov esi,[ebp+18h] mov edi,eax mov [ebx+74h],eax rep movsd jmp L4246DDBE |
新コード2(XPSP3)
L4248A27E: push 020A0C68h push edi push 00000100h push edx call SUB_L423A62EB mov [esi+74h],eax mov [esi+70h],edi mov dword ptr [esi+6Ch],00000002h jmp L4248A2A1 |
旧コード3(XPSP3)
L4248A2AF: push 020A0C68h push edi push 00000100h push edx call SUB_L423A62FB mov [esi+74h],eax mov [esi+70h],edi mov dword ptr [esi+6Ch],00000002h mov [esi+78h],edi jmp L4248A2D5 |
新コード3(XPSP3)
L4239CBB8: dd FFFFFFFFh dd 00000000h dd SUB_L424CCB07 ;-------------------------- SUB_L424CCB07: cmp dword ptr [ebp-1Ch],00000000h jz L424CCB15 push [ebp-28h] call jmp_Secur32.dll!FreeContextBuffer L424CCB15: retn |
旧コード4(XPSP3)
L4239CBC8: dd FFFFFFFFh dd 00000000h dd L424CCBB4 ;-------------------------- L424CCBB4: xor edi,edi SUB_L424CCBB6: cmp [ebp-24h],edi jz L424CCBC3 push [ebp-28h] call jmp_Secur32.dll!FreeContextBuffer L424CCBC3: retn |
新コード4(XPSP3)
コード4については、呼び出し元のSUB_L424CCA84がSUB_L424CCAEFになって大幅に変わっています。
SUB_L424C4FEB: mov edi,edi push ebp mov ebp,esp cmp dword ptr [ebp+0Ch],00000004h jnc L424C4FFB xor eax,eax inc eax jmp L424C5028 L424C4FFB: mov eax,[ebp+08h] movzx edx,[eax+02h] xor ecx,ecx mov ch,[eax] mov cl,[eax+01h] shl ecx,08h or ecx,edx movzx edx,[eax+03h] shl ecx,08h mov eax,ecx mov ecx,[ebp+10h] or eax,edx mov [ecx],eax add eax,00000004h cmp [ebp+0Ch],eax sbb eax,eax neg eax L424C5028: pop ebp retn 000Ch |
旧コード5(XPSP3)
SUB_L424C5005: mov edi,edi push ebp mov ebp,esp push ecx and dword ptr [ebp-04h],00000000h push esi mov esi,[ebp+0Ch] cmp esi,00000004h jnc L424C501D xor eax,eax inc eax jmp L424C505C L424C501D: mov eax,[ebp+08h] movzx edx,[eax+02h] xor ecx,ecx &nbs p; mov ch,[eax] mov cl,[eax+01h] shl ecx,08h or ecx,edx movzx edx,[eax+03h] shl ecx,08h mov eax,ecx mov ecx,[ebp+10h] or eax,edx mov [ecx],eax lea ecx,[ebp-04h] push ecx push 00000004h push eax call SUB_L4241771E test eax,eax jge L424C5055 push 00000003h pop eax jmp L424C505C L424C5055: cmp esi,[ebp-04h] sbb eax,eax neg eax L424C505C: pop esi leave retn 000Ch |
新コード5(XPSP3)
sub edi,[esi+34h] mov ecx,[ebp-04h] mov edx,[ebp+08h] lea ecx,[edi+ecx+04h] mov [edx],ecx jmp L424C5936 ;-------------------------- mov eax,[ebp-04h] sub eax,[esi+34h] mov ecx,[esi+64h] and dword ptr [ebp-08h],00000000h lea eax,[eax+ecx+04h] mov ecx,[ebp+08h] mov [ecx],eax jmp L424C5927 |
旧コード6(XPSP3)
push [ebp+08h] sub edi,[esi+34h] mov eax,[ebp-08h] push edi add eax,00000004h push eax call SUB_L4241771E test eax,eax jge L424C5987 mov dword ptr [ebp-04h],00000003h jmp L424C5987 ;-------------------------- mov eax,[esi+64h] sub eax,[esi+34h] push [ebp+08h] push eax mov eax,[ebp-08h] add eax,00000004h push eax call SUB_L4241771E test eax,eax jl L424C5974 and dword ptr [ebp-04h],00000000h jmp L424C597B |
新コード6(XPSP3)
mov dword ptr [ebp-04h],00000001h call [RPCRT4.dll!I_RpcBindingInqSecurityContext] test eax,eax jnz L424CCBC7 push ebx lea eax,[ebp-0Ch] push eax push 00000009h push [ebp+0Ch] call [Secur32.dll!QueryContextAttributesW] mov ebx,eax test ebx,ebx |
旧コード7(XPSP3)
call [RPCRT4.dll!I_RpcBindingInqSecurityContext] test eax,eax jnz L424CCCB1 cmp [L424F69E4],eax push ebx push esi mov esi,[Secur32.dll!QueryContextAttributesW] jz L424CCC37 lea eax,[ebp-10h] push eax push 0000001Ch push [ebp-04h] call esi mov ebx,eax &nb sp; cmp ebx,C00000BBh mov eax,C0000001h jnz L424CCC33 mov ebx,eax L424CCC33: cmp ebx,eax jnz L424CCC44 L424CCC37: lea eax,[ebp-10h] push eax push 00000009h push [ebp-04h] call esi mov ebx,eax L424CCC44: test ebx,ebx |
新コード7(XPSP3)
このホットフィックスは XP系では adamdsa.dll なのですが、2000では ntdsa.dll で、プログラムが大きく異なります。
よって、パッチ当ては非常に困難です。
Comments