最近の記事BloodhoundによるNTLMブルートフォースアタックを探るでは、攻撃者がどのようにNTLM認証プロトコルを悪用しているのかを説明しました。今回の投稿では、SAM、LSAシークレット、SYSKEYおよびLSASSに対する基本的な攻撃について詳しく説明します。また、セキュリティチームがこうした方法を監視する重要性を強調するために、攻撃者がどのようにこれらを使用して、Windowsマシンから認証情報を入手するのかも説明します。これらはよく知られた比較的単純な認証情報盗難攻撃ですが、いまだに使用されているため、この実績のあるテクニックを見逃しているセキュリティチームがあります。
LSASS経由で平文の認証情報を探したり、NTLMやLSAキー用のSAMを取得してシークレットを解明することは、攻撃者に大きな価値があります。攻撃者はマシンにただアクセスするだけでは満足せず、「キルチェーン」の複数ステップを通じて有効な認証情報を使用してより大きなことを成し遂げようとします。
その結果、認証情報ダンピングは、ラテラルムーブメントの間に攻撃者に頻繁に使用されます。アカウントログイン名やパスワードを取得することで、攻撃者は組織のネットワーク、アクセスが制限されたデータに拡大し、より高度な特権を持つコマンドやプログラムを実行できるようになります。
認証情報抽出の概要
大まかにいうと、潜在的な犯罪者は以下のことを狙っています:
1.オフラインクラッキングおよび操作用にNTLMハッシュを取得します。
- HKLM\SAM: ユーザーパスワードのNTLMv2 ハッシュを含む
- HKLM\security: キャッシュされたドメインレコード LSAシークレット/LSAキーを含む
- HKLM\system – 別名 SYSKEY: LSAシークレットやSAMデータベースを暗号化するために使用可能なキーを含む
2.平文のパスワードまたはNTLMハッシュのいずれかを取得するため(標的になるWindowsバージョンによる)にSASSをダンプします。
注:機能や保存される情報は変わる可能性があります。例えば、Active Directoryドメイン内にあるマシンとそうでないマシンとでは違いがあります。
ここで、上記のそれぞれのコンポーネント詳細について説明します。
1. SAM: HKLM\SAM
セキュリティアカウントマネージャ(SAM)データベースは、Windowsがユーザーアカウントの情報を保存する場所です。また、ユーザー名とユーザーパスワードのハッシュを保存し、そしてユーザーがログインを試み、パスワードを入力した時に認証するために使用されます。
ハッシュの長さと複雑さはパスワードを暗号化するアルゴリズムによって変わります。これはシンプルなDESベースのLM(Lan Manager)パスワードアルゴリズムか、またはNTHashアルゴリズムの2つのバージョンの1つです。NTLMv1またはNTLMv2は両方とも32個の16進数を出力し、MD4ダイジェストから導かれます。
ユーザーパスワードを取得するうえで最もよく使われる方法のひとつは、パスワードハッシュを抽出できるツールを使う方法か、またはレジストリを直接 [reg.exe save hklmSAM
] ファイルにコピーして、ユーザーアカウントのパスワードハッシュを抽出するソフトウェアユーティリティによってオフライン操作でSAMデータベースをダンプすることです。
LMまたはNTLMハッシュを取得したら、パスワードハッシュにオフラインでブルートフォースを実行できます(詳細は本投稿で後述します)。
2.LSAシークレット:HKLM\Security
LSAシークレットとは、Windowsのローカルセキュリティ機関 (LSA)が使用するストレージです。
ローカルセキュリティ機関の目的はシステムのローカルセキュリティポリシーを管理することで、そのため定義上、ユーザーログイン、ユーザー認証、LSAシークレットなどに関するプライベートデータを保存することを意味します。LSAシークレットストレージへのアクセスはシステムアカウントのプロセスのみに付与されます。
LSAシークレットは以下に示すようなシステムの機密データを保存します:
- ユーザーパスワード
- Internet Explorerパスワード
- サービスアカウントパスワード(シークレットによる認証が必要なマシン上のサービス)
- キャッシュされたドメインパスワードの暗号化キー
- SQLパスワード
- システムアカウントのパスワード
- 設定されたスケジュール済タスクのアカウントパスワード
- Windowsの非アクティブコピーの期限残り時間
その他LSAシークレットの早期実装はすぐクラッキングされ、mimikatzといったツールもWindowsの一部バージョンでのメモリおよびレジストリハイブからLSAシークレットをダンプすることができます。
3. SYSKEY: HKLMSystem
SyskeyはSAMロックツールとしても知られ、旧バージョンのWindowsで使用されていました。この機能の目的は、セキュリティアカウントマネージャデータベース(SAM)を暗号化することで、マシンのブート時にSAMの保護を強化することができます。
Syskeyはオペレーティングシステムが稼働していないときにのみセキュリティデータを保護します。OS稼働時は、Syskeyの値がメモリーにロードされるため、後でSAMを暗号化できるようになります。HKLM\SAMはHKLM\SECURITY\SAM下にあるSECURITYサブキーにリンクされています。
Syskey機能は2017年以降提供停止されていますが、有効になっており設定されているWindowsバージョンではhklm\system下にあります。
4.LSASSによる認証情報のダンプ
Windows 8がリリースされるまで、Windows上でmimikatzを使用するとローカルセキュリティ機関サブシステムサービス(LSASS)から平文で認証情報を取得可能でした。
時間の経過とともに、修正が提案され、それぞれの修正がLSASSの使用を堅固にし、いまではハッシュされたパスワードでさえ取得が困難です。Windows 10 Enterpriseでは、認証情報ガードを使って、SYSTEM特権を持つユーザーからでさえLSASSプロセスを分離することができます。
Windows 7上でのMimikatzパスワード抽出:
Windows 10に対するツールを使用する時に変更が明らかになります。平文パスワードは表示されませんが、NTLMv1ハッシュを取得できます。
NTLMv2ハッシュからのパスワード抽出
ターゲットマシンへのローカルアクセスがない場合、NTLMハッシュを取得する方法は多数あります。
Responderツールはこのタスクで広く使用されているツールの1つです。
Responderツールで出力できるNTLMv2の例:
admin::M57oDBrlht:08ca45b7d6da58ee:88dcbe4346168966a153a0064958dae6:5b6740315c7830310000000000000b45c67103d07d7b95acd12dea11230e0000000052920b85f78d013c31cdb3b92f5d765c783030
このツールには多くの機能がありますが、ここで重要なのは特定のネットワークサービスがリクエストされた時にユーザーに認証情報のプロンプトを送る機能です。これによって、平文パスワードまたはパスワードハッシュを取得できます。
この攻撃では、このツールを使ってLLMNRパケットをキャプチャし、チャレンジ/レスポンスからハッシュを抽出します。私たちはこのツールをセットアップしてネットワーク上の正しいパケットを判別し、被害者のマシンから実際には存在しないネットワークリソースを探し出します。このようにして、トラフィックをキャプチャし、それからNTLMハッシュを取得することができます。
私は、Windowsマシンから「MadeUpNetworkShare」という名前の存在しない共有にアクセスしようとしていました。そしてツールは同じネットワークのマシンで実行し、チャレンジ/レスポンスを記録して、そこからNTLMハッシュを取得しました。
パスワードハッシュの使用方法
この時点でハッシュを取得しているため、平文パスワードを実行して抽出する2つのオプションがあります。
辞書攻撃/ブルートフォース攻撃 – この方法ではワードリストを使用してパスワードと比較します。この作業には、John the Ripper、hashcat、Cain & AbelおよびOphcrackなどのようなツールを使用できます。
レインボーテーブル攻撃 – これはハッシュをクラックする場合により向いていますが、可能なパスワードを集めた既存のデータベースや計算済みのハッシュがないと使えません。
レインボーテーブル(https://crackstation.net/から入手)によるNTLMv1パスワードのクラッキングの例:
注:既知の無塩ハッシュのみが、この方法でハッシュからパスワードに戻すことができます。
パスワードが長すぎてクラックできない場合、Pass the Hash攻撃のような他のオプションがあります。これは、パスワードそのものではなく、パスワードのハッシュを使用して認証するネットワーク上でサービスを活用します。これの好例はpsexecやSMBと通信するその他のサービスです。
認証情報抽出防止の推奨事項
認証情報ダンプおよび抽出を防ぐために、ネットワーク上の旧式システムがSAMデータベース内にLM暗号済パスワードを持たないこと、およびLM(デフォルトで無効)が新型のシステムで有効になっていないことを推奨します。LMパスワードは限定文字セットのみを使用しているため、クラックしやすくなっています。
また、NTLM1も無効にすることが推奨されます。NTLMv1ハッシュからパスワードを抽出するのは比較的容易です。構成次第ですが、NTLMv1で動作するほとんどのサービスはNTLMv2で動作します。
LMとNTLMv1の両方が無効になっていることを確認する1つの方法はGPOページから、
関連するNTLMv1の使用に対するGPO構成変更をおこなうことです。
パスワードが長く、固有のものである場合、NTLMv2ハッシュをクラックするのは容易ではありません。また、ハッシュを所有しているからといって、NTLMハッシュを使って認証するサービスがない場合、攻撃者が必ずしも有利になるとは限りません。
さらに、Windows 10マシンで認証情報ガードを有効にすることも推奨します。これにより、NTLMやKerberos認証情報の保護を強化できます。
組織が攻撃対象面を削減し認証情報抽出に対抗するもっとも効果的な方法は、machine learningやActive EDRを使用するSentinelOneのような次世代セキュリティソリューションを配備することです。
まとめ
これまで述べてきたような基本的な攻撃は、環境で使用されているネットワークアーキテクチャやサービスに注意することです。特に、こうした種類の攻撃はWindows 7以前の標的に対して最も効果的に働きます。というのも、EOLステータスにもかかわらず、いまだに多数の企業ネットワークで広く使われているからです。最近、多くの組織がグループドメインでKerberosといったよりセキュアな実装を適切に使用して、ここで説明しているものと同じ脆弱性を回避できています。それと同時に信頼できる次世代エンドポイントセキュリティプラットフォームを配備してデバイスやネットワークを保護しています。