當前位置:
首頁 > 新聞 > 開源軟體創建SOC的一份清單

開源軟體創建SOC的一份清單

0x01 概要


現在各個公司都有自己的SOC安全日誌中心,有的是自己搭建的,有的是買廠商的,更多的情況是,各種複合類的的組織結構。這些日誌來自不同的伺服器,不同的部門五花八門。如果是買的設備,設備可能是一整套的方案,有自己的流理量監聽與安全日誌中心,但因為成本的原因,不能所有地方都都部署商業產品,必然會有自己的SOC系統,商業系統也不可能去監聽分析,太邊界的日誌,處理起來也力不從心,首先本地化的數據不通用,商用產品也沒法構建安全策略。開源和自己構建的系統可以高度的定製化,但與商業產品不能有機的結合,就沒辦法發揮最大效用。


0x02 需求分析


拋出問題,我們首先要收集各種日誌,監聽流量,讓設備去發現流量中的威脅,我們來匯總報告數據,結合我們收集來的所有數據,去溯源,去發現更多的歷史痕迹。內網安全和外網不一樣的地方是,內網有各種日誌和設備,採用什麼方式取,什麼方式存,用什麼工具,可能都不統一。但總來說,我們主要的手段監聽危險行為:1.分析流量;2.分析日誌。 像tenable這種工具,就是提供了全棧系列的解決方案。 她會把流量中各種協議解析出來配合自己的策略報警,還提供了與外部系統交互的方式,syslog和rest api都是典型變互手段,paloato的IDS也一樣,有的是基於rest的,有的是基於xml的交互的。總體我們就是有自己的分析結果,還有廠商的分析果,如何整體到一起,威脅情報更準確,就是我們想要的。


0x03 日誌收集流程


其實我們構建自己的SOC也是從流量和日誌,還有策略方面考慮的, 用什麼策略,又反過來也推動了工具的選擇。這篇我們考慮不是如何存數據,而是我們採用一個什麼的結構,可以從海量的日誌來,取得我們想要的有用的數據,用機器和自動化的方式,代替人工甄別數據的工作量的耗時,提供一種思路。



0x04 日誌種類


從大的粒度角度講,我們的日誌就是幾類:



1.流量日誌:典型的流量日誌,比如我們網路鏡像分光過來的日誌,然後用snort或是pcap去監聽流量中,我們最關注的數據,比如http報文,或是mysql的執行sql數據。

2.設備日誌:廠商的設備,一般會去監聽流量,通過監聽流量,存儲日誌再分析,進行威脅報告,這些高中低威的威脅日誌數據就是我們需要的,也是我們要重點過濾的。這個有一個誤報的問題,如果設備知道自己是誤報,就不報了,就不用我們過濾了,但誤報也是正常,那有不誤報的設備,如果真沒用的,可以看看是不是設備斷電了。


3.服務日誌:比如雲的HTTP的日誌,路由器的日誌,郵件服務日誌,這種日誌我們也可以分析收集,分析服務中可能存在的安全問題。


4.agent日誌:agent的日誌是大量的,比如zabbix這種模式收集了大量這種日誌。(圖上沒畫)


0x05 日誌處理相關工具鏈


搭建這些伺服器,有很多都通用的的工具,大家可以按方抓藥,很多都是開源軟體,主要的成本的是實踐的時間成本。


流量監聽類:


dpdk:

dpdk 為 Intel 處理器架構下用戶空間高效的數據包處理提供了庫函數和驅動的支持,它不同於 Linux 系統以通用性設計為目的,而是專註於網路應用中數據包的高性能處理。

也就是 dpdk 繞過了 Linux 內核協議棧對數據包的處理過程,在用戶空間實現了一套數據平面來進行數據包的收發與處理。在內核看來,dpdk 就是一個普通的用戶態進程,它的編譯、連接和載入方式和普通程序沒有什麼兩樣。


netmap

是一個高效的收發報文的 I/O 框架,已經集成在 FreeBSD 的內部了。 當然,也可以在 Linux 下編譯使用 。


pcap:

流量抓包基礎工具,tcpdump等流理工具的底層包。


流量複製類:


tcpycopy:

流量監聽和流量重放工具,可以實時,或是將記錄下來的pcap文件重放。


http-miroor:

http的鏡像,是nginx的插件,可以將nginx,openresty流量,並發鏡像一份。


開源IDS:


suricata:

Suricata是一個高性能的網路入侵檢測(IDS)、入侵防禦(IPS)和網路安全監控的多線程引擎,內置支持IPv6。可載入snort規則和簽名,支持barnyard2。使用pcap提供的介面進行抓包,運行前電腦必須安裝有pcap才可以使用。


snort:

在1998年,Marty Roesch先生用C語言開發了開放源代碼(Open Source)的入侵檢測系統Snort.直至今天,Snort已發展成為一個多平台(Multi-Platform),實時(Real-Time)流量分析,網路IP數據包(Pocket)記錄等特性的強大的網路入侵檢測/防禦系統(Network Intrusion Detection/Prevention System),即NIDS/NIPS.Snort符合通用公共許可(GPL——GNU General Pubic License),在網上可以通過免費下載獲得Snort,並且只需要幾分鐘就可以安裝並開始使用它。snort基於libpcap。


日誌中心SOC:


graylog:

Graylog 是一個簡單易用、功能較全面的日誌管理工具,相比 ELK 組合, 優點:部署維護簡單,查詢語法簡單易懂,內置簡單的告警,可以將搜索結果導出為 json,提供簡單的聚合統計功能,UI 比較友好。


splunk:

