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