
CVE-2023-36874 Windows エラー報告 LPE 用の武器化された CobaltStrike BOF
これは、Filip Dragovic(@filip_dragovic)による CVE-2023-36874 Windows エラー報告 LPE エクスプロイト を、成熟した実運用可能な CobaltStrike BOF として実装したものです。彼は、対象となる脆弱な DLL をリバースエンジニアリングし、このエクスプロイトに不可欠な非公開 COM 構造体を作成することで、動作するエクスプロイトの作成における重労働を担いました。
この BOF は、ユーザーが指定した EXE をターゲットマシン上のディスクにドロップし、その後脆弱性をトリガーして、その EXE を SYSTEM 権限で実行させます。
マイクロソフトはこの脆弱性の開示を Google の Threat Analysis Group の功績としていますが、私は CrowdStrike が公開した研究 を通じてこの脆弱性を知りました。
このブログ記事には、このエクスプロイトに関連するさまざまなアーティファクトが列挙されています。アーティファクトの命名規則(8.exe、2016.exe、2019.exe、10new+11.exe など)と、マイクロソフトが Server 2008 まで遡ってパッチをリリースした という事実から、この脆弱性がかなり多くの異なる Windows バージョンに影響を与えると推測できます。
この BOF は Windows 10 および Windows 11 21H1〜22H2 でのみ動作します。20H1/H2 でも動作する可能性がありますが、テストするマシンを持っていません。それより前のバージョンの Windows では、このエクスプロイトは実行中のプロセスをクラッシュさせます。これは wercplsupport.dll の COM 関連構造体の違いに関係しており、もう少し作業すれば克服できるはずだという気がしていますが、以前のバージョンの Windows 向けのエクスプロイトは他にもたくさんあるので、この作業は今のところ他の人に任せることにします。
CobaltStrike に wer_lpe.cna をロードすると、wer_lpe コマンドが追加されます。
アップロードしたい EXE へのパスと、必要に応じて現在の低権限ユーザーが書き込みアクセス権を持つディレクトリを指定します。ディレクトリが指定されない場合、wer_lpe は Beacon のカレントディレクトリへの書き込みを試みます。


OPSEC を維持し、静的シグネチャをかく乱し、さらにエクスプロイト後の自動クリーンアップを行うために、元の POC にいくつかの追加機能が実装されました。
エクスプロイトの一部として、C:\ProgramData\Microsoft\Windows\WER\ReportArchive ディレクトリ内に新しいフォルダを作成する必要があります。このフォルダには、エクスプロイトチェーンの一部としてディスクにドロップする必要がある Report.wer ファイルが格納されます。Filip による元のエクスプロイトは "MyFolder" というディレクトリを作成します。ReportArchive ディレクトリ内に存在する実際のフォルダ/レポートを調べることで、安易な検出をすり抜けやすい命名規則をよりよく把握できます。

BOF には、マシンの ReportArchive ディレクトリ内で見つかった実際のフォルダのスタブが 2 つ含まれています(1 つはコメントアウトされています)。実行時に wer_lpe は GUID をランダムに生成し、選択したスタブにそれを追加して、Report.wer ファイルを作成するための信頼性が高く(統計的に一意な)フォルダを作成します。

report.wer ファイルも、このエクスプロイトを検出できる簡単な静的インジケータの 1 つです。元のエクスプロイトは Report.wer ファイルを EXE 内のリソースとして同梱しています。この BOF は、攻撃マシンのエクスプロイトディレクトリから 'Report.wer' を特定して読み取り、Beacon に送信してディスクに書き込ませます。これにより、ユーザーは同梱されている Report.wer ファイルを、自分が選択した任意のファイルに置き換えることができます。
エクスプロイト内の COM 呼び出しのいくつかは、エクスプロイトを進めるために任意の文字列を必要とします。これらの文字列も、実行時に生成されるランダムな文字列に置き換えられています。
このエクスプロイトは任意の EXE を実行するため、EXE を継続的に実行させたい場合(新しい Beacon を実行させる場合など)は、EXE がディスク上でロックされるため、クリーンアップが問題になることがあります。Wer_lpe はこの問題に対処するために、LloydLabs が作成した Self-Deletion(私はこれから今でも素晴らしい恩恵を受け続けています)を実装しています。Wer_lpe は、エクスプロイトの過程で作成されたすべてのファイルとディレクトリの削除/クリーンアップを試み、その成否のステータスレポートを提供します。
2023 年のターゲットマシンで、署名なしの任意の EXE を実行しようとすることは多くの場合無意味な試みであるため、DLL サイドローディングの機会を利用するために、エクスプロイトに実際の wermgr.exe(任意のディレクトリにコピーしたもの)を実行させようと試行しました。しかし、エクスプロイトの性質上、これは不可能です。詳細はこの Twitter スレッドを参照してください。
このエクスプロイトは、マシン上でローカル管理者権限を持つユーザーが実行すると失敗します。これは、脆弱なコードが(意訳すると)「利用可能な最高の整合性」でユーザーを偽装するためです。ローカル管理者であるユーザーの場合、管理者トークンが偽装されることになります。このトークンは、脆弱性をトリガーするために必要なリダイレクトが実装された中整合性トークンとは別の DOS デバイスマップを持ちます。このエクスプロイトは UAC バイパスの代わりにはなりません。
マイクロソフトは 2023 年 7 月 11 日、人々がまだ実行している可能性のあるほぼすべての OS を対象とした月例セキュリティ更新プログラムの一環として、この脆弱性のパッチをリリースしました。みなさん、マシンにパッチを適用しましょう。
まず何よりも、Filip Dragovic(@filip_dragovic)の動作するコードと、このエクスプロイトの開発プロセスについて私と話し合い、教えてくれたことに対して多大な感謝を表します。
CrowdStrike の記事に感謝します。
LloydLabs の Self Deletion コードに感謝します。