OFFZONE-2018でのチームのパフォーマンスの結果に基づく2番目の記事。 今回は、MainTrackの講演「Windows DPAPI」「Sekretiki」または「ペンテスター向けDPAPI」を検討してください。
注意! たくさんのブナ!
RedTeamキャンペーンを実施するとき、BlueTeamの反応の理由を少なくしたいのですが、多くの理由があります。 たとえば、mimikatzを実行してユーザーのパスワードまたは証明書を取得します。 Kasperskyから彼を「otmazyvat」できたとしても、BlueTeamはSysmon、Microsoft ATAなどの専用ツールを使用して追跡することができます。 同時に、侵害されたユーザーマシンから最大限の情報を取得したいと思います。 RedTeamが実際のBlueTeamチームに対抗するために繰り返し実施するキャンペーンの過程で、システムの侵害の指標となる可能性のあるアクションを回避する必要があるという結論に達しました。 この目標を達成するには、オペレーティングシステムがユーザーに提供する法的メカニズムとアクションを使用します。
そのような合法的なツールの1つはDPAPIメカニズム(Windows Data Protection API)です。これは、オペレーティングシステムとさまざまなアプリケーションが機密ユーザーデータ(主にパスワード、暗号キーなど)を暗号化するために使用します。 :「データの暗号化」と「データの復号化」の2つの機能のみがあります。 この記事では、このようなメカニズムがRedTeamキャンペーン中のペンテスターにとってどのように役立つかを検討したいと思います。
DPAPIとは何ですか? 簡単かつロシア語のみ
2000年以降、すべてのWindowsオペレーティングシステムは、ユーザーデータを安全に保つためにDPAPIメカニズムを使用し始めています。
レポートで調べたすべての暗号化をスキップして、DPAPIで暗号化されたデータを解読するには、マスターキー、ユーザーSID、ユーザーパスワードハッシュ、およびDPAPI blob自体(暗号化されたDPAPIデータ)が必要です。
一般的に、プロセスは次のようになります。

「暗号化ハット」の中には、読者に負担をかけすぎないように、この記事では考慮しないさまざまな暗号化メカニズムがあります。 DPAPIの主要な部分は、いわゆるマスターキー(マスターキー)であることに注意してください。 簡単に言えば、マスターキーは、ユーザーのパスワードとそのSIDから生成されるプリキーを使用して暗号化された64バイトのランダムデータです。

追加のパラメーターもプリキー生成に関与します。反復数(IterN)、ソルト、およびHMACは、場合によって異なります。 これらのパラメーターの値は、マスターキーと一緒に1つのファイルに保存されます。
したがって、ユーザーのパスワードとそのSIDを把握し、マスターキーファイル(HMAC、Salt、InterN)から生成パラメーターを読み取ることで、プリキーを生成し、マスターキーを解読できます。 DPAPI BLOBの解読に使用する非常にランダムな64バイトを取得します。
パスワードを変更したらどうなりますか?
通常、ユーザーパスワードは定期的に変更されます。 ユーザーがパスワードを変更するとどうなりますか? 前のものはどこに行きましたか? 確かに、マスターキーを解読するには、ユーザーのパスワードを知る必要があり、ユーザーのすべてのマスターキーを毎回再暗号化するのは非常に高価です。 この場合、すべてがWindowsで考慮されます。
特別なファイル(CREDHIST)があり、そのタスクは以前のすべてのユーザーパスワードを保存することです。 また、ユーザーの現在のパスワードで暗号化され、スタックに保存されます。 システムが突然マスターキーの復号化に失敗した場合、次のように進みます。現在のパスワードを使用して、CREDHISTの最初のレコードを復号化します。 パスワードは、マスターキーを再度復号化しようとしています。チェーン内のパスワードがなくなるか、マスターキーが復号化されるまで続きます。
ドメインコントローラーの秘密キーについて少し
ご想像のとおり、DPAPIはドメインユーザーを含むすべてのユーザーに使用されます。 金曜日の夜のパーティーの後、パスワードを忘れてしまったユーザーにパスワードをリセットできるようにするには、安全な場所に保存される予備のキーが必要です。 マイクロソフトによると、このような信頼できる場所はドメインコントローラーです。
ユーザーパスワードのリセット後にマスターキーを解読するメカニズムの本質は次のとおりです。RSAキーのペア(プライベートとパブリック)がドメインコントローラー上に作成されます。 秘密キーはNTDSデータベースのドメインコントローラーに格納され、BCKUPKEY_xxxxと呼ばれます(下図を参照)。公開キーはすべてのドメインシステムに配布され、生成時にマスターキーの複製を生成するために使用されます。
ドメインマシンでマスターキーを作成した後、複製も作成され(または、マスターキーの素材は64バイト)、メインマスターキーと共に1つのファイルに保存され、ドメインキーと呼ばれます。 メインマスターキーを紛失した場合、つまり ユーザーパスワードをリセットすると、システムはその複製をドメインコントローラーに送信し、暗号化解除を要求します。 ユーザーを承認すると、コントローラーは複製を復号化してシステムに返します。その後、マスターキーの素材は新しいパスワードで再度暗号化されます。

