コンテンツにスキップ

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): ネットワーク認証時に生成されるチャレンジレスポンスの文字列。慣習的に「ハッシュ」と呼ばれますが、再利用可能なパスワードではありません。
要素説明
ServerChallengeType 2 で送られる 8 バイトの乱数(nonce)。
ClientChallengeクライアント側が生成する 8 バイトの乱数。
TimestampNTLMv2 blob 内の時刻(Windows FILETIME)。
TargetInfoサーバー名/ドメイン名などの AV pair(Attribute-Value)集合。
NTLMv2 HashHMAC-MD5 を使う派生値。式: HMAC-MD5(key=NTHash, msg=Uppercase(Username) + Domain)。
NTProofStrHMAC-MD5 で計算される応答の中核。
NTLMv2 Response`NTProofStr
  1. Type 1(Negotiate): クライアントが利用可能な機能を提示します。
  2. Type 2(Challenge): サーバーがランダムなチャレンジを返します。
  3. Type 3(Authenticate): クライアントが NTHash を用いてチャレンジに対する応答を計算し送信します。

チャレンジレスポンスの可視化

Section titled “チャレンジレスポンスの可視化”

図中の NTHash と HMAC-MD5 の計算手順と実装例は、それぞれの項目を参照してください。

  • NT ハッシュ(NTHash)を 21 バイトにゼロ埋めし、3 本の DES 鍵に分割して ServerChallenge を暗号化します。
  • クライアントチャレンジ(ClientChallenge)やタイムスタンプ(timestamp)を使わないため、オフライン解析(offline cracking)やリレー(relay)に弱いです。
  • 可能なら無効化すべきレガシー方式です。
  • NTLMv2 Hash を鍵に HMAC-MD5 を使って応答を生成します(NTLMv2 Hash は NTHash とユーザー/ドメイン情報から導出)。
  • サーバーチャレンジに加え、クライアントチャレンジ、タイムスタンプ、ターゲット情報(TargetInfo)を含みます。
  • v1 より強固ですが、SMB 署名(SMB signing)やチャネルバインディング(channel binding)等が無い場合はリレー(relay)に弱い点は変わりません。
  • 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 が使われます。
  • ドメイン環境では Kerberos が優先され、NTLM はローカル認証・ワークグループ・Kerberos 不成立時のフォールバックとして使われます(SPN 不備、DNS 問題、時刻ずれ、信頼関係の欠如など)。
  • 近年の Windows は既定で NTLMv2 応答を使用しますが、ポリシー次第で NTLMv1 を受け付ける構成になり得ます。
  • ハードニングの例:
    • NTLMv1 と LM を無効化。
    • 「Network security: LAN Manager authentication level」「Restrict NTLM」などのグループポリシーで制限/監査。
    • SMB 署名や Extended Protection for Authentication(EPA)/チャネルバインディングの導入。