天天看點

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

  近年來态勢感覺、威脅情報等等新詞不斷出現,其實萬變不離其宗,它們都是利用已知的資料來判斷風險,甚至預知未發生的威脅。這如同一個老練的探險者孤身穿行在原始叢林,他能輕巧自然地避開蛇蟲鼠蟻,用腳印來預知猛獸的威脅。這一切都依賴于他那顆善于思考,經驗豐富的大腦。

在網絡安全的原始森林裡,siem就扮演這樣一個威脅感覺大腦的角色。如何在合理成本下打造一個最為強大、合适的 siem 系統,是許多安全人員頭疼的問題。雷鋒網有幸邀請到了擁有十年安全産品經驗的百度安全專家兜哥,為大家講解如何使用開源軟體搭建企業的siem系統。

兜哥,百度安全專家,具有十年雲安全産品經驗,主要研究方向為機器學習、僵屍網絡、威脅情報、沙箱技術、具有多年企業安全建設經驗,擁有安全方向相關專利多項;發表多篇安全學術論文。

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

【百度安全專家-兜哥】

雷鋒網(公衆号:雷鋒網)按:由于本次公開課偏向實操,涉及到許多的實際操作和代碼示例,限于篇幅就不一一展示,文章下方附本次公開課視訊,有興趣的讀者可以自行觀看,本文主要以展示思路為主。了解技術細節可以關注兜哥的個人公衆号:“兜哥帶你學安全”,和兜哥本人進行技術交流。

在rsa2017會議上,應用大資料技術在安全領域,挖掘深入的攻擊行為依然是一個熱點。

市場調研機構idc預計,未來全球資料總量年增長率将維持在50%左右,到2020年,全球資料總量将達到40zb。一個中型網際網路公司一天産生的資料量通常可以超過幾t甚至幾十t。傳統的盒子形式的安全産品已經沒有能力處理如此大量的資料。

siem(security information and event management),顧名思義就是針對安全資訊和事件的管理系統。siem通過統一搜集、格式化、存儲、分析企業内部的各類日志、流量資料,挖掘攻擊行為。

完整的siem至少會包括以下功能:

漏洞管理 資産發現 入侵檢測 行為分析 日志存儲、檢索 報警管理 酷炫報表

其中最核心的我認為是入侵檢測、行為分析和日志存儲檢索。

對比 gartner2009 年和 2016年的全球siem廠商排名,可以清楚看出,基于大資料架構的廠商splunk迅速崛起,傳統四強依托完整的安全産品線和成熟市場管道,依然占據上司者象限,其他較小的廠商逐漸離開上司者象限。最重要的存儲架構也由盤櫃(可選)+商業資料庫逐漸轉變為可橫向擴充的大資料架構,支援雲環境也成為趨勢。

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

開源siem

常見的開源siem主要有 ossim 和 opensoc,其中 opensoc 完全基于大資料架構,更适合目前的中大型企業。opensoc 是思科2014年在 brocon 大會上公布的開源項目,但是沒有真正開源其源代碼,隻是釋出了其技術架構。我們參考了 opensoc 釋出的架構,結合公司實際落地了一套方案。

opensoc 完全基于開源的大資料框 架kafka、storm、spark 和 es 等,天生具有強大的橫向擴充能力。本文重點講解的也是基于 opensoc 的 siem 搭建,以及簡單介紹如何使用規則和算法來發現入侵行為。

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

上圖是opensoc給出的架構,初次看非常費解,我們以資料存儲與資料處理兩個緯度來細化,以常見的 linux 伺服器 ssh 登入日志搜集為例。

資料搜集緯度需求是搜集原始資料,存儲,提供使用者互動式檢索的ui接口,典型場景就是出現安全事件後,通過檢索日志回溯攻擊行為,定損。

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

logtash其實可以直接把資料寫es,但是考慮到 storm 也要資料處理,是以把資料切分放到 logstash,切分後的資料發送 kafka,提供給 storm 處理和 logstash 寫入 es。資料檢索可以直接使用 kibana,非常友善。資料切分也可以在 storm 裡面完成。

這個就是大名鼎鼎的elk架構。es比較适合存儲較短時間的熱資料的實時檢索查詢,對于需要長期存儲,并且希望使用hadoop或者spark進行大時間跨度的離線分析時,還需要存儲到hdfs上,是以比較常見的資料流程圖為:

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

這裡以資料實時流式處理為例,storm 從 kafka 中訂閱切分過的ssh登入日志,比對檢測規則,檢測結果的寫入 mysql 或者 es。

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

在這個例子中,孤立看一條登入日志難以識别安全問題,最多識别非跳闆機登入,真正運作還需要參考知識庫中的常見登入ip、時間、ip情報等以及臨時存儲處理狀态的狀态庫中最近該ip的登入成功與失敗情況。比較接近實際運作情況的流程如下:

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

