Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Получив доступ к системе, злоумышленник первым делом пытается ослепить средства аудита, чтобы как можно дольше оставаться незамеченным. В этой статье мы с тобой попробуем ослепить Sysmon и сделать это максимально незаметно для штатного аудита Windows. Достичь этого нам позволят манипуляции с хендлами и дескрипторами безопасности. warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Сразу оговорюсь, что техники, описанные в этой статье, требуют, чтобы у атакующего были административные привилегии. Кто‑то скажет: зачем же нам углубляться во внутрянку Windows, если с правами админа можно остановить службу Sysmon или вообще удалить ее? Ответ прост. Во‑первых, при реализации традиционных техник, таких как остановка службы, завершение процесса или полное удаление Sysmon, штатный аудит Windows сформирует массу событий (начиная с EventID 4689 в журнале Security и заканчивая событием EventID 1 в журнале System от провайдера FilterManager). Во‑вторых, это просто полезное упражнение: мы должны как можно глубже разбираться в подсистеме безопасности любимой ОС, чтобы понимать техники, которыми пользуются хакеры.
Как уже говорилось в статье «Sysmon для безопасника», Sysmon — это инструмент, предназначенный для углубленного мониторинга активности, происходящей в системе, который позволяет существенно расширить штатный аудит ОС Windows.
Вот как его работа выглядит изнутри.
Первая команда (search <ServicePattern>
) ищет зарегистрированные в системе службы и драйверы с помощью Win32-функции EnumServicesStatus(). Видно, что в системе действуют две сущности: служба режима пользователя — Sysmon64 и драйвер SysmonDrv. Обе сущности запускаются автоматически при старте системы (поле StartType
). Эту информацию мы получаем с помощью команды show all <ServiceName>
, которая последовательно вызывает QueryServiceStatus() (для получения текущего статуса работы — запущена или остановлена) и QueryServiceConfig() (для получения оставшейся информации).
Логично предположить, что события (или часть событий), которые пишет служба Sysmon64 в журнал Microsoft-Windows-SysmonOperational
, формируются модулем ядра SysmonDrv, а для взаимодействия службы и драйвера должно быть коммуникационное устройство (device). Чтобы проверить это, посмотрим на список хендлов, открытых службой Sysmon64 (процессом Sysmon64.exe).
Получим идентификатор процесса Sysmon64.exe (search name <ProcessPattern>
).
Команда search name <ProcessPattern>
работает через вызов CreateToolhelp32Snapshot() функций Process32First() и Process32Next().
После того как мы получим ID процесса, посмотрим список его хендлов.
Из вывода видно, что у процесса Sysmon64.exe есть несколько открытых хендлов на устройства. Обрати внимание на устройство DeviceSysmonDrv
, одноименное драйверу. Скорее всего, именно с помощью этого устройства служба режима пользователя Sysmon64 получает информацию от драйвера и впоследствии формирует события аудита.
Команда show handles <PID> <Type>
реализует вызов 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 закрыть хендл на это устройство.
Источник: xakep.ru