趙 兆
(江蘇省電子產品質量監督檢驗研究院(江蘇省信息安全測評中心),江蘇 無錫 214073)
移動通信越來越受到重視,可以認為是繼互聯網之后最重要的技術發展之一。不幸的是,和互聯網一樣,安全性似乎是事后才想起來的事。近幾年CVE,OSVDB,SecFocus公布的Andriod主要漏洞如圖1所示[1]。

圖1 andriod主要漏洞
針對漏洞,Andriod應用主要存在如下威脅:
(1)惡意代碼數量呈倍數增長,并且出現了對抗分析、查殺、檢測的技術。
(2)數字內容和應用軟件的版權不斷遭到侵害,軟件破解、應用內付費破解、廣告庫修改和植入、軟件篡改、惡意代碼植入等現象普遍存在。
(3)官方系統、第三方定制系統和預裝軟件的漏洞不斷被挖掘,對系統穩定與安全產生很大的威脅。
(4)應用軟件本身的安全漏洞頻繁出現在國內外互聯網企業的產品中。
(5)移動設備正融入辦公環境,但針對移動平臺的攻擊趨勢日益明顯。
(6)移動支付從概念逐步轉為實踐,而對算法和協議的攻擊和通信技術的攻擊時常發生。
應用程序是移動客戶端上的最主要的攻擊面[2]。畢竟,應用程序和移動操作系統是終端用戶和其他軟件的基本接觸點,所以這也是所有問題發生的地方。應用程序可能造受如下攻擊。
一個Android應用所能訪問的資源是受到Android安全模型的限制的,它只能訪問它自己擁有的文件,并且它只能訪問在安裝應用時它的mainfest文件中所申請的設備資源和功能。安全模型防止惡意應用執行非法操作和訪問敏感數據。
但是如果一個應用能在root用戶權限下運行的話,這套安全模型就失效了。運行在root用戶權限下的應用能直接訪問設備資源,繞過了通常要求的權限檢查限制,這就給了該應用完全控制設備和設備上安裝的所有其他應用的潛在能力。惡意應用使用此技術獲得設備的控制權。如:GingreBreak(CVE-2011-1823),Ice Cream Sandwich觸發chmod/chown漏洞
攻擊者可能通過人工靜態分析查找移動應用漏洞。一般攻擊者不可能訪問你的源代碼,除非他碰巧破了你的源代碼池,他們一般會通過逆向工程,反編譯或反匯編將你的源代碼轉成smali匯編代碼或者從字節碼轉化成Java代碼。
在挖掘漏洞時,例如SQL注入或繞過Android應用與網絡服務的后臺交互認證,人們首先需要觀察和操縱網絡流。可以通過使用網絡嗅探器(如tcpdump或wireshark)進行截獲分析,操縱Android應用和它的終端之間的Http請求和響應。例如:利用burpsuite來截取Android應用和一個基于XML的Web服務器之間的網絡流量。這項技術可以讓你繞過那些可能阻止你繞過客戶端驗證,這類驗證本來可以對通用Web服務漏洞的利用代碼和客戶端信任問題進行有效防護。
Intents是Android應用使用的主要的進程間通信(IPC)方法,應用可以發送Intents以啟動力傳遞數據給內部部件,或發送Intents給其他的應用。
惡意應用可以使用Intents來激活其他應用(在一些情況下是獲取惡意應用沒有權限訪問的功能),或者注入數據給其他應用。根據應用在接收Intents數據后的操作,惡意應用可能造成應用崩潰或執行無法預期的動作。如:命令注入。
NFC是Near Field Communication縮寫,即近距離無線通信技術。NFC手機是指帶有NFC模塊的手機,可以應用在生活的很多方面,比如快速獲取公交車站站點信息、公園地圖等信息、門禁控制、本地支付等。NFC手機提供了一種簡單觸控式的解決方案,可以讓用戶簡單直觀地交換信息、訪問內容和接受服務。
如果一個NFC標簽包含一個指向惡意站點的URL,那么掃描了此標簽的用戶會發現他的設備將受到攻擊。攻擊者可以通過以下兩種方法使用惡意NFC標簽:攻擊者可能制作外表具有說服力的海報并將惡意NFC標簽附在上面;如果標簽沒有相應的寫保護,攻擊者可以重寫標簽。
Android應用可能無意中泄露敏感數據給攻擊者,包括用戶機密、個人信息或者詳細的配置信息,之后,攻擊者可以利用這些信息進行額外的攻擊[3]。
通過內部文件泄露:系統通過分配每個應用程序獨立的UID和GID,來限制一個應用訪問其他應用的文件。但是一個應用可以通過MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE標志來創建全局可讀或全局可寫的文件。
通過外部存儲泄露:任何文件若存儲在可移動存儲器之類的外部存儲上,如SD卡,那么該文件相對同一移動設備上所有應用來說是全局可讀和可寫的。
針對上節提出的6類常見攻擊,提出下安全防范措施:
(1)使用靜態代碼分析可以在不運行程序的前期下對程序存在的潛在問題進行分析,利用CheckStyle,Findbugs,PMD,Android Lint分析工具進行分析。靜態代碼分析可以避免一些低級的問題,與此同時可以規范代碼書寫、提高代碼質量。
(2)如果應用的Service組件不必要導出,或者組件配置了intent filter標簽,建議顯示設置組件的“android:exported”屬性為false。
(3)檢查App所在的目錄,其權限必須為不允許其他組成員讀寫。
(4)重要信息進行加密存儲,由于加密算法加密后的數據為二進制數據,因此在保存時,為了防止出錯,可以將數據轉換成ASCII字符的形式。一般推薦使用Base 64;密鑰由用戶輸入或程序隨機產生,不能寫在代碼中。
(5)Apk簽名校驗,在應用內的關鍵功能入口增加校驗簽名的檢測,如果發現應用簽名非正版,則強制關閉應用或者限制用戶使用。
(6)加殼保護,將核心業務邏輯代碼放入加密的.jar或者.apk文件中,在需要調用時使用Native C/C++代碼進行解密,同時完成對解密后文件的完整性校驗。
隨著Android應用在日常生活中越來越廣泛,從日常娛樂、辦公到日常消費。Android應用安全也更多地受到攻擊者關注。建議應用開發者建立安全風險模型,在系統正式上線運行前進行代碼審查和滲透測試。手機用戶在上載Android應用,應選擇正規的可靠的下載途徑。