7、sigma應用場景

HELK ?通過Elastalert進行SIGMA集成

來源:https://posts.specterops.io/what-the-helk-sigma-integration-via-elastalert-6edf1715b02

https://sigmahq-pysigma.readthedocs.io/en/latest/

https://www.securonix.com/blog/threat-hunting-and-response-using-yara-sigma/


通常,在執(zhí)行檢測新的攻擊者技術(shù)的研究時,我想知道我是否能夠找到特定的事件,使我能夠立即輕松地檢測生產(chǎn)中的惡意活動,或者我是否必須執(zhí)行更深入的分析,并提出其他數(shù)據(jù)分析來補償和增強我的檢測方法。有時是前者,如果我能夠以一種規(guī)則的形式定義特定事件或事件的組合,從而觸發(fā)高保真警報或讓我知道某些活動何時發(fā)生,那么我就不需要經(jīng)常手動運行它。威脅捕獲程序的目標之一是增強組織當前的檢測能力,通常通過提供高保真警報開發(fā)上下文或增強當前規(guī)則來監(jiān)視潛在的對抗活動來實現(xiàn)這一目標。

制定規(guī)則的概念并不新鮮;但是,能夠通過公共簽名格式與社區(qū)共享規(guī)則是非常重要的。我并不是說只對一種工具共享一種格式(例如snort)的規(guī)則,而是對其他幾種基于規(guī)則的系統(tǒng)共享一種格式。在這篇文章中,我將向你展示我是如何從Sigma項目中獲取描述Windows事件日志的規(guī)則,并通過Elastalert將它們與我的項目HELK集成。如果您使用的是Elastalert并考慮σWindows規(guī)則添加到堆棧上,我希望這篇文章能給你一些想法加速過程,至少讓它你的實驗室環(huán)境中做進一步的研究和測試之前,將它們添加到您的生產(chǎn)環(huán)境。

一、Sigma是什么?

Sigma是一種通用的、開放的簽名格式,允許您以一種直接的方式描述相關(guān)的日志事件。規(guī)則格式非常靈活,易于編寫,適用于任何類型的日志文件。這個項目的主要目的是提供一個結(jié)構(gòu)化的形式,研究人員或分析人員可以描述他們曾經(jīng)開發(fā)的檢測方法,并使其與他人共享。Sigma用于日志文件,而Snort用于網(wǎng)絡(luò)流量,YARA用于文件。

該項目是基于yaml的,主要由Thomas Patzke和Florian Roth開發(fā),專注于我們行業(yè)在制定檢測規(guī)則時所面臨的幾個問題:

1、缺乏從規(guī)則創(chuàng)建的角度描述日志事件的標準化。

2、跨組織中基于規(guī)則的不同系統(tǒng)分發(fā)和管理日志簽名的效率低下。

3、缺乏將當前供應商提供的簽名轉(zhuǎn)換為組織中其他基于規(guī)則的系統(tǒng)的靈活性。

二、Sigma規(guī)則

Sigma按應用程序、APT簽名、網(wǎng)絡(luò)和操作系統(tǒng)分發(fā)規(guī)則文件夾。有一個Windows文件夾,其中包含幾個規(guī)則,主要按日志源分類(安全、應用程序、系統(tǒng)、Powershell、Sysmon等)。Windows文件夾將是HELK初始集成的一部分,因為堆棧中大多數(shù)可用的日志解析器都用于Windows事件日志。到今天為止,該項目中有168條Windows規(guī)則可用,而且由于社區(qū)的支持,這些規(guī)則的數(shù)量還在不斷增加。

三、Sigma轉(zhuǎn)換器(Sigmac)

我喜歡Sigma項目的一點是,它還提供了資源,以幫助您將其當前的規(guī)則轉(zhuǎn)換為其他系統(tǒng)規(guī)則格式(例如Elastalert)。這是由一個名為Sigmac的工具完成的,它已經(jīng)提供了以下輸出目標格式:

在克隆Sigma項目后,你可以用Sigmac運行下面的命令來獲得上面的輸出:

sigma/tools/Sigmac -l

四、Sigma Elastalert-Backend

最近,Thomas Patzke @blubbfiction在他最近的一條推文中宣布了Elastalert-Backend。感謝Soumille Lucas @SouLuC13的貢獻,將Sigma規(guī)則轉(zhuǎn)換為Elastalert規(guī)則格式現(xiàn)在是可能的。

我一直在考慮將Elastalert添加到HELK中,但我一直推遲,因為我想花一些時間創(chuàng)建規(guī)則,我可以提供給項目的開箱即用?,F(xiàn)在Sigma可以轉(zhuǎn)換為Elastalert規(guī)則格式,這使得提供一套初始規(guī)則供分析師使用和學習變得更加容易。我使用以下命令將每個Sigma規(guī)則轉(zhuǎn)換為Elastalert規(guī)則格式:

tools/Sigmac -t elastalert -c field_index_mapping.yml -o /rules/elastalert_rule.yml Sigma_rule.yml

