淺談大型互聯(lián)網(wǎng)的企業(yè)入侵檢測(cè)及防護(hù)策略
前言
如何知道自己所在的企業(yè)是否被入侵了?是沒人來“黑”,還是因自身感知能力不足,暫時(shí)還無法發(fā)現(xiàn)?其實(shí),入侵檢測(cè)是每一個(gè)大型互聯(lián)網(wǎng)企業(yè)都要面對(duì)的嚴(yán)峻挑戰(zhàn)。價(jià)值越高的公司,面臨入侵的威脅也越大,即便是Yahoo這樣的互聯(lián)網(wǎng)鼻祖,在落幕(被收購)時(shí)仍遭遇全量數(shù)據(jù)失竊的事情。安全無小事,一旦互聯(lián)網(wǎng)公司被成功“入侵”,其后果將不堪想象。
基于“攻防對(duì)抗”的考量,本文不會(huì)提及具體的入侵檢測(cè)模型、算法和策略,那些希望直接照搬“入侵策略”的同學(xué)可能會(huì)感到失望。但是我們會(huì)將一部分運(yùn)營(yíng)思路分享出來,請(qǐng)各位同行指點(diǎn),如能對(duì)后來者起到幫助的作用,那就更好了,也歡迎大家跟我們交流探討。
入侵的定義
典型的入侵場(chǎng)景:
黑客在很遠(yuǎn)的地方,通過網(wǎng)絡(luò)遠(yuǎn)程控制目標(biāo)的筆記本電腦/手機(jī)/服務(wù)器/網(wǎng)絡(luò)設(shè)備,進(jìn)而隨意地讀取目標(biāo)的隱私數(shù)據(jù),又或者使用目標(biāo)系統(tǒng)上的功能,包括但不限于使用手機(jī)的麥克風(fēng)監(jiān)聽目標(biāo),使用攝像頭偷窺監(jiān)控目標(biāo),使用目標(biāo)設(shè)備的計(jì)算能力挖礦,使用目標(biāo)設(shè)備的網(wǎng)絡(luò)能力發(fā)動(dòng)DDoS攻擊等等。亦或是破解了一個(gè)服務(wù)的密碼,進(jìn)去查看敏感資料、控制門禁/紅綠燈。以上這些都屬于經(jīng)典的入侵場(chǎng)景。
我們可以給入侵下一個(gè)定義:就是黑客在未經(jīng)授權(quán)的情況下,控制、使用我方資源(包括但不限于讀寫數(shù)據(jù)、執(zhí)行命令、控制資源等)達(dá)到各種目的。從廣義上講,黑客利用SQL注入漏洞竊取數(shù)據(jù),或者拿到了目標(biāo)域名在ISP中的帳號(hào)密碼,以篡改DNS指向一個(gè)黑頁,又或者找到了目標(biāo)的社交帳號(hào),在微博/QQ/郵箱上,對(duì)虛擬資產(chǎn)進(jìn)行非授權(quán)的控制,都屬于入侵的范疇。
針對(duì)企業(yè)的入侵檢測(cè)
企業(yè)入侵檢測(cè)的范圍,多數(shù)情況下比較狹義:一般特指黑客對(duì)PC、系統(tǒng)、服務(wù)器、網(wǎng)絡(luò)(包括辦公網(wǎng)、生產(chǎn)網(wǎng))控制的行為。
黑客對(duì)PC、服務(wù)器等主機(jī)資產(chǎn)的控制,最常見的方法是通過Shell去執(zhí)行指令,獲得Shell的這個(gè)動(dòng)作叫做GetShell。
比如通過Web服務(wù)的上傳漏洞,拿到WebShell,或者利用RCE漏洞直接執(zhí)行命令/代碼(RCE環(huán)境變相的提供了一個(gè)Shell)。另外,通過某種方式先植入“木馬后門”,后續(xù)直接利用木馬集成的SHELL功能對(duì)目標(biāo)遠(yuǎn)程控制,這個(gè)也比較典型。
因此,入侵檢測(cè)可以重點(diǎn)關(guān)注GetShell這個(gè)動(dòng)作,以及GetShell成功之后的惡意行為(為了擴(kuò)大戰(zhàn)果,黑客多半會(huì)利用Shell進(jìn)行探測(cè)、翻找竊取、橫向移動(dòng)攻擊其它內(nèi)部目標(biāo),這些區(qū)別于好人的特性也可以作為重要的特征)。
有一些同行(包括商業(yè)產(chǎn)品),喜歡報(bào)告GetShell之前的一些“外部掃描、攻擊探測(cè)和嘗試行為”,并美其名曰“態(tài)勢(shì)感知”,告訴企業(yè)有人正在“試圖攻擊”。在筆者看來,實(shí)戰(zhàn)價(jià)值并不大。包括美團(tuán)在內(nèi)的很多企業(yè),基本上無時(shí)無刻都在遭受“不明身份”的攻擊,知道了有人在“嘗試”攻擊,如果并不能有效地去行動(dòng),無法有效地對(duì)行動(dòng)進(jìn)行告警,除了耗費(fèi)心力之外,并沒有太大的實(shí)際價(jià)值。
當(dāng)我們習(xí)慣“攻擊”是常態(tài)之后,就會(huì)在這樣的常態(tài)下去解決問題,可以使用什么加固策略,哪些可以實(shí)現(xiàn)常態(tài)化的運(yùn)營(yíng),如果有什么策略無法常態(tài)化運(yùn)營(yíng),比如需要很多人加班臨時(shí)突擊守著,那這個(gè)策略多半在不久之后就會(huì)逐漸消逝掉。跟我們做不做這個(gè)策略,并沒有本質(zhì)上的區(qū)別。
類似于SQL注入、XSS等一些不直接GetShell的Web攻擊,暫時(shí)不在狹義的“入侵檢測(cè)”考慮范圍,建議可以劃入“漏洞”、“威脅感知”等領(lǐng)域,另行再做探討。當(dāng)然,利用SQL注入、XSS等入口,進(jìn)行了GetShell操作的,我們?nèi)宰etShell這個(gè)關(guān)鍵點(diǎn),不必在乎漏洞入口在何處。
“入侵”和“內(nèi)鬼”
與入侵接近的一種場(chǎng)景是“內(nèi)鬼”。入侵本身是手段,GetShell只是起點(diǎn),黑客GetShell的目標(biāo)是為了之后對(duì)資源的控制和數(shù)據(jù)的竊取。而“內(nèi)鬼”天然擁有合法的權(quán)限,可以合法接觸敏感資產(chǎn),但是基于工作以外的目的,他們對(duì)這些資源進(jìn)行非法的處置,包括拷貝副本、轉(zhuǎn)移外泄、篡改數(shù)據(jù)牟利等。
內(nèi)鬼的行為不在“入侵檢測(cè)”的范疇,一般從內(nèi)部風(fēng)險(xiǎn)控制的視角進(jìn)行管理和審計(jì),比如職責(zé)分離、雙人審計(jì)等。也有數(shù)據(jù)防泄密產(chǎn)品(DLP)對(duì)其進(jìn)行輔助,這里不展開細(xì)說。
有時(shí)候,黑客知道員工A有權(quán)限接觸目標(biāo)資產(chǎn),便定向攻擊A,再利用A的權(quán)限把數(shù)據(jù)竊取走,也定性為“入侵”。畢竟A不是主觀惡意的“內(nèi)鬼”。如果不能在黑客攻擊A的那一刻捕獲,或者無法區(qū)分黑客控制的A竊取數(shù)據(jù)和正常員工A的訪問數(shù)據(jù),那這個(gè)入侵檢測(cè)也是失敗的。
入侵檢測(cè)的本質(zhì)
前文已經(jīng)講過,入侵就是黑客可以不經(jīng)過我們的同意,來操作我們的資產(chǎn),在手段上并沒有任何的限制。那么如何找出入侵行為和合法正常行為的區(qū)別,將其跟合法行為進(jìn)行分開,就是“入侵發(fā)現(xiàn)”。在算法模型上,這算是一個(gè)標(biāo)記問題(入侵、非入侵)。
可惜的是,入侵這種動(dòng)作的“黑”樣本特別稀少,想通過大量的帶標(biāo)簽的數(shù)據(jù),有監(jiān)督的訓(xùn)練入侵檢測(cè)模型,找出入侵的規(guī)律比較難。因此,入侵檢測(cè)策略開發(fā)人員,往往需要投入大量的時(shí)間,去提煉更精準(zhǔn)的表達(dá)模型,或者花更多的精力去構(gòu)造“類似入侵”的模擬數(shù)據(jù)。
一個(gè)經(jīng)典的例子是,為了檢測(cè)出WebShell,安全從業(yè)人員可以去GitHub上搜索一些公開的WebShell樣本,數(shù)量大約不到1000個(gè)。而對(duì)于機(jī)器學(xué)習(xí)動(dòng)輒百萬級(jí)的訓(xùn)練需求,這些數(shù)據(jù)遠(yuǎn)遠(yuǎn)不夠。況且GitHub上的這些樣本集,從技術(shù)手法上來看,有單一技術(shù)手法生成的大量類似樣本,也有一些對(duì)抗的手法樣本缺失。因此,這樣的訓(xùn)練,試圖讓AI去通過“大量的樣本”掌握WebShell的特征并區(qū)分出它們,原則上不太可能完美地去實(shí)現(xiàn)。
此時(shí),針對(duì)已知樣本做技術(shù)分類,提煉更精準(zhǔn)的表達(dá)模型,被稱為傳統(tǒng)的特征工程。而傳統(tǒng)的特征工程往往被視為效率低下的重復(fù)勞動(dòng),但效果往往比較穩(wěn)定,畢竟加一個(gè)技術(shù)特征就可以穩(wěn)定發(fā)現(xiàn)一類WebShell。而構(gòu)造大量的惡意樣本,雖然有機(jī)器學(xué)習(xí)、AI等光環(huán)加持,但在實(shí)際環(huán)境中往往難以獲得成功:自動(dòng)生成的樣本很難描述WebShell本來的含義,多半描述的是自動(dòng)生成的算法特征。
另一個(gè)方面,入侵的區(qū)別是看行為本身是否“授權(quán)”,而授權(quán)與否本身是沒有任何顯著的區(qū)分特征的。因此,做入侵對(duì)抗的時(shí)候,如果能夠通過某種加固,將合法的訪問收斂到有限的通道,并且給該通道做出強(qiáng)有力的區(qū)分,也就能大大的降低入侵檢測(cè)的成本。例如,對(duì)訪問來源進(jìn)行嚴(yán)格的認(rèn)證,無論是自然人,還是程序API,都要求持有合法票據(jù),而派發(fā)票據(jù)時(shí),針對(duì)不同情況做多緯度的認(rèn)證和授權(quán),再用IAM針對(duì)這些票據(jù)記錄和監(jiān)控它們可以訪問的范圍,還能產(chǎn)生更底層的Log做異常訪問模型感知。
這個(gè)全生命周期的風(fēng)控模型,也是Google的BeyondCorp無邊界網(wǎng)絡(luò)得以實(shí)施的前提和基礎(chǔ)。
因此,入侵檢測(cè)的主要思路也就有2種:
- 根據(jù)黑特征進(jìn)行模式匹配(例如WebShell關(guān)鍵字匹配)。
- 根據(jù)業(yè)務(wù)歷史行為(生成基線模型),對(duì)入侵行為做異常對(duì)比(非白既黑),如果業(yè)務(wù)的歷史行為不夠收斂,就用加固的手段對(duì)其進(jìn)行收斂,再挑出不合規(guī)的小眾異常行為。
入侵檢測(cè)與攻擊向量
根據(jù)目標(biāo)不同,可能暴露給黑客的攻擊面會(huì)不同,黑客可能采用的入侵手法也就完全不同。比如,入侵我們的PC/筆記本電腦,還有入侵部署在機(jī)房/云上的服務(wù)器,攻擊和防御的方法都有挺大的區(qū)別。
針對(duì)一個(gè)明確的“目標(biāo)”,它被訪問的渠道可能是有限集,被攻擊的必經(jīng)路徑也有限。“攻擊方法”+“目標(biāo)的攻擊面”的組合,被稱為“攻擊向量”。
因此,談入侵檢測(cè)模型效果時(shí),需要先明確攻擊向量,針對(duì)不同的攻擊路徑,采集對(duì)應(yīng)的日志(數(shù)據(jù)),才可能做對(duì)應(yīng)的檢測(cè)模型。比如,基于SSH登錄后的Shell命令數(shù)據(jù)集,是不能用于檢測(cè)WebShell的行為。而基于網(wǎng)絡(luò)流量采集的數(shù)據(jù),也不可能感知黑客是否在SSH后的Shell環(huán)境中執(zhí)行了什么命令。
基于此,如果有企業(yè)不提具體的場(chǎng)景,就說做好了APT感知模型,顯然就是在“吹噓”了。
所以,入侵檢測(cè)得先把各類攻擊向量羅列出來,每一個(gè)細(xì)分場(chǎng)景分別采集數(shù)據(jù)(HIDS+NIDS+WAF+RASP+應(yīng)用層日志+系統(tǒng)日志+PC……),再結(jié)合公司的實(shí)際數(shù)據(jù)特性,作出適應(yīng)公司實(shí)際情況的對(duì)應(yīng)檢測(cè)模型。不同公司的技術(shù)棧、數(shù)據(jù)規(guī)模、暴露的攻擊面,都會(huì)對(duì)模型產(chǎn)生重大的影響。比如很多安全工作者特別擅長(zhǎng)PHP下的WebShell檢測(cè),但是到了一個(gè)Java系的公司……
常見的入侵手法與應(yīng)對(duì)
如果對(duì)黑客的常見入侵手法理解不足,就很難有的放矢,有時(shí)候甚至?xí)萑?ldquo;政治正確”的陷阱里。比如滲透測(cè)試團(tuán)隊(duì)說,我們做了A動(dòng)作,你們竟然沒有發(fā)現(xiàn),所以你們不行。而實(shí)際情況是,該場(chǎng)景可能不是一個(gè)完備的入侵鏈條,就算不發(fā)現(xiàn)該動(dòng)作,對(duì)入侵檢測(cè)效果可能也沒有什么影響。每一個(gè)攻擊向量對(duì)公司造成的危害,發(fā)生的概率如何進(jìn)行排序,解決它耗費(fèi)的成本和帶來的收益如何,都需要有專業(yè)經(jīng)驗(yàn)來做支撐與決策。
現(xiàn)在簡(jiǎn)單介紹一下,黑客入侵教程里的經(jīng)典流程(完整過程可以參考?xì)溎P?:
入侵一個(gè)目標(biāo)之前,黑客對(duì)該目標(biāo)可能還不夠了解,所以第一件事往往是“踩點(diǎn)”,也就是搜集信息,加深了解。比如,黑客需要知道,目標(biāo)有哪些資產(chǎn)(域名、IP、服務(wù)),它們各自的狀態(tài)如何,是否存在已知的漏洞,管理它們的人有誰(以及如何合法的管理的),存在哪些已知的泄漏信息(比如社工庫里的密碼等)……
一旦踩點(diǎn)完成,熟練的黑客就會(huì)針對(duì)各種資產(chǎn)的特性,醞釀和逐個(gè)驗(yàn)證“攻擊向量”的可行性,下文列舉了常見的攻擊方式和防御建議。
高危服務(wù)入侵
所有的公共服務(wù)都是“高危服務(wù)”,因?yàn)樵搮f(xié)議或者實(shí)現(xiàn)該協(xié)議的開源組件,可能存在已知的攻擊方法(高級(jí)的攻擊者甚至擁有對(duì)應(yīng)的0day),只要你的價(jià)值足夠高,黑客有足夠的動(dòng)力和資源去挖掘,那么當(dāng)你把高危服務(wù)開啟到互聯(lián)網(wǎng),面向所有人都打開的那一刻,就相當(dāng)于為黑客打開了“大門”。
比如SSH、RDP這些運(yùn)維管理相關(guān)的服務(wù),是設(shè)計(jì)給管理員用的,只要知道密碼/秘鑰,任何人都能登錄到服務(wù)器端,進(jìn)而完成入侵。而黑客可能通過猜解密碼(結(jié)合社工庫的信息泄露、網(wǎng)盤檢索或者暴力破解),獲得憑據(jù)。事實(shí)上這類攻擊由于過于常見,黑客早就做成了全自動(dòng)化的全互聯(lián)網(wǎng)掃描的蠕蟲類工具,云上購買的一個(gè)主機(jī)如果設(shè)置了一個(gè)弱口令,往往在幾分鐘內(nèi)就會(huì)感染蠕蟲病毒,就是因?yàn)檫@類自動(dòng)化的攻擊者實(shí)在是太多了。
或許,你的密碼設(shè)置得非常強(qiáng)壯,但是這并不是你可以把該服務(wù)繼續(xù)暴露在互聯(lián)網(wǎng)的理由,我們應(yīng)該把這些端口限制好,只允許自己的IP(或者內(nèi)部的堡壘主機(jī))訪問,徹底斷掉黑客通過它入侵我們的可能。
與此類似的,MySQL、Redis、FTP、SMTP、MSSQL、Rsync等等,凡是自己用來管理服務(wù)器或者數(shù)據(jù)庫、文件的服務(wù),都不應(yīng)該針對(duì)互聯(lián)網(wǎng)無限制的開放。否則,蠕蟲化的攻擊工具會(huì)在短短幾分鐘內(nèi)攻破我們的服務(wù),甚至直接加密我們的數(shù)據(jù),甚至要求我們支付比特幣,進(jìn)行敲詐勒索。
還有一些高危服務(wù)存在RCE漏洞(遠(yuǎn)程命令執(zhí)行),只要端口開放,黑客就能利用現(xiàn)成的exp,直接GetShell,完成入侵。
防御建議: 針對(duì)每一個(gè)高危服務(wù)做入侵檢測(cè)的成本較高,因?yàn)楦呶7?wù)的具體所指非常的多,不一定存在通用的特征。所以,通過加固方式,收斂攻擊入口性價(jià)比更高。禁止所有高危端口對(duì)互聯(lián)網(wǎng)開放可能,這樣能夠減少90%以上的入侵概率。
Web入侵
隨著高危端口的加固,黑客知識(shí)庫里的攻擊手法很多都會(huì)失效了。但是Web服務(wù)是現(xiàn)代互聯(lián)網(wǎng)公司的主要服務(wù)形式,不可能都關(guān)掉。于是,基于PHP、Java、ASP、ASP.NET、Node、C寫的CGI等等動(dòng)態(tài)的Web服務(wù)漏洞,就變成了黑客入侵的最主要入口。
比如,利用上傳功能直接上傳一個(gè)WebShell,利用文件包含功能,直接引用執(zhí)行一個(gè)遠(yuǎn)程的WebShell(或者代碼),然后利用代碼執(zhí)行的功能,直接當(dāng)作Shell的入口執(zhí)行任意命令,解析一些圖片、視頻的服務(wù),上傳一個(gè)惡意的樣本,觸發(fā)解析庫的漏洞……
Web服務(wù)下的應(yīng)用安全是一個(gè)專門的領(lǐng)域(道哥還專門寫了本《白帽子講Web安全》),具體的攻防場(chǎng)景和對(duì)抗已經(jīng)發(fā)展得非常成熟了。當(dāng)然,由于它們都是由Web服務(wù)做為入口,所以入侵行為也會(huì)存在某種意義上的共性。相對(duì)而言,我們比較容易能夠找到黑客GetShell和正常業(yè)務(wù)行為的一些區(qū)別。
針對(duì)Web服務(wù)的入侵痕跡檢測(cè),可以考慮采集WAF日志、Access Log、Auditd記錄的系統(tǒng)調(diào)用,或者Shell指令,以及網(wǎng)絡(luò)層面Response相關(guān)的數(shù)據(jù),提煉出被攻擊成功的特征,建議我們將主要的精力放在這些方面。
0day入侵
通過泄漏的工具包來看,早些年NSA是擁有直接攻擊Apache、Nginx這些服務(wù)的0day武器的。這意味著對(duì)手很可能完全不用在乎我們的代碼和服務(wù)寫成什么樣,拿0day一打,神不知鬼不覺就GetShell了。
但是對(duì)于入侵檢測(cè)而言,這并不可怕:因?yàn)闊o論對(duì)手利用什么漏洞當(dāng)入口,它所使用的Shellcode和之后的行為本身依然有共性。Apache存在0day漏洞被攻擊,還是一個(gè)PHP頁面存在低級(jí)的代碼漏洞被利用,從入侵的行為上來看,說不定是完全一樣的,入侵檢測(cè)模型還可以通用。
所以,把精力聚焦在有黑客GetShell入口和之后的行為上,可能比關(guān)注漏洞入口更有價(jià)值。當(dāng)然,具體的漏洞利用還是要實(shí)際跟進(jìn),然后驗(yàn)證其行為是否符合預(yù)期。
辦公終端入侵
絕大多數(shù)APT報(bào)告里,黑客是先對(duì)人(辦公終端)下手,比如發(fā)個(gè)郵件,哄騙我們打開后,控制我們的PC,再進(jìn)行長(zhǎng)期的觀察/翻閱,拿到我們的合法憑據(jù)后,再到內(nèi)網(wǎng)漫游。所以這些報(bào)告,多數(shù)集中在描述黑客用的木馬行為以及家族代碼相似度上。而反APT的產(chǎn)品、解決方案,多數(shù)也是在辦公終端的系統(tǒng)調(diào)用層面,用類似的方法,檢驗(yàn)“免殺木馬”的行為。
因此,EDR類的產(chǎn)品+郵件安全網(wǎng)關(guān)+辦公網(wǎng)出口的行為審計(jì)+APT產(chǎn)品的沙箱等,聯(lián)合起來,可以采集到對(duì)應(yīng)的數(shù)據(jù),并作出相似的入侵檢測(cè)感知模型。而最重要的一點(diǎn),是黑客喜歡關(guān)注內(nèi)部的重要基礎(chǔ)設(shè)施,包括但不限于AD域控、郵件服務(wù)器、密碼管理系統(tǒng)、權(quán)限管理系統(tǒng)等,一旦拿下,就相當(dāng)于成為了內(nèi)網(wǎng)的“上帝”,可以為所欲為。所以對(duì)公司來說,重要基礎(chǔ)設(shè)施要有針對(duì)性的攻防加固討論,微軟針對(duì)AD的攻防甚至還發(fā)過專門的加固白皮書。
入侵檢測(cè)基本原則
不能把每一條告警都徹底跟進(jìn)的模型,等同于無效模型。入侵發(fā)生后,再辯解之前其實(shí)有告警,只是太多了沒跟過來/沒查徹底,這是“馬后炮”,等同于不具備發(fā)現(xiàn)能力,所以對(duì)于日均告警成千上萬的產(chǎn)品,安全運(yùn)營(yíng)人員往往表示很無奈。
我們必須屏蔽一些重復(fù)發(fā)生的相似告警,以集中精力把每一個(gè)告警都閉環(huán)掉。這會(huì)產(chǎn)生白名單,也就是漏報(bào),因此模型的漏報(bào)是不可避免的。
由于任何模型都會(huì)存在漏報(bào),所以我們必須在多個(gè)緯度上做多個(gè)模型,形成關(guān)聯(lián)和縱深。假設(shè)WebShell靜態(tài)文本分析被黑客變形繞過了,在RASP(運(yùn)行時(shí)環(huán)境)的惡意調(diào)用還可以進(jìn)行監(jiān)控,這樣可以選擇接受單個(gè)模型的漏報(bào),但在整體上仍然具備發(fā)現(xiàn)能力。
既然每一個(gè)單一場(chǎng)景的模型都有誤報(bào)漏報(bào),我們做什么場(chǎng)景,不做什么場(chǎng)景,就需要考慮“性價(jià)比”。比如某些變形的WebShell可以寫成跟業(yè)務(wù)代碼非常相似,人的肉眼幾乎無法識(shí)別,再追求一定要在文本分析上進(jìn)行對(duì)抗,就是性價(jià)比很差的決策。如果通過RASP的檢測(cè)方案,其性價(jià)比更高一些,也更具可行性一些。
我們不太容易知道黑客所有的攻擊手法,也不太可能針對(duì)每一種手法都建設(shè)策略(考慮到資源總是稀缺的)。所以針對(duì)重點(diǎn)業(yè)務(wù),需要可以通過加固的方式(還需要常態(tài)化監(jiān)控加固的有效性),讓黑客能攻擊的路徑極度收斂,僅在關(guān)鍵環(huán)節(jié)進(jìn)行對(duì)抗。起碼能針對(duì)核心業(yè)務(wù)具備兜底的保護(hù)能力。
基于上述幾個(gè)原則,我們可以知道一個(gè)事實(shí),或許我們永遠(yuǎn)不可能在單點(diǎn)上做到100%發(fā)現(xiàn)入侵,但是我們可以通過一些組合方式,讓攻擊者很難繞過所有的點(diǎn)。
當(dāng)老板或者藍(lán)軍挑戰(zhàn),某個(gè)單點(diǎn)的檢測(cè)能力有缺失時(shí),如果為了“政治正確”,在這個(gè)單點(diǎn)上進(jìn)行無止境的投入,試圖把單點(diǎn)做到100%能發(fā)現(xiàn)的能力,很多時(shí)候可能只是在試圖制造一個(gè)“永動(dòng)機(jī)”,純粹浪費(fèi)人力、資源,而不產(chǎn)生實(shí)際的收益。將節(jié)省下來的資源,高性價(jià)比的布置更多的縱深防御鏈條,效果顯然會(huì)更好。
入侵檢測(cè)產(chǎn)品的主流形態(tài)
入侵檢測(cè)終究是要基于數(shù)據(jù)去建模,比如針對(duì)WebShell的檢測(cè),首先要識(shí)別Web目錄,再對(duì)Web目錄下的文件進(jìn)行文本分析,這需要做一個(gè)采集器。基于Shell命令的入侵檢測(cè)模型,需要獲取所有Shell命令,這可能要Hook系統(tǒng)調(diào)用或者劫持Shell?;诰W(wǎng)絡(luò)IP信譽(yù)、流量payload進(jìn)行檢測(cè),或者基于郵件網(wǎng)關(guān)對(duì)內(nèi)容的檢查,可能要植入網(wǎng)絡(luò)邊界中,對(duì)流量進(jìn)行旁路采集。
也有一些集大成者,基于多個(gè)Sensor,將各方日志進(jìn)行采集后,匯總在一個(gè)SOC或者SIEM,再交由大數(shù)據(jù)平臺(tái)進(jìn)行綜合分析。因此,業(yè)界的入侵檢測(cè)相關(guān)的產(chǎn)品大致上就分成了以下的形態(tài):
- 主機(jī)Agent類:黑客攻擊了主機(jī)后,在主機(jī)上進(jìn)行的動(dòng)作,可能會(huì)產(chǎn)生日志、進(jìn)程、命令、網(wǎng)絡(luò)等痕跡,那么在主機(jī)上部署一個(gè)采集器(也內(nèi)含一部分檢測(cè)規(guī)則),就叫做基于主機(jī)的入侵檢測(cè)系統(tǒng),簡(jiǎn)稱HIDS。
- 典型的產(chǎn)品:OSSEC、青藤云、安騎士、安全狗,Google最近也發(fā)布了一個(gè)Alpha版本的類似產(chǎn)品 Cloud Security Command Center。當(dāng)然,一些APT廠商,往往也有在主機(jī)上的Sensor/Agent,比如FireEye等。
- 網(wǎng)絡(luò)檢測(cè)類:由于多數(shù)攻擊向量是會(huì)通過網(wǎng)絡(luò)對(duì)目標(biāo)投放一些payload,或者控制目標(biāo)的協(xié)議本身具備強(qiáng)特征,因此在網(wǎng)絡(luò)層面具備識(shí)別的優(yōu)勢(shì)。
- 典型的產(chǎn)品:Snort到商業(yè)的各種NIDS/NIPS,對(duì)應(yīng)到APT級(jí)別,則還有類似于FireEye的NX之類的產(chǎn)品。
- 日志集中存儲(chǔ)分析類:這一類產(chǎn)品允許主機(jī)、網(wǎng)絡(luò)設(shè)備、應(yīng)用都輸出各自的日志,集中到一個(gè)統(tǒng)一的后臺(tái),在這個(gè)后臺(tái),對(duì)各類日志進(jìn)行綜合的分析,判斷是否可以關(guān)聯(lián)的把一個(gè)入侵行為的多個(gè)路徑刻畫出來。例如A主機(jī)的Web訪問日志里顯示遭到了掃描和攻擊嘗試,繼而主機(jī)層面多了一個(gè)陌生的進(jìn)程和網(wǎng)絡(luò)連接,最后A主機(jī)對(duì)內(nèi)網(wǎng)其它主機(jī)進(jìn)行了橫向滲透嘗試。
- 典型的產(chǎn)品:LogRhythm、Splunk等SIEM類產(chǎn)品。
- APT沙箱:沙箱類產(chǎn)品更接近于一個(gè)云端版的高級(jí)殺毒軟件,通過模擬執(zhí)行觀測(cè)行為,以對(duì)抗未知樣本弱特征的特點(diǎn)。只不過它需要一個(gè)模擬運(yùn)行的過程,性能開銷較大,早期被認(rèn)為是“性價(jià)比不高”的解決方案,但由于惡意文件在行為上的隱藏要難于特征上的對(duì)抗,因此現(xiàn)在也成為了APT產(chǎn)品的核心組件。通過網(wǎng)絡(luò)流量、終端采集、服務(wù)器可疑樣本提取、郵件附件提煉等拿到的未知樣本,都可以提交到沙箱里跑一下行為,判斷是否惡意。
- 典型產(chǎn)品:FireEye、Palo Alto、Symantec、微步。
- 終端入侵檢測(cè)產(chǎn)品:移動(dòng)端目前還沒有實(shí)際的產(chǎn)品,也不太有必要。PC端首先必備的是殺毒軟件,如果能夠檢測(cè)到惡意程序,一定程度上能夠避免入侵。但是如果碰到免殺的高級(jí)0day和木馬,殺毒軟件可能會(huì)被繞過。借鑒服務(wù)器上HIDS的思路,也誕生了EDR的概念,主機(jī)除了有本地邏輯之外,更重要的是會(huì)采集更多的數(shù)據(jù)到后端,在后端進(jìn)行綜合分析和聯(lián)動(dòng)。也有人說下一代殺毒軟件里都會(huì)帶上EDR的能力,只不過目前銷售還是分開在賣。
- 典型產(chǎn)品:殺毒軟件有Bit9、SEP、賽門鐵克、卡巴斯基、McAfee ;EDR產(chǎn)品不枚舉了,騰訊的iOA、阿里的阿里郎,一定程度上都是可以充當(dāng)類似的角色;
入侵檢測(cè)效果評(píng)價(jià)指標(biāo)
首先,主動(dòng)發(fā)現(xiàn)的入侵案例/所有入侵 = 主動(dòng)發(fā)現(xiàn)率。這個(gè)指標(biāo)一定是最直觀的。比較麻煩的是分母,很多真實(shí)發(fā)生的入侵,如果外部不反饋,我們又沒檢測(cè)到,它就不會(huì)出現(xiàn)在分母里,所以有效發(fā)現(xiàn)率總是虛高的,誰能保證當(dāng)前所有的入侵都發(fā)現(xiàn)了呢?(但是實(shí)際上,只要入侵次數(shù)足夠多,不管是SRC收到的情報(bào),還是“暗網(wǎng)”上報(bào)出來的一個(gè)大新聞,把客觀上已經(jīng)知悉的入侵列入分母,總還是能計(jì)算出一個(gè)主動(dòng)發(fā)現(xiàn)率的。)
另外,真實(shí)的入侵其實(shí)是一個(gè)低頻行為,大型的互聯(lián)網(wǎng)企業(yè)如果一年到頭成百上千的被入侵,肯定也不正常。因此,如果很久沒出現(xiàn)真實(shí)入侵案例,這個(gè)指標(biāo)長(zhǎng)期不變化,也無法刻畫入侵檢測(cè)能力是否在提升。
所以,我們一般還會(huì)引入兩個(gè)指標(biāo)來觀測(cè):
- 藍(lán)軍對(duì)抗主動(dòng)發(fā)現(xiàn)率
- 已知場(chǎng)景覆蓋率
藍(lán)軍主動(dòng)高頻對(duì)抗和演習(xí),可以彌補(bǔ)真實(shí)入侵事件低頻的不足,但是由于藍(lán)軍掌握的攻擊手法往往也是有限的,他們多次演習(xí)后,手法和場(chǎng)景可能會(huì)被羅列完畢。假設(shè)某一個(gè)場(chǎng)景建設(shè)方尚未補(bǔ)齊能力,藍(lán)軍同樣的姿勢(shì)演習(xí)100遍,增加100個(gè)未發(fā)現(xiàn)的演習(xí)案例,對(duì)建設(shè)方而言并沒有更多的幫助。所以,把已知攻擊手法的建成覆蓋率拿出來,也是一個(gè)比較好的評(píng)價(jià)指標(biāo)。
入侵檢測(cè)團(tuán)隊(duì)把精力聚焦在已知攻擊手法的優(yōu)先級(jí)評(píng)估和快速覆蓋上,對(duì)建設(shè)到什么程度是滿足需要的,要有自己的專業(yè)判斷(參考入侵檢測(cè)原則里的“性價(jià)比”原則)。
而宣布建成了一個(gè)場(chǎng)景的入侵發(fā)現(xiàn)能力,是要有基本的驗(yàn)收原則的:
- 該場(chǎng)景日均工單 < X單,峰值 < Y單;當(dāng)前所有場(chǎng)景日平均
- 同一個(gè)事件只告警首次,多次出現(xiàn)自動(dòng)聚合。
- 具備誤報(bào)自學(xué)習(xí)能力。
- 告警具備可讀性(有清晰的風(fēng)險(xiǎn)闡述、關(guān)鍵信息、處理指引、輔助信息或者索引,便于定性),不鼓勵(lì)Key-Value模式的告警,建議使用自然語言描述核心邏輯和響應(yīng)流程。
- 有清晰的說明文檔,自測(cè)報(bào)告(就像交付了一個(gè)研發(fā)產(chǎn)品,產(chǎn)品文檔和自測(cè)過程是質(zhì)量的保障)。
- 有藍(lán)軍針對(duì)該場(chǎng)景實(shí)戰(zhàn)驗(yàn)收?qǐng)?bào)告。
- 不建議調(diào)用微信、短信等接口發(fā)告警(告警和事件的區(qū)別是,事件可以閉環(huán),告警只是提醒),統(tǒng)一的告警事件框架可以有效的管理事件確保閉環(huán),還能提供長(zhǎng)期的基礎(chǔ)運(yùn)營(yíng)數(shù)據(jù),比如止損效率、誤報(bào)量/率。
策略人員的文檔應(yīng)當(dāng)說明當(dāng)前模型對(duì)哪些情況具備感知能力,哪些前提下會(huì)無法告警(考驗(yàn)一個(gè)人對(duì)該場(chǎng)景和自己模型的理解能力)。通過前述判斷,可以對(duì)策略的成熟度形成自評(píng)分,0-100自由大致估算。單個(gè)場(chǎng)景往往很難達(dá)到100分,但那并沒有關(guān)系,因?yàn)閺?0分提升到100分的邊際成本可能變的很高。不建議追求極致,而是全盤審視,是否快速投入到下一個(gè)場(chǎng)景中去。
如果某個(gè)不到滿分的場(chǎng)景經(jīng)常出現(xiàn)真實(shí)對(duì)抗,又沒有交叉的其它策略進(jìn)行彌補(bǔ),那自評(píng)結(jié)論可能需要重審并提高驗(yàn)收的標(biāo)準(zhǔn)。至少解決工作中實(shí)際遇到的Case要優(yōu)先考慮。
影響入侵檢測(cè)的關(guān)鍵要素
討論影響入侵檢測(cè)的要素時(shí),我們可以簡(jiǎn)單看看,曾經(jīng)發(fā)生過哪些錯(cuò)誤導(dǎo)致防守方不能主動(dòng)發(fā)現(xiàn)入侵:
- 依賴的數(shù)據(jù)丟失,比如HIDS在當(dāng)事機(jī)器上,沒部署安裝/Agent掛了/數(shù)據(jù)上報(bào)過程丟失了/Bug了,或者后臺(tái)傳輸鏈條中丟失數(shù)據(jù)。
- 策略腳本Bug,沒啟動(dòng)(事實(shí)上我們已經(jīng)失去了這個(gè)策略感知能力了)。
- 還沒建設(shè)對(duì)應(yīng)的策略(很多時(shí)候入侵發(fā)生了才發(fā)現(xiàn)這個(gè)場(chǎng)景我們還沒來得及建設(shè)對(duì)應(yīng)的策略)。
- 策略的靈敏度/成熟度不夠(比如掃描的閾值沒達(dá)到,WebShell用了變形的對(duì)抗手法)。
- 模型依賴的部分基礎(chǔ)數(shù)據(jù)錯(cuò)誤,做出了錯(cuò)誤的判斷。
- 成功告警了,但是負(fù)責(zé)應(yīng)急同學(xué)錯(cuò)誤的判斷/沒有跟進(jìn)/輔助信息不足以定性,沒有行動(dòng)起來。
所以實(shí)際上,要讓一個(gè)入侵事件被捕獲,我們需要入侵檢測(cè)系統(tǒng)長(zhǎng)時(shí)間、高質(zhì)量、高可用的運(yùn)行。這是一件非常專業(yè)的工作,超出了絕大多數(shù)安全工程師能力和意愿的范疇。所以建議指派專門的運(yùn)營(yíng)人員對(duì)以下目標(biāo)負(fù)責(zé):
- 數(shù)據(jù)采集的完整性(全鏈路的對(duì)賬)。
- 每一個(gè)策略時(shí)刻工作正常(自動(dòng)化撥測(cè)監(jiān)控)。
- 基礎(chǔ)數(shù)據(jù)的準(zhǔn)確性。
- 工單運(yùn)營(yíng)支撐平臺(tái)及追溯輔助工具的便捷性。
可能有些同學(xué)會(huì)想,影響入侵檢測(cè)的關(guān)鍵要素,難道不是模型的有效性么?怎么全是這些亂七八糟的東西?
實(shí)際上,大型互聯(lián)網(wǎng)企業(yè)的入侵檢測(cè)系統(tǒng)日均數(shù)據(jù)量可能到達(dá)數(shù)百T,甚至更多。涉及到數(shù)十個(gè)業(yè)務(wù)模塊,成百上千臺(tái)機(jī)器。從數(shù)字規(guī)模上來說,不亞于一些中小型企業(yè)的整個(gè)數(shù)據(jù)中心。這樣復(fù)雜的一個(gè)系統(tǒng),要長(zhǎng)期維持在高可用標(biāo)準(zhǔn),本身就需要有SRE、QA等輔助角色的專業(yè)化支持。如果僅依靠個(gè)別安全工程師,很難讓其研究安全攻防的時(shí)候,又兼顧到基礎(chǔ)數(shù)據(jù)質(zhì)量、服務(wù)的可用性和穩(wěn)定性、發(fā)布時(shí)候的變更規(guī)范性、各類運(yùn)營(yíng)指標(biāo)和運(yùn)維故障的及時(shí)響應(yīng)。最終的結(jié)果就是能力范圍內(nèi)可以發(fā)現(xiàn)的入侵,總是有各種意外“恰好”發(fā)現(xiàn)不了。
所以,筆者認(rèn)為,以多數(shù)安全團(tuán)隊(duì)運(yùn)營(yíng)質(zhì)量之差,其實(shí)根本輪不到拼策略(技術(shù))。當(dāng)然,一旦有資源投入去跟進(jìn)這些輔助工作之后,入侵檢測(cè)就真的需要拼策略了。
此時(shí),攻擊手法有那么多,憑什么先選擇這個(gè)場(chǎng)景建設(shè)?憑什么認(rèn)為建設(shè)到某程度就足夠滿足當(dāng)下的需要了?憑什么選擇發(fā)現(xiàn)某些樣本,而放棄另一些樣本的對(duì)抗?
這些看似主觀性的東西,非??简?yàn)專業(yè)判斷力。而且在領(lǐng)導(dǎo)面前很容易背上“責(zé)任心不足”的帽子,比如為困難找借口而不是為目標(biāo)找方法,這個(gè)手法黑客攻擊了好多次,憑什么不解決,那個(gè)手法憑什么說在視野范圍內(nèi),但是要明年再解決?
如何發(fā)現(xiàn)APT?
所謂APT,就是高級(jí)持續(xù)威脅。既然是高級(jí)的,就意味著木馬很大可能是免殺的(不能靠殺毒軟件或者普通的特征發(fā)現(xiàn)),利用的漏洞也是高級(jí)的(加固到牙齒可能也擋不住敵人進(jìn)來的步伐),攻擊手法同樣很高級(jí)(攻擊場(chǎng)景可能我們都沒有見過)。
所以,實(shí)際上APT的意思,就約等于同于不能被發(fā)現(xiàn)的入侵。然而,業(yè)界總還有APT檢測(cè)產(chǎn)品,解決方案的廠商在混飯吃,他們是怎么做的呢?
- 木馬免殺的,用沙箱+人工分析,哪怕效率低一些,還是試圖做出定性,并快速的把IOC(威脅情報(bào))同步給其它客戶,發(fā)現(xiàn)1例,全球客戶都具備同樣的感知能力。
- 流量加密變形對(duì)抗的,用異常檢測(cè)的模型,把一些不認(rèn)識(shí)的可疑的IP關(guān)系、payload給識(shí)別出來。當(dāng)然,識(shí)別出來之后,也要運(yùn)營(yíng)人員跟進(jìn)得仔細(xì),才能定性。
- 攻擊手法高級(jí)的,還是會(huì)假定黑客就用魚叉、水坑之類的已知手法去執(zhí)行,然后在郵箱附件、PC終端等環(huán)節(jié)采集日志,對(duì)用戶行為進(jìn)行分析,UEBA試圖尋找出用戶異于平常的動(dòng)作。
那么,我們呢?筆者也沒有什么好的辦法,可以發(fā)現(xiàn)傳說中的“免殺”的木馬,但是我們可以針對(duì)已知的黑客攻擊框架(比如Metasploit、Cobalt Strike)生成的樣本、行為進(jìn)行一些特征的提取。我們可以假設(shè)已經(jīng)有黑客控制了某一臺(tái)機(jī)器,但是它試圖進(jìn)行橫向擴(kuò)散的時(shí)候,我們有一些模型可以識(shí)別這個(gè)主機(jī)的橫向移動(dòng)行為。
筆者認(rèn)為,世界上不存在100%能發(fā)現(xiàn)APT的方法。但是我們可以等待實(shí)施APT的團(tuán)隊(duì)犯錯(cuò),只要我們的縱深足夠的多,信息足夠不對(duì)稱,想要完全不觸碰我們所有的鈴鐺,絕對(duì)存在一定的困難。
甚至,攻擊者如果需要小心翼翼的避開所有的檢測(cè)邏輯,可能也會(huì)給對(duì)手一種心理上的震懾,這種震懾可能會(huì)延緩對(duì)手接近目標(biāo)的速度,拉長(zhǎng)時(shí)間。而在這個(gè)時(shí)間里,只要他犯錯(cuò),就輪到我們出場(chǎng)了。
前面所有的高標(biāo)準(zhǔn),包括高覆蓋、低誤報(bào),強(qiáng)制每一個(gè)告警跟進(jìn)到底,“掘地三尺”的態(tài)度,都是在等待這一刻。抓到一個(gè)值得敬佩的對(duì)手,那種成就感,還是很值得回味的。
所以,希望所有從事入侵檢測(cè)的安全同行們都能堅(jiān)持住,即使聽過無數(shù)次“狼來了”,下一次看到告警,依然可以用最高的敬畏心去迎接對(duì)手(告警虐我千百遍,我待告警如初戀)。
AI在入侵檢測(cè)領(lǐng)域的正確姿勢(shì)
最近這兩年,如果不談AI的話,貌似故事就不會(huì)完整。只不過,隨著AI概念的火爆,很多人已經(jīng)把傳統(tǒng)的數(shù)據(jù)挖掘、統(tǒng)計(jì)分析等思想,比如分類、預(yù)測(cè)、聚類、關(guān)聯(lián)之類的算法,都一律套在AI的帽子里。
其實(shí)AI是一種現(xiàn)代的方法,在很多地方有非常實(shí)際的產(chǎn)出了。以WebShell的文本分析為例,我們可能需要花很長(zhǎng)很長(zhǎng)的時(shí)間,才能把上千個(gè)樣本里隱含的幾十種樣本技術(shù)類型拆分開,又花更長(zhǎng)的時(shí)間去一一建設(shè)模型(是的,在這樣的場(chǎng)景下,特征工程真的是一個(gè)需要更長(zhǎng)時(shí)間的工作)。
而使用AI,做好數(shù)據(jù)打標(biāo)的工作,訓(xùn)練、調(diào)參,很快就能拿到一個(gè)實(shí)驗(yàn)室環(huán)境不那么過擬合的模型出來,迅速投產(chǎn)到生產(chǎn)環(huán)境上。熟練一點(diǎn)可能1-2個(gè)月就能做完了。
在這種場(chǎng)景下,AI這種現(xiàn)代的方法,的確能幾大的提高效率。但問題是,前文也提到過了,黑客的攻擊黑樣本、WebShell的樣本,往往極其稀缺,它不可能是完備的能夠描述黑客入侵的完整特征的。因此,AI產(chǎn)出的結(jié)果,無論是誤報(bào)率還是漏報(bào)率,都會(huì)受訓(xùn)練方法和輸入樣本的影響較大,我們可以借助AI,但絕對(duì)不能完全交給AI。
安全領(lǐng)域一個(gè)比較常見的現(xiàn)象是,將場(chǎng)景轉(zhuǎn)變成標(biāo)記問題,要難過于通過數(shù)學(xué)模型把標(biāo)記的解給求出來。此時(shí)往往需要安全專家先行,算法專家再跟上,而不能直接讓算法專家“孤軍奮戰(zhàn)”。
針對(duì)一個(gè)具體的攻擊場(chǎng)景,怎么樣采集對(duì)應(yīng)的入侵?jǐn)?shù)據(jù),思考這個(gè)入侵動(dòng)作和正常行為的區(qū)別,這個(gè)特征的提取過程,往往決定了模型最終的效果。特征決定了效果的上限,而算法模型只能決定了有多接近這個(gè)上限。
此前,筆者曾見過一個(gè)案例,AI團(tuán)隊(duì)產(chǎn)出了一個(gè)實(shí)驗(yàn)室環(huán)境效果極佳,誤報(bào)率達(dá)到1/1000000的WebShell模型,但是投放到生產(chǎn)環(huán)境里初期日均告警6000單,完全無法運(yùn)營(yíng),同時(shí)還存在不少漏報(bào)的情況。這些情況隨著安全團(tuán)隊(duì)和AI工程師共同的努力,后來逐漸地解決。但是并未能成功的取代原有的特征工程模型。
目前業(yè)界有許多產(chǎn)品、文章在實(shí)踐AI,但遺憾的是,這些文章和產(chǎn)品大多“淺嘗輒止”,沒有在真實(shí)的環(huán)境中實(shí)踐運(yùn)營(yíng)效果。一旦我們用前面的標(biāo)準(zhǔn)去要求它,就會(huì)發(fā)現(xiàn),AI雖然是個(gè)好東西,但是絕對(duì)只是個(gè)“半成品”。真正的運(yùn)營(yíng),往往需要傳統(tǒng)的特征工程和AI并行,也需要持續(xù)地進(jìn)行迭代。
未來必然是AI的天下,但是有多少智能,前面可能就要鋪墊多少人工。愿與同行們一起在這個(gè)路上繼續(xù)探索下去,多多交流分享。
【本文為51CTO專欄機(jī)構(gòu)“美團(tuán)點(diǎn)評(píng)技術(shù)團(tuán)隊(duì)”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過微信公眾號(hào)聯(lián)系機(jī)構(gòu)獲取授權(quán)】