捻亂止于河防——淺談企業(yè)入侵防御體系建設(shè)
【前言:噩夢(mèng)序章】
信息化時(shí)代對(duì)企業(yè)的信息安全威脅最嚴(yán)重的就是黑客入侵。由黑客入侵對(duì)企業(yè)帶來(lái)的危害大家自行百度,在此不贅述。
互聯(lián)網(wǎng)企業(yè)由于其業(yè)務(wù)特性,業(yè)務(wù)會(huì)向全互聯(lián)網(wǎng)用戶開(kāi)放,只要接入互聯(lián)網(wǎng)的人都可以訪問(wèn)到這個(gè)業(yè)務(wù),覆蓋全網(wǎng)用戶的同時(shí)又等于是給黑客暴露了攻擊面,一旦業(yè)務(wù)出現(xiàn)安全漏洞,黑客就會(huì)迅速入侵進(jìn)而對(duì)企業(yè)帶來(lái)災(zāi)難性的破壞。
傳統(tǒng)企業(yè)即使有信息化業(yè)務(wù),那也是在線下,覆蓋用戶有限(互聯(lián)網(wǎng)上的黑客很難接觸到),相對(duì)還算安全。但傳統(tǒng)企業(yè)也在互聯(lián)網(wǎng)化,這里或許又會(huì)經(jīng)歷一輪腥風(fēng)血雨。
騰訊安全中心早在2005年成立之初就開(kāi)始關(guān)注入侵防御體系建設(shè),經(jīng)過(guò)近十年的系統(tǒng)建設(shè)和運(yùn)營(yíng),也算小有一些血淚教育和經(jīng)驗(yàn)。筆者不揣淺陋,愿拋磚引玉,大家一起PK探討企業(yè)的入侵防御策略,共襄盛舉。
【啟示錄:捻亂止于河防】
木桶理論是信息安全的一個(gè)經(jīng)典理論,也就是說(shuō)防御要面面俱到,隨便漏掉一個(gè)點(diǎn)就可能導(dǎo)致全盤(pán)崩潰——所謂“千里之堤毀于蟻穴”是也。這也就造成了攻防雙方的不對(duì)等:攻方只需要找到防方一個(gè)破綻,就可以把防方打敗。有點(diǎn)類(lèi)似游擊戰(zhàn)術(shù):打得贏就打,打不贏就跑。這情景與清末的捻軍何其相似。
捻軍是清末的反政府武裝,主要戰(zhàn)斗模式是游擊,主力是馬隊(duì),遇到正規(guī)軍打得贏就打,打不贏就跑,馬隊(duì)跑得快,清軍步兵、洋槍隊(duì)根本追不上,搞得清政府很頭痛。連當(dāng)時(shí)剛剛打敗了太平天國(guó)的天下無(wú)敵的湘軍(湖南人打仗太厲害了,號(hào)稱(chēng)“無(wú)湘不成軍”)也拿捻軍沒(méi)有辦法。
后來(lái)湘軍參考明末將領(lǐng)孫傳庭對(duì)付流寇的辦法,以黃河為界,在重要位置步步設(shè)防,逐步推進(jìn),把捻軍趕到一個(gè)包圍圈里面,再集中優(yōu)勢(shì)兵力逼其決戰(zhàn)殲滅之。最終捻軍被河防策略消滅。

