Slide 1

Slide 1 text

Pass-the-Challenge Credential Guardの新たなバイパス手法 なお(@n_etupirka) Security.Tokyo #1 February 22, 2023

Slide 2

Slide 2 text

$ whoami • 小松 奈央(Nao Komatsu) • Job ◦ Penetration Testing ◦ Mobile Application Security ◦ Security Training Instructor • Twitter / Blog ◦ https://twitter.com/n_etupirka ◦ https://n-etupirka.net February 22, 2023 2

Slide 3

Slide 3 text

Index • Credential Guardの概要 • Pass-the-Challenge ◦ Pass-the-Challengeの概要 ◦ 実際にやってみた • まとめ • 参考文献 February 22, 2023 3 【注意】 本スライドの内容は犯罪行為を助長するものではありません。 サイバー空間の安心・安全な環境を確保する目的にのみ利用し、絶対に悪用しないでください。

Slide 4

Slide 4 text

Credential Guardの概要 February 22, 2023 4

Slide 5

Slide 5 text

Credential Guardとは • 資格情報(NTLMハッシュなど)の保護を目的とした Windowsの機能 • 仮想化ベースセキュリティによって(Virtualization-based security)によって資格情報をLSASSから分離する • 資格情報が保護される仕組み ◦ LSASS:認証が必要な他のプログラムと通信し、LSAIsoを介して資 格情報を使用する ◦ LSAIso:資格情報の直接操作(暗号化や復号など)を行う。LSASS からのみ呼び出され、他のプログラムと通信不可。 February 22, 2023 5

Slide 6

Slide 6 text

Credential Guardのアーキテクチャ February 22, 2023 6 Microsoft. “How Windows Defender Credential Guard works”. https://learn.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-how-it-works • 資格情報の暗号化や復号などを行う • LSASSからのみ呼び出され、 他のプログラムと通信不可 • LSAIsoを介して資格情報を使用 • 他のプログラムと通信可能

Slide 7

Slide 7 text

MimikatzによるLSASSダンプの例 • Credential Guardが無効の場合 • Credential Guardが有効の場合 February 22, 2023 7 NTLMハッシュを入手でき、 Pass-the-Hashなどに悪用可能 NTLMハッシュが暗号化され ているため、悪用不可

Slide 8

Slide 8 text

Pass-the-Challengeの概要 February 22, 2023 8

Slide 9

Slide 9 text

Pass-the-Challengeとは • 2022年12月27日にOliver Lyak(@ly4k_)氏によって公開さ れた攻撃手法 • Credential Guardによって保護された資格情報から、NTLM ハッシュを回復することができる • 侵害済みの端末において、新たにログオンするユーザを標的 とした従来のCredential Guardバイパス手法と異なり、端末 侵害前にログオンしていたユーザも攻撃対象となる February 22, 2023 9

Slide 10

Slide 10 text

Pass-the-Challengeの仕組み • LSAIsoのNtlmIumCalculateNtResponseメソッドを悪用する ◦ NetNTLMv1応答値を計算するメソッド ◦ NetNTLMv1認証は基本無効化されているものの、互換性のためメ ソッド自体は存在する • LSASSから上記メソッドを呼び出し、NetNTLMv1応答値を 取得する ◦ LSAIsoのメソッドを呼び出すためにライブラリをLSASSへロード • NtlmIumLm20GetNtlm3ChallengeResponseメソッドを悪用 する方法も存在する(本資料では対象外) February 22, 2023 10

Slide 11

Slide 11 text

Pass-the-Challengeの仕組み 1. LSASSから以下の情報をダンプ ◦ Context Handle / Proxy Info / Encrypted blob 2. SecurityPackage.dll(LSAIsoを悪用するためのライブラ リ)をLSASSにロード 3. SecurityPackage.dllを介してLSAIsoの NtlmIumCalculateNtResponseメソッドを呼び出し、 NetNTLMv1応答値を取得する 4. NetNTLMv1応答値からNTLMハッシュを回復する February 22, 2023 11

Slide 12

Slide 12 text

Pass-the-Challengeの仕組み February 22, 2023 12 ①LSASSから必要な情報をダンプ ②SecurityPackage.dllを LSASSにロード ③NtlmIumCalculateNtResponseメソッドを 呼び出し、NetNTLMv1応答値を取得する

Slide 13

Slide 13 text

Pass-the-Challengeの対策 • Credential Guardの仕様を悪用する攻撃手法 ◦ 根本的な対策は困難 • 多層防御により、ネットワーク全体のセキュリティレベルを 向上させることが重要 ◦ 端末に侵入されないための対策 ◦ 侵入範囲を拡大されないための対策 ◦ 侵入を早期に検知するための監視、運用体制の強化 February 22, 2023 13

Slide 14

Slide 14 text

実際にやってみた February 22, 2023 14

Slide 15

Slide 15 text

