Binary Pulsar

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

Pass-the-Hashの仕組み

概要

近年、Active Directoryで構築されたネットワークを侵害する上で、もっとも悪用されている手法の一つはPass-the-Hashと言えるでしょう。組織のActive Directoryドメインのネットワークへの侵入に成功した攻撃者は、Pass-the-Hashの手法を用いることで、取得に成功したパスワードハッシュ値を平文に復号することなく認証することが可能となります。本記事では、Pass-the-Hashの仕組みを解説することで、読者がその手法を理解できるようにすることを目標としています。

パスワードハッシュ値

Windows OSにおいてパスワードハッシュ値は、ユーザのパスワードを安全に保存するのみではなく、主にサーバやクライアントホストへの認証に用いられます。Pass-the-Hashという手法は、Windows OSがパスワードハッシュ値を用いて認証を実施する過程を悪用するものです。よって、Pass-the-Hashの手法を理解する上ではWindows OSのハッシュ値について理解する必要があります。

LMハッシュ値

LMハッシュ値Windows Vistaよりも古いWindows OSで用いられていたパスワードハッシュ値です。ソルト化はされておらず、ハッシュ値の長さは16バイトです。パスワードの最大長として許可されているバイト数は14バイトであり、パスワードを安全に守るには実装が弱いため、Windows Vista以後のWindows OSでは初期設定で無効化されています。LMハッシュ値の生成は以下の手順に従います。

  1. パスワードを大文字に変換する。
  2. パスワードが14バイトになるように、末尾をNULLバイトで埋める。
  3. パスワードを7バイト単位に分離してDESの鍵とする。
  4. パスワードの前半を用いて生成されたDESの鍵で文字列「KGS!@#$%」を暗号化したものと、パスワードの後半を用いて生成されたDESの鍵で文字列「KGS!@#$%」を暗号化したものを連結する。

f:id:binary-pulsar:20181206151556p:plain
LMハッシュ値生成の概要

以上の手順からわかる通り、LMハッシュ値を用いている場合はパスワードに用いるアルファベットの大文字と小文字は区別されません。よってその分だけハッシュ値の衝突による平文パスワードの推測が容易になります。さらに、LMハッシュ値を前半と後半に分けて解析することで、平文パスワードの前半の7文字と後半の7文字を分割して解析することが可能です。また、パスワードの長さが7バイト以下である場合は、後半の7バイトはNULLバイトが7つ並んだものとなり、ハッシュ値の後半は固定値(AAD3B435B51404EE)となるため、パスワードの長さが7バイト以下であることが容易に推測できてしまいます。LMハッシュ値では平文パスワードに含まれるアルファベットの大文字と小文字の区別ができないとはいえ、7バイトという長さは現実的な時間で解析できる長さであるため、パスワードのLMハッシュ値が漏洩してしまった場合は必ず解析されてしまうと言っても良いでしょう。

NTLMハッシュ値

NTLMハッシュ値は、前述のLMハッシュ値の弱点を克服するために実装されました。Windows Vista以後のWindows OSでは、NTLMハッシュ値をパスワードハッシュ値の標準として用いています。ハッシュ化の手順としてはあまり複雑ではありません。平文パスワードをUnicodeに変換し、MD4によりハッシュ化したものです。ソルト化はされていませんが、LMハッシュ値とは異なり、大文字と小文字はしっかり区別されます。ハッシュ値の長さはLMハッシュ値と同じく16バイトですが、パスワードの長さは128文字(256バイト)まで許されています。

f:id:binary-pulsar:20181205151222p:plain
NTLMハッシュ値生成の概要

Net-NTLMv2認証

Net-NTLMv2認証は現行のWindows OSで認証に用いられている方式です。以下の手順に従い、サーバとクライアント間で認証します。

  1. クライアントからサーバに対して認証を要求する。
  2. サーバからクライアントに対してチャレンジ値を送信する。
  3. クライアントが、認証情報とチャレンジ値を用いてNet-NTLMv2応答値を生成して、Net-NTLMv2応答値をサーバに送信する。
  4. サーバがクライアントから送信されたNet-NTLMv2応答値の内容を検証して、整合性を判断して認証する。