從捻軍的事例我們可以看到,對(duì)于這種攻防不對(duì)等的情況,防方要贏就要靠一個(gè)字:“控”——把對(duì)手控制在一個(gè)可控范圍,再用豐富的資源打敗他。這個(gè)思路就有點(diǎn)類(lèi)似xti9er在《如何建立有效的安全策略》中提到的“降維攻擊”。
回到企業(yè)入侵防御上來(lái),“控”的思路就是堅(jiān)壁清野步步為營(yíng)層層設(shè)防,讓黑客即使入侵進(jìn)來(lái)也是在我們可控的位置活動(dòng)。
一般而言,一個(gè)企業(yè)內(nèi)部網(wǎng)絡(luò)與外部網(wǎng)絡(luò)的交界是內(nèi)部員工的外網(wǎng)訪問(wèn)和生產(chǎn)環(huán)境的互聯(lián)網(wǎng)業(yè)務(wù)。前者是幾乎所有企業(yè)都有的(除非你的企業(yè)不讓員工上外網(wǎng)——咳,太不人道了),后者是有互聯(lián)網(wǎng)業(yè)務(wù)的公司才有。
內(nèi)部的外網(wǎng)訪問(wèn)是很大的安全風(fēng)險(xiǎn),這些非專(zhuān)業(yè)員工往往又沒(méi)有太高的安全意識(shí)。很多企業(yè)內(nèi)部就是因?yàn)楹诳褪褂? day甚至是N day漏洞進(jìn)行網(wǎng)頁(yè)掛馬或釣魚(yú)郵件攻擊淪陷的。而生產(chǎn)環(huán)境的互聯(lián)網(wǎng)業(yè)務(wù)講究快,需要敏捷開(kāi)發(fā)快速迭代,這個(gè)過(guò)程中往往容易出現(xiàn)安全漏洞,且易于被外部發(fā)現(xiàn)。黑客入侵到一臺(tái)服務(wù)器后就可以在生產(chǎn)環(huán)境內(nèi)網(wǎng)馳騁了。
只要我們重兵布防在這兩個(gè)位置,則大局可定。
大致的示意圖如下:

我們布防的位置和安全策略如下(只談主要的,其他不贅述):
以生產(chǎn)網(wǎng)的外部入口為例,很多年前騰訊就實(shí)施了嚴(yán)格的端口管控(不允許服務(wù)器的非業(yè)務(wù)端口對(duì)外網(wǎng)開(kāi)放),所以基本上這些年的安全漏洞和入侵事件都控制在了Web層。這樣我們就可以投入大量精力在Web層進(jìn)行入侵發(fā)現(xiàn)和防御。#p#
【對(duì)抗中成長(zhǎng):V的故事】
道哥在《中國(guó)黑客傳說(shuō)——游走在黑暗中的精靈》中描述了超級(jí)黑客V的故事。沒(méi)錯(cuò),今天的主角就是V。
筆者根據(jù)一些線索以及不愿意透露姓名的接近V的人士爆料推測(cè),V在烏云上的ID叫豬豬俠。翻看豬豬俠在烏云提交過(guò)的漏洞,可以看出這是一個(gè)頂尖高手。繼續(xù)爆料,他還有一個(gè)名字叫ring04h,很早就活躍在互聯(lián)網(wǎng)安全圈了(不熟悉的同學(xué)可以百度一下這個(gè)關(guān)鍵字),很多年前ring04h就給我們提交過(guò)漏洞。
當(dāng)然,以上只是基于福爾摩斯演繹法的推論,筆者不保證這個(gè)推論的正確性。
{第一場(chǎng)}開(kāi)源系統(tǒng)弱口令血案
2013年9月的某天凌晨,我們的流量監(jiān)控系統(tǒng)(對(duì)HTTP全流量進(jìn)行分析,發(fā)現(xiàn)異常的HTTP請(qǐng)求)發(fā)出警報(bào),某個(gè)網(wǎng)站存在WebShell通信,看到請(qǐng)求URL的第一反應(yīng)是nginx的解析漏洞(漏洞原理參見(jiàn)nginx文件類(lèi)型錯(cuò)誤解析漏洞)的利用。

