Курування правил Sigma для журналів подій Windows¶
Ця сторінка описує, як Yamato Security курує вихідні правила Sigma для журналів подій Windows, приводячи їх до зручнішої форми шляхом деабстрагування поля logsource та відфільтровування правил, які неможливо або важко використовувати. Це робиться за допомогою інструмента sigma-to-hayabusa-converter, який використовується здебільшого для створення курованого набору правил Sigma, розміщеного в hayabusa-rules. Цей набір правил використовується в Hayabusa та Velociraptor.
Джерело
Ця документація підтримується разом з інструментом-конвертером у Yamato-Security/sigma-to-hayabusa-converter. Сподіваємося, що ця інформація також буде корисною для інших проєктів, які хочуть використовувати правила Sigma для виявлення атак у журналах подій Windows. Дивіться також Створення файлів правил та Модифікатори полів.
Коротко про головне¶
- Деабстрагування поля
logsourceта створення нових файлів правил.ymlдля вбудованих правил, а також для оригінальних правил на основі Sysmon, спрощує повну підтримку вбудованих подій для правил Sigma та робить правила зручнішими для читання аналітиками. - Під час написання правил Sigma для журналів подій Windows важливо розуміти відмінності між оригінальними журналами на основі Sysmon та сумісними з ними вбудованими журналами, а в ідеалі — писати правила так, щоб вони були сумісні з обома.
- Багато організацій не можуть або не хочуть встановлювати та підтримувати агентів Sysmon на всіх своїх кінцевих точках Windows, оскільки не мають виділених ресурсів для цього або хочуть уникнути ризику будь-яких уповільнень чи збоїв, спричинених Sysmon. Через це важливо вмикати якомога більше вбудованих журналів подій та використовувати інструменти, здатні виявляти атаки в цих вбудованих журналах.
Проблеми з вихідними правилами Sigma для журналів подій Windows¶
Головною проблемою при створенні власного парсера правил Sigma для журналів подій Windows, за нашим досвідом, була підтримка поля logsource. Наразі це одна з небагатьох речей, які Hayabusa ще не підтримує нативно, оскільки це все ще дуже складно і перебуває в стадії розробки. Наразі ми обходимо це, конвертуючи вихідні правила у зручніший для використання формат, як детально пояснено нижче.
Про поле logsource¶
У правилах Sigma для журналів подій Windows поле product встановлюється в windows, після чого йде або поле service, або поле category.
Приклад поля service:
Приклад поля category:
Поля Service¶
Поля service порівняно прості в обробці та вказують будь-якому бекенду, що використовує правило Sigma, шукати один або кілька каналів на основі поля Channel у XML-журналі подій Windows.
Приклад одного каналу
service: application — це те саме, що додати до правила Sigma умову вибірки Channel: Application.
Приклад кількох каналів
service: applocker наразі створює найбільшу кількість каналів для пошуку, оскільки AppLocker зберігає інформацію в чотирьох різних журналах. Щоб коректно шукати лише в журналах AppLocker, до логіки правила Sigma потрібно додати таку умову:
Channel:
- Microsoft-Windows-AppLocker/MSI and Script
- Microsoft-Windows-AppLocker/EXE and DLL
- Microsoft-Windows-AppLocker/Packaged app-Deployment
- Microsoft-Windows-AppLocker/Packaged app-Execution
Поточний список зіставлень service
| Service | Channel |
|---|---|
| application | Application |
| application-experience | Microsoft-Windows-Application-Experience/Program-Telemetry, Microsoft-Windows-Application-Experience/Program-Compatibility-Assistant |
| applocker | Microsoft-Windows-AppLocker/MSI and Script, Microsoft-Windows-AppLocker/EXE and DLL, Microsoft-Windows-AppLocker/Packaged app-Deployment, Microsoft-Windows-AppLocker/Packaged app-Execution |
| appmodel-runtime | Microsoft-Windows-AppModel-Runtime/Admin |
| appxpackaging-om | Microsoft-Windows-AppxPackaging/Operational |
| bits-client | Microsoft-Windows-Bits-Client/Operational |
| capi2 | Microsoft-Windows-CAPI2/Operational |
| certificateservicesclient-lifecycle-system | Microsoft-Windows-CertificateServicesClient-Lifecycle-System/Operational |
| codeintegrity-operational | Microsoft-Windows-CodeIntegrity/Operational |
| diagnosis-scripted | Microsoft-Windows-Diagnosis-Scripted/Operational |
| dhcp | Microsoft-Windows-DHCP-Server/Operational |
| dns-client | Microsoft-Windows-DNS Client Events/Operational |
| dns-server | DNS Server |
| dns-server-analytic | Microsoft-Windows-DNS-Server/Analytical |
| driver-framework | Microsoft-Windows-DriverFrameworks-UserMode/Operational |
| firewall-as | Microsoft-Windows-Windows Firewall With Advanced Security/Firewall |
| hyper-v-worker | Microsoft-Windows-Hyper-V-Worker |
| kernel-event-tracing | Microsoft-Windows-Kernel-EventTracing |
| kernel-shimengine | Microsoft-Windows-Kernel-ShimEngine/Operational, Microsoft-Windows-Kernel-ShimEngine/Diagnostic |
| ldap_debug | Microsoft-Windows-LDAP-Client/Debug |
| lsa-server | Microsoft-Windows-LSA/Operational |
| microsoft-servicebus-client | Microsoft-ServiceBus-Client |
| msexchange-management | MSExchange Management |
| ntfs | Microsoft-Windows-Ntfs/Operational |
| ntlm | Microsoft-Windows-NTLM/Operational |
| openssh | OpenSSH/Operational |
| powershell | Microsoft-Windows-PowerShell/Operational, PowerShellCore/Operational |
| powershell-classic | Windows PowerShell |
| printservice-admin | Microsoft-Windows-PrintService/Admin |
| printservice-operational | Microsoft-Windows-PrintService/Operational |
| security | Security |
| security-mitigations | Microsoft-Windows-Security-Mitigations* |
| shell-core | Microsoft-Windows-Shell-Core/Operational |
| smbclient-connectivity | Microsoft-Windows-SmbClient/Connectivity |
| smbclient-security | Microsoft-Windows-SmbClient/Security |
| system | System |
| sysmon | Microsoft-Windows-Sysmon/Operational |
| taskscheduler | Microsoft-Windows-TaskScheduler/Operational |
| terminalservices-localsessionmanager | Microsoft-Windows-TerminalServices-LocalSessionManager/Operational |
| vhdmp | Microsoft-Windows-VHDMP/Operational |
| wmi | Microsoft-Windows-WMI-Activity/Operational |
| windefend | Microsoft-Windows-Windows Defender/Operational |
Джерела зіставлень service
Ми створили YAML-файли зіставлень служб до імен каналів, які періодично підтримуємо та розміщуємо в репозиторії конвертера. Вони базуються на інформації про зіставлення служб з SigmaHQ/sigma tests/thor.yml: хоча це, схоже, не є офіційним загальним конфігураційним файлом для використання людьми, він, вочевидь, найбільш актуальний.
Поля Category¶
Більшість полів category просто додають умову перевірки певних ідентифікаторів подій у полі EventID, окрім пошуку за конкретним Channel. Назви категорій здебільшого базуються на подіях Sysmon, з деякими додатковими категоріями для вбудованих журналів PowerShell та Windows Defender.
Приклад поля category
Поточний список зіставлень category
Деякі категорії зіставляються з кількома службами/EventID (позначено жирним).
| Category | Service | EventIDs |
|---|---|---|
| antivirus | windefend | 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1017, 1018, 1019, 1115, 1116 |
| clipboard_change | sysmon | 24 |
| create_remote_thread | sysmon | 8 |
| create_stream_hash | sysmon | 15 |
| dns_query | sysmon | 22 |
| driver_load | sysmon | 6 |
| file_block_executable | sysmon | 27 |
| file_block_shredding | sysmon | 28 |
| file_change | sysmon | 2 |
| file_creation | sysmon | 11 |
| file_delete | sysmon | 23, 26 |
| file_delete_detected | sysmon | 26 |
| file_executable_detected | sysmon | 29 |
| image_load | sysmon | 7 |
| network_connection | sysmon | 3 |
| network_connection | security | 5156 |
| pipe_created | sysmon | 17, 18 |
| process_access | sysmon | 10 |
| process_creation | sysmon | 1 |
| process_creation | security | 4688 |
| process_tampering | sysmon | 25 |
| process_termination | sysmon | 5 |
| ps_classic_provider_start | powershell-classic | 600 |
| ps_classic_start | powershell-classic | 400 |
| ps_module | powershell | 4103 |
| ps_script | powershell | 4104 |
| raw_access_thread | sysmon | 9 |
| registry_add | sysmon | 12 |
| registry_add | security | 4657 |
| registry_delete | sysmon | 12 |
| registry_event | sysmon | 12, 13, 14 |
| registry_event | security | 4657 |
| registry_rename | sysmon | 14 |
| registry_set | sysmon | 13 |
| registry_set | security | 4657 |
| sysmon_error | sysmon | 255 |
| sysmon_status | sysmon | 4, 16 |
| wmi_event | sysmon | 19, 20, 21 |
Проблеми поля category
Як показано вище, та сама category може використовувати кілька служб та ідентифікаторів подій (позначено жирним). Це означає, що деякі правила Sigma, розроблені для sysmon, можна використовувати зі схожими вбудованими журналами подій Windows security, якщо поля, які використовує правило, також існують у вбудованому журналі подій. У такому випадку назви полів — а іноді й значення — можуть потребувати перетворення для відповідності назвам полів та значенням вбудованого журналу подій security. Хоча для деяких категорій це може бути так само просто, як перейменування кількох назв полів, для інших категорій це може вимагати різноманітних перетворень і значень полів. Те, як ми виконуємо це перетворення, та сумісність між журналами sysmon і журналами security детально пояснено нижче.
Джерела зіставлень category
YAML-файли зіставлень для категорій також розміщені в репозиторії конвертера та також базуються на інформації з SigmaHQ/sigma tests/thor.yml.
Переваги та проблеми абстрагування джерела журналу¶
Абстрагування джерела журналу та створення зіставлень для різних Channel, EventID та полів на бекенді має як переваги, так і проблеми.
Переваги¶
- Може бути простіше перетворювати назви полів
ChannelтаEventIDу відповідні назви полів бекенду під час конвертації правил Sigma в запити інших бекендів. - Можна об'єднати два правила в одне. Наприклад, події створення процесів можуть реєструватися як у
Sysmon 1, так і вSecurity 4688. Замість написання двох правил, які переглядають різні канали, ідентифікатори подій та поля, але в іншому містять однакову логіку, можна стандартизувати поля до того, що використовує Sysmon, а потім доручити конвертеру бекенду додати поляChannelтаEventIDі за потреби перетворити іншу інформацію полів. Це спрощує підтримку правил, оскільки правил, які потрібно підтримувати, стає менше. - Хоча це трапляється дуже рідко, якщо джерело журналу починає реєструвати свої дані в іншому
ChannelабоEventID, потрібно оновити лише логіку зіставлення замість оновлення всіх правил Sigma, що спрощує підтримку.
Проблеми¶
- Що станеться, якщо оригінальне правило Sigma на основі Sysmon використовує поле, яке не існує у вбудованих журналах, для відфільтровування хибних спрацювань? Чи слід усе одно створювати правило, надаючи пріоритет можливому виявленню, чи ігнорувати його, надаючи пріоритет меншій кількості хибних спрацювань? В ідеалі потрібно було б створити два правила з різними
severity,statusта інформацією про хибні спрацювання, щоб користувач міг краще з цим впоратися. - Це ускладнює фільтрування правил, оскільки не можна просто фільтрувати за полями
ChannelчиEventIDу файлі.ymlабо за шляхом файлу правила, якщо файл ще не створено, — тому що це похідне правило для вбудованого журналу замість оригінального правила Sysmon. Крім того, оскільки ідентифікатор правила той самий, не можна фільтрувати за ідентифікаторами правил. - Це ускладнює підтвердження сповіщення, коли сповіщення надходить від правила для вбудованих журналів, похідного від журналу Sysmon. Назви полів та значення не збігатимуться, тож аналітику потрібно розуміти дещо складний процес перетворення.
- Це ускладнює створення логіки бекенду.
Хоча ми не можемо нічого зробити з першою проблемою, окрім створення та підтримки нових правил, коли є вагомий сценарій використання, що виправдовує зусилля, для вирішення проблем 2–4 ми вирішили деабстрагувати поле logsource та створювати два набори правил для будь-якого правила, яке може породити кілька правил. Правила, здатні виявляти атаки у вбудованих журналах, виводяться в каталог builtin, а правила для Sysmon виводяться в каталог sysmon.
Приклад перетворення¶
Ось простий приклад для кращого розуміння процесу перетворення.
До перетворення — оригінальне правило Sigma:
logsource:
category: process_creation
product: windows
detection:
selection:
- Image|endswith: '.exe'
condition: selection
Після перетворення — сумісне з Hayabusa правило для журналів Sysmon:
logsource:
category: process_creation
product: windows
detection:
process_creation:
Channel: Microsoft-Windows-Sysmon/Operational
EventID: 1
selection:
- Image|endswith: '.exe'
condition: process_creation and selection
...та сумісне з Hayabusa правило для вбудованих журналів Windows:
logsource:
category: process_creation
product: windows
detection:
process_creation:
Channel: Security
EventID: 4688
selection:
- NewProcessName|endswith: '.exe'
condition: process_creation and selection
Як бачите, було створено два правила: одне для журналів Sysmon 1 та одне для вбудованих журналів Security 4688. Було додано нову умову process_creation з інформацією про канал та ідентифікатор події, і її додано до поля condition, щоб вимагати виконання цієї умови. Також оригінальну назву поля Image було змінено на NewProcessName.
Спільні риси перетворення¶
Перш ніж детально пояснювати, як ми перетворюємо конкретні категорії, ось частина перетворення, яка застосовується до всіх правил.
- Будь-яке правило, ідентифікатор якого є в
ignore-uuid-list.txt, ігнорується. Наразі ми ігноруємо лише правила, що спричиняють хибні спрацювання у Windows Defender, оскільки вони містять ключові слова на кшталтmimikatz. - "Заповнювачі" (placeholder) правила ігноруються, оскільки їх неможливо використовувати як є. Це правила, розміщені в теці
rules-placeholderу репозиторії Sigma. -
Правила, які використовують несумісні модифікатори полів, відкидаються. Hayabusa підтримує більшість модифікаторів полів, тож конвертер не виводитиме жодного правила, що використовує модифікатор, окрім цих, щоб уникнути помилок парсингу (див. Модифікатори полів):
all,base64,base64offset,cased,cidr,contains,endswith,endswithfield,equalsfield,exists,fieldref,gt,gte,lt,lte,re,startswith,utf16,utf16be,utf16le,wide,windash -
Правила із синтаксичними помилками не перетворюються.
- Теги в правилах
deprecatedтаunsupportedоновлюються з формату V1 до формату V2, який використовує-замість_, щоб зберегти всюди узгодженість та легше обробляти скорочення в Hayabusa. Приклад:initial_accessстаєinitial-access. -
Оскільки ми додаємо до правил інформацію
ChannelтаEventID, ми створюємо новий ідентифікатор UUIDv4, використовуючи MD5-хеш оригінального ідентифікатора, вказуємо оригінальний ідентифікатор у поліrelatedта позначаємоtypeякderived. Для правил, які можуть бути перетворені на кілька правил (sysmonтаbuiltin), нам потрібно створити нові ідентифікатори правил і для похідних правилbuiltin. Для цього ми обчислюємо MD5-хеш ідентифікатора правилаsysmonі використовуємо його для ідентифікатора UUIDv4. Наприклад:Оригінальне правило Sigma:
Нове правило
sysmon:title: 7Zip Compressing Dump Files id: ec570e53-4c76-45a9-804d-dc3f355ff7a7 related: - id: 1ac14d38-3dfc-4635-92c7-e3fd1c5f5bfc type: derivedНове правило
builtin: -
Правила, які виявляють щось у вбудованих журналах подій Windows, виводяться в каталог
builtin, тоді як правила, що покладаються на журнали Sysmon, виводяться в каталогsysmon, з підкаталогами, що відповідають каталогам у вихідному репозиторії Sigma.
Обмеження перетворення¶
Наразі є лише одна відома вада: рядки коментарів у правилах Sigma не будуть включені у вихідні правила, якщо коментарі не йдуть після якогось вихідного коду.
Порівняння подій Sysmon та вбудованих подій і перетворення правил¶
Створення процесу¶
- Category:
process_creation - Sysmon
- Channel:
Microsoft-Windows-Sysmon/Operational - Event ID:
1
- Channel:
- Вбудований журнал
- Channel:
Security - Event ID:
4688
- Channel:
Порівняння
Примітки щодо перетворення
- Інформацію поля
Userпотрібно розділити на поляSubjectUserNameтаSubjectDomainName. - Назва поля
LogonIdзмінюється наSubjectLogonId, а будь-які літери в шістнадцятковому значенні потрібно зробити малими. - Назва поля
ProcessIdзмінюється наNewProcessId, а значення потрібно перетворити в шістнадцяткове. - Назва поля
Imageзмінюється наNewProcessName. - Назва поля
ParentProcessIdзмінюється наProcessId, а значення потрібно перетворити в шістнадцяткове. - Назва поля
ParentImageзмінюється наParentProcessName. - Назва поля
IntegrityLevelзмінюється наMandatoryLabel, і потрібне таке перетворення значень:Low:S-1-16-4096Medium:S-1-16-8192High:S-1-16-12288System:S-1-16-16384
- Якщо правило містить такі поля, які існують лише в подіях
Security 4688, то ми не створюємо правилоSysmon 1:SubjectUserSid,TokenElevationType,TargetUserSid,TargetUserName,TargetDomainName,TargetLogonId
- Якщо правило містить такі поля, які існують лише в подіях
Sysmon 1, то ми не створюємо правилоSecurity 4688:RuleName,UtcTime,ProcessGuid,FileVersion,Description,Product,Company,OriginalFileName,CurrentDirectory,LogonGuid,TerminalSessionId,Hashes,ParentProcessGuid,ParentCommandLine,ParentUser
-
Є виняток для пунктів №8 та №9: навіть якщо використовується поле, яке існує лише в одній події журналу, але це поле в умові
OR, то правило все одно слід створити. Наприклад, наступне правило не повинно породжувати правилоSecurity 4688, оскільки полеOriginalFileNameє обов'язковим (логікаANDвсередині вибірки):Однак правило з наступною умовою повинно створити правило
Security 4688, оскількиOriginalFileNameє необов'язковим (логікаORвсередині вибірки):Складність полягає в тому, що ваш парсер має розуміти логіку не лише всередині вибірок, але й усередині поля
condition. Наприклад, наступне правило не повинно створювати правилоSecurity 4688, оскільки воно використовує логікуAND:selection_img: Image|endswith: \addinutil.exe selection_orig: OriginalFileName: AddInUtil.exe condition: selection_img and selection_origОднак наступне правило повинно створити правило
Security 4688, оскільки воно використовує логікуOR:
Інші примітки
- Поле
SubjectUserSidуSecurity 4688показує SID; проте у відрендереному повідомленніMessageжурналу подій воно перетворюється наDOMAIN\User. - Події
Security 4688можуть не містити інформації про параметри командного рядка вCommandLineзалежно від налаштувань. TokenElevationTypeвідображається як є вMessageі не рендериться.S-1-16-4096тощо всерединіMandatoryLabelперетворюється наMandatory Label\Low Mandatory Levelтощо у відрендереномуMessage.
Налаштування вбудованого журналу
Не увімкнено за замовчуванням
Важливі вбудовані журнали подій створення процесів Security 4688 не увімкнено за замовчуванням. Щоб використовувати більшість правил Sigma, вам потрібно увімкнути як події 4688, так і журналювання параметрів командного рядка.
Увімкнення через групову політику:
Computer Configuration > Policies > Windows Settings > Security Settings > Advanced Audit Configuration > Detailed Tracking > Audit Process Creation:EnabledAdministrative Templates > System > Audit Process Creation > Include command line in process creation events:Enabled
Увімкнення через командний рядок:
auditpol /set /subcategory:{0CCE922B-69AE-11D9-BED3-505054503030} /success:enable /failure:enable
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit /v ProcessCreationIncludeCmdLine_Enabled /f /t REG_DWORD /d 1
Мережеве з'єднання¶
- Category:
network_connection - Sysmon
- Channel:
Microsoft-Windows-Sysmon/Operational - Event ID:
3
- Channel:
- Вбудований журнал
- Channel:
Security - Event ID:
5156
- Channel:
Порівняння
Примітки щодо перетворення
- Назва поля
ProcessIdзмінюється наProcessID. - Назва поля
Imageзмінюється наApplication, аC:\змінюється на\device\harddiskvolume?\. (Примітка: оскільки ми не знаємо номер тому жорсткого диска, ми замінюємо його односимвольним підстановним знаком?.) - Значення поля
Protocoltcpзмінюється на6, аudp— на17. - Назва поля
Initiatedзмінюється наDirection, а значенняtrueзмінюється на%%14593, аfalse— на%%14592. - Назва поля
SourceIpзмінюється наSourceAddress. - Назва поля
DestinationIpзмінюється наDestAddress. - Назва поля
DestinationPortзмінюється наDestPort.
Налаштування вбудованого журналу
Не увімкнено за замовчуванням
Вбудовані журнали мережевих з'єднань Security 5156 не увімкнено за замовчуванням. Вони створюють велику кількість журналів, які можуть перезаписати інші важливі журнали в журналі подій Security та потенційно уповільнити систему, якщо вона має велику кількість мережевих з'єднань. Переконайтеся, що максимальний розмір файлу для журналу Security є великим, та протестуйте, щоб переконатися, що немає негативного впливу на систему.
Увімкнення через групову політику:
Computer Configuration -> Windows Settings -> Security Settings -> Advanced Audit Policy Configuration -> System Audit Policies -> Object Access -> Filtering Platform Connection:Success and Failure
Увімкнення через командний рядок:
...або таке, якщо ви використовуєте неанглійську локаль:
Дивіться також
Докладніше про ввімкнення вбудованих журналів подій Windows, необхідних для збору доказів, на які покладаються ці правила, див. Журналювання Windows та Sysmon та проєкт EnableWindowsLogSettings.
Поради щодо написання правил Sigma¶
Tip
Якщо ви використовуєте будь-яке поле, яке існує в журналі sysmon, але не в журналі builtin, обов'язково зробіть це поле необов'язковим, щоб правило все ще можна було використовувати для журналів builtin.
Наприклад:
Ця вибірка шукає, коли процес (Image) має назву addinutil.exe. Проблема в тому, що зловмисник може просто перейменувати файл, щоб обійти правило. Поле OriginalFileName, яке існує лише в журналах Sysmon, — це назва файлу, вбудована в бінарний файл під час компіляції. Навіть якщо зловмисник перейменує файл, вбудована назва не зміниться, тож це правило може виявляти атаки, у яких зловмисник перейменував файл, при використанні Sysmon, а також може виявляти атаки, у яких назву файлу не було змінено, при використанні стандартних вбудованих журналів.
Попередньо перетворені правила Sigma¶
Правила Sigma, куровані в описаний на цій сторінці спосіб — шляхом деабстрагування поля logsource — розміщені в репозиторії hayabusa-rules у теці sigma.
Середовище інструмента¶
Якщо ви хочете локально перетворювати правила Sigma у сумісний з Hayabusa формат, спочатку потрібно встановити Poetry. Будь ласка, зверніться до офіційної документації зі встановлення Poetry.
Використання інструмента¶
sigma-to-hayabusa-converter.py — це наш основний інструмент для перетворення поля logsource правил Sigma у сумісний з Hayabusa формат. Щоб його запустити, виконайте такі завдання:
git clone https://github.com/SigmaHQ/sigma.git
git clone https://github.com/Yamato-Security/sigma-to-hayabusa-converter.git
cd sigma-to-hayabusa-converter
poetry install --no-root
poetry run python sigma-to-hayabusa-converter.py -r ../sigma -o ./converted_sigma_rules
Після виконання наведених вище команд правила, перетворені у сумісний з Hayabusa формат, будуть виведені в каталог ./converted_sigma_rules.

