來(lái)源:https://github.com/SigmaHQ/sigma/wiki/Rule-Creation-Guide
https://github.com/SigmaHQ/sigma/wiki/Taxonomy
Sigma是一個(gè)非常靈活的標(biāo)準(zhǔn),有很多可選領(lǐng)域谊娇。本指南將幫助您創(chuàng)建一個(gè)Sigma規(guī)則培廓,它與我們存儲(chǔ)庫(kù)中的其他社區(qū)規(guī)則保持一致此衅。
一、規(guī)則模板
最好的方法是使用與您計(jì)劃編寫(xiě)的內(nèi)容相近的現(xiàn)有規(guī)則悉患。
確保以下字段在你想推送到公共存儲(chǔ)庫(kù)的規(guī)則中設(shè)置:
title: a short capitalised title with less than 50 characters
id: generate one here https://www.uuidgenerator.net/version4
status: experimental
description: A description of what your rule is meant to detect
references:
? ? - A list of all references that can help a reader or analyst understand the meaning of a triggered rule
tags:
? ? - attack.execution? # example MITRE ATT&CK category
? ? - attack.t1059? ? ? # example MITRE ATT&CK technique id
? ? - car.2014-04-003? # example CAR id
author: Michael Haag, Florian Roth, Markus Neis? # example, a list of authors
date: 2018/04/06? # Rule date
logsource:? ? ? ? ? ? ? ? ? ? ? # important for the field mapping in predefined or your additional config files
? ? category: process_creation? # In this example we choose the category 'process_creation'
? ? product: windows? ? ? ? ? ? # the respective product
detection:
? ? selection:
? ? ? ? FieldName: 'StringValue'
? ? ? ? FieldName: IntegerValue
? ? ? ? FieldName|modifier: 'Value'
? ? condition: selection
fields:
? ? - fields in the log source that are important to investigate further
falsepositives:
? ? - describe possible false positive conditions to help the analysts in their investigation
level: one of five levels (informational, low, medium, high, critical)
二残家、常見(jiàn)缺點(diǎn)
1、標(biāo)題
不要在標(biāo)題中使用像“檢測(cè)”這樣的前綴售躁。
使用少于50個(gè)字符的短標(biāo)題作為警示名稱
為描述保留任何解釋
使用標(biāo)題大小寫(xiě)(例如:'可疑的PowerShell命令行'Suspicious PowerShell CommandLine而不是'可疑的PowerShell命令行'Suspicious powershell commandline)
壞的例子:
在不應(yīng)該包含可執(zhí)行文件的Windows文件夾中檢測(cè)進(jìn)程執(zhí)行 Detects a process execution in a Windows folder that shouldn't contain executables(不必要的前綴坞淮,太長(zhǎng),全部小寫(xiě)陪捷,包含解釋)
檢測(cè)進(jìn)程注入 Detects process injection (不必要的前綴回窘,太通用,首字符小寫(xiě))
好的例子:
Process Injection Using Iexplore.exe
Suspicious PowerShell Cmdline with JAB
Certutil Lolbin Decode Use
2市袖、ID
沒(méi)有任何已知的陷阱啡直。我們?cè)趓epo中使用可選字段id來(lái)提供一個(gè)永不更改的惟一標(biāo)識(shí)符,而該規(guī)則的所有其他字段值可能會(huì)隨著時(shí)間的推移而更改。您可以簡(jiǎn)單地在此網(wǎng)頁(yè)上以UUID的形式創(chuàng)建一個(gè)ID付枫。
3烹玉、狀態(tài)Status
每一個(gè)新規(guī)則都是實(shí)驗(yàn)性的。經(jīng)過(guò)幾個(gè)月的高效使用阐滩,并且沒(méi)有任何來(lái)自社區(qū)的負(fù)面反饋二打,它得到了狀態(tài)測(cè)試。在使用了大約1年之后掂榔,除了過(guò)濾器沒(méi)有進(jìn)行重大修改继效,我們將規(guī)則歸為穩(wěn)定規(guī)則。
4装获、描述Description
最好的描述從檢測(cè)....開(kāi)始瑞信。請(qǐng)不要只使用選定的標(biāo)題。試著盡可能好地描述當(dāng)規(guī)則觸發(fā)時(shí)它意味著什么穴豫》布颍看到這種規(guī)則觸發(fā)的分析師應(yīng)該很好地理解匹配可能表明什么。
壞的例子:
規(guī)則檢測(cè)w3wp.exe生成bitsadmin.exe
新的whoami進(jìn)程開(kāi)始
好的例子:
檢測(cè)IIS web服務(wù)器服務(wù)可疑執(zhí)行后臺(tái)傳輸服務(wù)
檢測(cè)whoami的執(zhí)行精肃,它可能是管理活動(dòng)的一部分秤涩,但也經(jīng)常被利用某些本地特權(quán)升級(jí)或遠(yuǎn)程代碼執(zhí)行漏洞的攻擊者使用。whoami命令顯示當(dāng)前用戶上下文司抱。管理員通常知道他們使用哪個(gè)用戶登錄筐眷。攻擊者在成功利用后通常需要評(píng)估用戶上下文。
5习柠、參考文獻(xiàn)References
值必須是一個(gè)列表匀谣。
只使用網(wǎng)頁(yè)或文檔的鏈接。
不要鏈接到EVTX文件资溃,PCAPs或其他原始內(nèi)容
不包括MITRE ATT&CK技術(shù)的鏈接(我們使用標(biāo)簽)
列表中使用的鏈接可以是:
鏈接到博客文章或tweet
鏈接到某個(gè)hack工具的項(xiàng)目頁(yè)面
鏈接到一個(gè)內(nèi)置Windows工具的手冊(cè)頁(yè)
報(bào)告的鏈接
鏈接到更好地解釋檢測(cè)到的威脅的討論
6武翎、作者Author
作者字段是字符串,而不是列表
用逗號(hào)分隔的多個(gè)作者組合
如果你使用特殊字符@作為twitter的句柄溶锭,你必須使用上引號(hào)后频,例如author: '@cyb3rops'
你可在括號(hào)內(nèi)加上供款類別,例如:作者:“約翰·高爾(想法)暖途,弗洛里安·羅斯(規(guī)則)”
7、日期
我們?cè)诠惨?guī)則中使用可選字段date來(lái)顯示規(guī)則的創(chuàng)建日期膏执,而不需要使用git-log驻售。更改一個(gè)已經(jīng)在主分支中發(fā)布的規(guī)則,需要使用一個(gè)名為modified的新字段來(lái)指示初始規(guī)則的修改更米。
我們使用格式Y(jié)YYY/MM/DD或%Y/%m/%d作為Python的strftime指令欺栗。
更改修改日期的原因:
改變標(biāo)題
變化檢測(cè)部分
改變等級(jí)
改變logsource(罕見(jiàn))
對(duì)于所有其他字段值的更改,不需要更改修改日期。
8迟几、標(biāo)簽
在我們的公共規(guī)則集中消请,我們使用MITRE ATT&CK、CAR和CVE數(shù)字標(biāo)簽类腮。
例子
標(biāo)簽:
——attack.credential_access
——attack.t1003.002
——car.2013 - 07 - 001
——cve.2020.10189
只使用小寫(xiě)標(biāo)記
我們使用臊泰。或-作為標(biāo)簽名稱中的分隔符
將空格替換為下劃線_
9蚜枢、日志源
這部分比較難缸逃。有兩種選擇:
(1)日志源已經(jīng)存在
(2)在我們的repo中沒(méi)有一條針對(duì)該日志源的規(guī)則
在案例1中,請(qǐng)使用這些規(guī)則中的一個(gè)作為模板厂抽。在情況2中需频,檢查不同文件夾中的現(xiàn)有規(guī)則,以了解在本節(jié)中可以使用的三個(gè)標(biāo)識(shí)符的使用情況:
產(chǎn)品(如linux筷凤、windows昭殉、cisco)
服務(wù)(如sysmon, ldapd, dhcp)
類別(如process_creation)
請(qǐng)注意,這些標(biāo)識(shí)符是在sigmac(舊)或[pySigma](https://github.com/SigmaHQ/pySigma/)(新)使用的藐守。/tools/config中的配置文件中使用的挪丢,用于將特定日志源的字段映射到規(guī)則中使用的字段。如果你創(chuàng)建了一個(gè)新的日志源吗伤,如果你能在所有當(dāng)前配置文件中為不同的后端(qradar, helk, splunk等)添加適當(dāng)?shù)挠成涑钥浚蔷吞昧恕7駝t其他用戶或我們的維護(hù)者就得這么做足淆。
10巢块、檢測(cè)
檢測(cè)部分是非常靈活的,但是我們?cè)谶@個(gè)部分中看到了一些常見(jiàn)的錯(cuò)誤或樣式問(wèn)題巧号,這些問(wèn)題需要維護(hù)者重新定義族奢。
如果列表只包含一個(gè)元素,則不要使用列表(參見(jiàn)下面的示例)
只使用小寫(xiě)標(biāo)識(shí)符
如果你喜歡的話丹鸿,可以把注釋放在行中(使用兩個(gè)空格來(lái)分隔表達(dá)式和注釋越走,例如- 'cmd.exe' # command line)
不要使用正則表達(dá)式,除非你真的必須(例如靠欢,代替CommandLine|re: '\\payload廊敌。*\skeyset'使用CommandLine|包含|所有的值\有效負(fù)載和keyset)。
在新的源中使用日志源中出現(xiàn)的字段名稱门怪,刪除空格并保留連字符(例如SAMUserAccount變成SAMUserAccount)
不要在您的條件中使用特定于SIEM的邏輯
創(chuàng)建一個(gè)拉請(qǐng)求(所有的拉請(qǐng)求都會(huì)被自動(dòng)檢查是否有語(yǔ)法錯(cuò)誤骡澈、是否符合我們的標(biāo)準(zhǔn)以及是否有誤報(bào))
11、反斜杠
反斜杠在Sigma中有兩個(gè)功能:
(1)反斜杠作為普通值
(2)反斜杠作為前綴來(lái)轉(zhuǎn)義具有特殊含義的字符:反斜杠\本身掷空,以及通配符*和?肋殴。
以這種方式處理反斜杠有一個(gè)好處囤锉,即包含單個(gè)反斜杠(常見(jiàn)情況)的值可以以普通方式表示。另一方面护锤,一些極端情況需要額外的轉(zhuǎn)義:
只包含單個(gè)反斜杠的值可以用普通方式表示:C:\Windows\System32\cmd.exe
不要用反斜杠轉(zhuǎn)義單個(gè)反斜杠官地,從前面的例子中寫(xiě)入普通值,而不是C:\\Windows\\System32\\cmd.exe烙懦。
如果你想表達(dá)兩個(gè)普通的反斜杠驱入,可以使用其中的四個(gè):\\\\foo\bar的結(jié)果值為\\foo\bar。
如果你想要兩個(gè)反斜杠修陡,可以寫(xiě)\\\\
如果你想要一個(gè)普通的通配符*作為結(jié)果值沧侥,寫(xiě)\*。
如果您想要一個(gè)普通的反斜杠后跟一個(gè)通配符*作為結(jié)果值魄鸦,那么寫(xiě)入\\*宴杀。
如果你想要一個(gè)純反斜杠后跟一個(gè)純*作為結(jié)果值,寫(xiě)\\\*拾因。
請(qǐng)注意旺罢,反斜杠在正則表達(dá)式中有特殊的語(yǔ)義。在某些情況下绢记,像普通值一樣需要更多的反斜杠扁达。例子:
CommandLine|re: ...\\Microsoft...
結(jié)果:轉(zhuǎn)義的M (\M)。在許多目標(biāo)系統(tǒng)使用的perl兼容的正則表達(dá)式中蠢熄,這是無(wú)效的跪解,并會(huì)在新的Sigmatools中導(dǎo)致錯(cuò)誤。解決辦法:
CommandLine|re: ...\\\\Microsoft...
12签孔、值修飾符
盡管在技術(shù)上可以任意鏈接值修飾符叉讥,但并不是所有的組合都有意義。應(yīng)遵循以下排序規(guī)則:
添加通配符的修飾符(以with開(kāi)頭饥追、以with結(jié)尾和包含)后面不能跟著編碼修飾符(base64, base64offset)图仓,因?yàn)樗鼈冏约阂矔?huì)對(duì)通配符進(jìn)行編碼,導(dǎo)致其特殊功能的丟失但绕。
值修飾符鏈不能以字符集編碼修飾符(utf16, utf16le, utf16be和wide)結(jié)束救崔。產(chǎn)生的值在內(nèi)部表示為字節(jié)序列而不是文本字符串,并且包含在查詢中通常難以處理的空字符捏顺。因此六孵,后面應(yīng)該有一個(gè)編碼修飾符(base64, base64offset)。
通常幅骄,將re類型修飾符與其他修飾符組合在一起是沒(méi)有意義的劫窒。
一般來(lái)說(shuō),所有修飾符都可以放在任意位置昌执,因?yàn)樗行揎椃伎梢蕴幚韱沃岛土斜碇蛞啵凑諔T例,這個(gè)修飾符應(yīng)該放在末尾懂拾。
一些常見(jiàn)的組合是:
|contains|all:列表中的所有值都包含在日志值中煤禽。這對(duì)于以順序無(wú)關(guān)的方式表示命令行參數(shù)非常有用。
|utf16|base64offset|包含:value是Base64編碼的utf16岖赋,可以包含在值的任何位置(例如作為更大的Base64值的一部分)檬果。
13、字段
這些字段在評(píng)估某一事件時(shí)非常有用唐断。例如选脊,知道一個(gè)進(jìn)程的父進(jìn)程的命令行參數(shù)中包含可疑字符串是有幫助的。
這些字段可以自動(dòng)提取并呈現(xiàn)給分析人員脸甘,以加快分析速度恳啥。
14、假陽(yáng)性
想想可能會(huì)觸發(fā)規(guī)則的假陽(yáng)性條件丹诀。這個(gè)列表應(yīng)該包含對(duì)分析師有用的提示钝的。例如,注釋“刪除影子副本的合法進(jìn)程”可以提示分析師檢查該系統(tǒng)上的備份進(jìn)程铆遭,或詢問(wèn)任何涉及刪除本地卷影子副本的異常管理活動(dòng)硝桩。
15、等級(jí)
現(xiàn)有的四個(gè)級(jí)別可以進(jìn)一步分為兩類枚荣。
具有信息特征的規(guī)則碗脊,應(yīng)該以列表或條形圖的形式顯示(低、中)
應(yīng)該觸發(fā)專用警報(bào)(高橄妆,嚴(yán)重)的規(guī)則
設(shè)置級(jí)別時(shí)請(qǐng)遵循以下原則:
關(guān)鍵級(jí)別的規(guī)則不應(yīng)該觸發(fā)假陽(yáng)性衙伶,并具有高度相關(guān)性
對(duì)于需要人工審查的高相關(guān)性威脅的高級(jí)別觸發(fā)規(guī)則(需要很少的假陽(yáng)性>基線)
級(jí)別高和關(guān)鍵的規(guī)則表示事件(如果不是假陽(yáng)性)
低級(jí)別和中等級(jí)別的規(guī)則表示可疑活動(dòng)和違反策略
信息級(jí)規(guī)則具有信息性質(zhì),通常用于遵從性或相關(guān)性目的
16呼畸、工具
我們推薦使用visual Studio Codewith sigma Extension痕支。