Детектирование и blue team
Что такое SIEM? Логи, запросы и алерты
SIEM собирает логи, нормализует их, применяет правила корреляции и поднимает алерты для триажа. Разбираем весь конвейер на примере, который можно запустить.
Как читать журнал Security: политика аудита, события 4624, 4625, 4634, 4672, 4688 и 1102, что добавляет Sysmon и как найти собственный неудачный вход.
Windows непрерывно записывает, что происходит на машине: запускаются службы, падают программы, входят пользователи. Каждая такая запись называется событием. У события есть метка времени, provider (компонент, который его записал), числовой Event ID, уровень и набор полей, зависящий от типа события. События сгруппированы в журналы, они же каналы, и хранятся в файлах .evtx в каталоге %SystemRoot%\System32\Winevt\Logs.
Для начала нужны три журнала:
Разницу в доступе видно из PowerShell. На машине, где проверялась статья (Windows 11, Windows PowerShell 5.1), эта команда выполнялась в оболочке без прав администратора:
Get-WinEvent -ListLog System,Application | Format-Table LogName,RecordCount,IsEnabled -AutoLogName RecordCount IsEnabled
------- ----------- ---------
System 36196 True
Application 19965 TrueКогда в ту же команду добавили Security, для этого журнала появилась ошибка: Windows не смогла получить сведения, потому что операция не авторизована. Количество записей у вас будет другим.
Многие детекты для Windows построены на журнале Security. Правило SIEM на подбор паролей считает события 4625. Правило на подозрительную админскую сессию смотрит на 4624 и 4672 вместе. Правило на вмешательство в журнал следит за 1102. Как устроены такие правила, описано в статье о SIEM из Полевого руководства. Если прочитать события вручную на одной машине, можно проверить, верны ли допущения правила для ваших систем.
В журнале Security есть только то, что Windows велит записывать политика аудита. Если политика не включает аудит неудачных входов, Windows не пишет события 4625, и правило, которое их считает, никогда не сработает. Со стороны SIEM это выглядит точно так же, как спокойная машина. Поэтому сначала проверяют политику аудита и только потом читают журнал.
Windows делит настройки аудита на категории, а категории на подкатегории. Каждая подкатегория может записывать успешные события, неудачные, и те и другие или ничего. Категории такие: Account Logon, Account Management, Detailed Tracking, DS Access, Logon/Logoff, Object Access, Policy Change, Privilege Use и System.
В категории Logon/Logoff находятся подкатегории, которые дают большинство событий из этой статьи: Logon (4624 и 4625), Logoff (4634), Account Lockout (Microsoft указывает её и для 4625) и Special Logon (4672). Создание процессов, событие 4688, относится к подкатегории Process Creation в Detailed Tracking.
Встроенная утилита для чтения политики называется auditpol. Команда auditpol /list выводит названия категорий и подкатегорий и работает в обычной оболочке. Команда auditpol /get читает сами настройки. В справочнике Microsoft сказано, что ей нужно разрешение Read на политику или право «Manage auditing and security log» (SeSecurityPrivilege), а у обычной оболочки без повышения прав нет ни того, ни другого.
auditpol /list /category /vНа машине, где проверялась статья, Windows работает на португальском языке. Там эта команда выполнилась без повышения прав и вывела каждую категорию с переведённым названием и GUID. У Logon/Logoff был GUID {69979849-797A-11D9-BED3-505054503030}. Английское название там тоже сработало: auditpol /list /subcategory:"Logon/Logoff" показала двенадцать подкатегорий. Если система отвергает название, передайте GUID.
| Event ID | Что записывает Windows | Подкатегория аудита |
|---|---|---|
| 4624 | Успешный вход учётной записи | Logon |
| 4625 | Неудачный вход учётной записи | Logon, Account Lockout |
| 4634 | Выход учётной записи | Logoff |
| 4672 | Новому входу назначены особые привилегии | Special Logon |
| 4688 | Создан новый процесс | Process Creation |
| 1102 | Журнал аудита очищен | Other Events |
Оба события записываются на компьютере, где произошёл вход. Если кто-то вводит неверный пароль на вашем ноутбуке, 4625 появится в журнале Security этого ноутбука. Большинство полей у этих событий общие:
0xC000006A для неверного пароля, 0xC0000064 для несуществующего имени пользователя, 0xC000006D для неверного имени пользователя или неверных данных аутентификации, 0xC0000072 для отключённой учётной записи. На той же странице 0xC0000234 («Account locked out») назван типичным статусом при сбое из-за заблокированной учётной записи. Несколько сбоев 0xC0000064 подряд могут означать, что кто-то перебирает имена пользователей.127.0.0.1 или ::1 означают localhost, а при интерактивном входе порт равен 0.В Windows 10 и новее у 4624 есть ещё поле Elevated Token, которое показывает, есть ли у сессии привилегии администратора.
4634 сообщает, что сессия входа завершилась. Само по себе это событие говорит мало. Ценность ему придаёт Logon ID: одно и то же шестнадцатеричное значение есть в 4624, открывшем сессию, в 4672 для этой сессии, если они были, в событиях 4688 для запущенных ею процессов и в 4634, которым она закрылась. Если пройти по одному Logon ID через журнал, сессия восстанавливается от начала до конца. Microsoft отмечает, что Logon ID уникальны только в промежутке между перезагрузками одного компьютера, поэтому всегда привязывайте ID к диапазону времени.
Windows пишет 4672, когда новый вход получает одну из привилегий из списка чувствительных, например SeDebugPrivilege (отладка программ), SeBackupPrivilege (резервное копирование файлов и каталогов) или SeTcbPrivilege (работа как часть операционной системы).
Каждый вход SYSTEM порождает 4672, поэтому таких событий в журнале много. Microsoft советует смотреть на те, где учётная запись отличается от LOCAL SYSTEM, NETWORK SERVICE и LOCAL SERVICE и где это не админ, которому такие привилегии положены.
4688 записывается при каждом запуске нового процесса, если включён аудит подкатегории Process Creation. В событии есть имя нового процесса, имя родительского процесса, учётная запись, Token Elevation Type (с каким токеном работал процесс: полным, повышенным или ограниченным) и уровень целостности.
Есть и поле Process Command Line, по умолчанию пустое. На странице Microsoft сказано, что оно заполняется, только если включён параметр групповой политики «Administrative Templates\System\Audit Process Creation\Include command line in process creation events». Без него вы знаете, что запустился powershell.exe, но не знаете, что ему велели сделать.
1102 означает, что кто-то очистил журнал Security. Событие пишет provider Microsoft-Windows-Eventlog, и в нём указана учётная запись, которая это сделала. Рекомендация Microsoft короткая: в норме такого события быть не должно, причин очищать журнал Security вручную почти не бывает, и каждый случай стоит расследовать.
Sysmon (System Monitor) — это утилита Sysinternals от Microsoft. Она устанавливается как служба и драйвер, продолжает работать после перезагрузок и пишет собственные события в Applications and Services Logs/Microsoft/Windows/Sysmon/Operational. Sysmon скачивается отдельно и в стандартную установку Windows не входит. Microsoft указывает как поддерживаемые Windows 11 и Windows Server 2019 или новее.
По сравнению со встроенным журналом Security Sysmon даёт больше подробностей об активности, которую иначе видно лишь частично:
ProcessGuid, который не повторяется, даже когда Windows повторно использует ID процессов.lsass.exe (10).Какие события Sysmon включает или исключает, задаёт конфигурационный файл XML. Microsoft прямо пишет, что Sysmon не анализирует свои события и не пытается скрыться от атакующих. Читает их SIEM или аналитик.
Установка Sysmon меняет систему, поэтому в лабораторной работе этой статьи его нет.
Вы создадите один неудачный вход на своём компьютере под своей учётной записью и найдёте его тремя способами. Не меняйте политику аудита во время этой работы. Если окажется, что политика не записывает неудачные входы, это и будет результатом: запишите его и остановитесь.
Щёлкните правой кнопкой по Windows PowerShell или Terminal и выберите Run as administrator. Проверьте, что права действительно повышены:
([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)True означает, что вы можете читать журнал Security. На машине, где проверялась статья, доступная оболочка вернула False. Команды ниже всё равно выполнялись там, и их сбои описаны как есть, потому что о них полезно знать. Там, где должен был быть вывод с повышенными правами, статья называет поля, которые нужно искать, по документации Microsoft.
auditpol /get /category:"Logon/Logoff"В оболочке с повышенными правами команда выведет каждую подкатегорию и её настройку. Найдите строку Logon. Для этой работы в ней должно быть Failure, то есть «Success and Failure» или «Failure». Если там «No Auditing», Windows не запишет 4625 и дальше вы ничего не найдёте.
Без повышения прав на машине, где проверялась статья, команда вывела ошибку 0x00000522 с сообщением, что у клиента нет требуемой привилегии, и завершилась с кодом 1314.
Нажмите Win+L, чтобы заблокировать экран. Один раз введите неверный пароль, затем войдите с правильным. Запомните время.
Используйте пароль, а PIN оставьте в стороне. Если вы обычно входите через Windows Hello, выберите на экране входа вариант с паролем. Что даёт неверный PIN, в этой статье не проверялось.
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 5 | Format-List TimeCreated, Message-FilterHashtable применяет фильтр прямо при чтении событий, и в документации Microsoft это описано как более эффективный способ, чем передавать всё в Where-Object. -MaxEvents 5 оставляет пять самых новых совпадений, потому что Get-WinEvent возвращает сначала новые.
В оболочке с повышенными правами в верхнем результате должно стоять запомненное вами время. В его Message проверьте:
C:\Windows\System32\winlogon.exe.0xC000006A в одном из них.127.0.0.1 и порт 0, как в примере Microsoft.Без повышения прав эта команда вводит в заблуждение. На машине, где проверялась статья, она не сообщила о нехватке прав и вывела ошибку, что событий, подходящих под критерии, не найдено. Простая команда Get-WinEvent -LogName Security -MaxEvents 1 в той же оболочке назвала настоящую причину: операция не авторизована. Если оболочка без повышенных прав отвечает «no events found», проверьте права, прежде чем решить, что журнал пуст.
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624} -MaxEvents 5 | Select-Object TimeCreated, IdВы должны увидеть событие 4624, записанное через несколько секунд после вашего 4625, а вокруг него другие события 4624, потому что службы и система входят постоянно. Откройте полное сообщение события, ближайшего к вашему времени, и проверьте Logon Type и имя учётной записи. Если добавить в хеш-таблицу StartTime=(Get-Date).AddMinutes(-15), поиск ограничится последними пятнадцатью минутами.
Неверный пароль, а через несколько секунд верный, от той же учётной записи за клавиатурой — это опечатка. Один и тот же сбой, повторённый для многих учётных записей с одного сетевого адреса, указывает на подбор, и правила детектирования пишут так, чтобы различать эти два случая.
wevtutil qe Security /c:5 /rd:true /f:text /q:"*[System[(EventID=4625)]]"wevtutil — более старая консольная утилита для журналов событий. qe запрашивает события, /c:5 ограничивает их количество, /rd:true читает сначала новые, /f:text выводит текст вместо XML, а /q принимает фильтр XPath. С повышенными правами вы получите те же события, что на шаге 4. Уберите /f:text, чтобы увидеть сырой XML с именами полей, которые используют правила детектирования, например TargetUserName, Status и LogonType. В Windows на другом языке текст сообщения переведён, а имена полей в XML остаются английскими.
Без повышения прав на машине, где проверялась статья, утилита сообщила, что не смогла открыть запрос событий, потому что в доступе отказано, и завершилась с кодом 5.
Запустите eventvwr.msc. Если появится запрос, разрешите запуск от имени администратора. Перейдите в Windows Logs > Security, выберите Filter Current Log и введите 4625 в поле Event IDs. Откройте событие. На вкладке General то же сообщение, что вы читали в PowerShell. На вкладке Details в режиме XML видны сырые имена полей. Не закрывайте это событие: в статье о Sigma с ним сравнивается правило.
Get-WinEvent -FilterHashtable к журналу Security без повышения прав может сообщить об отсутствии совпадений вместо отказа в доступе.Get-WinEvent -ListLog Application показала максимальный размер 20971520 байт в режиме Circular: когда журнал заполняется, старые события затираются. Проверьте журнал Security тем же способом, с повышенными правами, прежде чем рассчитывать на события прошлого месяца.Детектирование и blue team
SIEM собирает логи, нормализует их, применяет правила корреляции и поднимает алерты для триажа. Разбираем весь конвейер на примере, который можно запустить.
Детектирование и blue team
Напишите правило Sigma для неудачных входов в Windows, проверьте его, сконвертируйте для Splunk и протестируйте на заведомо хороших и заведомо плохих событиях.