具體判斷邏輯舉例如下,實際中使用大量代理ip同時暴力破解,打一槍換一個地方那種無法覆寫,這裡隻是個舉例:

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

生産環境中,處理安全事件,分析入侵行為,隻有ssh登入日志肯定是不夠,我們需要盡可能多的搜集資料源,以下作為參考:

linux/window系統安全日志/記錄檔 web伺服器通路日志 資料庫sql日志 網絡流量日志

簡化後的系統架構如下,報警也存es主要是檢視報警也可以通過kibana,人力不足界面都不用開發了:

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

kafka是一種高吞吐量的分布式釋出訂閱消息系統,有如下特性:

通過o(1)的磁盤資料結構提供消息的持久化,這種結構對于即使數以tb的消息存儲也能夠保持長時間的穩定性能。 高吞吐量 :即使是非常普通的硬體kafka也可以支援每秒數百萬的消息。 支援通過kafka伺服器和消費機叢集來分區消息。 支援hadoop并行資料加載。
如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

apache storm 是一個免費開源的分布式實時計算系統。簡化了流資料的可靠處理,像 hadoop 一樣實作實時批處理。storm 很簡單,可用于任意程式設計語言。

storm 有很多應用場景,包括實時資料分析、聯機學習、持續計算、分布式 rpc、etl 等。storm 速度非常快,一個測試在單節點上實作每秒一百萬的組處理。

storm拓撲支援python開發,以處理sql日志為例子:

假設sql日志的格式是

"feb 16 06:32:50 " "127.0.0.1" "root@localhost" "select * from user where id=1"

一般storm的拓撲結構:

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

簡化後 spout 是通用的從 kafka 讀取資料的,就一個 bolt 處理 sql 日志,比對規則,命中政策即輸出”alert”:”原始sql日志”。

logstash是一款輕量級的日志搜集處理架構,可以友善的把分散的、多樣化的日志搜集起來,并進行自定義的處理,然後傳輸到指定的位置,比如某個伺服器或者檔案。 當然它可以單獨出現,作為日志收集軟體,你可以收集日志到多種存儲系統或臨時中轉系統,如mysql,redis,kakfa,hdfs, lucene,solr等并不一定是elasticsearch。

logstash的配置量甚至超過了storm的拓撲腳本開發量,這裡就不展開了。

elasticsearch是一個基于lucene的搜尋伺服器。它提供了一個分布式多使用者能力的全文搜尋引擎,基于restful web接口。elasticsearch是用java開發的,并作為apache許可條款下的開放源碼釋出,是目前流行的企業級搜尋引擎。設計用于雲計算中,能夠達到實時搜尋,穩定,可靠,快速,安裝使用友善。

生産環境中,處理安全事件,分析入侵行為,我們需要盡可能多的搜集資料源,以下作為參考:

常見的資料日志搜集方式有三種:

大多數資料庫審計産品都支援這種模式,通過分析資料庫流量,解碼資料庫協定,識别sql預計,抽取出sql日志

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

比較典型的就是db-proxy方式,目前百度、搜狐、美團、京東等都有相關開源産品,前端通過db-proxy通路後端的真實資料庫伺服器。sql日志可以直接在db-proxy上搜集。

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

通過在資料庫伺服器安裝用戶端搜集sql日志,比較典型的方式就是通過logstash來搜集,本文以用戶端方式進行講解,其餘方式本質上也是類似的。

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理
如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理
如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

指令:bin/logstash -f mysql.conf

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

分析攻擊特征,下列列舉兩個,更多攻擊特征請大家自行總結:

使用聯合查詢枚舉資料時會産生大量的null字段。

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

枚舉資料庫結構時會使用information_schema,另外個别掃描器會使用group by x)a)

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理
生産環境中的規則會比這複雜很多,需要你不斷補充,這裡隻是舉例 單純隻編寫map會有大量的重複報警,需要開發reduce用于聚合 應急響應時需要知道sql注入的是那個庫,使用的是哪個賬戶,這個需要在logstash切割字段時補充 應急響應時最好可以知道sql注入對應的連結,這個需要将web的accesslog與sql日志關聯分析,比較成熟的方案是基于機器學習,學習出基于時間的關聯矩陣 用戶端直接搜集sql資料要求mysql也開啟查詢日志,這個對伺服器性能有較大影響,我知道的大型公司以db-prxoy方式接入為主,建議可以在db-proxy上搜集。 基于規則識别sql注入存在瓶頸,雖然相對web日志層面以及流量層面有一定進步,sql語義成為必然之路。

這裡介紹如何用圖算法是被webshell。

webshell特征其實很多,從統計學角度講,有如下特點:

入度出度均為0 入度出度均為1且自己指向自己

neo4j是一個高性能的,nosql圖形資料庫,它将結構化資料存儲在網絡上而不是表中,因其嵌入式、高性能、輕量級等優勢,越來越受到關注。

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

