网络安全 频道

陈彪:移动金融应用安全风险分析

  今天我给大家分享的是移动金融应用安全的风险分析及解决方案。希望通过今天的演讲,我能够给大家对如何打造一个安全的移动应用客户端带来一些基本的了解。我先自我介绍一下,我是梆梆安全的CTO陈彪,主要负责梆梆安全整体研发工作,包括基于云的服务平台和个人用户产品的研发等。曾参与北京航空航天大学软件开发环境国家重点实验室的多个研究项目,获得多项全球和国家发明专利。

陈彪:移动金融应用安全风险分析

  首先分享的是移动应用的现状分析。我们知道安卓有非常大的市场,基本覆盖国内大大小小的应用商店。而现在安卓的移动应用市场里存在许多的安全风险,比如说用户信息泄露、交易安全风险、二次打包及暴露移动端及服务端漏洞等风险,而最大的问题实际上就是存在大量的二次打包和被篡改的问题。

  我们通过调查发现,基本上安卓市场每一款移动客户端都存在被篡改、二次打包、盗版的问题。比如说随便找一个应用商店,排名靠前的APP盗版率均为100%。其实从安卓的应用内核或者整套控制上来看,它的技术和苹果的技术是不相上下的。那为什么安卓市场抄袭严重、维版困难等乱象还是普遍存在?

  第一个原因就是签名机制问题,安卓上没有中央的签名机制,签名的原因造成现在安卓这个市场上二次打包的现象非常严重。

  第二个原因是技术问题,安卓采用JAVA语言开发的,源码很容易泄露。

  第三个原因就是安卓的开放性,苹果控制了签名,使下载程序的来源变得单一,而在安卓上你可以在任何地方下载应用程序,其实安卓不安全的真正原因就是这个因素造成的。

  所以,现在国家也开始慢慢重视安卓市场,最近也开始发文安卓管理办法,保证下载应用程序是比较安全的。目前在国外的手机银行也有同样的问题,他们的代码也可以被仿编。在这种情况下,我们还会经常碰到一些问题,现在会暴露一些服务器的漏洞。为了支持手机的客户端,新开发了一套接口,而这套接口没有经过调试,黑客仿编你的客户端,通过未调试的接口就会发现你后台有一些相关的漏洞,从而通过这种方式进行一些入侵。

  面对这些风险,我们怎么保证我们的客户端相对安全呢?在此,我重点介绍一下梆梆安全的一些主要业务。

  第一个就是希望能够为移动APP做一次彻底的安全评估。安全评估是指由具备高技能和高素质的安全服务人员发起、并模拟常见黑客所使用的攻击手段对目标系统进行模拟入侵,其目的在于充分挖掘和暴露系统的弱点,从而让管理人员了解其系统所面临的威胁。渗透测试工作往往作为风险评估的一个重要环节,为风险评估提供重要的原始参考数据。

  基于数据生命周期的安全测试,对手机银行客户端的程序、数据、通信、业务、系统环境等进行全面安全测试,检测数据的输入、处理、输出以及数据运行时的系统环境的安全性。手机银行客户端安全测试标准依据中国人民银行发布的中国金融移动支付系列技术标准中的《中国金融移动支付检测规范第3部分:客户端软件》。梆梆安全做了这些工具:反编译及重打包dex2jar、baksmali、IDA pro、apktool;调试工具gdb 等;代码注入工具Xposed、Substrate 等;网络Burp suite等。

  梆梆安全还做了一个测试内容,采用黑盒渗透攻击和白盒代码审计的方式发现移动应用的安全缺陷及安全漏洞,它包括七个方面的内容:程序安全,安装与卸载、人机交互、登陆检测、发布规范、第三方SDK安全等方面;代码安全,是否具有防逆向、防动态注入、防篡改等能力;数据安全,应用的数据录入、数据访问、数据存储、数据传输、数据显示是否存在安全风险;组件安全,移动应用暴露的组件是否可以被恶意攻击;通信安全,检查客户端软件和服务器间的通信协议是否安全,能否被攻击;业务安全,移动应用的核心业务是否存在安全缺陷。例如银行客户端,针对转账的过程应进行安全性检测,检测是否有可能进行转账的篡改;系统安全移动应用的运行环境是否安全。

  下面我们看代码安全这一块。反编译测试,将二进制程序转换成人们易读的一种描述语言的形式,是逆向工程中的常见手段。反编译的结果是易读的代码,这样就暴露了客户端的所有逻辑,比如与服务端的通讯方式,加解密算法、密钥、转账业务流程、软键盘技术实现等等。

  重打包测试,对客户端程序添加或修改代码,修改客户端资源图片,配置信息,图标等,再生成新的客户端程序,实现应用钓鱼。对金融客户端,可能添加病毒代码、广告SDK,推广自己的产品;添加恶意代码窃取登录账号密码、支付密码、拦截验证码短信,修改转账目标账号、金额等等。

  动态调试测试,指攻击者利用调试器跟踪目标程序运行,查看、修改内存代码和数据,分析程序逻辑,进行攻击和破解等行为。对于金融行业客户端,该风险可修改客户端业务操作时的数据,比如账号、金额等。

  代码注入测试,通过OS特定技术,将代码写入到目标进程并让其执行的技术。攻击者可以将一段恶意代码写到目标进程,这段代码可以加载其它可执行程序,进而实施hook,监控程序运行行为、获取敏感信息等。对于金融客户端,可通过代码注入技术,将恶意代码注入到客户端中,窃取输入的登录账号、密码、支付密码,修改转账的目标账号、金额,窃取通讯数据等。

  由安全评估得出的移动金融安全现状观点:一是根据梆梆安全安全实验室统计测试,国内大多数移动金融App这几项安全测试都是未通过的,移动安全机制存在缺失。二是未通过这些安全测试,意味着移动金融客户端可能面临以下几个业务风险:移动金融应用的安全风险;用户信息安全风险;交易安全风险;二次打包风险;暴露移动端和服务端漏洞风险。

  通过反编译逆向分析,可以发现移动金融客户端的很多代码缺陷和逻辑漏洞。在处理取出业务时,客户端先向服务器请求账户所绑定的银行卡交易账户信息。URL请求为**(略):此时服务器端返回cusNo对应绑定的银行卡信息。经测试发现,可以通过枚举cusNo来获得对应账户所绑定的银行卡信息,造成严重的用户信息泄露,例如cusNo为2000098909。

  梆梆安全关于移动金融客户端应用安全的解决方案主要有以下几个方面:

  安全开发规范及安全评估:开发者应遵循移动应用的安全开发规范,进行移动金融应用客户端的开发;使用一些成熟的安全组件,如软键盘SDK、清场等;定期对客户端进行安全评估。

  安全加固:发布前加固应用,保证代码安全。上线后的渠道监控:监控第三方应用市场,及时发现各种盗版、钓鱼、山寨等恶意应用。特别讲一下安全加固技术:代码加密,阻止代码被反编译;反调试,阻止APP运行时被动态注入。完整性校验:阻止APP被重新打包。APK的广度防御-资源、编程框架、So库。资源文件:对APK中资源(图片,XML等文件)进行加密保护。采用编程框架开发的程序进行加密保护:DLL (C# Unity3D)、Lua、HTML/Javascript(IBM worklight、PhoneGap等)、Flash等等。So库:二进制C/C++的加壳保护。

  上线后的渠道监测:梆梆安全在全球有100多个监测点,能实时监测全球400多个渠道,第一时间发现钓鱼山寨手机银行,并进行预警、取证、帮助移动金融机构最大限度,最快速的降低钓鱼App的威胁。

  最后,我总结一下。作为一种新的入口和用户交互平台,移动金融应用面临:用户信息安全风险;交易安全风险;暴露移动端和服务端漏洞风险;钓鱼和二次打包风险。加强移动金融应用安全的途径:遵循安全规范的客户端开发,定期进行移动安全评估,合规性评估/源代码审计/渗透性测试。移动客户端上线前进行安全加固,防止反编译,逆向分析,动态注入攻击等等上线后的渠道监测。谢谢大家!

0
相关文章