Android平臺(tái)中的安全編程
CERT安全編程團(tuán)隊(duì),隸屬于卡內(nèi)基梅隆大學(xué)軟件工程學(xué)院,最近發(fā)布了Android平臺(tái)上Java應(yīng)用的安全編程指南。
CERT在該領(lǐng)域已經(jīng)有所積累,并且在2013年發(fā)布CERT Java安全編程規(guī)范,后來(lái)出版Java編程指南:可靠安全編程的75條建議一書,該Android指南是對(duì)以上工作成果的拓展和延伸。所以,在新版Android編程規(guī)范和指南中,一部分是參照已有的Java規(guī)范指南,當(dāng)然也少不了與Android相關(guān),致力于解決移動(dòng)相關(guān)問(wèn)題的新規(guī)則。
Lori Flynn是發(fā)起CERT Android編程規(guī)范和指南的研究人員之一,據(jù)她所說(shuō),“其他地方也存在這樣的Android安全編程建議,但是我們發(fā)現(xiàn)這些建議都不完整并且分散在網(wǎng)絡(luò)的各個(gè)角落。”CERT研究人員采用以下三種方式制定了新版Android編程規(guī)范與指南:
- 挖掘CERT已有的安全編程規(guī)范;
- 研究已有漏洞數(shù)據(jù)庫(kù),包括國(guó)土安全部的國(guó)家漏洞數(shù)據(jù)庫(kù)等;
- 研究目前與安全相關(guān)的文獻(xiàn),比如,研究論文、在線文章以及安全會(huì)議演講等。
所有規(guī)范和指南都可以在CERT Wiki上獲取。每條記錄以簡(jiǎn)要概述開頭,然后描述此條規(guī)范所要解決的安全問(wèn)題,并且包括違規(guī)代碼案例。Wiki中還提供了基于嚴(yán)重程度的評(píng)分、漏洞被惡意使用的可能性,以及如果在代碼中發(fā)現(xiàn)漏洞,修復(fù)漏洞的成本等。
InfoQ聯(lián)系了Lori Flynn,并針對(duì)CERT Android安全編程規(guī)范和指南采訪了她。Lori目前在CERT的工作不僅包括完善新版安全編程規(guī)范,還包括對(duì)移動(dòng)應(yīng)用進(jìn)行組合性靜態(tài)分析,檢查是否 符合Android平臺(tái)的數(shù)據(jù)流規(guī)則。她工作經(jīng)歷豐富,包括網(wǎng)絡(luò)安全研究,基于標(biāo)準(zhǔn)的安全分析,以及合作開發(fā)了一種檢測(cè)多態(tài)程序的新型靜態(tài)分析方法,并且 取得了專利。Flynn在圣克魯斯獲得了加利福尼亞大學(xué)的計(jì)算機(jī)科學(xué)博士學(xué)位,她的研究方向是移動(dòng)自組網(wǎng)絡(luò)的安全多播路由協(xié)議。
Lori,您能簡(jiǎn)要介紹一下Android安全編程規(guī)范和指南的目標(biāo)受眾有哪些嗎?
我們制定的Android安全編程規(guī)范和指南目前主要面向使用Java語(yǔ)言的Android應(yīng)用開發(fā)人員。但是,我們也在著手制定適用于基于底層 (非Java)語(yǔ)言如C和C++所開發(fā)應(yīng)用的安全規(guī)范。我們的目標(biāo)是幫助開發(fā)人員構(gòu)建可靠安全的系統(tǒng),但是這些規(guī)范和指南對(duì)實(shí)現(xiàn)其他質(zhì)量特性如可靠性也大 有裨益。
所有希望保護(hù)客戶系統(tǒng)免受危害的組織或個(gè)人,在其開發(fā)人員遵循規(guī)則和指南并產(chǎn)出安全代碼后,都會(huì)從中受益。金融、衛(wèi)生和防御系統(tǒng)都必須小心保護(hù)其應(yīng) 用所處理的信息。有些應(yīng)用處理的數(shù)據(jù)非常敏感——比如,用戶的信用卡信息、位置、短信、聯(lián)系方式和照片。除了對(duì)用戶造成潛在傷害外,非安全代碼可能會(huì)使處 于金融風(fēng)險(xiǎn)中的開發(fā)人員走上法庭,也可能使整個(gè)公司失去公眾信任(和導(dǎo)致銷售損失),或?qū)е吕щy局面,使給公眾造成不安全印象的單應(yīng)用銷售乏力。
總而言之,知曉Android安全編程規(guī)范和指南,不論對(duì)于大型組織還是獨(dú)立應(yīng)用開發(fā)者都會(huì)有所幫助。軟件開發(fā)管理者、軟件需求方,或者其他軟件開 發(fā)和需求專家可以將安全編程規(guī)范作為禁止性需求的參考。教育工作者也可以通過(guò)該指南教會(huì)學(xué)生安全開發(fā)Android應(yīng)用的方法。
據(jù)您所知,移動(dòng)相關(guān)人員在碰到應(yīng)用安全問(wèn)題時(shí)面臨的主要挑戰(zhàn)是什么?在移動(dòng)領(lǐng)域,您是否知道某些特定安全相關(guān)問(wèn)題?
除了已知的公認(rèn)安全編程問(wèn)題以及規(guī)范和指南給出的修復(fù)方法外,無(wú)法有效把控應(yīng)用的數(shù)據(jù)去向也是我們面臨的挑戰(zhàn)之一。信息泄露如此泛 濫,Android應(yīng)用之間的相互影響是主要原因。我們目前正在研發(fā)靜態(tài)分析工具,用于檢測(cè)和消除這些漏洞。有了這些工具,用戶——包括個(gè)人和組織——將 更有信心解決部分應(yīng)用的數(shù)據(jù)泄露問(wèn)題。然而,盡管我們目前的工作有效促進(jìn)了安全分析的發(fā)展,但是還是無(wú)法解決底層代碼或反射面臨的安全問(wèn)題。數(shù)據(jù)流安全問(wèn) 題同樣非常嚴(yán)重,所以有許多工業(yè)界和學(xué)術(shù)界的研究人員在這方面傾注心血。
另一個(gè)問(wèn)題是可用性。實(shí)際上在我們深入分析數(shù)據(jù)流時(shí),應(yīng)用需要給用戶展現(xiàn)對(duì)應(yīng)選項(xiàng),還得讓用戶(開發(fā)人員用戶排除在外)容易明白這些選項(xiàng)的意義。Adrienne Porter Felt(Google)已經(jīng)發(fā)表了若干非常優(yōu)秀的研究論文,分析了用戶界面安全問(wèn)題并給出了修復(fù)建議。她的工作涉及面向開發(fā)人員的可用性問(wèn)題,比如與權(quán)限相關(guān)的不恰當(dāng)API,可能導(dǎo)致正常開發(fā)人員的權(quán)限過(guò)大,進(jìn)而被惡意應(yīng)用利用。
Android安全還面臨另一個(gè)問(wèn)題,在Google修復(fù)Android暴露的安全問(wèn)題后,因?yàn)楦鞣N原因,移動(dòng)運(yùn)營(yíng)商可能在很長(zhǎng)時(shí)間后才將安全更新推送給用戶。這就導(dǎo)致在這段時(shí)間內(nèi),與應(yīng)用相關(guān)的數(shù)據(jù)將面臨巨大的風(fēng)險(xiǎn)。
遵循Android安全編程規(guī)范和指南,對(duì)應(yīng)用有哪些好處?您有沒(méi)有這方面的案例,遵循指南后,應(yīng)用能夠避免以前遇到的安全問(wèn)題?
如果我們能夠嚴(yán)格遵守Android安全編程規(guī)范和指南,數(shù)據(jù)和系統(tǒng)會(huì)更安全。舉個(gè)例子吧,DRD00-J禁止將敏感數(shù)據(jù)保存到SD卡中,因?yàn)槠渌麘?yīng)用可以讀取SD卡,DRD01-J限制內(nèi)容提供者中敏感數(shù)據(jù)的權(quán)限等。Skype的Android應(yīng)用曾經(jīng)出現(xiàn)過(guò)一個(gè)漏洞,該應(yīng)用將聯(lián)系信息和個(gè)人用戶信息保存在未加密數(shù)據(jù)庫(kù)中,并且沒(méi)有實(shí)施權(quán)限控制。如果應(yīng)用遵守DRD01-J就可以避免該問(wèn)題。
為了改善語(yǔ)言的安全現(xiàn)狀,SCI(Secure Coding Initiative)發(fā)起了開發(fā)編程語(yǔ)言國(guó)際規(guī)范的工作。該規(guī)范致力于防范代碼漏洞,并充分利用在研發(fā)CERT安全編碼規(guī)范和一致性測(cè)試中所收集的信息。
您對(duì)應(yīng)用CERT安全編程規(guī)范和指南有哪些建議方法,工具、流程或其他方法都可以?感興趣的開發(fā)人員或組織要如何開始呢?
我建議開發(fā)人員首先通讀我們的技術(shù)報(bào)告,移動(dòng)源碼安全分析實(shí)驗(yàn)室:Java和Android安全編程規(guī)則和分析,然后瀏覽Android安全編程首頁(yè)。我們打算創(chuàng)建單獨(dú)的CERT編程規(guī)范,就像其他CERT安全編程規(guī)范一樣可以通過(guò)CERT編程規(guī)范Wiki主 頁(yè)訪問(wèn)。該首頁(yè)概述了我們目前在研發(fā)Android安全編程規(guī)范方面的工作:分析(適用性)和擴(kuò)展已有Java規(guī)范;分析(適用性)和擴(kuò)展Java指南, 雖然該指南還在制定過(guò)程中;制定面向Android的安全編程規(guī)范,但該規(guī)范并不一定只針對(duì)Java語(yǔ)言。查看出現(xiàn)在首頁(yè)中的三個(gè)主題鏈接,這是 Android安全編程規(guī)范制定中的主要課題。
接下來(lái),我建議開發(fā)人員瀏覽一遍DRD規(guī)范和指南,并考慮如何將它們應(yīng)用到應(yīng)用編程中。然后,我建議大家閱讀Java CERT Oracle安全編程規(guī)范(Addison-Wesley Professional, 2011)中適用于Android的Java規(guī)范,包括Wiki,關(guān)注該書相關(guān)的主題。這些規(guī)則是安全應(yīng)用必須遵守的,這也是將其放在指南前面的原因。讀完規(guī)則后,以同樣方式閱讀Java編程指南:可靠安全編程的75條建議(Addison-Wesley Professional,2013)。雖然我們不一定能夠立即將書中列出的規(guī)范和指南應(yīng)用到工作中,但是這些知識(shí)精華會(huì)印入我們的腦海,當(dāng)開發(fā)應(yīng)用需要 用到這些規(guī)范和指南時(shí),我們可以再仔細(xì)查看。另外我們值得做的是訂閱安全編程簡(jiǎn)報(bào),LinkedIn上的安全編程討論,還有安全編程wiki中的提醒,當(dāng)增加新規(guī)范和指南時(shí)會(huì)立即提醒。這些渠道有助于開發(fā)人員及時(shí)知曉安全方面的修復(fù)程序。
您在Android安全編程規(guī)范方面的工作完成了嗎?或是您有沒(méi)有設(shè)想將來(lái)涉及其他領(lǐng)域?
我們?cè)贏ndroid安全編程指南方面的工作還在繼續(xù)。另一個(gè)我們特別想研究的領(lǐng)域是分析CERT安全編程指南在基于C和C++的Android應(yīng) 用中的適用性。我們已經(jīng)有了初步的分析,但是要檢驗(yàn)Android底層編程接口如何影響已有編程規(guī)則的適用性,還要付出更多努力。同時(shí),我們也會(huì)完善應(yīng)用 于反射的初步規(guī)則和指南。
你們的團(tuán)隊(duì)還有其他類似的項(xiàng)目嗎?
我們的CERT安全編程倡議(SCI)已 經(jīng)為C、C++、Java和Perl制定了安全編程規(guī)范,其中一些規(guī)范已經(jīng)被像Cisco和Oracle這樣的企業(yè)在公司范圍內(nèi)采用。我們鼓勵(lì)開發(fā)人員以 及其他使用這些語(yǔ)言工作的組織使用我們的安全編程規(guī)范,這將會(huì)帶來(lái)諸多好處,就像使用Android安全編程規(guī)范和指南一樣。
SCI的目標(biāo)是將漏洞的數(shù)目降低到某個(gè)級(jí)別,有效緩解運(yùn)營(yíng)環(huán)境中的風(fēng)險(xiǎn)應(yīng)用。該目標(biāo)通過(guò)在實(shí)現(xiàn)和測(cè)試階段預(yù)防編程錯(cuò)誤或檢測(cè)并清除安全缺陷來(lái)達(dá)成。同時(shí),SCI也在持續(xù)壯大源碼分析實(shí)驗(yàn)室(SCALe),支持根據(jù)我們的編程規(guī)范對(duì)系統(tǒng)進(jìn)行一致性測(cè)試,包括針對(duì)移動(dòng)平臺(tái)(Mobile SCALe)的一致性測(cè)試。移動(dòng)SCALe目前專注于Android平臺(tái),因?yàn)檫@是我們?cè)谥贫ò踩幋a規(guī)范和指南時(shí)所面向的首個(gè)移動(dòng)平臺(tái)。我們還計(jì)劃支持針對(duì)Apple iOS和Microsoft Windows 8的安全編程規(guī)范和一致性測(cè)試。