Sysmon (System Monitor)

Sysmon — это системная утилита из пакета Sysinternals от Microsoft. Она работает как драйвер и служба в Windows и позволяет логировать детализированную активность процессов, сетевых подключений, файловых операций и многое другое в Windows Event Log.

Используется администраторами и специалистами по безопасности для мониторинга подозрительной активности и расследования инцидентов.

  • Логирование запуска процессов (пути, аргументы, хеши файлов)
  • Отслеживание загрузки драйверов
  • Сетевые подключения (IP-адреса, порты, PID процессов)
  • Создание и изменение файлов
  • Модификации реестра
  • Создание удалённых потоков и внедрение кода
  • Настройка через XML-конфигурацию
  1. Скачать Sysmon с сайта Sysinternals: https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon
  2. Распаковать архив и открыть PowerShell/Command Prompt от имени администратора
  3. Установить Sysmon с базовой конфигурацией:
    sysmon.exe -accepteula -i
 
  1. Проверить работу:

Журналы событий: Applications and Services Logs → Microsoft → Windows → Sysmon/Operational

  • Установка с конфигом:
  sysmon.exe -accepteula -i sysmonconfig.xml  
  • Удаление Sysmon:
     sysmon.exe -u    
  • Обновление конфигурации:
    sysmon.exe -c sysmonconfig.xml    
  • Показать текущую конфигурацию:
    sysmon.exe -c    
  • Можно написать самостоятельно (XML)
  • Или использовать готовые community-конфиги:
  • Рекомендуется адаптировать под свои нужды (исключать лишние события)
  • Event ID 1 — Запуск процесса
  • Event ID 3 — Сетевое подключение
  • Event ID 7 — Загрузка DLL
  • Event ID 11 — Создание файла
  • Event ID 13 — Изменение реестра
  • Event ID 22DNS-запрос
  • Event ID 25 — Named Pipe подключение
  • Используйте готовую конфигурацию — иначе слишком много шума
  • Настройте пересылку логов в SIEM/Elastic/Graylog
  • Обновляйте Sysmon и конфиги — добавляются новые Event ID
  • Не включайте все события подряд, выбирайте только необходимые

Расширенный пример sysmonconfig.xml

Ниже — пример расширенной конфигурации Sysmon, которая логирует ключевые артефакты:

  • Запуск процессов (Event ID 1)
  • Сетевые подключения (Event ID 3)
  • Загрузку модулей/DLL (Event ID 7)
  • Создание файлов (Event ID 11)
  • Изменения реестра (Event ID 13/14)
  • DNS‑запросы (Event ID 22)
  • Создание удалённых потоков (Event ID 8)
  • Использование именованных каналов (Event ID 17/18)
  • WMI‑события (Event ID 19/20/21)

Конфигурация построена по принципу «всё включено, кроме шумов» — для каждого события применены типичные исключения (их нужно адаптировать под вашу инфраструктуру).

