當(dāng)我第一次開發(fā)移動(dòng)應(yīng)用時(shí)彬祖,曾懷疑過是否要把移動(dòng)應(yīng)用的安全獨(dú)立出來。因?yàn)橐苿?dòng)應(yīng)用和桌面應(yīng)用沒有什么區(qū)別品抽,都存在著相同的漏洞:棧和堆的溢出储笑、格式化字符串漏洞、內(nèi)存被釋放后又重新利用圆恤,以及其他一些代碼執(zhí)行問題突倍。這些漏洞也存在于iOS之中,畢竟都是從C語言的角度出發(fā)的系統(tǒng)盆昙。但是移動(dòng)設(shè)備的安全焦點(diǎn)不在于軟件的穩(wěn)定性羽历,而在于用戶隱私、數(shù)據(jù)竊取以及進(jìn)程間的惡意通訊方面弱左。
移動(dòng)應(yīng)用不該具備哪些能力
人們從早期的桌面操作系統(tǒng)的錯(cuò)誤設(shè)計(jì)里吸取了經(jīng)驗(yàn)(Windows的錯(cuò)誤設(shè)計(jì)窄陡,不同程序的文件可以放在同一個(gè)文件夾里,而且運(yùn)行任意桌面程序都可以訪問全部的用戶數(shù)據(jù)拆火,設(shè)置控制整臺(tái)電腦)跳夭,當(dāng)前主流的移動(dòng)操作系統(tǒng)都把應(yīng)用程序相互隔離。由于應(yīng)用間的沙盒隔離和iOS平臺(tái)的日益完善们镜,用戶其實(shí)對(duì)安全的要求越來越高币叹。
1、導(dǎo)致其他應(yīng)用程序行為異常
一個(gè)應(yīng)用程序不應(yīng)該讓其他應(yīng)用程序崩潰模狭。在過去的“黑暗”年代颈抚,你不僅可以讀取其他程序的數(shù)據(jù),還可以修改和刪除數(shù)據(jù),甚至能把整個(gè)系統(tǒng)文件刪除贩汉。隨著時(shí)間的推移驱富,桌面系統(tǒng)通過進(jìn)程間的相互獨(dú)立使這個(gè)狀況得以改善,但是他們這么做的原因僅僅是為了提高系統(tǒng)穩(wěn)定性匹舞。畢竟刪除一個(gè)文件就導(dǎo)致整個(gè)系統(tǒng)崩潰的問題確實(shí)很讓人崩潰褐鸥。
在移動(dòng)操作系統(tǒng)中解決了這些問題,但是赐稽,既要滿足用戶應(yīng)用程序之間的必要操作(最簡單的例子叫榕,訪問本機(jī)保存的圖片),又要使所有進(jìn)程完全隔離姊舵,這是不現(xiàn)實(shí)的晰绎。應(yīng)用程序之間總要留一些窗口來做交換。這就需要開發(fā)者來確保他們的應(yīng)用不會(huì)做壞事括丁,并采取一切謹(jǐn)慎的措施來保障數(shù)據(jù)安全荞下,防止其他惡意程序的侵襲。
2史飞、拒絕為用戶服務(wù)
iOS就是為手機(jī)而生的操作系統(tǒng)锄弱,這決定了當(dāng)用戶需要緊急呼叫時(shí),所有的應(yīng)用程序不能阻攔祸憋,而且這個(gè)請(qǐng)求的優(yōu)先級(jí)最高。很多地方的法律都有相關(guān)規(guī)定肖卧,這也是攻擊者不能篡改底層操作系統(tǒng)的原因蚯窥。
3、盜取用戶數(shù)據(jù)
一個(gè)應(yīng)用程序不應(yīng)該讀取來自其他應(yīng)用程序或本地操作系統(tǒng)的數(shù)據(jù)塞帐,更不能將其發(fā)送給第三方(比如照片云同步功能)拦赠。操作系統(tǒng)可以組織一個(gè)應(yīng)用直接讀取另一個(gè)應(yīng)用的數(shù)據(jù),但是開發(fā)者需要自己防范其他的數(shù)據(jù)盜取手段葵姥,仔細(xì)研究發(fā)送和接收數(shù)據(jù)所用到的IPC機(jī)制荷鼠。
4、惡意扣費(fèi)
在沒有得到用戶批準(zhǔn)的情況下榔幸,應(yīng)用程序不應(yīng)該產(chǎn)生費(fèi)用允乐。許多手機(jī)惡意軟件普遍存在讓用戶訂閱第三方服務(wù),這些服務(wù)產(chǎn)生的費(fèi)用又要由機(jī)主來買單(當(dāng)年移動(dòng)夢(mèng)網(wǎng)的各種惡心服務(wù))削咆。因此應(yīng)用內(nèi)購買項(xiàng)目和功能要明確的向用戶說明牍疏,并且購買行為要得到用戶的完全確認(rèn)。
移動(dòng)應(yīng)用安全威脅分類
1拨齐、取證攻擊
取證攻擊者一旦有權(quán)訪問設(shè)備或者它的備份鳞陨,就會(huì)嘗試獲取設(shè)備的機(jī)密。最常見的做法就是訪問設(shè)備的物理區(qū)域瞻惋。相比計(jì)算機(jī)厦滤,手機(jī)或者平板設(shè)備更容易被盜援岩,因此大部分攻擊都是取證攻擊。
取證攻擊者可以由一個(gè)抱著碰運(yùn)氣心態(tài)的陌生人或者熟練掌握定向攻擊的黑客發(fā)起掏导。對(duì)于一個(gè)碰運(yùn)氣的陌生人來說享怀,竊取信息就是偷(或撿到)一部沒有任何PIN保護(hù)的手機(jī),然后他們就能看到相冊(cè)的圖片碘菜,QQ或者微信的聊天記錄凹蜈,短信和通話記錄,淘寶天貓等購物信息忍啸。一切的文字和可以通過正常途徑訪問到的數(shù)據(jù)都能被他們掌握仰坦。如果用戶開啟了兩步驗(yàn)證,陌生人也可以很輕易的得到這些驗(yàn)證碼计雌。
如果攻擊者是一個(gè)有著專業(yè)知識(shí)的職業(yè)黑客悄晃,攻擊者知道某種技術(shù)可以用來實(shí)現(xiàn)來臨時(shí)越獄,破解簡單的PIN凿滤,然后訪問設(shè)備中的數(shù)據(jù)妈橄。這些數(shù)據(jù)部分來自系統(tǒng)層,部分來自應(yīng)用層翁脆。因此攻擊者不但可以獲取UI所展示的數(shù)據(jù)眷蚓,可能得到系統(tǒng)底層的緩存數(shù)據(jù)(直接進(jìn)入沙盒目錄查看文件)。這些緩存數(shù)據(jù)可能包括截圖反番,按鍵記錄沙热,Web請(qǐng)求中緩存的敏感數(shù)據(jù),App內(nèi)的log日志(這個(gè)如果被黑客看到可是很危險(xiǎn)的罢缸,不但你的所有數(shù)據(jù)結(jié)構(gòu)暴露在他們眼皮下篙贸,還有所有的服務(wù)器API),以及應(yīng)用的本地?cái)?shù)據(jù)庫枫疆。
2爵川、代碼執(zhí)行攻擊
遠(yuǎn)程代碼執(zhí)行攻擊會(huì)在設(shè)備上執(zhí)行一段代碼來破壞整個(gè)設(shè)備和數(shù)據(jù),這個(gè)過程不需要拿到實(shí)際的設(shè)備息楔。這種攻擊的渠道主要有:網(wǎng)絡(luò)寝贡,二維碼(這是相當(dāng)危險(xiǎn)的,特別是地鐵上的迷之二維碼)钞螟、NFC兔甘、惡意文件解析,以及連接感染病毒的外接設(shè)備鳞滨。一旦設(shè)備執(zhí)行了遠(yuǎn)程攻擊代碼洞焙,就可以執(zhí)行取證攻擊,從而獲取用戶的機(jī)密信息,有幾種經(jīng)常出現(xiàn)的代碼執(zhí)行攻擊澡匪,他們東歐利用了底層編程語言的漏洞(格式化字符串熔任、緩沖區(qū)溢出、整數(shù)溢出)唁情。
3疑苔、Web攻擊
基于Web的遠(yuǎn)程代碼執(zhí)行攻擊主要使用惡意的HTML和JavaScript來誤導(dǎo)用戶或竊取數(shù)據(jù)。遠(yuǎn)程攻擊者可以操控一個(gè)惡意網(wǎng)站或者合法網(wǎng)站甸鸟,也可以簡單地將惡意代碼發(fā)布到公共論壇惦费。
這些攻擊可以從HTML5的數(shù)據(jù)庫或本地存儲(chǔ)中竊取數(shù)據(jù),還能修改或竊取存儲(chǔ)在SQLite中的數(shù)據(jù)抢韭,讀取會(huì)話cookie或植入一個(gè)虛假登錄表單來盜取用戶的憑據(jù)(假的銀行網(wǎng)站薪贫、假的領(lǐng)獎(jiǎng)網(wǎng)站)。
4刻恭、網(wǎng)絡(luò)攻擊
基于網(wǎng)絡(luò)執(zhí)行的代碼攻擊瞧省,通常會(huì)通過網(wǎng)絡(luò)注入一些可執(zhí)行代碼,從而控制相關(guān)的應(yīng)用程序或整個(gè)系統(tǒng)鳍贾。比如你可以修改設(shè)備的網(wǎng)絡(luò)請(qǐng)求內(nèi)容鞍匾,也可以使用漏洞利用程序來破解系統(tǒng)服務(wù)或者內(nèi)核。如果被攻擊的目標(biāo)具有比較高的權(quán)限骑科,那么攻擊成功之后橡淑,攻擊者不僅可以獲取某個(gè)特定應(yīng)用程序的數(shù)據(jù),還能獲得設(shè)備中全部的數(shù)據(jù)咆爽。他們不僅可以監(jiān)控設(shè)備的運(yùn)行狀態(tài)梳码,還能植入后門應(yīng)用程序方便再次訪問。
5伍掀、物理攻擊
通過物理手段供給設(shè)備,往往要用到NFC或者USB接口暇藏。這種類型的攻擊常常被用在設(shè)備的越獄或者Root上蜜笤,但也可以通過短暫的物理接觸供給設(shè)備。大部分攻擊都是針對(duì)操作系統(tǒng)的盐碱。