從攜程事件給我們警示
從攜程事件給我們警示
你準(zhǔn)備好了嗎? 如果攜程事件發(fā)生在你身上,這個(gè)問(wèn)題怎么處理?有無(wú)應(yīng)對(duì)方案?怎樣快速找出攻擊的方式,方法? 有句話(huà)說(shuō)的好,常在河邊走,哪有不濕鞋。
程序是一波人一波人開(kāi)發(fā)的
國(guó)內(nèi)軟件行業(yè)人員流動(dòng)還是很頻繁的,程序是一波人一波人開(kāi)發(fā)的,有如擊鼓傳球,誰(shuí)最后接手爛在誰(shuí)手里誰(shuí)倒霉。 我們發(fā)現(xiàn)國(guó)內(nèi)的軟件業(yè)在重復(fù)做著同樣的工作,一次一次推倒重來(lái),自己開(kāi)發(fā)的,心里才有底,對(duì)于上一波人開(kāi)發(fā)的系統(tǒng),誰(shuí)也不能保證安全性。
我看到很多QQ群在轉(zhuǎn)發(fā)攜程事件,還有攜程內(nèi)部聊天紀(jì)錄以及電子郵件,都在幸災(zāi)樂(lè)禍,我想問(wèn)如果發(fā)生在你身上呢?
運(yùn)維不能靠天吃飯
你不能期望運(yùn)維不出事情,不出事,必有因果關(guān)系,種下因得到果。 很多企業(yè)的運(yùn)維,不出事就不會(huì)出事,出事一定會(huì)出大事。 要你拿出預(yù)案,將事故消滅在萌芽狀態(tài)。你的準(zhǔn)備工作做得多少?zèng)Q定了你故障的大小以及范圍。 出這樣的事故一定是平時(shí)積累,爆發(fā)只是個(gè)時(shí)間問(wèn)題。
應(yīng)對(duì)方案
從年從業(yè)我也被攻擊過(guò),遇到各種各樣的攻擊,常常是被挖到新公司,首先面臨的挑戰(zhàn)就是安全問(wèn)題。 我也總結(jié)一些經(jīng)驗(yàn),這里篇幅有限,不可能依依詳解,僅僅給你提供一個(gè)思路一個(gè)啟發(fā)。詳細(xì)請(qǐng)看我的網(wǎng)站相關(guān)文章http://netkiller.github.io/。
攜程代碼被刪除解決方案
WEB 服務(wù)器運(yùn)行用戶(hù)不能與代碼所有者用戶(hù)相同,因?yàn)橐坏¦EB服務(wù)器被攻陷將具有刪除權(quán)限。 所以代碼部署使用AAA用戶(hù),WEB服務(wù)器運(yùn)行使用BBB用戶(hù)。一旦WEB服務(wù)器被攻陷,用戶(hù)擁有BBB權(quán)限,而無(wú)法刪除AAA權(quán)限的文件。 這樣的設(shè)置,除了防止刪除文件,還能避免代碼注入。攻擊著更多是注入代碼,下載數(shù)據(jù)庫(kù),而非破壞性攻擊。 這樣設(shè)置給攻擊值制造了一定門(mén)檻,繼續(xù)攻擊,攻擊者需要提升權(quán)限才能得到修改與刪除權(quán)限。
攜程數(shù)據(jù)被刪除解決方案
-
在 APP應(yīng)用與數(shù)據(jù)庫(kù)間增加了API服務(wù)器,應(yīng)用程序通過(guò)API訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),API主要采用ORM關(guān)系對(duì)象映射技術(shù)為用戶(hù)提供接口。而不是讓APP通過(guò) SQL直接操作數(shù)據(jù)庫(kù)。APP需要提供用戶(hù)認(rèn)證,ACL控制(精確到方法),簡(jiǎn)單的說(shuō)AAA用戶(hù)只能從指定IP地址,訪(fǎng)問(wèn)指定類(lèi)與方法,甚至可能精確到方 法參數(shù)限制。
-
去掉Delete權(quán)限,只能通過(guò)更新?tīng)顟B(tài)刪除,這樣的缺點(diǎn)是會(huì)產(chǎn)生大量的臟數(shù)據(jù)。及時(shí)清理也問(wèn)題不大。
-
控制惡意修改,通過(guò)觸發(fā)器控制某些字段被惡意專(zhuān)改。參考 數(shù)據(jù)庫(kù)記錄安全解決方案》http://netkiller.github.io/journal/mysql.security.html
自動(dòng)化運(yùn)維
-
自動(dòng)化安裝,快速將標(biāo)準(zhǔn)的服務(wù)器,部署為指定功能的服務(wù)器,參考 https://github.com/oscm/shell
-
自動(dòng)化發(fā)布,這個(gè)非常重要,目前國(guó)內(nèi)很多代碼發(fā)布仍然采用人工方式(處在時(shí)期時(shí)代)。自動(dòng)化發(fā)布能瞬間部署,這點(diǎn)對(duì)快速搶修非常重要。參考 https://github.com/oscm/devops
Active-Active 災(zāi)備
異地災(zāi)備是非常奢侈的,不是每個(gè)企業(yè)都能承擔(dān)的起,但是雙活災(zāi)備系統(tǒng)是必須的。
怎樣快速找出攻擊的方式
以 PHP為例,如果代碼被刪除。我會(huì)第一時(shí)間在php.ini中禁用刪除函數(shù),然后 grep -r unlink /www/example.com/xxx.example.com 找出具備刪除功能程序。然后在web日志中找到該程序調(diào)用的url被什么時(shí)間什么IP地址調(diào)用過(guò),最后禁用該IP地址。 如果Java被二進(jìn)制植入就比較麻煩,無(wú)法直接找出,首要做的是修改代碼所有者,不能與Tomcat啟動(dòng)用戶(hù)相同。 另外我的自動(dòng)發(fā)布程序能夠每次發(fā)布時(shí),看到那些文件被修改,那些文件是新增,發(fā)布程序與版本庫(kù)為基準(zhǔn),刪除新增的文件。通過(guò)觀看那些文件被刪除,瞬間找到 惡意腳本。
延伸閱讀 《PHP 安全與性能》http://netkiller.github.io/journal/security.php.html
文件與代碼監(jiān)控
代碼被植入,刪除修改,怎樣能第一時(shí)間知道。而不是亡羊補(bǔ)牢。延伸閱讀 《植入式攻擊入侵檢測(cè)解決方案》http://netkiller.github.io/journal/security.implants.html
就談到此吧!