Сегодня поделюсь примером использования функций C++ для поиска и получения информации о Sysmon, что может быть полезно в пентестах команд Red Team при уклонении от самого Sysmon.
Еще по теме: Повышение привилегий Windows с C++
Что такое Sysmon
Sysmon (System Monitor) — это системный сервис от Microsoft, который является частью пакета Sysinternals. Он предназначен для отслеживания и логирования событий на уровне операционной системы, таких как создание процессов, изменения файлов, сетевые подключения и другие важные действия.
Sysmon помогает администраторам и специалистам ИБ фиксировать информацию о действиях в системе, что делает его полезным инструментом для обнаружения подозрительных активностей и расследования инцидентов безопасности.
Функция C++ для получения информации о Sysmon
Начнем с описания работы класса SysmonDetox. С помощью этого класса можно получить следующую информацию:
- Работает ли Sysmon в системе.
- Выгрузка правил Sysmon (для выполнения необходимы права администратора).
- Получение пути к файлу конфигурации.
- Получение имени драйвера (полезно для уклонения на уровне ядра).
Вот код на C++. Давайте подробно рассмотрим работу программы.
В функции main вызываем:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include #include "SysmonDetoxClass.h" using namespace std; int main(){ SysmonDetox sysmonDetox; int sysmonFound = sysmonDetox.SysmonDetector(); if (sysmonFound == 0) { cout << "Sysmon not found" << endl; return 0; } else { cout << "\n[!]Sysmon found...\nLet's get information...\n" << endl; string configFilePath = ""; string driverName = ""; string altitude = ""; cout << "[!]Dumping sysmon rules...\n"; sysmonDetox.SysmonDumpRules(); configFilePath = sysmonDetox.getConfigFilePath(); driverName = sysmonDetox.getDriverName(); altitude = sysmonDetox.getAltitude(); cout << "\n[!]Driver name: " << driverName << endl; cout << "\n[!]Altitude: " << altitude << endl; cout << "\n[!]Config file path: " << configFilePath << endl; } return 0; } |
Что происходит в функции main
Создаем объект sysmonDetox класса SysmonDetox, который будет выполнять задачи, связанные с Sysmon.
1 |
SysmonDetox sysmonDetox; |
Далее вызывается метод SysmonDetector, чтобы определить, работает ли Sysmon в системе:
1 |
int sysmonFound = sysmonDetox.SysmonDetector(); |
Если Sysmon не обнаружен, программа выводит сообщение и завершает работу:
1 |
if (sysmonFound == 0) { cout << "Sysmon not found" << endl; return 0; } |
В противном случае программа продолжает выполнение, и мы начинаем извлекать дополнительную информацию о Sysmon:
Программа вызывает функцию для выгрузки правил Sysmon:
1 |
sysmonDetox.SysmonDumpRules(); |
Собираем более подробные данные о Sysmon, включая путь к файлу конфигурации, имя драйвера:
1 |
string configFilePath = sysmonDetox.getConfigFilePath(); string driverName = sysmonDetox.getDriverName(); int altitude = sysmonDetox.getAltitude(); |
Программа выводит на экран полученные данные, такие как путь к конфигурационному файлу, имя драйвера и другое:
1 |
cout << "Config file path: " << configFilePath << endl; cout << "Driver name: " << driverName << endl; cout << "Driver altitude: " << altitude << endl; |
Программа завершается с кодом возврата , что означает успешное выполнение:
1 |
return 0; |
Итак, эта программа проверяет, активен ли Sysmon на компьютере, и если он работает, извлекает его настройки и выводит информацию о правилах мониторинга.
Она помогает лучше понять, как настроен Sysmon, и что он контролирует. Эти данные могут стать ключевыми для анализа работы Sysmon в системе и разработки стратегий обхода его мониторинга.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Как скрыть процессы от антивирусов
- Как убить процесс системы обнаружения атак
- Инъекция в сторонние процессы для обхода EDR