WebView and APP Security - Anfa

Application Development Issues on Android
Insufficient Transport Layer
中間使用SSL傳輸會比較穩定
    中間有交換憑證,如果錯誤憑證會中止傳輸
    若可以偽造憑證仍可以攻擊
    什麼時候有機會被攻擊

        開發階段認為沒有必要而被攻擊

        使用過舊的surface

        沒有被第三方憑證認可的憑證

        無法處理而忽略
        用別人的實作手法而出現漏洞
        太懶惰
    常見不安全的SSL pitfail 模式
        TrustManager的checkServerTrust沒有重新Override
        SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER給予過多任權限

        onReceivedSslError Override成ignore error
    Cases
        zip file directory traversal

            zip是以相對路徑壓縮

            可以往前解壓縮送入病毒(../../../)

            Samsung pre-installed Swiftkey

                語言包更新

                權限過高導致擁有以上的漏洞,讓攻擊者有機會植入木馬

            Dolphin Browser

                Theme

                同上問題

        Tampering Webpage Content

            網頁被修改

            addJavascriptInterface

                CVE-2012-6636

                API 17以前

                讓攻擊者有機會使用到使用者指令,成為漏洞

                google有提供移除已知JavaScript interface的語法

                不需要就移除吧

                將Android 更新到 API 17以上

                注意有否第三方lib在使用

                再載入頁面,可使用GOOGLE提供的工具,將一些已知的惡意Interface擋下

            Intent Scheme

                Mercury Browser

                    Wifi file transfer

                    先設定好攻擊語法,再利用中間人攻擊

        Conclusion

            不要無視SSL錯誤,使用預設即可

            如果是非第三方的憑證,要小心處理

            將JavaScriptInterface移除
        Implicit Intent
            CVE-2014-8609
            AddAccountSettings.addAccount() 會給一個PendingIntent的空窗給第三方有機會給權限

                  較低的人使用權限高的功能
            從google出來的所以通常都能獲得比較高的權限
        改善方式
            建立新的intent
            完整的設定intent的資料
            為了不讓別人蓋掉資料所以給別人的不是空白的intent
            避開被攻擊者覆蓋的危機
    Unintended component exposed
        CVE-2013-6272
            //Google問題真多
            少打了“android:”所以讓防護的程式碼無效
        CVE-2014-8610
            MMS apps 未檢查權限
            開發者大概忘了 intent field (filter?)會影響權限
            讓不能傳簡訊的人也可以傳簡訊
            解決方法:檢查權限
    SQL injection
        資料庫注入攻擊
        //不會自己google OWASP上面有
        沒有做字符處理,造成攻擊者可使用SQL與法進行攻擊
        經典’ or 1=1 -- ‘ 通常打單引號就會知道有沒有辦法注入
        Cases
            E-bay

                CVE-2014-8507

                將SQL語法改變來避開

        Conclusion
            驗證輸入要做好
    當應用程式使用android內建的備分功能,若沒有上鎖,則可以以某些指令攻擊
        不要使用或不要存放敏感資料

    下載Android Studio&Genymotion準備Demo
        http://developer.android.com/sdk/index.html
        https://www.genymotion.com
        下載android manager API 16
    Improper File Permission
        自己寫的時候才要注意
        預設應該都是安全的
    Insecure File Storage
        sdcard較為開放
        敏感資料不要存放在這麼開放的空間
        或是你對自己的加密有把握的話
        Case
            PC HOME
    Demo&實作囉
        先開一個專案嘗試打開
        如果沒有Genymotion的話會有介面去請你選擇ADB
            執行速度偏慢
            Genymotion建立映像檔會快很多
        程式跑得出來表示android應該是OK的
        Genymotion選擇API 16之後一路建立映像檔
        下載apk-tools來對apk反組譯成jar檔
        先看androidmanifest.xml
            類似HTML的語法
            //我藍頻了....
        開始設定debug點
        找到OnCreate()的function
            signature不對無法叫到function
            //類似unity的GameObject.sendMessage();
            //藍頻again
        使用JD-GUI觀看jar檔案
            或是bytecode viewer
            //超級LAG啊
        從android studio build 一個apk
            將apk解成jar
            用JD-GUI觀察jar來找到漏洞
        測試app的時候app太大,如果可以下中斷點可以比較容易縮小範圍檢查,也可以從進入點開始處理問題

end