近期XcodeGhost事件沸沸揚揚,大家都很關注此事的影響、后果和解決方案,可是這件事情的根源究竟是什么?還有沒有未被發現的其他類似安全隱患?未來如何防止同類攻擊的發生?本文作者是啟明星辰VP,資深安全人士,他試圖從應用開發者角度來剖析這一切。
先來看兩個事件回顧:
2004年,某著名網絡游戲公司遭到入侵,經過詳細排查后,攻擊者是通過滲透韓國的游戲開發商網絡,從而將后門植入該網絡游戲公司的服務器,受感染服務器高達數百臺。
2010年6月,一種新型的病毒被檢測出來,該病毒可以通過西門子公司的SIMATIC WinCC監控與數據采集(SCADA)系統滲透入鋼鐵、汽車、電力、運輸、 水利、化工、石油等核心工業領域,這就是著名的震網(Stuxnet)病毒。
(震網病毒)
上述兩個事件與XcodeGhost的相似之處在于,攻擊者都是利用了開發/設計/監控環境的安全漏洞,最終達成了對生產/消費環境的滲透。
入侵者利用哪些點進行攻擊?
我們知道,隨著廠商和用戶安全意識的提高,生產環境大量使用物理/邏輯隔離手段,而消費環境則可能使用嚴格的審核機制甚至完全封閉的生態環境, 這使得直接攻擊生產/消費環境的難度大幅度上升,而廠商和消費者往往也會產生自滿情緒,認為已經一勞永逸的解決了信息安全威脅。
但是攻擊者并不會按照防御者規定的方式作戰,他們總是能找到最容易突破的位置,采用一些事先無法想到的手段,突破禁制,達成目的。
不幸的是,在此次事件中,開發環境恰好是那個最容易被突破的環節。
一家應用軟件公司要想發布應用程序,必須要搭建開發環境,包括代碼編輯器、編譯器、調試器、模擬器、第三方庫、其他資源等等,如下圖所示:
程序員在自己的工作電腦上寫出代碼、通過編譯上傳到公司的服務器,進行數字簽名后,發布到應用市場(如APP Store或者Google Play等),在整個過程中,存在著多個可能被入侵者利用的點:
1、入侵者可以替換或者修改開發環境,使得應用程序中被加入非授權代碼,這就是本次XcodeGhost的攻擊原理。
2、入侵者也可以通過替換或修改第三方的庫或者組件,實現類似的功能。
例如,入侵者可以修改并發布一個游戲引擎,嵌入惡意代碼。
3、入侵者可以直接攻擊程序員的電腦,從而直接修改/替換特定的應用程序的代碼,這樣雖然沒有XcodeGhost的傳播范圍廣,惡意代碼卻會更加精準有針對性,也更難以被發現。
例如上文所說針對網絡游戲公司的攻擊。
4、入侵者可以盜取應用軟件公司的數字簽名證書,以及發布用的賬號,從而在官方的應用商店發布非授權的應用,或者利用應用軟件公司的證書來簽名企業應用等等。
5、入侵者也可以通過感染開發環境的其他資源,實現攻擊。
例如某大型銀行,因為開發者使用了從互聯網上下載的圖片作為資源,而本地的安全防御措施及管理措施都僅僅針對可執行文件,并沒有檢查該圖片資源文件,使得被感染圖片成功上傳到官網,導致了大規模的釣魚掛馬事件。
那么,為什么會出現以上的漏洞呢?
世界應該是完美的才對啊?抱歉,真實世界并非是完美無缺的。
1、移動應用開發成本大,安全標準讓路。
隨著移動互聯網的進一步升溫,大量公司涌入移動應用開發,各家應用供應商的競爭也非常激烈。應用軟件的開發工期和按時發布的壓力很大,在這種情況下,對安全的考量往往要為軟件功能和發布時間讓路。在良好的開發流程中,對軟件開發環境、測試及代碼審核、應用軟件的發布和管理都有較為嚴格的規定,但是嚴格的管理流程會帶來額外的成本開銷,在發布壓力較大的情況下,往往會在安全標準上做出讓步。
2、人才培養的缺失,危機暗伏
同時,由于移動互聯網行業發展速度太快,人才培養遠遠跟不上行業需求,部分缺少良好安全訓練的軟件工程師直接上崗,他們編寫的代碼存在大量的安全問題。部分問題可以通過測試修復bug解決,但是很多的漏洞隱藏在已經發布的軟件中。
例如現在的健康應用中,大多數都沒有認證校驗措施,未來這些數據如果用于醫療急救,一旦被篡改就可能造成嚴重的后果。
由于移動互聯網是新興行業,在過去的幾年中尚未成為黑色產業重點關注的區域,因此應用公司和開發人員也產生了移動互聯網安全問題不嚴重的心理 誤區,加上對封閉生態環境(如蘋果的應用商店)的迷信,一味依賴手機廠商提供的安全措施,造成了一旦廠商的安全措施被從其他方向繞過,就被勢如破竹地打穿所有防線的后果。
實際上,上一個十年的經驗告訴我們,任何一種獨立的安全措施都不能簡單地防范所有的安全威脅,必須是完整構建的安全體系才有能力和各種高級威脅進行對抗。這一點,微軟想必已經深有體會,但是蘋果和谷歌及其大量的應用供應商,還需要至少幾年的時間去慢慢學習。
除了本次暴露的XcodeGhost,還有沒有類似的其它安全隱患?
如前文所說,通過開發環境進行攻擊并非首創,而安卓的開發環境比蘋果更加復雜和開放 ,根據0xid西雅圖小組的跟蹤分析,在安卓的開發環境中同樣存在各種信息安全問題,有些甚至更加嚴重。
本次事件中,除了Xcode之外,Unity和 Cocos2dx這兩個游戲開發平臺,也受到了不同程度的污染,這就進一步影響到了安卓和Windows。
那么,未來如何防止同類攻擊的發生呢?
人的懶惰和僥幸心理是天性,因此,必須要采用嚴格的管理和規范來對抗它們,在國際標準ISO27001和SSE CMM中,均有對應用軟件開發環境和第三方組件使用的安全性要求,應用開發商應該要做到:
1、應該有嚴格的開發環境隔離措施。開發、測試和運行環境嚴格分開,經過授權的人才能訪問各個不同環境,并在其中進行完整性和一致性檢查。嚴控開發環境與互聯網的交互接口,采用合適的安全防御措施保護開發測試和運行環境。
2、對開發環境使用的軟件進行控制,確保均來自可信的來源。開發環境應使用正版軟件,并設置軟件白名單,禁止安裝白名單以外的應用。
3、向開發人員提供足夠的安全培訓。開發人員應該經過安全意識、安全技能、安全規章制度的培訓,從而有意識、有能力、有意愿寫出更加安全和健壯的代碼。
4、加強對代碼的審核和對應用的安全測試,確保其中沒有惡意的邏輯。通過在測試中增加安全性測試,以及對關鍵代碼進行評審,必要時委托第三方專業公司進行安全檢查,從而發現代碼中的疏忽或者是惡意的后門。
5、嚴格管理軟件發布的流程,并隨時監控在互聯網上流轉的應用,及時發現問題并及時處理。軟件發布應由專人管理,并進行審計記錄,保管好發布賬號和簽名證書,實時監控互聯網上流轉的應用鏡像,有可能的情況下通過軟件自動進行校驗,一旦發現問題及時的處置和報警,將損害降到最低。