はじめに
Mandiant は公開で提供し、Net-NTLMv1 のレインボーテーブルからなる包括的なデータセットを公開することで、この時代遅れのプロトコルから移行する緊急性を強調します。Net-NTLMv1 は廃止予定であり、20年以上にわたって安全ではないことが知られており(暗号解析は1999年にさかのぼります)、それにもかかわらず、Mandiant のコンサルタントは稼働中の環境でその使用を継続して確認しています。このレガシープロトコルは組織を容易な認証情報の窃取にさらしますが、惰性と、差し迫ったリスクが明確に示されていないことから、依然として広く残っています。
これらのテーブルを公開することで、Mandiant はセキュリティ専門家が Net-NTLMv1 の危険性を実証するための障壁を下げることを目指します。このプロトコルを悪用するツールは何年も前から存在していましたが、機密データを第三者サービスにアップロードする必要があったり、鍵を総当たりするために高価なハードウェアが必要だったりすることが少なくありませんでした。本データセットの公開により、防御側と研究者は、600米ドル未満のコンシューマ向けハードウェアを用いて12時間未満で鍵を復元できます。この取り組みは、Mandiant の最前線の専門知識と Google Cloud のリソースを組み合わせることで、攻撃のクラス全体を排除できるという増幅された効果を示しています。
本記事では、テーブル生成の詳細、コミュニティ利用のためのデータセットへのアクセス方法、そして Net-NTLMv1 を無効化し認証強制攻撃を防ぐための重要な是正手順を概説します。
背景
Net-NTLMv1 は、DEFCON 20 での発表を受け、少なくとも2012年以降広く安全ではないことが知られており、基盤となるプロトコルの暗号解析は 少なくとも1999年までさかのぼります。2016年8月30日、Hashcat は サポートを追加し、既知平文を用いて Data Encryption Standard(DES)鍵をクラックできるようになったことで、このプロトコルを攻撃する能力がさらに民主化されました。レインボーテーブルもほぼ同じくらい古く、レインボーテーブルに関する最初の論文は Philippe Oechslin によって2003年に発表され、さらに以前の時間-メモリトレードオフの反復として Martin Hellman による1980年の研究が引用されています。
本質的には、攻撃者が Extended Session Security(ESS)なしの Net-NTLMv1 ハッシュを、既知平文 1122334455667788 に対して取得できれば、既知平文攻撃(KPA)と呼ばれる暗号攻撃を適用できます。これにより、使用された鍵素材の復元が保証されます。鍵素材は認証に用いられる Active Directory(AD)オブジェクト(ユーザーまたはコンピューター)のパスワードハッシュであるため、攻撃結果は迅速にそのオブジェクトの侵害に利用でき、しばしば権限昇格につながります。
攻撃者がよく用いる一連の流れとして、ドメインコントローラー(DC)などの高権限オブジェクトからの認証強制があります。DC のマシンアカウントのパスワードハッシュを復元できれば、DCSync 権限を得て AD 内の他のあらゆるアカウントを侵害できます。
データセットの公開
未ソートのデータセットは、gsutil -m cp gs://net-ntlmv1-tables/tables . を使用してダウンロードするか、Google Cloud Research Dataset ポータルから入手できます。
テーブルの SHA512 ハッシュは、まずチェックサムを gsutil -m cp gs://net-ntlmv1-tables/tables.sha512 . でダウンロードし、その後 sha512sum -c tables.sha512 で確認できます。パスワードクラックコミュニティはすでに派生成果物を作成しており、すぐに使えるテーブルもホスティングしています。
テーブルの利用
Net-NTLMv1 ハッシュを取得したら、テーブルは rainbowcrack(rcrack) や RainbowCrack-NG といった、レインボーテーブル検索ソフトウェアの歴史的な実装または現代的な再実装とともに、中央処理装置(CPU)上で使用できます。また、グラフィックス処理装置(GPU)上では フォーク版の rainbowcrackalack を利用できます。Net-NTLMv1 ハッシュは、ntlmv1-multi を用いて DES コンポーネントに前処理する必要があります。手順は Net-NTLMv1 ハッシュの取得に示されています。
Net-NTLMv1 ハッシュの取得
多くの攻撃者は Responder を --lm および --disable-ess フラグ付きで使用し、認証を静的値 1122334455667788 に設定して、Net-NTLMv1 のみが成立し得る接続だけを許可します。攻撃者はその後、着信接続を待つか、PetitPotam や DFSCoerce といったツールを用いて認証を強制し、目的達成に有用な DC や低権限ホストからの着信接続を生成します。応答はクラックして、ユーザーまたはコンピューターのマシンアカウントのパスワードハッシュを取得できます。攻撃者のサンプルワークフローを以下の図1、図2、図3に示します。

図1: DC に対する DFSCoerce

図2: DC マシンアカウントの Net-NTLMv1 ハッシュを取得

図3: Net-NTLMv1 ハッシュを DES の各部分に解析
図4は、Net-NTLMv1 ハッシュを DES の暗号文へ処理する流れを示しています。

図4: Net-NTLMv1 ハッシュから DES 暗号文へ
その後、攻撃者は分割された暗号文を用い、既知平文 1122334455667788 に基づいて使用された鍵をクラックします。図5にテーブルの読み込み手順を、図6および図7にクラック結果を示します。

図5: クラックのための DES コンポーネントの読み込み

図6: 1つ目のハッシュをクラック

図7: 2つ目のハッシュをクラックし、実行統計を表示
その後、攻撃者は ntlmv1-multi を再度用いて最後に残った鍵を計算するか、twobytes で参照して、図8に示す最後の鍵部分を使い DC アカウントの完全な NT ハッシュを再構成できます。

図8: 残りの鍵を計算
結果は、図9に示すように、hashcat の NT hash shucking mode(-m 27000)で確認できます。

図9: hash shucking で鍵を確認
その後、攻撃者はこのハッシュを用いて、侵害されたマシンアカウントとして認証しつつ DC を標的に DCSync 攻撃を実行できます。攻撃フローでは secretsdump.py を Impacket ツールスイートから使用し、図10に示します。

図10: DCSync 攻撃を実行
翻訳元: https://cloud.google.com/blog/topics/threat-intelligence/net-ntlmv1-deprecation-rainbow-tables/