-t:輸出目標格式

-c:配置字段名和索引映射

-o:如果生成多個文件,則輸出文件或文件名前綴

你可以應用相同的命令,但在“For”循環(huán)和命中每一個單一的規(guī)則在項目中可用,但在我們這樣做之前,什么是Elastalert?

五、Elastalert是什么?

ElastAlert是一個簡單的框架,用于從Elasticsearch中的數(shù)據(jù)對異常、峰值或其他感興趣的模式進行警報。它通過將Elasticsearch與兩種類型的組件(規(guī)則類型和警報)結(jié)合起來工作。定期查詢Elasticsearch,并將數(shù)據(jù)傳遞給規(guī)則類型,由規(guī)則類型確定何時找到匹配。當匹配發(fā)生時,將給出一個或多個警報,這些警報將根據(jù)匹配采取行動。

六、Elastalert全局配置

在進入Elastalert規(guī)則格式之前,重要的是要了解它的主要全局配置,設(shè)置正確的Elasticsearch服務(wù)器,指向正確的規(guī)則文件夾,甚至定義規(guī)則需要執(zhí)行的頻率。一個全局配置的例子可以在官方的Elastalert回購中找到,它的名字是config.yaml.example。我把注釋和屬性從配置示例中取出來,并做了一個表,使其易于遵循:

rules_folder: example_rules

run_every:

minutes: 1

buffer_time:

minutes: 15

es_host: elasticsearch.example.com

es_port: 9200

aws_region: us-east-1

profile: test

es_url_prefix: elasticsearch

use_ssl: True

verify_certs: True

es_send_get_body_as: GET

es_username: someusername

es_password: somepassword

verify_certs: True

ca_certs: /path/to/cacert.pem

client_cert: /path/to/client_cert.pem

client_key: /path/to/client_key.key

writeback_index: elastalert_status

alert_time_limit:

days: 2


七、Elastalert警報類型

在構(gòu)建elastalert規(guī)則時,有不同類型的警報,稱為elastalert警報概念的子類,當它匹配某個規(guī)則邏輯時,您可以使用它們。每個規(guī)則可以有多個警報類型。以下是Elastalert支持的幾種警報類型的表格:


七、Elastalert規(guī)則格式

讓我們來看看Elastalert警報規(guī)則,看看它的所有屬性。下面例子中的Elastalert是Sigma Windows規(guī)則win_admin_share_access.yml轉(zhuǎn)換的結(jié)果。

alert:

- debug

description: Detects access to $ADMIN share

filter:

- query:

? query_string:

? ? query: ((event_id:”5140" AND share_name:”Admin$”) AND NOT (user_name:”*$”))

index: logs-endpoint-winevent-security-*

name: Access-to-ADMIN$-Share_0

priority: 4

realert:

? minutes: 0

type: any


你可以在Elastalert文檔中了解更多。我希望這能幫助您熟悉我們將與HELK集成的兩個開源項目

八、HELK & Sigma Elastalert-Backend

Elastalert與HELK的最初整合之一開始與Jordan Potty @ok_by_now,但不幸的是,在那個時候,有一些兼容性問題與最新版本的Elastalert和ELK堆棧。這種新的集成方法自動將Sigma規(guī)則導入到Elastalert部署中,并將它們與HELK一起使用,以實現(xiàn)開箱即用的警報功能,并自動執(zhí)行預定義的查詢。HELK是通過docker構(gòu)建的,作為一個概念的證明,所以我添加了一個新的docker容器,它幫助我準備好一切,并能夠與社區(qū)共享。

九、新的helk-elastalert目錄

HELK github repo中新增的HELK -elastalert文件夾用于構(gòu)建新的docker容器,其目錄結(jié)構(gòu)如下:


十、Elastalert Field-Index映射配置

當將Sigma規(guī)則轉(zhuǎn)換為Elastalert規(guī)則格式時,這種配置是最重要的配置之一。這是因為,它允許你將Sigma規(guī)則中定義的每個字段名映射到你自己的標準字段命名約定,并將規(guī)則中定義的Sigma日志源映射到你自己的ELK堆棧中使用的索引名稱。HELK是第一個遵循自己的公共信息模型(CIM)的開源管道之一,并為每個數(shù)據(jù)日志源提供了文檔化索引。因此,從HELK的角度來看,確保Elastalert規(guī)則遵循項目使用的相同CIM是很重要的。Sigma很好地為HELK構(gòu)建了一個初始配置,我對它進行了更新,以確保它遵循了項目中可用的最新兼容字段和索引映射。你可以在這里找到HELK的配置。

下面的兩張圖片展示了字段索引映射配置如何與Sigma規(guī)則和Elastalert規(guī)則格式(結(jié)果)相關(guān)聯(lián)。




如果你想拉出每個Windows Sigma規(guī)則的所有字段名來創(chuàng)建你自己的字段索引映射文件,你可以在循環(huán)中運行Sigmac,將目標輸出格式設(shè)置為“fieldlist”,并將它們?nèi)糠旁谝粋€列表中。我這樣做是為了驗證我自己的映射。

for rule_category in rules/windows/* ; do

? for rule in $rule_category/* ; do

? ? tools/Sigmac -t fieldlist $rule

? done

done

在HELK中將Sigma規(guī)則轉(zhuǎn)換為Elastalert格式

一旦我們在字段和索引級別定義Sigma規(guī)則到Elastalert規(guī)則格式的轉(zhuǎn)換,我們就可以開始使用Sigmac來執(zhí)行轉(zhuǎn)換。所有代碼都可以在這里查看,但是執(zhí)行翻譯的腳本的主要部分是以下bash行:

for rule_category in rules/windows/* ; do

? for rule in $rule_category/* ; do

? ? tools/Sigmac -t elastalert -c Sigmac-config.yml -o /etc/elastalert//rules/Sigma_$(basename $rule) $rule

? done

done

正如你上面看到的,它遍歷了每個Windows Sigma文件夾和每個文件夾里的每條規(guī)則。它還以前綴“Sigma_”和原始Sigma規(guī)則名稱命名Elastalert規(guī)則。最后,你應該能夠?qū)⑺蠾indows Sigma規(guī)則轉(zhuǎn)換為Elastalert規(guī)則。


下面的例子顯示了一個Sigma規(guī)則轉(zhuǎn)換成一個Elastalert規(guī)則,如下所示:

十一、sigma規(guī)則



十二、Elastalert警報文件


當你的HELK啟動并運行時,你可以通過運行以下命令列出所有在HELK中創(chuàng)建的Elastalert規(guī)則:

sudo docker exec -ti helk-elastalert ls /etc/elastalert/rules

你也可以通過下面的命令來檢查任何規(guī)則:

sudo docker exec -ti helk-elastalert cat /etc/elastalert/rules/helk_all_susp_powershell_commands.ymlalert:

- debug

description: Detects potential suspicious powershell parameters

filter:

- query:

? query_string:

? ? query: (process_path:("*\\Powershell.exe") AND event_id:"1" AND process_command_line.keyword:( /.*\-w.*h.*/ /.*\-NoP.*/ /.*\-noni.*/ /.*\-ec.*/ /.*\-en.*/))