ドメイン(ほとんどの場合はadmin)で適切な特権を持っている場合、レプリケーションメカニズムを介してこれらのプライベートRSAキーをドメインコントローラーから取得し、ドメインマシンで作成されたマスターキーのさらなる復号化に使用できます。 これは、mimikatzまたはDSInternalsを使用して実行できます。 詳細については、mimikatz wikiまたは
DSInternalsブログを
ご覧ください。
マスターキーはどこに保存されますか?
マスターキーは、誰の秘密が暗号化されているかに応じて、ユーザーとシステムになります。 ユーザーマスターキーは、次の方法でユーザープロファイルに保存されます。
Users\%USER%\AppData\Roaming\Microsoft\Protect\%SID%\
念のため、システムはユーザーが使用したすべてのマスターキーを保存します。 結局のところ、彼女は事前に、どのマスターがキーを使って何かを解読する必要があるかを知りません。 現在使用されているキーのGUIDは、Preferredファイルに保存されます。

システムマスターキーは、次の方法で保存されます。
windows\system32\Microsoft\Protect\S-1-5-18\
ユーザーについても同様です。1つのマスターキーが使用され、その名前は優先ファイルにあり、使用されているすべてのキーが保存されます。

さて、このDPAPIはペンタスターに何を与えることができますか?
DPAPIは合法かつ単純なメカニズムであるため、さまざまなアプリケーションがそれを使用しようとします。 便利で安全だからです。 もちろん、当分の間。
たとえば、DPAPIは、クライアントおよびシステム証明書の秘密キー、WIFIキー、Chrome(Cookie、パスワード)、DropBox、Skype、RSA SecurID(ワンタイムキーを生成するソフトウェアアプリケーション)の暗号化に使用されます。 そして、これは決して完全なリストではありません。
Pentesterのタスクは、必要なBLOBを解読し、パスワード、Cookieなどを取得することです。
これを行うにはいくつかの方法があります。 いずれにしても、それらはすべてオンラインとオフラインの2つのトランスクリプトに要約されます。 オンライン復号化とは、ユーザーのマシン上でシステム関数を呼び出してデータを復号化し、DPAPI blobを渡すだけです。システムはそれ自体ですべてを実行します。blobが暗号化されたマスターキーを検索し、ユーザーのSIDを使用して復号化しますLSASSメモリに保存されたパスワードハッシュ。
次の図は、powershellでの暗号化と復号化のためにDPAPI関数を呼び出す例を示しています。

