Advertisement
Advertisement

More Related Content

Advertisement

Mobile 開發常見資安議題

  1. Mobile 開發 常⾒見見資訊安全介紹 賴俊安(Joey Lai)
  2. . . . . . . () 2 2
  3. 第三⽅方Pokemon暗藏⽊木⾺馬 發現有惡惡意軟體開發者將遠端存取⽊木⾺馬 (Android.Sandorat)偽裝成Pokémon Go應⽤用 程式,散佈在多個下載網站和遊戲論壇供玩家下載。⼀一旦玩家安裝了了有⽊木⾺馬病毒的 Pokémon Go之後,攻擊者就獲得使⽤用者⼿手機的完全存取權限甚⾄至是信⽤用卡資料。
  4. 官⽅方APP 資安風險 reference http://news.ltn.com.tw/news/politics/paper/1100473
  5. Gogoro APP 遭破解 reference http://www.setn.com/News.aspx?NewsID=166617 http://www.techbang.com/posts/44967-gogoro-three-funding-risk-inside-be-careful-all-internet- products
  6. OWASP • 開放網路路軟體安全計畫,簡稱OWASP(Open Web Application Security Project) • 開放社群、非營利利性組織,全球⽬目前有82分會,主要⽬目標 是研議協助解決網路路軟體安全之標準、⼯工具與技術⽂文件, 長期致⼒力力於協助政府或企業瞭解並改善應⽤用程式的安全性 • 美國聯聯邦貿易易委員會(FTC)強烈建議所有企業務必遵循 OWASP所發佈的⼗十⼤大網路路弱點防護守則,美國國防部亦 將此守則列列為最佳實務,連國際信⽤用卡資料安技術(PCI) 標準更更將其列列為必要元件
  7. OWASP Mobile Top 10 • M1不當使⽤用⾏行行動作業平台(M1 - Improper Platform Usage) • M2不安全資料儲存(M2 - Insecure Data Storage) • M3不安全通訊(M3 - Insecure Communication) • M4不安全⾝身分認證(M4 - Insecure Authentication) • M5不⾜足夠的加密(M5 - Insufficient Cryptography)
  8. OWASP Mobile Top 10 • M6不安全授權(M6 - Insecure Authorization) • M7⽤用⼾戶端程式碼品質(M7 - Client Code Quality ) • M8程式碼竄改(M8 -Code Tampering) • M9逆向⼯工程(M9 - Reverse Engineering) • M10多餘的功能(M10 - Extraneous Functionality)
  9. M1不當使⽤用⾏行行動作業平台(M1 - Improper Platform Usage) • 誤⽤用平台功能或平台安全控制使⽤用失敗(如 Android intents, permissions, Touch ID或 Keychain 誤⽤用)
  10. M1不當使⽤用⾏行行動作業平台(M1 - Improper Platform Usage) • iOS • iOS7以上螢幕在背景時快取縮圖 • 被存在(App Folder) /Library/Caches/ Snapshots/com.bundle.id.of.your.app/ • 使⽤用applicationWillResignActive來來蓋⼀一張圖或是清除機敏資訊 • applicationDidBecomeActive時還原 • Android • 在登入畫⾯面避免被截圖 • getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
  11. M1不當使⽤用⾏行行動作業平台(M1 - Improper Platform Usage) • iOS • Networking Cache Policies • HTTP或HTTPS的 request的URLCache • (App Folder)/Library/Caches/com.bundle.id.of.your.app/Cache.db • 清除Cache • [[NSURLCache sharedURLCache] removeAllCachedResponses]; • [[NSURLCache sharedURLCache] setDiskCapacity:0]; • [[NSURLCache sharedURLCache] setMemoryCapacity:0];
  12. M1不當使⽤用⾏行行動作業平台(M1 - Improper Platform Usage) • Android • 在正式環境的App應將android:debuggable=“false” • allowBackup 設為false • Intents 限制使⽤用 • 如service使⽤用android:exported=“false” • 應只取⽤用需要之permission
  13. M2不安全資料儲存(M2 - Insecure Data Storage) • ⽤用⼾戶端裝置未適當保護機敏資料,例例如:機敏資 料(帳號、密碼等)未加密或誤認資料”編碼”即已 加密,因⽽而可能導致機敏資料外洩
  14. M2不安全資料儲存(M2 - Insecure Data Storage) • iOS • NSUserDefaults儲存機敏資料在JB⼿手機可輕易易存取 • 鑰匙串串(Keychain)功能使⽤用iOS 7以上的版本時,若若惡惡意第三⽅方有機會存取到有 加密的iTunes備份,Keychain就有可能被破解 • 因為當iTunes備份被啟⽤用時,iOS會重新對Keychain進⾏行行加密,所以這時如果 惡惡意第三⽅方可以知道備份的加密密碼,那麼Keychain就有可能部分被解密。
 • 此外,Keychain在有進⾏行行越獄( jailbreak)的設備上,其存取控管也可能會失 效。在有越獄的⼿手機上,任何的應⽤用程式都可能存取到別隻程式的Keychain內 容。⽽而對於那些本⾝身就含有Bootrom漏洞洞(Bootrom exploit)的舊設備(例例如 iPhone4),攻擊者可以藉由實體存取⽽而破解Keychain。 (Reference ⾏行行動應⽤用資安聯聯盟)
  15. M2不安全資料儲存(M2 - Insecure Data Storage) • 
 • 當有使⽤用Keychain儲存資料時,開發⼈人員應使⽤用最嚴格的防護類別(可參參考 kSecAttrAccessible屬性),⽽而且使⽤用該種類別(class)完全不會影響到App本⾝身的 運作流暢度。例例如,若若你的應⽤用程式並不是設計於背景 (background)執⾏行行的,可 使⽤用kSecAttrAccessibleWhenUnlocked或 kSecAttrAccessibleWhenUnlockedThisDeviceOnly
 • 若若要避免因iTunes備份讓Keychain曝光,可以使⽤用「ThisDeviceOnly」保護類別
 •  對於⾼高度敏感的資料,可考慮使⽤用Keychain所提供的另⼀一種更更安全的保護機 制,即應⽤用程式層的加密機制。 例例如在進入應⽤用程式時,使⽤用者會輸入通⾏行行密碼 (passphrase)以進⾏行行認證,並在資料儲存到Keychain前,⽤用此通⾏行行密碼對資料進 ⾏行行加密 (Reference ⾏行行動應⽤用資安聯聯盟)
  16. M2不安全資料儲存(M2 - Insecure Data Storage) • Android • SharedPreference 儲存機敏資料在root⼿手機可 輕易易存取修改 • 使⽤用NDK儲存機密資訊
  17. M3不安全通訊(M3 - Insecure Communication) • 未以加密⽅方式傳輸機敏資料如HTTPS,或是SSL版 本不正確,SSL handshake不正確,可能導致的 攻擊有中間⼈人攻擊(Man-in-the-middle attack)導致 機敏資料外洩或遭竄改
  18. pay.taipei 未使⽤用 HTTPS Reference http://www.techbang.com/posts/52151-pay-taipei-just-online-offline- because-of-alert-data-is-not-encrypted
  19. 未使⽤用HTTPS • 使⽤用者機敏資料暴暴露在⾼高度風險下(帳號、密碼) • 中間⼈人攻擊(Man-in-the-middle attack)竄改傳輸資 料,造成個資外流、盜刷
  20. 未使⽤用HTTPS • Apple 要求所有提交app store 的app必須使⽤用HTTPS連線
  21. 中間⼈人攻擊(MITM) • reference • https://www.incapsula.com/web-application-security/man-in-the-middle- mitm.html
  22. Certificate Pinning • 把需要進⾏行行比對的憑證存在應⽤用程式,並且在進 ⾏行行SSL Handshake時與伺服器憑證做比對 • 實作可參參考 http://devco.re/blog/2014/08/15/ssl- mishandling-on-mobile-app-development/
  23. M4不安全⾝身分認證 (M4 - Insecure Authentication) • 使⽤用者驗證失敗、session處理理不正確等問題
  24. M4不安全⾝身分認證 (M4 - Insecure Authentication) • App應先進⾏行行驗證如Regular Expression • 不只前端驗證,後端⼀一定要再進⾏行行驗證 • 若若使⽤用OAuth的token需要具有時效性,並且token 需要加密保存 • Session id長度在128bit以上確保不會遭暴暴⼒力力破解
  25. M5不⾜足夠的加密(M5 - Insufficient Cryptography) • 加密的⽅方式不正確或加密程度不⾜足導致破解之可 能 • 使⽤用不安全的演算法如RC2.MD4.MD5.SHA1 • 避免hardcode key在app裡
  26. M6不安全授權(M6 - Insecure Authorization) • 建議使⽤用TLS1.1以上的SSL協議 • 應由後端進⾏行行授權
  27. M7⽤用⼾戶端程式碼品質(M7 - Client Code Quality ) • App程式碼品質不佳造成的問題,如buffer overflow. format string等 • 緩衝區溢位(buffer overflow),是針對程式設計缺陷,向程 式輸入緩衝區寫入使之溢位的內容(通常是超過緩衝區能儲存 的最⼤大數據量量的資料),從⽽而破壞程式執⾏行行、趁著中斷之際並 取得程式乃⾄至系統的控制權。 • 使⽤用靜態分析⼯工具如Xcode static analyze. Android Lint進⾏行行 分析並且改善 • 市⾯面上⼯工具如fortify. checkmarx
  28. M8程式碼竄改(M8 -Code Tampering) • 透過以下⼿手法對程式進⾏行行竄改 • binary patching, local resource modification, method hooking, method swizzling, and dynamic memory modification • 進⾏行行JB. root偵測並且混淆,若若偵測JB. root進⾏行行 相應動作
  29. JB偵測 Reference ⾏行行動應⽤用資安聯聯盟
  30. 拒絕Debug模式執⾏行行 Reference ⾏行行動應⽤用資安聯聯盟
  31. M9逆向⼯工程(M9 - Reverse Engineering) • 透過逆向⼯工程將可了了解程式式如何運作以及進⾏行行 分析造成風險 • iOS • 透過⼯工具如 IDA Pro, Hopper, otool, 對binary檔案 進⾏行行 decompile等進⾏行行反組譯,class-dump查看 class. category. protocol等
  32. M9逆向⼯工程(M9 - Reverse Engineering) • Android • 透過⼯工具如apktool是拿來來把 apk 拆開,反編譯 apk 之後,看到smali檔案跟resource • dex2jar 可以把 apk 轉成 jar再⽤用jd-gui檢視 java code • 可進⾏行行竄改程式並且重新產⽣生apk檔
  33. M9逆向⼯工程(M9 - Reverse Engineering) • 可使⽤用obfuscate進⾏行行程式碼混淆 • Android 本⾝身內建基本proguard⼯工具 • iOS 可⽤用open source https://github.com/ obfuscator-llvm/obfuscator/wiki • 可⽤用 obfuscate進階⼯工具,如DexGuard. Arxan. AppGuard等⼯工具除了了混淆之外也有些是加殼或是 靜態、動態防護
  34. M10多餘的功能(M10 - Extraneous Functionality) • 額外功能,如開發時常常會使⽤用後⾨門或是在側 是環境為了了⽅方便便直接輸入密碼等功能容易易造成 不⼩小⼼心上線到正式環境的風險
  35. M10多餘的功能(M10 - Extraneous Functionality) • 在程式開發階段,應進⾏行行⼈人⼯工code review避免此狀狀況發⽣生,可配 合如pull request機制來來進⾏行行merge前的關卡 • 檢查Log資訊是否不包含機敏資訊 • 使⽤用proxy⼯工具如charles. MITM proxy來來檢查app連線 • iOS • 可以使⽤用不同target或debug flag來來分開環境 • Android • ⽤用debug flag分開環境
  36. 其他常⾒見見問題 • ⾏行行動應⽤用App使⽤用第三⽅方函式庫前,需先確認其是來來⾃自 可靠來來源、有持續更更新並經測試沒有漏 洞洞、後端⽊木⾺馬及 不明傳送⽬目的地。 • 對使⽤用者輸入驗證,避免SQL injection等問題 • iOS 使⽤用 ARC開發 • iOS使⽤用ATS(HTTPS)設定 • JB. Root已弊⼤大於利利
  37. 安全軟體開發 • 設計階段:清楚定義資訊安全政策 • 開發階段:針對原始碼進⾏行行安全漏洞洞掃描,並且針 對漏洞洞等級分類追蹤與修復,及早發現問題並調整 • 測試階段:模擬駭客進⾏行行滲透測試(Penetration Test) • 上線階段:監控並追蹤攻擊,避免造成風險
  38. ⿊黑⽩白箱測試 • iOS • Santoku. Snoop-it. MobSF • Android • Santoku. MobSF
  39. Zero Day 平台 • ZeroDay • 烏雲
  40. Q&A
Advertisement