前言
寫(xiě)這篇文章有三個(gè)原因,一是在工作中一直艱難地摸索著這塊也曾寫(xiě)過(guò)一篇很粗略的大數(shù)據(jù)之安全漫談(想繼續(xù)吐槽);二是看到了阿里的招聘廣告-一起來(lái)聊聊這個(gè)新職位:大數(shù)據(jù)安全分析師;三是整個(gè)2015的RSA會(huì)議 Intelligence Data-Driven 出境率太高了,于是想談?wù)劇?/p>
大數(shù)據(jù)安全,顧名思義,用大數(shù)據(jù)技術(shù)解決安全問(wèn)題。核心——解決安全問(wèn)題,手段——大數(shù)據(jù)技術(shù)。
我們從核心出發(fā),安全問(wèn)題抽象來(lái)說(shuō)就是攻擊與防御,接下來(lái)明確防御對(duì)象是什么?攻擊目的是什么?攻擊手段是怎樣的?攻擊者的特征?一句話(huà)——搞清楚誰(shuí)為了什么目的通過(guò)什么手段攻擊了誰(shuí)。
比如說(shuō)防御對(duì)象有企業(yè)內(nèi)部安全,有對(duì)外發(fā)布產(chǎn)品安全,同時(shí)防御對(duì)象又決定了不同的攻擊目的與攻擊手段,有企業(yè)入侵,有對(duì)產(chǎn)品本身的攻擊(比如說(shuō)軟件破解,游戲外掛,訂單欺詐),有對(duì)產(chǎn)品用戶(hù)的攻擊(比如利用支付漏洞竊取用戶(hù)財(cái)產(chǎn)),同樣發(fā)起攻擊的攻擊者們特征又是迥異的,有無(wú)特定目的批量散彈攻擊,有靠接單掙錢(qián)的賞金黑客,有外掛作坊等等。
在明確了的問(wèn)題后,接下來(lái)就是確定解決問(wèn)題的方法,傳統(tǒng)方法的缺陷是什么?大數(shù)據(jù)技術(shù)解決問(wèn)題的優(yōu)勢(shì)又是什么?比如說(shuō)WAF系統(tǒng)中,傳統(tǒng)的檢測(cè)機(jī)制 ——基于簽名庫(kù)(黑名單),缺陷是對(duì)未知漏洞(0day) 不可感知。解決方案——基于異常(白名單),如何鑒定異常——機(jī)器學(xué)習(xí)(學(xué)習(xí)正常的行為模式),如何對(duì)大量數(shù)據(jù)鑒定異常——大數(shù)據(jù)技術(shù)支撐下的機(jī)器學(xué)習(xí)。
在這一過(guò)程,我們需要具備領(lǐng)域知識(shí)(安全知識(shí)),數(shù)據(jù)科學(xué)知識(shí)(數(shù)據(jù)分析知識(shí),機(jī)器學(xué)習(xí),文本分析,可視化),大數(shù)據(jù)知識(shí)(數(shù)據(jù)收集,數(shù)據(jù)存儲(chǔ),數(shù)據(jù)傳輸,數(shù)據(jù)分布式計(jì)算),編程知識(shí)。
路漫漫其修遠(yuǎn)兮,吾將死磕到底…
本文就以企業(yè)入侵檢測(cè)日志分析為場(chǎng)景來(lái)談?wù)劥髷?shù)據(jù)安全。
一、安全領(lǐng)域
大數(shù)據(jù)安全分析最容易走偏的就是過(guò)度強(qiáng)調(diào)數(shù)據(jù)計(jì)算平臺(tái)(大數(shù)據(jù)),算法(機(jī)器學(xué)習(xí)),而失去了本心,忽略了我們使用這一技術(shù)的目的,以入侵檢測(cè)為例,我們希望日志分析達(dá)到以下目的:
如何感知威脅,我們可以先對(duì)攻擊者進(jìn)行畫(huà)像,攻擊手段進(jìn)行建模。
1. 攻擊者畫(huà)像
這里是非常粗略的分類(lèi),實(shí)際上我們可以用關(guān)系圖(社交網(wǎng)挖掘)的方式將攻擊者關(guān)聯(lián)起來(lái),對(duì)取證抓壞人也是有效果的。
2. 攻擊手段建模
相信喜歡擼paper、ppt的人對(duì)Attack Models、 Attack Trees、 Kill Chain這三個(gè)術(shù)語(yǔ)特別熟悉,特別是看過(guò)2013年后的各大安全會(huì)議文檔后,其實(shí)說(shuō)的都是攻擊行為建模。
(1) 滲透模型
(2)普通攻擊模型
(3)攻擊模型(升級(jí)版)
注意以上攻擊手段只是高度精煉的攻擊環(huán)節(jié),實(shí)際的攻擊檢測(cè)中,我們需要盡可能精確的還原入侵場(chǎng)景(包括對(duì)應(yīng)的正常場(chǎng)景是怎樣的),從入侵場(chǎng)景中提煉關(guān)鍵環(huán)節(jié),從而檢測(cè)出異常的攻擊行為。
在熟悉了殺生鏈(kill chain)后,接下來(lái)要做的就是在構(gòu)成鏈的每個(gè)環(huán)節(jié)進(jìn)行狙擊,注意越往后成本越高。而每個(gè)階段的操作必然會(huì)雁過(guò)留痕,這些痕跡,就是我們進(jìn)行數(shù)據(jù)分析的數(shù)據(jù)源,知道對(duì)什么數(shù)據(jù)進(jìn)行分析是最最重要的(數(shù)據(jù)量要恰到好處,要多到足夠支撐數(shù)據(jù)分析與取證,要少到篩選掉噪音數(shù)據(jù))。
二、數(shù)據(jù)科學(xué)
在明確了我們要解決的問(wèn)題,接下來(lái)我們來(lái)普及一下數(shù)據(jù)分析的基本流程:
從上圖可以看出,傳統(tǒng)的數(shù)據(jù)分析在模型選擇上都僅僅用了0——規(guī)則,1——統(tǒng)計(jì)分析,設(shè)置基線,依靠閾值的方法。
數(shù)據(jù)分析與領(lǐng)域知識(shí)是緊密耦合的,千萬(wàn)不要誤入套用算法的誤區(qū),要進(jìn)行基于行為建模(攻擊行為,正常行為)的數(shù)據(jù)分析,可以從單點(diǎn)分析(單條數(shù)據(jù)的深度分析,例如分析單條HTTP請(qǐng)求是否是攻擊請(qǐng)求),簡(jiǎn)單的關(guān)聯(lián)分析(例如分析一個(gè)session下,多條HTTP請(qǐng)求的關(guān)聯(lián)關(guān)系,是否為掃描器行為,是否有嘗試?yán)@過(guò)WAF的操作,是否符合攻擊鏈的關(guān)鍵步驟),復(fù)雜的關(guān)聯(lián)分析(例如Web日志,數(shù)據(jù)庫(kù)日志,操作系統(tǒng)日志的聯(lián)動(dòng)分析,例如SQL注入寫(xiě)馬攻擊中HTTP請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)庫(kù)操作,主機(jī)操作)來(lái)逐步深入分析,當(dāng)攻擊場(chǎng)景很復(fù)雜的時(shí)候,我們可以考慮從結(jié)果出發(fā)的方式來(lái)回溯,這些技巧都取決于領(lǐng)域知識(shí)。
下面列舉一些傳統(tǒng)的關(guān)聯(lián)技巧:
1.規(guī)則關(guān)聯(lián)
If the system sees an EVENT E1 where E1.eventType=portscanfollowed byan event E2 where E2.srcip=E1.srcip and E2.dstip = E1.dstip andE2.eventType = fw.reject thendoSomething2.漏洞關(guān)聯(lián):將漏洞掃描數(shù)據(jù)和實(shí)時(shí)事件數(shù)據(jù)結(jié)合起來(lái),以便幫助減少假陽(yáng)性 false positive
e.g. 如果IDS檢測(cè)到了端口掃描,可以對(duì)網(wǎng)絡(luò)進(jìn)行例行的漏洞掃描,來(lái)驗(yàn)證問(wèn)題中的主機(jī)是否真的打開(kāi)了個(gè)端口,是否容易遭到攻擊
3.指紋關(guān)聯(lián)
4.反端口關(guān)聯(lián)
if (event E1.dstport != (Known_Open_Ports on event E1.dstip))thendoSomething5.關(guān)聯(lián)列表關(guān)聯(lián): 外部情報(bào)列表,例如攻擊者列表
http://www.dshield.org/
6. 環(huán)境關(guān)聯(lián) e.g.如何知道公司的假期安排,可以使用這一信息,在每個(gè)人都不上班的時(shí)候發(fā)現(xiàn)內(nèi)部資源的訪問(wèn)。
休假時(shí)間表業(yè)務(wù)時(shí)間假日計(jì)劃內(nèi)部資源訪問(wèn)權(quán)限重復(fù)的網(wǎng)絡(luò)“事件”例如漏洞掃描計(jì)劃的系統(tǒng)、數(shù)據(jù)存儲(chǔ)備份等維護(hù)安排,例如操作系統(tǒng)補(bǔ)丁等常見(jiàn)的關(guān)聯(lián)搜索模式:
x次登錄失敗后有一次登錄成功創(chuàng)建非管理員賬戶(hù)之后進(jìn)行權(quán)限提升VPN用戶(hù)在工作時(shí)間內(nèi)/外登錄,并向網(wǎng)絡(luò)之外傳輸更多的數(shù)據(jù)網(wǎng)絡(luò)上的一臺(tái)主機(jī)開(kāi)始攻擊或者探查網(wǎng)絡(luò)上的其他主機(jī)在很接近的時(shí)間內(nèi)X次嘗試訪問(wèn)用戶(hù)沒(méi)有權(quán)限的共享/文件/目錄等從同一個(gè)工作站以多個(gè)用戶(hù)名登錄在多個(gè)系統(tǒng)上有多個(gè)防病毒軟件失效攻擊DMZ系統(tǒng),隨后有出站連接攻擊DMZ系統(tǒng),隨后在同一個(gè)系統(tǒng)上更改配置在幾分鐘內(nèi)有許多Web 404,401 500和其他web錯(cuò)誤碼以上都是單靠領(lǐng)域知識(shí)感知威脅,領(lǐng)域知識(shí)的缺陷是太依賴(lài)于專(zhuān)家知識(shí)了,而專(zhuān)家知識(shí)是有限的,這個(gè)時(shí)候機(jī)器學(xué)習(xí)就可以發(fā)揮長(zhǎng)度了,例如理工渣眼中的HMM及安全應(yīng)用。
即使是使用機(jī)器學(xué)習(xí)也仍離不開(kāi)安全領(lǐng)域知識(shí),有安全領(lǐng)域背景的人在數(shù)據(jù)預(yù)處理階段、feature選擇階段會(huì)事半功倍,比如對(duì)訪問(wèn)日志進(jìn)行白名單建模時(shí),從訪問(wèn)日志中篩選出異常日志(攻擊日志、不存在的日志、服務(wù)器錯(cuò)誤日志),需要安全領(lǐng)域知識(shí)(知道什么是攻擊)、web服務(wù)器知識(shí)(知道什么是異常,url重寫(xiě))進(jìn)行數(shù)據(jù)清理;比如HMM web安全檢測(cè) feature的選擇,我們知道攻擊注入點(diǎn)在哪里,就不需要進(jìn)行運(yùn)氣流的feature選擇、降維處理。
機(jī)器學(xué)習(xí)雖然能彌補(bǔ)單靠領(lǐng)域知識(shí)分析的缺陷,但由于其存在準(zhǔn)確率的問(wèn)題而不能直接在線上應(yīng)用,只存在于運(yùn)維離線的環(huán)境下?;蛟S是算法需要優(yōu)化,但個(gè)人認(rèn)為能解決當(dāng)前方法不能解決的問(wèn)題就是很大的進(jìn)步了,比如說(shuō)能發(fā)現(xiàn)一個(gè)0 day。我想當(dāng)電燈剛發(fā)明出來(lái)的時(shí)候,也是絕對(duì)沒(méi)有蠟燭好用,也希望架構(gòu)師們不要單一的靠準(zhǔn)確率這個(gè)唯一的標(biāo)準(zhǔn)來(lái)評(píng)價(jià)機(jī)器學(xué)習(xí)的結(jié)果。
在知道了如何進(jìn)行數(shù)據(jù)分析后,接下來(lái)的就是如何在數(shù)據(jù)量巨大的情況下進(jìn)行分析。玩單機(jī)腳本的年代要一去不返了,分布式需要搞起。
三、大數(shù)據(jù)技術(shù)
我們要使用的大數(shù)據(jù)技術(shù)的核心其實(shí)就是是分布式存儲(chǔ)與分布式計(jì)算,當(dāng)然能利用已有的數(shù)據(jù)預(yù)處理接口,算法接口也是很有幫助的。
以下是一個(gè)完整的大數(shù)據(jù)分析架構(gòu)圖:
得出這個(gè)架構(gòu),也走了不少?gòu)澛?,最開(kāi)始由于不了解ElasticSearch的特性,采用的是直接使用ElasticSearch對(duì)數(shù)據(jù)源進(jìn)行分析與結(jié)果存儲(chǔ),ElasticSearch全文索引的設(shè)計(jì)決定了ta不適合頻繁寫(xiě)操作并且會(huì)很夸張的擴(kuò)大數(shù)據(jù)量,所以最后引入了更適合及時(shí)讀寫(xiě)操作的 HBase數(shù)據(jù)庫(kù)來(lái)做持久化存儲(chǔ),同時(shí)增加了算法層這塊,只在ElasticSearch離存儲(chǔ)最終結(jié)果。
大數(shù)據(jù)有著龐大的生態(tài)圈,較之機(jī)器學(xué)習(xí)(人工智能,深度學(xué)習(xí))的發(fā)展,數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)計(jì)算方面簡(jiǎn)直是突飛猛進(jìn),為算法的發(fā)展提供了良好的支撐,當(dāng)然學(xué)習(xí)的成本也非常高。
萬(wàn)事具備,就差第四個(gè)能力——編程,這是將想法落實(shí)的能力,否則都是鏡花水月。不是有一句老話(huà)嗎?“Talk is cheap, show me the code”。
四、編程
對(duì)于戰(zhàn)斗力負(fù)5的渣,編程方面的心得是在太多了,每天都有新發(fā)現(xiàn),這里就說(shuō)說(shuō)經(jīng)驗(yàn)之談吧。
1. 語(yǔ)言選擇
先使用Python或者R去做小數(shù)據(jù)量(樣本數(shù)據(jù))的分析,然后使用Java實(shí)現(xiàn)分布式算法(在大數(shù)據(jù)的生態(tài)圈中,為了避免不必要的麻煩還是用原生語(yǔ)言Java好)。
2. 日志格式問(wèn)題
日志處理中,輸入日志的格式會(huì)直接影響模型運(yùn)行時(shí)間,特別是采用正則的方式對(duì)文本格式的輸入進(jìn)行解析會(huì)極度消耗時(shí)間,所以在模型運(yùn)算時(shí)需要先對(duì)日志進(jìn)行序列化處理,Protocol Buffer就是很好的選擇,但千萬(wàn)注意jar包的版本哦。
結(jié)語(yǔ)
大數(shù)據(jù)安全涉及的內(nèi)容非常深入,每個(gè)方面都是幾本厚厚的書(shū),這里只是非常淺顯的漫談,給大家一幅平面的框架圖,期待更多的數(shù)據(jù)科學(xué)(數(shù)據(jù)分析,機(jī)器學(xué)習(xí),大數(shù)據(jù)處理)領(lǐng)域的人進(jìn)入這個(gè)行業(yè),或者安全行業(yè)的人開(kāi)拓自己在數(shù)據(jù)分析方面的深度,大數(shù)據(jù)安全將發(fā)展的更好,不僅僅是叫好不叫座了。
(我寫(xiě)理工渣眼中的HMM及安全應(yīng)用那篇文章時(shí),有讀者留言,為啥你也搞大數(shù)據(jù),希望這篇文章能答疑)