KERBEROS.DLLの脆弱性 MS11-013の解析

続いて
マイクロソフト セキュリティ情報 MS11-013 - 緊急
の解析をしたので報告です。

この修正は以下の内容になっていました。

・ SupportsChannelBinding 関数の追加
・ Channel Binding の実装。
・ PrivChecksum on the PAC is not keyed の判定。
・ Checksum on the PAC is not keyed の判定。

ChannelBinding については

lsasrv.dll の LsaIIsSuppressChannelBindingInfo と LsaIIsChannelBindingEnabled
を参照してるんですが、あいにく Windows 2000にはこの機能が無いため機能追加はしない方向で脆弱性だけ修正することにしました。

 L7828F5F4:
          call    jmp_cryptdll.dll!CDLocateCheckSum
          mov    esi,eax
          test    esi,esi
          jl     L7828F90A
          mov    ecx,[ebp-04h]
          cmp    dword ptr [ecx+04h],00000014h
          ja     L7828F905
          lea    eax,[ebp-08h]
          push    eax
          mov    eax,[ebp+14h]
          push    00000011h
          push    [eax+04h]
          push    [eax+08h]
          call    [ecx+1Ch]

修正前1

 L7828F5F4:
          call    jmp_cryptdll.dll!CDLocateCheckSum
          mov    esi,eax
          test    esi,esi
          jl     L7828F90A
          mov    ecx,[ebp-04h]
          cmp    dword ptr [ecx+04h],00000014h
          ja     L7828F905
         test    dword ptr [ecx+08h],00000002h
          jnz    L7828F610
          mov    esi,80080342h
          jmp    L7828F90A
 L7828F610:
          lea    eax,[ebp-08h]
          push    eax
          mov    eax,[ebp+14h]
          push    00000011h
          push    [eax+04h]
          push    [eax+08h]
          call    [ecx+1Ch]

修正後1

 L78286004:
          mov    eax,00004000h
          test    eax,edx
          jz     L78286010
          or    [ebp-08h],eax
 L78286010:
          mov    eax,00000400h
          mov    esi,00000800h
          test    eax,edx
          jz     L7828602F
          test    esi,edx
          jz     L7828602C
          mov    esi,80090302h
          jmp    L782862F5

修正前2

          push    00000001h
          push    eax
          lea    eax,[ebp-2Ch]
          push    eax
          call    [ntdll.dll!RtlEqualUnicodeString]
          test    al,al
          jz     L7828F8FE
          mov    eax,[ebp-3Ch]
          push    [eax+04h]
          push    [eax+08h]
          push    [ebp+20h]
          call    SUB_L782AA27C
          mov    esi,eax
          test    esi,esi
          jl     L7828F90A
          cmp    byte ptr [ebp+1Ch],00h
          jz     L7828F90A
          lea    eax,[ebp-70h]
          push    eax
          mov    eax,[L782B0990]
          call    [eax+40h]
          mov    esi,eax
          test    esi,esi
          jl     L7828F90A
          cmp    byte ptr [ebp-60h],00h
          jnz    L7828F90A
         lea    eax,[ebp-9ch]
          push    eax
          mov    eax,[ebp-20h]
          push    [eax]
          call    jmp_cryptdll.dll!CDLocateCheckSum
          test    eax,eax
          jl    
L7828F790
          mov    eax,[ebp-9ch]
          test    dword ptr [eax+08h],00000002h
          jnz   
L7828F790
 L71C65F43:
          mov    esi,C000000Dh
 L71C65F48:
          lea    eax,[ebp-2ch]
          push    eax
          call    SUB_L7829C009
          cmp    dword ptr [ebp-08h],00000000h
          jz     L71C65F68
          mov    eax,[ebp-04h]
          test    eax,eax
          jz     L71C65F68
          lea    ecx,[ebp-08h]
          push    ecx
          call    [eax+18h]
 L71C65F68:
          test    ebx,ebx
          jz     L71C65F72
          push    ebx
          call    KerbFree
 L71C65F72:
          cmp    dword ptr [ebp-18h],00000000h
          jz     L71C65F83
          push    [ebp-18h]
          mov    eax,[L782B0990]
          call    [eax+5Ch]
 L71C65F83:
          mov    eax,esi
          jmp    L7828F954
 
L7828F790:    mov    eax,[ebp-24h]
          mov    ecx,[ebp-04h]
          mov    esi,[ebp+08h]
          mov    eax,[eax+04h]
          mov    ecx,[ecx+04h]
          sub    eax,00000004h

スタックフレームの拡張 98h->9ch

修正後2

コードの埋め込みがちょっと大変なのでリリースはしばらくお待ちください。

今月のWindows Update の欠番補完 その1

おすすめ

コメントを残す

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