狠狠撸

狠狠撸Share a Scribd company logo
Mobile 開發
常?見見資訊安全介紹
賴俊安(Joey Lai)
.
. . . . . ()
2 2
第三?方Pokemon暗藏?木?馬
發現有惡惡意軟體開發者將遠端存取?木?馬 (Android.Sandorat)偽裝成Pokémon Go應?用
程式,散佈在多個下載網站和遊戲論壇供玩家下載。?一旦玩家安裝了了有?木?馬病毒的
Pokémon 骋辞之后,攻击者就获得使?用者?手机的完全存取权限甚?至是信?用卡资料。
官?方APP 資安風險
reference
http://news.ltn.com.tw/news/politics/paper/1100473
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
OWASP
? 開放網路路軟體安全計畫,簡稱OWASP(Open Web
Application Security Project)
? 開放社群、非營利利性組織,全球?目前有82分會,主要?目標
是研議協助解決網路路軟體安全之標準、?工具與技術?文件,
長期致?力力於協助政府或企業瞭解並改善應?用程式的安全性
? 美國聯聯邦貿易易委員會(FTC)強烈建議所有企業務必遵循
OWASP所發佈的?十?大網路路弱點防護守則,美國國防部亦
將此守則列列為最佳實務,連國際信?用卡資料安技術(PCI)
標準更更將其列列為必要元件
OWASP Mobile Top 10
? M1不當使?用?行行動作業平台(M1 - Improper Platform
Usage)
? M2不安全資料儲存(M2 - Insecure Data Storage)
? M3不安全通訊(M3 - Insecure Communication)
? M4不安全?身分認證(M4 - Insecure Authentication)
? M5不?足夠的加密(M5 - Insuf?cient Cryptography)
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)
M1不當使?用?行行動作業平台(M1 - Improper Platform
Usage)
? 誤?用平台功能或平台安全控制使?用失敗(如
Android intents, permissions, Touch ID或
Keychain 誤?用)
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);
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];
M1不當使?用?行行動作業平台(M1 - Improper Platform
Usage)
? Android
? 在正式環境的App應將android:debuggable=“false”
? allowBackup 設為false
? Intents 限制使?用
? 如service使?用android:exported=“false”
? 應只取?用需要之permission
M2不安全資料儲存(M2 - Insecure Data Storage)
? ?用?戶端裝置未適當保護機敏資料,例例如:機敏資
料(帳號、密碼等)未加密或誤認資料”編碼”即已
加密,因?而可能導致機敏資料外洩
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 ?行行動應?用資安聯聯盟)
M2不安全資料儲存(M2 - Insecure Data Storage)
? ?
? 當有使?用Keychain儲存資料時,開發?人員應使?用最嚴格的防護類別(可參參考
kSecAttrAccessible屬性),?而且使?用該種類別(class)完全不會影響到App本?身的
運作流暢度。例例如,若若你的應?用程式並不是設計於背景 (background)執?行行的,可
使?用kSecAttrAccessibleWhenUnlocked或
kSecAttrAccessibleWhenUnlockedThisDeviceOnly?
? 若若要避免因iTunes備份讓Keychain曝光,可以使?用「ThisDeviceOnly」保護類別?
? ?對於?高度敏感的資料,可考慮使?用Keychain所提供的另?一種更更安全的保護機
制,即應?用程式層的加密機制。 例例如在進入應?用程式時,使?用者會輸入通?行行密碼
(passphrase)以進?行行認證,並在資料儲存到Keychain前,?用此通?行行密碼對資料進
?行行加密
(Reference ?行行動應?用資安聯聯盟)
M2不安全資料儲存(M2 - Insecure Data Storage)
? Android
? SharedPreference 儲存機敏資料在root?手機可
輕易易存取修改
? 使?用NDK儲存機密資訊
M3不安全通訊(M3 - Insecure Communication)
? 未以加密?方式傳輸機敏資料如HTTPS,或是SSL版
本不正確,SSL handshake不正確,可能導致的
攻擊有中間?人攻擊(Man-in-the-middle attack)導致
機敏資料外洩或遭竄改
pay.taipei 未使?用 HTTPS
Reference
http://www.techbang.com/posts/52151-pay-taipei-just-online-of?ine-
because-of-alert-data-is-not-encrypted
未使?用HTTPS
? 使?用者機敏資料暴暴露在?高度風險下(帳號、密碼)
? 中間?人攻擊(Man-in-the-middle attack)竄改傳輸資
料,造成個資外流、盜刷
未使?用HTTPS
? Apple 要求所有提交app store
的app必須使?用HTTPS連線
中間?人攻擊(MITM)
? reference
? https://www.incapsula.com/web-application-security/man-in-the-middle-
mitm.html
Certi?cate Pinning
? 把需要進?行行比對的憑證存在應?用程式,並且在進
?行行SSL Handshake時與伺服器憑證做比對
? 實作可參參考 http://devco.re/blog/2014/08/15/ssl-
mishandling-on-mobile-app-development/
M4不安全?身分認證 (M4 - Insecure Authentication)
? 使?用者驗證失敗、session處理理不正確等問題
M4不安全?身分認證 (M4 - Insecure Authentication)
? App應先進?行行驗證如Regular Expression
? 不只前端驗證,後端?一定要再進?行行驗證
? 若若使?用OAuth的token需要具有時效性,並且token
需要加密保存
? Session id長度在128bit以上確保不會遭暴暴?力力破解
M5不?足夠的加密(M5 - Insuf?cient Cryptography)
? 加密的?方式不正確或加密程度不?足導致破解之可
能
? 使?用不安全的演算法如RC2.MD4.MD5.SHA1
? 避免hardcode key在app裡
M6不安全授權(M6 - Insecure Authorization)
? 建議使?用TLS1.1以上的SSL協議
? 應由後端進?行行授權
M7?用?戶端程式碼品質(M7 - Client Code Quality )
? App程式碼品質不佳造成的問題,如buffer over?ow. format
string等
? 緩衝區溢位(buffer over?ow),是針對程式設計缺陷,向程
式輸入緩衝區寫入使之溢位的內容(通常是超過緩衝區能儲存
的最?大數據量量的資料),從?而破壞程式執?行行、趁著中斷之際並
取得程式乃?至系統的控制權。
? 使?用靜態分析?工具如Xcode static analyze. Android Lint進?行行
分析並且改善
? 市?面上?工具如fortify. checkmarx
M8程式碼竄改(M8 -Code Tampering)
? 透過以下?手法對程式進?行行竄改
? binary patching, local resource modi?cation,
method hooking, method swizzling, and
dynamic memory modi?cation
? 進?行行JB. root偵測並且混淆,若若偵測JB. root進?行行
相應動作
JB偵測
Reference
?行行動應?用資安聯聯盟
拒絕Debug模式執?行行
Reference
?行行動應?用資安聯聯盟
M9逆向?工程(M9 - Reverse Engineering)
? 透過逆向?工程將可了了解程式式如何運作以及進?行行
分析造成風險
? iOS
? 透過?工具如?IDA Pro, Hopper, otool, 對binary檔案
進?行行 decompile等進?行行反組譯,class-dump查看
class. category. protocol等
M9逆向?工程(M9 - Reverse Engineering)
? Android
? 透過?工具如apktool是拿來來把 apk 拆開,反編譯
apk 之後,看到smali檔案跟resource
? dex2jar 可以把 apk 轉成 jar再?用jd-gui檢視 java
code
? 可進?行行竄改程式並且重新產?生apk檔
M9逆向?工程(M9 - Reverse Engineering)
? 可使?用obfuscate進?行行程式碼混淆
? Android 本?身內建基本proguard?工具
? iOS 可?用open source https://github.com/
obfuscator-llvm/obfuscator/wiki
? 可?用 obfuscate進階?工具,如DexGuard. Arxan.
AppGuard等?工具除了了混淆之外也有些是加殼或是
靜態、動態防護
M10多餘的功能(M10 - Extraneous Functionality)
? 額外功能,如開發時常常會使?用後?門或是在側
是環境為了了?方便便直接輸入密碼等功能容易易造成
不?小?心上線到正式環境的風險
M10多餘的功能(M10 - Extraneous Functionality)
? 在程式開發階段,應進?行行?人?工code review避免此狀狀況發?生,可配
合如pull request機制來來進?行行merge前的關卡
? 檢查Log資訊是否不包含機敏資訊
? 使?用proxy?工具如charles. MITM proxy來來檢查app連線
? iOS
? 可以使?用不同target或debug ?ag來來分開環境
? Android
? ?用debug ?ag分開環境
其他常?見見問題
? ?行行動應?用App使?用第三?方函式庫前,需先確認其是來來?自
可靠來來源、有持續更更新並經測試沒有漏 洞洞、後端?木?馬及
不明傳送?目的地。
? 對使?用者輸入驗證,避免SQL injection等問題
? iOS 使?用 ARC開發
? iOS使?用ATS(HTTPS)設定
? JB. Root已弊?大於利利
安全軟體開發
? 設計階段:清楚定義資訊安全政策
? 開發階段:針對原始碼進?行行安全漏洞洞掃描,並且針
對漏洞洞等級分類追蹤與修復,及早發現問題並調整
? 測試階段:模擬駭客進?行行滲透測試(Penetration
Test)
? 上線階段:監控並追蹤攻擊,避免造成風險
?黑?白箱測試
? iOS
? Santoku. Snoop-it. MobSF
? Android
? Santoku. MobSF
Zero Day 平台
? ZeroDay
? 烏雲
Q&A

More Related Content

Mobile 開發常見資安議題