OWASP移動安全漏洞Top 10中第4個就是無意識的數據泄漏。當應用程序存儲數據的位置本身是脆弱的時,就會造成無意識的數據泄漏。這些位置可能包括剪貼板,URL緩存,瀏覽器的Cookies,HTML5數據存儲,分析數據等等。例如,一個用戶在登錄銀行應用的時候已經把密碼復制到了剪貼板,惡意應用程序通過訪問用戶剪貼板數據就可以獲取密碼了。
數據可以在用戶無意識的情況下被各種工具捕獲。開發人員經常忽視包括log/debug輸出信息,Cookies,Web歷史記錄,Web緩存等的一些數據存儲方式存在的安全隱患。例如,通常瀏覽器訪問頁面時,會在臨時文件夾下保存頁面的html,js,圖片等等。當頁面上包含敏感信息時,這些信息也會存儲在臨時文件中。這就造成了安全隱患。在移動設備上盡可能不要存儲/緩存敏感數據。這是避免設備上緩存的數據泄漏的最好的方式。
開發建議
為了防止HTTP緩存,特別是HTTPS傳輸數據的緩存,開發人員應該配置Android不緩存網絡數據。
為了避免為任何Web過程(如注冊)緩存URL歷史記錄和頁面數據,我們應該在Web服務器上配置HTTP緩存頭。HTTP協議1.1版中,規定了緩存的使用。其中,Cache-Control: no-store這個應答頭可以滿足我們的需要。Cache-Control:no-store要求瀏覽器必須不存儲響應或者引起響應的請求的任何內容。對于Web應用程序,HTML表單輸入可以通過設置autocomplete=off讓瀏覽器不緩存值。避免緩存應該在應用程序使用后通過對設備數據的取證進行驗證。
如果你的應用程序通過WebView訪問敏感數據,你可以使用?clearCache()方法來刪除任何存儲在本地的文件。
由于多任務處理的原因,整個應用程序都可以駐留在內存中,所以Android應用程序界面也會駐留在內存中。發現或者盜取了設備的攻擊者可以直接查看到仍然駐留在內存中的用戶之前查看過的界面,并看到仍顯示在GUI上的所以數據。銀行應用程序就是一個例子,一個用戶查看了交易記錄,然后“退出”應用程序。攻擊者通過直接啟動交易視圖activity可以看到以前的交易被顯示出來。
開發建議
如果緩存了用戶名,在運行時,用戶名會在任何類型的身份驗證之前加載進內存,從而允許潛在的惡意進程截獲用戶名。
開發建議
很難做到既便利地為用戶存儲用戶名,同時又能避免不安全的存儲或潛在的運行時攔截造成的信息泄漏。盡管用戶名不像密碼那樣敏感,但它屬于隱私數據應該得到保護。一個安全性較高的緩存用戶名的可行的方法就是存儲掩蔽的用戶名,而不是真實的用戶名,如在身份認證的時候用hash值代替用戶名。這個hash值可以包含一個唯一的設備token,這個設備token是在用戶注冊時獲取的。使用hash和設備token的好處就是真實的用戶名并沒有存儲在本地,也不會在加載進內存后得不到保護,將這個值復制到其它設備或者在web上使用都會因獲取到的設備token值不同而不能使用。攻擊者必須挖掘更多的信息(明文帳號、設備特征碼、密碼)才能成功的竊取用戶憑證。
鍵盤緩存是意外的數據泄漏問題之一。安卓鍵盤包含一個用戶字典,如果一個用戶在文本框輸入一些文本,輸入法就可能通過用戶字典緩存一些由用戶輸入的數據,用于以后對用戶的輸入進行自動糾錯。而此用戶字典不需要什么特殊權限就在任何應用中使用。惡意軟件可以通過獲取鍵盤緩存提取這些數據。緩存的內容超出了應用程序的管理權限,所以應用程序不能從緩存中刪除數據。
攻擊示例:https://www.youtube.com/watch?v=o6SlUy5mmBQ
開發建議
對于任何敏感信息(不僅對密碼字段)禁用自動糾錯的功能。因為鍵盤緩存的敏感信息可能是可恢復的。
為了提高安全性,可以考慮實現自繪鍵盤,它可以禁用緩存,并提供其它的保護功能,如鍵盤監聽保護。
無論數據源是否加密,存在于剪貼板中的敏感數據都是可以被任意修改的。如果用戶復制的是明文敏感數據,那么其它應用程序通過訪問剪貼板就可以獲取到該明文敏感數據了。
修復:
在適當的情況下,禁用復制/粘貼處理敏感數據。消除復制選項可以減少數據暴露的風險。在安卓系統上,可以通過任何應用程序訪問剪貼板,因此,如果需要共享敏感數據,建議使用content provider。
Android通過調用file.delete()
是不能安全地把文件抹去。只要文件不被覆蓋就可以被進行恢復。Android Data Recovery就具備這個功能。
開發建議
開發者應該假定寫入設備的任何數據都可以被恢復。因此,在某些情況下,加密可以提供額外的一層保護。
另外一種可能方法是刪除一個文件,然后創建一個大文件覆蓋所有的可用空間,迫使NAND閃存擦除所有未分配空間也是可能的。這種技術的缺點是損耗NAND閃存,導致應用和整個設備的響應速度變慢,顯著增加功耗。對于大多數應用不建議使用此方法。理想的解決辦法是盡可能不要在設備上存儲敏感信息。
Android 5.0新增的屏幕錄制接口,無需特殊權限,使用如下系統API即可實現屏幕錄制功能:
發起錄制請求后,系統彈出如下提示框請求用戶確認:
在上圖中,“AZ Screen Recorder”為需要錄制屏幕的軟件名稱,“將開始截取您的屏幕上顯示的所有內容”是系統自帶的提示信息,不可更改或刪除。用戶點擊“立即開始”便開始錄制屏幕,錄制完成后在指定的目錄生成mp4文件。
但其中存在著漏洞,具體參考:http://www.freebuf.com/vuls/81905.html。攻擊者只需要給惡意程序構造一段特殊的,讀起來很“合理的”應用程序名,就可以將該提示框變成一個UI陷阱,使其失去原有的“錄屏授權”提示功能,并使惡意程序在用戶不知情的情況下錄制用戶手機屏幕。
開發建議
在涉及用戶隱私的Acitivity中(例如登錄,支付等其他輸入敏感信息的界面中)增加WindowManager.LayoutParams.FLAG_SECURE
屬性,該屬性能防止屏幕被截圖和錄制。