# Установка/обновление конфигурации
sysmon.exe -accepteula -i  sysmonconfig.xml
# Либо обновить уже установленный Sysmon без переустановки службы
sysmon.exe -c sysmonconfig.xml
<Sysmon schemaversion="4.50">
  <!-- Общие параметры -->
  <HashAlgorithms>sha256</HashAlgorithms>
  <CheckRevocation>false</CheckRevocation>
  <DnsLookup>True</DnsLookup> <!-- добавляет обратное разрешение для некоторых событий -->
 
  <EventFiltering>
 
    <!-- 1. Process Create (Event ID 1) -->
    <ProcessCreate onmatch="exclude">
      <!-- Исключить шумные/системные процессы и инструмент админа -->
      <Image condition="end with">\\Sysmon.exe</Image>
      <Image condition="end with">\\Sysmon64.exe</Image>
      <Image condition="is">C:\Windows\System32\svchost.exe</Image>
      <Image condition="is">C:\Windows\System32\conhost.exe</Image>
      <Image condition="is">C:\Windows\System32\WerFault.exe</Image>
      <ParentImage condition="is">C:\Windows\System32\smss.exe</ParentImage>
      <!-- Пример: исключить штатные апдейтеры (кастомизируйте) -->
      <Image condition="end with">\\GoogleUpdate.exe</Image>
      <Image condition="end with">\\OneDrive.exe</Image>
    </ProcessCreate>
 
    <!-- 3. Network Connect (Event ID 3) -->
    <NetworkConnect onmatch="exclude">
      <!-- Локалхост и link-local -->
      <DestinationIp condition="is">127.0.0.1</DestinationIp>
      <DestinationIp condition="is">::1</DestinationIp>
      <DestinationIp condition="is">fe80::</DestinationIp>
      <!-- RFC1918 внутренние адреса (кастомизируйте под свой ландшафт) -->
      <DestinationIp condition="begin with">10.</DestinationIp>
      <DestinationIp condition="begin with">172.16.</DestinationIp>
      <DestinationIp condition="begin with">192.168.</DestinationIp>
      <!-- Исключить часто-шумные системные бинарники -->
      <Image condition="is">C:\Windows\System32\svchost.exe</Image>
      <Image condition="is">C:\Windows\System32\lsass.exe</Image>
      <Image condition="is">C:\Windows\System32\services.exe</Image>
    </NetworkConnect>
 
    <!-- 7. Image Load (Event ID 7) -->
    <ImageLoad onmatch="exclude">
      <!-- Исключить базовые системные каталоги (снижение шума) -->
      <ImageLoaded condition="begin with">C:\Windows\System32\</ImageLoaded>
      <ImageLoaded condition="begin with">C:\Windows\SysWOW64\</ImageLoaded>
      <!-- Но оставить загрузки из пользовательских профилей и Temp по умолчанию (не исключаем их) -->
      <!-- Пример: исключить Microsoft подписанные общие библиотеки (опционально) -->
      <Signed condition="is">true</Signed>
      <Signature condition="contains">Microsoft Windows</Signature>
    </ImageLoad>
 
    <!-- 8. CreateRemoteThread (Event ID 8) -->
    <CreateRemoteThread onmatch="exclude">
      <!-- Частая легитимная активность системных процессов -->
      <SourceImage condition="is">C:\Windows\System32\svchost.exe</SourceImage>
      <TargetImage condition="is">C:\Windows\System32\svchost.exe</TargetImage>
      <TargetImage condition="is">C:\Windows\System32\lsass.exe</TargetImage>
    </CreateRemoteThread>
 
    <!-- 11. File Create (Event ID 11) -->
    <FileCreate onmatch="include">
      <!-- Включаем создание потенциально опасных исполняемых из пользовательских областей -->
      <TargetFilename condition="contains">\AppData\Local\Temp\</TargetFilename>
      <TargetFilename condition="contains">\AppData\Roaming\</TargetFilename>
      <TargetFilename condition="end with">.exe</TargetFilename>
      <TargetFilename condition="end with">.dll</TargetFilename>
      <TargetFilename condition="end with">.sys</TargetFilename>
      <TargetFilename condition="end with">.scr</TargetFilename>
      <TargetFilename condition="end with">.ps1</TargetFilename>
      <TargetFilename condition="end with">.vbs</TargetFilename>
      <TargetFilename condition="end with">.js</TargetFilename>
      <TargetFilename condition="end with">.hta</TargetFilename>
      <TargetFilename condition="end with">.jar</TargetFilename>
    </FileCreate>
 
    <!-- 12/13/14. Registry Events (Set, Create/Delete Key/Value) -->
    <RegistryEvent onmatch="include">
      <!-- Автозапуски и политики -->
      <TargetObject condition="contains">\Software\Microsoft\Windows\CurrentVersion\Run</TargetObject>
      <TargetObject condition="contains">\Software\Microsoft\Windows\CurrentVersion\RunOnce</TargetObject>
      <TargetObject condition="contains">\Software\Microsoft\Windows\CurrentVersion\Policies\System</TargetObject>
      <!-- Services -->
      <TargetObject condition="contains">\System\CurrentControlSet\Services\</TargetObject>
      <!-- AppCompat/IFEO -->
      <TargetObject condition="contains">\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\</TargetObject>
    </RegistryEvent>
 
    <!-- 17/18. Pipe Created/Connected -->
    <PipeEvent onmatch="exclude">
      <!-- Исключить известные системные пайпы (пример; пополняйте список по месту) -->
      <PipeName condition="is">\InitShutdown</PipeName>
      <PipeName condition="is">\LSM_API_service</PipeName>
      <PipeName condition="is">\ntsvcs</PipeName>
      <PipeName condition="is">\scerpc</PipeName>
      <PipeName condition="is">\Winsock2\CatalogChangeListener-</PipeName>
    </PipeEvent>
 
    <!-- 19/20/21. WMI Events -->
    <WmiEvent onmatch="include">
      <!-- Ловим создание подписок и провайдеров -->
      <Operation condition="is">Created</Operation>
      <Operation condition="is">Deleted</Operation>
      <Operation condition="is">Modified</Operation>
    </WmiEvent>
 
    <!-- 22. DNS Query -->
    <DnsQuery onmatch="exclude">
      <!-- Исключить localhost/внутренние/шум -->
      <QueryName condition="is">localhost</QueryName>
      <QueryName condition="end with">.local</QueryName>
      <QueryName condition="end with">.intranet</QueryName>
      <QueryName condition="end with">.lan</QueryName>
      <!-- Пример: исключить WPAD/MDM и т.п. (проверьте у себя) -->
      <QueryName condition="is">wpad</QueryName>
      <Image condition="is">C:\Windows\System32\svchost.exe</Image>
    </DnsQuery>
 
    <!-- 23. File Delete (archive) — полезно видеть удаление подозрительных исполняемых -->
    <FileDelete onmatch="include">
      <TargetFilename condition="contains">\AppData\Local\Temp\</TargetFilename>
      <TargetFilename condition="end with">.exe</TargetFilename>
      <TargetFilename condition="end with">.dll</TargetFilename>
      <TargetFilename condition="end with">.ps1</TargetFilename>
    </FileDelete>
 
  </EventFiltering>
</Sysmon>
  • Список исключений — ориентировочный. Обязательно адаптируйте его под ваш софт, чтобы не «съесть» важные события.
  • Блоки с onmatch="exclude" означают: логировать всё, КРОМЕ перечисленного.
  • Блоки с onmatch="include" — логировать ТОЛЬКО перечисленные условия (используется, чтобы не тонуть в шуме).
  • Для сетевых событий проверьте, не хотите ли логировать и внутренние подсети — тогда удалите соответствующие исключения DestinationIp.
  • После правок конфига обновляйте его командой: sysmon.exe -c sysmonconfig.xml.