用意した環境 • Active Directory環境* ◦ ドメインコントローラ1台 ◦ クライアント端末1台(Credential Guard有効) • ドメインアカウント:john.smith ◦ パスワード:zmh4A5HVXG3sCiwuESKh ◦ NTLMハッシュ:664169295f48fcb3d5e43cd77c49e566 February 22, 2023 15 (*)Credential Guardの保護の対象は、ドメインに紐づく資格情報のみであるため

Slide 16

Slide 16 text

1. PypykatzによるLSASSダンプ February 22, 2023 16 Oliver Lyak. “Pypykatz”. https://github.com/ly4k/Pypykatz C:¥> python -m pypykatz live lsa

Slide 17

Slide 17 text

2. SecurityPackage.dllのロード • SecurityPackage.dllをLSASSにロード C:¥> PassTheChallenge.exe inject SecurityPackage.dll February 22, 2023 17 Oliver Lyak. “PassTheChallenge”. https://github.com/ly4k/PassTheChallenge

Slide 18

Slide 18 text

3. NetNTLMv1応答値の取得 • LSASSからダンプした情報を使って、NetNTLMv1応答値を 取得する C:¥> PassTheChallenge.exe nthash : February 22, 2023 18

Slide 19

Slide 19 text

4. NTLMハッシュの回復 • NetNTLMv1応答値からNTLMハッシュを回復する必要がある • NetNTLMv1応答値の生成には危殆化した暗号化方式であるDES 暗号が使用されている • Pass-the-Challengeの元記事では、crack.shというWebサービス を利用している ◦ DES暗号のクラッキングに特化した研究目的のサービス。DES暗号のレイ ンボーテーブルを保持しており、数秒でクラック可能。 • Webサービスに気軽に認証情報をアップロードするわけにもいか ないため、自力でのNTLMハッシュ回復を試みる February 22, 2023 19

Slide 20

Slide 20 text

4-1. NetNTLMv1応答値の生成方法 February 22, 2023 20 逆の手順を実施すれば NTLMハッシュを回復できる DES暗号のクラッキングに よって秘密鍵を求めた後、 NTLMハッシュに変換する 実質的な鍵空間が2Bytesしかな いため、容易に特定が可能

Slide 21

Slide 21 text

4-2. 末尾2Bytesの特定 • 秘密鍵3は実質的な鍵空間が2Bytesしかないため、容易に特 定が可能 • 末尾2Bytesを求めるツールはHashcatが公開している ◦ C:¥> ct3_to_ntlm.exe February 22, 2023 21 hashcat. “hashcat-utils”. https://github.com/hashcat/hashcat-utils

Slide 22

Slide 22 text

4-3. 秘密鍵の特定 • Hashcatを用いてDES暗号のクラッキングを行う ◦ C:¥> hashcat.exe -m 14000 -a 3 -1 charsets¥DES_full.hcchr --hex-charset hashes.txt ?1?1?1?1?1?1?1?1 ◦ 単一のGeForce RTX 3090を使うと14日程度でクラック完了 February 22, 2023 22

Slide 23

Slide 23 text

4-4. NTLMハッシュの復元 • 最後に特定した秘密鍵からNTLMハッシュを復元する ◦ NTLMハッシュから秘密鍵を生成するプログラムを参考に、その逆 を行うプログラム*を作成 • NTLMハッシュの回復に成功! February 22, 2023 23 (*)作ったプログラムのソースコードはhttps://github.com/n-etupirka/des-to-ntlmで公開

Slide 24

Slide 24 text

まとめ • 侵害後の端末において、Credential Guardが有効であったと しても比較的容易にNTLMハッシュを回復可能 • 推奨事項 ◦ Credential Guardは攻撃の障壁として有用な機能であるため、有効化 することを推奨 ◦ 単一の機能や製品に頼るのではなく、多層防御によりネットワーク 全体でセキュリティレベルを向上することも重要 • 以下の記事でより詳細に解説している ◦ https://n-etupirka.net/entry/2023/01/28/104428 February 22, 2023 24

Slide 25

Slide 25 text

参考文献 • [1] “Pass-the-Challenge: Defeating Windows Defender Credential Guard”. https:// research.ifcr.dk/pass-the-challenge-defeating-windows-defender-credential-guar d-31a892eee22, (accessed January 25, 2023) • [2] “Protect derived domain credentials with Windows Defender Credential Guard”. https://learn.microsoft.com/en-us/windows/security/identity-protection/credenti al-guard/credential-guard, (accessed January 25, 2023) • [3] “Net-LTLMv1認証の危険性”. https://binary-pulsar.hatenablog.jp/entry/2018/1 2/11/090000, (accessed January 25, 2023) • [4] “NTLMv1 to NTLM Reversing”. https://hashcat.net/forum/thread-9009.html, (accessed January 25, 2023) February 22, 2023 25

Slide 26

Slide 26 text

Thank you. Any Questions? February 22, 2023 26