當我第一次開發(fā)移動應用時扛施,曾懷疑過是否要把移動應用的安全獨立出來。因為移動應用和桌面應用沒有什么區(qū)別屹篓,都存在著相同的漏洞:棧和堆的溢出疙渣、格式化字符串漏洞、內(nèi)存被釋放后又重新利用堆巧,以及其他一些代碼執(zhí)行問題妄荔。這些漏洞也存在于iOS之中,畢竟都是從C語言的角度出發(fā)的系統(tǒng)谍肤。但是移動設(shè)備的安全焦點不在于軟件的穩(wěn)定性啦租,而在于用戶隱私、數(shù)據(jù)竊取以及進程間的惡意通訊方面荒揣。
移動應用不該具備哪些能力?
人們從早期的桌面操作系統(tǒng)的錯誤設(shè)計里吸取了經(jīng)驗(Windows的錯誤設(shè)計篷角,不同程序的文件可以放在同一個文件夾里,而且運行任意桌面程序都可以訪問全部的用戶數(shù)據(jù)系任,設(shè)置控制整臺電腦)恳蹲,當前主流的移動操作系統(tǒng)都把應用程序相互隔離虐块。由于應用間的沙盒隔離和iOS平臺的日益完善,用戶其實對安全的要求越來越高嘉蕾。
1贺奠、導致其他應用程序行為異常
一個應用程序不應該讓其他應用程序崩潰。在過去的“黑暗”年代错忱,你不僅可以讀取其他程序的數(shù)據(jù)儡率,還可以修改和刪除數(shù)據(jù),甚至能把整個系統(tǒng)文件刪除航背。隨著時間的推移喉悴,桌面系統(tǒng)通過進程間的相互獨立使這個狀況得以改善,但是他們這么做的原因僅僅是為了提高系統(tǒng)穩(wěn)定性玖媚。畢竟刪除一個文件就導致整個系統(tǒng)崩潰的問題確實很讓人崩潰箕肃。
在移動操作系統(tǒng)中解決了這些問題,但是今魔,既要滿足用戶應用程序之間的必要操作(最簡單的例子勺像,訪問本機保存的圖片),又要使所有進程完全隔離错森,這是不現(xiàn)實的吟宦。應用程序之間總要留一些窗口來做交換。這就需要開發(fā)者來確保他們的應用不會做壞事涩维,并采取一切謹慎的措施來保障數(shù)據(jù)安全殃姓,防止其他惡意程序的侵襲。
2瓦阐、拒絕為用戶服務(wù)
iOS就是為手機而生的操作系統(tǒng)蜗侈,這決定了當用戶需要緊急呼叫時,所有的應用程序不能阻攔睡蟋,而且這個請求的優(yōu)先級最高踏幻。很多地方的法律都有相關(guān)規(guī)定,這也是攻擊者不能篡改底層操作系統(tǒng)的原因戳杀。
3该面、盜取用戶數(shù)據(jù)
一個應用程序不應該讀取來自其他應用程序或本地操作系統(tǒng)的數(shù)據(jù),更不能將其發(fā)送給第三方(比如照片云同步功能)信卡。操作系統(tǒng)可以組織一個應用直接讀取另一個應用的數(shù)據(jù)隔缀,但是開發(fā)者需要自己防范其他的數(shù)據(jù)盜取手段,仔細研究發(fā)送和接收數(shù)據(jù)所用到的IPC機制傍菇。
4蚕泽、惡意扣費
在沒有得到用戶批準的情況下,應用程序不應該產(chǎn)生費用。許多手機惡意軟件普遍存在讓用戶訂閱第三方服務(wù)须妻,這些服務(wù)產(chǎn)生的費用又要由機主來買單(當年移動夢網(wǎng)的各種惡心服務(wù))仔蝌。因此應用內(nèi)購買項目和功能要明確的向用戶說明,并且購買行為要得到用戶的完全確認荒吏。
移動應用安全威脅分類
1敛惊、取證攻擊
取證攻擊者一旦有權(quán)訪問設(shè)備或者它的備份,就會嘗試獲取設(shè)備的機密绰更。最常見的做法就是訪問設(shè)備的物理區(qū)域瞧挤。相比計算機,手機或者平板設(shè)備更容易被盜儡湾,因此大部分攻擊都是取證攻擊特恬。
取證攻擊者可以由一個抱著碰運氣心態(tài)的陌生人或者熟練掌握定向攻擊的黑客發(fā)起。對于一個碰運氣的陌生人來說徐钠,竊取信息就是偷(或撿到)一部沒有任何PIN保護的手機癌刽,然后他們就能看到相冊的圖片,QQ或者微信的聊天記錄尝丐,短信和通話記錄显拜,淘寶天貓等購物信息。一切的文字和可以通過正常途徑訪問到的數(shù)據(jù)都能被他們掌握爹袁。如果用戶開啟了兩步驗證远荠,陌生人也可以很輕易的得到這些驗證碼。
如果攻擊者是一個有著專業(yè)知識的職業(yè)黑客失息,攻擊者知道某種技術(shù)可以用來實現(xiàn)來臨時越獄譬淳,破解簡單的PIN,然后訪問設(shè)備中的數(shù)據(jù)盹兢。這些數(shù)據(jù)部分來自系統(tǒng)層瘦赫,部分來自應用層。因此攻擊者不但可以獲取UI所展示的數(shù)據(jù),可能得到系統(tǒng)底層的緩存數(shù)據(jù)(直接進入沙盒目錄查看文件)。這些緩存數(shù)據(jù)可能包括截圖施蜜,按鍵記錄钮热,Web請求中緩存的敏感數(shù)據(jù),App內(nèi)的log日志(這個如果被黑客看到可是很危險的窘问,不但你的所有數(shù)據(jù)結(jié)構(gòu)暴露在他們眼皮下辆童,還有所有的服務(wù)器API),以及應用的本地數(shù)據(jù)庫惠赫。
2把鉴、代碼執(zhí)行攻擊
遠程代碼執(zhí)行攻擊會在設(shè)備上執(zhí)行一段代碼來破壞整個設(shè)備和數(shù)據(jù),這個過程不需要拿到實際的設(shè)備。這種攻擊的渠道主要有:網(wǎng)絡(luò)庭砍,二維碼(這是相當危險的场晶,特別是地鐵上的迷之二維碼)、NFC怠缸、惡意文件解析诗轻,以及連接感染病毒的外接設(shè)備。一旦設(shè)備執(zhí)行了遠程攻擊代碼揭北,就可以執(zhí)行取證攻擊扳炬,從而獲取用戶的機密信息,有幾種經(jīng)常出現(xiàn)的代碼執(zhí)行攻擊搔体,他們東歐利用了底層編程語言的漏洞(格式化字符串恨樟、緩沖區(qū)溢出、整數(shù)溢出)疚俱。
3劝术、Web攻擊
基于Web的遠程代碼執(zhí)行攻擊主要使用惡意的HTML和JavaScript來誤導用戶或竊取數(shù)據(jù)。遠程攻擊者可以操控一個惡意網(wǎng)站或者合法網(wǎng)站计螺,也可以簡單地將惡意代碼發(fā)布到公共論壇夯尽。
這些攻擊可以從HTML5的數(shù)據(jù)庫或本地存儲中竊取數(shù)據(jù),還能修改或竊取存儲在SQLite中的數(shù)據(jù)登馒,讀取會話cookie或植入一個虛假登錄表單來盜取用戶的憑據(jù)(假的銀行網(wǎng)站匙握、假的領(lǐng)獎網(wǎng)站)。
4陈轿、網(wǎng)絡(luò)攻擊
基于網(wǎng)絡(luò)執(zhí)行的代碼攻擊圈纺,通常會通過網(wǎng)絡(luò)注入一些可執(zhí)行代碼,從而控制相關(guān)的應用程序或整個系統(tǒng)麦射。比如你可以修改設(shè)備的網(wǎng)絡(luò)請求內(nèi)容蛾娶,也可以使用漏洞利用程序來破解系統(tǒng)服務(wù)或者內(nèi)核。如果被攻擊的目標具有比較高的權(quán)限潜秋,那么攻擊成功之后蛔琅,攻擊者不僅可以獲取某個特定應用程序的數(shù)據(jù),還能獲得設(shè)備中全部的數(shù)據(jù)峻呛。他們不僅可以監(jiān)控設(shè)備的運行狀態(tài)罗售,還能植入后門應用程序方便再次訪問。
5钩述、物理攻擊
通過物理手段供給設(shè)備寨躁,往往要用到NFC或者USB接口。這種類型的攻擊常常被用在設(shè)備的越獄或者Root上牙勘,但也可以通過短暫的物理接觸供給設(shè)備职恳。大部分攻擊都是針對操作系統(tǒng)的。