安卓應用程式滲透測試(八)
在上一篇文章 ofollow,noindex">安卓應用程式滲透測試七 中,我們已經講到了不安全的外部儲存和內部儲存,還有不安全的通訊。本文繼續講解其他問題。
攻擊Content Provider
在開始之前,建議先閱讀一下關於Content Provider的相關內容,在 安卓應用程式滲透測試五 中有介紹,當一個app想跟另外一個app共享資料時,Content Provider至關重要,所以讀一下還是很有幫助的。
Content Provider通過處理其他app的請求來管理對結構化資料集的訪問。所有的訪問請求都會呼叫Content Resolver,然後再通過Content Resolver去呼叫具體的Content Provider方法進行訪問。
常用方法如下:
Query(),Insert(),Update(),Delete(),GetType(),OnCreate()。
因為這些方法跟資料庫操作一樣,所以我們需要檢測URI中是否存在注入。
我們可以使用drozer這個工具來檢測是否存在注入
首先執行如下命令:
Run scanner.provider.finduris –a
接著執行下面這條命令:
Run scanner.provider.injection -a
Content query --uri
緩解措施
·如果content provider只在你的app使用,那麼應該在manifest檔案中設定為:android:exported=false
· 如果你想匯出content provider,你也應該為其他一個或多個app設定讀寫許可權。
· 如果你使用content provider只在你自己的app之間共享資料,那麼最好將android:protectionLevel的屬性設定為“signature”保護,即簽名保護。
· 訪問content provider時,使用引數化查詢方法,如query(),update()和delete()等,這樣可以避免來自不信任源的潛在SQL%E6%B3%A8%E5%85%A5/">SQL注入攻擊。
不安全的加密技術
目前,絕大部分web應用都採用密碼技術來保護敏感資料。但是,敏感資料沒有加密的情況也是很普遍的。即使那些應用進行了加密,也是不安全的,因為他們通常採用的是設計存在問題的密碼技術,要麼使用不恰當的密碼,要麼使用了強密碼,但是卻犯了嚴重的錯誤。這些問題就會導致敏感資料洩露和違規操作等。
如圖,採用的是base64加密:(嚴格來說base64並不是加密技術,而是一種編碼方式)
可以使用Burpsuite進行base64解碼就能得到使用者名稱,如圖:
通過逆向得到用於身份驗證演算法的原始碼,如圖:
然後使用AES-Exploit對密碼進行破解,可以得出密碼,如圖:
緩解措施
· 不使用不安全的加密演算法,比如MD5/SHA1。選擇更安全的加密演算法,比如SHA256,甚至更好的演算法。
· 離線生成金鑰對並小心謹慎的儲存私鑰,千萬不要在不安全的通道中傳輸金鑰。
· 重點保護基礎設施的憑證,比如資料庫憑證或MQ佇列訪問詳情,通過使用嚴格的檔案系統許可權和控制進行保護,或者採用安全的加密技術,且不容易被本地使用者和遠端使用者進行破解。
· 確保儲存在磁碟中的加密資料沒那麼輕易破解。例如,如果資料庫連線池進行未加密的訪問,那麼資料庫加密是沒有意義的。
原始碼中的硬編碼密碼
· 硬編碼密碼可能會損害系統安全,而且損害之後難以補救。
· 千萬不要對密碼進行硬編碼。硬編碼不僅能讓所有的專案開發人員看到密碼,而且會讓修復問題變得異常困難。
· 一旦程式碼投入使用,密碼就無法修改,除非對軟體進行打補丁升級。如果使用密碼保護的賬戶遭到入侵,那問題就大了,系統所有者將不得不在安全性和可用性之間做出選擇。