應(yīng)急響應(yīng)團(tuán)隊(duì)立即排查,發(fā)現(xiàn)網(wǎng)站目錄出現(xiàn)了一個(gè)gif后綴的PHP WebShell,再利用nginx解析漏洞執(zhí)行。由于是gif后綴,一般情況下不會(huì)執(zhí)行,所以主機(jī)安全Agent沒(méi)有檢測(cè)這個(gè)“圖片”文件,幸好有縱深防御——在網(wǎng)絡(luò)流量特征檢測(cè)到了。同時(shí)服務(wù)器上的PHP的SafeMod為On,入侵者沒(méi)有執(zhí)行系統(tǒng)命令的權(quán)限。
檢討下,此次事件主要是某個(gè)業(yè)務(wù)擅自使用WordPress,而又沒(méi)有做安全加固導(dǎo)致(WordPress的后臺(tái)管理頁(yè)面對(duì)外網(wǎng)開(kāi)放且有弱口令,黑客利用WordPress的后臺(tái)權(quán)限上傳了這個(gè)WebShell文件)。雖然防線被突破,但是有重兵把守(主機(jī)安全Agent系統(tǒng)檢測(cè)主機(jī)層的可疑行為;流量監(jiān)控系統(tǒng)檢測(cè)網(wǎng)絡(luò)層的可疑流量)于后,以致滲透過(guò)程被及時(shí)發(fā)現(xiàn)阻斷。
于是接下來(lái)我們就開(kāi)始清理各種Web管理頁(yè)面、弱口令以及nginx安全配置檢測(cè)。過(guò)程中我們又發(fā)現(xiàn)幾個(gè)沒(méi)備案的WordPress,趕緊驅(qū)動(dòng)加固。具體按下不表。
此次事件從入侵者視角看,參見(jiàn)一次失敗的漫游騰訊內(nèi)網(wǎng)過(guò)程。
流量監(jiān)控系統(tǒng)的好處是對(duì)全HTTP請(qǐng)求進(jìn)行分析,只要規(guī)則得當(dāng),黑客利用漏洞的時(shí)候就會(huì)觸發(fā)警報(bào),有好多Web漏洞就是被我們的流量監(jiān)控系統(tǒng)發(fā)現(xiàn)并修復(fù)的。比如某些在線XSS攻擊平臺(tái)利用時(shí)會(huì)引入它域名下的JS,這個(gè)域名就是強(qiáng)關(guān)鍵字;再比如一些WebShell的HTTP通信模型。這個(gè)話題以后有機(jī)會(huì)再寫(xiě)。
{第二場(chǎng)}備份文件帶來(lái)的攻擊
2013年11月某天,主機(jī)安全Agent系統(tǒng)發(fā)出警報(bào),發(fā)現(xiàn)某臺(tái)服務(wù)器出現(xiàn)WebShell文件,我們的應(yīng)急響應(yīng)團(tuán)隊(duì)一看安全事件單嚇壞了,這不就是一個(gè)典型的PHPWebShell么:
主機(jī)安全Agent系統(tǒng)是運(yùn)行在服務(wù)器的一個(gè)程序,主要負(fù)責(zé)收集基礎(chǔ)信息(后臺(tái)對(duì)基礎(chǔ)信息分析發(fā)現(xiàn)安全風(fēng)險(xiǎn))和入侵行為發(fā)現(xiàn)。由于Web層入侵都會(huì)用到WebShell,所以我們把WebShell檢測(cè)做為第一道防線,一旦由于一些原因系統(tǒng)未能發(fā)現(xiàn),進(jìn)程/端口數(shù)據(jù)是第二道防線——比如Apache的屬主用戶執(zhí)行了命令,就是個(gè)典型的WebShell執(zhí)行命令特征。
話分兩頭。應(yīng)急響應(yīng)團(tuán)隊(duì)接到警報(bào)后趕緊登機(jī),關(guān)閉服務(wù)器外網(wǎng),然后開(kāi)始入侵檢查。
因?yàn)槭莄onfig_ucenter.php里面被改了,所以首先想到是discuz的后臺(tái)獲取WebShell漏洞(看來(lái)是個(gè)0day漏洞)。果然后來(lái)知道是因?yàn)闃I(yè)務(wù)把config_ucenter.php備份了一個(gè)config_ucenter.php.bak文件,導(dǎo)致配置文件里的UC_KEY泄漏。有了UC_KEY就可以給論壇添加管理員了,再通過(guò)那個(gè)0day漏洞,就可以直接入侵服務(wù)器。
全過(guò)程見(jiàn)入侵者的自述:又一次失敗的漫游騰訊內(nèi)網(wǎng)過(guò)程 。雖然被黑了有點(diǎn)臉上無(wú)光,不過(guò)連經(jīng)驗(yàn)豐富的豬豬俠都說(shuō)“騰訊在PHP安全領(lǐng)域的防護(hù)實(shí)力,當(dāng)屬?lài)?guó)內(nèi)第一”,這點(diǎn)還是很讓人欣慰。
檢討時(shí)間。此次事件主要是discuz的Web管理頁(yè)面對(duì)外網(wǎng)開(kāi)放(還是河防沒(méi)搞好),當(dāng)然也有文件備份不當(dāng)?shù)膯?wèn)題。接下來(lái)繼續(xù)清理遺漏的Web管理頁(yè)面,重點(diǎn)針對(duì)部署discuz的服務(wù)器進(jìn)行全方位加固。
{第三場(chǎng)}配置不當(dāng)產(chǎn)生安全風(fēng)險(xiǎn)
2013年12月某天,Kobin97反饋了我們某個(gè)discuz論壇的一個(gè)PHP文件源代碼可以下載到,導(dǎo)致泄漏UC_KEY(見(jiàn)這個(gè)漏洞報(bào)告)。discuz論壇泄漏了UC_KEY是會(huì)被拿到WebShell的,所以應(yīng)急團(tuán)隊(duì)趕緊處理。
在上次discuz出事后,我們開(kāi)始了大規(guī)模的排查和加固,某些業(yè)務(wù)在加固過(guò)程中誤把目錄 /uc_server/data/ 配置為不解析PHP,結(jié)果反而導(dǎo)致目錄下的PHP文件可以被下載到,UC_KEY泄漏。
萬(wàn)幸的是經(jīng)過(guò)驗(yàn)證,這個(gè)漏洞暫時(shí)拿不到WebShell。因?yàn)樵谏洗渭庸讨形覀円岩笏械膁iscuz的登錄頁(yè)面/admin.php禁止外網(wǎng)訪問(wèn),即使UC_KEY泄漏了,入侵者也很難進(jìn)一步滲透。下圖就是從非管理IP訪問(wèn)管理后臺(tái)被拒絕的截圖。

豬豬俠也發(fā)現(xiàn)了這個(gè)問(wèn)題,還精心設(shè)計(jì)了一個(gè)XSS攻擊試圖用有授權(quán)的人的瀏覽器來(lái)自動(dòng)獲取WebShell。不過(guò)被Kobin97報(bào)了漏洞之后我們就迅速修改了UC_KEY,豬豬俠的計(jì)劃落空了。參見(jiàn)豬豬俠自述又又一次失敗的漫游騰訊內(nèi)網(wǎng)過(guò)程。你們還有沒(méi)有看出什么破綻?
檢討時(shí)間。這次事件主要是在實(shí)施安全加固策略的過(guò)程中,對(duì)配置是否正確的情況缺乏審計(jì);同時(shí)還有流量監(jiān)控系統(tǒng)若發(fā)現(xiàn)PHP、JSP這種該解析的腳本被下載了,就應(yīng)該告警出來(lái)。
{第四場(chǎng)}安全策略失效帶來(lái)的問(wèn)題
在第二場(chǎng)后,我們的discuz論壇都進(jìn)行了安全加固,特別是在管理頁(yè)面做了訪問(wèn)IP限制,本來(lái)以為高枕無(wú)憂了,其實(shí)不然。
某天可能是因?yàn)椴呗曰貪L,某個(gè)discuz論壇管理頁(yè)面的訪問(wèn)IP限制失效了,正好管理員又有個(gè)弱口令,結(jié)果就給了豬豬俠可乘之機(jī)。
這個(gè)訪問(wèn)控制策略失效是被我們的Web漏洞掃描系統(tǒng)檢測(cè)到了的,但是在修復(fù)的過(guò)程中被豬豬俠掃到并利用——大家可以想象,你的業(yè)務(wù)有多少人24小時(shí)盯著,稍微出點(diǎn)疏忽就會(huì)出問(wèn)題。