まず、[Security.Cryptography.ProtectedData] :: Protect()関数を呼び出して、シークレット(この場合は「パスワード」という単語)を暗号化します。 そして、これを2回行います-最初のケースではユーザーのマスターキー(パラメーターCurrentUser)を使用し、2回目ではシステムマスターキー(パラメーターLocalMachine)を使用します。 次に、逆関数[Security.Cryptography.ProtectedData] :: UnProtect()を呼び出して、結果のBLOBを復号化できます。
さらに、この場合、CurrentUserまたはLocalMachineパラメーターの値は重要ではありません。 システム自体がblobのデコードに適したマスターキーを見つけ、必要なすべてを実行します。 出力では、どちらの場合でも、最初の秘密である「パスワード」という単語(そのバイト表現)を取得します。
オンラインで復号化する場合、UnProtect()関数を呼び出しているコンテキストを理解することが重要です。 復号化を成功させるには、ユーザーセッションを開始するか、新しいセッションでログインする必要があります。 それはすべてLSASSメモリに保存されているパスワードハッシュに関するものです。 ユーザーのセッション外で呼び出しを行う場合(たとえば、psexecまたはmeterpreterを介してネットワーク経由でシステムにログインした場合)、それに応じて、マスターキーを解読するために必要なパスワードハッシュがありません。 もちろん、彼は次のセッションにいますが、LSASSはあなたにそれを与えません。 これは別のセッションですが、同じユーザーの下で作成されました。 オンライン復号化を成功させるには、GUIを介してログインしたユーザーが起動したプロセスに移行するか、RDPなどを介してシステムに完全にログインする必要があります。
DPAPI Blobのオンライン復号化のためのpowershellの代替として、/ unprotectオプションを指定したmimiktaz :: blobを呼び出すことができます。 入力では、DPAPI blobを含むバイナリファイルが与えられ、出力では復号化されたデータが得られます。 mimikatzを使用したその他のケースについて
は、 HarmJ0y
ブログで説明さ
れています。
キューボールが落ちました。 vidyuhiで私の農場をどうしますか?
DPAPIマスターキーはユーザーのパスワードで暗号化されているため、逆のプロセスを試すことができます-マスターキーによってユーザーのパスワードをブルートフォースします。 たとえば、送信されたdocxファイルからマクロまたはDDEから逆接続を受け取りました。 ユーザーのマスターキーを取得し、特権のエスカレーションやmimikatzの起動なしでユーザーのパスワードを復元できます。
パスワードのブルートフォースにHashcatまたはJohnTheRipperを使用できますか? しかし、その前に、適切なスクリプトを使用してジョンの構成からブルートフォースのパラメーターを取得する必要があります。
./DPAPImk2john.py –S <sid> -mk <masterkey> -c <domain|local>
その後、既にスクリプトの結果をビデオカードを使用してファームに送信し、ユーザーが弱いパスワードを持っていることを期待できます。 マスターキーのブルートフォース速度は、WPA2列挙速度にほぼ匹敵します。 かなりゆっくり。
ここで、Windows 10ドメインでマスターキーが生成される場合、事前キー生成に別の10,000ラウンドのPBKDF2アルゴリズムが追加されることに注意してください。 しかし、さらに悪いことに、HashcatもJohnTheRipperもこれについて(少なくともこの記事の執筆時点では)知らないため、このようなマスターキーからパスワードを削除することはできません。
「悪いものはすべて取り除いてから、それを理解してください...」
前述したように、ユーザーのマシンでの疑わしいアクションの実行は、Blueteamチームにさらなる関心を呼び起こす可能性があり、したがって、これはRedTeamのすべてがそこで終了するという事実に満ちています。 例は、会計士または秘書のコンピューターでのpowershellの起動と、その後のインシデントの調査です。 不必要な疑いを引き起こさないために、DPAPI BLOBのデコードにはオフラインメソッドを使用することをお勧めします。 これを行うには、最初に必要なものをすべてマシンから取得する必要があります。
- ユーザーマスターキー
- システムマスターキー
- CREDHISTファイル(ドメインマシンでない場合);
- ユーザーパスワード(またはそのsha1 / ntlmハッシュ);
- ユーザーのSID。
- 復号化するDPAPI BLOB。
オフラインモードでの復号化では、特別なツールなしでは実行できません。 そのようなツールは次のとおりです。
- ミミカッツ;
- Impacket(18番目のバージョンにはDPAPI機能があるため);
- Dpapickフレームワーク。
これについては、dpapickフレームワークについて詳しく説明します。
python dpapickフレームワーク自体は、2014年に研究者Jean-Michel Pikodeによって作成されたもので、Python暗号ライブラリでのDPAPIメカニズムの実装です。 pythonとフレームワークの構造を使用すると、さまざまなDPAPIメカニズムに簡単に適合させることができます。 元のバージョンでは、dpapickはドメインバックアップキーを使用してマスターキーを解読できませんでした。また、Windows 10でドメインマシンモードで作成されたマスターキーを解読するメカニズムはありませんでした。
これらの欠点を修正し、DPAPIブロブを解読する機能を拡張した後、dpapickはDPAPIのオフラインデコード用の非常に優れたツールになりました。 以下に、例として、このフレームワークを使用してDPAPIで暗号化されたユーザーデータを復号化するためのオプションを示します。
Chrome-Cookieとパスワードを取得して解読する
Chrome
%localappdata%\Google\Chrome\User Data\Default\Cookies
は、ファイル
%localappdata%\Google\Chrome\User Data\Default\Cookies
保存されます
ログインデータは、ファイル
%localappdata%\Google\Chrome\User Data\Default\Login Data
両方のファイルは、機密データがDPAPIブロブとして保存されるsqlite3データベースです。 dpapickの一部として、このデータ(examples / chrome.py)の既製のディセクタ(パーサー)があります。 復号化を成功させるには、マスターキー、ユーザーsid、パスワード、ドメインコントローラーの秘密キーの場所、Chromeのsqlite3ファイル(Cookieまたはログインデータ)を使用してディレクトリを指定する必要があります。
ユーザーパスワードを使用したChrome Cookieのオフライン復号化
./chrome.py --cookie <cookiefile> --sid <SID> --password <..> --masterkey <masterkeydir>
ユーザーのパスワードのハッシュを使用したChrome Cookieのオフライン復号化
./chrome.py --cookie <cookiefile> --sid <SID> --hash <..> --masterkey <masterkeydir>
ドメインコントローラーの秘密キーを使用したChromeパスワードのオフライン復号化
./chrome.py --chrome <login file> --pkey <rsa-priv.pem> --masterkey <masterkeydir>
クライアント証明書のDPAPI
クライアント証明書は、VPN、WebアプリケーションなどでOTP、EFS、または認証を生成するために多く使用されます。
公開鍵証明書自体は、ユーザープロファイルに保存されます。
%APPDATA%\Microsoft\SystemCertificates\My\Certificates\
また、秘密キーは、署名が実際に実行されるか、他の暗号化操作がDPAPIを介して暗号化され、パスに沿ってユーザープロファイルにも配置されます。
%APPDATA%\Roaming\Microsoft\Crypto\RSA\<SID>\
上記のファイルに加えて、秘密証明書キーを正常に復号化してからPFXファイルを再作成するには、ユーザーのマスターキーと、SIDおよびパスワード(またはコントローラーからの秘密RSAキー)も必要です。
Dpapickとユーザーパスワードを使用して、これを解読します。
./efs.py --certificates <cert dir> --rsakyes <RSA dir> --sid <..> --password <..> --masterkey <masterkeydir>

