CVE-2023-38831 - WinRAR
Этот репозиторий содержит логику обнаружения для CVE-2023-38831 (эксплойт WinRAR, основанный на подмене ZIP-файлов / двойном расширении) с готовыми запросами / блоками кода, а также именами ETW-провайдеров и идентификаторами событий. Уязвимая версия WinRAR (< 6.23) на целевой системе
CVE-2023-38831 эксплуатируется, когда:
Пользователь открывает вредоносный ZIP-файл в WinRAR
Архив содержит:
● Файл-приманку (например, invoice.pdf)
● Каталог с тем же именем (например, invoice.pdf )
● Внутри каталога «два» файла с одинаковым именем, но немного разными именами (у одного файла — пробел и любое расширение в конце; например, если первый файл — «invoice.pdf », то второй может быть любым скриптом или исполняемым файлом, например «invoice.pdf .cmd»)
WinRAR выполняет скрипт или исполняемый файл вместо открытия документа (в данном случае «PDF»)
Это выполнение инициируется вызовом функции ShellExecuteExW для запуска файла с передачей shExecInfo (ShellExecute через Explorer)
WinRAR порождает дочерний процесс (cmd, powershell, mshta, wscript, exe — как и всё, что находится внутри папки)
Выполнение часто происходит из пути Temp / AppData / извлечённой папки
Схема потока Пользователь открывает архив
↓
WinRAR показывает файл-приманку
↓
Пользователь дважды щёлкает по документу
↓
WinRAR извлекает каталог с тем же именем
↓
Исполняемый файл записывается в *.pdf\*.pdf .exe
↓
ShellExecute через Explorer
↓
ImageLoad исполняемого файла
↓
Выполнение полезной нагрузки
Почему этот поток важен для обнаружения
● Нет использования макросов
● Нет зависимости от создания процессов
● Эксплойт основан на маскировке в файловой системе
● Сигнал с высокой точностью и низким уровнем шума
Важные технические детали
Файлы записываются в особой структуре
Например, есть два объекта (файл/каталог) с одинаковым именем: когда в архивном файле есть файл и каталог с одним именем, и вы хотите временно открыть файл, дважды щёлкнув по нему (целевому файлу) в открытом архиве, 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\`|
Если во временном каталоге (для распаковки) есть два файла с одинаковым именем, но разного размера (например, 20 КБ и 12 КБ), и вы открываете архив и открываете первый файл, 1.txt, размером 20 КБ, WinRAR предложит заменить файл вторым файлом, 1.txt, размером 10 КБ. Если нажать «Да», откроется только второй файл, 1.txt. Это условие можно добавить для исключения.
Важный момент для логики обнаружения
Выполнение процесса, инициированное из пути извлечения ZIP или временного каталога, с вводящим в заблуждение расширением или папкой, маскирующейся под файл
Когда WinRAR распаковывает файл во временный каталог, в нём должно быть два файла с одинаковым именем, но немного разными именами (пробел и любое расширение в конце), например, имя основного файла с « » (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 файловой системы
● ETW оболочки / Explorer
● 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. Image Load (подтверждение выполнения)
Обоснование: подтверждает фактическое выполнение без телеметрии создания процессов.
Логика обнаружения:
Загрузчик 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.
● lpVerb — если задать lpVerb равным NULL, ShellExecuteExA|W использует действие по умолчанию, если оно доступно; в противном случае выполняется действие «open» («открыть»). Действие «open» открывает или выполняет файл.
● lpFile — это путь к файлу, который используется в ShellExecuteExA для выполнения действия; обратите внимание на пробел (0x20) в конце пути к файлу.
Примечание:
1- Shell32.dll: именно здесь определена ShellExecuteExA. Она содержит логику разбора структуры SHELLEXECUTEINFO и определяет, как обработать запрос (например, открыть документ, запустить EXE-файл или показать диалог свойств)
2- как работает уязвимость: уязвимость в том, что WinRAR удаляет пробел из имени файла при записи, но забывает применить это изменение к списку извлечения. Поэтому имя целевого файла не меняется, и пробел остаётся в имени файла.
Также можно сказать, что ShellExecuteExA открывает файл «CLASSIFIED_DOCUMENTS.pdf .cmd». Расширение «.cmd» не имеет значения для ShellExecuteExA — она просто запускает файл с именем «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.
| Провайдер | Идентификатор события | Идентификатор события / Задача |
| ------------------------------------- | ----------------------------------------- | --------------------------- |
| `Microsoft-Windows-Shell-Core` | {30336983-0362-4540-9E69-14844E6A3B7A} | Идентификатор события 1 (Execute) |
| `Microsoft-Windows-Kernel-Process` | {22FB2AD3-E163-4078-8C2A-801648437D2D} | Загрузка образа / Запуск процесса |
3. Логика правила с высокой точностью для эксплуатации WinRAR CVE-2023-38831
- Обоснование: срабатывание при создании или загрузке исполняемого файла из каталога, имя которого заканчивается на расширение документа, а выполнение инициируется через API Explorer/Shell.
- Псевдокод логики обнаружения (правило с высокой точностью) — \\Detection_Logic\\WinRAR-CVE-2023-38831-Exploitation.txt
4. Правило обнаружения EDR (на основе ETW)
Обобщённое правило обнаружения EDR на основе следующей телеметрии:
● События создания файлов
● Выполнение через оболочку / вызов Explorer
● События загрузки образов (опционально, но эффективно)
Логика обнаружения: \\Detection_Logic\\EDR-Detection-ETW-based.txt
5. KQL-запрос без DeviceProcessEvents (если поддерживается конечной точкой)
Обоснование: эта версия работает без опоры на DeviceProcessEvents
Логика обнаружения: \\Detection_Logic\\KQL-Detection-without-DeviceProcessEvents.txt
6. Сигнал выполнения через оболочку (если включено и поддерживается)
Обоснование: повышает уверенность при корреляции с созданием файлов.
Логика обнаружения: \\Detection_Logic\\Shell-Execution-Signal.txt
7. Удобное для SOC (поток триажа)
Обоснование: это правило создано для каждого шага, обнаруженного во время атаки.
Логика обнаружения: \\Detection_Logic\\SOC-Friendly.txt
(Оповещение / если включены ProcessStart, CreateProcess или EDR-логика «родитель/потомок»)
1. Обнаружение, когда winrar.exe создаёт подозрительный каталог / файл, особенно из путей извлечения temp или архива, и запускает подозрительный созданный файл с использованием уязвимой версии WinRAR
Обоснование: создавайте правила в зависимости от событий, которые обрабатывает ваш продукт (доступ, события или облачные решения).
Логика обнаружения: \\Detection_Logic\\Gen-Pseudocode-Detection-Logic.txt
2. Обнаружение, когда winrar.exe порождает подозрительный дочерний процесс, особенно из путей извлечения temp или архива
Логика обнаружения:
Endpoint: \\Detection_Logic\\winrar-spawns-suspicious-child-process.txt
Sigma-правило: \\Detection_Logic\\Sigma-Rule-WinRAR Exploit.txt
3. Оповещение на основе ETW-провайдера (создание процесса)
| Провайдер | Идентификатор события |
| ------------------------------------- | --------------------------- |
| `Microsoft-Windows-Security-Auditing` | 4688 (создание процесса) |
Логика обнаружения
● Родительский процесс = winrar.exe
● Новый процесс = скриптовый движок или исполняемый файл
● CommandLine содержит Temp/AppData
4. KQL-запрос с DeviceProcessEvents (если поддерживается конечной точкой)
Обоснование: если мы хотим разрабатывать с использованием DeviceProcessEvents
Логика обнаружения: \\Detection_Logic\\KQL-Detection-with-DeviceProcessEvents.txt
5. Индикатор атаки (можно добавить оповещение с высокой степенью уверенности)
При соблюдении указанных ниже условий можно добавить правило IOA или список наблюдения для оповещения.
| Индикатор | Уверенность |
| ---------------------------------- | ---------- |
| winrar.exe порождает cmd/powershell | Высокая |
| Выполнение из Temp/AppData | Высокая |
| Выполнение `.cmd/.bat /.exe ` | Высокая |
| Открыт ZIP с двойным расширением | Средняя |
Создайте список наблюдения для двух файлов с одинаковым именем в каталоге, созданном уязвимой версией WinRAR (< 6.23):
Как известно, в каталоге не может быть двух файлов с одинаковым именем. Также не может быть каталога и файла с одинаковым именем.
Но это возможно в программах сжатия, таких как WinRAR/7-Zip. В сжатом файле неважно, есть ли файлы с одинаковым именем, — файлы записываются в особой структуре.
Таким образом, в ZIP/RAR-файле могут быть два объекта (файл/каталог) с одинаковым именем.
Вероятно, легитимные триггеры
● cmd.exe, порождённый самораспаковывающимися установщиками 7-Zip/WinRAR
● powershell.exe, запущенный корпоративными обновляторами ПО, упакованными в RAR
● rundll32.exe, используемый установщиками драйверов принтера или GPU
Логика исключений (пример)
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 – Выполнение пользователем: вредоносный файл
T1059 – Интерпретатор команд и скриптов
T1036 – Маскировка (двойное расширение)
Этот код обнаружения предназначен только для образовательных целей и авторизованного тестирования.
Не используйте его на системах, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.