幾年來,我一直在從事有關個人網銀APP的安全性研究。在這份報告中,我使用了黑盒和靜態分析的方法,對全球最具影響力的四十個iPhone/ipad網銀APP進行了安全測試。
以下國家的個人網銀APP被納入測試:
研究說明
1. 本研究在40小時內(不連續)完成
2. 為了保護這些應用程序的所有者及其用戶,本研究沒有公布發現的漏洞以及利用它們的方法
3. 所有的測試都只在應用程序(客戶端)上執行;研究排除了任何服務器端的測試
4. 已經聯系了一些受影響的銀行並提交了漏洞報告
測試過程
我們對每個網銀應用程序進行了如下測試:
傳輸安全 明文流量 不當的會話處理 正確驗證SSL證書 編譯器的保護 反破解保護 PIE編譯 用stack cookies編譯 自動引用計數 uiwebviews 數據驗證(輸入,輸出) 分析UIWebView的實現 不安全的數據存儲 SQLlite數據庫 文件緩存 檢查屬性列表文件 請檢查日志文件 Logging 自定義日志 nslog報表 崩潰報告文件 二元分析 分解應用 檢測的匯編代碼保護混淆 檢測防篡改保護 檢測反調試保護 協議處理程序 客戶端注入 第三方的庫
結果概述
黑盒分析結果
下列工具被用於黑盒分析:
otool (object file displaying tool)[1] Burp pro (proxy tool)[2] ssh (Secure Shell)
40%通過APP Store審核的APP不會驗證SSL證書,這使得他們容易受到中間人攻擊。[ 3 ]
少量應用程序(小於20%)不具備位置獨立的可執行程序(PIE)和堆棧溢出保護功能。這些功能可能有助於減輕內存洩漏攻擊的風險。
>#otool –hv MobileBank Mach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC ARM V6 0×00 EXECUTE 24 3288 NOUNDEFS DYLDLINK PREBOUND TWOLEVEL
許多應用程序(90%)包含幾個無SSL的鏈接貫穿在應用中。這允許攻擊者截獲流量,注入任意JavaScript / HTML代碼,進而創建偽造登錄。
此外,發現50%的程序很容易通過UIwebview受到JavaScript注入攻擊,通過不安全注射的UIWebView JavaScript實現。在某些情況下,原生iOS功能被暴露,允許受害者的設備發送短信或電子郵件。
一種新的網絡釣魚攻擊正在流行:當受害者因為網上銀行密碼已過期,而按提示輸入自己的用戶名和密碼。攻擊者此事可以竊取受害者的憑證並完全獲得了訪問用戶帳戶的權限。
下面的示例顯示個人銀行應用UIWebView漏洞
它允許一個虛假的HTML形式被注入攻擊者利用來誘騙用戶輸入他們的用戶名和密碼,然後把他們的憑據發送到惡意網站。
另外一個引起我注意而做的測試,是70%的APP沒有替代認證的解決方案,如多因素認證,可能有助於減輕釣魚攻擊的風險。
大多數由應用程序產生的日志文件暴露敏感信息,如崩潰報告。這種信息可能被洩露,幫助攻擊者利用0day 漏洞應用尋找和開發針對目標用戶的應用。
大多數應用程序通過蘋果系統日志公開敏感信息。
下面的例子是從控制台系統使用iPhone配置實用工具(IPCU)。身份驗證過程的應用程序轉儲的用戶憑據。
…CA_DEBUG_TRANSACTIONS=1 in environment to log backtraces.Jun 22 16:20:37 Test Bankapp[2390] : USER-IDXRSPASSWORDxxxxxxxxJun 22 16:20:37 Test Bankapp[2390] : ]]]]]]]]]]]]] wxxx.xxxxx.com Jun 22 16:20:42 Test Bankapp[2390] : RETURNED: Jun 22 16:20:42 Test Bankapp [2390] : CoreAnimation: warning, deleted thread with uncommitted CATransaction; set CA_DEBUG_TRANSACTIONS=1 in environment to log backtraces. … Static Analysis Results The following tools were used for the static analysis and decryption: IDA PRO (disassembler tool) [4] Clutch (cracking utility) [5] objc-helper-plugin-ida [6] ssh (Secure Shell) gdb (debugger tool) IPCU [7] The binary code of each app was decrypting using Clutch. A combination of decrypted code and code disassembled with IDA PRO was used to analyze the application. Hardcoded development credentials were found in the code. __text:00056350 ADD R0, PC ; selRef_sMobileBankingURLDBTestEnv__ __text:00056352 MOVT.W R2, #0×46 __text:00056356 ADD R2, PC ; “https://mob_user:[email protected]/internal/db/start.do?login=mobileEvn” __text:00056358 LDR R1, [R0] ; “setMobileBankingURLDBTestEnv_iPad_mobil”… __text:0005635A MOV R0, R4 __text:0005635C BLX _objc_msgSend __text:00056360 MOV R0, (selRef_setMobileBankingURLDBTestEnvWithValue_iPad_mobileT_ – 0×56370) ; selRef_setMobileBankingURLDBTestEnvWithValue_iPad_mobileT_ __text:00056368 MOVW R2, #0xFA8A __text:0005636C ADD R0, PC ; selRef_setMobileBankingURLDBTestEnvWithValue_i_mobileT_ __text:0005636E MOVT.W R2, #0×46 __text:00056372 ADD R2, PC ; “https://mob_user:[email protected]/internal/db/start.do?login=mobileEvn&branch=%@&account=%@&subaccount=%@” __text:00056374 LDR R1, [R0] ; “setMobileBankingURLDBTestEnvWith_i”… __text:00056376 MOV R0, R4 __text:00056378 BLX _objc_msgSend By using hardcoded credentials, an attacker could gain access to the development infrastructure of the bank and infest the application with malware causing a massive infection for all of the application’s users. Internal functionality exposed via plaintext connections (HTTP) could allow an attacker with access to the network traffic to intercept or tamper with data. __text:0000C980 ADD R2, PC ; “http://%@/news/?version=%u” __text:0000C982 MOVT.W R3, #9 __text:0000C986 LDR R1, [R1] ; “stringWithFormat:” __text:0000C988 ADD R3, PC ; “Mecreditbank.com” __text:0000C98A STMEA.W SP, {R0,R5} __text:0000C98E MOV R0, R4 __text:0000C990 BLX _objc_msgSend __text:0000C994 MOV R2, R0 … __text:0001AA70 LDR R4, [R2] ; _OBJC_CLASS_$_NSString __text:0001AA72 BLX _objc_msgSend __text:0001AA76 MOV R1, (selRef_stringWithFormat_ – 0x1AA8A) ; selRef_stringWithFormat_ __text:0001AA7E MOV R2, (cfstr_HttpAtmsOpList – 0x1AA8C) ; “http://%@/atms/?locale=%@&version=%u” __text:0001AA86 ADD R1, PC; selRef_stringWithFormat_ __text:0001AA88 ADD R2, PC; “http://%@/atms/version=%u” __text:0001AA8A __text:0001AA8A loc_1AA8A ; CODE XREF: -[BranchesViewController processingVersion:]+146j __text:0001AA8A MOVW R3, #0x218C __text:0001AA8E LDR R1, [R1] __text:0001AA90 MOVT.W R3, #8 __text:0001AA94 STMEA.W SP, {R0,R5} __text:0001AA98 ADD R3, PC ; “Mecreditbank.com” __text:0001AA9A MOV R0, R4 __text:0001AA9C BLX _objc_msgSend
此外,20%的程序通過http明文發送帳戶激活碼。即使這個功能對設置初始帳戶是有限制的,其相關風險也很高。如果攻擊者可以攔截流量的話,那麼他就可以劫持一個會話並盜取受害者的賬戶信息,而且最重要的是沒有任何證據可以檢測到這種攻擊。
在仔細研究每個應用程序的系統之後,我們發現有些人使用一個未加密的SQLite數據庫存儲諸如銀行賬戶詳細信息、交易歷史等類的敏感信息。攻擊者可以漏洞利用程序遠程的訪問這些數據;如果攻擊者可以通過物理方式訪問這台設備的話,那麼他就會在受害者機器上安裝一些可以從文件系統中竊取信息的越獄軟件。
下面的例子展示了從APP的文件系統中獲取一個SQLite數據庫存儲的未加密的銀行賬戶資料。
其他鏡像信息洩露被發現,包括:
內部IP地址
__data:0008B590 _TakeMeToLocationURL DCD cfstr_Http10_1_4_133 __data:0008B590 ; DATA XREF: -[NavigationView viewDidLoad]+80o __data:0008B590 ; __nl_symbol_ptr:_TakeMeToLocationURL_ptro __data:0008B590 ; “http://100.10.1.13:8080/WebTestProject/PingTest.jsp”
內部系統地址:
_cstring:000CC724 aUsersXXXXPro DCB “/Users/Scott/projects/HM_iphone/src/HBMonthView.m”,0
盡管披露這些信息不會產生什麼重大影響,但是如果攻擊者收集了很多這類的漏洞,那他就可以更好地理解應用程序的內部布局和服務器端的基礎設施。這樣一來攻擊者就可以針對應用程序的客戶端和服務器端實施特定的攻擊。
結論
從防守的角度來看,使用以下建議可以降低安全風險:
1、確保所有的連接都使用安全傳輸協議
2、用SSL證書檢查客戶端應用程序
3、使用iOS數據保護的API加密儲存在客戶端的敏感信息
4、檢測設備是否有越獄
5、使用混淆匯編代碼和反調試技巧,增加攻擊者逆向的難度
6、刪除所有調試語句和符號文件
7、刪除應用程序中的開發信息
現在移動設備(智能手機、平板電腦)上也可以安裝個人網銀應用程序了,這對全球金融公司來說又是一個巨大的安全挑戰。金融業應提高移動個人網銀APP的安全性。
參考文獻
[1]http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/otool.1.html
[2] http://portswigger.net/burp/editions.html
[3] https://www.owasp.org/index.php/Man-in-the-middle_attack
[4] https://www.hex-rays.com/products/ida/
[5] https://www.appaddict.org/forum/index.php?/topic/40-how-to-crack-ios-apps/
[6] https://github.com/zynamics/objc-helper-plugin-ida
[7] http://support.apple.com/downloads/#iphone%20configuration%20utility