深入了解Sigma規(guī)則以及如何編寫自己的威脅檢測規(guī)則
Sigma是一種檢測語言
本文將講述如何借助Sigma,利用社區(qū)的力量來對關(guān)鍵威脅和新的攻擊技術(shù)做出快速反應(yīng)。
與YARA、Snort規(guī)則一樣,Sigma是一種通用且開放的簽名格式,以直接的方式描述相關(guān)的日志事件。規(guī)則格式非常靈活,易于編寫,適用于任何類型的日志文件。Sigma提供了一種結(jié)構(gòu)化的形式,研究人員或分析師可以在其中描述他們曾設(shè)計開發(fā)的檢測方法,并與其他安全人員共享。
隨著SIEM的普及,大多數(shù)企業(yè)會選擇購買或者構(gòu)建一套適用于自己企業(yè)環(huán)境的SIEM系統(tǒng)。對于IT系統(tǒng)和網(wǎng)絡(luò)的攻擊都將會被記錄下來,并存儲在SIEM系統(tǒng)或者其他日志存儲和分析平臺,這使得SIEM成為檢測入侵者的一個重要工具。SIEM檢測規(guī)則集在早期存在于廠商或特定平臺的數(shù)據(jù)庫中。如今,對最新安全事件的檢測和分析的需求日益增長,要求不同的廠商能夠共享檢測情報。Sigma解決了這一問題,使查詢規(guī)則集與廠商平臺無關(guān)。
Sigma允許防御者使用通用語言共享檢測結(jié)果
Sigma滿足各種用例:
- Sigma已成為一種通用語言,在研究人員和情報人員之間分享研究成果,如發(fā)現(xiàn)、識別新的攻擊行為。
- 安全團隊可以避免局限于單一平臺,即通過在Sigma定義規(guī)則,可以更輕松地在不同平臺之間切換。
- Sigma擁有眾多檢測方法,可開箱即用。
- 利用Sigma與其他威脅情報機構(gòu)共享簽名。
Sigma規(guī)則可以轉(zhuǎn)換為不同的SIEM平臺支持的搜索查詢語句格式,支持以下SIEM平臺:
- Splunk
- ElasticSearch Query Strings and DSL
- Kibana
- Microsoft Defender Advanced Threat Protection (MDATP)
- Azure Sentinel
- QRadar
- LogPoint
- Qualys
- RSA NetWitness
- LimaCharlie
- ArcSight
- PowerShell and Grep
- ......
使用Sigma
Sigma是一個開源項目,有三個主要組成部分:
- 通用Sigma規(guī)則格式的語言規(guī)范。
- Sigma簽名的開放存儲庫,包含針對多個攻擊者行為和技術(shù)的1000多條規(guī)則。
- Sigmac是一個轉(zhuǎn)換實用程序,用于把Sigma規(guī)則轉(zhuǎn)為不同的SIEM工具所支持的搜索查詢語句。
獲取存儲庫
首先,從GitHub下載Sigma庫。
git clone https://github.com/SigmaHQ/sigma.git
了解Sigma規(guī)則
Sigma規(guī)則是用YAML編寫的,它定義了在系統(tǒng)日志中查找的內(nèi)容和位置。每個Sigma規(guī)則還可以指定元數(shù)據(jù),例如:規(guī)則的作者、唯一規(guī)則標(biāo)識符 (UUID)、MITRE ATT&CK技術(shù)和參考。
Sigma支持以下日志類型:
- 防火墻日志
- Web應(yīng)用程序日志
- 代理/VPN網(wǎng)絡(luò)日志
- 操作系統(tǒng)日志
事件日志
進程創(chuàng)建和審核日志
系統(tǒng)事件
以存儲庫中的Sigma規(guī)則/sigma/rules/windows/process_creationproc_creation_win_cmd_delete.yml為例,此規(guī)則檢測使用Windows Cmd命令刪除文件。
title: Windows Cmd Delete File
id: 379fa130-190e-4c3f-b7bc-6c8e834485f3
status: experimental
description: `
Adversaries may delete files left behind by the actions of their intrusion activity.
Malware, tools, or other non-native files dropped or created on a system by an adversary may leave traces to indicate to what was done within a network and how.
Removal of these files can occur during an intrusion, or as part of a post-intrusion process to minimize the adversary's footprint.`
author: frack113
date: 2022/01/15
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1070.004/T1070.004.md
logsource:
category: process_creation
product: windows
detection:
selection:
- CommandLine|contains|all:
- 'del'
- /f
- CommandLine|contains|all:
- rmdir
- /s
- /q
condition: selection
falsepositives:
- Legitimate script
level: low
tags:
- attack.defense_evasion
- attack.t1070.004
每個規(guī)則 (yml) 都有以下部分:
- title(標(biāo)題):規(guī)則的名稱。Windows Cmd Delete File。
- id:唯一標(biāo)識規(guī)則的UUID。379fa130-190e-4c3f-b7bc-6c8e834485f3。
- status(狀態(tài)):experimental或者normal,在這種情況下,它是一個experimental規(guī)則。experimental
- description(描述):解釋規(guī)則的上下文。Adversaries may delete files left behind by the actions of their intrusion activity.Malware, tools, or other non-native files dropped or created on a system by an adversary may leave traces to indicate to what was done within a network and how.Removal of these files can occur during an intrusion, or as part of a post-intrusion process to minimize the adversary's footprint
- author(作者):關(guān)于規(guī)則創(chuàng)建者的元數(shù)據(jù)。frack113
- date(時間):規(guī)則的創(chuàng)建日期。2022/01/15
- references(參考):參考鏈接到解釋問題的博客文章或推文。https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1070.004/T1070.004.md
- logsource(日志來源):用于范圍搜索,支持各種組合。windows
category(類別):描述規(guī)則類別。process_creation
- detection(檢測):在日志數(shù)據(jù)、關(guān)鍵字、時間范圍和條件、類型的特定字段中的搜索值。這里尋找命令行中包含del、/f,或者命令行中包含rmdir、/s、/q。
- selection(選擇):在條件中鏈接的選擇項。
- condition(條件):判斷滿足哪些選擇。selection
- falsepositives(誤報):描述字段,用于解釋哪些事件或情況可能觸發(fā)導(dǎo)致誤報的規(guī)則。Legitimate script
- level(級別):嚴重級別低、中、高或嚴重。low
- tags(標(biāo)簽):ATT&CK標(biāo)簽。attack.defense_evasion,attack.t1070.004。
深入了解Sigma
Logsource字段:Sigma YAML中的logsource字段描述了要應(yīng)用檢測的日志數(shù)據(jù)。Logsource schema如下,它可以使用以下三個屬性中的一個或多個:
logsource:
category [optional]
product [optional]
service [optional]
definition [optional]
category(類別):
用于選擇某個系列產(chǎn)品生成的所有日志,例如:防火墻和Web服務(wù)器日志。
類別示例包括:防火墻、防病毒、EDR、Web。
product(產(chǎn)品):
用于選擇特定產(chǎn)品生成的所有日志,例如:Windows、Apache。
產(chǎn)品類型可以更進一步劃分,例如:Windows日志類型可分為安全日志、系統(tǒng)日志、應(yīng)用日志、和Windows Defender日志等。
service(服務(wù)):
僅用于選擇產(chǎn)品日志的子集,例如:Windows系統(tǒng)上的安全事件日志。
常見的logsource格式示例。
logsource:
product: linux
service: audit
...
logsource:
product: security
service: windows
...
logsource:
product: zeek
service: kerberos
detection(檢測)字段:
本節(jié)包含一組搜索標(biāo)識符,表示對日志數(shù)據(jù)的搜索及其各自的評估機制,由兩個屬性控制:selection(選擇)和condition(條件)。
- selection(選擇):搜索日志數(shù)據(jù)的標(biāo)識符。
- condition(條件):定義如何評估選擇或過濾。
檢測可以由兩種不同的數(shù)據(jù)結(jié)構(gòu)組成:Lists和Maps。
List YAML類型中包含多個基于字符串的搜索參數(shù),應(yīng)用于日志數(shù)據(jù),并用邏輯"OR"鏈接。
例如,此檢測將匹配日志中是否包含以下列表中的任何一個值。
detection:
keywords:
- 'nmap'
- 'sqlmap'
- 'nessus'
- 'awvs'
- 'python2.7'
condition: keywords
Maps YAML類型由鍵/值對組成,如:字典,其中鍵是日志數(shù)據(jù)中的字段,值是字符串或整數(shù)值。
映射列表用邏輯“OR”連接。映射的所有元素都用邏輯"AND"連接
例如,在下面的示例中,如果ImageLoaded鍵包含以下任何值列表,則匹配成功。
logsource:
product: windows
category: driver_load
detection:
selection:
ImageLoaded|contains:
- 'fgexec'
- 'dumpsvc'
- 'cachedump'
- 'mimidrv'
- 'gsecdump'
- 'servpw'
- 'pwdump'
condition: selection
這里,選擇(搜索標(biāo)識符)匹配日志數(shù)據(jù)中的ImageLoaded字段,并使用轉(zhuǎn)換修飾符(|contains)檢查列出的關(guān)鍵字是否存在。
下面列出了一些修飾符:
- contains
- all
- base64
- endswith
- startswith
還可以使用通配符來匹配日志數(shù)據(jù)中的大量關(guān)鍵字。例如,找到rundll32.exe的執(zhí)行日志,使用\*rundll32.exe即可,而不是通過指定的路徑或命令行參數(shù)來進行查找。
對于condition(條件),可以使用以下語句來搜索標(biāo)識符:
- 合乎邏輯的and/or操作
- 選擇其中的1個或全部選擇,eg:1 of selectionorall of selection
- 使用not,eg:not selection
- 使用括號對表達式進行分組。eg:(selection1 and selection2 and selection3) or selection4
在下面的示例中,如果觸發(fā)了條件中的selection1、selection2、selection3,并且沒有匹配filter中的任何一項,則會輸出匹配結(jié)果。
detection:
selection1:
ParentImage|endswith:
- '\winlogon.exe'
- '\services.exe'
- '\lsass.exe'
- '\csrss.exe'
- '\smss.exe'
- '\wininit.exe'
- '\spoolsv.exe'
- '\searchindexer.exe'
selection2:
Image|endswith:
- '\powershell.exe'
- '\cmd.exe'
selection3:
User|contains: # covers many language settings
- 'AUTHORI'
- 'AUTORI'
filter:
CommandLine|contains|all:
- ' route '
- ' ADD '
condition: selection1 and selection2 and selection3 and not filter
fields:
- ParentImage
- Image
- User
- CommandLine
編譯Sigma規(guī)則
為了將Sigma規(guī)則轉(zhuǎn)換為任何SIEM平臺所支持的搜索查詢語句,必須使用Sigma編譯器sigmac,這是Sigma本身附帶的基于python的工具。
yyds@12306Br0:~/sigma/tools$ python3 sigmac
Nothing to do!
usage: sigmac [-h] [--recurse] [--filter FILTER]
[--target {humio,elastalert,ala-rule,kibana,sentinel-rule,xpack-watcher,ee-outliers,graylog,crowdstrike,sql,logiq,carbonblack,mdatp,netwitness-epl,netwitness,datadog-logs,streamalert,es-rule-eql,es-rule,splunkdm,uberagent,opensearch-monitor,fireeye-helix,devo,powershell,es-qs-lr,elastalert-dsl,es-eql,qradar,es-dsl,csharp,ala,hawk,grep,qualys,limacharlie,splunk,logpoint,splunkxml,sumologic,fortisiem,sqlite,fieldlist,stix,chronicle,sumologic-cse,sumologic-cse-rule,kibana-ndjson,hedera,sysmon,lacework,arcsight,arcsight-esm,es-qs,athena}]
[--lists] [--lists-files-after-date LISTS_FILES_AFTER_DATE]
[--config CONFIG] [--output OUTPUT]
[--output-fields OUTPUT_FIELDS] [--output-format {json,yaml}]
[--output-extention OUTPUT_EXTENTION] [--print0]
[--backend-option BACKEND_OPTION]
[--backend-config BACKEND_CONFIG] [--backend-help BACKEND_HELP]
[--defer-abort] [--ignore-backend-errors] [--verbose] [--debug]
[inputs ...]
sigmac可以將規(guī)則轉(zhuǎn)換為想要執(zhí)行查詢的SIEM平臺支持的搜索查詢語句,如Splunk、Qualys和Qradar等。sigmac還使用字段映射將規(guī)則中使用的字段轉(zhuǎn)換為將要執(zhí)行查詢的平臺內(nèi)的實際字段。
要查看所有可用的目標(biāo)、配置,運行以下命令即可:
python3 sigmac --lists
編譯一個規(guī)則
為了轉(zhuǎn)換為可支持的任何SIEM平臺的搜索查詢語句格式,可通過-t配置為可支持的任何SIEM平臺,-c設(shè)置正確的字段映射:
$python3 sigmac -t splunk -c splunk-windows ~/sigma/rules/windows/process_creation/proc_creation_win_cmdkey_recon.yml
((Image="*\\cmdkey.exe" OR OriginalFileName="cmdkey.exe") (CommandLine="* /l*" OR CommandLine="* -l*")) | table CommandLine,ParentCommandLine,User
這樣就可以得到一個編譯后的規(guī)則,在Splunk上查找cmdkey查看緩存憑證的執(zhí)行情況。
可以選擇監(jiān)控這些類型的日志,并利用這些日志來檢測攻擊者:
- 操作系統(tǒng)日志
賬戶身份認證
大量的登錄失敗
特殊賬戶的變更和使用,以及SID歷史
進程創(chuàng)建和執(zhí)行
在非正常的位置執(zhí)行
可疑的進程關(guān)系
具有未知哈希的已知可執(zhí)行文件
已知惡意哈希
資源訪問
windows事件
不常見的服務(wù)設(shè)施
新的域信任關(guān)系
網(wǎng)絡(luò):端口掃描,主機發(fā)現(xiàn)
- 代理日志
- Web服務(wù)器訪問日志
4xx 錯誤:可能是掃描探測行為
5xx 錯誤:可能是利用行為
- 應(yīng)用程序錯誤日志
異常或其他特定的消息。eg:可疑的SQL錯誤消息
挑戰(zhàn):編寫自己的Sigma規(guī)則
接下來將學(xué)習(xí)如何編寫Sigma規(guī)則,并在實際的SIEM平臺上運用。建議在本地構(gòu)建一套小型仿真威脅狩獵平臺,在此基礎(chǔ)上可以嘗試模擬一些攻擊行為,并構(gòu)建自己的檢測規(guī)則。
用于檢測創(chuàng)建本地用戶賬戶的Sigma規(guī)則
MITRE ATT&CK中提到的創(chuàng)建用戶,攻擊者可能會創(chuàng)建一個本地帳戶來維持對被攻擊系統(tǒng)的訪問。本地帳戶是由組織配置供用戶、遠程支持、服務(wù)使用或用于管理單個系統(tǒng)或服務(wù)的帳戶。有了足夠的權(quán)限,可使用net user /add命令創(chuàng)建本地用戶帳戶。
Microsoft Windows [版本 6.1.7601]
版權(quán)所有 (c) 2009 Microsoft Corporation。保留所有權(quán)利。
C:\Windows\system32>net user admin.123 admin1 /add
命令成功完成。
此時可以為我們的Sigma規(guī)則構(gòu)建一個基礎(chǔ)框架。
title: 創(chuàng)建本地用戶賬戶行為
status: test
description: 使用net user /add命令創(chuàng)建本地用戶帳戶
references:
- https://attack.mitre.org/techniques/T1136/001/
date: 2022/06/27
author: 狂徒張三
level: low
分析windows安全日志,是否記錄了用戶賬戶創(chuàng)建。windows安全日志4720記錄了已創(chuàng)建用戶賬戶admin.123。
可將windows安全事件ID4720作為條件,來檢測是否存在創(chuàng)建本地用戶賬戶行為。完整的規(guī)則如下:
title: 創(chuàng)建本地用戶賬戶行為
status: test
description: 使用net user /add命令創(chuàng)建本地用戶帳戶
references:
- https://attack.mitre.org/techniques/T1136/001/
date: 2022/06/27
author: 狂徒張三
logsource:
product: windows
service: security
detection:
selection:
EventID: 4720 #已創(chuàng)建用戶帳戶。
condition: selection
fields:
- EventCode
- AccountName
- AccountDomain
falsepositives:
- 域控制器日志
- 由特權(quán)帳戶管理工具管理的本地用戶賬戶
level: low
關(guān)于檢測使用net user /add命令創(chuàng)建用戶賬戶行為,還可以通過windows安全事件日志4688中的進程名稱及命令行參數(shù)進行檢測。
最后,編寫Sigma規(guī)則后,使用sigmac將sigma規(guī)則轉(zhuǎn)換為其他SIEM平臺所支持的格式。
(source="WinEventLog:Security" EventCode="4720") | table EventCode,AccountName,AccountDomain
((Image="*\\net.exe" OR Image="*\\net1.exe") CommandLine="*user*" CommandLine="*add*") | table ComputerName,User,CommandLine