android taipei 2013 august - android apps security
Post on 19-Oct-2014
2.789 views
DESCRIPTION
OWASP Mobile Top 10 Risk •Android 客戶端安全 –Android App 架構 –Android 應用程式包 •APK, DEX與JAR •Manifest.xml –權限控制 •APK 分析 傳輸層安全 儲存安全 基礎密碼學認識TRANSCRIPT
Android Apps Security
2013.08.22 @ Android Taipei
Taien Wang<[email protected]>
英屬維京群島商時間軸科技股份有限公司
電子商務事業群
About Taien
• 簡介
– 常任各演討會講師, 資安教育講師與資安顧問
– 熱愛程式設計, 網路架構與資訊安全
• 獎項
– 2012 Node.js Knockout 台灣區, 第二名
– 2011 Microsoft MVP 微軟最有價值專家
– 2011 趨勢雲端程式競賽, 第一名, 最佳人氣獎
– 5th 全國資安技能競賽金盾獎, 第二名
– 5th 華陀盃台灣區網路解疑技能競賽, 佳作
– 入圍 2009 微軟潛能創意盃, 台灣區, 決賽
– 13th 全國大專院校資服創新競賽, 第一名
– 2th 全國資安技能競賽金盾獎, 優選
• 經歷
– 2012 時間軸科技新創事業部研發部門主管
– 2010 Microsoft Technet 講師
– 2010 台灣微軟行銷營運暨行銷處研發助理
– 2010 台灣微軟技術中心研發助理
– 2009 網駭科技 Net-Hack 資安顧問
– 2009 中華民國資訊軟體協會資安推廣專案講師
– 2008 網駭科技 Net-Hack 研發兼技術工程師
大綱
• OWASP Mobile Top 10 Risk
• Android 客戶端安全
– Android App 架構
– Android 應用程式包
• APK, DEX與JAR
• Manifest.xml
– 權限控制
• APK 分析
– 傳輸層安全
– 儲存安全
– 基礎密碼學認識
• 結論
• 參考資料
OWASP Mobile Top 10 Risk
為什麼我們要瞭解安全
• 工程師
– 案子都做不完了, 先滿足需求就好了
• 現實層面
– 世界就這麼大, 產品做大了怎麼會有奇奇怪怪的問題
– 除了業務上的問題, 還有技術上的
• 滿足需求
– 將需求定義為用戶為了解決問題或達成目標所需要的條件或功能, 或為
了滿足合約, 標準, 規範或其他正是有效的文件, 系統所需擁有的或滿足
的條件或功能
– NSI/IEEE Standard 729
OWASP Mobile Security Project - Top Ten Mobile Risks
OWASP Mobile Top Ten Mobile Risks (1/2)
• M1. 不安全的資料儲存(Insecure Data Storage) – 對應案例
– SQLite, Log, Plist, XML, Manifest
– 二進位檔, Cookie, SD卡, 雲端同步
• M2. 弱伺服器端的控制(Weak Server Side Controls) – 對應案例
– OWASP Cloud Top 10 Risks, OWASP Web Top 10 Risk
• M3. 傳輸層保護不足(Insufficient Transport Layer Protection) – 對應案例
– 傳輸介面: Wi-Fi, NFC, Ethernet, 藍芽…
– 傳輸加密(SSL, 客製化加密, WS-Security)
• M4. 客戶端注入(Client Side Injection)
– 本地端注入: SQLite Injection, XSS, Fuzzing
• M5. 粗糙的授權與認證(Poor Authorization and Authentication) – 對應案例
– 部分可攜式行動裝置的網頁應用程式僅採用永不變的數值來執行身分驗證與授權階段
– IMEI, IMSI, UUID, Device ID, MAC
OWASP Mobile Top Ten Mobile Risks (2/2)
• M6. 不適當的會話處理(Improper Session Handling) – 對應案例
– Session, Cookie, Token…
• M7. 經由不受信任輸入的安全決策(Security Decisions Via Untrusted Inputs)
– 透過客戶端注入方式來消耗可攜式裝置硬體資源或提權
• M8. 通道端資料洩漏(Side Channel Data Leakage)
– 應用網頁快取, 記錄檔, 暫存檔洩漏
• M9. 加密失效(Broken Cryptography) – 對應案例
– 演算法遭破解
– 常見名詞
• 編碼, 混淆, 序列化, 雜湊
• M10. 敏感資訊洩漏(Sensitive Informaiton Disclosure) – 對應案例
– 機敏訊息如程式碼中或在設備內
Android 客戶端安全
Android 架構 – 大藍圖
節錄至: Android Apps Security, Sheran A. Gunasekera, 2012
Android 架構 – Radio Interface Layer
節錄至: Android Platform Development Kit, Radio Layer Interface
Android 應用程式
Android Package Kit
• Android Packge Kit(APK) 基本上就是個 ZIP
• 內容包含 DEX, 資源檔, AndroidManifest.xml…
節錄至: Building and Running, Android Developers
JAR 到 DEX 細節
節錄至: Android Apps Security, Sheran A. Gunasekera, 2012
節錄至: Building and Running, Android Developers
JAR 與 DEX 比較
一般打包後的 APK
AndroidManifest.xml
• Android 應用程式用來描述整體資訊的設定檔
– 該應用名稱, 版本號, 最低支援版本, 支援尺寸…
• 描述該應用程式的元件
– activities, services, broadcast receivers, content providers
• 使用到功能, 權限與安全測試
– <uses-feature>
– <uses-permission>, <permission>
– <Instrumentation>
Android 安全架構
• Linux 權限劃分
• 應用程式權限
• 應用程式簽章
Android 權限控制
• Android 利用 Linux 原有的權限管理機制
– 為每個應用程式分配不同的 uid 與 gid
• 更細的權限操作交由 Manifest.xml 定義
• 四大分類
– Normal
– Dangerous
– Signature
– SignatureOrSystem
常見的權限控制
• android.permission.INTERNET
• android.permission.ACCESS_GPS
• android.permission.ACCESS_FINE_LOCATION
• android.permission.ACCESS_COARSE_LOCATION
• android.permission.ACCESS_NETWORK_STATE
• android.permission.CAMERA
• android.permission.READ_PHONE_STATE
• android.permission.WRITE_EXTERNAL_STORAGE
• android.permission.WAKE_LOCK
• android.permission.GET_ACCOUNTS
• android.permission.USE_CREDENTIALS
• android.permission.VIBRATE
• android.permission.LIGHTS
• android.permission.SOUND
• android.permission.ACCESS_MOCK_LOCATION
• com.google.android.c2dm.permission.RECEIVE
• …
AndroidManifest.xml 解譯(1/3)
• 工具
– AXMLPrinter2.jar
• 命令
– java -jar AXMLPrinter2.jar AndroidManifest.xml >
AndroidManifest_decode.xml
AndroidManifest.xml 解譯 – 編譯過的(2/3)
AndroidManifest.xml 解譯 – 反解回的(3/3)
分析 APK
• 方法一: 較適合於軟體邏輯分析
– dex2jar
• 將 dex 轉為 jar
– jd-gui, DJ Java Decompiler
• 使用 jd-gui 觀察架構
• DJ Java Decompiler 解回 .class 與 .java
• 方法二: 較適合於暴力破解
– Apktool
• 解回所有資源檔, 並產出 smali 檔
• 方法三:
– IDA Pro(6.1以後支援 Android)
破解方法
• 訊息回饋法
• 特徵函數法
• 順序查看法
• 代碼注入法
• 暴力破解法
模擬常見案例
本地端序號驗證
Live Demo1: 本地端序號驗證
• 問題
– 本地端相關機密訊息沒有保護
– 握有秘密太少
• 對應 OWASP Mobile 風險
– M9. 加密失效
– M10. 敏感資訊洩漏
• 破解方式
– 逆向工程
• 邏輯分析
• 暴力破解
ProGuard - 保護 APK
• ProGuard
– 為 Java 包優化器與混淆器
– 提供命令列與圖形化介面共設定操作
• 目前新的 Android 安裝已內建在 SDK 工具
– 啟用他時請將專案中 project.properties 裡的
• proguard.config=${sdk.dir}/tools/proguard/proguard-
android.txt:proguard-project.txt
– 註解取消
永遠不要相信混淆器與密碼學百分百保護你 了解原理合理使用才是王道
通訊安全
• HTTP
• HTTPS
• Socket
• SMS
• BlueTooth
攔截 HTTP 通訊
• Charles
• Zed Attack Proxy(ZAP)
API 沒有驗證
比較安全的做法
模擬常見案例
網路序號驗證
Live Demo2: 網路序號驗證
• 問題
– 網路驗證
– 驗證太簡易
• 對應 OWASP Mobile 風險
– M3. 傳輸層保護不足
– M5. 粗糙的授權與認證
– M6. 不適當的會話處理
• 破解方式
– 網路通訊分析
– 攔截竄改
Android 常見儲存
• SQLite
– SQLite Injection
• SharedPreferences
• 客製化檔案
– 二進位
– 文字檔
• 存放位子
– App 目錄
– SD 卡
實際案例 - SharedPreferences
實際案例 - SP 與 SQLite
基礎密碼學認識
• 雜湊演算法
– 不要忘了 salt
• 加密演算法
– 非對稱式加密
• 公開金鑰
– 對稱式加密
• 區塊加密
– ECB, CBC, CFB
– OFB, CTR
• 串流加密
• 驗證機制
– 有驗證表
– 無驗證表
• 亂數產生
– 千萬不要把時間當亂數使用
• 其他名詞
– 編碼
– 混淆
– 序列化
• 沒有任何保護
實際案例
XXX案例
往事只能在記憶回味
結論
• 安全是一段旅程,而不是目的地
• 優化無止境,產品無完美
• 欲進行安全前可進行風險評鑑
– 參考相關風險報告
• OWASP Mobile Top 10
• 先有安全意識,於適當時機導入公司
– Building Security In 讓安全成為軟體開發的必要項目
– SDLC
參考資料
• Projects/OWASP Mobile Security Project - Top Ten Mobile Risks,
OWASP
• OWASP Top 10 Mobile Risks, Jack Mannino
• Top 10 Cloud Risks That Will Keep You Awake at Night, Shankar
Babu Chebrolu, Cisco
• <permission>, Android Developers
• Manifest.permission, Android Developers
簡 報 完 畢