AD CS Certificate Theft
これは、https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf からの素晴らしいリサーチの盗難章の小さな要約です
証明書で何ができるか
証明書を盗む方法を確認する前に、証明書がどのように役立つかについての情報があります:
Crypto APIを使用した証明書のエクスポート – THEFT1
インタラクティブなデスクトップセッションにおいて、ユーザーまたはマシン証明書とそれに関連する秘密鍵を抽出することは、特に秘密鍵がエクスポート可能である場合、簡単に行うことができます。これは、certmgr.msc
で証明書に移動し、右クリックしてすべてのタスク → エクスポート
を選択して、パスワードで保護された.pfxファイルを生成することで達成できます。
プログラマティックなアプローチでは、PowerShellのExportPfxCertificate
コマンドレットやTheWoverのCertStealer C#プロジェクトなどのツールが利用可能です。これらは、Microsoft CryptoAPI(CAPI)またはCryptography API: Next Generation(CNG)を使用して証明書ストアとやり取りします。これらのAPIは、証明書の保存と認証に必要な暗号化サービスを提供します。
ただし、秘密鍵がエクスポート不可能に設定されている場合、CAPIとCNGの両方は通常、そのような証明書の抽出をブロックします。この制限をバイパスするために、Mimikatzなどのツールを使用することができます。Mimikatzは、該当するAPIをパッチするcrypto::capi
およびcrypto::cng
コマンドを提供し、秘密鍵のエクスポートを可能にします。具体的には、crypto::capi
は現在のプロセス内のCAPIをパッチし、crypto::cng
はlsass.exeのメモリを対象にパッチします。
DPAPIを介したユーザー証明書の盗難 – THEFT2
DPAPIに関する詳細情報は以下を参照:
pageDPAPI - Extracting PasswordsWindowsでは、証明書の秘密鍵はDPAPIによって保護されています。ユーザーおよびマシンの秘密鍵の保存場所が異なり、ファイル構造もオペレーティングシステムが利用する暗号化APIによって異なります。SharpDPAPIは、DPAPIブロブを復号化する際にこれらの違いを自動的に認識できるツールです。
ユーザー証明書は主にレジストリ内の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マスターキーを取得するためには、以下のアプローチが使用されます:
To streamline the decryption of masterkey files and private key files, the certificates
command from SharpDPAPI proves beneficial. It accepts /pvk
, /mkfile
, /password
, or {GUID}:KEY
as arguments to decrypt the private keys and linked certificates, subsequently generating a .pem
file.
DPAPIを介したマシン証明書の盗難 – THEFT3
Windowsによってレジストリ内のHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates
に保存されているマシン証明書と、それに関連するプライベートキーは、CAPIの場合は%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys
、CNGの場合は%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys
にある。これらは、マシンのDPAPIマスターキーを使用して暗号化されている。これらのキーは、ドメインのDPAPIバックアップキーでは復号できず、代わりにSYSTEMユーザーのみがアクセスできるDPAPI_SYSTEM LSAシークレットが必要となる。
手動で復号化するには、Mimikatzでlsadump::secrets
コマンドを実行してDPAPI_SYSTEM LSAシークレットを抽出し、その後、このキーを使用してマシンのマスターキーを復号化する。また、以前に説明したように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
,Javaアプリケーションで使用される証明書とプライベートキーを保持する可能性のあるJava Keystores用の
.jks
/.keystore
/.keys
。
これらのファイルは、上記の拡張子を検索することでPowerShellやコマンドプロンプトで検索できます。
PKCS#12証明書ファイルが見つかり、パスワードで保護されている場合、pfx2john.py
を使用してハッシュの抽出が可能です。これは、fossies.orgで入手できます。その後、JohnTheRipperを使用してパスワードの解読を試みることができます。
NTLM資格情報のPKINIT経由での盗難 – THEFT5
与えられた内容は、PKINITを介したNTLM資格情報の盗難方法であるTHEFT5を通じて、NTLM資格情報の盗難方法を説明しています。以下は、受動態で再説明し、必要に応じて内容を匿名化および要約したものです:
KDCは、Kerberos認証を容易にしないアプリケーションのためにNTLM認証[MS-NLMP]をサポートするために、PKCAが利用される際に、特にPAC_CREDENTIAL_INFO
バッファ内でユーザーのNTLMワンウェイ関数(OWF)を特権属性証明書(PAC)に返すように設計されています。したがって、アカウントがPKINITを介してチケット発行チケット(TGT)を認証および取得すると、現在のホストがTGTからNTLMハッシュを抽出するための仕組みが提供され、レガシー認証プロトコルを維持します。このプロセスには、NTLM平文のNDRシリアル化された表現であるPAC_CREDENTIAL_DATA
構造の復号化が含まれます。
この特定のデータを含むTGTを要求することができるとされるユーティリティKekeoは、https://github.com/gentilkiwi/kekeoで利用可能であり、ユーザーのNTLMを取得することを容易にします。この目的で使用されるコマンドは次のとおりです:
さらに、Kekeoはスマートカードで保護された証明書を処理できることが指摘されています。これは、PINが取得できる場合に適用され、https://github.com/CCob/PinSwipeを参照しています。同様の機能は、Rubeusでもサポートされていることが示されており、https://github.com/GhostPack/Rubeusで入手できます。
この説明は、PKINITを介したNTLM資格情報の盗難に関わるプロセスとツール、PKINITを使用して取得したTGTを介してNTLMハッシュを取得し、このプロセスを容易にするユーティリティに焦点を当てています。
Last updated