スクリーンショットのオプションのrsaoutパラメーターを使用すると、復号化されたRSAキーをPEM形式でさらにエクスポートできます。 スクリプトの結果は、パスワードなしで再作成されたPFXファイルです。このファイルは既に自分にインポートされ、その目的に使用できます。 上記のディレクトリに複数の証明書と秘密キーがある場合、dpapickはそれぞれを復号化して、いくつかのpfxファイルを作成しようとします。
適切なパラメーターを指定することにより、ドメイン秘密キーを使用してマスターキーを復号化するために同じアクションを実行できます。
./efs.py --certificates <cert dir> --rsakyes <RSA dir> --masterkey <masterkeydir> --pkey <domain bkp key>
ドメインの「チップ」についてもう少し
Active Directoryドメインについては、資格情報ローミングなどのすばらしい機能に言及する価値があります。これは、Active Directoryドメイン全体でユーザーのマスターキー、暗号化パスワード、および証明書が「移動」するドメイン機能です。 それらは特定のマシンに関連付けられておらず、ドメインユーザーがログインするコンピューターに「接続」します。
この「機能」をオンにすると、ユーザーがインポートするすべての証明書、およびすべての秘密キーとパスワードがADに移動し、対応するアカウント属性msPKIAccountCrdentailasおよびmsPKIDPAPIMasterKeysに保存されます。
たとえば、ldapsearchを使用して、AD内でどのように見えるかを確認できます。
ldapsearch -x -h dc1.lab.local -D “user1@lab.local" -s sub "samAccountname=user1" ldapsearch -x -h dc1.lab.local -D "admin@lab.local" -s sub "samAccountname=anyuser"

