NT LAN Manager (NTLM ) は、マイクロソフト によるセキュリティプロトコルであり、利用者に機密性、完全性、可用性といった情報セキュリティ を提供する[ 1] [ 2] [ 3] 。NTLMは、マイクロソフトによるアプリケーションプロトコルであるLAN Manager (LANMAN, LM) の後継である。NTLM バージョン2 (NTLMv2) はWindows NT 4.0 SP4から導入され(Windows 2000以降で標準対応)、多くの攻撃に対する耐性の向上と、クライアント認証機能の追加が行われた[ 1] [ 4] [ 5] 。
ベンダーによる推奨
2014年現在、マイクロソフトではNTLMの利用を推奨していない[ 6] 。
"(NTLMを)実装する者は、NTLMがAES やSHA-256 といった最近の暗号メソッドをサポートしていないことを考慮してください。NTLMでは、データの完全性の検証に巡回冗長検査 (CRC) あるいは Message Digest Algorithm (RFC 1321 )(注:MD5 のこと)を、暗号化にはRC4 を用いています。
パスワードから導出される鍵は
RFC 1320 (注:MD4 のこと)および FIPS 46-2(注:DES のこと)に基づいています。以上の理由より、アプリケーションではNTLMを使用しないよう推奨します。"
マイクロソフトでは、運用性向上のためにNTLMハッシュをケルベロス認証 の実装に追加している。研究者によると、このような設計により、NTLMハッシュが既知の場合に攻撃者がドメインコントローラにケルベロス認証のチケットを発行させることが可能となっている[ 7]
Active Directory によるシングルサインオン においてはNTLMに代わりケルベロス認証が既定の認証プロトコルとなったが、NTLMはドメインコントローラ が利用できない環境において広く利用されている。例えば、クライアントがケルベロス認証に対応していない場合、サーバがドメインに参加していない場合、ユーザーがインターネット経由のリモートで認証されている場合などが挙げられる[ 1] [ 3] 。
マイクロソフトではWindows 2000以降およびActive Directoryドメインにおいてはケルベロス認証を推奨の認証プロトコルとしており[ 5] 、Windowsドメイン(英語版 ) に参加しているサーバで広く利用されている。
一方、NTLMは以下のような状況で現在でも使われている。
IPアドレス で指定されたサーバにクライアントが認証する
異なるActive Directory(ディレクトリ間の信頼モデルではなく旧式のNTLMの信頼モデルを使用している)に参加しているサーバにクライアントが認証する
ドメインに参加していないサーバーにクライアントが認証する
Active Directoryのドメインが存在しない("workgroup"あるいは"peer-to-peer"と参照されることが多い)
ファイアーウォールがケルベロス認証に必要なポート(通常はTCP 88)の使用を制限している
Windows Vista以降では、LM およびNTLMは既定では使用されない。NTLMは内部認証には使用されているが、外部向けの認証ではNTLMv2が使用される。古いバージョンのWindowsでも同様の設定を行うことが可能である。
プロトコル
NTLMはチャレンジ&レスポンス認証(英語版 ) プロトコルであり、クライアントの認証には3つのメッセージが用いられ、データ完全性の検証のためにさらに1つのメッセージが用いられる[ 8] [ 9] [ 10] [ 11]
クライアントがサーバへのネットワークパスを確立し、対応機能を告知するNEGOTIATE_MESSAGEを送信する[ 12]
サーバがクライアントの身元を確立するためのCHALLENGE_MESSAGEを返信する[ 13]
クライアントがAUTHENTICATE_MESSAGEと共にチャレンジを返信する[ 14]
NTLMプロトコルでは1つあるいは2つのパスワードのハッシュ値が用いられ、サーバ(あるいはドメインコントローラ)に保存される。これらのハッシュ値はパスワードと等価に扱われる。すなわち、何らかの方法でこれらのハッシュ値をサーバから取得することができれば、実際のパスワードを知ることなく認証を行うことが可能となる。ハッシュ値の一方はLMハッシュ (パスワードの最初の14文字からDES を基とした関数によって生成されたハッシュ値)、もう一方はNTハッシュ (パスワードをUTF-16 リトルエンディアンで表現したもののMD4 )である。どちらも長さは16バイト(128ビット)である[ 15]
NTLMでは一方向関数 も用いられる。バージョン1ではDESをベースとしたLanMan one way function (LMOWF)が、バージョン2ではMD4 をベースとしたNT MD4 based one way function (NTOWF)が用いられる。[ 15] [ 16]
NTLMv1
NTLMバージョン1 (NTLMv1) では、サーバは8バイトのランダム文字列をチャレンジとして送信することでクライアントを認証する。クライアントはこのチャレンジと秘密鍵を組み合わせる。秘密鍵は前述のパスワードのハッシュ値の1つから生成され、合わせて24バイトの文字列が返信される。実際には、パスワードのハッシュ値の両方が用いられ、それぞれから求められる24バイトの文字列の両方が送信される。サーバはクライアントから送信された文字列を検証し、クライアントを認証する。
どちらのハッシュ値も16バイトの長さを有している。5バイト分の0を追加し21バイトとした後に、7バイト(56ビット)ずつに分割する。これら56ビットの文字列を鍵として、64ビットのチャレンジをDESによって暗号化する。得られたチャレンジの暗号化結果3つを統合し、24バイトのレスポンスとする。LMハッシュ、NTハッシュからそれぞれ得られたレスポンスをサーバへ返信する。
C = 8-byte server challenge, random
K1 | K2 | K3 = NT-Hash | 5-bytes-0
R1 = DES(K1,C) | DES(K2,C) | DES(K3,C)
K1 | K2 | K3 = LM-Hash | 5-bytes-0
R2 = DES(K1,C) | DES(K2,C) | DES(K3,C)
response = R1 | R2
NTLMv2
Windows NT 4.0 で導入された[ 17] NTLMバージョン2 (NTLMv2) は、NTLMv1を暗号学的により強固にしたものである。
NTLMv2では、8バイトのサーバチャレンジを2つクライアントへ送信する。それぞれに対するレスポンスは、サーバチャレンジ、ランダムに生成されたクライアントチャレンジ、ユーザのパスワードやそのほかの認証情報のHMA-MD5ハッシュの3つのHMAC -MD5 ハッシュを含んでいる。
2つのレスポンスでは、クライアントチャレンジのフォーマットが異なっている。短い方のレスポンスでは、8バイトのランダム文字列をクライアントチャレンジとして用いる。レスポンスの検証のために、サーバはこのクライアントチャレンジをレスポンスの一部として受け取る。この短いレスポンスでは、8バイトのクライアントチャレンジを16バイトに伸ばしたうえでNTLMv1プロトコルと同様の手法で24バイトのレスポンスとする。非公式のドキュメントでは、このレスポンスはLMv2と呼ばれる。
もう一方のレスポンスでは、(1)NT Timeフォーマットによる現在時刻、(2)8バイトのランダム文字列(以下の式におけるCC2)、(3)ドメイン名 、(4)標準化のための埋め草を含む可変長のクライアントチャレンジを用いる。この可変長クライアントチャレンジを含むため、こちらのレスポンスも可変長となる。非公式のドキュメントではこちらのレスポンスはNTv2と呼ばれる。
LMv2とNTv2はいずれも、サーバチャレンジ、クライアントチャレンジ、ユーザのパスワードやそのほかの認証情報のハッシュとなる。
SC = 8-byte server challenge, random
CC = 8-byte client challenge, random
CC* = (X, time, CC2, domain name)
v2-Hash = HMAC-MD5(NT-Hash, user name, domain name)
LMv2 = HMAC-MD5(v2-Hash, SC, CC)
NTv2 = HMAC-MD5(v2-Hash, SC, CC*)
response = LMv2 | CC | NTv2 | CC*
NTLM2セッション
NTLM2セッションはMS-CHAPv2と類似している[ 18] 。認証にNTLMv1を、セッションのセキュリティにNTLMv2を利用している。
NTLM2セッションは、8バイトのクライアントチャレンジを8バイトのサーバチャレンジと合わせたうえでMD5ハッシュをとる以外はNTLMv1アルゴリズム と同じである。ハッシュの前半はNTLMv1におけるチャレンジと一致する。クライアントチャレンジはレスポンスの1つの24バイトのスロットとして返信され、計算された24バイトのレスポンスは異なるスロットとして返信される。
これは既存のドメインコントローラにおける互換性を維持しつつ、辞書攻撃への耐性を強化したNTLMv1の変形と言える。チャレンジの選択にクライアントが関与しない場合、サーバ側がレインボーテーブル によって攻撃が可能となる[ 19] 。
既存のNTLMv1インフラではチャレンジ/レスポンスの組はサーバによって検証されないが、ドメインコントローラに送ることで検証が可能となる。NTLM2セッションを用いることで、サーバチャレンジをサーバ・クライアントチャレンジのハッシュで代用することでこれら古いインフラを継続して利用可能となる。
NTLMv1
Client<-Server: SC
Client->Server: H(P,SC)
Server->DomCntl: H(P,SC), SC
Server<-DomCntl: yes or no
NTLM2 Session
Client<-Server: SC
Client->Server: H(P,H'(SC,CC)), CC
Server->DomCntl: H(P,H'(SC,CC)), H'(SC,CC)
Server<-DomCntl: yes or no
脆弱性
NTLMは広く用いられており、古いシステムとの互換性維持のために新しいシステムにおいても利用されている。NTLMはリフレクション攻撃(英語版 ) の一種であるpass the hash(英語版 ) に対して脆弱である (MS08-068)。例えば、Metasploit を用いてあるマシンから認証情報を取得することで、他のマシンの制御を奪うことが可能である[ 3] [ 20] 。Squirtle toolkitによって、ウェブサイトへのクロスサイトスクリプティング 攻撃をNTLM経由での攻撃に利用することも可能である[ 21] 。
2010年2月、WindowsのNTLM認証メカニズムの実装における複数の欠陥がAmplia Securityによって発見された。この欠陥を利用することで、攻撃者がファイルへの読み込み/書込み権限やリモートでのコード実行の権限を取得することが可能となる。攻撃の1つは、NTLMにおける疑似乱数 とチャレンジ&レスポンス認証を推測可能なものであった。これらの欠陥は、Windowsのすべてのバージョンで17年以上にわたり存在していたものである。セキュリティアドバイザリでは、これとは異なる完全に動作するエクスプロイト が含まれていた。これらの欠陥のすべてはMS10-012によって修正された[ 22] [ 23] 。
脚注
^ a b c “Introduction” , NT LAN Manager (NTLM) Authentication Protocol Specification (Microsoft), https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/d1c86e81-eb66-47fd-8a6f-970050121347?redirectedfrom=MSDN 2014年10月5日閲覧。
^ “Session Security Details” , NT LAN Manager (NTLM) Authentication Protocol Specification (Microsoft), https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/d1c86e81-eb66-47fd-8a6f-970050121347?redirectedfrom=MSDN 2014年10月5日閲覧。
^ a b c Takahashi, T (2009-12-17), “Reflecting on NTLM Reflection” , FrequencyX Blog (IBM Internet System Security (ISS)), http://blogs.iss.net/archive/NTLMReflection.html 2014年10月5日閲覧。
^ How to enable NTLM 2 authentication , Support, Microsoft, (2007-01-25), http://support.microsoft.com/?kbid=239869 2014年10月5日閲覧。
^ a b “Security Configuration” , Microsoft Windows 2000 Security Hardening Guide , TechNet (Microsoft), https://learn.microsoft.com/en-us/previous-versions/tn-archive/dd277307(v=technet.10)?redirectedfrom=MSDN 2014年10月5日閲覧。
^ “Security Considerations for Implementers” , NT LAN Manager (NTLM) Authentication Protocol Specification (Microsoft), https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/1e846608-4c5f-41f4-8454-1b91af8a755b?redirectedfrom=MSDN 2014年10月5日閲覧。
^ “Active Directory Vulnerability Disclosure: Weak encryption enables attacker to change a victim’s password without being logged ” (2014年7月15日). 2014年10月5日閲覧。
^ “Microsoft NTLM” , MSDN (Microsoft), https://learn.microsoft.com/en-us/windows/win32/secauthn/microsoft-ntlm?redirectedfrom=MSDN 2014年10月5日閲覧。
^ “Message Syntax | section 2.2” , NT LAN Manager (NTLM) Authentication Protocol Specification (Microsoft), https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/907f519d-6217-45b1-b421-dca10fc8af0d?redirectedfrom=MSDN 2014年10月5日閲覧。
^ “Connection-Oriented” , NT LAN Manager (NTLM) Authentication Protocol Specification (Microsoft), https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/1f18ef3b-7d62-4e1a-a8a7-6bc0607fad70?redirectedfrom=MSDN 2014年10月5日閲覧。
^ “Connectionless” , NT LAN Manager (NTLM) Authentication Protocol Specification (Microsoft), https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/4bc86c44-cc2f-49dd-94c5-d04bb5bcc217?redirectedfrom=MSDN 2014年10月5日閲覧。
^ “NEGOTIATE_MESSAGE” , NT LAN Manager (NTLM) Authentication Protocol Specification (Microsoft), https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/b34032e5-3aae-4bc6-84c3-c6d80eadf7f2?redirectedfrom=MSDN 2014年10月5日閲覧。
^ “CHALLENGE_MESSAGE” , NT LAN Manager (NTLM) Authentication Protocol Specification (Microsoft), https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/801a4681-8809-4be9-ab0d-61dcfe762786?redirectedfrom=MSDN 2014年10月5日閲覧。
^ “AUTHENTICATE_MESSAGE” , NT LAN Manager (NTLM) Authentication Protocol Specification (Microsoft), https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/033d32cc-88f9-4483-9bf2-b273055038ce?redirectedfrom=MSDN 2014年10月5日閲覧。
^ a b “NTLM v1 Authentication” , NT LAN Manager (NTLM) Authentication Protocol Specification (Microsoft), https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/464551a8-9fc4-428e-b3d3-bc5bfb2e73a5?redirectedfrom=MSDN 2014年10月5日閲覧。
^ “NTLM v2 Authentication” , NT LAN Manager (NTLM) Authentication Protocol Specification (Microsoft), https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/5e550938-91d4-459f-b67d-75d70009e3f3?redirectedfrom=MSDN 2014年10月5日閲覧。
^ What's New in Windows NT 4.0 Service Pack 4?
^ Glass, Eric, “NTLM” , Davenport , Source forge, https://davenport.sourceforge.net/ntlm.html
^ Varughese, Sam (2006年2月). “Rainbow Cracking and Password Security ”. Palisade. 2014年10月5日閲覧。
^ HD Moore. “MS08-068: Metasploit and SMB Relay ”. 2014年10月5日閲覧。
^
Kurt Grutzmacher (8 August 2008). Nail the Coffin Shut, NTLM is Dead . Defcon 16.
^
Hernan Ochoa and Agustin Azubel (28 July 2010). Understanding the Windows SMB NTLM Weak Nonce vulnerability (PDF) . Blackhat USA 2010.
^ Hernan Ochoa and Agustin Azubel. “Windows SMB NTLM Weak Nonce vulnerability Security Advisory ”. 2014年10月5日閲覧。
関連項目
外部リンク