Реестр Windows — одна из первых точек взаимодействия программы с операционной системой. При динамическом анализе подозрительного файла отслеживание операций чтения, записи и удаления ключей часто выдаёт больше контекста о намерениях кода, чем сетевой трафик или файловая активность. Мальварь использует реестр для персистентности, хранения конфигурации, обхода защиты, взаимодействия с COM-объектами и отметки уже заражённых систем. Понимание того, какие изменения ожидать и как их отделить от легаitimate шума, — базовый навык аналитика.
- Зачем следить за реестром при анализе малвари
- Основные подходы к мониторингу
- 1. Системные мониторы вызовов API (user-mode)
- 2. Снимковое сравнение (snapshot diffing)
- 3. Хукирование API и инструментальные фреймворки
- 4. Kernel-mode мониторинг и EDR-телеметрия
- Практический рабочий процесс: от запуска к выводам
- Ключевые артефакты: что искать в первую очередь
- Интерпретация данных: разделение сигнала и шума
- Эвристики для быстрой триажи
- Пример условного разбора
- Типичные ошибки и как их избежать
- Сценарии: как адаптировать подход под условия
- Ограничения метода и когда он не работает
- Практический следующий шаг
Зачем следить за реестром при анализе малвари
Любая программа, запускаемая в пользовательском режиме, обращается к реестру через WinAPI (RegOpenKeyEx, RegSetValueEx, RegQueryValueEx и др.) или через высокоуровневые обёртки (WMI, PowerShell, .NET). Вредоносный код не исключение. Основные сценарии использования реестра малварью:
- Персистентность (автозапуск): ключи Run, RunOnce, Winlogon, Image File Execution Options, AppInit_DLLs, задачи планировщика, службы, WMI-подписки.
- Хранение конфигурации: C2-адреса, порты, ключи шифрования, идентификаторы кампании, флаги функциональности — часто обфусцированные или зашифрованные.
- Анти-анализ и эvasion: проверка наличия инструментов анализа (ключи драйверов песочниц, артефакты виртуализации), изменение политик безопасности, отключение защитников (DisableAntiSpyware, DisableRealtimeMonitoring).
- Компонентное взаимодействие: регистрация COM-серверов, BHO, Shell Extensions, фильтров LSA, драйверов фильтра файловой системы.
- Маркеры инфекции (mutex-like): создание уникальных ключей для предотвращения повторного запуска.
- Кража данных: чтение сохраненных паролей браузеров, FTP-клиентов, VPN, почтовых клиентов (пути к профилям часто хранятся в реестре).
Наблюдение за этими действиями позволяет быстро классифицировать образец, выделить индикаторы компрометации (IOC) и понять логику работы без глубокого реверс-инжиниринга.
Основные подходы к мониторингу
1. Системные мониторы вызовов API (user-mode)
Классический пример — Process Monitor (Procmon) из набора Sysinternals. Он использует драйвер фильтра файловой системы и колбэки реестра для перехвата операций в реальном времени.
Преимущества: показывает полный контекст — PID, TID, стек вызовов, путь ключа, тип операции, результат (SUCCESS / ACCESS DENIED / NAME NOT FOUND), данные значения. Поддерживает мощную фильтрацию и экспорт в CSV/PML.
Ограничения: работает в user-mode, поэтому уязвим для обхода: малварь может использовать прямые системные вызовы (syscall), недокументированные API, или загрузить свой драйвер для манипуляции реестром в kernel-mode. В песочницах часто отключен или ограничен по производительности.
2. Снимковое сравнение (snapshot diffing)
Инструменты вроде Regshot, RegFromApp (NirSoft) или встроенные возможности песочниц (Cuckoo, CAPE, Joe Sandbox, ANY.RUN) делают снимок реестра до и после запуска образца, затем сравнивают.
Преимущества: простота, наглядность «что изменилось», низкие накладные расходы, работает даже если мониторинг API подвешен.
Ограничения: теряет последовательность операций, не показывает временные значения (записали — прочитали — удалили), пропускает многократные перезаписи одного ключа. Не подходит для анализа логики работы, только для итогового инвентаризационного списка.
3. Хукирование API и инструментальные фреймворки
API Monitor, Frida, DynamoRIO, Intel PIN, x64dbg / OllyDbg с плагинами позволяют перехватывать конкретные функции (RegSetValueExW, NtCreateKey, ZwOpenKey) и логировать аргументы, в том числе буферы данных.
Преимущества: полный контроль над тем, что логируется; возможность модифицировать аргументы на лету (например, подменять C2-адрес на localhost); интеграция со скриптами автоматизации.
Ограничения: требует настройки, может дестабилизировать процесс, обнаружен анти-отладочными трюками (проверка контрольных сумм кода,.timing attacks).
4. Kernel-mode мониторинг и EDR-телеметрия
Коммерческие песочницы и EDR-агенты используют мини-фильтры реестра (CmRegisterCallbackEx) или ETW-провайдер Microsoft-Windows-Registry. Это даёт видимость операций, скрытых от user-mode хуков.
Для ручного анализа это доступно через Windows Performance Recorder (WPR) + Windows Performance Analyzer (WPA) или через Sysmon (Event ID 12, 13, 14) при правильной конфигурации.
Практический рабочий процесс: от запуска к выводам
- Подготовка чистой среды. Снимок реестра (Regshot) или включение Procmon до запуска образца. Отключите автообновления, телеметрию, индексацию — они создают фоновый шум.
- Запуск образца с минимальными привилегиями. Обычный пользователь, не администратор. Многие техники персистентности требуют админских прав и не сработают — это тоже информация.
- Прогрев и ожидание. Дайте образцу 2–5 минут. Некоторые семейства ждут определенного времени, проверяют подключение к интернету или ввод пользователя перед активной фазой.
- Второе состояние / снимок. Остановите мониторинг, сделайте второй снимок (если используете diff) или сохраните лог Procmon (PML).
- Фильтрация шума. Исключите системные процессы (svchost.exe, lsass.exe, explorer.exe, SearchIndexer.exe), известные легатимные пути (HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer, кэш шрифтов, MRU-листы). В Procmon: Filter → Process Name → is → sample.exe → Include.
- Классификация операций. Разделите события на категории: запись значений (RegSetValue), создание ключей (RegCreateKey), удаление (RegDeleteKey/Value), чтение конфигурации (RegQueryValue), перечисление (RegEnumKey/Value).
- Корреляция с MITRE ATT&CK. Сопоставьте найденные ключи с техниками: T1547.001 (Registry Run Keys), T1112 (Modify Registry), T1012 (Query Registry), T1546.012 (Image File Execution Options Injection), T1543.003 (Windows Service), T1059.001 (PowerShell Profile).
- Извлечение IOC. Пути ключей, имена значений, данные (строки, бинарные блобы). Зашифрованные блобы — кандидаты на статический анализ рутины дешифровки.
- Проверка на устойчивость. Перезапустите образец: повторно создаёт ли ключи? Пытается ли прочитать то, что написал ранее? Это отличает персистентность от разовых проверок.
Ключевые артефакты: что искать в первую очередь
Ниже — неполный, но практичный чек-лист путей, которые аналитик проверяет «на автомате». Порядок примерно от наиболее частых к редким, но высокорисковым.
| Категория | Пути реестра (HKLM / HKCU) | Что это говорит |
|---|---|---|
| Классический автозапуск | Software\Microsoft\Windows\CurrentVersion\Run Software\Microsoft\Windows\CurrentVersion\RunOnce Software\Microsoft\Windows\CurrentVersion\RunOnceEx | Базовая персистентность пользователя. Часто используют случайные имена значений. |
| Автозапуск машины | Software\Microsoft\Windows\CurrentVersion\Run (HKLM) Software\Microsoft\Windows\CurrentVersion\RunOnce (HKLM) Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run | Требует админских прав. Признак более агрессивной малвари или пост-эксплуатации. |
| Winlogon / Userinit | Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell | Критичные для загрузки. Подмена — признак буткита или руткита. |
| Image File Execution Options (IFEO) | Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ | Персистентность через отладчик, хижинг легатимных процессов (svchost, notepad, calc). Очень популярен у файллесс-малвари. |
| AppInit_DLLs | Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs Software\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs | Загрузка DLL в каждый процесс, использующий user32. Требует Secure Boot off / тестового режима на современных Windows. |
| Службы и драйверы | System\CurrentControlSet\Services\ System\CurrentControlSet\Services\ | Создание новой службы или модификация существующей (например, WdiSystemHost). Проверяйте Start = 2 (авто). |
| Планировщик задач (через реестр) | Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\{GUID} Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Logon\{GUID} | Реестровое представление задач. Часто проще смотреть через schtasks /query /fo XML, но реестр показывает «сырые» данные. |
| WMI Event Subscriptions | Software\Microsoft\WBEM\Scripting\DefaultNamespace — косвенно. Основные артефакты в репозитории WMI (C:\Windows\System32\wbem\Repository), но регистрация фильтров/консюмеров может оставлять следы в HKLM\Software\Microsoft\WBEM\CIMOM\Autorecover MOFs. | Файллесс персистентность. Сложно обнаружить по реестру напрямую — используйте Get-WmiObject __FilterToConsumerBinding. |
| COM Hijacking / CLSID | Software\Classes\CLSID\{…}\InprocServer32 Software\Classes\CLSID\{…}\LocalServer32 Software\Classes\Wow6432Node\CLSID\{…} | Подмена COM-объектов. Проверяйте нестандартные пути к DLL (не в System32, не подписанные). |
| Shell Extensions / Context Menu | Software\Classes\*\shell\ Software\Classes\Directory\Background\shell\ Software\Classes\Folder\shell\ | Выполнение кода при взаимодействии с проводником. Часто используется для логаут/логин триггеров. |
| Политики безопасности (обход защиты) | Software\Policies\Microsoft\Windows Defender\DisableAntiSpyware Software\Policies\Microsoft\Windows Defender\Real-Time Protection\DisableRealtimeMonitoring Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA | Попытка отключить Defender, UAC, SmartScreen. Требует админа, часто делается через PowerShell / GPO. |
| Конфигурация малвари | Случайные пути в HKCU\Software\ | Ищите значения с высокой энтропией, base64, нестандартные имена (GUID, хеши). Часто данные зашифрованы RC4/AES/XOR с ключом, зашитым в бинарник. |
| Маркеры инфекции | HKCU\Software\ | Некоторые семейства (Emotet, Trickbot, Qakbot) создают уникальные ключи для дедупликации. |
Интерпретация данных: разделение сигнала и шума
Сырые логи Procmon содержат тысячи событий за минуту. Эффективный анализ требует системной фильтрации.
Эвристики для быстрой триажи
- Писатель vs Читатель. Запись (RegSetValue, RegCreateKey) — активное действие, чаще указывает на персистентность или конфигурацию. Чтение (RegQueryValue, RegEnumKey) — разведка: малварь ищет установленные AV, браузеры, VPN, ключи лицензий.
- Повторяемость. Операция, происходящая при каждом запуске — вероятно, персистентность или проверка окружения. Одноразовая — инициализация или эксплойт.
- Пути вне профиля пользователя. Запись в HKLM требует повышения привилегий. Если образец запущен без админа и пытается писать в HKLM — ожидайте UAC-байпасс или эксплойт LPE.
- Имена значений. Легатимные программы используют понятные имена (InstallPath, Version, Language). Малварь — случайные строки, GUID, однобуквенные имена, base64-подобные блобы.
- Типы данных. REG_SZ / REG_EXPAND_SZ с путями к исполняемым файлам — классический автозапуск. REG_BINARY большой длины — зашифрованная конфигурация или шеллкод. REG_DWORD = 1/0 — флаги функциональности.
- Стек вызовов (Call Stack). В Procmon: правый клик → Properties → Stack. Если вызов идет из ntdll.dll!NtSetValueKey → kernel32.dll!RegSetValueExW → malware.exe+0x1234 — это прямой вызов из кода образца. Если стек проходит через mshtml.dll, powershell.exe, wscript.exe — это скриптовый дроппер или живой-офф-земля (LOLBins).
Пример условного разбора
Образец update_flash.exe (PID 3420) создаёт ключ HKCU\Software\Microsoft\Windows\CurrentVersion\Run\AdobeFlashUpdate со значением «C:\Users\User\AppData\Roaming\Adobe\flash_update.exe». Стек: kernel32!RegSetValueExW → mscoree!CorExeMain → update_flash.exe!Main. Файл flash_update.exe отсутствует на диске до этого момента.
Вывод: дроппер устанавливает персистентность под видом легатимного обновления. Имя значения имитирует Adobe, путь — в AppData (писать может пользователь). Следующий шаг: извлечь вторый стадию из ресурсов/сети, проверить подпись, загрузить в песочницу с сетевым доступом для получения пейлоада.
Типичные ошибки и как их избежать
- Анализ только итогового снимка (Regshot) без динамики. Пропускаете временные ключи, логику принятия решений, анти-анализ (проверку ключей песочницы с последующим самоудалением). Решение: всегда совмещайте снимки с логом Procmon или API-хуками.
- Игнорирование HKU / SID-профилей. Малварь может писать в профиль другого пользователя (если есть админка) или в HKU\.DEFAULT (системный профиль). Решение: в Procmon включите «Show All Profiles» или фильтруйте по HKEY_USERS.
- Путаница между WoW64 и нативным видом. 32-битные процессы на 64-битной Windows видят HKLM\Software\Wow6432Node вместо HKLM\Software. Procmon показывает реальный путь (без Wow6432Node), но Regshot и .reg-экспорты могут показывать перенаправлённый вид. Решение: знайте, разрядность процесса, и сопоставляйте пути.
- Упущение транзакционного реестра (KTM). Малварь может использовать RegCreateKeyTransacted — изменения становятся видимыми только после коммита транзакции. Procmon логирует операции внутри транзакции, но снимки до/после могут их не показать, если транзакция откатилась. Решение: ищите операции с Transaction в деталях события Procmon.
- Надёжность на «видимость» в песочнице. Некоторые песочницы виртуализируют реестр (copy-on-write) и не отдают изменения на хост. Вы видите активность, но ключи не появляются в реальном реестре гостя. Решение: проверяйте документацию песочницы, используйте снапшоты внутри гостя, а не только хостовые инструменты.
- Чтение зашифрованных блобов как IOC без дешифровки. Добавляете в SIEM бинарный блоб как «индикатор» — ложные срабатывания при следующем образце того же семейства с другим ключом. Решение: выделяйте статические признаки (алгоритм, структура, константы) или дешифруйте автоматически скриптом.
Сценарии: как адаптировать подход под условия
| Ситуация | Рекомендуемый набор инструментов | Ключевые фокусы |
|---|---|---|
| Быстрая триажа одного файла на рабочей станции аналитика | Procmon (фильтр по PID) + Regshot (до/после) + строки (strings) бинарника | Автозапуск, IFEO, службы, подозрительные пути в HKCU\Software\Random |
| Массовая автоматическая обработка в песочнице | Встроенный мониторинг песочницы (Cuckoo/CAPE/Joe/ANY.RUN) + экспорт в MISP/STIX | Нормализация путей, дедупликация IOC, маппинг на MITRE ATT&CK |
| Глубокий реверс сложного образца с анти-отладкой | Frida / DynamoRIO + скрипты на Python/JS + kernel-мониторинг (Sysmon ETW) | Обход хуков, расшифровка конфига на лету, трассировка логики принятия решений |
| Инцидент-респонс: проверка живого хоста | Autoruns (Sysinternals) + PowerShell (Get-ItemProperty по известным путям) + Sysmon логи за ретроспективу | Подтверждение персистентности, поиск следов удалённых ключей (USN Journal, MFT), корреляция с процессами |
| Анализ файллесс-малвари (PowerShell, WMI, .NET в памяти) | ETW трассировка (Microsoft-Windows-Registry, PowerShell Operational) + Script Block Logging | Чтение/запись через .NET Microsoft.Win32.Registry, WMI __RegistryEventProvider, обход AMSI |
Ограничения метода и когда он не работает
Мониторинг реестра — мощный, но не универсальный инструмент. Не полагайтесь на него исключительно:
- Kernel-mode руткиты (Bootkits, DKOM). Манипулируют структурой реестра в памяти (CM_KEY_BODY, CM_KEY_NODE) без вызовов API. Не видны в Procmon, Sysmon, ETW. Требуют дамп памяти и анализа через Volatility / Rekall (плагины registry, hivelist, printkey).
- Виртуализация реестра (AppContainer, MSIX, WDAC). Современные упакованные приложения (MSIX, UWP) имеют приватное представление реестра. Изменения изолированы и не видны глобально. Procmon показывает обращения к виртуализированным ключам, но снимки реального реестра их не содержат.
- Шифрование / обфускация данных. Реестр показывает факт записи, но не смысл зашифрованного блоба. Без статического анализа рутины дешифровки IOC низкокачественный.
- Отложенные действия. Малварь может запланировать задачу на будущее (через Task Scheduler API, не через реестр напрямую) или использовать WMI-таймеры. Реестр в момент анализа чист.
- Облачная конфигурация. Современные ботнеты (Cobalt Strike, Sliver, Mythic) часто не хранят C2 в реестре — получают по HTTPS/DNS/DoH при каждом запуске. Реестр показывает только загрузчик.
Практический следующий шаг
Если вы настраиваете процесс анализа с нуля, начните с минимального набора:
- Установите Process Monitor и научитесь быстро строить фильтр: Process Name is sample.exe → Operation begins with Reg → Result is SUCCESS.
- Добавьте Regshot (Unicode-версию) для снимков до/после — даёт удобный HTML-отчёт для передачи коллегам.
- Настройте Sysmon (Event ID 12, 13, 14) с конфигурацией SwiftOnSecurity/sysmon-config или olafhartong/sysmon-modular — даёт ретроспективу на продакшн-хостах.
- Создайте свой чек-лист путей (таблица выше) в виде CSV/JSON для автоматической проверки логов скриптом (Python + pandas / PowerShell).
- Практикуйтесь на открытых образцах из MalwareBazaar, VirusShare, ANY.RUN public submissions — сравнивайте свои выводы с отчётами песочниц.
Главный принцип: реестр — это журнал намерений программы. Читайте его как детектив: кто, что, когда, зачем. Коррелируйте с файловой системой, сетью, процессами и памятью. Изолированно реестр даёт фрагменты; в контексте — полную картину атаки.
Материал носит информационный характер и описывает общие методики анализа вредоносного ПО. При исследовании реальных инцидентов соблюдайте изоляцию среды (песочница, выделенная ВМ, отсутствие доступа к производственным данным), правовые аспекты обращения с вредоносным кодом и политики безопасности вашей организации. Для квалифицированного инцидент-респонса привлекайте сертифицированных специалистов DFIR.
