Binary Pulsar

技術寄りなセキュリティの話題について書きます

Net-LTLMv1認証の危険性

概要

前回の記事では、Pass-the-Hashの手法について解説しました。

binary-pulsar.hatenablog.jp

その際にNet-NTLMv2認証について解説しましたが、v2があるということはv1も存在します。Net-NTLMv1認証については、Pass-the-Hashの解説をする上ではそこまで必要ではないため、前回の記事ではその解説を割愛しました。しかし、Net-NTLMv1認証が用いられている環境は安全性に欠けるため、本記事ではNet-NTLMv1認証の実装とその弱点について解説します。

Net-NTLMv1認証

Net-NTLMv1認証は、古いWindows OSに用いられていた認証方式です。その実装の弱さから、Windows Server 2008およびWindows Vistaからは、LMハッシュ値とともに初期状態で無効化されました。しかし、古いWindows OSとの互換性のため、グループポリシーを操作することにより、有効化することは可能となっています。 Net-NTLMv1認証はチャレンジレスポンス方式であり、前回解説したNet-NTLMv2認証と大差ありません。ただし、Net-NTLMv1認証では、チャレンジ値はサーバ側でのみ生成され用いられます。Net-NTLMv1認証は以下の手順で行われます。

  1. クライアントからサーバに対して認証を要求する。
  2. サーバからクライアントへ、8バイトのチャレンジ値を送信する。
  3. クライアントが、認証情報とチャレンジ値を用いてNet-NTLMv1応答値を生成して、Net-NTLMv1応答値をサーバに送信する。
  4. クライアントから受信したNet-NTLMv1応答値をサーバが検証して、整合性を確認することにより認証する。

Net-NTLMv1応答値の生成手順は以下に従います。

  1. ユーザの平文パスワードのLMハッシュ値またはNTLMハッシュ値のどちらかを用いる。
  2. パスワードハッシュ値(LMおよびNTLMのいずれでも16バイト)の末尾にNULLバイトを5バイト追加することにより、データ長を21バイトに調整する。
  3. パスワードハッシュ値から作成した21バイトを、7バイトごとに分割し、それぞれ暗号鍵として利用する。
  4. 作成した3つの暗号鍵を用いることにより、サーバから受信した8バイトのチャレンジ値をDESで暗号化したものを3つ作成して連結する。

f:id:binary-pulsar:20181211010318p:plain
Net-NTLMv1応答値の生成手順

以上の手順で作成したNet-NTLMv1応答値が、サーバに送信されます。Net-NTLMv1認証では、LMハッシュ値を用いて作成されたNet-NTLMv1応答値と、NTLMハッシュ値を用いて生成されたNet-NTLMv1応答値の両方がサーバに送信され、検証されることになります。先述の通り、Net-NTLMv2認証とは異なり、Net-NTLMv1認証ではチャレンジ値を生成するのはサーバのみであるため、サーバ側でもNet-NTLMv1応答値を生成するために必要な情報をすべて保有しています。よって、クライアントから受信したNet-NTLMv1応答値をサーバで検証することにより、認証することが可能となります。

Net-NTLMv1応答値の弱点と攻撃手法

上述の通り、Net-NTLMv1応答値は56ビット(7バイト)の鍵をもちいてDESで暗号化された、8バイトのチャレンジ値を3つ連結したものです。よって、Net-NTLMv1応答値を3つに分割してそれぞれ解析することが可能です。56ビットという鍵長は、暗号学において十分な強度があるとは言えません。現代の計算機の性能では、チャレンジ値(DESの平文)がわかっている状況において現実的な時間で必ず解析することが可能と考えて良いでしょう。

Active Directoryで構成された組織のネットワークへの侵入に成功した攻撃者は、いくつかの手法によりネットワークの通信を盗聴することが可能です。攻撃者がネットワークの通信を盗聴した場合、当然ながら認証の全通信内容を取得することが可能であるため、サーバとクライアントの間でやり取りされるチャレンジ値と、認証の応答値を取得することが可能です。よって、Net-NTLMv1認証が有効である環境では、制圧に成功したホスト以外のホストを利用しているユーザのパスワードハッシュ値を、以下の手順で入手することが可能となります。

  1. 制圧に成功したホストからネットワーク上の通信を盗聴する。
  2. 他のホストとサーバの認証通信から、チャレンジ値とNet-NTLMv1応答値を盗聴により取得する。
  3. 盗聴により取得したチャレンジ値とNet-NTLMv1応答値を解析することにより、パスワードハッシュ値を取得する。

Active Directoryで構成された組織のドメインネットワークへの侵入に成功した攻撃者は、以上の手順を踏むことによりパスワードハッシュ値を取得して解析することにより、平文のパスワードを取得されてしまう可能性も考えられます。また、解析したパスワードハッシュ値を用いられて、Pass-the-Hashにより侵入範囲の拡大されてしまう可能性があります。

対策

Net-NTLMv1およびLMハッシュ値に関するセキュリティ対策について、Microsoftから公式文書が公開されています。以下のリンク先の公式文書を参考に、サーバおよびクライアントの両方で、Net-NTLMv1認証を無効化することで対策しましょう。

https://support.microsoft.com/ja-jp/help/2793313/security-guidance-for-ntlmv1-and-lm-network-authentication