NT LAN Manager

NT LAN Manager  は、マイクロソフトによるセキュリティプロトコルであり、利用者に機密性、完全性、可用性といった情報セキュリティを提供する。NTLMは、マイクロソフトによるアプリケーションプロトコルであるLAN Manager  の後継である。NTLM バージョン2  はWindows NT 4.0 SP4から導入され、多くの攻撃に対する耐性の向上と、クライアント認証機能の追加が行われた 。

1. ベンダーによる推奨
------------

2014年現在、マイクロソフトではNTLMの利用を推奨していない 。

マイクロソフトでは、運用性向上のためにNTLMハッシュをケルベロス認証の実装に追加している。研究者によると、このような設計により、NTLMハッシュが既知の場合に攻撃者がドメインコントローラにケルベロス認証のチケットを発行させることが可能となっている

Active DirectoryによるシングルサインオンにおいてはNTLMに代わりケルベロス認証が既定の認証プロトコルとなったが、NTLMはドメインコントローラが利用できない環境において広く利用されている。例えば、クライアントがケルベロス認証に対応していない場合、サーバがドメインに参加していない場合、ユーザーがインターネット経由のリモートで認証されている場合などが挙げられる。

2. NTLMとケルベロス認証
---------------

マイクロソフトではWindows 2000以降およびActive Directoryドメインにおいてはケルベロス認証を推奨の認証プロトコルとしており、Windowsドメインに参加しているサーバで広く利用されている。

一方、NTLMは以下のような状況で現在でも使われている。

IPアドレスで指定されたサーバにクライアントが認証する
異なるActive Directoryに参加しているサーバにクライアントが認証する
ドメインに参加していないサーバーにクライアントが認証する
Active Directoryのドメインが存在しない
ファイアーウォールがケルベロス認証に必要なポートの使用を制限しているWindows Vista以降では、LMおよびNTLMは既定では使用されない。NTLMは内部認証には使用されているが、外部向けの認証ではNTLMv2が使用される。古いバージョンのWindowsでも同様の設定を行うことが可能である。

3. プロトコル
--------

NTLMはチャレンジ&レスポンス認証プロトコルであり、クライアントの認証には3つのメッセージが用いられ、データ完全性の検証のためにさらに1つのメッセージが用いられる

クライアントがサーバへのネットワークパスを確立し、対応機能を告知するNEGOTIATE_MESSAGEを送信する
サーバがクライアントの身元を確立するためのCHALLENGE_MESSAGEを返信する
クライアントがAUTHENTICATE_MESSAGEと共にチャレンジを返信するNTLMプロトコルでは1つあるいは2つのパスワードのハッシュ値が用いられ、サーバに保存される。これらのハッシュ値はパスワードと等価に扱われる。すなわち、何らかの方法でこれらのハッシュ値をサーバから取得することができれば、実際のパスワードを知ることなく認証を行うことが可能となる。ハッシュ値の一方は//LMハッシュ//、もう一方は//NTハッシュ//である。どちらも長さは16バイトである

NTLMでは一方向関数も用いられる。バージョン1ではDESをベースとしたLanMan one way function が、バージョン2ではMD4をベースとしたNT MD4 based one way function が用いられる。

3.1. NTLMv1
-----------

NTLMバージョン1  では、サーバは8バイトのランダム文字列をチャレンジとして送信することでクライアントを認証する。クライアントはこのチャレンジと秘密鍵を組み合わせる。秘密鍵は前述のパスワードのハッシュ値の1つから生成され、合わせて24バイトの文字列が返信される。実際には、パスワードのハッシュ値の両方が用いられ、それぞれから求められる24バイトの文字列の両方が送信される。サーバはクライアントから送信された文字列を検証し、クライアントを認証する。

どちらのハッシュ値も16バイトの長さを有している。5バイト分の0を追加し21バイトとした後に、7バイトずつに分割する。これら56ビットの文字列を鍵として、64ビットのチャレンジをDESによって暗号化する。得られたチャレンジの暗号化結果3つを統合し、24バイトのレスポンスとする。LMハッシュ、NTハッシュからそれぞれ得られたレスポンスをサーバへ返信する。

3.2. NTLMv2
-----------

Windows NT 4.0で導入されたNTLMバージョン2  は、NTLMv1を暗号学的により強固にしたものである。

