近期,在由Freebuf主辦的CIS2022大會上,字節(jié)跳動服務(wù)器安全效果負(fù)責(zé)人鹿恩哲做了《字節(jié)跳動云負(fù)載防護(hù)最佳實(shí)踐》的主題分享,在分享中,鹿恩哲從字節(jié)跳動內(nèi)部實(shí)踐出發(fā),分享字節(jié)跳動是如何面對復(fù)雜業(yè)務(wù)環(huán)境和部署環(huán)境進(jìn)行全負(fù)載安全防護(hù),并如何通過數(shù)據(jù)優(yōu)化、告警歸并和關(guān)聯(lián)溯源等方式解決海量負(fù)載下的安全運(yùn)營壓力。

云負(fù)載防護(hù)面臨的威脅
在字節(jié)跳動,有大量不同需求的業(yè)務(wù)部署在物理機(jī)、虛擬機(jī)、容器、Serverless等不同負(fù)載平臺上。經(jīng)研究發(fā)現(xiàn),不同的負(fù)載存在特異化的安全威脅。針對物理機(jī)和虛擬機(jī)的以傳統(tǒng)的反入侵、合規(guī)、風(fēng)險(xiǎn)感知為主;在容器部分的負(fù)載中,引入的鏡像安全,集群層面反入侵也層出不窮;到了Serverless層,應(yīng)用內(nèi)的高權(quán)限API調(diào)用難以從主機(jī)/容器層進(jìn)行區(qū)分,而較短的生命周期也帶來事后溯源與排查的困難。
恩哲提到,安全所能支配的資源往往是有限的,企業(yè)不可能為了不同負(fù)載用不同的團(tuán)隊(duì)進(jìn)行任務(wù)分化,而且入侵往往具有關(guān)聯(lián)性,需要將多種不同的workload結(jié)合在一起處理和分析,所以面對上述不同方式的威脅,火山引擎結(jié)合字節(jié)跳動內(nèi)部實(shí)踐經(jīng)驗(yàn),研發(fā)了一體化的云負(fù)載防護(hù)平臺CWPP。
據(jù)介紹,火山引擎CWPP源自字節(jié)跳動內(nèi)部的主機(jī)安全解決方案Elkeid。Elkeid在字節(jié)跳動內(nèi)部解決了千萬級容器的反入侵與溯源需求,其采集能力模塊已經(jīng)對外開源(https://github.com/bytedance/Elkeid)。
CWPP從設(shè)計(jì)之初便遵循為物理機(jī)、虛擬機(jī)、容器和無服務(wù)器工作負(fù)載提供一致的保護(hù)和可見性的原則,將主機(jī)安全、容器安全、RASP、阻斷與響應(yīng)能力、追溯能力,通過插件的方式整合在了一個agent上,同時字節(jié)內(nèi)部跨地域跨云的部署需求,也催生了CWPP對多云和混合云下的支持能力。

火山引擎CWPP設(shè)計(jì)思路
如圖所示,火山引擎CWPP將多種負(fù)載的保護(hù)能力集成在了一套原生架構(gòu)上,并開發(fā)了專用的高速策略引擎和海量機(jī)器下的服務(wù)發(fā)現(xiàn)能力,這種整合降低了整體運(yùn)維的壓力。
CWPP 數(shù)據(jù)收集
不同負(fù)載,均需要采集各種來源和需求的數(shù)據(jù),CWPP對主機(jī)/虛擬機(jī)/容器的采集均落在內(nèi)核層。通過對比用戶態(tài)的方案,內(nèi)核層采集帶來的好處不只是更豐富的數(shù)據(jù)采集能力,更低的性能開銷,還對容器有天然支持。
同時,在應(yīng)用層還是會遇到類似SSRF/RCE/SQL注入等針對應(yīng)用層的入侵,因此我們開發(fā)了火山引擎Elkeid RASP。Elkeid RASP是火山引擎云安全團(tuán)隊(duì)自研的一種應(yīng)用安全防御技術(shù),通過對應(yīng)用運(yùn)行時植入探針,來采集運(yùn)行時的關(guān)鍵信息,并分析運(yùn)行時行為產(chǎn)生及時告警。
通過下圖可以看到左邊是Elkeid RASP在端上數(shù)據(jù)采集時的生態(tài)位,針對應(yīng)用層本身進(jìn)行防護(hù)。從右邊可以看到,Elkeid RASP是端上agent的一個插件,它會負(fù)責(zé)對選定的服務(wù)進(jìn)行動態(tài)注入RASP probe,支持跨容器的服務(wù)監(jiān)控和管理。而RASP probe則在運(yùn)行時提供Hook信息上報(bào),熱補(bǔ)丁,阻斷訪問等操作。火山引擎 Elkeid RASP 同時支持在多種語言環(huán)境下的使用,基本可滿足大部分公司內(nèi)的后臺服務(wù)。

在云原生時代,容器本身的利用是一方面,Kubenetes集群本身的利用是另一個新增的暴露面。Elkeid RASP因此利用Kubenetes原生的audit log數(shù)據(jù),通過日志采集層接入策略引擎,來編寫和分析出安全事件或者威脅風(fēng)險(xiǎn),進(jìn)而提供給安全工程師研判分析。
CWPP 告警和策略
在收集數(shù)據(jù)之后,撰寫對應(yīng)的策略并對識別出的告警信息進(jìn)行及時運(yùn)營是下一步的重點(diǎn):
1. 首先是告警本身的上下文追加,也就是行為序列檢測。如下圖,三個信息本身都是不具備顯著風(fēng)險(xiǎn),但組合在一起,形成基于背景的行為序列,這個行為序列本身就具備一定風(fēng)險(xiǎn),則需要告警。

2. 針對長期駐留的二進(jìn)制,CWPP構(gòu)建了云查殺能力。通過可疑二進(jìn)制扔到云端,利用多引擎進(jìn)行靜態(tài)檢測,并在動態(tài)沙箱內(nèi)真實(shí)執(zhí)行樣本以觀察分析行為,用更豐富的規(guī)則和數(shù)據(jù)來判斷樣本是否為惡意樣本。目前,云查殺在字節(jié)內(nèi)部已經(jīng)抓獲多起來自內(nèi)外隱蔽入口的惡意二進(jìn)制。
3. 火山引擎 CWPP 通過自研存儲層實(shí)現(xiàn)對原始數(shù)據(jù)存儲的低成本存儲和高效查詢,該方案可以支持PB級原始數(shù)據(jù)的秒級查詢,當(dāng)產(chǎn)生安全告警后,CWPP 溯源引擎會嘗試通過將告警與原始數(shù)據(jù)關(guān)聯(lián)查詢,以達(dá)到還原現(xiàn)場的能力。
CWPP 告警案例
在今年的一起 Java RCE Alert 告警引起的應(yīng)急中,攻擊者從邊緣機(jī)器進(jìn)來,發(fā)現(xiàn)任意文件讀取和ssrf漏洞可利用后,進(jìn)行了盲打,找到了一個jenkins集群下馬。在迅速的CWPP告警和阻斷后,依然不斷更新方法和目標(biāo),進(jìn)行了多次對抗和攻擊嘗試。在CWPP提供了精準(zhǔn)的告警信息后,運(yùn)營人員根據(jù)自動關(guān)聯(lián)事件排查其它告警,迅速定損止損,并使用CWPP平臺快速下發(fā)RASP防護(hù),將捕獲的運(yùn)行時告警實(shí)時上報(bào),通過CWPP強(qiáng)大的告警溯源能力和處置能力有效解決以上問題。

據(jù)了解,作為物理機(jī)、虛擬機(jī)、容器和無服務(wù)器工作負(fù)載提供一致的保護(hù)和可見性的安全產(chǎn)品,火山引擎CWPP 未來會持續(xù)結(jié)合整體網(wǎng)絡(luò)環(huán)境,以及字節(jié)跳動內(nèi)部實(shí)踐、技術(shù)創(chuàng)新,為企業(yè)用戶提供更為全面的主機(jī)安全解決方案。