如何加強(qiáng)移動(dòng)應(yīng)用開發(fā)安全?
許多企業(yè)不斷地向其開發(fā)團(tuán)隊(duì)提供培訓(xùn)。但是某些漏洞,如早在十多年前就發(fā)現(xiàn)的SQL注入,如今仍廣泛存在于各種應(yīng)用中。因而,安全培訓(xùn)永不過(guò)時(shí)。
在開發(fā)移動(dòng)應(yīng)用時(shí),開發(fā)者必須自始至終實(shí)施一套健全的安全原則,確保移動(dòng)應(yīng)用項(xiàng)目開發(fā)的安全,理解操作系統(tǒng)和API(應(yīng)用編程接口)之間的不同點(diǎn)是非常重要的。
擁有應(yīng)用安全項(xiàng)目的多數(shù)企業(yè)都有大量的最佳方法和編程標(biāo)準(zhǔn)等,但所有這些大多都是針對(duì)Web應(yīng)用或C/S應(yīng)用的。所以,必須更新這些技術(shù)并將其應(yīng)用到移動(dòng)應(yīng)用的開發(fā)中。開發(fā)者必須考慮企業(yè)使用的操作系統(tǒng)。有許多方法可以開發(fā)并強(qiáng)化企業(yè)的移動(dòng)應(yīng)用安全。下面提供有助于移動(dòng)應(yīng)用安全開發(fā)的五條妙計(jì):
制定并實(shí)施移動(dòng)安全標(biāo)準(zhǔn)
所有企業(yè)都擁有要求開發(fā)人員必須遵循某種形式的標(biāo)準(zhǔn)和指南,然而,其重點(diǎn)并不放在安全性上,在許多情況下也不涉及到移動(dòng)應(yīng)用。在涉及關(guān)閉自動(dòng)完成功能時(shí),或者在保證正確地保護(hù)口令字段時(shí),操作系統(tǒng)之間(如安卓與iOS之間)是不同的。
移動(dòng)安全標(biāo)準(zhǔn)的目標(biāo)是提供移動(dòng)安全控制的一套健全的標(biāo)準(zhǔn),移動(dòng)安全標(biāo)準(zhǔn)的安全控制必須關(guān)注如下方面:移動(dòng)設(shè)備的安全和管理控制;應(yīng)用控制;數(shù)據(jù)控制;網(wǎng)絡(luò)級(jí)的控制和保護(hù);設(shè)備到設(shè)備的控制等;用戶訪問控制;資產(chǎn)管理;用戶的授權(quán);信息加密;密鑰管理;反病毒和惡意軟件;業(yè)務(wù)連續(xù)性計(jì)劃;業(yè)務(wù)連續(xù)性測(cè)試;安全架構(gòu)(數(shù)據(jù)安全和完整性、應(yīng)用安全、無(wú)線安全、移動(dòng)代碼安全)。
例如,移動(dòng)應(yīng)用不能包含允許特權(quán)訪問繞過(guò)身份驗(yàn)證過(guò)程的“后門”代碼。開發(fā)者必須謹(jǐn)慎設(shè)計(jì)授權(quán)邏輯,防止特權(quán)提升攻擊。所有的架構(gòu)模式(特別是Web方案)都應(yīng)當(dāng)應(yīng)用訪問控制過(guò)濾器,用以提供健全的訪問控制。
在移動(dòng)應(yīng)用的打包安全問題上,開發(fā)者必須對(duì)使用不同語(yǔ)言的(例如J2ME)解釋器所開發(fā)的移動(dòng)軟件“模糊化”,防止黑客利用執(zhí)行邏輯和通過(guò)逆向工程找到攻擊方法。
尤其需要指出的是,在移動(dòng)代碼的安全標(biāo)準(zhǔn)問題上,在安裝和使用移動(dòng)代碼前必須獲得授權(quán),而且軟件配置應(yīng)當(dāng)保證獲得授權(quán)的移動(dòng)代碼必須根據(jù)一套定義明確的安全策略才能運(yùn)行。所有未授權(quán)的移動(dòng)代碼都不應(yīng)當(dāng)被執(zhí)行。
借助威脅建模執(zhí)行設(shè)計(jì)/架構(gòu)的檢查
由于應(yīng)用程序越來(lái)越多地使用先進(jìn)技術(shù)和更多后端資源,因而它會(huì)變得日益復(fù)雜。再加上移動(dòng)通道的新特點(diǎn),就更加劇了基礎(chǔ)架構(gòu)的復(fù)雜性。在某些情況下,為了支持新的移動(dòng)通道,應(yīng)用程序可能需要增加新的基礎(chǔ)架構(gòu),或者需要使用或強(qiáng)化當(dāng)前基礎(chǔ)架構(gòu)。增加移動(dòng)通道要求徹底地檢查設(shè)計(jì)和架構(gòu),并重視威脅建模。開發(fā)者必須理解移動(dòng)應(yīng)用的新威脅和潛在的業(yè)務(wù)風(fēng)險(xiǎn)。
完整的設(shè)計(jì)和架構(gòu)檢查必須包括威脅建模技術(shù),威脅建模采用結(jié)構(gòu)化的方法來(lái)確認(rèn)、評(píng)估和決定減輕移動(dòng)應(yīng)用風(fēng)險(xiǎn)的適當(dāng)控制。它對(duì)移動(dòng)應(yīng)用能夠訪問的敏感信息或資產(chǎn)進(jìn)行分類,然后以攻擊者的視角來(lái)評(píng)估其可能的破壞方式。#p#
人工驗(yàn)證
在借助威脅建模檢查了設(shè)計(jì)或架構(gòu)后,開發(fā)者應(yīng)當(dāng)執(zhí)行某種水平的人工驗(yàn)證。人工驗(yàn)證的范圍和水平由移動(dòng)應(yīng)用所帶來(lái)的風(fēng)險(xiǎn)量決定。移動(dòng)應(yīng)用的大小和復(fù)雜性決定驗(yàn)證的等級(jí)或水平,當(dāng)然所謂的驗(yàn)證必須依靠反復(fù)的代碼檢查和滲透測(cè)試。企業(yè)必須確保移動(dòng)應(yīng)用的驗(yàn)證專家與內(nèi)部團(tuán)隊(duì)協(xié)同工作,而且,最好在企業(yè)內(nèi)部組建一個(gè)強(qiáng)大的測(cè)試團(tuán)隊(duì)。
完全的動(dòng)態(tài)和靜態(tài)驗(yàn)證
動(dòng)態(tài)和靜態(tài)驗(yàn)證技術(shù)仍不太成熟,同樣,可用的移動(dòng)應(yīng)用的動(dòng)態(tài)驗(yàn)證技術(shù)也不多。不過(guò),這并不意味著這些安全技術(shù)不能嵌入到安全的移動(dòng)開發(fā)過(guò)程中。在有些技術(shù)成為主流并且很有效時(shí),開發(fā)者就應(yīng)當(dāng)開始實(shí)行使用靜態(tài)方法,評(píng)估移動(dòng)應(yīng)用代碼,還要保證不會(huì)濫用API,并對(duì)其它的安全控制進(jìn)行正確編碼。當(dāng)然,開發(fā)者也可以借助開源項(xiàng)目,使用靜態(tài)分析查找Java代碼中的漏洞,甚至可以將潛在的威脅類型分為多個(gè)等級(jí)。
在此重點(diǎn)說(shuō)一下靜態(tài)分析。有許多技術(shù)可以分析靜態(tài)代碼,查找潛在的漏洞。這些技術(shù)往往源自編譯技術(shù),主要分為數(shù)據(jù)流分析、控制流圖、污點(diǎn)分析、詞法分析等。
數(shù)據(jù)流分析用于收集關(guān)于靜態(tài)軟件數(shù)據(jù)的運(yùn)行時(shí)信息,它主要分析基本塊、數(shù)據(jù)流、控制路徑等。數(shù)據(jù)流分析從軟件的代碼中收集程序的語(yǔ)義信息, 并通過(guò)一組簡(jiǎn)單方程將程序不同位置的語(yǔ)義信息聯(lián)系起來(lái)。通過(guò)數(shù)據(jù)流分析, 分析者不必運(yùn)行程序就知道可以程序運(yùn)行時(shí)的行為。在進(jìn)行數(shù)據(jù)流分析前, 為了便于收集和分析,往往需要把源程序轉(zhuǎn)換成控制流圖。
控制流圖是指通過(guò)利用代表基本塊的節(jié)點(diǎn)圖來(lái)抽象地來(lái)表示軟件。圖中的一個(gè)節(jié)點(diǎn)代表一個(gè)塊;定向邊用于代表從一個(gè)塊到另一個(gè)塊的跳轉(zhuǎn)(路徑)。如果一個(gè)節(jié)點(diǎn)僅有一個(gè)退出邊,它就被稱為“入口”塊,如果一個(gè)節(jié)點(diǎn)僅有一個(gè)“入口”邊,此節(jié)點(diǎn)即為“退出”塊。
在上圖中的“節(jié)點(diǎn)1”即為“入口”塊,“節(jié)點(diǎn)6”為“退出”塊。
污點(diǎn)分析試圖確認(rèn)被用戶的可控輸入“污染”的變量,并跟蹤這些變量,查找可能易受攻擊的功能。如果被污染的變量就沒有被凈化,它就成為一個(gè)漏洞。
有些編程語(yǔ)言如Perl和Ruby有內(nèi)置的污點(diǎn)檢查,并在某些情況下(如通過(guò)CGI接受數(shù)據(jù))啟用此功能。
詞法分析是一個(gè)將字符序列轉(zhuǎn)換為單詞(Token)序列的過(guò)程。這個(gè)階段的任務(wù)是從左到右一個(gè)字符一個(gè)字符地讀入源程序,即對(duì)構(gòu)成源程序的字符流進(jìn)行掃描然后根據(jù)構(gòu)詞規(guī)則識(shí)別單詞(也稱單詞符號(hào)或符號(hào))。
限制移動(dòng)應(yīng)用的訪問許可
開發(fā)“應(yīng)用許可訪問”的目的是為了分配或剝奪用戶對(duì)移動(dòng)應(yīng)用的訪問權(quán),例如,安卓要求:如果用戶要使用移動(dòng)應(yīng)用,就應(yīng)當(dāng)接受該應(yīng)用所要求的全部許可。此外,在以root權(quán)限使用設(shè)備時(shí),還可以根據(jù)某個(gè)具體的移動(dòng)應(yīng)用來(lái)管理授權(quán)。許可限制可以保護(hù)鏈接,防止移動(dòng)應(yīng)用通過(guò)不合法的手段去訪問某些私有信息。
此文遠(yuǎn)遠(yuǎn)不能解決移動(dòng)應(yīng)用開發(fā)的所有安全問題,作者僅希望它能夠起到拋磚引玉作用。建議有志于此的開發(fā)者,參考AT&T的企業(yè)移動(dòng)安全標(biāo)準(zhǔn)。