# Sysmon

**Sysmon (System Monitor)** — это мощный инструмент Microsoft (Набор [sysinternals](https://learn.microsoft.com/ru-ru/sysinternals/) от от Марка Руссиновича), который предоставляет детализированную информацию о событиях, происходящих в системе. Он расширяет возможности стандартного аудита Windows, предоставляя больше данных и гибкости для мониторинга безопасности.&#x20;

Sysmon работает через обратные вызовы ядра ОС (kernel callbacks), трассировку событий Windows (ETW) и API телеметрии, что обеспечивает высокую детализацию и надежность данных о системных событиях

{% hint style="info" %}
Существует Sysmon для Linux. Он основан на технологии eBPF (extended Berkeley Packet Filter) — механизм, позволяющий запускать обработчики на уровне ядра Linux для мониторинга системных вызовов, процессов и сетевых сокетов.&#x20;

Логи Sysmon по умолчанию сохраняются в системный файл /var/log/syslog, что соответствует традиционному подходу к логированию в UNIX-подобных системах.&#x20;
{% endhint %}

## Преимущества Sysmon над стандартным аудитом

**Sysmon** предоставляет гораздо больше возможностей для мониторинга безопасности, чем стандартный аудит Windows. Он позволяет:

* Логировать события, которые не регистрируются стандартным аудитом (например, создание файлов, изменения реестра, обращение к памяти процесса).
* Получать детализированную информацию о процессах (например, командная строка, хэши файлов, родительский процесс).
* Гибко настраивать мониторинг через XML-конфигурацию.
* В событиях содержатся GUID процессов и сеансов, что позволяет связывать события между собой для более точного анализа при переиспользовании стандартных идентификаторов процессов.&#x20;
* Все события Sysmon записываются в стандартный журнал Windows (Applications and Services Logs -> Microsoft -> Windows -> Sysmon -> Operational), что упрощает централизованный сбор и анализ данных в SIEM-система.&#x20;

Sysmon не может заменить стандартный или расширенный аудит Windows, но может стать отличным дополнением.&#x20;

### **Сравнение Sysmon Event ID 1 и Windows Event ID 4688**

Sysmon логирует 2 события, которые по своему смыслу похожи на стандартный аудит Windows. Это Event ID 1 - старт процесса. Ниже несколько отличий этих событий, и преимущества использования Sysmon, соотвественно.&#x20;

| **Характеристика**        | **Windows Event ID 4688**                                                                                                                                                                                        | **Sysmon Event ID 1**                                                                                                                                                                                                                                                                            |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Информация о процессе** | <p>Название процесса,  PID, путь к исполняемому файлу.<br>Имя пользователя, от которого запущен процесс ,и сессия, в которой запущен. </p>                                                                       | <p>То же самое <br>+ хеши (MD5, SHA1, SHA256, <a href="../../../other/kriptografiya-dlya-analitika-soc#chto-takoe-imphash">IMPHASH</a>)<br>+ метаинформация процесса (описание, продукт, компания)<br>+ оригинальное имя (будет несвпадать с именем, если был апереименована другая утилита)</p> |
| **Права запуска**         | В старых версиях Windows отсутствует информаци о [Mandatory Label](https://vasilisa-l.gitbook.io/blue-team-cookbook/top-events-to-monitor/event-id-4624.-parnye-sessii-uroven-celostnosti-i-uac#mandatory-label) | Есть информация об Integrity Level.                                                                                                                                                                                                                                                              |
| **Командная строка**      | Нет (требуется отдельная настройка через GPO).                                                                                                                                                                   | Полная командная строка (включая аргументы).                                                                                                                                                                                                                                                     |
| **Родительский процесс**  | До Windows 10 нет информации об имени родительского процесса, только PID.                                                                                                                                        | <p>Указывается родительский процесс. <br>Есть информация о пользователе, от имени которого запущен родительский процесс (<strong>ParentUser</strong>), что позволяет находить манипуляцию с токенами. </p>                                                                                       |

{% hint style="info" %}
Наличие ParentUser в событии Sysmon 1 позволяет искать повышение привилегий через манипуляцию с токенами. Если Parent User не системная учетная запись, а сам процесс запущен от имени NT AUTHORITY\SYSTEM, то это хороший индиктор, что имело место повышений привилегий.&#x20;
{% endhint %}

### Event ID 5156 VS Sysmon 3

Есть еще пара событий, которые могут показаться похожими Event ID 5156 и Event ID 3 Sysmon -  они оба про сетевые соединения. Но есть одно отличие. \
Event ID 5156 - даже по формулировке "Платформа фильтрации Windows разрешила подключение", то есть соединения могло и не быть. \
Sysmon 3 регистрируется, когда соединение уже установлено. Также Sysmon 3 помимо IP-адреса, куда было соединение, регистрирует имя узла, оно берется из [кеша DNS](https://vasilisa-l.gitbook.io/blue-team-cookbook/other/dns-i-razreshenie-imen) (можно отключить в конфиге).&#x20;

{% hint style="info" %}
В старых версиях Sysmon для входящих соединений были перепутаны адреса источника и назначения - баг.&#x20;
{% endhint %}

### **Полезные события Sysmon, которых нет в стандартном аудите Windows**

#### **Создание файла (Event ID 11)**

* **Описание**: Регистрирует создание файлов на диске.
* **Пример использования**:
  * Обнаружение создания вредоносных исполняемых файлов и скриптов (например, `.exe`, `.dll`, `.ps1`).
  * Отслеживание создания файлов в критически важных папках (например, `C:\Windows\System32`).
  * Отслеживание создания файлов во временных директориях.&#x20;

#### **Изменение реестра (Event ID 12, 13, 14)**

* **Описание**:
  * **Event ID 12**: Создание или удаление ключа реестра.
  * **Event ID 13**: Изменение значения реестра.
  * **Event ID 14**: Переименование ключа реестра.
* **Пример использования**:
  * Обнаружение изменений в автозагрузке (например, `HKLM\Software\Microsoft\Windows\CurrentVersion\Run`).
  * Отслеживание изменений в реестре, связанных с вредоносным ПО.

{% content-ref url="../registry/chto-mozhet-sdelat-atakuyushii-s-dostupom-v-reestr-na-zapis" %}
[chto-mozhet-sdelat-atakuyushii-s-dostupom-v-reestr-na-zapis](https://vasilisa-l.gitbook.io/blue-team-cookbook/windows/registry/chto-mozhet-sdelat-atakuyushii-s-dostupom-v-reestr-na-zapis)
{% endcontent-ref %}

{% hint style="info" %}
На самом деле для большинства правил обнаружения достаточно только EventID 13. Потому что создание параметра реестра сразу с некоторым значением приведет к последовательной регистрации Event ID 12 -> 13
{% endhint %}

#### **Загрузка DLL (Event ID 7)**

* **Описание**: Регистрирует загрузку DLL-библиотек процессами.
* **Пример использования**:
  * Обнаружение инъекций кода (например, техника DLLHijacking для выполнения вредоносного кода).
  * Отслеживание подозрительных DLL, загружаемых в процессы.
  * Для DLL также собирается и проверяется их подпись, что позволяет отслеживать неподписаные библиотеки или библиотеки с евалидной подписью.&#x20;

#### **Создание удаленных потоков (Event ID 8)**

* **Описание**: Регистрирует создание удаленных потоков в процессах.
* **Пример использования**:
  * Обнаружение инъекций кода (например, использование `CreateRemoteThread`).
  * Отслеживание подозрительной активности, связанной с процессами.

#### **Обращение к памяти процессов (Event ID 10)**

* **Описание**: Регистрирует обращение к памяти процесса по заданным маскам доступа.
* **Пример использования**:
  * Получение учетных данных из памяти процесса lsass.exe\
    [lsass](https://vasilisa-l.gitbook.io/blue-team-cookbook/windows/lsass "mention")

#### **Обнаружение и блокировка создания исполняемых файлов (Event ID 27)**

* **Описание**: После создания файла анализирует заголовок, и если файл исполняемый (PE), удаляет его.
* **Пример использования**:
  * Заголовок файла — это часть данных, расположенная в начале файла, позволяет определить, какого типа файл это (например, текстовый, изображение, аудио и т.д.).
  * Если файл имеет неизвестное расширение, то при его запуске Windows будет ориентироваться по заголовку файла. Что позволяет маскировать исполнямые файлы.&#x20;
  * Sysmon EID 27 позволяет обнаруживать и превентивно удалять такие файлы, если они подходят под условия в конфигурации.&#x20;

{% hint style="info" %}
События Sysmon с ID 27 (FileBlockExecutable) и 28 (FileBlockShredding) сами по себе **не являются полноценным EDR** (Endpoint Detection and Response) решением, но вносят элементы активной защиты, приближая Sysmon к функционалу EDR.
{% endhint %}

## Таблица с примерами атак, которые можно обнаружить с помощью Sysmon

<table data-header-hidden><thead><tr><th width="122"></th><th width="251"></th><th></th></tr></thead><tbody><tr><td><strong>Event ID</strong></td><td><strong>Описание события</strong></td><td><strong>Примеры атак</strong></td></tr><tr><td><strong>1</strong></td><td>Создание нового процесса</td><td>- Запуск известных утилит для взлома, в том числе переименованных (по мета информации, original_name)<br>- поиск IoC по хешам<br>- использование Lolbins</td></tr><tr><td>2</td><td>Изменение времени создания файла</td><td>Обнаружение попыток скрыть следы активности. Мы у себя не применяем, но может быть полезно для DFIR. </td></tr><tr><td><strong>3</strong></td><td>Установка сетевого соединения</td><td>- Подключение к подозрительным IP-адресам, C2-серверам.<br>- Lateral movement через SMB или RDP.</td></tr><tr><td><strong>7</strong></td><td>Загрузка модуля (DLL)</td><td>- Внедрение вредоносных DLL в процессы (DLL injection)<br>- DLL Hijacking</td></tr><tr><td><strong>8</strong></td><td>Создание удаленного потока</td><td>- Инъекции в память процесса (например, использование Meterpreter).</td></tr><tr><td><strong>10</strong></td><td>Доступ к процессу</td><td>- Чтение памяти процессов (например, кража учетных данных с помощью Mimikatz).</td></tr><tr><td><strong>11</strong></td><td>Создание/изменение файла</td><td>- Создание вредоносных файлов (например, ransomware).<br>- Изменение системных файлов.<br>- Подозрительная активность от недавно созданных файлов. </td></tr><tr><td><strong>12</strong></td><td>Создание и удаление объектов реестра</td><td>- Установка автозагрузки для вредоносных программ.<br>- Изменение реестра для отключения безопасности.</td></tr><tr><td><strong>13</strong></td><td>Установка значения в реестре</td><td>- Изменение настроек реестра для обхода защиты (например, отключение UAC).</td></tr><tr><td><strong>17</strong></td><td>Создание именованного канала (Named Pipe)</td><td>- Использование именованных каналов для взаимодействия с вредоносным ПО (например, C2-команды).</td></tr><tr><td><strong>18</strong></td><td>Подключение к именованному каналу (Named Pipe)</td><td>- Взаимодействие с вредоносным ПО через именованные каналы.<br>- Повышение привилегий или эксплуатация уязвимостей через именованные каналы. </td></tr><tr><td><strong>22</strong></td><td>DNS-запросы</td><td>- Подозрительные DNS-запросы к доменам C2-серверов.<br>- DNS-туннелирование.</td></tr><tr><td>25</td><td>ProcessTampering (изменение образа процесса)</td><td>Регистрируется при таких методах миграции в память процесса как Process Hollowing и Herparderping</td></tr><tr><td>27</td><td>Обнаружение и блокировка создания исполняемых файлов</td><td>Активная защита от записи вредоносных исполняемых файлов</td></tr><tr><td>29</td><td>Создание нового исполняемого файла</td><td>Аналогичен EID 27, только не удаляет файл, а создает событие безопасности. По сути более точный аналог Sysmon 2 для выявления создания исполняемых файлов, в том числе замаскированных исполянмых файлов. </td></tr><tr><td><strong>255</strong></td><td>Ошибки Sysmon</td><td>- Попытки обхода Sysmon (например, выгрузка драйвера).<br>- Ошибки в конфигурации Sysmon.</td></tr></tbody></table>

## Официальная документация

На странице описан процесс настройки. \
А также содержится полный список регистрируемых событий с подробным описанием.&#x20;

Там же ссылки на скачивание дистрибутива.&#x20;

{% embed url="<https://learn.microsoft.com/ru-ru/sysinternals/downloads/sysmon>" %}

### Конфигурация Sysmon

**Sysmon** настраивается через XML-файл, который определяет, какие события будут логироваться. Основные элементы конфигурации:

* **Event Filtering:** Фильтрация событий по типу (например, создание процесса, сетевое подключение).
* **Rules:** Правила для включения или исключения конкретных событий (например, логировать только подозрительные процессы).
* **Hashing:** Включение хэширования файлов для проверки целостности.

Пример минимальной (и, наверное, самое бесполезной) конфигурации:

```xml
<Sysmon schemaversion="4.81">
  <EventFiltering>
    <ProcessCreate onmatch="exclude"/> <!-- Исключить все события создания процессов -->
    <NetworkConnect onmatch="include"> <!-- Включить только сетевые подключения -->
      <DestinationPort>443</DestinationPort> <!-- Логировать только HTTPS -->
    </NetworkConnect>
  </EventFiltering>
</Sysmon>
```

***

<https://eventlog-compendium.streamlit.app/Sysmon_Configuration_Builder> - неплохо ресурс, который позволяет быстро собрать конфигурацию под ствои потребности.&#x20;

### Рекомендации по фильтрации событий и настройке

Как и любая настройка логирования, конфигурирувание Sysmon - это баланс между детализацией и производительностью.&#x20;

* Начните с базовой конфигурации и постепенно добавляйте правила.
* Регулярно пересматривайте конфигурацию, чтобы исключить избыточные правила.
* Многие предлагают избавиться от событий сетевых коннектов или логировать только запуск подозрительных процессов. \
  Делайте это очень осознанно. Лучше исключить известные шумные вещи (системные процессы и коннекты от GoogleChrome на 443 порт). \
  Потому что заранее сложно предположить, как будет действовать атакующий.&#x20;

{% hint style="info" %}
В интернете очень много статей по настройкам логирования, и многие из авторов предлагают сразу избавиться от событий сетевых соединений. \
Да, они самые шумные в большинстве своем не приносят много пользы. Они становятся проблемой, когда идет борьба за EPS.&#x20;

Но сетевые соединения - это очень важная часть Detection Engineering и Threat Hunting.  Без них вы потеряете все взаимодействия с управляющими серверами, обнаружение горизонтального перемещения, сканирования и даже некоторые атаки на повышение привилегий.&#x20;

И нет, netflow полностью не заменит, так как там отсутствует информация о процессах.&#x20;
{% endhint %}

***

### Дополнительные материалы и примеры конфигураций

1. **Официальная документация:**
   * [Документация Sysmon от Microsoft](https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon)
   * [Руководство по конфигурации Sysmon](https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon#configuration)
2. **Примеры конфигураций:**
   * [SwiftOnSecurity/Sysmon-Config](https://github.com/SwiftOnSecurity/sysmon-config) — популярная конфигурация с подробными комментариями.
   * [Olaf Hartong/Sysmon-Modular](https://github.com/olafhartong/sysmon-modular) — модульная конфигурация для разных сценариев.
3. Configuration Builder
   1. <https://eventlog-compendium.streamlit.app/Sysmon_Configuration_Builder>

## Способы обхода Sysmon

Sysmon применяет технологию Protected Process Light (PPL) для защиты своих процессов от вмешательства вредоносных программ и пользователей. Тем не менее обнаружив его, могут попытаться обойти или отключить.&#x20;

### **Признаки, по которым атакующие могут обнаружить Sysmon**

* **Процессы:**\
  Поиск процессов `sysmon.exe` или `sysmon64.exe` с помощью утилит, таких как `tasklist` или `Get-Process`.
* **Службы:**\
  Служба `Sysmon` или `Sysmon64` может быть обнаружена через `sc query` или `Get-Service`.
* **Драйверы:**\
  Драйвер `SysmonDrv.sys` может быть найден через `driverquery` или анализ загруженных драйверов.
* **Файлы на диске:**\
  Файлы Sysmon обычно находятся в `C:\Windows\System32` или `C:\Windows\Sysmon`.
* **Журналы событий:**\
  Злоумышленники могут проверить журнал событий Windows на наличие логов Sysmon (например, `Microsoft-Windows-Sysmon/Operational`).

### **Как установить Sysmon более скрытно**

* **Переименование файлов и служб:**
  * Переименуйте `sysmon.exe` и `SysmonDrv.sys` в менее подозрительные имена (например, `svchosthelper.exe`).
  * Измените имя службы Sysmon через реестр или утилиту `sc`.
* **Использование случайных путей:**\
  Установите Sysmon в нестандартную директорию (например, `C:\ProgramData\Microsoft\Helpers`).

### **Способы обхода Sysmon и их обнаружение**

* **Отключение Sysmon:**
  * **Метод:** Остановка службы через `sc stop Sysmon` или выгрузка драйвера через `fltmc unload SysmonDrv`.
  * **Обнаружение:** Мониторинг событий остановки служб (Event ID 7036) и запуск утилиты `fltmc`.&#x20;
* **Удаление Sysmon:**
  * **Метод:** Удаление файлов и служб Sysmon.
  * **Обнаружение:** Мониторинг изменений в системных файлах и реестре (Event ID 11, 12/14 в Sysmon).

{% hint style="info" %}
Событие **Event ID 255** — это важный источник информации о состоянии Sysmon. Оно помогает аналитикам SOC обнаруживать ошибки конфигурации, попытки обхода и аномалии в работе Sysmon.&#x20;
{% endhint %}

* **Манипуляции с конфигурацией:**
  * **Метод:** Изменение конфигурационного файла Sysmon (XML) для исключения логирования.
  * **Обнаружение:** Мониторинг изменений в конфигурации (Event ID 16 в Sysmon). Можно сравнивать хеш-сумму нового конфигурационного файла с вашим, который вы используете в инфраструктуре и алертить на отличия.&#x20;

{% hint style="info" %}
Еще атакующие могут не только заменять конфигурацию на свою, но и искать слабые места в вашей, чтобы остаться незамеченными. Например, запускать процессы из директорий, которые добавлены вами в исключение логирования.&#x20;
{% endhint %}

И настройте мониторинг источников (обычно эту функция есть по умолчанию в SIEM-системах), это позволит быстро обнаруживать, если с узла перестанут поступать логи Sysmon. Только исключите Event ID 255 из мониторинга. Ошибка ≠ корректное логирование.&#x20;

Ну и еще несколько хороших статей с продвинутыми техниками, которые включают манипуляции с ETW и перехват обратных вызовов:

{% embed url="<https://xakep.ru/2024/02/09/sysmon-blinding/>" %}

{% embed url="<https://xakep.ru/2024/03/28/sysmon-full-blinding/>" %}

Есть ряд техник, такие как **Parent PID Spoofing** или **Cmdline Spoofing**, которые не обнаруживаются на уровне логов. Эти техники как раз и приводят к тому, что в журналы пишутся недостовеные данные. Чаще всего для обнаружения подобных техник необходимо использовать EDR.&#x20;
