13 KiB
AD CS 証明書の盗難
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
サイバーセキュリティ企業で働いていますか? HackTricks で会社を宣伝したいですか?または、PEASS の最新バージョンにアクセスしたり、HackTricks を PDF でダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
-
The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
-
公式の PEASS & HackTricks スワッグを手に入れましょう。
-
💬 Discord グループまたはtelegram グループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
-
**ハッキングのトリックを共有するには、hacktricks リポジトリとhacktricks-cloud リポジトリ**に PR を提出してください。
証明書で何ができるか
証明書を盗む方法を確認する前に、証明書がどのように役立つかについての情報をいくつか紹介します。
# Powershell
$CertPath = "C:\path\to\cert.pfx"
$CertPass = "P@ssw0rd"
$Cert = New-Object
System.Security.Cryptography.X509Certificates.X509Certificate2 @($CertPath, $CertPass)
$Cert.EnhancedKeyUsageList
# cmd
certutil.exe -dump -v cert.pfx
Crypto APIを使用して証明書をエクスポートする - THEFT1
ユーザーまたはマシンの証明書と秘密鍵を抽出する最も簡単な方法は、対話型デスクトップセッションを介して行うことです。もし秘密鍵がエクスポート可能であれば、certmgr.msc
で証明書を右クリックし、すべてのタスク → エクスポート...
を選択して、パスワードで保護された.pfxファイルとしてエクスポートすることができます。
これはプログラムでも実行することができます。PowerShellのExportPfxCertificate
コマンドレットやTheWoverのCertStealer C#プロジェクトなどの例があります。
これらの方法は、証明書ストアとのやり取りにMicrosoft CryptoAPI(CAPI)またはより新しいCryptography API: Next Generation(CNG)を使用しています。これらのAPIは、証明書の保存と認証に必要なさまざまな暗号化サービスを提供します(他の用途も含まれます)。
もし秘密鍵がエクスポート不可能であれば、CAPIとCNGはエクスポート不可能な証明書の抽出を許可しません。Mimikatzのcrypto::capi
およびcrypto::cng
コマンドを使用すると、CAPIとCNGをパッチして秘密鍵のエクスポートを許可することができます。crypto::capi
は現在のプロセスでCAPIをパッチしますが、crypto::cng
はlsass.exeのメモリをパッチする必要があります。
DPAPIを使用したユーザー証明書の盗難 - THEFT2
DPAPIについての詳細は次の場所で確認できます:
{% content-ref url="../../windows-local-privilege-escalation/dpapi-extracting-passwords.md" %} dpapi-extracting-passwords.md {% endcontent-ref %}
Windowsは、証明書の秘密鍵をDPAPIを使用して保存します。Microsoftは、ユーザーとマシンの秘密鍵の保存場所を分けています。暗号化されたDPAPIのブロブを手動で復号化する場合、開発者はOSが使用した暗号化APIを理解する必要があります。なぜなら、秘密鍵ファイルの構造は2つのAPI間で異なるからです。SharpDPAPIを使用すると、これらのファイル形式の違いを自動的に考慮します。
Windowsは、ユーザー証明書を一般的にはレジストリのHKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates
に保存しますが、一部のユーザーの個人証明書は%APPDATA%\Microsoft\SystemCertificates\My\Certificates
にも保存されます。関連するユーザーの秘密鍵の場所は、主にCAPIキーの場合は%APPDATA%\Microsoft\Crypto\RSA\User SID\
、CNGキーの場合は%APPDATA%\Microsoft\Crypto\Keys\
です。
証明書と関連する秘密鍵を取得するには、次の手順を実行する必要があります:
- ユーザーの証明書ストアから盗みたい証明書を特定し、キーストア名を抽出します。
- 関連する秘密鍵を復号化するために必要なDPAPIマスターキーを見つけます。
- 平文のDPAPIマスターキーを取得し、それを使用して秘密鍵を復号化します。
平文のDPAPIマスターキーを取得するには:
# With mimikatz
## Running in a process in the users context
dpapi::masterkey /in:"C:\PATH\TO\KEY" /rpc
# with mimikatz
## knowing the users password
dpapi::masterkey /in:"C:\PATH\TO\KEY" /sid:accountSid /password:PASS
マスターキーファイルとプライベートキーファイルの復号を簡素化するために、SharpDPAPIのcertificates
コマンドを使用できます。/pvk
、/mkfile
、/password
、または{GUID}:KEY
引数を使用して、プライベートキーと関連する証明書を復号し、.pem
テキストファイルを出力します。
SharpDPAPI.exe certificates /mkfile:C:\temp\mkeys.txt
# Transfor .pem to .pfx
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
DPAPIを使用したマシン証明書の盗難 – THEFT3
Windowsはマシン証明書をレジストリキー HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates
に保存し、プライベートキーはアカウントによって異なる場所に保存します。
SharpDPAPIはこれらの場所すべてを検索しますが、最も興味深い結果は %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys
(CAPI)および %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys
(CNG)から得られます。これらのプライベートキーはマシン証明書ストアに関連付けられており、WindowsはこれらをマシンのDPAPIマスターキーで暗号化します。
これらのキーはドメインのDPAPIバックアップキーを使用して復号することはできませんが、代わりにシステムのDPAPI_SYSTEM LSAシークレットを使用する必要があります。このシークレットはSYSTEMユーザーのみがアクセスできます。
Mimikatzの**lsadump::secrets
コマンドを使用してこれを手動で行い、抽出したキーを使用してマシンマスターキーを復号化することができます。
また、CAPI/CNGを以前と同じようにパッチし、Mimikatzのcrypto::certificates /export /systemstore:LOCAL_MACHINE
コマンドを使用することもできます。
SharpDPAPIのcertificatesコマンドには/machine
フラグがあります(昇格している場合)、これにより自動的にSYSTEMに昇格**し、DPAPI_SYSTEM LSAシークレットをダンプし、これを使用してマシンのDPAPIマスターキーを復号化し、キーの平文をルックアップテーブルとして使用してマシン証明書のプライベートキーを復号化します。
証明書ファイルの検索 – THEFT4
時には証明書がファイルシステムにあることがあります。たとえば、ファイル共有やダウンロードフォルダにあります。
私たちがよく見るWindowsに焦点を当てた証明書ファイルの一般的なタイプは、.pfx
と .p12
ファイルです。.pkcs12
や .pem
も時々現れますが、頻度は低いです。
他にも興味深い証明書関連のファイル拡張子には、.key
(プライベートキー)、.crt/.cer
(証明書のみ)、.csr
(証明書署名要求、証明書やプライベートキーは含まれていません)、.jks/.keystore/.keys
(Javaキーストア。Javaアプリケーションで使用される証明書とプライベートキーが含まれる場合があります)があります。
これらの拡張子を使用して、PowerShellまたはコマンドプロンプトで検索すれば、これらのファイルを見つけることができます。
もしPKCS#12証明書ファイルを見つけ、それがパスワードで保護されている場合、pfx2john.pyを使用してハッシュを抽出し、JohnTheRipperを使用してクラックすることができます。
PKINITを介したNTLM資格情報の盗難 – THEFT5
NTLM認証をサポートするために、Kerberos認証をサポートしないネットワークサービスに接続するアプリケーションに対して、PKCAが使用される場合、KDCは特権属性証明書(PAC)の**
PAC_CREDENTIAL_INFO
**バッファにユーザーのNTLMワンウェイ関数(OWF)を返します。
したがって、アカウントが認証され、PKINITを介してTGTを取得した場合、現在のホストはTGTからNTLMハッシュを取得するための組み込みの「failsafe」があります。これには、NTLM平文の**PAC_CREDENTIAL_DATA
構造を復号化**することが含まれます。この構造は、NTLM平文のネットワークデータ表現(NDR)シリアル化表現です。
Kekeoを使用して、この情報を含むTGTを要求し、ユーザーのNTLMハッシュを取得することができます。
tgt::pac /caname:thename-DC-CA /subject:harmj0y /castore:current_user /domain:domain.local
Kekeoの実装は、PINを回復**することができれば、現在接続されているスマートカードで保護された証明書でも動作します。**また、Rubeusでもサポートされます。
参考文献
- すべての情報はhttps://www.specterops.io/assets/resources/Certified_Pre-Owned.pdfから取得されました。
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
-
The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
-
公式のPEASS&HackTricksのグッズを手に入れましょう。
-
💬 Discordグループに参加するか、telegramグループに参加するか、Twitterでフォローする🐦@carlospolopm。
-
ハッキングのトリックを共有するには、hacktricksリポジトリとhacktricks-cloudリポジトリにPRを提出してください。