第壹個挑戰是了解和開發攻擊技術的特征列表。這通常是壹項耗時的任務,因為必須在實驗室環境中復制攻擊,並且必須在日誌背景噪聲中識別特定於攻擊的日誌記錄。來自威脅情報界的某人可能已經***享了簽名,但其格式與該組織的SIEM不兼容。轉換來自不同查詢語言並使用不同字段命名的查詢是壹項容易出錯的任務。
另壹個挑戰是許多組織將日誌存儲在不同的存儲庫中。這可能是由於合並和收購,也可能是壹個組織的戰略。可能還有技術原因或簡單的許可原因,這意味著只有特定的日誌被攝取到SIEM中,而其余的日誌則進入所謂的數據湖。不同的日誌存儲庫意味著需要用不同的查詢語言來編寫日誌簽名。
Sigma是壹個試圖解決這些挑戰的開源項目。它由三個部分組成:
(1)通用Sigma規則格式的語言規範。
(2)壹個包含超過1000條攻擊技術規則的存儲庫。
(3)將Sigma規則轉換為各種查詢格式的工具。
它都是開源的,可以在SigmaHQ GitHub組織中找到。可以使用以下命令行在本地克隆它:
git clone /SigmaHQ/pySigma.git
讓我們以CVE-2020-0688的Sigma規則為例(圖2)。這是最近的壹個Exchange Server漏洞,被威脅行為者積極利用,以在托管有漏洞的Exchange實例的組織中獲得立足之地。在不同的博客文章中描述了對利用企圖的檢測,這是Sigma規則的基礎:
這個Sigma規則有五個組成部分:
1、元數據,包括標題、唯壹標識符和壹些進壹步的信息,這些信息允許分析人員將檢測規則上下文化。
2、日誌源定義,將簽名與某條日誌綁定,此處為webserver日誌。
3、檢測規則本身是在將日誌事件字段與特定於利用嘗試的值關聯起來的定義中定義的。
4、這些檢測項與壹個條件鏈接在壹起。
5、最後,規則包含壹些額外的信息,比如有趣的事件屬性,包括規則匹配的事件、已知的誤報、嚴重性級別,以及MITRE ATT&CK戰術和技術的鏈接。
圖3顯示了針對另壹個Exchange Server漏洞CVE-2021-26857的另壹個Sigma規則。
構成Sigma規則的元素與第壹個例子相同,但是檢測邏輯完全不同。該規則描述了由Sysmon或許多端點檢測和響應(EDR)產品觸發的進程創建事件(1)。Exchange服務器的統壹消息工作進程通常不會產生進程,除非在崩潰的情況下,有時會產生Windows錯誤報告進程,這在檢測規則及其條件(2)中定義。
下壹步,利用Sigma轉換工具sigmac將Sigma規則轉換為目標查詢語言。該工具可以安裝pip:
pip install sigmatools
或者在壹個虛擬的Python環境中,所有的依賴都可以用Pipenv從克隆的Sigma庫中衍生:
pipenv shell
讓我們假設結果查詢應該在基於elasticsearch的SIEM中使用,該SIEM使用ECS字段命名方案。這可以通過從Sigma庫克隆的根目錄運行以下命令簡單完成:
tools/sigmac -t es-qs -c ecs-proxy? rules/web/web_cve_2020_0688_msexchange.yml
參數-t選擇Sigma轉換器的後端,該後端負責將規則轉換為目標查詢語言。後端es-qs轉換為Elasticsearch查詢字符串,可以粘貼到Kibana中。參數-c選擇壹個配置。配置ECS -proxy與Sigma轉換器壹起提供,並為代理日誌實現ECS命名方案。結果查詢將是:
(http.request.method:"GET" AND url.original.keyword:(*\/ecp\/* OR *\/owa\/*) AND url.original.keyword:*__VIEWSTATE\=*)
現在我們來轉換第二條規則。這壹次,我們需要壹些額外的配置來將通用日誌源process_creation映射到特定的日誌源。假設我們所處的環境中使用Elasticsearch作為SIEM,使用Sysmon作為日誌源,為端點上的進程創建生成事件。轉換命令如下:
tools/sigmac -t es-qs -c sysmon -c winlogbeat rules/windows/process_creation/sysmon_cve_2021_26857_msexchange.yml
命令行中提供了 兩個配置 。配置sysmon對應具體的日誌源和事件標識符。winlogbeat將Sigma規則中的字段名映射到winlogbeat使用的ECS方案。結果查詢是:
((winlog.event_id:"1" AND winlog.channel:"Microsoft\-Windows\-Sysmon\/Operational") AND winlog.event_data.ParentImage.keyword:*UMWorkerProcess.exe AND (NOT (winlog.event_data.Image.keyword:(*wermgr.exe OR *WerFault.exe))))
在使用Windows審計日誌記錄的環境中,只有更改壹些命令行參數才能為Splunk SIEM轉換相同的規則:
tools/sigmac -t splunk -c windows-audit -c splunk-windows rules/windows/process_creation/sysmon_cve_2021_26857_msexchange.yml
它會導致這個Splunk查詢:
((EventCode="4688" source="WinEventLog:Security") ParentProcessName="*UMWorkerProcess.exe" NOT ((NewProcessName="*wermgr.exe" OR NewProcessName="*WerFault.exe")))
因為Sigma項目是開源的,它依賴於貢獻。該項目托管在GitHub上,通過導航到目標目錄並添加壹個新文件,可以通過web界面貢獻新的規則:
Sigma Wiki包含壹個規則創建指南和壹個可以用來創建新規則的模板。不要猶豫——在合並pull請求之前,規則會被檢查,問題會被修復或提出建議。
反饋也很有價值,例如,如果檢測規則在某些條件下導致假陽性,那麽反饋可以打開壹個問題;或者,如果它已經被積極用作檢測,並且可以被確認為有用,那麽小的拉取請求可以將規則的狀態從實驗狀態改變為穩定狀態。目前,大部分規則仍處於實驗階段,還有很大的改進空間。
您可以貢獻的另壹個領域是轉換工具。目前,在pySigma庫中開發了壹個完整的重寫。此外,壹個新的CLI正在開發中,但尚未發布。在未來,後臺將作為獨立的項目來維護,許多來自當前Sigma轉換器的後臺需要移植到psigma,或者壹些目前不再維護的後臺需要有人來維護。