NTLMv2では、8バイトのサーバチャレンジを2つクライアントへ送信する。それぞれに対するレスポンスは、サーバチャレンジ、ランダムに生成されたクライアントチャレンジ、ユーザのパスワードやそのほかの認証情報のHMA-MD5ハッシュの3つのHMAC-MD5ハッシュを含んでいる。

2つのレスポンスでは、クライアントチャレンジのフォーマットが異なっている。短い方のレスポンスでは、8バイトのランダム文字列をクライアントチャレンジとして用いる。レスポンスの検証のために、サーバはこのクライアントチャレンジをレスポンスの一部として受け取る。この短いレスポンスでは、8バイトのクライアントチャレンジを16バイトに伸ばしたうえでNTLMv1プロトコルと同様の手法で24バイトのレスポンスとする。非公式のドキュメントでは、このレスポンスはLMv2と呼ばれる。

もう一方のレスポンスでは、NT Timeフォーマットによる現在時刻、8バイトのランダム文字列、ドメイン名、標準化のための埋め草を含む可変長のクライアントチャレンジを用いる。この可変長クライアントチャレンジを含むため、こちらのレスポンスも可変長となる。非公式のドキュメントではこちらのレスポンスはNTv2と呼ばれる。

LMv2とNTv2はいずれも、サーバチャレンジ、クライアントチャレンジ、ユーザのパスワードやそのほかの認証情報のハッシュとなる。

3.3. NTLM2セッション
---------------

NTLM2セッションはMS-CHAPv2と類似している。認証にNTLMv1を、セッションのセキュリティにNTLMv2を利用している。

NTLM2セッションは、8バイトのクライアントチャレンジを8バイトのサーバチャレンジと合わせたうえでMD5ハッシュをとる以外はNTLMv1アルゴリズムと同じである。ハッシュの前半はNTLMv1におけるチャレンジと一致する。クライアントチャレンジはレスポンスの1つの24バイトのスロットとして返信され、計算された24バイトのレスポンスは異なるスロットとして返信される。

これは既存のドメインコントローラにおける互換性を維持しつつ、辞書攻撃への耐性を強化したNTLMv1の変形と言える。チャレンジの選択にクライアントが関与しない場合、サーバ側がレインボーテーブルによって攻撃が可能となる 。

既存のNTLMv1インフラではチャレンジ/レスポンスの組はサーバによって検証されないが、ドメインコントローラに送ることで検証が可能となる。NTLM2セッションを用いることで、サーバチャレンジをサーバ・クライアントチャレンジのハッシュで代用することでこれら古いインフラを継続して利用可能となる。

4. 脆弱性
------

NTLMは広く用いられており、古いシステムとの互換性維持のために新しいシステムにおいても利用されている。NTLMはリフレクション攻撃の一種であるpass the hashに対して脆弱である 。例えば、Metasploitを用いてあるマシンから認証情報を取得することで、他のマシンの制御を奪うことが可能である。Squirtle toolkitによって、ウェブサイトへのクロスサイトスクリプティング攻撃をNTLM経由での攻撃に利用することも可能である 。

2010年2月、WindowsのNTLM認証メカニズムの実装における複数の欠陥がAmplia Securityによって発見された。この欠陥を利用することで、攻撃者がファイルへの読み込み/書込み権限やリモートでのコード実行の権限を取得することが可能となる。攻撃の1つは、NTLMにおける疑似乱数とチャレンジ&レスポンス認証を推測可能なものであった。これらの欠陥は、Windowsのすべてのバージョンで17年以上にわたり存在していたものである。セキュリティアドバイザリでは、これとは異なる完全に動作するエクスプロイトが含まれていた。これらの欠陥のすべてはMS10-012によって修正された 。

5. 脚注
-----

6. 関連項目
-------

LAN Manager
ケルベロス認証

7. 外部リンク
--------

[1]
[2]
[3] Personal HTTP and SOCKS5 proxy for NTLM-unaware applications 
[4] A detailed analysis of the NTLM protocol.
[5]
[6]
[7] – a free implementation.
[8] software that allows users to authenticate via an MS Proxy Server.
[9] – NTLM set-up instructions for Samba and Midgard on Linux
[10]
[11] Full NTLM security service provider with //server-side NETLOGON validation// 
[12] NTLMv2 API and Servlet Filter for Java
[13]
[14]
[15]