
RoguePlanet Microsoft Defender PoCの検証レポート(管理されたWindows 11ラボ環境におけるビルドノート、Defender検出結果、リスク評価、緩和策の推奨を含む)
本レポートは、Microsoft Defender に関連して公開された RoguePlanet PoC の検証に関するものです。説明されている手法は、2026年6月10日にメディアでローカル権限昇格(LPE)として発表されました。ローカルユーザーが NT AUTHORITY\SYSTEM 権限を取得できる可能性があるとされています。公開された説明では、Microsoft Defender がファイルを処理またはスキャンする際に使用する関数を利用するメカニズムであるとされています。
テストの目的は、制御された実験環境でエクスプロイトを作成・実行できるかどうかを確認し、最新の Windows 11 システム上で Microsoft Defender の保護メカニズムがどのように動作するかを観察することでした。本レポートでは、テスト環境、更新状況、Microsoft Defender の設定、コンパイル環境の準備、コンパイル結果、Defender の応答、およびリスク低減の推奨事項を網羅します。
テストは研究指向であり、専用のテスト用ワークステーション上でローカルに実施されました。結果は、特定のアーティファクトと特定の環境設定の動作の評価として解釈されるべきであり、この手法のすべてのバリエーションに対する耐性を完全に確認するものではありません。
分析対象資料で参照されている情報源:
記事:
https://thehackernews.com/2026/06/microsoft-defender-rogueplanet-zero-day.html
公開 PoC リポジトリ:
MSYS2 インストーラのソース:
https://github.com/msys2/msys2-installer/releases/tag/nightly-x86_64
Visual Studio のソース:
PoC は、Active Directory ドメイン外の WORKGROUP ワークグループで動作するクライアントワークステーション上で実行されました。ワークステーションにインストールされているオペレーティングシステムは、Microsoft Windows 11 Home、バージョン 25H2、64 ビットアーキテクチャです。
| パラメーター | 値 |
|---|---|
| システム名 | Microsoft Windows 11 Home |
| エディション | Home |
| システムバージョン | 25H2 |
| OS バージョン | 10.0.26200 |
| ビルド番号 | 26200 |
| アーキテクチャ | x64 / 64-bit |
| インストールタイプ | Client / Workstation |
| ホスト名 | LAPTOP-80LPIEH2 |
| デバイスメーカー | Lenovo |
| デバイスモデル | Lenovo Legion Slim 5 16IRH8 |
| プロセッサ | 12th Gen Intel(R) Core(TM) i5-12450H |
| RAM | 32 GB |
PoC が実施された日には、システムに 2026年6月のセキュリティ更新プログラムと、2026年5月および4月の以前の更新プログラムがインストールされていました。つまり、テストは最新の利用可能なセキュリティパッチが適用された Windows 11 25H2、ビルド 26200 上で実施されました。
| HotFixID | 更新タイプ | インストール日 |
|---|---|---|
| KB5094135 | セキュリティ更新 | 10.06.2026 |
| KB5094126 | セキュリティ更新 | 10.06.2026 |
| KB5087051 | 更新 | 14.05.2026 |
| KB5092762 | セキュリティ更新 | 13.05.2026 |
| KB5054156 | 更新 | 28.04.2026 |
テストに使用したワークステーションでは、Microsoft Defender ウイルス対策が通常モードで有効化されていました。保護サービスは実行中かつ有効であり、ウイルス対策、スパイウェア対策、動作監視、リアルタイム保護がアクティブでした。
| パラメーター | 値 |
|---|---|
| AMProductVersion | 4.18.26050.15 |
| AMServiceVersion | 4.18.26050.15 |
| AMEngineVersion | 1.1.26050.11 |
| AMRunningMode | Normal |
| AMServiceEnabled | True |
| AntivirusEnabled | True |
| AntispywareEnabled | True |
| RealTimeProtectionEnabled | True |
| BehaviorMonitorEnabled | True |
| OnAccessProtectionEnabled | True |
| IoavProtectionEnabled | True |
| NISEnabled | True |
| NISEngineVersion | 1.1.26050.11 |
| IsTamperProtected | True |
| DefenderSignaturesOutOfDate | False |
| RebootRequired | False |
| IsVirtualMachine | False |
テスト当日、Microsoft Defender のシグネチャは最新でした。ウイルス対策、スパイウェア対策、NIS のシグネチャは 2026年6月10日 13:27:32 に更新されていました。
| シグネチャタイプ | バージョン | 最終更新日 |
|---|---|---|
| AntivirusSignatureVersion | 1.453.27.0 | 10.06.2026 13:27:32 |
| AntispywareSignatureVersion | 1.453.27.0 | 10.06.2026 13:27:32 |
| NISSignatureVersion | 1.453.27.0 | 10.06.2026 13:27:32 |
最後のクイックスキャンは 2026年6月8日 15:00:36 から 15:01:58 に、シグネチャバージョン 1.451.323.0 を使用して実行されました。フルスキャンは以前に実行されていないか、履歴が利用できませんでした(FullScanAge の値が 4294967295 で、フルスキャンの開始時刻と終了時刻がありません)。
GitHub リポジトリからのコードの最初のコンパイル試行は、winternl.h ヘッダーがないためにエラーで終了しました。メッセージは、システムに分析対象コードが必要とする完全な Windows SDK ヘッダーセットが不足していることを示していました。

