1
本文作者: 謝幺 | 2017-03-10 10:09 | 專題:雷峰網(wǎng)公開課 |
近年來態(tài)勢感知、威脅情報等等新詞不斷出現(xiàn),其實(shí)萬變不離其宗,它們都是利用已知的數(shù)據(jù)來判斷風(fēng)險,甚至預(yù)知未發(fā)生的威脅。這如同一個老練的探險者孤身穿行在原始叢林,他能輕巧自然地避開蛇蟲鼠蟻,用腳印來預(yù)知猛獸的威脅。這一切都依賴于他那顆善于思考,經(jīng)驗(yàn)豐富的大腦。
在網(wǎng)絡(luò)安全的原始森林里,SIEM就扮演這樣一個威脅感知大腦的角色。如何在合理成本下打造一個最為強(qiáng)大、合適的 SIEM 系統(tǒng),是許多安全人員頭疼的問題。雷鋒網(wǎng)有幸邀請到了擁有十年安全產(chǎn)品經(jīng)驗(yàn)的百度安全專家兜哥,為大家講解如何使用開源軟件搭建企業(yè)的SIEM系統(tǒng)。
兜哥,百度安全專家,具有十年云安全產(chǎn)品經(jīng)驗(yàn),主要研究方向?yàn)闄C(jī)器學(xué)習(xí)、僵尸網(wǎng)絡(luò)、威脅情報、沙箱技術(shù)、具有多年企業(yè)安全建設(shè)經(jīng)驗(yàn),擁有安全方向相關(guān)專利多項(xiàng);發(fā)表多篇安全學(xué)術(shù)論文。
【百度安全專家-兜哥】
雷鋒網(wǎng)按:由于本次公開課偏向?qū)嵅?,涉及到許多的實(shí)際操作和代碼示例,限于篇幅就不一一展示,文章下方附本次公開課視頻,有興趣的讀者可以自行觀看,本文主要以展示思路為主。了解技術(shù)細(xì)節(jié)可以關(guān)注兜哥的個人公眾號:“兜哥帶你學(xué)安全”,和兜哥本人進(jìn)行技術(shù)交流。
在RSA2017會議上,應(yīng)用大數(shù)據(jù)技術(shù)在安全領(lǐng)域,挖掘深入的攻擊行為依然是一個熱點(diǎn)。
市場調(diào)研機(jī)構(gòu)IDC預(yù)計,未來全球數(shù)據(jù)總量年增長率將維持在50%左右,到2020年,全球數(shù)據(jù)總量將達(dá)到40ZB。一個中型互聯(lián)網(wǎng)公司一天產(chǎn)生的數(shù)據(jù)量通??梢猿^幾T甚至幾十T。傳統(tǒng)的盒子形式的安全產(chǎn)品已經(jīng)沒有能力處理如此大量的數(shù)據(jù)。
SIEM(security information and event management),顧名思義就是針對安全信息和事件的管理系統(tǒng)。SIEM通過統(tǒng)一搜集、格式化、存儲、分析企業(yè)內(nèi)部的各類日志、流量數(shù)據(jù),挖掘攻擊行為。
完整的SIEM至少會包括以下功能:
漏洞管理
資產(chǎn)發(fā)現(xiàn)
入侵檢測
行為分析
日志存儲、檢索
報警管理
酷炫報表
其中最核心的我認(rèn)為是入侵檢測、行為分析和日志存儲檢索。
對比 Gartner2009 年和 2016年的全球SIEM廠商排名,可以清楚看出,基于大數(shù)據(jù)架構(gòu)的廠商Splunk迅速崛起,傳統(tǒng)四強(qiáng)依托完整的安全產(chǎn)品線和成熟市場渠道,依然占據(jù)領(lǐng)導(dǎo)者象限,其他較小的廠商逐漸離開領(lǐng)導(dǎo)者象限。最重要的存儲架構(gòu)也由盤柜(可選)+商業(yè)數(shù)據(jù)庫逐漸轉(zhuǎn)變?yōu)榭蓹M向擴(kuò)展的大數(shù)據(jù)架構(gòu),支持云環(huán)境也成為趨勢。
開源SIEM
常見的開源SIEM主要有 OSSIM 和 OPENSOC,其中 OPENSOC 完全基于大數(shù)據(jù)架構(gòu),更適合目前的中大型企業(yè)。OPENSOC 是思科2014年在 BroCon 大會上公布的開源項(xiàng)目,但是沒有真正開源其源代碼,只是發(fā)布了其技術(shù)框架。我們參考了 OPENSOC 發(fā)布的架構(gòu),結(jié)合公司實(shí)際落地了一套方案。
OPENSOC 完全基于開源的大數(shù)據(jù)框 架kafka、storm、spark 和 es 等,天生具有強(qiáng)大的橫向擴(kuò)展能力。本文重點(diǎn)講解的也是基于 OPENSOC 的 SIEM 搭建,以及簡單介紹如何使用規(guī)則和算法來發(fā)現(xiàn)入侵行為。
上圖是Opensoc給出的框架,初次看非常費(fèi)解,我們以數(shù)據(jù)存儲與數(shù)據(jù)處理兩個緯度來細(xì)化,以常見的 linux 服務(wù)器 ssh 登錄日志搜集為例。
數(shù)據(jù)搜集緯度需求是搜集原始數(shù)據(jù),存儲,提供用戶交互式檢索的UI接口,典型場景就是出現(xiàn)安全事件后,通過檢索日志回溯攻擊行為,定損。
logtash其實(shí)可以直接把數(shù)據(jù)寫es,但是考慮到 storm 也要數(shù)據(jù)處理,所以把數(shù)據(jù)切分放到 logstash,切分后的數(shù)據(jù)發(fā)送 kafka,提供給 storm 處理和 logstash 寫入 es。數(shù)據(jù)檢索可以直接使用 kibana,非常方便。數(shù)據(jù)切分也可以在 storm 里面完成。
這個就是大名鼎鼎的ELK架構(gòu)。es比較適合存儲較短時間的熱數(shù)據(jù)的實(shí)時檢索查詢,對于需要長期存儲,并且希望使用hadoop或者spark進(jìn)行大時間跨度的離線分析時,還需要存儲到hdfs上,所以比較常見的數(shù)據(jù)流程圖為:
這里以數(shù)據(jù)實(shí)時流式處理為例,storm 從 kafka 中訂閱切分過的ssh登錄日志,匹配檢測規(guī)則,檢測結(jié)果的寫入 mysql 或者 es。
在這個例子中,孤立看一條登錄日志難以識別安全問題,最多識別非跳板機(jī)登錄,真正運(yùn)行還需要參考知識庫中的常見登錄IP、時間、IP情報等以及臨時存儲處理狀態(tài)的狀態(tài)庫中最近該IP的登錄成功與失敗情況。比較接近實(shí)際運(yùn)行情況的流程如下:
具體判斷邏輯舉例如下,實(shí)際中使用大量代理IP同時暴力破解,打一槍換一個地方那種無法覆蓋,這里只是個舉例:
生產(chǎn)環(huán)境中,處理安全事件,分析入侵行為,只有ssh登錄日志肯定是不夠,我們需要盡可能多的搜集數(shù)據(jù)源,以下作為參考:
linux/window系統(tǒng)安全日志/操作日志
web服務(wù)器訪問日志
數(shù)據(jù)庫SQL日志
網(wǎng)絡(luò)流量日志
簡化后的系統(tǒng)架構(gòu)如下,報警也存es主要是查看報警也可以通過kibana,人力不足界面都不用開發(fā)了:
Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),有如下特性:
通過O(1)的磁盤數(shù)據(jù)結(jié)構(gòu)提供消息的持久化,這種結(jié)構(gòu)對于即使數(shù)以TB的消息存儲也能夠保持長時間的穩(wěn)定性能。
高吞吐量 :即使是非常普通的硬件Kafka也可以支持每秒數(shù)百萬的消息。
支持通過Kafka服務(wù)器和消費(fèi)機(jī)集群來分區(qū)消息。
支持Hadoop并行數(shù)據(jù)加載。
Apache Storm 是一個免費(fèi)開源的分布式實(shí)時計算系統(tǒng)。簡化了流數(shù)據(jù)的可靠處理,像 Hadoop 一樣實(shí)現(xiàn)實(shí)時批處理。Storm 很簡單,可用于任意編程語言。
Storm 有很多應(yīng)用場景,包括實(shí)時數(shù)據(jù)分析、聯(lián)機(jī)學(xué)習(xí)、持續(xù)計算、分布式 RPC、ETL 等。Storm 速度非???,一個測試在單節(jié)點(diǎn)上實(shí)現(xiàn)每秒一百萬的組處理。
storm拓?fù)渲С謕ython開發(fā),以處理SQL日志為例子:
假設(shè)SQL日志的格式是
"Feb 16 06:32:50 " "127.0.0.1" "root@localhost" "select * from user where id=1"
一般storm的拓?fù)浣Y(jié)構(gòu):
簡化后 spout 是通用的從 kafka 讀取數(shù)據(jù)的,就一個 bolt 處理 SQL 日志,匹配規(guī)則,命中策略即輸出”alert”:”原始SQL日志”。
Logstash是一款輕量級的日志搜集處理框架,可以方便的把分散的、多樣化的日志搜集起來,并進(jìn)行自定義的處理,然后傳輸?shù)街付ǖ奈恢?,比如某個服務(wù)器或者文件。
當(dāng)然它可以單獨(dú)出現(xiàn),作為日志收集軟件,你可以收集日志到多種存儲系統(tǒng)或臨時中轉(zhuǎn)系統(tǒng),如MySQL,redis,kakfa,HDFS, lucene,solr等并不一定是ElasticSearch。
logstash的配置量甚至超過了storm的拓?fù)淠_本開發(fā)量,這里就不展開了。
ElasticSearch是一個基于Lucene的搜索服務(wù)器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是當(dāng)前流行的企業(yè)級搜索引擎。設(shè)計用于云計算中,能夠達(dá)到實(shí)時搜索,穩(wěn)定,可靠,快速,安裝使用方便。
生產(chǎn)環(huán)境中,處理安全事件,分析入侵行為,我們需要盡可能多的搜集數(shù)據(jù)源,以下作為參考:
linux/window系統(tǒng)安全日志/操作日志
web服務(wù)器訪問日志
數(shù)據(jù)庫SQL日志
網(wǎng)絡(luò)流量日志
常見的數(shù)據(jù)日志搜集方式有三種:
大多數(shù)數(shù)據(jù)庫審計產(chǎn)品都支持這種模式,通過分析數(shù)據(jù)庫流量,解碼數(shù)據(jù)庫協(xié)議,識別SQL預(yù)計,抽取出SQL日志
比較典型的就是db-proxy方式,目前百度、搜狐、美團(tuán)、京東等都有相關(guān)開源產(chǎn)品,前端通過db-proxy訪問后端的真實(shí)數(shù)據(jù)庫服務(wù)器。SQL日志可以直接在db-proxy上搜集。
通過在數(shù)據(jù)庫服務(wù)器安裝客戶端搜集SQL日志,比較典型的方式就是通過logstash來搜集,本文以客戶端方式進(jìn)行講解,其余方式本質(zhì)上也是類似的。
下載logstash https://www.elastic.co/downloads/logstash 目前最新版本5.2.1版
命令:bin/logstash -f mysql.conf
分析攻擊特征,下列列舉兩個,更多攻擊特征請大家自行總結(jié):
使用聯(lián)合查詢枚舉數(shù)據(jù)時會產(chǎn)生大量的NULL字段。
枚舉數(shù)據(jù)庫結(jié)構(gòu)時會使用INFORMATION_SCHEMA,另外個別掃描器會使用GROUP BY x)a)
生產(chǎn)環(huán)境中的規(guī)則會比這復(fù)雜很多,需要你不斷補(bǔ)充,這里只是舉例
單純只編寫map會有大量的重復(fù)報警,需要開發(fā)reduce用于聚合
應(yīng)急響應(yīng)時需要知道SQL注入的是那個庫,使用的是哪個賬戶,這個需要在logstash切割字段時補(bǔ)充
應(yīng)急響應(yīng)時最好可以知道SQL注入對應(yīng)的鏈接,這個需要將web的accesslog與SQL日志關(guān)聯(lián)分析,比較成熟的方案是基于機(jī)器學(xué)習(xí),學(xué)習(xí)出基于時間的關(guān)聯(lián)矩陣
客戶端直接搜集SQL數(shù)據(jù)要求mysql也開啟查詢?nèi)罩?,這個對服務(wù)器性能有較大影響,我知道的大型公司以db-prxoy方式接入為主,建議可以在db-proxy上搜集。
基于規(guī)則識別SQL注入存在瓶頸,雖然相對web日志層面以及流量層面有一定進(jìn)步,SQL語義成為必然之路。
這里介紹如何用圖算法是被webshell。
webshell特征其實(shí)很多,從統(tǒng)計學(xué)角度講,有如下特點(diǎn):
入度出度均為0
入度出度均為1且自己指向自己
neo4j是一個高性能的,NOSQL圖形數(shù)據(jù)庫,它將結(jié)構(gòu)化數(shù)據(jù)存儲在網(wǎng)絡(luò)上而不是表中,因其嵌入式、高性能、輕量級等優(yōu)勢,越來越受到關(guān)注。
可生成有向圖如下:
查詢?nèi)攵葹?出度均為0的結(jié)點(diǎn)或者查詢?nèi)攵瘸龆染鶠?且指向自己的結(jié)點(diǎn),由于把ref為空的情況也識別為"-"結(jié)點(diǎn),所以入度為1出度均為0。
生產(chǎn)環(huán)境實(shí)際使用中,我們遇到誤報分為以下幾種:
主頁,各種index頁面
phpmyadmin、zabbix等運(yùn)維管理后臺
hadoop、elk等開源軟件的控制臺
API接口
這些通過短期加白可以有效解決,比較麻煩的是掃描器對結(jié)果的影響,這部分需要通過掃描器指紋或者使用高大上的人機(jī)算法來去掉干擾。
兜哥后記
使用算法來挖掘未知攻擊行為是目前非常流行的一個研究方向,本文只是介紹了其中比較好理解和實(shí)現(xiàn)的一種算法,該算法并非我首創(chuàng),不少安全公司也都或多或少有過實(shí)踐。篇幅有限,這里不再一一講解。算法或者說機(jī)器學(xué)習(xí)本質(zhì)是科學(xué)規(guī)律在大數(shù)據(jù)集集合上趨勢體現(xiàn),所以很難做到精準(zhǔn)報警,目前階段還是需要通過各種規(guī)則和模型來輔助,不過對于挖掘未知攻擊行為確實(shí)是一支奇兵。
雷鋒網(wǎng)注:由于本次公開課偏向?qū)嵅伲婕暗皆S多的實(shí)際操作和代碼示例,限于篇幅就不一一展示,本文主要以展示搭建思路為主,細(xì)節(jié)代碼可以在兜哥的個人公眾號:“兜哥帶你學(xué)安全”, 可以和兜哥本人進(jìn)行技術(shù)交流。
公開課視頻
以下內(nèi)容為公開課后宅客頻道讀者提問答疑記錄:
1.宅客:自己用開源項(xiàng)目搭建SIEM系統(tǒng)時,容易遇到哪些坑?哪些環(huán)節(jié)需要額外注意?
兜哥:容易遇到的是性能問題,還有對開源軟件不太熟悉,因?yàn)榇_實(shí)我們剛接觸時都是比較新的東西,幫助文檔比較少,容易造成理解上的問題。
其次是攻擊建模,這個很靠經(jīng)驗(yàn),傳統(tǒng)SIEM就是誤報特別多。我們的做法是:先離線訓(xùn)練規(guī)則,誤報可控后直接在storm實(shí)時處理,基本最后能做到分鐘級發(fā)現(xiàn)。
另外,在流量搜集上挑戰(zhàn)很大,傳統(tǒng)的 libpcap 性能差,基本只能處理幾十兆帶寬,需要使用 pf-ring ,基本可以單機(jī)處理 2-6G 帶寬(全量處理)
2.宅客:公司自己人搭建一個SIEM和買商業(yè)SIEM產(chǎn)品如何選擇,適用于哪類規(guī)模的公司?(考慮實(shí)際人力、時間成本和效益)
兜哥:中型(1000人左右的)公司,可以有3個人以上投入時,可以自己搭建 opensoc 這種。如果公司規(guī)模小些,只能投入一個人建議用ossim , 每天數(shù)據(jù)量幾十G的,ossim 可以搞定。
整個搭建成本,時間一般三個月可以搞定,但是規(guī)則的積累是個長期過程。我們差不多搞安全這么多年,一直都在豐富模型和規(guī)則,出現(xiàn)漏洞還要及時跟進(jìn)。
3.在檢索威脅情報這一塊,有什么特殊的信息收集手段嗎?
兜哥:Openioc 可以訂閱開源的情報,量已經(jīng)非常大了。國內(nèi)的威脅情報廠商比較多,比如微步在線。呃……黑產(chǎn)庫的積累其實(shí)比較靠人緣,合法性其實(shí)一直是個灰色地帶,你懂得。
4.宅客:威脅情報這塊,百度的人工智能有什么應(yīng)用嗎?
兜哥:應(yīng)用比較多,比如從云端的海量數(shù)據(jù)中,針對一直威脅的樣本 dns 使用聚類等算法,識別潛在的有關(guān)聯(lián)的,未知的樣本 dns。
通過安全運(yùn)營中心的人工識別,挖掘未知攻擊行為,然后以可機(jī)讀的方式推送給我們的 WAF、ADS、IDS , AI 一大應(yīng)用就是從已知樣本以及海量數(shù)據(jù)中挖掘未知,這個算法應(yīng)用很多。
4.宅客:neo4j 將結(jié)構(gòu)化數(shù)據(jù)存儲在網(wǎng)絡(luò)上,數(shù)據(jù)量打了會不會搞不定?
兜哥:會的,這里(公開課直播)只是演示,可以用 sparkx,而且 neo4j 也有集群方案,不過問題其實(shí)還好,因?yàn)槲覀兪莿討B(tài)請求去重,抽象后才入庫,量其實(shí)不大,1T數(shù)據(jù)量入庫可能不到100M。
5.宅客:能不能提供一些SIEM具體應(yīng)用場景,數(shù)據(jù)分析模型,或者推薦一下在那里獲得?
分析webshell 用有向圖效果不錯,其他web攻擊,尤其是攻擊載荷在請求參數(shù)里面的用隱式馬爾可夫可以。
6.宅客:網(wǎng)絡(luò)設(shè)備的設(shè)備接入的數(shù)據(jù)價值大嗎?有必要接嗎?
兜哥:網(wǎng)絡(luò)設(shè)備系統(tǒng)日志可以監(jiān)控對網(wǎng)絡(luò)設(shè)備的暴力破解、違規(guī)操作等,netflow可以輔助判斷蠕蟲、ddos等。
8.宅客:網(wǎng)絡(luò)入侵檢測( network instusion detection ) ,你們有啥好算法?
兜哥:關(guān)聯(lián)算法 apriori 圖算法、異常分析算法比如hmm 隱式馬爾可夫。
在公眾號“宅客頻道”(ID:letshome),回復(fù):“兜哥”,即可獲得此次公開課PPT。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。