デフォルトでは、ユーザーは自分のアカウントのDPAPI属性のみを受信できます。 しかし、昇格された特権を使用すると、コンピューターアカウントを含む任意のアカウントに対してこれを実行できます。
クレデンシャルローミングは、管理者だけでなく、ペンテスターにとっても非常に便利なテクノロジーです。 LDAP経由でドメインコントローラーにアクセスすると、すべてのユーザー証明書、マスターキー、DPAPIで暗号化されたパスワード(ネットワークドライブに接続するためのパスワードなど)をマージできます。
そして、なぜこのような機能をdpapickに追加しないのか、と考えました。そして、ldapを介してドメインコントローラから証明書を自動的に抽出し、それらを復号化してpfxファイルを生成する方法を教えました。
./efs.py –ldap-server <..> --ldap-connect admin:Passw0rd@lab.local --ldap-user user1 --password Password1 ./efs.py –ldap-server <..> --ldap-connect admin:Passw0rd@lab.local --ldap-user user1 --pkey <rsa-priv.pem>

スクリプトを実行するには、LDAPサーバー、ドメインコントローラーへの接続の詳細、証明書を受け取るアカウントの名前、およびマスターキー(またはコントローラーのプライベートバックアップキー)を復号化するためのパスワードとしてドメインコントローラーを指定する必要があります。
Dropbox 60秒で消えます
Dropboxは、DPAPIを使用してユーザーシークレットを保存する別の例です。 Dropboxの認証トークンはファイルに保存されます:
c:\users\<username>\Appdata\Local\Dropbox\instance1\config.dbx c:\users\<username>\Appdata\Local\Dropbox\instance_db\instanse.dbx
これらは、接続用のデータを含む暗号化されたsqlite3データベースです。 暗号化には、対称キーが使用されます。対称キーは、DPAPIを介して暗号化され、レジストリに保存されます。
HKCU\SOFTWARE\Dropbox\ks
HKCU\SOFTWARE\Dropbox\ks1
したがって、ドロップボックスハイジャックの一般的な順序は次のとおりです。
- コンピューターから2つのデータベースファイルを取得します。
- レジストリからキーを取得し、dpapickを使用してキーを解読します。
- DPAPIを使用して、マシンで受信したキーを暗号化し、レジストリに入れます。
- マシン上でデータベースファイルを置き換え、Dropboxを実行します。
上記のレジストリブランチには特別な権限が設定されていることに注意してください。 それらはユーザーのみが読み取ることができます。 管理者もシステムもそれらを読み取ることができません。 したがって、別のユーザー(管理者も含む)に代わってレジストリにアクセスする場合は、指定されたレジストリブランチに適切なアクセス許可を最初に設定する必要があります。 たとえば、so(powershell):
$Sid="S-1-5-21-3463664321-2923530833-3546627382-1000"; $key=[Microsoft.Win32.Registry]::USERS.OpenSubKey("$sid\SOFTWARE\Dropbox\ks",[Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::ChangePermissions); $acl = $key.GetAccessControl(); $rule = New-Object System.Security.AccessControl.RegistryAccessRule ("administrator","FullControl","Allow"); $acl.SetAccessRule($rule); $key.SetAccessControl($acl); $key_path = "REGISTRY::HKEY_USERS\$Sid\SOFTWARE\Dropbox\ks"; (Get-ItemProperty -Path $key_path -Name Client).Client;
キーksおよびks1には、DPAPI blobおよびmd5 HMAC DPAPI blob(最後の16バイト)の前のdbxバージョンのヘッダー(8バイト)が含まれています。 DPAPIブロブ自体は、9番目のバイト0x01000000D0で始まります...これらのバイトは、base64形式でファイルにコピーする必要があります。次に、dpapickを介して復号化します。
./filegeneric.py --sid <..> --password <..> --masterkey <..> --base64file <..>
次に、マシンで、最後の段階で受け取ったキーをマスターキーで暗号化し、その結果を適切なレジストリブランチに配置する必要があります。
暗号化には、powershellを使用するのが最も便利です。
$hdata="4efebbdf394d4003317fc5c357beac4b"; [Byte[]] $dv0_entropy = 0xd1,0x14,0xa5,0x52,0x12,0x65,0x5f,0x74,0xbd,0x77,0x2e,0x37,0xe6,0x4a,0xee,0x9b; $data = ($hdata -split "(?<=\G\w{2})(?=\w{2})" | %{ [Convert]::ToByte( $_, 16 ) }); Add-Type -AssemblyName System.Security; $dk1 = [system.security.cryptography.protecteddata]::Protect($data,$dv0_entropy,[System.Security.Cryptography.DataProtectionScope]::CurrentUser); $pr=([System.BitConverter]::ToString($dk1));$pr $OBJ_hmac = New-Object System.Security.Cryptography.HMACMD5 $hmac = $OBJ_hmac.ComputeHash($dk1) $pr=([System.BitConverter]::ToString($hmac));$pr
この場合、hdataは復号化段階で受信したキーです。 dv0_entropyは、DPAPIのDBOXで使用されるエントロピー定数です。 結果のblobには、8バイトのヘッダー0x00000000F6000000を前面に、HMACMD5 + 0x00を背面に割り当てる必要があります
その後、適切なレジストリキーにデータを書き込むことができます。
DPAPIおよびRSA SecurID
RSA SecurIDは、RSAが開発したワンタイムパスワードの生成に使用されるクライアントプログラムです。
大企業では非常に人気があり、DPAPIも使用しますが、もう少し複雑です。 この場合、RSAエンジニアは混乱し、より複雑なDPAPIスキームを適用することにしました。
トークンデータは、ファイル
%LOCALAPPDATA%\RSA\SecurIDStorage
に保存されます。これは、sqlite3データベースです。 暗号化された各トークンには、暗号化されたEnTokenSid(コード生成アルゴリズムの初期初期化のパラメーター)が含まれます。 EnTokenSidは、DBKey、トークンのSID、およびユーザーSIDに基づいて生成されます。DBKeyは、DPAPI復号化DBKeyEncによって次の順序で既に形成されています。
DBKeyEnc = DPAPI(CurrenUser, DPAPI(LocalSystem(DBKey))
つまり 最初に、DBキーがシステムマスターキーで暗号化され、次に、結果のDPAPI blobがユーザーマスターキーで再び暗号化されます。
また、データベースにはCheckSumのCryptoCheckSumがあります。
CryptoCheckSum = DPAPI blob(CurrenUser)
したがって、マージされたSecurIDStorageがマシンで機能するには、次のことを行う必要があります。
- ユーザーのSIDがEncTokenSidの形成に関与しているという事実により、仮想マシン上の現在のユーザーSIDを、SecurIDStorageデータベースを取得したユーザーのSIDと同じ値に設定する必要があります。 SysInternalsのNewSidユーティリティはこれに役立ちます。
- ユーザーのマスターキーとパスワードまたはドメイン秘密キーを使用してDBKeyEncを復号化します(マシンがドメインの場合)。
- システムマスターキーとDPAPI_SYSTEMパラメーターの値を使用して、以前の解読の結果を解読します。
- ユーザーのマスターキーを使用してCryptoCheckSumを復号化する
- 仮想マシンですでに受信したDBKeyとCheckSumの値を逆順で暗号化します。
- SecurIDの一部のバージョンでは、仮想マシンのHDDサイズをソースマシンのHDDサイズと同じに設定する必要もあります。 プログラムは起動時にそれをチェックします。
前述のように、DBKeyEncを復号化するには、ユーザーのマスターキーに加えて、システムマスタキーと、システムマスタキーを復号化する値DPAPI_SYSTEMも必要です。 DAPPI_SYSTEMは、実際には既に形成されたプリキーであり、システムマスターキーの形成に参加しています。 LSASSメモリ(mimikatz経由またはプロセスダンプの分析)または対応するレジストリブランチ(HKLM \ SYSTEM、HKLM \ SECURITY)から取得し、それらをダンプして同じImpacketを分析できます。
次に、次のスクリーンショットに示すように、取得したDPAPI_SYSTEMを使用して、dpapick(parser-examples / filegeneric.py)を使用して必要なBLOBを復号化します。
1)mimikatzを介してオフラインでDPAPI_SYSTEMを取得する

2)Impacketを介してオフラインでDPAPI_SYSTEMを取得する