index: logs-endpoint-winevent-*

name: Windows-Suspicious-Powershell-commands_0

priority: 2

realert:

? minutes: 0

十三、HELK Elastalert工作流

現(xiàn)在我們已經(jīng)在正確的文件夾中準備好了Elastalert規(guī)則,并且Elastalert正在運行,下面的事情正在后臺發(fā)生:



1、數(shù)據(jù)在管道中流動

2、數(shù)據(jù)存儲在Elasticsearch中

3、Elastalert不斷地對Elasticsearch運行在Elastalert規(guī)則文件中定義的查詢

4、正在運行的查詢、找到的匹配和在Elastalert中發(fā)生的錯誤都保存在特定的Elasticsearch索引上

5、Kibana索引模式已經(jīng)映射到Elasticsearch索引。因此,安全分析師可以看到正在運行的查詢,任何匹配發(fā)現(xiàn),以及發(fā)生在通過KIbana的Elastalert錯誤

記住Elastalert不是在管道層面運行的。因此,警報不會實時發(fā)生。它查詢已經(jīng)存儲在Elasticsearch中的數(shù)據(jù),并根據(jù)主全局配置中設(shè)置的時間頻率不時地進行查詢。

十四、Elastalert Kibana索引

HELK創(chuàng)建了一些Kibana索引模式,它們提供了關(guān)于針對Elasticsearch執(zhí)行的規(guī)則、觸發(fā)警報的規(guī)則以及在Elastalert中發(fā)生的任何錯誤消息的信息。Elastalert寫信給這些指數(shù),允許分析師使用Kibana,并查看所有元數(shù)據(jù)。關(guān)于Elastalert元數(shù)據(jù)索引的更多信息可以在這里找到。

elastalert_status索引:它是一個關(guān)于每個警報觸發(fā)的信息日志:


elastalert_status_status索引:它是對給定規(guī)則執(zhí)行的查詢的日志


elastalert_status_error index:用于記錄elastalert_status_error中發(fā)生的錯誤。錯誤被寫入Elasticsearch和stderr

十五、HELK + Elastalert + Sigma + SLACK =????

我非常喜歡這種集成的一個方面是,您還可以選擇在找到匹配時想要觸發(fā)的警報類型。我強烈建議首先讓他們直接進入你的ES索引,這樣你就可以捕捉到有噪聲的,并隨時更新它們。此外,記住一些Sigma規(guī)則是非常廣泛的,所以它們可能更適合態(tài)勢感知用例,而不是高保真警報。無論如何,如果你想讓提醒也被發(fā)送到一個slack頻道,我也添加了一個slack集成。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容