作者 | 陳峻
審校 | 重樓
眾所周知,智能手機、平板電腦和智能手表等開放性移動智能設(shè)備,以其帶有豐富的擴展性功能(如:麥克風(fēng)、攝像頭、地理位置等)和可訪問到廣泛的數(shù)據(jù)源(如:電子郵件、協(xié)作文檔、社交媒體等),正在我們生活的方方面面被頻繁使用。然而安裝在移動設(shè)備上的、那些長久沒能更新的移動應(yīng)用(Mobile APP)往往潛藏著移動代碼缺陷、API保護(hù)不到位、以及配置錯誤等安全薄弱環(huán)節(jié),也可能導(dǎo)致APP的用戶前端、甚至其對應(yīng)的服務(wù)后端,受到針對財務(wù)數(shù)據(jù)的攻擊和用戶隱私的侵犯。
近年來的一項大規(guī)模的調(diào)查發(fā)現(xiàn),全球有四分之三的移動應(yīng)用至少包含了一個中等級別的安全漏洞。因此,我們需要警鐘長鳴,通過開展持續(xù)的靜、動態(tài)分析和滲透測試等方式,對已經(jīng)在用和即將上線的移動應(yīng)用開展全面的安全測評(MAST),以免遭不必要的攻擊。下面,我們將從移動應(yīng)用的攻擊類型,安全構(gòu)建和上線測評三個方面,和你進(jìn)行深入討論。
一、移動應(yīng)用攻擊
針對移動應(yīng)用的典型攻擊類型有如下三種:
- 基于瀏覽器的攻擊,即攻擊者使用過時的瀏覽器、或不安全的瀏覽活動,將惡意軟件注入到移動設(shè)備上。
- 基于短信(SMS)的攻擊,即攻擊者通過傳送與APP相關(guān)的、包含惡意鏈接的短信,誘騙用戶點擊,進(jìn)而在后臺將惡意代碼下載到移動設(shè)備上。
- 基于應(yīng)用邏輯的攻擊,即攻擊者直接利用APP的代碼漏洞或邏輯錯誤,繞過身份驗證機制,滲透到移動系統(tǒng)上,未經(jīng)授權(quán)地訪問甚至竊取數(shù)據(jù)。
二、移動應(yīng)用安全構(gòu)建
為了讓移動應(yīng)用免受上述各類攻擊,我們需要事先設(shè)計APP的業(yè)務(wù)邏輯,了解漏洞可能出現(xiàn)的位置,以及設(shè)計優(yōu)化數(shù)據(jù)的調(diào)用關(guān)系。如下移動應(yīng)用安全構(gòu)建要點,可以幫助你構(gòu)建更安全的移動應(yīng)用。
1.應(yīng)用設(shè)計
移動應(yīng)用里往往需要包含API、加密密鑰、OAuth令牌、信任密碼、以及緩存個人身份信息。而攻擊者會想盡辦法進(jìn)行破解、克隆、甚至篡改。為此,在移動應(yīng)用設(shè)計時,我們應(yīng)創(chuàng)建源代碼策略,包括:通過身份驗證和授權(quán)來控制訪問,加密和監(jiān)控靜態(tài)敏感數(shù)據(jù),使用私密網(wǎng)絡(luò)或SSH安全傳輸數(shù)據(jù),以及采用日志、水印等數(shù)據(jù)泄漏防護(hù)(DLP)措施。
2.安全編程
3.身份驗證
在身份驗證的方法上,我們除了采用包括OAuth2.0、OpenID Connect和安全斷言標(biāo)記語言(SAML)等開放標(biāo)準(zhǔn),也可以運用不同方式的多因素身份驗證(MFA)解決方案。其中包括:
- 基于移網(wǎng)推送的一次性密碼(OTP)驗證:一旦使用此機制,攻擊者就算獲取到了也無法重復(fù)使用它。不過,我們難以認(rèn)證從移動網(wǎng)絡(luò)運營商處發(fā)來的短信的可靠性。
- 離線基于時間的一次性密碼(TOTP)驗證:該機制綜合了時間和密碼兩個維度。雖然它不需要新增硬件,但如果攻擊者克隆了該機制,便可以生成新的TOTP代碼,進(jìn)而侵占授權(quán)用戶。
- 硬件令牌:該機制將基于硬件的身份驗證與公鑰加密相結(jié)合,使其難以泄露。當(dāng)然,我們需要避免用戶使用相同的令牌訪問多個賬戶的違規(guī)行為。
- 軟件令牌:作為一種數(shù)字身份驗證密鑰,該機制需要安裝在單獨的軟件或集成到應(yīng)用中。不過,由于它需要依賴互聯(lián)網(wǎng)連接和軟件才能工作,因此仍然存在被遠(yuǎn)程攻擊的可能。此外,我們需要在登錄嘗試失敗一定次數(shù)后,實施賬戶鎖定策略,以提高注冊與登錄過程的安全性。這些都是細(xì)化保護(hù)規(guī)則與流程的安全實踐。
4.加密通信
通過基于會話的密鑰交換或4096位SSL密鑰的形式,對移動通信通道實施強加密,以抵御黑客滲透到公共網(wǎng)絡(luò)或WiFi網(wǎng)絡(luò)的通信中。
SSL證書的優(yōu)勢在于,它可以在應(yīng)用中對證書的公鑰進(jìn)行硬編碼,并在不依賴第三方證書頒發(fā)機構(gòu)的情況下,啟用服務(wù)器身份驗證,抵御中間人攻擊(即攻擊者通過提供虛假證書來攔截數(shù)據(jù))。
5.API安全
移動應(yīng)用的安全性離不開內(nèi)部創(chuàng)建與集成API。其中涉及到API文檔、編錄、發(fā)現(xiàn)、密鑰、驗證授權(quán)、日志記錄、調(diào)用監(jiān)控、限流、以及運行時的保護(hù)。此外,我們還應(yīng)采用REST等安全的API框架,并實施最小權(quán)限原則(PoLP)。
6.RASP
通過在應(yīng)用程序的運行過程中采用“插樁”技術(shù),實時應(yīng)用的自我防護(hù)(RASP)可以將安全技術(shù)鏈接到應(yīng)用環(huán)境中,通過自動監(jiān)控應(yīng)用在使用時的行為,借助其上下文情景分析能力,實現(xiàn)針對:帳戶接管、設(shè)備越獄、逆向工程、以及注入鉤子等攻擊的無人工干預(yù)式防御。
事實證明,RASP的這種跨設(shè)備與平臺的應(yīng)用兼容性,可以讓移動應(yīng)用具備實時監(jiān)測,阻斷攻擊和自我保護(hù)的能力。
7.數(shù)據(jù)存儲
移動應(yīng)用可遵循的應(yīng)用數(shù)據(jù)安全存儲與使用方式包括:
- 關(guān)閉提示在設(shè)備上存儲密碼的選項,以便除設(shè)備所有者外,他人無法訪問到移動應(yīng)用中的數(shù)據(jù)。
- 密碼不可以純文本的形式存儲,須始終采取哈希和加鹽(即:在哈希之前,將一個稱為“鹽”的隨機字符串附加到密碼中,確保生成的每個哈希值都是唯一)處理。
- 使用開發(fā)語言內(nèi)置的加密庫,來用于對密碼進(jìn)行哈希和加鹽處理的函數(shù)。
8.代碼混淆
代碼混淆技術(shù)可以將移動應(yīng)用變更為功能相同、但無法辨識和解讀的格式,使其不易被攻擊者破解分析和逆向利用,進(jìn)而有效地防范了核心代碼的泄露、以及數(shù)據(jù)被篡改。
9.日志監(jiān)控
嚴(yán)格的審計跟蹤和行為監(jiān)控,可以密切關(guān)注移動應(yīng)用的用戶訪問和數(shù)據(jù)修改,進(jìn)而為日志分析和事件取證提供有利的證據(jù)。
三、移動應(yīng)用安全測評
雖然已有前期的移動應(yīng)用安全構(gòu)建,我們?nèi)詿o法保證移動應(yīng)用被安裝和運行在Android、iOS、Windows Mobile等移動操作系統(tǒng)上,不存在漏洞和風(fēng)險。對此,我們可以參照OWASP移動應(yīng)用安全測試指南等權(quán)威指導(dǎo),開展深入的安全測評。
1.測評工具
目前,最常推薦的移動應(yīng)用安全測評工具包括如下類型:
- 靜態(tài)應(yīng)用安全測試(SAST)工具:掃描應(yīng)用的源代碼,以識別漏洞。此類工具可以在CI/CD管道的早期運行,甚至可以在編程時作為IDE插件運行。SAST屬于白盒測試,因此也會檢驗應(yīng)用內(nèi)部設(shè)計。
- 動態(tài)應(yīng)用安全測試(DAST)工具:通過測試正在運行的應(yīng)用,是否存在常見的受攻擊類型,來檢查其運行時的安全性。由于此類工具需要應(yīng)用正常運行的狀態(tài),因此只能在開發(fā)過程的后期使用。DAST屬于黑盒測試,因此只會基于外部認(rèn)知,而不考慮應(yīng)用的內(nèi)部知識。
- 交互式應(yīng)用安全測試(IAST)工具:通過從外部掃描應(yīng)用和對內(nèi)部應(yīng)用流進(jìn)行分析,以便在其運行時檢查應(yīng)用的安全性。IAST 是白盒和黑盒測試的混合體,能夠像SAST工具那樣開展,并將類似DAST的結(jié)果(如,回歸識別)對應(yīng)到源代碼上。
- 軟件組件分析(SCA)工具:根據(jù)第三方代碼的依賴關(guān)系,開發(fā)人員可以使用此類工具,來發(fā)現(xiàn)與應(yīng)用相關(guān)各種組件、開源支持庫、及其直接和間接的依賴項,進(jìn)而挖掘出可能存在的被利用的漏洞。
- 模糊測試工具:會自動將各種無效或意外的輸入注入到應(yīng)用中,以發(fā)現(xiàn)錯誤。作為一種黑盒測試技術(shù),模糊測試旨在讓應(yīng)用到達(dá)可承受的極限,從而導(dǎo)致其行為異常、崩潰、或出現(xiàn)資源泄漏。
2.測評方法
目前業(yè)界比較流行的針對移動應(yīng)用安全測評方法有:
- 自動測評:由自動化工具掃描應(yīng)用代碼,以查找潛在的漏洞,使開發(fā)團隊能盡早識別到安全風(fēng)險。此類測評的優(yōu)勢在于速度、準(zhǔn)確性、可擴展性、以及成本效益。
- 手動測評:由人工測評人員手動與應(yīng)用交互,以識別漏洞。此類測評最適合用于檢測那些更高級別、更抽象的應(yīng)用問題,例如,應(yīng)用設(shè)計的缺陷和業(yè)務(wù)邏輯的錯誤等。
- 漏洞賞金計劃:通過向能夠識別和披露移動應(yīng)用漏洞的安全研究人員和道德黑客提供金錢獎勵,來及時發(fā)現(xiàn)潛在的安全漏洞,并激勵改進(jìn)措施的提供。
- 眾包漏洞披露:與漏洞賞金類似,不同之處在于安全漏洞是被公開發(fā)布的,而不是私下提交的。此類披露有時包括提供給開發(fā)人員如何修復(fù)漏洞的建議。在移動應(yīng)用的實際安全測評中,企業(yè)經(jīng)常會綜合利用上述方法。例如,許多組織會先使用自動化工具進(jìn)行大部分的測評,然后讓安全人員進(jìn)行人工審查,以剔除誤報,并了解背后的具體邏輯。與此同時,他們也會持續(xù)提供漏洞賞金計劃,并加入眾包漏洞披露,以增強漏洞的發(fā)現(xiàn)與處置能力。此外,作為全面的安全技術(shù)棧,移動應(yīng)用安全測評的補充策略還包括:威脅建模、合規(guī)性測試、以及紅隊模擬攻擊等。
3.測評挑戰(zhàn)
雖然我們可以靈活選用上述提到的不同安全測評方法與工具,但是在實際操作中可能會遇到如下挑戰(zhàn):
- 當(dāng)移動應(yīng)用在各種不同的操作系統(tǒng)和設(shè)備上運行時,會出現(xiàn)平臺“碎片化”的現(xiàn)象。也就是說,為了滿足測評的覆蓋面,我們不僅需要在不同的平臺上開展,甚至需要在同一操作系統(tǒng)的不同版本上也要進(jìn)行測評。這對于針對Android平臺開發(fā)的移動應(yīng)用來說十分常見,畢竟不同的第三方制造商往往擁有自己獨特的操作系統(tǒng)版本。
- 當(dāng)被選用的測評工具集無法支持諸如:Java、Kotlin、Objective C以及Swift等獨立于平臺的語言時,開發(fā)語言的覆蓋率便成了挑戰(zhàn)。顯然,對于混合移動應(yīng)用而言,原生開發(fā)與由Web應(yīng)用開發(fā)帶來的安全風(fēng)險是不盡相同的。
- 由于許多DAST測試框架并非面向移動應(yīng)用的安全性而設(shè)計,因此盡管各種框架仍在改進(jìn)中,但是目前尚難以獲得全面的針對移動應(yīng)用的測評數(shù)據(jù)。
4.測評流程
一套完整的移動應(yīng)用安全測評流程,通常由如下關(guān)鍵步驟組成:
- 定義目標(biāo):明確定義待測評移動應(yīng)用的安全目標(biāo),需重點關(guān)注特定于移動設(shè)備的數(shù)據(jù)保護(hù)、安全數(shù)據(jù)傳輸和用戶隱私等安全需求。
- 信息收集和規(guī)劃:從測評方的角度收集有關(guān)信息、按需檢查應(yīng)用的運行環(huán)境、設(shè)計、功能和源代碼,并據(jù)此來規(guī)劃后續(xù)的安全測評工作。
- 選擇工具:根據(jù)數(shù)據(jù)加密、身份驗證與授權(quán)機制、以及特定于移動設(shè)備的API等因素,選擇針對待測應(yīng)用的適當(dāng)測評工具。
- 確定方法:通過討論,確定是從內(nèi)部人員角度(白盒)、還是從外部人角度(黑盒)評估移動應(yīng)用。應(yīng)重點關(guān)注特定于移動設(shè)備的漏洞和用戶數(shù)據(jù)保護(hù)。
- 自動工具掃描:對自動化工具進(jìn)行基本配置,全面掃描并發(fā)現(xiàn)待測應(yīng)用的漏洞。
- 手動測試與核實:測評人員根據(jù)定義的范圍和選擇的方法,對待測應(yīng)用執(zhí)行深入的手動測試,進(jìn)一步發(fā)掘并核實漏洞。
- 滲透測試:模擬現(xiàn)實世界的攻擊,重點關(guān)注與移動應(yīng)用交互的后端服務(wù)和API的安全性,例如:不安全的數(shù)據(jù)存儲、不適當(dāng)?shù)纳矸蒡炞C、API或云服務(wù)的錯誤配置、以及特定移動設(shè)備的風(fēng)險等。其間,測評人員應(yīng)遵守基本的道德準(zhǔn)則。
- 分析結(jié)果:根據(jù)測評過程所發(fā)現(xiàn)的漏洞,針對用戶數(shù)據(jù)安全和隱私的影響,分析并確定漏洞的優(yōu)先級。
- 形成報告:測評人員根據(jù)上述結(jié)果,創(chuàng)建一份詳細(xì)的、對開發(fā)人員友好的報告。該報告將包括發(fā)現(xiàn)的所有漏洞、嚴(yán)重性、以及如何整改的參考。
- 實施整改:開發(fā)人員通過實施必要代碼修復(fù)與邏輯整改,解決特定于移動應(yīng)用的安全漏洞,增強其安全態(tài)勢,并保護(hù)用戶數(shù)據(jù)。
- 重新測試:測評人員開展對整改后移動應(yīng)用的重新測評,以避免應(yīng)用“帶傷”上線。
- 記錄所有內(nèi)容:全面記錄整改內(nèi)容、復(fù)測結(jié)果、補救措施,以滿足合規(guī)性要求,并為下一輪測評提供參考。
- 定期測評:測評人員應(yīng)定期對移動應(yīng)用開展安全測評,特別是在移動應(yīng)用發(fā)生重大更新或變更后,以維護(hù)用戶數(shù)據(jù)和應(yīng)用程序本身的安全。
5.優(yōu)秀實踐
雖然我們執(zhí)行移動應(yīng)用的具體方法與流程,會根據(jù)本系統(tǒng)和應(yīng)用的獨特性不盡相同,但是如下根據(jù)行業(yè)經(jīng)驗總結(jié)出的優(yōu)秀實踐,仍值得你參考,并有助你避開坑點:
- 將移動應(yīng)用的安全測評整合到現(xiàn)有的移動CI/CD管道中,以體現(xiàn)諸如盡早改善安全態(tài)勢和集成,以及降本增效的安全左移優(yōu)勢。
- 參照OWASP 移動應(yīng)用安全測試指南,建立符合實際的安全測試框架,以及時發(fā)現(xiàn)和解決各種常見的典型安全問題。
- 針對不同類型的移動應(yīng)用和不同的使用場景,綜合采用上述提到的SAST、DAST和SCA等多種測試方法。
- 鑒于安全態(tài)勢只是一時,而非一段時間,因此需要團隊中形成定期測試的機制,即:對于一段時間未發(fā)生重大變更的移動應(yīng)用,可引入每半年或每季度開展測評的“底線”,以識別該周期內(nèi)新披露的漏洞。
- 選擇具有互補功能的自動掃描工具,以確保其適合你的CI/CD管道,涵蓋必要的移動應(yīng)用編程語言,并降低誤報率。
- 請不要忽視移動應(yīng)用的后端安全性。即使已測試了前端應(yīng)用的安全性,也需要測試其連接的后端的代碼、配置、所處的環(huán)境、數(shù)據(jù)交換的鏈路等安全性。
- 鑒于移動終端的多樣性,應(yīng)盡可能多地在不同設(shè)備上測試移動應(yīng)用的安裝與運行,可考慮使用自動化來提高此過程的效率。
譯者介紹
陳峻(Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項目實施經(jīng)驗,善于對內(nèi)外部資源與風(fēng)險實施管控,專注傳播網(wǎng)絡(luò)與信息安全知識與經(jīng)驗。