傳統(tǒng)企業(yè)上云往往從購買云主機(jī)資產(chǎn)開始, 而安全風(fēng)險(xiǎn)也隨之而來。云主機(jī)自身面臨多種多樣的安全問題,如主機(jī)可能被嘗試暴力破解,被種植各種病毒木馬軟件,甚至被加密勒索。主機(jī)所承載的業(yè)務(wù),也可能成為攻擊目標(biāo),比如客戶網(wǎng)站可能被注入網(wǎng)站后門。即使沒有被攻擊,主機(jī)系統(tǒng)、系統(tǒng)應(yīng)用所存在的安全漏洞也構(gòu)成潛在的安全風(fēng)險(xiǎn)。
為了保障客戶的主機(jī)安全,百度智能云構(gòu)建了主機(jī)安全防護(hù)系統(tǒng)(HOSTEYE)。HOSTEYE目前覆蓋大部分百度智能云虛擬主機(jī),為客戶提供資產(chǎn)清點(diǎn)、安全基線檢查、登錄管理、惡意文件查殺、網(wǎng)站后門查殺等多項(xiàng)安全防護(hù)功能,有效保障客戶云主機(jī)安全。本文將與大家分享HOSTEYE系統(tǒng)在設(shè)計(jì)與實(shí)現(xiàn)過程中的一些思考。
在引入云端概念的基礎(chǔ)上,我們對(duì)系統(tǒng)的數(shù)據(jù)流動(dòng)模型做了新的定義。系統(tǒng)的數(shù)據(jù)可以簡單分類為安全信息和安全策略。安全信息是從客戶端采集,向云端流動(dòng)的。比如某個(gè)虛機(jī)在某個(gè)時(shí)刻被某個(gè)惡意IP嘗試爆破,某個(gè)虛機(jī)在某個(gè)時(shí)刻發(fā)現(xiàn)惡意木馬,又或者某個(gè)主機(jī)在某個(gè)時(shí)刻發(fā)現(xiàn)有弱密碼。這些都可以認(rèn)為是安全信息。
主機(jī)安全客戶端(Hosteye Agent)部署于幾乎所有的百度智能云虛擬主機(jī)和部分物理機(jī)。伴隨著百度智能云的迅速成長,HOSTEYE需要解決容量問題。HOSTEYE系統(tǒng)采用事件驅(qū)動(dòng)的高性能IO復(fù)用服務(wù)器 + 高可用消息隊(duì)列 + 云端邏輯處理 的模型來解決這個(gè)問題,這也是很多大型互聯(lián)網(wǎng)系統(tǒng)的基本模型。在具體的實(shí)現(xiàn)過程中,以下兩點(diǎn)值得注意:
第一,Agent與Server端的通信是經(jīng)過加密的。在Server端處理消息解密是個(gè)CPU密集型任務(wù),特別是在系統(tǒng)客戶端較多、消息較多的場(chǎng)景下,經(jīng)常會(huì)打滿服務(wù)端CPU??紤]到消息加解密任務(wù)與業(yè)務(wù)邏輯相對(duì)獨(dú)立,我們將加解密任務(wù)與業(yè)務(wù)邏輯剝離開來,抽成獨(dú)立的功能模塊,并將其單獨(dú)部署。這種方式,為使用硬件加速消息加解密也提供了可能。第二,保證Agent與Server的通信有序。安全事件往往帶有時(shí)間戳,定義了事件間的先后順序,對(duì)安全策略分析非常關(guān)鍵。
由于使用了消息隊(duì)列,消息被打散分發(fā)至多個(gè)隊(duì)列,而多個(gè)隊(duì)列的消費(fèi)能力不同,可能導(dǎo)致安全事件歸檔時(shí)時(shí)間亂序。在使用消息隊(duì)列時(shí),HOSTEYE系統(tǒng)通過一致哈希等算法,保證同一客戶端消息分發(fā)到指定隊(duì)列,并保證同一客戶端消息被同一消費(fèi)者消費(fèi)。
HOSTEYE系統(tǒng)的目標(biāo)是Agent在為客戶提供安全服務(wù)的同時(shí),不干擾客戶業(yè)務(wù)的正常運(yùn)行。這其中最首要的內(nèi)容,就是占用極少的主機(jī)資源,如CPU/內(nèi)存/磁盤IO等。另一方面,HOSTEYE系統(tǒng)為客戶提供豐富的主機(jī)安全防護(hù)功能,覆蓋主機(jī)風(fēng)險(xiǎn)發(fā)現(xiàn)、入侵檢測(cè)、安全審計(jì)等各個(gè)方面。某些功能,比如惡意文件查殺,需要掃描客戶文件,是資源密集型任務(wù)。
那么,如何同時(shí)滿足功能豐富、資源占用少的需求呢?HOSTEYE系統(tǒng)從四方面考慮,構(gòu)建一個(gè)輕量級(jí)的客戶端Agent。首先是從整體設(shè)計(jì)的角度,將負(fù)載上移。系統(tǒng)將客戶端較重的任務(wù),如文件掃描等,從客戶端轉(zhuǎn)移到云端,將更多的計(jì)算任務(wù)放在云端處理。
其次是做到功能可伸縮。每一個(gè)功能點(diǎn)在客戶端實(shí)現(xiàn)為一個(gè)可動(dòng)態(tài)加載/卸載的功能模塊,如登錄管理模塊、網(wǎng)站后門查殺模塊等??蛻艨梢酝ㄟ^配置功能策略,選擇適合于自己場(chǎng)景的功能集合;客戶端按照功能策略,加載不同的功能集合。通過這種方式,客戶端不必加載全部功能集合,負(fù)載進(jìn)一步減小。
第三是主動(dòng)型資源控制。在客戶端負(fù)載確定的情況下,通過主動(dòng)控制資源消耗,將客戶端資源限定在一定范圍內(nèi),比如單核5%以內(nèi)。具體實(shí)現(xiàn)時(shí),在客戶端實(shí)現(xiàn)一個(gè)資源主控線程,監(jiān)控其他任務(wù)線程的資源使用狀況,如果任務(wù)線程出現(xiàn)CPU占用過高,則主動(dòng)發(fā)送命令讓任務(wù)線程暫停任務(wù),從而降低對(duì)系統(tǒng)CPU的占用??梢砸?a target="_blank">信號(hào)量作為命令的實(shí)現(xiàn)方式,主線程發(fā)送自定義信號(hào)量,而任務(wù)線程需要在初始化時(shí)注冊(cè)該信號(hào)量的回調(diào)函數(shù)。
第四則是被動(dòng)型的資源控制。當(dāng)客戶端因?yàn)槟承┓穷A(yù)期的問題,導(dǎo)致客戶端進(jìn)程CPU長時(shí)間100%或者內(nèi)存占用持續(xù)超過設(shè)定閾值,則可以將客戶端進(jìn)程退出。這樣做的首要目的是保護(hù)客戶業(yè)務(wù)不被影響??蛻舳吮;?,指的是保證客戶端進(jìn)程持續(xù)在線,從而能夠與后端正常通信,保證系統(tǒng)功能的正常運(yùn)行。幾乎所有客戶端軟件,當(dāng)其運(yùn)行于多種多樣的客戶主機(jī)環(huán)境時(shí),都可能碰到各種問題導(dǎo)致客戶端進(jìn)程退出,從服務(wù)端視角看就是客戶端離線。
HOSTEYE系統(tǒng)在運(yùn)維過程中,多次碰到客戶主機(jī)環(huán)境異常導(dǎo)致的客戶端退出問題,也碰到過客戶誤操作導(dǎo)致誤殺客戶端進(jìn)程。客戶端也可能自行退出,比如上文提到的因資源使用超標(biāo)導(dǎo)致的退出。因?yàn)榭蛻舳瞬渴鹩诳蛻糁鳈C(jī)環(huán)境,當(dāng)客戶端離線時(shí),運(yùn)維同學(xué)很難及時(shí)得到客戶授權(quán)去登錄客戶主機(jī)查看問題;客戶端離線場(chǎng)景下,從后端恢復(fù)服務(wù)也非常困難。因此,客戶端?;罘浅V匾?。
常見的?;钏悸贩浅:唵?,就是重啟客戶端進(jìn)程。但這種方案非常粗暴。假設(shè)某個(gè)客戶端軟件存在內(nèi)存泄露問題,當(dāng)它自行崩潰或者被系統(tǒng)主動(dòng)殺掉后,若重復(fù)拉起,對(duì)系統(tǒng)還會(huì)造成影響。在很多場(chǎng)景下,簡單的無休止重啟進(jìn)程并沒有什么收益,反而可能對(duì)客戶的業(yè)務(wù)造成持續(xù)性影響。
評(píng)論