然后就是利用discuz管理后臺(tái)的0day漏洞生成WebShell。有了前幾次的經(jīng)驗(yàn),這次豬豬俠比較謹(jǐn)慎,沒(méi)有進(jìn)行提權(quán)、端口掃描、漏洞掃描等大動(dòng)作,所以一直未被發(fā)現(xiàn)。參見(jiàn)豬豬俠的一次成功的漫游騰訊內(nèi)網(wǎng)過(guò)程。
又到了檢討時(shí)間。此次事件是訪問(wèn)IP限制策略失效再加上管理員存在弱口令導(dǎo)致。然后豬豬俠的一系列動(dòng)作比較輕,沒(méi)有觸發(fā)各種安全系統(tǒng)警報(bào)。
此次的關(guān)鍵節(jié)點(diǎn)還是在管理頁(yè)面限制措施失效的處理時(shí)間稍長(zhǎng)。對(duì)于高危漏洞,一定要立即處理,不可拖延;對(duì)抗高級(jí)滲透,除了已知入侵模式的黑名單模型,還要更進(jìn)一步使用白名單模型,依靠平時(shí)的網(wǎng)絡(luò)訪問(wèn)、運(yùn)維行為建立時(shí)間/行為/動(dòng)作模型,一旦出現(xiàn)不符合的情況就判定為異常事件——我們?cè)诤诵膮^(qū)域已經(jīng)開(kāi)始這樣做了。
{總結(jié)}
因?yàn)槲覀円呀?jīng)屏蔽了服務(wù)器的外網(wǎng)所有非業(yè)務(wù)端口,所以四次入侵都是從Web應(yīng)用過(guò)來(lái)的。雖然還是被黑客不同程度地獲取到部分權(quán)限,但是黑客的活動(dòng)范圍被控制在一個(gè)有限的區(qū)域(都是普通業(yè)務(wù)區(qū)),至少說(shuō)明河防大策略還是正確的。
我們可以看到,黑客們都對(duì)這種開(kāi)源的程序漏洞(如discuz、WordPress、phpwind等)研究得爐火純青,企業(yè)能不用就不用。
對(duì)于越來(lái)越多的互聯(lián)網(wǎng)Web業(yè)務(wù),一定要做好安全加固,簡(jiǎn)單口訣:“目錄默認(rèn)不可寫(xiě),可寫(xiě)目錄不解析,Web Server非root,管理頁(yè)面不對(duì)外”。對(duì)于企業(yè)來(lái)說(shuō),這個(gè)工作大部分是個(gè)系統(tǒng)工程問(wèn)題而不是安全技術(shù)問(wèn)題。
【后記:未完待續(xù)】
河防大計(jì)定下來(lái)后,要考慮對(duì)敵人的精準(zhǔn)打擊了——也就是在可控區(qū)域進(jìn)行縱深防御。
縱深防御就是要聯(lián)動(dòng)多個(gè)層面的安全系統(tǒng)層層設(shè)防,這樣即使哪個(gè)點(diǎn)被突破了還可以在其他層面發(fā)現(xiàn)和阻斷入侵。比如我們正在嘗試的PHP環(huán)境下的安全防御方案和多維度的入侵檢測(cè)。
我們需要始終記得,安全是一個(gè)整體。