マイクロソフト セキュリティ情報 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 で、プログラムが大きく異なります。

よって、パッチ当ては非常に困難です。

関連記事:
9月の Windows Update とWindows 2000/XP SP2

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です