NTLM 認証
NTLM は Windows で使われるチャレンジレスポンス(challenge-response)型の認証プロトコルです。Windows NT 系(Windows NT 3.1 以降)に搭載され、SMB/HTTP などの統合 Windows 認証(Integrated Windows Authentication)で使われます。パスワードそのものはネットワークに送らず、互換性のために現在も残っています(ローカルアカウント(local account)、ワークグループ(workgroup)、Kerberos が使えない場合のフォールバック(fallback)など)。
- NT ハッシュ(NTHash / NT hash): パスワードの UTF-16LE(Unicode)を MD4 でハッシュ化した値。SAM/AD が保存するパスワードの表現で、ネットワーク認証プロトコルそのものではありません。
- NTLM プロトコル(NTLM protocol): Negotiate/Challenge/Authenticate の 3 ステップを行う認証方式です。
- NetNTLMv1/NetNTLMv2(NTLMv1/NTLMv2 response): ネットワーク認証時に生成されるチャレンジレスポンスの文字列。慣習的に「ハッシュ」と呼ばれますが、再利用可能なパスワードではありません。
主な構成要素
Section titled “主な構成要素”| 要素 | 説明 |
|---|---|
| ServerChallenge | Type 2 で送られる 8 バイトの乱数(nonce)。 |
| ClientChallenge | クライアント側が生成する 8 バイトの乱数。 |
| Timestamp | NTLMv2 blob 内の時刻(Windows FILETIME)。 |
| TargetInfo | サーバー名/ドメイン名などの AV pair(Attribute-Value)集合。 |
| NTLMv2 Hash | HMAC-MD5 を使う派生値。式: HMAC-MD5(key=NTHash, msg=Uppercase(Username) + Domain)。 |
| NTProofStr | HMAC-MD5 で計算される応答の中核。 |
| NTLMv2 Response | `NTProofStr |
認証フロー(Type 1/2/3)
Section titled “認証フロー(Type 1/2/3)”- Type 1(Negotiate): クライアントが利用可能な機能を提示します。
- Type 2(Challenge): サーバーがランダムなチャレンジを返します。
- Type 3(Authenticate): クライアントが NTHash を用いてチャレンジに対する応答を計算し送信します。
チャレンジレスポンスの可視化
Section titled “チャレンジレスポンスの可視化”sequenceDiagram
autonumber
participant C as Client
participant S as Server
C->>S: Type 1 (Negotiate)<br/>Flags, Domain/Workstation
S->>C: Type 2 (Challenge)<br/>ServerChallenge, TargetInfo, Flags
Note over C: NTLMv2 応答を生成 (response generation)
C->>S: Type 3 (Authenticate)<br/>User/Domain, NTLMv2 Response, MIC(optional)
S->>S: 応答検証 (verification) と認可 (authorization)
flowchart TB
P[Password] --> U[UTF-16LE]
U --> H[MD4 = NTHash]
H --> V[HMAC-MD5 key]
S[ServerChallenge] --> B[NTLMv2 Blob]
C[ClientChallenge] --> B
T[Timestamp] --> B
TI[TargetInfo] --> B
B --> R[HMAC-MD5 -> NTProofStr]
R --> O[NTLMv2 Response = NTProofStr || Blob]
図中の NTHash と HMAC-MD5 の計算手順と実装例は、それぞれの項目を参照してください。
NTLMv1
Section titled “NTLMv1”- NT ハッシュ(NTHash)を 21 バイトにゼロ埋めし、3 本の DES 鍵に分割して ServerChallenge を暗号化します。
- クライアントチャレンジ(ClientChallenge)やタイムスタンプ(timestamp)を使わないため、オフライン解析(offline cracking)やリレー(relay)に弱いです。
- 可能なら無効化すべきレガシー方式です。
NTLMv2
Section titled “NTLMv2”- NTLMv2 Hash を鍵に HMAC-MD5 を使って応答を生成します(NTLMv2 Hash は NTHash とユーザー/ドメイン情報から導出)。
- サーバーチャレンジに加え、クライアントチャレンジ、タイムスタンプ、ターゲット情報(TargetInfo)を含みます。
- v1 より強固ですが、SMB 署名(SMB signing)やチャネルバインディング(channel binding)等が無い場合はリレー(relay)に弱い点は変わりません。
NTLM と Windows のバージョン
Section titled “NTLM と Windows のバージョン”- NTLM は Windows NT 3.1 で導入され、以降の Windows NT 系(Windows 2000/XP/Vista/7/8/10/11 および Windows Server 系)に搭載されています。
- 現在の Windows 11 / Windows Server 2022 でも互換性のために実装は残っており、ポリシーで無効化/制限できます。
現在の Windows における認証方式
Section titled “現在の Windows における認証方式”- ドメイン参加(Active Directory domain join): 既定は Kerberos。NTLM はフォールバックとして残ります。
- Entra ID 参加(Azure AD join): OAuth 2.0 / OpenID Connect を使うクラウド認証(cloud authentication)が中心で、Windows Hello for Business(WHfB)などの鍵ベース(key-based)認証が併用されます。
- ローカルアカウント(local account): ローカルログオンは SAM に保存された NTHash を参照し、ネットワーク認証では NTLM が使われます。
現在の NTLM(運用面)
Section titled “現在の NTLM(運用面)”- ドメイン環境では Kerberos が優先され、NTLM はローカル認証・ワークグループ・Kerberos 不成立時のフォールバックとして使われます(SPN 不備、DNS 問題、時刻ずれ、信頼関係の欠如など)。
- 近年の Windows は既定で NTLMv2 応答を使用しますが、ポリシー次第で NTLMv1 を受け付ける構成になり得ます。
- ハードニングの例:
- NTLMv1 と LM を無効化。
- 「Network security: LAN Manager authentication level」「Restrict NTLM」などのグループポリシーで制限/監査。
- SMB 署名や Extended Protection for Authentication(EPA)/チャネルバインディングの導入。

