iOS平台个人网银APP的安全测试报告

 

Personal banking apps leak info through phone

By Ariel Sanchez 

几年来我一直在阅读有关家庭银行应用程序的缺陷,但我很怀疑。老实说,当我开始研究我不指望能找到任何有意义的结果。

我们的目标是执行黑盒和静态分析全球移动家庭银行应用程序。本研究使用iPhone / ipad设备测试前60大全球最具影响力的银行中的40家家庭银行应用程序。

为了获得一个全球性的国家安全观,来自下列国家的一些更重要的银行被纳入研究:

1

相关问题

本研究是在40小时内完成(不连续的)。

为了保护这些应用程序的所有者及其用户,本研究没有公布发现的漏洞以及利用它们的方法

所有的测试都只在应用程序(客户端)上执行;研究排除了任何服务器端的测试。

已经联系了一些受影响的银行并提交了漏洞报告

 

试验

以下为每个应用程序进行测试:

传输安全

明文流量

不当的会话处理

正确验证SSL证书

编译器的保护

反破解保护

PIE编译

用stack cookies编译

自动引用计数

uiwebviews

数据验证(输入,输出)

分析UIWebView的实现

不安全的数据存储

SQLlite数据库

文件缓存

检查属性列表文件

请检查日志文件

Logging

自定义日志

nslog报表

崩溃报告文件

二元分析

分解应用

检测的汇编代码保护混淆

检测防篡改保护

检测反调试保护

协议处理程序

客户端注入

第三方的库

 

概要

2

所有的应用程序可以安装一个越狱的iOS设备。这有助于加快静态黑盒分析。

黑盒分析结果

下列工具用于黑盒分析:

otool (object file displaying tool)[1]

Burp pro (proxy tool)[2]

ssh (Secure Shell)

 

 

40%经审核程序的APP没有使用SSL证书验证真实性就提交了。这使得他们容易受到中间人攻击。[ 3 ]

一些应用程序(小于20%)没有位置独立的可执行程序(PIE)和堆栈溢出保护功能。这可能有助于减轻内存泄漏攻击的风险。

 

>#otool –hv MobileBank手机银行Mach headermagic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flagsMH_MAGIC     ARM         V6  0x00     EXECUTE    24       3288   NOUNDEFSDYLDLINK PREBOUND TWOLEVEL

 

 

许多应用程序(90%)包含几个无SSL的链接贯穿在应用中。这允许攻击者截获流量,注入任意JavaScript / HTML代码,试图创建了一个虚假的登录提示或类似的骗局。

 

此外,发现50%的程序很容易通过UIwebview受到JavaScript 注入攻击,通过不安全注射的

UIWebView JavaScript实现。在某些情况下,原生iOS功能被暴露,允许受害者的设备发送短信或电子邮件。

3

一种新的网络钓鱼攻击已经变的很流行,受害者因为网上银行密码已过期,而按提示输入自己的用户名和密码。攻击者窃取受害者的凭证并完全获得了访问用户帐户的权限。

下面的示例显示其中家庭银行应用脆弱的UIWebView实现。它允许一个虚假的HTML形式被注入攻击者利用来诱骗用户输入他们的用户名和密码,然后把他们的凭据发送到恶意网站。

4 5

 

 

 

 

另外一个引起我注意而做的研究,是70%的APP没有替代认证的解决方案,如多因素认证,可能有助于减轻钓鱼攻击的风险。

大多数由应用程序产生的日志文件暴露敏感信息,如崩溃报告。这种信息可能被泄露,帮助攻击者利用0day 漏洞应用寻找和开发针对目标用户的应用。

6

 

大多数应用程序通过苹果系统日志公开敏感信息。下面的例子是从控制台系统使用iPhone配置实用工具(IPCU)。身份验证过程的应用程序转储的用户凭据。

 

CA_DEBUG_TRANSACTIONS=1 in environment to log backtraces.Jun 22 16:20:37 Test Bankapp[2390] <Warning>: <v:Envelope xmlns:i=”http://www.w3.org/2001/XMLSchema-instance” xmlns:d=”http://www.w3.org/2001/XMLSchema” xmlns:c=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:v=”http://schemas.xmlsoap.org/soap/envelope/”><v:Header /><v:Body><n0:loginWithRole id=”o0″ c:root=”1″ xmlns:n0=”http://mobile.services.xxxxxxxxx.com/”>

<in0 i:type=”d:string”>USER-ID</in1>

<in1 i:type=”d:string”>XRS</in2>

<in2 i:type=”d:string”>PASSWORD</in3>

<in3 i:type=”d:string”>xxxxxxxx</in4>

</n0:loginWithRole>

</v:Body>

</v:Envelope>

Jun 22 16:20:37 Test Bankapp[2390] <Warning>: ]]]]]]]]]]]]] wxxx.xxxxx.com

Jun 22 16:20:42 Test Bankapp[2390] <Warning>: RETURNED:

Jun 22 16:20:42 Test Bankapp [2390] <Warning>: 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, #0x46

__text:00056356 ADD             R2, PC  ; “https://mob_user:T3stepwd@db.internal/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_ – 0x56370) ; selRef_setMobileBankingURLDBTestEnvWithValue_iPad_mobileT_

__text:00056368 MOVW            R2, #0xFA8A

__text:0005636C ADD             R0, PC ; selRef_setMobileBankingURLDBTestEnvWithValue_i_mobileT_

__text:0005636E MOVT.W          R2, #0x46

__text:00056372 ADD             R2, PC  ; “https://mob_user:T3stepwd@db.internal/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数据库存储的未加密的银行账户资料。

7

其他镜像信息泄露被发现,包括:

Internal IP addresses:__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”Internal file system paths:__cstring:000CC724 aUsersXXXXPro DCB “/Users/Scott/projects/HM_iphone/src/HBMonthView.m”,0

 

 

 

尽管披露这些信息不会对其所有者产生重大影响,但攻击者收集了许多这些漏洞可以更好地理解内部布局的应用程序和服务器端的基础设施。这使攻击者可以启动特定攻击客户端和服务器端的目标应用。

 

结论

 

从防守的角度来看,以下建议可以减轻最常见的缺陷:

确保所有的连接都使用安全传输协议进行

由客户端应用程序执行的SSL证书检查

通过iOS数据保护API加密保护存储在客户端的敏感数据

提高额外的检查检测设备越狱

混淆汇编代码和使用反调试技巧,缓慢的攻击者的进展时,他们试图逆向代码

删除所有调试语句和符号

从生产应用删除所有发展信息

家庭银行应用程序已被应用于移动设备,如智能手机和平板电脑,创造了安全的全球金融公司是一个重大的挑战。

 

 

这项研究表明,金融业应提高移动银行解决方案的安全标准。

 

参考文献:

[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

 

 

本文由liaoxj2046翻译整理,转载请注明译文链接http://wx.wosign.com/?p=1413

原文http://blog.ioactive.com/2014/01/personal-banking-apps-leak-info-through.html

Leave a Comment