
CVE-2023-38831 - WinRAR
このリポジトリには、CVE-2023-38831(WinRAR ZIPファイルのなりすまし / 二重拡張子エクスプロイト)の検知ロジックが含まれており、生のクエリ/コードブロック、ETW固有のプロバイダ名+イベントIDを提供します。 ターゲットシステム上の脆弱なバージョンのWinRAR(< 6.23)
CVE-2023-38831は以下の場合に悪用されます:
ユーザーが悪意のあるZIPファイルをWinRARで開く
アーカイブに以下が含まれている:
● おとりのファイル(例:invoice.pdf )
● 同じ名前のディレクトリ(例:invoice.pdf \)
● ディレクトリ内に同じ名前だがわずかに異なる名前の「2つの」ファイル(一方のファイルは末尾にスペースがあり、任意の拡張子で終わる。例えば、1つ目のファイルが「invoice.pdf 」の場合、2つ目は「invoice.pdf .cmd」のようなスクリプトまたは実行ファイルになる可能性がある)
WinRARは文書(この場合は"PDF")を開く代わりに、スクリプトまたは実行ファイルを実行する
この実行は、ShellExecuteExW関数を呼び出してファイルを実行することでトリガーされ、shExecInfo(Explorer経由のShellExecute)を渡す
WinRARは子プロセス(cmd、powershell、mshta、wscript、フォルダ内にあるものと同じexeなど)を生成する
実行は多くの場合、Temp / AppData / 展開先パスから発生する
フロー概要 ユーザーがアーカイブを開く
↓
WinRARがおとりのファイルを表示
↓
ユーザーが文書をダブルクリック
↓
WinRARが同じ名前のディレクトリを展開
↓
実行ファイルが*.pdf\*.pdf .exeに書き込まれる
↓
Explorer経由でShellExecute
↓
実行ファイルのImageLoad
↓
ペイロード実行
このフローが検知にとって重要な理由
● マクロを使用しない
● プロセス作成依存性がない
● エクスプロイトはファイルシステムの偽装に依存
● 高信頼性、低ノイズのシグナル
重要な技術詳細
ファイルは特別な構造で書き込まれます
同一名のファイルとディレクトリの2つのオブジェクト(ファイル/ディレクトリ)が存在する場合、アーカイブファイル内で対象ファイルをダブルクリックして一時的に開こうとすると、WinRARはそのファイルを展開し、対象ファイルと同じ名前のすべてのファイルも展開します。それらはすべて%tmp%パスの一時ディレクトリに書き込まれます。
| ファイル/ディレクトリ名 | 展開先パス |
| ------------------------------------------------------ | --------------------------------------------------------------------------------- |
| CLASSIFIED_DOCUMENTS.txt <– クリックされた対象ファイル | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
| CLASSIFIED_DOCUMENTS.txt .cmd <– ディレクトリ内のファイル | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
一時(展開)ディレクトリに同じ名前で異なるサイズ(例:20KBと12KB)の2つのファイルがあり、アーカイブを開いて最初のファイル(1.txt、20KB)を開こうとすると、WinRARは2つ目のファイル(1.txt、10KB)と置き換えるかどうか尋ねてきます。「はい」をクリックすると、2つ目のファイル(1.txt)のみが開きます。この条件は除外ルールとして追加できます。
検知ロジックにおける重要なポイント
ZIP展開先パスまたは一時ディレクトリからトリガーされるプロセス実行で、誤解を招く拡張子やフォルダがファイルになりすましている
WinRARが一時ディレクトリにファイルを展開する際、同じ名前だがわずかに異なる名前(スペースと任意の拡張子で終わる)の2つのファイルが含まれている必要があります。例えば、メインファイル名の末尾に" "(CLASSIFIED_DOCUMENTS.pdf )があり、その後に".cmd"(CLASSIFIED_DOCUMENTS.pdf .cmd)が続くもの。
WinRARがDLLをロードし、ShellExecuteExA関数を呼び出す際、パラメータ"pExecInfo"にはスペースと任意の拡張子で終わるパス(例:"CLASSIFIED_DOCUMENTS.pdf .cmd")が含まれます。
ETWプロバイダと検知の考え方(ETWのみ) ETWプロバイダ
| 目的 | ETWプロバイダ |
| -------------------------- | ------------------------------------- |
| プロセス作成 | `Microsoft-Windows-Kernel-Process` |
| コマンドライン可視化 | `Microsoft-Windows-Security-Auditing` |
| ファイル操作(オプション) | `Microsoft-Windows-Kernel-File` |
検知は以下に依存します(ProcessStart、CreateProcess、またはEDRスタイルの親子ロジックがない場合):
● ファイルシステムETW
● シェル / Explorer ETW
● イメージロードETW(オプション、作成なし)
● コマンドラインETW(オプション)
コアETWプロバイダ
| 目的 | ETWプロバイダ |
| -------------------------- | ------------------------------------- |
| ディレクトリ作成 | `Microsoft-Windows-Kernel-File` |
| EXE作成 | `Microsoft-Windows-Kernel-File` |
| シェル実行 | `Microsoft.Windows.ShellExecute` |
| イメージロード | `Microsoft-Windows-Kernel-Image` |
| Explorer | `Microsoft-Windows-Explorer` |
| シェル | `Microsoft-Windows-Shell-Core` |
生の検知ロジック
高レベルでは、ロジックは以下を検知します:
● WinRAR.exeがファイル書き込みを開始
● 同じベース名のディレクトリとファイルの両方の作成
● リネームまたは上書き後に実行可能拡張子が現れる
● 短い時間枠(2秒未満)内で発生するシーケンス
このパターンは良性のワークフローでは非常にまれですが、エクスプロイトの実行パスの中核です。
● このルールは意図的に以下を避けています:
● コマンドライン検査
● 子プロセストラッキング
● 完全なファイルハッシュ
コア検知ロジックを以下に示します。信頼度レベルと簡単な説明を併記します。
1. イメージロード(実行確認)
理由:プロセス作成テレメトリなしで実際の実行を確認します。
検知ロジック:
Windowsローダー:
● Invoice.pdf .exeをメモリにマッピング
ETWシグナル:
● ImageLoad
● イメージパス:
● *.pdf\*.pdf .exe
2. 検知ルール(API ShellExecuteExA)- 高忠実度ルールロジック
以下のテレメトリに基づく汎用検知ルール:
● WinRar.exeによるファイル作成イベント
● WinRar.exeがDLL Shell32.dllをロードし、パラメータ付きでAPI(ShellExecuteExA|W)を使用開始するイメージロードイベント
● この関数はSHELLEXECUTEINFOという名前の引数を受け取ります。これは構造体で、多くのフィールドがありますが、重要なのはlpVerbとlpFileの2つです。
● lpVerb - LpVerbをNULLに設定すると、ShellExecuteExA|Wは利用可能なデフォルトの動詞を使用し、ない場合は"open"動詞を実行します。"open"動詞はファイルを開くか実行します。
● lpFile - lpFileはShellExecuteExAで動詞を実行するために使用されるファイルのパスです。ここで注目すべきは、ファイルパスの末尾にあるスペース文字(0x20)です。
注:
1- Shell32.dll: ここにShellExecuteExAが定義されています。SHELLEXECUTEINFO構造体を解析し、リクエストの処理方法(文書の開く、EXEの実行、プロパティダイアログの表示など)を決定するロジックが含まれています。
2- 脆弱性の動作方法:脆弱性はここにあります。WinRARは書き込み時にファイル名からスペースを削除しましたが、この変更を展開リストに反映するのを忘れました。そのため、対象ファイル名は変更されず、スペースがファイル名に残っています。また、ShellExecuteExAは"CLASSIFIED_DOCUMENTS.pdf .cmd"ファイルを開きます。ShellExecuteExAにとって".cmd"は重要ではなく、そのパスにある"CLASSIFIED_DOCUMENTS.pdf "という名前のファイルを実行するだけです。
検知ロジック(高忠実度ルールロジック):
● SQL-Based :\\Detection_Logic\\SQL-based-ShellExecute.txt
● KQL (ProcessCommandLine):\\Detection_Logic\\KQL-API-ProcessCommandLine.txt
● Pseudocode Detection Logic :\\Detection_Logic\\SQL-API-ShellExecute.txt
注:- 上記の標準に従って検知ロジックを作成できます。また、検知ルール作成に役立つイベントを取得するための簡単なPythonスクリプトも追加しています。ETWベースのルール作成時に有用です。
| プロバイダ | イベントID | イベントID / タスク |
| ------------------------------------- | ----------------------------------------- | --------------------------- |
| `Microsoft-Windows-Shell-Core` | {30336983-0362-4540-9E69-14844E6A3B7A} | イベントID 1(実行) |
| `Microsoft-Windows-Kernel-Process` | {22FB2AD3-E163-4078-8C2A-801648437D2D} | イメージロード / プロセス開始 |
3. WinRAR CVE-2023-38831エクスプロイトの高忠実度ルールロジック
- 理由:名前が文書拡張子で終わるディレクトリから実行ファイルが作成またはロードされ、Explorer/Shell APIを介して実行が開始された場合にアラートを発します。
- Pseudocode Detection Logic (High-Fidelity Rule Logic)- \\Detection_Logic\\WinRAR-CVE-2023-38831-Exploitation.txt
4. EDR検知ルール(ETWベース)
以下のテレメトリに基づく汎用EDR検知ルール:
● ファイル作成イベント
● シェル実行 / Explorer呼び出し
● イメージロードイベント(オプションだが強力)
Detection Logic : \\Detection_Logic\\EDR-Detection-ETW-based.txt
5. DeviceProcessEventsを使用しないKQLクエリ(エンドポイントがサポートする場合)
理由:このバージョンはDeviceProcessEventsに依存せずに動作します
Detection Logic : \\Detection_Logic\\KQL-Detection-without-DeviceProcessEvents.txt
6. シェル実行シグナル(有効かつサポートされている場合)
理由:ファイル作成と関連付けることで信頼性が高まります。
Detection Logic : \\Detection_Logic\\Shell-Execution-Signal.txt
7. SOCフレンドリー(トリアージフロー)
理由:このルールは攻撃中に発見されたすべてのステップに対して作成されました。
Detection Logic : \\Detection_Logic\\SOC-Friendly.txt
(アラート / ProcessStart、CreateProcess、またはEDRスタイルの親子ロジックが含まれる場合)
1. winrar.exeが不審なディレクトリ/ファイルを作成した場合(特にtempまたはアーカイブ展開パスから)を検知し、脆弱なバージョンのWinRARを使用して作成された不審なファイルを実行する
理由:製品が処理するイベント(アクセス、イベント、クラウドベースなど)に応じてルールを作成します
Detection Logic:\\Detection_Logic\\Gen-Pseudocode-Detection-Logic.txt
2. winrar.exeが不審な子プロセスを生成した場合を検知する(特にtempまたはアーカイブ展開パスから)
Detection Logic :
EndPonit : \\Detection_Logic\\winrar-spawns-suspicious-child-process.txt
Sigma Rule : \\Detection_Logic\\Sigma-Rule-WinRAR Exploit.txt
3. ETWプロバイダ(プロセス作成)に基づくアラート
| プロバイダ | イベントID |
| ------------------------------------- | --------------------------- |
| `Microsoft-Windows-Security-Auditing` | 4688(プロセス作成) |
検知ロジック
● 親プロセス = winrar.exe
● 新しいプロセス = スクリプトエンジンまたは実行ファイル
● CommandLineにTemp/AppDataが含まれている
4. DeviceProcessEventsを使用したKQLクエリ(エンドポイントがサポートする場合)
理由:DeviceProcessEventsを使用して開発する場合
Detection Logic : \\Detection_Logic\\KQL-Detection-with-DeviceProcessEvents.txt
5. 攻撃指標(高信頼度アラートを追加可能)
以下の条件を満たすことで、IOAまたはウォッチリストルールをアラート用に追加できます。
| 指標 | 信頼度 |
| ---------------------------------- | ---------- |
| winrar.exeがcmd/powershellを生成 | 高 |
| Temp/AppDataからの実行 | 高 |
| `.cmd/.bat /.exe `の実行 | 高 |
| 二重拡張子ZIPが開かれた | 中 |
脆弱なバージョンのWinRAR(< 6.23)によって作成されたディレクトリ内の同じ名前の2つのファイルに対するウォッチリストを作成します:
ディレクトリ内に同じ名前の2つのファイルを持つことはできません。また、ディレクトリとファイルが同じ名前を持つこともできません。
しかし、これはWinRar/7zipのような圧縮ソフトウェアでは可能です。圧縮ファイル内では、同じ名前のファイルがあっても問題なく、ファイルは特別な構造で書き込まれます。
そのため、ZIP/RARファイル内に同じ名前の2つのオブジェクト(ファイル/ディレクトリ)を持つことができます。
正当な可能性が高いトリガー
● 7-Zip/WinRARの自己解凍インストーラによって生成されたcmd.exe
● RARにパッケージされたエンタープライズソフトウェアアップデータによって起動されたpowershell.exe
● プリンタードライバーまたはGPUドライバーインストーラによって使用されるrundll32.exe
除外ロジック(例)
AND NOT (
ChildImage IN (cmd.exe, powershell.exe, rundll32.exe)
AND
CommandLine CONTAINS (
"setup.exe",
"install.cmd",
"driverinstall",
"vendorupdate"
)
)
これは既知のインストーラ動作を抑制しつつ、エクスプロイト検知を維持します。
アーカイブファイルテレメトリ(ファイルシステムイベント)— このルールをRAR/ZIP展開アクティビティ(例:実行直前に.cmd/.bat/.exeが作成され、特にWinRARの展開ディレクトリ(Rar$EX*など)から発生)と関連付けることで、実行がアーカイブ展開に直接続いていることを証明し、信頼性を大幅に高め、誤検知を減らすことができます。
T1204.002 – User Execution: Malicious File
T1059 – Command and Scripting Interpreter
T1036 – Masquerading (double extension)
この検知コードは教育目的および許可されたテスト目的のみに使用します。
所有していない、または明示的なテスト許可がないシステムでは使用しないでください。