目次
Windows 認証には、ローカル認証、ネットワーク認証、ドメイン認証の 3 つの部分があり、Windows 認証とパスワード キャプチャは、イントラネットへの侵入の第一歩と言えます。
1. Windows 認証プロセス
Windows ログイン パスワードは、システムのローカル SAM ファイルに保存されます. Windows にログインするとき、システムは、ユーザーが入力したパスワードと SAM ファイル内のパスワードを比較し、それらが同じであれば、認証は成功です.
SAM ファイルは %SystemRoot%\system32\config\ ディレクトリにあり、すべてのローカル ユーザーの資格情報を保存するために使用されますが、クリックしても直接表示できないことがわかります。
簡単に言えば、ローカル認証プロセスは 5 つのステップに分けることができます。
winlogon.exe - ユーザーがアカウント パスワードを入力します - lsass.exe - NTLM ハッシュに変換し、それを SAM ファイルの値と比較します - ログインが成功または失敗します。
ユーザーがログアウトして再起動し、画面をロックした後、オペレーティング システムは winlogon.exe にログイン インターフェイス、つまり入力ボックス インターフェイスを表示させ、ユーザーの入力情報を受け取った後、パスワードを lsass に渡します。このプロセス中に、平文のパスワードが保存されます. 平文のパスワードを NTLM ハッシュに暗号化し、SAM データベースを比較して認証します.
Windows ログオン プロセス (winlogon.exe): Windows NT ユーザー ログイン プログラムであり、ユーザーのログインと終了を管理するために使用されます。
LSASS: Microsoft Windows システムのセキュリティ メカニズムで、ローカル セキュリティとログイン ポリシーに使用されます。
ローカル認証でユーザーの入力パスワードを処理するために使用されるプロセスは lsass.exe であり、パスワードはこのプロセスでプレーン テキストで保存され、プロセスがパスワードを NTLM に計算します。ハッシュは sam と比較され、mimikatz を使用して、このプロセスで読み取られる平文のパスワードを取得します。
2. LM ハッシュと NTLM ハッシュ
Windows オペレーティング システムは通常、ユーザーのプレーンテキスト パスワードを暗号化するために 2 つの方法を使用します。ドメイン環境では、ユーザー情報は ntds.dit に保存され、暗号化後にハッシュされます。通常、Windows オペレーティング システムのパスワードは 2 つの部分で構成されます。1 つは LM ハッシュ、もう 1 つは NTLM ハッシュです。Windows オペレーティング システムでは、通常、ハッシュ構造は次のようになります。ユーザー名:RID:LM‐HASH:NT‐HASH
2.1 LMハッシュの原理
a. プレーンテキストのパスワードを大文字に変換します. プレーンテキストの Admin@123 を例にとると、大文字の形式は次のようになります: ADMIN@123
b. 文字列を大文字にした後、16 進数の文字列に変換し、41 44 4D 49 4E 40 31 32 33 に変換します。
c. パスワードが 14 バイト未満の場合は、0 で完了し、7 バイトの 2 つのグループに分割する必要があります
1Byte=8bit、上記の 16 進数文字列は合計 9 バイトで、5 バイトの差があり、00 00 00 00 00 を使用して
41 44 4D 49 4E 40 31
32 33 00 00 00 00 00
d. 7 バイトの 16 進数の各グループを 2 進数に変換し、各 7 ビットのグループの末尾に 0 を追加してから、それを 16 進数に変換して 8 バイト コードの 2 つのグループを取得します。
最初のグループ
e. 上記の手順で取得した 2 セットの 8 バイト コードを DES キーとして使用して、マジック ストリング KGS!@#$% を暗号化し、KGS!@#$% の 16 進法は 4B47532140232425 です。
f. 最終結果はスプライスできます。
2.2. NTLM ハッシュの原理
a. 平文パスワードを次のような 16 進形式に変換します: Admin@123 を Unicode 形式に変換します。つまり、各バイトの後に 0x00 を追加します。
好き:
Admin@123 から 16 進数 41646D696E40313233
00 を追加: 410064006D0069006E004000310032003300
b. Unicode 文字列を MD4 で暗号化して、32 ビットの 16 進数文字列を生成します