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