可生成有向圖如下:

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理
如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

查詢入度為1出度均為0的結點或者查詢入度出度均為1且指向自己的結點,由于把ref為空的情況也識别為"-"結點,是以入度為1出度均為0。

如何自行搭建一個威脅感覺大腦 SIEM?| 硬創公開課課後答疑整理

生産環境實際使用中,我們遇到誤報分為以下幾種:

首頁,各種index頁面 phpmyadmin、zabbix等運維管理背景 hadoop、elk等開源軟體的控制台 api接口

這些通過短期加白可以有效解決,比較麻煩的是掃描器對結果的影響,這部分需要通過掃描器指紋或者使用高大上的人機算法來去掉幹擾。

兜哥後記

使用算法來挖掘未知攻擊行為是目前非常流行的一個研究方向,本文隻是介紹了其中比較好了解和實作的一種算法,該算法并非我首創,不少安全公司也都或多或少有過實踐。篇幅有限,這裡不再一一講解。算法或者說機器學習本質是科學規律在大資料集集合上趨勢展現,是以很難做到精準報警,目前階段還是需要通過各種規則和模型來輔助,不過對于挖掘未知攻擊行為确實是一支奇兵。

雷鋒網注:由于本次公開課偏向實操,涉及到許多的實際操作和代碼示例,限于篇幅就不一一展示,本文主要以展示搭建思路為主,細節代碼可以在兜哥的個人公衆号:“兜哥帶你學安全”, 可以和兜哥本人進行技術交流。

公開課視訊

以下内容為公開課後宅客頻道讀者提問答疑記錄:

1.宅客:自己用開源項目搭建siem系統時,容易遇到哪些坑?哪些環節需要額外注意?

兜哥:容易遇到的是性能問題,還有對開源軟體不太熟悉,因為确實我們剛接觸時都是比較新的東西,幫助文檔比較少,容易造成了解上的問題。

其次是攻擊模組化,這個很靠經驗,傳統siem就是誤報特别多。我們的做法是:先離線訓練規則,誤報可控後直接在storm實時處理,基本最後能做到分鐘級發現。

另外,在流量搜集上挑戰很大,傳統的 libpcap 性能差,基本隻能處理幾十兆帶寬,需要使用 pf-ring ,基本可以單機處理 2-6g 帶寬(全量處理)

2.宅客:公司自己人搭建一個siem和買商業siem産品如何選擇,适用于哪類規模的公司?(考慮實際人力、時間成本和效益)

兜哥:中型(1000人左右的)公司,可以有3個人以上投入時,可以自己搭建 opensoc 這種。如果公司規模小些,隻能投入一個人建議用ossim , 每天資料量幾十g的,ossim 可以搞定。

整個搭建成本,時間一般三個月可以搞定,但是規則的積累是個長期過程。我們差不多搞安全這麼多年,一直都在豐富模型和規則,出現漏洞還要及時跟進。

3.在檢索威脅情報這一塊,有什麼特殊的資訊收集手段嗎?

兜哥:openioc 可以訂閱開源的情報,量已經非常大了。國内的威脅情報廠商比較多,比如微步線上。呃……黑産庫的積累其實比較靠人緣,合法性其實一直是個灰色地帶,你懂得。

4.宅客:威脅情報這塊,百度的人工智能有什麼應用嗎?

兜哥:應用比較多,比如從雲端的海量資料中,針對一直威脅的樣本 dns 使用聚類等算法,識别潛在的有關聯的,未知的樣本 dns。

通過安全營運中心的人工識别,挖掘未知攻擊行為,然後以可機讀的方式推送給我們的 waf、ads、ids , ai 一大應用就是從已知樣本以及海量資料中挖掘未知,這個算法應用很多。

4.宅客:neo4j 将結構化資料存儲在網絡上,資料量打了會不會搞不定?

兜哥:會的,這裡(公開課直播)隻是示範,可以用 sparkx,而且 neo4j 也有叢集方案,不過問題其實還好,因為我們是動态請求去重,抽象後才入庫,量其實不大,1t資料量入庫可能不到100m。

5.宅客:能不能提供一些siem具體應用場景,資料分析模型,或者推薦一下在那裡獲得?

分析webshell 用有向圖效果不錯,其他web攻擊,尤其是攻擊載荷在請求參數裡面的用隐式馬爾可夫可以。

6.宅客:網絡裝置的裝置接入的資料價值大嗎?有必要接嗎?

兜哥:網絡裝置系統日志可以監控對網絡裝置的暴力破解、違規操作等,netflow可以輔助判斷蠕蟲、ddos等。

8.宅客:網絡入侵檢測( network instusion detection ) ,你們有啥好算法?

兜哥:關聯算法 apriori 圖算法、異常分析算法比如hmm 隐式馬爾可夫。