3)ユーザーおよびシステムマスターキーを使用したDPAPIck復号化

チートシート
特定のデータの場所を忘れないように、別のセクションでそれらを取り出します。
カスタムマスターキー %APPDATA%\Microsoft\Protect\<SID>\*
システムマスターキー Windows\System32\Microsoft\Protect\*
DPAPI_SYSTEM LSASecrets – online SYSTEM, SECURITY (reg save …, system\backup, etc)
ユーザー証明書 %APPDATA%\Microsoft\SystemCertificates\My\Certificates\ %APPDATA%\Microsoft\Crypto\RSA\<SID>\
システム証明書 HKLM:\SOFTWARE\Microsoft\SystemCertificates\MY\Certificates\* C:\Programdata\Microsoft\Crypto\RSA\MachineKeys\
クロム %localappdata%\Google\Chrome\User Data\Default\Cookies %localappdata%\Google\Chrome\User Data\Default\Login Data
Dropbox HKCU\SOFTWARE\Dropbox\ks HKCU\SOFTWARE\Dropbox\ks1 %APPDATA%\Local\Dropbox\instance1\config.dbx %APPDATA%\Local\Dropbox\instance_db\instanse.dbx
RSAセキュリッド %LOCALAPPDATA%\RSA\SecurIDStorage
少し結論
DPAPIは素晴らしいものです-主なことは、ペンテストやRedTeamの調査を実施する際にどのように使用できるかを理解することです。
この記事では、DPAPI復号化を使用できるいくつかの例を紹介しました。 実際、範囲ははるかに広いです。 たとえば、RDP(* .rdg)、Icloud(pListファイル)、Skype(*。Xml)、Wi-Fiに接続するためのキーは考慮しませんでした。 すべての場所でDPAPIが適用され、対応するパーサーがdpapickフレームワークの一部として実装されます。
dpapickの修正バージョンは、
GitHubで入手でき
ます 。 このツールを使用してDPAPIを解読することをお勧めします。dpapickのさらなる開発に感謝します。
そして、いくつかの興味深い情報が
電報で私たちのチャンネルで見つけることができます。 RedTeamの目を通してIBについて説明します。
PSクールな会議をしてくれたOFFZONE-2018の主催者に感謝します!
PPS記事の第2部は
こちら