
Anvil — это инструмент оценки поверхности атаки для толстых клиентских приложений Windows, ориентированный в первую очередь на анализ в рантайме. Он создан для специалистов по тестированию на проникновение и исследователей безопасности, проводящих целевые оценки безопасности приложений. Инструмент охватывает несколько классов атак за один целевой запуск.
Повышение привилегий и оценка поверхности атак для толстых клиентов Windows, основанные на анализе выполнения.
Anvil — это инструмент для повышения привилегий и оценки поверхности атак для толстых клиентов Windows, основанный на анализе выполнения. Вместо слепого сканирования файловой системы он сочетает захват Procmon с Windows AccessCheck, чтобы сообщать только о тех путях, которые наблюдаются во время выполнения и подтверждены как доступные для записи стандартными пользователями, устраняя шум ложных срабатываний, свойственный универсальным инструментам перечисления.
Большинство инструментов для оценки толстых клиентов охватывают один или два класса атак. Anvil построен на идее, что наблюдение во время выполнения, проверка на эксплуатацию через ACL и широкая поверхность атак должны быть объединены в одном целевом запуске — с конвейером проверок, который делает выводы применимыми на практике.
Каждый кандидат проходит четыре последовательных проверки, прежде чем будет зафиксирован.
Жёсткие проверки
AccessCheckЛогические проверки модулей
Supersede, OverwriteIf и т.д.) + защита от записи между пользователями.sys ядраОпределение цели
Инструмент определяет путь к исполняемому файлу цели (из --exe, --service или --pid). Если это служба, извлекается ServiceInfo с текущим PID и состоянием.
Захват Procmon
Уровень целостности процесса считывается сразу после запуска (пока процесс жив) и сохраняется в контексте.
Анализ с фильтрами по модулю
Каждый модуль запрашивает отфильтрованный экспорт CSV из Procmon, используя свой собственный файл .pmc (хранится в filters/). CSV анализируется, и применяется ряд проверок:
Статическая корреляция
Модуль com выполняет дополнительный статический проход — сканирование целевого бинарного файла на наличие встроенных CLSID и проверку каждого из них против HKLM и HKCU — чтобы выявить возможности перехвата, не проявившиеся во время захвата. Они помечаются тегом .
flowchart TB
%% Phase 1
subgraph Phase1["Phase 1: Target & Runtime Discovery"]
TR["Target Resolver<br/>--exe / --service / --pid"] -->
IL["Integrity Gate<br/>Medium-IL launch / Service restart"] -->
PM["Procmon Engine<br/>Runtime FS / Reg / Pipe events"]
end
%% Phase 2
subgraph Phase2["Phase 2: Signal Reduction"]
direction LR
PF["Per-Module PMC Filters<br/>High-signal traces only"] -->
CSV["Filtered CSV Export"]
end
%% Phase 3
subgraph Phase3["Phase 3: Exploitability Gates"]
HG["Hard Gates<br/>High-Integrity target<br/>Not protected path"] -->
ACL["AccessChk Validation<br/>Writable by standard user"] -->
LG["Logic Gates<br/>Module-specific rules"]
end
%% Phase 4
subgraph Phase4["Phase 4: Correlation"]
RT["Runtime Findings"]
ST["Static Correlation<br/>COM: CLSID binary scan / registry"]
end
%% Phase 5
subgraph Phase5["Phase 5: Reporting"]
SV["Severity Engine<br/>P1–P5"] --> OUT["Console Output"]
SV --> JSON["JSON Report"]
SV --> HTML["HTML Report"]
end
%% Cross-phase flow
PM --> PF
CSV --> HG
LG --> RT
ST -.-> RT
RT --> SV
%% Styling
classDef p1 fill:#0f2a44,stroke:#4cc9f0,color:#e6f1ff
classDef p2 fill:#2b193d,stroke:#f72585,color:#fde8f3
classDef p3 fill:#1f2d1c,stroke:#7ae582,color:#eaf7ea
classDef p4 fill:#3a1f1f,stroke:#ffb703,color:#fff3d6
classDef p5 fill:#0b2e2a,stroke:#00f5d4,color:#e6fffb
class Phase1 p1
class Phase2 p2
class Phase3 p3
class Phase4 p4
class Phase5 p5
linkStyle default stroke:#9aa4b2,stroke-width:2pxВсе модули, основанные на Procmon, требуют соответствующий файл фильтра .pmc в каталоге filters/ (см. Фильтры).
Anvil самостоятельно устанавливает свои две зависимости при первом запуске. Вы также можете установить их вручную:
pip install rich pefile
pip install rich>=13.0 pefile>=2023.2.7
Anvil использует три бинарных файла Sysinternals.
При каждом запуске Anvil разрешает каждый инструмент в следующем порядке приоритета:
--procmon, --handle или --accesschk (см. ниже)HKCU\Software\Anvil (записывается при первом успешном разрешении)wherelive.sysinternals.com и сохраняется в %LOCALAPPDATA%\Anvil\sysinternals\После разрешения инструмента любым способом его путь записывается в кэш реестра. Последующие запуски пропускают шаги 1–3 и сразу используют кэшированный путь.
Если инструмент не может быть загружен (нет интернета, брандмауэр или прокси), Anvil выводит структурированную ошибку и немедленно завершает работу. Отображается сообщение с перечислением отсутствующих инструментов и флагом, который следует использовать.
Укажите путь к любому бинарному файлу через его флаг. Anvil скопирует его в %LOCALAPPDATA%\Anvil\sysinternals\ и запишет путь в кэш реестра — после первого запуска флаг больше никогда не понадобится.
python anvil.py --exe "C:\App\target.exe" --procmon "D:\Tools\Procmon64.exe" --handle "D:\Tools\handle.exe" --accesschk "D:\Tools\accesschk.exe"
# Клонируйте репозиторий
git clone https://github.com/shellkraft/Anvil.git
cd Anvil
# Запуск — зависимости установятся автоматически при первом сканировании
python.exe anvil.py
Совет: Всегда запускайте терминал с правами Администратора перед запуском Anvil.
Требует PyInstaller (pip install pyinstaller):
python -m PyInstaller --onefile --console --add-data "filters;filters" --add-data "modules/logo.png;." --icon .\modules\logo.ico --name Anvil anvil.py
Выходной бинарный файл будет находиться в dist\Anvil.exe. Установка Python на целевой машине не требуется.
Примечание: Windows SmartScreen может заблокировать скомпилированный исполняемый файл при первом запуске, так как он не подписан.
Готовый Anvil.exe доступен на странице Релизов — если доверие случайным бинарным файлам из интернета вписывается в вашу модель угроз.
| Версия | SHA-256 | VirusTotal |
|---|---|---|
| V1.0.0 | 0ecf5a62... | 4/72 |
SHA-256 можно проверить с помощью
certutil -hashfile Anvil.exe SHA256(Windows) илиsha256sum Anvil.exe(Linux).
python anvil.py [--exe PATH | --service NAME | --pid PID] [options]
| Флаг | Описание |
|---|---|
--exe PATH | Целевой исполняемый файл. Запускается с Medium IL для захвата Procmon. |
--service NAME | Имя службы Windows. EXE определяется из реестра; служба перезапускается для захвата запуска. |
--pid PID | Подключиться к уже запущенному процессу. Procmon захватывает текущую активность. |
| Флаг | По умолчанию | Описание |
|---|---|---|
--modules LIST | all | Список модулей для запуска через запятую. |
Имена модулей: dll, com, registry, binary, configs, installdir, memory, symlink, unquoted, pesec, pipes
| Флаг | По умолчанию | Описание |
|---|---|---|
--procmon-runtime SEC | 30 | Окно захвата Procmon в секундах. Увеличьте для медленно запускающихся приложений. |
Базовое сканирование настольного приложения:
python anvil.py --exe "C:\Program Files\MyApp\myapp.exe" --report report.html
Более длинное окно захвата для медленно запускающегося приложения:
python anvil.py --exe "C:\Program Files\MyApp\myapp.exe" --procmon-runtime 60 --scan-install-dir
Цель — служба Windows:
python anvil.py --service MyAppSvc --modules dll,binary,unquoted,registry
Подключение к уже запущенному процессу:
python anvil.py --pid 4872 --report report.html --verbose
Запуск только определённых модулей:
python anvil.py --exe "C:\App\app.exe" --modules dll,symlink,unquoted
Сканирование памяти процесса на дополнительные пользовательские строки:
python anvil.py --exe "C:\App\app.exe" --modules memory --memory-strings "InternalSecret,DevPassword"
Изолированная машина — предоставить Sysinternals вручную (копируется один раз):
python anvil.py --exe "C:\App\app.exe" --procmon "E:\Sysint\Procmon64.exe" --handle "E:\Sysint\handle.exe" --accesschk "E:\Sysint\accesschk.exe"
Цветовая кодировка по серьёзности с опциональными блоками деталей при --verbose. Требуется пакет rich (устанавливается автоматически).
--report findings.json)Машиночитаемый массив объектов находок:
[
{
"severity": "P1",
"module": "DLL Hijacking",
"message": "[System→User] Phantom DLL: version.dll",
"detail": "DLL name : version.dll\nAttempted : C:\\ProgramData\\MyApp\\version.dll\n..."
}
]
--report report.html) [Рекомендуется]Автономный однофайловый отчёт с:
Все файлы фильтров .pmc включены в каталог filters/ репозитория — настройка не требуется. Модули на базе Procmon подхватят их автоматически.
Если файл фильтра потерян или повреждён, пересоздайте его в Procmon, используя указанные выше правила: Filter → Filter… для настройки условий, затем File → Export Configuration… и сохраните в filters/<name>.pmc.
Anvil автоматически подхватит файл .pmc при следующем запуске этого модуля.
Anvil предназначен для исследований в области безопасности, охоты за багами и авторизованных тестов на проникновение. Используйте его только на системах, которые вам принадлежат или на которые у вас есть явное письменное разрешение.
Эксплуатационные замечания
[Static Correlation]Формирование отчёта
Результаты выводятся в терминал (с цветовой кодировкой) и, при необходимости, записываются в JSON или автономный HTML-отчёт.
| Возможность | AnviL | Spartacus | Robber | winPEAS | Procmon |
|---|
| Автоматическое обнаружение | ✅ | ✅ | ✅ | ✅ | ❌ |
| Обнаружение на основе выполнения | ✅ | ❌ | ❌ | ❌ | ✅ |
| Обнаружение фантомных DLL | ✅ | ✅ | ❌ | ❌ | ◐ |
| Анализ с учётом порядка поиска | ✅ | ❌ | ❌ | ❌ | ❌ |
| Проверка возможности записи на основе ACL | ✅ (AccessChk) | ◐ | ◐ | Basic | ❌ |
| Фильтрация сигналов по модулям | ✅ (.pmc filters) | ❌ | ❌ | ❌ | ❌ |
| Устранение ложных срабатываний (конвейер проверок) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Перезапуск службы и повторный захват PID | ✅ | ❌ | ❌ | ❌ | ❌ |
| Имитация пользователя с Medium IL | ✅ | ❌ | ❌ | ❌ | ❌ |
| Хайджекинг DLL (с учётом толстых клиентов) | ✅ | ❌ | ❌ | ◐ | ❌ |
| Корреляция хайджекинга COM | ✅ | ❌ | ❌ | ❌ | ❌ |
| Анализ ACL именованных каналов / олицетворения | ✅ | ❌ | ❌ | ❌ | ❌ |
| Обнаружение атак на символьные ссылки / соединения | ✅ | ❌ | ◐ | ◐ | ❌ |
| Секреты в памяти (сканирование живого процесса) | ✅ | ❌ | ❌ | ◐ | ❌ |
| Анализ безопасности / обхода защиты PE | ✅ | ❌ | ❌ | ◐ | ❌ |
| Оценка повышения привилегий (не эксплуатация) | ✅ | ✅ | ✅ | ❌ | ❌ |
| Автоматизированная эксплуатация | ❌ | ✅ | ✅ | ❌ | ❌ |
| Оценка достоверности / серьёзности | ✅ (P1–P5) | ❌ | ❌ | ❌ | ❌ |
| Анализ конкретной цели (exe / svc / pid) | ✅ | ❌ | ❌ | ❌ | ✅ |
| Структурированные отчёты (JSON / HTML) | ✅ | ❌ | ❌ | TXT | ❌ |
| Самостоятельный бинарный дистрибутив | ✅ | ✅ | ✅ | ✅ | ✅ |
| Модуль | Флаг | Что проверяется |
|---|
| Хайджекинг DLL | dll | События CreateFile для .dll — фантомные DLL и загруженные DLL в записываемых каталогах |
| Хайджекинг COM | com | Ключи реестра COM-сервера, доступные для записи стандартным пользователям; бинарное сканирование ProgID |
| Хайджекинг бинарных файлов | binary | События CreateFile для .exe — подкладывание фантомных EXE и каталоги с записываемыми EXE |
| Небезопасные конфигурации | configs | Доступ к файлам конфигурации (.ini, .xml, .json, .yaml и т.д.) из записываемых каталогов |
| Каталог установки | installdir | Корневой ACL, EXE с манифестом повышения и записываемые подкаталоги |
| Строки в памяти | memory | Сканирование памяти живого процесса на предмет учётных данных, токенов, ключей API, JWT, строк подключения |
| Атаки на символьные ссылки | symlink | Векторы соединений и символьных ссылок в записываемых путях temp / appdata |
| Некавыченный путь службы | unquoted | Службы с некавыченными ImagePaths, где промежуточные фиктивные каталоги доступны для записи |
| Повышение через реестр | registry | Ключи реестра, доступные для записи стандартным пользователям, управляющие поведением службы/приложения |
| Флаги безопасности PE | pesec | Отсутствие ASLR, DEP, CFG, SafeSEH и Authenticode на целевых бинарных файлах |
| ACL именованных каналов | pipes | Именованные каналы с разрешительными DACL или ACE, допускающими олицетворение |
| Бинарный файл | Используется модулем | Загрузка |
|---|
Procmon64.exe | Все модули на базе Procmon | ProcessMonitor.zip |
handle.exe | Модуль ACL именованных каналов | Handle.zip |
accesschk.exe | Модуль ACL именованных каналов — перечисление DACL каналов | AccessChk.zip |
| Флаг | Описание |
|---|
--procmon PATH | Путь к Procmon64.exe. Копируется в %LOCALAPPDATA%\Anvil\sysinternals\ |
--handle PATH | Путь к handle.exe. Копируется в %LOCALAPPDATA%\Anvil\sysinternals\ |
--accesschk PATH | Путь к accesschk.exe. Копируется в %LOCALAPPDATA%\Anvil\sysinternals\ |
| Флаг | По умолчанию | Описание |
|---|
--report FILE | — | Создать отчёт — расширение определяет формат: .json для JSON, .html (или любое другое) для автономного HTML-отчёта. |
--verbose | выкл | Выводить полные блоки с деталями находок в терминале. |
--no-color | выкл | Отключить цветной вывод ANSI. |
--skip-authenticode | выкл | Пропустить проверку подписей Authenticode (быстрее для больших каталогов установки). |
--scan-install-dir | выкл | Включить все DLL в каталоге установки в проверки безопасности PE. |
--memory-strings STR,... | — | Дополнительные строки для поиска в памяти процесса (через запятую). |
| Уровень | Метка | Типичный CVSS | Значение |
|---|
| P1 | Критический | 8.0 – 8.8 | Автоматически срабатывающее повышение привилегий (без действий пользователя) |
| P2 | Высокий | 7.0 – 7.9 | Эксплуатируется с взаимодействием пользователя или более слабым триггером |
| P3 | Неверная конфигурация | 4.0 – 6.9 | Некавыченные пути, отсутствие средств защиты — напрямую не эксплуатируется |
| P4 | Низкое влияние | 0.1 – 3.9 | Информационные векторы с ограниченным реальным влиянием |
| P5 | Информационный | N/A | Контекст и наблюдения, не являющиеся уязвимостями |
| Файл | Модуль | Ключевые правила фильтра |
|---|
filters/dll.pmc | Хайджекинг DLL | Operation is CreateFile, Path ends with .dll |
filters/binary.pmc | Хайджекинг бинарных файлов | Operation is CreateFile, Path ends with .exe |
filters/config.pmc | Небезопасные конфигурации | Operation is CreateFile (фильтр расширений в коде) |
filters/com.pmc | Хайджекинг COM | Operation is RegQueryKey, Path contains HKLM |
filters/symlink.pmc | Атаки на символьные ссылки | Operation is CreateFile |