Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android app security安全問題總結

Android app security安全問題總結

編輯:關於Android編程

數據洩漏

    本地文件敏感數據不能明文保存,不能偽加密(Base64,自定義算法等)android:allowbackup=false. 防止 adb backup 導出數據Activity intent 的數據洩漏。比如通過 getRecentTask 然後找到對應的intent 拿到數據。Broadcast Intent,自己應用內使用 LocaBroadcast,避免被別的應用收到,或者 setPackage做限制。ClipBorad 數據洩漏。WebView settings setSavePassword(false) 這個會明文保存密碼。Log 要關閉,防止重要數據洩漏。使用boolean常量開關 或者 proguard 直接優化。鍵盤事件的讀取預防,/dev/input/event 可以讀取到按鍵和觸屏。鍵盤建議隨機布局自定義。對於截屏 android5.0以及以後 window.setFlag(LayoutParam.FLAG_SECURE) 禁止錄屏。

    客戶端暴露的攻擊面

      使用外部數據不進行校驗,比如app升級,插件安裝等,需要對這些數據進行合法性校驗。zip解壓目錄覆蓋風險。zip中允許 ../../file 這樣的路徑。如果一旦解壓到當前目錄,有可能覆蓋上級目錄的文件。Android components 不當暴露,不需要export的需要 exported = false。本地端口開放問題,socket server。盡量不要開放此接口。如果要的話,也只是bind到 127.0.0.1,不要暴露給局域網,避免局域網內惡意代碼掃描端口。另外 app 可以通過 讀取proc 通過 端口查看是哪個app連接該端口。(收selinux限制)。另外就是使用此方法不要實現一些特別敏感的功能。開放組件的 dos攻擊。開放的 activity service receiver等需要對傳入的intent做合法性校驗,以及相關的類型轉換保護。防止惡意代碼攻擊。PendingIntent,不要給第三方app發送PendingIntent。避免數據被修改。

      界面的劫持

        惡意懸浮框,在我們的app上邊覆蓋一個懸浮框,誤導用戶點擊不合理的按鍵。這時候需要設置setFilterTouchesWhenObscured 為 false,被別的窗口覆蓋的話,不接受按鍵。釣魚窗口,當用戶打開我們的界面時,惡意程序也打開一個類似的釣魚界面。我們需要在關鍵的界面 onPause的時候 做必要的檢查,比如看看棧頂是不是自己的界面。(5.0以後受限制?)ContentProvider sql 注入。參數中包含惡意sql;– 。最簡單的是做 sql參數校驗。ContentProvider openFile 便利目錄風險。

        Webview遠程方法調用漏洞

          4.2以下手機 addJavaScriptInterface 會導致漏洞。js通過 getClass 後獲取java 類,然後調用相關函數。系統自己帶一個 searchbox_xxx 需要自己移出掉。

          不安全的網絡通信

            中間人攻擊。敏感數據不要明文傳輸。惡意wifi可以通過 kali linux 很簡單的創建。在商場進行釣魚。加密算法
              RC4 已經過時,不推薦使用。SHA256 最好,不推薦md5 sha1RSA 要 2048 bit,要 padding。對稱加密密鑰不要放在代碼中。可以協商後保存在本地加密存儲。AES 不要使用 ECB 模式,初始化向量不要使用固定的常量。SecureRandome 不要使用setSeed(),使用也不要傳入固定值 https 中間人攻擊
                cookie 要設置為 secure(secure flag),否則該cookie會在 http會話中傳輸。不要使用 SSLv3以及更低版本在程序中不要自己處理證書相關的校驗。 SSL證書校驗
                  webview onReceivedSslError後 不要自己做什麼處理。android 系統中有時候某些手機證書不全,但是也不能忽略該證書錯誤。不要覆蓋 Trustmanager. checkServerTrusted 不要重寫。HostNameVerifier 不要重寫。不要不校驗 hostname。 如何處理呢?
                    通過TrustManagerFactory 導入證書。證書綁定。就是我只認這個證書。自己做 veriry。成本最低。證書可以是自簽名的。 # 二進制攻擊 # 各種黑產QQ群論壇等,看雪論壇。
                      重新打包,插入惡意代碼逆向分析運行時debug,修改數據等 工具
                        apktool,dex2jar, JEBIDA pro (查看 so 代碼,F5 匯編轉c代碼)xposed,Cydia substrate 注入框架 防護
                          理論上沒有100%有效的地域二進制攻擊的方法。但是為啥還要這麼做呢?提高門檻,提高成本,提高他的利益成本(有這時間他可以去找些軟柿子賺錢去)proguard做混淆 安全性校驗
                            檢查apk有沒有被修改檢查簽名(不靠譜,此處代碼可以被修改)。但是有比沒有強。黑產都是些批量自動化的,可以防止一些。增加難度
                              放在 native代碼中多點檢查檢查的代碼不要放在退出點,放在比較隱蔽的地方。然後後邊別的地方再退出程序。和網絡請求結合,傳參數到server,server返回不合法數據等。 反調試,反注入
                                debuggable = falseDebug.isDebuggerConnected 進行檢查。監控 JDWP 線程(hook socket,進行數據過濾)多進程ptrace保護。進程只能被ptrace一次。(多個進程間需要pipe通信監控ptrace進程是否退出,監聽到,主程序也退出)檢查tracerPid,被trace後為不為0(也可以被繞過)檢查 gdb android_server gdbserver 是否在手機上(可改名)檢查 xposed框架是否在運行。檢查是否被 hook(java,GOT, inline)檢查設備是否被root或者是在 emulator上運行。檢查 jailbreak(iOS) 字符串混淆加密
                                  java native中的字符串都要做混淆。代碼放在 native 層。隱藏native層的函數名, dlsymobfuscator-llvm 混淆 natived代碼。支持 SUB FLA BCF 等幾種模式。 其他native保護
                                    so 中檢查簽名jni函數名混淆刪除所有不需要 export 的符號。編譯選項中設置。elf tricks,設置一些數據讓工具 crash。so整體加密。加殼。開源的 upx。特定函數加密。 應用加固
                                      非定制化方案,無混淆,無字符串加密。hook系統代碼,等,有比較大的兼容性問題。影響啟動速度。無 so 層保護。

                                      自動化掃描工具

                                        360捉蟲獵手

                                        app自動檢查上報機制

                                          檢測到惡意攻擊,上報給服務器,可以了解風險面。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved