
SharpDPAPI は、Mimikatz の DPAPI 機能の一部を移植した C# 実装です。
SharpDPAPIは、@gentilkiwi 氏の Mimikatz プロジェクトからのDPAPI機能の一部をC#に移植したものです。
このロジックは私が考案したものではなく、Mimikatzからの単なる移植であり、プロセスをより深く理解し、私たちのワークフローに適合するように運用化するためのものです。
SharpChrome サブプロジェクトは、@gentilkiwi 氏と @djhohnstein 氏の、特に彼の SharpChromeプロジェクト の成果を応用したものです。ただし、このバージョンのSharpChromeでは、ロックレスオープン をサポートする C# SQLライブラリ の別バージョンを使用しています。SharpChromeは、利用するSQLiteライブラリのサイズのために、SharpDPAPI内の別プロジェクトとして構築されています。
Chromeと新しいChromiumベースのEdgeブラウザの両方をSharpChromeでトリアージできます。
SharpChromeはまた、@AArnott氏の BCrypt P/Invokeコード の最小化バージョンをMITライセンスの下で使用しています。
DPAPIに詳しくない場合は、こちらの記事 を参照してください。DPAPIに関する資格情報とVaultの詳細については、Benjamin氏のこのテーマに関するwikiエントリをご確認ください。
@harmj0y がこの移植の主執筆者です。
SharpDPAPIはBSD 3-Clauseライセンスの下で提供されています。
__ _ _ _ ___
(_ |_ _. ._ ._ | \ |_) /\ |_) |
__) | | (_| | |_) |_/ | /--\ | _|_
|
v1.20.0
ドメインコントローラのDPAPIバックアップキーを取得します。必要に応じてDCと出力ファイルを指定できます。
SharpDPAPI backupkey [/nowrap] [/server:SERVER.domain] [/file:key.pvk]
*search* コマンドは、レジストリ、ファイル、フォルダ、base64ブロブ内の潜在的なDPAPIブロブを検索します。
search /type:registry [/path:HKLM\path\to\key] [/showErrors]
search /type:folder /path:C:\path\to\folder [/maxBytes:<numOfBytes>] [/showErrors]
search /type:file /path:C:\path\to\file [/maxBytes:<numOfBytes>]
search /type:base64 [/base:<base64 string>]
マシン/SYSTEMトリアージ:
machinemasterkeys - 到達可能なすべてのマシンマスターキーファイルをトリアージします(SYSTEMに昇格してDPAPI_SYSTEM LSAシークレットを取得します)
machinecredentials - 'machinemasterkeys'を使用し、その後マシンのCredentialファイルをトリアージします
machinevaults - 'machinemasterkeys'を使用し、その後マシンのVaultをトリアージします
machinetriage - 'machinecredentials'コマンドと'machinevaults'コマンドを実行します
ユーザートリアージ:
'masterkeys'コマンドの引数:
/target:FILE/folder - 特定のマスターキー、またはマスターキーが入ったフォルダをトリアージします(指定しない場合はローカルマスターキーをトリアージ)
/pvk:BASE64... - base64エンコードされたDPAPIドメイン秘密鍵ファイルを使用して、到達可能なユーザーマスターキーを最初に復号します
/pvk:key.pvk - DPAPIドメイン秘密鍵ファイルを使用して、到達可能なユーザーマスターキーを最初に復号します
/password:X - 平文パスワードを使用してターゲットユーザーのマスターキーを復号します(リモートでも動作)
/ntlm:X - NTLMハッシュを使用してターゲットユーザーのマスターキーを復号します(リモートでも動作)
/credkey:X - DPAPI credkey(ドメインまたはローカルのSHA1)を使用してターゲットユーザーのマスターキーを復号します(リモートでも動作)
/rpc - ドメインコントローラに依頼してターゲットユーザーのマスターキーを復号します
/server:SERVER - リモートサーバーをトリアージします(管理者アクセスが必要)
/hashes - ユーザーマスターキーファイルの 'hashes' をJTR/Hashcat形式で出力します(復号は行いません)
引数(credentials|vaults|rdg|keepass|triage|blob|ps コマンド):
復号:
/unprotect - 'ps'、'rdg'、または'blob'コマンドでCryptUnprotectData()を強制的に使用します
/pvk:BASE64... - base64エンコードされたDPAPIドメイン秘密鍵ファイルを使用して、到達可能なユーザーマスターキーを最初に復号します
/pvk:key.pvk - DPAPIドメイン秘密鍵ファイルを使用して、到達可能なユーザーマスターキーを最初に復号します
/password:X - 平文パスワードを使用してターゲットユーザーのマスターキーを復号します(リモートでも動作)
/ntlm:X - NTLMハッシュを使用してターゲットユーザーのマスターキーを復号します(リモートでも動作)
/credkey:X - DPAPI credkey(ドメインまたはローカルのSHA1)を使用してターゲットユーザーのマスターキーを復号します(リモートでも動作)
/rpc - ドメインコントローラに依頼してターゲットユーザーのマスターキーを復号します
GUID1:SHA1 ... - 1つ以上のGUID:SHA1マスターキーを使用して復号します
/mkfile:FILE - 1つ以上のGUID:SHA1マスターキーが記述されたファイルを使用して復号します
ターゲット指定:
/target:FILE/folder - 特定の 'Credentials'、'.rdg|RDCMan.settings'、'blob'、または 'ps' ファイルの場所、または 'Vault' フォルダをトリアージします
/server:SERVER - リモートサーバーをトリアージします(管理者アクセスが必要)
注: /pvk:KEY または /password:X と併用する必要があります
注: 'blob' または 'ps' コマンドには適用できません
証明書トリアージ:
'certificates'コマンドの引数:
/showall - インストール済み証明書に関連するものだけでなく、すべての復号された秘密鍵ファイルを表示します(デフォルト)
/machine - 証明書トリアージにローカルマシンストアを使用します
/mkfile | /target - /machineトリアージ用
[上記ユーザートリアージのすべての復号引数]
注: ほとんどの場合、ユーザーDPAPIシークレットを対象とする場合は *triage* を、SYSTEM DPAPIシークレットを対象とする場合は *machinetriage* を使用してください。
これらの機能は、自動的に実行可能な他のすべての該当機能をラップします。
__ _
(_ |_ _. ._ ._ / |_ ._ _ ._ _ _
__) | | (_| | |_) \_ | | | (_) | | | (/_
|
v1.9.0
ドメインコントローラのDPAPIバックアップキーを取得します。必要に応じてDCと出力ファイルを指定できます。
SharpChrome backupkey [/nowrap] [/server:SERVER.domain] [/file:key.pvk]
'cookies'、'logins'、'statekeys' コマンドの共通引数:
復号:
/unprotect - CryptUnprotectData() を強制的に使用します(非特権実行時のデフォルト)
/pvk:BASE64... - base64エンコードされたDPAPIドメイン秘密鍵ファイルを使用して、到達可能なユーザーマスターキーを最初に復号します
/pvk:key.pvk - DPAPIドメイン秘密鍵ファイルを使用して、到達可能なユーザーマスターキーを最初に復号します
/password:X - 平文パスワードを使用してターゲットユーザーのマスターキーを復号します(リモートでも動作)
/ntlm:X - NTLMハッシュを使用してターゲットユーザーのマスターキーを復号します(リモートでも動作)
/prekey:X - DPAPI prekey(ドメインまたはローカルのSHA1)を使用してターゲットユーザーのマスターキーを復号します(リモートでも動作)
/rpc - ドメインコントローラに依頼してターゲットユーザーのマスターキーを復号します
GUID1:SHA1 ... - 1つ以上のGUID:SHA1マスターキーを使用して復号します
/statekey:X - 復号されたAES状態キー('statekey'コマンドから)