2024年セキュリティの現状:競争が激化するAIの活用
先進的なサイバーセキュリティ対策を推進する組織がどのように課題を克服し、AIを活用してイノベーションを推進し、デジタルレジリエンスを強化しているかをご確認ください。
近年、デジタル証明書を悪用するいくつかのサイバー攻撃が世界的に注目を集めました。デジタル証明書は、個人、組織、デバイスなどのエンティティの身元を確認するための電子的な証明書で、オンライントランザクションで当事者間の信頼を築くために使われます。また一般的に、データの暗号化や署名、ユーザーやデバイスの認証、ネットワーク通信のセキュリティ保護にも使われています。デジタル証明書が悪用された最大規模の攻撃の1つが、2020年に起こったSolarWindsハッキングです。この攻撃では、攻撃者はActive Directoryフェデレーションサービス(ADFS)を悪用して秘密キーを入手し、証明書を偽造して正規ユーザーになりすますことで、検出を回避し、標的ネットワーク内でラテラルムーブメントを展開しました。セキュリティ関係者がこの攻撃活動の検出方法を公開し始めた頃、SpecterOps社が、証明書の窃取、アカウントの永続化、ドメインの昇格/永続化など、Active Directory証明書サービス(AD CS)の悪用につながる弱点を解説した調査レポートを公開しました。
このブログ記事では、世界中で確認されている、証明書を悪用する最新の攻撃の概要について説明します。また、証明書を入手するために使われるいくつかの手口、関連ログの収集方法、証明書を窃取する攻撃の緩和方法もご紹介します。
Windowsの証明書ストアは、Windowsコンピューターで、「証明書」と呼ばれる重要ファイルが保管される特殊な場所です。これらの証明書は、コンピューターが他のコンピューターやWebサイトと安全に通信するための特別な鍵のようなものです。証明書の重要性は、SpecterOps社の『Certified Pre-Owned』調査レポートと、ADFSを悪用したGolden SAML攻撃の2つを見れば明らかです。どちらも代替認証方式、特に証明書が深く関わっています。
Windowsでの証明書の保管場所は、通常、レジストリの「HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates」か、ローカルシステムの場合は「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates」です。
また、ユーザーの個人証明書は「%APPDATA%\Microsoft\SystemCertificates\My\Certificates\」に保管されます。関連するユーザー秘密キーの保管場所は通常、CAPIキーの場合は「%APPDATA%\Microsoft\Crypto\RSA\User SID\」、CNGキーの場合は「%APPDATA%\Microsoft\Crypto\Keys\」です(Schroeder氏とChristensen氏の共著『Certified Pre-Owned』、2021年より)。
レジストリエディター(Splunk、2023年)
Windowsのネイティブバイナリまたはサードパーティ製ユーティリティを使って証明書を抽出またはエクスポートする方法はさまざまです。このセクションでは、Windowsエンドポイントでのその実行方法をいくつかご紹介します。
Mimikatzは、ソースコードにあるとおり、Windowsのネイティブバイナリを使って暗号ライブラリにアクセスします。Windows内のcryptdll.dllモジュールを利用して、暗号キーのエクスポート関数を読み込み、crypt32.dllモジュールを利用して、証明書や暗号メッセージに関する関数の多くを実装します。テストでは一見したところ、証明書ファイルの変更以外、Mimikatzで証明書がエクスポートされた形跡は残っていませんでした。しかし詳しく調べると、デバッグログのMicrosoft-Windows-CAPI2 (詳細は後述)に、Mimikatzによる証明書のエクスポートが記録されていました。ただし、CAPI2ログを有効にするよりも、Mimikatz自体の動作(名前の変更、再コンパイル、モジュールの読み込み、プロセスへのアクセスなど)を検出する方が効果的かもしれません。
Mimikatzによる2つの実装を詳しく見てみましょう。
lsadump::backupkeys /system: /export
または
lsadump::secrets
1つ目のコマンドでは、lsadump関数を使ってDPAPIバックアップキーをエクスポートします。DPAPI (Data Protection API)は、Windowsで使われるデータ保護のためのAPIです。追加の監査ログがあってもおかしくないところですが、この関数によるエクスポート時に生成された他のログを見つけることはできませんでした。DPAPIとマスターキーのエクスポートについては、Roberto Rodriguez氏によるこちらの記事で詳しく説明されています。エクスポートでは、3つのファイル、.der、.keyx.rsa.pvk、.pfxがディスクに書き出されます。
Mimikatzのlsadump::backupkeysの出力(Splunk、2023年)
次に、Mimikatz内の実際の暗号モジュールを詳しく見てみましょう。最初にcrypto::capiを読み込んでから、キーをエクスポートします。先ほどの.keyx.rsa.pvkの形式でファイルがディスクに書き出されます。
秘密キーをエクスポートできない場合、Mimikatzのcrypto::capiコマンドとcrypto::cngコマンドを実行すると、秘密キーをエクスポートできるようにCAPIとCNGが修正されます。ただし、crypto::capiでは現在のプロセス内でCAPIを修正できるのに対して、crypto::cngではlsass.exeのメモリーの修正が必要になります(Schroeder氏とChristensen氏の共著『Certified Pre-Owned』、2021年より)。
crypto::capi
crypto::keys /export
Mimikatzのcrypto::capiの出力(Splunk、2023年)
ここでは、Microsoft社のCAPI (CryptoAPI)、またはさらに新しい暗号化APIであるCNG (Cryptography Next Generation)を使って証明書ストアとのやり取りが行われます。これらのAPIは、証明書ストレージや認証(特にユーザー認証)に必要なさまざまな暗号化サービスを実行します(Schroeder氏とChristensen氏の共著『Certified Pre-Owned』、2021年より)。
crypto::certificates /export
このコマンドと前述のコマンドとの違いは、このコマンドでディスクにエクスポートできるのは証明書、つまりPFXファイルのみである点です。書き出されるファイルは.pfxと.derです。
Mimikatzのcrypto::certificatesの出力(Splunk、2023年)
ディスクに.pfxと.derファイルが出力されていることがわかります。
Mimikatzでディスクに書き出されたファイル(Splunk、2023年)
crypto::certificates /systemstore:local_machine /store:my /export
このコマンドでは、証明書をエクスポートするストアを指定しています。この場合も書き出されるファイルは.pfxと.derです。
証明書の出力(Splunk、2023年)
crypto::scauth /caname:ca /upn:atomic@art.local
エクスポートとは特に関係ありませんが、このコマンドを使用すると、ストア内に新しいスマートカード証明書を作成できます。賢いツールですね。
Mimikatzのcrypto::scauthの出力(Splunk、2023年)
Microsoft社は、Windowsの証明書ストアを管理するためのさまざまなネイティブユーティリティを提供しています。たとえば、よく使われるのがCertUtil、CertMgr、CertReqです。2021年のSolarWindsに対するサプライチェーン攻撃では、CertUtilを悪用してPFXファイルがエクスポートされていることが確認されました。Splunk、CISA、FireEye社がそれぞれ検証したとおり、この攻撃ではGolden SAML攻撃によって証明書がエクスポートされています。以下の手順に従うか、Atomic Red Team (T1552.004)を使って、この攻撃をシミュレートできます。
certutil -Store My
このコマンドを実行すると、「My」ストア配下に保管されているすべての証明書がリストされます。証明書のシリアル番号を取得して証明書を抽出します。
CertUtil.exeの証明書出力(Splunk、2023年)
エクスポート
certutil -p password -exportPFX My 31f5a395749a3fbe4833b2dcc53992f2 c:\temp\atomic.pfx
CertUtil -exportPFXの出力(Splunk、2023年)
サーバーにアクセスした攻撃者は、証明書を直接抽出するだけでなく、CertSrv.mscインターフェイスまたはCertUtil.exeを使って証明書データベースを直接バックアップすることもあります。
CertUtil.exe -backupDb c:\\temp\\certificates\\
または
Certutil.exe -backup c:\\CABackup
CertUtil -backupの出力(Splunk、2023年)
ここで使用したCertUtil.exeコマンドではいずれも、ファイルがディスクに書き出されます。アラート対象のイベントとしての妥当性は低いかもしれませんが、ネットワーク全体でファイルの書き出しと証明書の移動を監視することはある程度役に立つでしょう。
PowerShellでは、Export-PFXCertificateまたはExport-Certificateコマンドレットを使って証明書を抽出できます。どちらの方法も、攻撃者が証明書を抽出するのに十分な能力があります。
PowerShellのExport-Certificateの出力(Splunk、2023年)
証明書マネージャーのCertMgr.mscでは、権限のあるユーザーが証明書をディスクにエクスポートできます。
CertMgr (Splunk、2023年)
エクスポートを選択すると、証明書のエクスポートウィザードが表示され、手順に沿って証明書をエクスポートできます。
証明書のエクスポートウィザード(Splunk、2023年)
最後まで手順を進めると、簡単な操作でエクスポートを完了できます。
また、証明書サーバー/認証局で、UIを使ってデータベースのバックアップを実行することもできます。
バックアップウィザード(Splunk、2023年)
Windowsで以下のイベントログを監視すると、証明書の削除、要求、エクスポートの検出に役立ちます。
次の例は、前述のソースを理解するために役立ちます。PowerShellを使って、プロバイダーのイベントを収集できます。CertificateServicesClient-LifecycleのSystemとUserでは、イベントIDは同じです。次の例はSystemの出力です。
(Get-WinEvent -ListProvider Microsoft-Windows-CertificateServicesClient-Lifecycle-System).Events | Format-Table Id, Description
PS C:\\Users\\Administrator> (Get-WinEvent -ListProvider Microsoft-Windows-CertificateServicesClient-Lifecycle-System).Events | Format-Table Id, Description
Id Description
-- -----------
1001 A certificate has been replaced. Please refer to the "Details" section for more information.
1002 A certificate has expired. Please refer to the "Details" section for more information.
1003 A certificate is about to expire. Please refer to the "Details" section for more information.
1004 A certificate has been deleted. Please refer to the "Details" section for more information.
1005 A certificate has been archived. Please refer to the "Details" section for more information.
1006 A new certificate has been installed. Please refer to the "Details" section for more information.
1007 A certificate has been exported. Please refer to the "Details" section for more information.
1008 A certificate has been associated with its private key. Please refer to the "Details" section for more information.
1009 A certificate could not be associated with its private key. Please refer to the "Details" section for more information.
|
これらのイベントID (EID)はすべて収集対象になりますが、特に重要なのが、証明書のエクスポートを示すEID 1007です。また、EID 1006や、EID 1008とEID 1009のようなエラーイベントも監視したいところです。
CAPIログのイベントID 70と認証ライフサイクルログのイベントID 1007を収集するには、以下のように指定します。
[WinEventLog://Microsoft-Windows-CertificateServicesClient-Lifecycle-User/Operational] disabled = 0 renderXml = 1 index = win [WinEventLog://Microsoft-Windows-CertificateServicesClient-Lifecycle-System/Operational] disabled = 0 renderXml = 1 whitelist = $XmlRegex=’(?:1007).+’ index = win [WinEventLog://Microsoft-Windows-CAPI2/Operational] disabled = 0 renderXml = 1 whitelist = $XmlRegex=’(?:70).+’ index = win |
適切なソースの収集方法がわかったところで、Splunk脅威調査チーム(STRT)が作成した新しい分析をいくつかご紹介しましょう。
この分析では、認証ライフサイクルログのイベントID 1007が監視されます。イベントID 1007は、ローカル証明書ストアから証明書がエクスポートされたときに生成されます。
証明書のエクスポートの検出(Splunk、2023年)
Windows Steal Authentication Certificates CS Backup
この分析では、イベントID 4876に基づいて、Active Directory証明書サービスストアがバックアップされたことが検出されます。このイベントは、CertSrv.mscのUIまたはCertUtil.exeの-BackupDBオプションを使ってバックアップが実行されたときに常に生成されます。
証明書サービスストアのバックアップの検出(Splunk、2023年)
Windows Steal Authentication Certificates Certificate Request
この分析では、証明書サービスのAD CSに新しい証明書が要求されたことが検出されます。この操作は本来悪質なものではありませんが、証明書の要求に関連する他のイベントとともに追跡し、相関付けて監視することが推奨されます。アカウントから証明書が要求されると、CAでイベントID 4886「証明書サービスは証明書の要求を受信しました」が生成されます。
証明書要求の検出(Splunk、2023年)
Windows Steal Authentication Certificates Certificate Issued
この分析では、証明書サービスのAD CSで新しい証明書が発行されたことが検出されます。この操作は本来悪質なものではありませんが、証明書の発行に関連する他のイベントとともに追跡し、相関付けて監視することが推奨されます。CAでは、証明書が発行されると、イベントID 4887「証明書サービスは証明書の要求を許可し、証明書を発行しました」が生成されます。
証明書発行の検出(Splunk、2023年)
Windows PowerShell Export Certificate
この分析では、PowerShellのスクリプトブロックログが監視され、Export-Certificateコマンドレットが検出されます。このコマンドレットによるエクスポートは、Windowsエンドポイントのローカル証明書ストアから証明書を盗み出す攻撃で使われることがあります。
証明書のエクスポートの検出(Splunk、2023年)
Windows Mimikatz Crypto Export File Extensions
この分析では、Mimikatz内の暗号モジュールに関連する、ハードコードされた拡張子が検出されます。証明書の移動やダウンロードは必ずしも悪質な操作ではありませんが、Mimikatzでハードコードされた名前を監視することは、証明書の不正エクスポートの検出に役立ちます。
エクスポートファイルの拡張子の検出(Splunk、2023年)
Windows Steal Authentication Certificates CryptoAPI
この分析では、WindowsイベントログCAPI2 (CryptoAPI 2)が監視され、不審な証明書抽出が検出されます。通常、このイベントログはPKIに関する問題の診断に使われますが、証明書のエクスポートを検出するためにも役立ちます。このイベントログには、多数のさまざまなプロセスからの一般的なPKI要求がすべて記録されるため、大量のイベントが出力されます。証明書がエクスポートされたときに生成されるのはイベントID 70「証明書の秘密キーの取得」です。STRTは、Cobalt StrikeでMimikatzを実装し、そのバイナリを使ってこの分析をテストしました。
CAPIのログ(Splunk、2023年)
STRTがこれまでに作成した分析は、こちらの分析ストーリーですべてご覧いただけます。
Windowsシステムから証明書を抽出する脅威を緩和するためのベストプラクティスがいくつかあります。重要な取り組みの1つは、アクセス制御を適用し、各ユーザーに与える権限を最小限にすることで、証明書や秘密キーへのアクセスを制限することです。また、証明書のピン留め(ピンニング)を使って、不正な証明書や盗まれた証明書の使用を防ぐことも大切です。
そのほかのベストプラクティスとして、証明書失効リスト(CRL)を使用して、証明書の失効状況を監視し、失効した証明書が使用されていないことを確認すること、ソフトウェア制限ポリシーを適用して、Mimikatzのような悪質なソフトウェアの実行を制限すること、エンドポイント保護用のマルウェア対策ソフトウェアを導入して、悪質なアクティビティを監視、ブロックすること、セキュリティイベントログを定期的に監視して、不審なアクティビティがないかどうかを確認すること、従業員トレーニングを実施して証明書を保護することの重要性を理解してもらうことも挙げられます。
既知の脆弱性対策として、ソフトウェアとシステムにセキュリティパッチやアップデートを定期的に適用して、すべてを最新の状態に保つことも重要です。また、不審なアクティビティを検出したときにすばやく対応できるようにするには、インシデント対応計画を整備し、計画を定期的にテストすることが不可欠です。さらに、AD CSの一般的なセキュリティハイジーンに加えて、SpecterOps社が提供する、CSリスクの評価に役立つ攻守ツールや、緩和策を詳しく解説した『Certified Pre-Owned』ガイドを活用することも検討しましょう。
リモートからアクセスするエンドポイントが増え、重要データが組織内だけでなくクラウドインフラにも置かれる今日、証明書は認証とアクセスのセキュリティ確保に欠かせない要素です。証明書が盗まれると、悪意を持った内部関係者または攻撃者に企業機密ファイルへのアクセスを許してしまう可能性があります。証明書のエクスポートを監視し、Active Directory証明書サービスの悪用を防ぐことは、機密情報を盗み出そうとする攻撃を防止するために必須の対策です。
このブログを、証明書サービスに関する詳細を提供してくれた@inthecards77に捧げます。
セキュリティ分析ストーリーの最新コンテンツは、GitHubとSplunkbaseからダウンロードできます。Splunk Security Essentialsでは、プッシュアップデートによってすべての検出方法を利用できます。
すべてのセキュリティコンテンツの一覧は、Splunkマニュアルのリリースノートに掲載されています。
ご意見やご要望がございましたら、GitHubから遠慮なくお寄せください。Slackチャネル「#security-research」にご参加いただくこともできます。SlackのSplunkユーザーグループへの招待が必要な場合は、こちらの手順に従ってください。
この記事の執筆にあたってご協力いただいた以下の方々に感謝を申し上げます。Teoderick Contrera、Michael Haag、Mauricio Velazco、Rod Soto、Jose Hernandez、Patrick Barreiss、Lou Stella、Bhavin Patel、Eric McGinnis。
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。