Net-NTLMv2応答値の生成アルゴリズムは以下の手順に従います。

  1. 平文パスワードからNTLMハッシュ値を生成する。
  2. NTLMハッシュ値を鍵として、ドメイン名とユーザ名を連結したデータを、HMAC-MD5でハッシュ化する。
  3. NTLMハッシュ値とユーザ情報から生成したHMAC-MD5ハッシュ値を鍵として、サーバから送信されたチャレンジ値とクライアントで生成したチャレンジ値を連結したデータを、HMAC-MD5でハッシュ化する。
  4. チャレンジ値から生成したHMAC-MD5ハッシュ値に、クライアントで生成したハッシュ値を付加する。

f:id:binary-pulsar:20181205151125p:plain
Net-NTLMv2認証値生成の概要

クライアントが生成するチャレンジ値を除き、サーバも同じ情報を保有しているため、こうして生成されたNet-NTLMv2応答値からクライアントが生成したチャレンジ値を抽出することにより、Net-NTLMv2応答値と同じものをサーバ側でも生成することが可能です。よって、クライアントから送信されたNet-NTLMv2応答値と、サーバが生成したNet-NTLMv2応答値を比較することにより、認証情報の整合性を確認することが可能となります。

Pass-the-Hash

Pass-the-HashはNet-NTLMv2認証の実装を悪用した手法です。Pass-the-Hashの手法により、NTLMハッシュ値を平文パスワードに戻すことなく認証することが可能となります。先述のNet-NTLMv2認証の手順を追うとわかりますが、Net-NTLMv2認証においては平文パスワードから生成したNTLMハッシュ値のみを用いており、平文パスワード自体は直接的にNet-NTLMv2応答値に含まれていません。よって、NTLMハッシュ値のみでNet-NTLMv2応答値を生成して認証することが可能です。

f:id:binary-pulsar:20181205151028p:plain
Pass-the-Hashの仕組みの概要

上の原理で、パスワードハッシュ値を平文に戻すことなく認証を実行する手法が「Pass-the-Hash」と呼ばれています。 Pass-the-Hashは家庭用環境のようにホストが独立している場合はあまり脅威とはなりませんが、Active Directoryによって構成された組織が管理するドメインネットワークで大きな力を発揮します。Windows OSには、初期状態で登録される管理者権限のアカウント(通称「ビルトイン管理者」。初期設定のアカウント名はAdministrator)が存在しますが、Active Directoryで管理されている組織のネットワークに所属するホストの場合は、ネットワーク管理者による管理を円滑にするために、複数の端末で共通のパスワードが設定された状態でアカウントが有効化されている場合が多いです。よって、組織のネットワークのいずれかのクライアントホストに侵入し、そのホストでの管理者権限の掌握に成功した攻撃者は、ホストのメモリ上やレジストリからビルトイン管理者のパスワードのNTLMハッシュ値を抽出してPass-the-Hashを実行することにより、同一のドメインネットワークに所属するホストを連鎖的に制圧することが可能となる場合があります。

検知

これまでの説明からわかるように、Pass-the-Hashにより最終的に生成されるNet-NTLMv2応答値は、正規の手順で生成されたNet-NTLMv2応答値と区別がつかないため、「Pass-the-Hashを悪用してNTLM認証を試行されてしまった」という事象を検知することは難しいと考えられます。Pass-the-Hashによる認証が成功した後の攻撃者の動作に関しては検知できると考えられるものがありますが、本記事の題材とは異なるため割愛します。

対策

Pass-the-HashはWindowsの認証の仕組み上、仕方がないものです。攻撃者に侵入されてしまい権限昇格されてしまった前提で対策するべきでしょう。読者である皆様が利用しているホストが攻撃者に侵入されなかったとしても、同じドメインネットワークに所属する別の誰かのホストが攻撃者に制圧されてしまい、Pass-the-Hashにより自身のホストに被害が拡大してしまうという事態は充分に考えられます。よって、Pass-the-Hashによる攻撃者の侵入領域の拡大を防ぐ対策が求められます。 ドメインネットワークに所属する各ホストのアカウントの認証情報を強化することはもちろんですが、それぞれのホストのビルトイン管理者のパスワードを共通にしないという対策が有効でしょう。Microsoftでは、ドメインネットワークの管理者が、ビルトイン管理者のパスワードを円滑に管理するためのツールであるLocal Administrator Password Solution (LAPS)を無償で公開しています。

マイクロソフト セキュリティ アドバイザリ 3062591 | Microsoft Docs

以下のURLにLAPSの使用方法の解説ビデオが公開されているため、組織のネットワークの管理を管理するために参考とすると良いでしょう。

channel9.msdn.com