Splunk 是機器數據的引擎。使用 Splunk 可收集、索引和利用所有應用程序、伺服器和設備生成的快速移動型計算機數據 。 使用 Splunking 處理計算機數據,可讓您在幾分鐘內解決問題和調查安全事件。監視您的端對端基礎結構,避免服務性能降低或中斷。以較低成本滿足合規性要求。關聯並分析跨越多個系統的複雜事件。獲取新層次的運營可見性以及 IT 和業務智能。


服務日誌:

企業內部的服務日誌太多了,郵件、網關、vpn、雲日誌,不一一介紹。


所以這些工作的第一步,就是將這些數據都放到合適的容器了里,資料庫還是很多的,這裡特別要說的是clickhouse,clickhouse是用來分析用戶行為的,用於安全領域也是可以有的。


ElasticSearch:

ElasticSearch是一個基於Lucene的搜索伺服器。它提供了一個分散式多用戶能力的全文搜索引擎,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放源碼發布,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。


ClickHouse:

Yandex在2016年6月15日開源了一個數據分析的資料庫,名字叫做ClickHouse,這對保守俄羅斯人來說是個特大事。更讓人驚訝的是,這個列式存儲資料庫的跑分要超過很多流行的商業MPP資料庫軟體,例如Vertica。如果你沒有聽過Vertica,那你一定聽過 Michael Stonebraker,2014年圖靈獎的獲得者,PostgreSQL和Ingres發明者(Sybase和SQL Server都是繼承 Ingres而來的), Paradigm4和SciDB的創辦者。Michael Stonebraker於2005年創辦Vertica公司,後來該公司被HP收購,HP Vertica成為MPP列式存儲商業資料庫的高性能代表,Facebook就購買了Vertica數據用於用戶行為分析。

mysql:

開源關係型資料庫,這個大家如果感到陌生,可以google一下。


日誌收集工具:


nxlog:

nxlog 是用 C 語言寫的一個開源日誌收集處理軟體,它是一個模塊化、多線程、高性能的日誌管理解決方案,支持多平台。


logstash:

Logstash 是開源的伺服器端數據處理管道,能夠同時 從多個來源採集數據、轉換數據,然後將數據發送到您最喜歡的 「存儲庫」 中。(我們的存儲庫當然是 Elasticsearch。)


kafkacat:

是一個github上的開源項目,把落地的日誌文本傳到kafka隊列上,但比其它的類似工具的特點就是效率強大。

0x06 過濾策略


我們收集了這麼多數據,其實還是想從這些數據中,拿到我們想到的數據是,從威脅報警噪音中,去掉誤報,得到最有價值的關鍵信息。



上面我們提到的數據的日誌源,從威脅甄別,到日誌欄位存儲策略都有自己方式,我們讓所有的相關想要的數據都放到了我們的容器里,我們加入自己的過濾策略,得到我們想到的結果。其實有些開源日誌工具已經想到了會有這種需求,所能他們在設計就實現了這個功能,我們通添加一些小的腳本在他們的系統中就可以實現數據的再過濾處理,但也只限於在他們自己的系統里,而我們的數據顯然不在一個系統里,所以,最後還得我們自己來,下面圖展示了大體的我們的容器使用的技術。



從」1.日誌源「開始,到實際存數據的「2.容器」,就是基礎數據持久層,然後我們通過實現一個「3.驅動」層來提供數據讀取的可能。最後我們會把」4.過濾策略」應用到我們的數據上,通過編寫演算法策略來實現數據過濾和甄別,最後我們能得到什麼數據呢?我們可以通過白名單和黑名單得到更準備的報警消息。 我們可以得有關行為的關聯數據。我們可以建立一個數據反饋機制,沉澱威脅數據和安全策略。我們可能針對不同報警,做再次判斷處理, 降低誤報噪音,加強正確報警的識別度。


0x07 應用實例


比如說,我們已經構建了一個實際的複合性的SOC系統的雛形,我們可以取得我設備發過來的報警信息,比如,某個網段上的WEB相關的SQL注入的流量監聽分析,我們如何做下一步的過濾策略呢, 如果這個設備的報警原則是針對字典的判斷的,我們就可以加一個針對庫判斷的工具進行再次過濾,讓報警的正確率更高。

有一個叫做libinjection的庫,可以準確的判斷中字元串中是否有注入:

https://github.com/client9/libinjection



這工具使用起來非常的簡單,並且提供其它語言的工具驅動。還技持sql注入以外的檢查。堆積代碼不太好,而且現在使用一個django,flask,tornado的框架來實現一個後台系統的效率還是挺快的,問題並不只是代碼,我們最主要的是讓策略行之有效的執行下去,這樣睡在庫中的數據才有價值。我們現在使用openresty做網關很普通,有人可能會覺得整合日誌和系統間的API是比較麻煩的,其實就是麻煩,我們為了簡單一些,就封裝了一些簡單的SDK庫,讓工作更高效率,比如這個moonscript的庫:

https://github.com/shengnoah/fortress


0x08 總結

羅馬城不是一天建立的,這種針對各種數據的過濾策略也是一個不斷累積的過程,我們只是提供一種實現的思路和可能。更多的代碼可以到以上給出的github的連接上去找。關鍵系統好用,還是要看我們對工具的駕馭能力,和策略制定的優良,按圖索驥拿出實踐,記住了,如果設備不報警,看看是不是斷電了。


*本文作者:xsecurity,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

退訂無門,垃圾簡訊猖獗誰能治得了?
有趣的快閃記憶體:通過實踐分析意外內存泄漏

TAG:FreeBuf |