図1: 最初のコンパイル試行時に発生した winternl.h ヘッダーが見つからないエラー。
コードはまた、windows.h、Psapi.h、ntstatus.h、virtdisk.h、shlwapi.h、taskschd.h、bcrypt.h など、Windows API および NT API に関連する他のヘッダーも参照していました。このため、より完全なコンパイル環境を準備し、適切な SDK コンポーネントをインストールする必要がありました。

図2: 分析対象コードが必要とするヘッダーのリストの一部。
最初に、MSYS2/MinGW-w64 を使用してコンパイル環境を準備しました。この環境は、gcc および g++ コンパイラを含む Windows 用の GNU ツールを提供します。MSYS2 のパッケージは pacman を使用して管理されます。これは Linux システムの apt や Windows の winget と同様の役割を果たします。

図3: MSYS2 インストールの完了。
pacman を使用して MinGW-w64 GCC/G++ ツールチェーンをインストールしました。これは、Windows 向けの C/C++ コードのコンパイルを可能にするツールセットです。パッケージには、gcc コンパイラ、g++ C++ コンパイラ、リンカ、および Windows 環境で実行されるアプリケーションのビルドに必要なヘッダーとライブラリが含まれています。この試行の目的は、Visual Studio を使用せずに、MSYS2 で利用可能なオープンツールチェーンを使用してコードをコンパイルできるかどうかを確認することでした。

図4: pacman を使用した MSYS2/MinGW-w64 パッケージのインストール。
インストール後、g++ を使用してコードのコンパイルを試みました。コマンドでは、ソースファイルへのパスと生成する実行ファイルへのパスを直接指定しました。
C:\msys64\mingw64\bin\g++.exe C:\Users\User\Downloads\RoguePlanet.cpp -o C:\Users\User\Desktop\roguePlanet.exe
最初の顕著な Unicode モードの問題の兆候は、コンパイラのメッセージにおける文字型の非互換性に関するものでした。ログには、const wchar_t* または wchar_t* 型の値を LPCSTR または LPSTR に変換できないというエラーが含まれていました。これは、コードが Windows API 関数にワイド文字列を渡している一方で、コンパイラが従来の ANSI 文字列向けの関数バリアントを選択していることを意味していました。
Windows API では、多くの関数が ANSI(サフィックス A 付き)と Unicode(サフィックス W 付き)の2つのバリアントで存在します。たとえば、CreateFile は CreateFileA または CreateFileW としてマッピングされ、RegOpenKeyEx は RegOpenKeyExA または RegOpenKeyExW としてマッピングされます。A バリアントは char* または LPCSTR 型のパラメーターを期待し、W バリアントは wchar_t* または LPCWSTR 型のパラメーターを期待します。
分析対象のケースでは、コードは L"..." 形式のリテラルと wchar_t 型のバッファを使用していました。同時に、エラーメッセージは、コンパイラが GetModuleHandleA、RegOpenKeyExA、RegQueryValueExA、GetWindowsDirectoryA、CreateFileA、wsprintfA などの関数を選択したことを示していました。これは、コードが Unicode モードで記述されていたが、コンパイルコマンドで UNICODE と _UNICODE が定義されていなかったことを直接示しています。
そのため、UNICODE と _UNICODE の定義を追加して Unicode モードを強制しました。この変更後、明示的なサフィックスがない Windows API 関数は、CreateFileW、RegOpenKeyExW、GetModuleHandleW、GetWindowsDirectoryW などの W サフィックス付きバリアントにマッピングされるはずです。この変更後にエラーの一部が消失したことで、診断の正しさが確認されました。
C:\msys64\mingw64\bin\g++.exe C:\Users\User\Downloads\RoguePlanet.cpp -o C:\Users\User\Desktop\roguePlanet.exe -DUNICODE -D_UNICODE
しかし、Unicode 関連の問題が取り除かれた後も、コードと MinGW の間のより深い非互換性を示すエラーが残りました。これらは、FILE_BASIC_INFORMATION 構造体と FILE_RENAME_INFORMATION 構造体の重複定義(ソースコードと MinGW ヘッダーの両方で定義されている)に関するものや、MinGW で利用可能な FILE_RENAME_INFORMATION のバージョンがコードが期待するものと異なり、Flags フィールドが欠落していることなどに関するものでした。
さらに、g++ コンパイラの型(特に enum フラグや関数ポインタ)に対するより厳格なアプローチによってもエラーが発生しました。これは、VIRTUAL_DISK_ACCESS_MASK や ATTACH_VIRTUAL_DISK_FLAG の型、および関数ポインタを void* として渡すことに関連していました。その結果、MinGW はソースコードを大幅に変更しない限り、このコードのコンパイルには適さないと判断されました。