Содержание статьи
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Sysmon Internals
Сразу оговорюсь, что техники, описанные в этой статье, требуют, чтобы у атакующего были административные привилегии. Кто‑то скажет: зачем же нам углубляться во внутрянку Windows, если с правами админа можно остановить службу Sysmon или вообще удалить ее? Ответ прост. Во‑первых, при реализации традиционных техник, таких как остановка службы, завершение процесса или полное удаление Sysmon, штатный аудит Windows сформирует массу событий (начиная с EventID 4689 в журнале Security и заканчивая событием EventID 1 в журнале System от провайдера FilterManager). Во‑вторых, это просто полезное упражнение: мы должны как можно глубже разбираться в подсистеме безопасности любимой ОС, чтобы понимать техники, которыми пользуются хакеры.
Как уже говорилось в статье «Sysmon для безопасника», Sysmon — это инструмент, предназначенный для углубленного мониторинга активности, происходящей в системе, который позволяет существенно расширить штатный аудит ОС Windows.
Вот как его работа выглядит изнутри.
Первая команда (search <
) ищет зарегистрированные в системе службы и драйверы с помощью Win32-функции EnumServicesStatus(). Видно, что в системе действуют две сущности: служба режима пользователя — Sysmon64 и драйвер SysmonDrv. Обе сущности запускаются автоматически при старте системы (поле StartType
). Эту информацию мы получаем с помощью команды show
, которая последовательно вызывает QueryServiceStatus() (для получения текущего статуса работы — запущена или остановлена) и QueryServiceConfig() (для получения оставшейся информации).
Логично предположить, что события (или часть событий), которые пишет служба Sysmon64 в журнал Microsoft-Windows-Sysmon\
, формируются модулем ядра SysmonDrv, а для взаимодействия службы и драйвера должно быть коммуникационное устройство (device). Чтобы проверить это, посмотрим на список хендлов, открытых службой Sysmon64 (процессом Sysmon64.exe).
Получим идентификатор процесса Sysmon64.exe (search
).
Команда search
работает через вызов CreateToolhelp32Snapshot(): функции Process32First() и Process32Next().
После того как мы получим ID процесса, посмотрим список его хендлов.
Из вывода видно, что у процесса Sysmon64.exe есть несколько открытых хендлов на устройства. Обрати внимание на устройство \
, одноименное драйверу. Скорее всего, именно с помощью этого устройства служба режима пользователя Sysmon64 получает информацию от драйвера и впоследствии формирует события аудита.
Команда show
реализует вызов NtQueryInformationProcess() с параметром ProcessHandleInformation
.
__kernel_entry NTSTATUS NtQueryInformationProcess( [in] HANDLE ProcessHandle, [in] PROCESSINFOCLASS ProcessInformationClass, [out] PVOID ProcessInformation, [in] ULONG ProcessInformationLength, [out, optional] PULONG ReturnLength);
Первый параметр (ProcessHandle
) — дескриптор процесса, хендлы которого мы хотим увидеть. Его можно получить при помощи функции OpenProcess() с параметром PROCESS_QUERY_INFORMATION
.
ProcessInformationClass
— это характер запрашиваемой информации. В нашем случае этот параметр равен ProcessHandleInformation
, то есть мы хотим получить информацию о хендлах процесса.
Следующим идет ProcessInformation
, указатель на память, в которую будет помещен результат нашего запроса — PPROCESS_HANDLE_SNAPSHOT_INFORMATION
, то есть указатель на структуру, содержащую список всех хендлов и их количество.
Четвертый и пятый параметры указывают размер имеющейся и требуемой памяти, в которую помещается возвращаемый функцией результат.
Закрытие хендла через дубликат
Если наши предположения верны, то, чтобы Sysmon перестал формировать события аудита, атакующий может заставить процесс Sysmon64.exe закрыть хендл на это устройство.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»