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