洛阳证券公司联盟

证券行业移动应用安全技术分析

金融时代网2020-11-19 15:12:33

  移动互联网为证券行业带来了颠覆性的影响,抓住移动互联网入口,围绕移动端给用户以优质体验是证券公司需要首要解决的问题;目前,大多数证券公司都开发了自有的移动应用,但是对于这种新的工作模式和业务接口,一个不容忽视的问题越来越重要:安全。因此,为了提高移动应用的安全性,本文结合当前证券行业的特点以及移动应用所面临的安全风险,就如何保障移动应用的安全性展开分析。

  一、 移动安全的必要性

  随着网络技术和移动通信技术的普及,近年来我国的移动互联网金融发展迅猛,移动互联网已经占据人们的生活,人们的消费逐渐向手机过渡;各证券都相继推出了自有的移动应用服务广大客户,广大的用户在享受便利的同时也处于移动安全的风险之中。根据2015年国家互联网应急中心的监测(图 1),新增的移动互联网恶意程序数超过了40万个,主要表现为恶意扣费、流氓行为、远程控制、资费消耗、隐私窃取、诱骗欺诈、恶意传播、系统破坏等形式。

  图 1 2015年CNCERT移动互联网恶意程序数据统计

  2015年度,移动互联网恶意程序依存操作系统最严重的为安卓系统,占据99.6%(图 2);因此,而对众多风险,如何有效地解决安卓系统下不同类型、不同安全级别的证券业App的安全问题已迫在眉睫。

  图 2 2015年 CNCERT移动互联网恶意程序操作系统分布

  二、证券行业移动安全风险

  总体看来,安卓平台应用安全形势仍不容乐观,由于安卓应用安全问题频出,造成影响范围广、程度深,安卓应用安全越来越重要;证券公司的移动应用不管是自主研发和还是第三方公司研发的,没有专业的移动应用安全防护技术支持,均无法有效保障移动应用的安全性。

  近期,中国信通院发布了《移动互联网金融APP信息安全现状白皮书》,该白皮书抽取了88个互联网金融类移动应用App进行深入测试,发现了十大安全隐患:

  1. 通信数据明文发送:客户端APP与服务器端交互的数据通过明文的通信信道传输。

  2. 通信数据可解密:客户端APP与服务器端交互的数据加密传输,但数据依然可以被解密。

  3. 敏感数据本地可破解:客户端APP将敏感数据(如登录密码,手势密码等)以明文存储在本地,或加密存储但通过逆向分析程序可以破解该数据。

  4. 调试信息泄漏:客户端APP将开发时帮助调试的信息打印出来,这些信息通常包含一些敏感的参数,消息的明文等。

  5. 敏感信息泄漏:客户端APP代码中泄漏敏感数据,如对称加密密钥,非对称加密中的私钥,认证使用的共享密钥,不应被暴露的后台服务器管理地址等等。

  6. 密码学误用:客户端APP代码中使用了不安全的密码学实现,例如固定硬编码的对称加密,ECB模式的对称加密,CBC模式中IV固定,不安全的公钥进行非对称加密等。

  7. 功能泄露:客户端APP中高权限的行为和功能(如发送短信,读取联系人等)没有被安全的保护,被其他无授权的应用程序调用或访问。

  8. 可二次打包:客户端APP可被修改代码后,重新打包发布在市场上供用户下载。

  9. 可调试:客户端APP能够被调试,动态的提取、修改运行时的程序数据和逻辑。

  10. 代码可逆向:客户端APP的逻辑能够被轻易获取和逆向,得到代码和程序中的敏感数据。

  在这十大安全隐患中,通过调研发现动态调式、代码注入、反编译、内容篡改、二次打包这五个风险等级是最高的,也是被各移动安全论坛提到次数最多的。结合证券行业,这些风险也极有可能导致交易APP被植入恶意程序后再传播,导致用户的密码或其它信息被盗,导致黑客利用漏洞攻瘫券商的移动服务端,导致客户被钓鱼而钱款被恶意转账等风险。

  根据工信部、证监会、OWASP等国际组织、政府部门及专业安全研究机构颁发的安全标准:

  11. 《证券期货经营机构信息技术管理规定》(征求意见稿)

  12. 《证券期货经营机构信息技术治理工作指引》

  13. 《证券期货业信息安全保障管理办法》

  14. YD/T 2307-2011 《数字移动通信终端通用功能技术要求和测试方法》

  15. JR/T 0092-2012 《中国金融移动支付客户端技术规范》

  16. JR/T 0095-2012 《中国金融移动支付应用安全规范》

  并结合证券业移动应用的安全现状分析,目前移动应用主要面临的移动安全风险包括:源码反编译、文件(代码、资源及签名)篡改、本地数据泄露、动态调试、、进程调试、内存DUMP、页面数据泄漏、数据传输保护不足、不可信的执行环境等。

  三、证券行业移动应用安全分析

  移动应用面临的安全风险很多,目前有很多安全厂商专注于移动应用安全领域,为证券行业提供了很好的安全服务和保障;随着移动安全技术的不断发展,已逐步形成了完整的移动安全解决方案,内容涵盖:应用安全、代码安全、本地数据安全、通信安全、内存安全、页面数据安全、运行环境安全等多个方面。

  结合证券行业的特点,移动应用的高可用性是非常重要的,移动应用安全建设必须首先关注安全防护的兼容性和性能,考虑到信息及密码传输明文的风险,以及木马和病毒对移动交易APP的威胁,在移动交易安全方面就需要做一体化安全防护。具体如下:

  首先、保证传输的协议的安全,因APP加壳不解决传输协议的安全,所以需要协议加密尤其是传输的密码加密;其次、针对需要发布的APP进行加壳处理,不仅可以有效防范众多安全风险,还可以做到所发布的APP包,在任何修改后即无法执行,也保证了程序完整性;最后、在发布的APP交易软件中,嵌入防病毒快速检测插件,提供用户在输入密码和交易前可对内存中的木马或病毒进行查杀,而这插件也只有防病毒安全厂商可以做的很好。

  下文就主要从移动应用安全加固、通信数据加密、移动应用运行环境保护三大防护体系对移动应用安全进行简单探讨。

  四、移动应用安全技术分析

  防源码反编译:综观整个移动应用安全加固发展历程,历经了代码混淆(一代加密技术)、整体加壳(二代加密技术)、代码分离及动态加载(三代加密技术)、虚拟机保护(四代加密技术)四个阶段的发展,每代的技术在其存在阶段均有其意义及优势,但随着技术的不断革新,单纯的一种技术已经不能很好的防范新的破解技术,下面来详细分析一下各个阶段的实现原理及缺点:

  1、安全加固技术

  *代码混淆

  代码混淆实现原理基本上是通过删除代码中的调试信息、无用类、方法并使用无意义的字符序列来替换类名、方法名,同时对代码流程进行乱序混淆要达到防护目的;它在一定程序下降低了反编译出来的代码的阅读性,提升逆向难度,但是已经很难防范动态调试,并且破解者也可通过阅读功能代码来自行标记类名、方法名等,然后逆向破解,故一代防护技术的单独使用已经起不到实质的防护做用。

  * 整体加壳

  整体加壳实现原理基本上是将dex文件整体加密,然后将密文打包保存其它目录下,修改AndroidManifest.xml配置文件将程序入口指向壳代码,程序启动后,由壳代码把加密后的dex交给类加载执行;由于程序在运行时,会将解密的代码连续释放在内存空间,所以不能有效的防范内存dump获取dex。

  * 代码分离及动态加载

  实现原理将代码中的方法名和方法体进行分离,对分离出的方法体进行加密并且Hook虚拟机的部分接口,在应用使用到具体方法时,对方法进行解密并动态加载执行;该方法是基于二代破解技术提出的,在一定程度上防范了内存dump的风险,但是部分破解者可以通过自定义手机rom等方式,获取所有方法的明文后对数据进行组装还原明文dex,虽然破解难度极大,但是仍存在理论上的可能性。

  *虚拟机保护技术

  结合先前安全加固各个阶段发展的优点、最新的黑客破解技术移动安全提供商提出新一代的虚拟机保护及混合加密技术,全方位保护源码安全;那么虚拟机保护及混合加密应该怎么实现的呢?这边提供一个理论模型供参考:

  首先,提取dex中方法的虚拟机指令,并使用自定义指令集进行替换;其次,把提取过的方法改为native方法并在底层进行注册;然后结合代码混淆、整体加密、代码分离功能进行防护;最后在程序运行时调用native方法时在底层使用自定义解释器解释虚拟机指令;整个加固过程不在内存中进行代码还原操作也就无法通过内存dump的方式获取明文dex,由于使用了自定义指令集,破解还原明文dex成本极高,并且对程序中存在的H5及JS脚本文件同时进行加固操作,可以最大程序防范黑客对源码的编译操作。

  *整体加固体系

  目前移动应用安全加固一般采用四种加密技术的混合技术,极大的提供了移动应用的安全性,可以有效的为证券业移动应用的提供静态及动态防护,提升移动应用的整体安全性。

  针对代码、资源及签名文件篡改:可采取对程序中dex、so、h5代码,图片、脚本、文档等文件进行完整性校验,防止其被非法篡改,考虑到校验对程序加载时间的影响,可仅对关键代码、资源文件进行验证,避免影响最终用户体验,确保其完整性,若校验失败,直接中止APP运行;在对签名文件进行防篡改时,重新签名或篡改签名后,APP无法正常安装;从而有效的防范了文件被篡改的风险。

  针对本地数据泄漏:APP运行过程中,经常会存储许多重要的信息,包括用户名、密码、搜索记录等,在方便用户直接登录、快速获取历史信息的同时,也不可避免的存在本地数据被泄漏的安全隐患;对此可采取多种加密算法,包括国际通用算法(RSA、MD5、DES…)、国密算法及其它自主研发的加密算法对程序中用户隐私信息、开发者加密算法及密钥、本地shared preference类型数据等存储信息进行加密操作,防止本地数据泄漏。

  针对程序调试:黑客在静态分析程序无法得到有用信息后,通常会通过使用IDA、GDB之类调试工具实现动态及进程调试从而进一步对源程序的进行逆向破解,由于APK在运行时,会在内存中释放源码,故内存dump对任何加密后在内存中进行释放源代码的应用均可将源码组装还原成明文。所以有效的防止黑客对程序的调试至关重要,对此可以在程序运行时通过对ptrace函数进行监测防护,防止gdb之类的调试工具对其进行附着,使其无法调试和动态注入及内存代码dump等操作,除此之外黑客可能会通过模拟器自定义rom对程序进行调试,故也需对模拟器调试进行防范,结合虚拟设备与真实设备的硬件差别,有效识别模拟器,一旦识别到模拟器,则APP退出所在的模拟器环境,最大程序的增加黑客动态破解程序的综合成本。

  针对页面数据泄漏:黑客可以在用户填写姓名、电话、账户、密码、邮箱、地址等敏感信息时对页面及键盘输入进行截屏、劫持操作,盗取用户信息;对此,可通过对敏感页面进行底层截屏函数hook,阻止相关函数的调用,防止被截屏操作;并且在客户端运行时监控Activity,发现被覆盖(劫持)时,提示用户有安全风险存在,不要输入敏感信息;针对键盘,应该使用一些键盘字符混排、输入无明文显示及字符放大、键盘防截屏、键盘防劫持等安全措施,防针黑客对信息输入进行攻击。

  *兼容性保障

  在安全领域,安全和性能一定是相悖,如何使二者达到一个平衡,也是需要非常重视的。移动应用加固一定会涉及到代码注入及SDK集成等流程,不可避免的会对原有APK造成影响,包括:包体大小、安装时间、启动时间、兼容性、性能等;尤其是针对碎片化最严重安卓应用,兼容性的保障是比不可少的。

  兼容性的保障需要移动安全提供商具备更专业的技术和实力来解决兼容性问题,一般采用的手段及技术包括:包体优化技术、真机测试、人工复检、加固系统更新等。

  2 、通信数据加密技术

  在开发证券类移动应用APP的产品时,整个业务逻辑通常都会放在服务端,客户端大部分仅用来展示,在客户端与服务端的交互过程中,报文的安全及流量的节约相对来说就显得比较重要;数据传输保护不足,最终都会导致用户隐私及交易数据的泄露。

  据分析,目前超过90%以上的APP未使用HTTPS加密连接,已启用HTTPS连接的页面中,98%不校验证书链和证书颁发者,有些甚至不验证证书域名是否匹配,更有甚者APP都只在部分页面启用HTTPS,其它页面均为明文传输;黑客可以通过欺骗手段,利用自签SSL证书和虚假服务器获取到用户APP传输的加密数据。

  故在客户端与服务器进行数据传输过程,需要为APP服务器部署全球信任的SSL证书对数据传输进行加密操作,并采用压缩技术将交互流量压缩至最小,并在客户端嵌入可以验证数据完整性及解密的SDK便于数据本地调用,通过自定义加密算法防止数据泄露、中间人欺骗和劫持,保护用户数据传输安全。

  3、运行环境保护技术

  由于无法预知最终用户手机系统的安全,当客户端在不可信执行环境运行时,会存在手机ROOT、病毒、钓鱼程序等威胁,而目前针对金融领域窃取账号和密码的病毒泛滥,如何确保证券业APP金融交易在安全意识层次不齐的客户群体里安全性至关重要。

  根据传统PC端的成熟的系统环境检测解决方案,可以在证券业移动客户端引入清场保护机制,在APP中嵌入清场的安全检测SDK,调用智能分析引擎,并结合传统的病毒特码库及移动威胁感知系统进行辅助,对系统存在的病毒及其它安全风险进行检测,为后续的业务逻辑提供支撑,若检测到有异常情况,则可对用户进行提示,全程守护证券业移动应用的运行,给用户带来最安全的保障。

  五、总结

  鉴于证券业移动应的特有属性,很多移动应用均是由第三方外包进行研发,移动应用开发以业务为核心,对应用的安全防护体系建设比较淡薄;并且股民的年龄层分布较广,绝大多数人的安全防范意识较差,所以主动引入移动应用安全防范体系至关重要,同时为了保证应用的高可用,需通过严格的兼容性、性能测试保证移动应用安全加固程序能够在不同版本的移动操作系统环境下正常运行;通过本文对安全技术及形势的分析,可以为证券业移动安全的建设提供参考。

(来源:《交易技术前沿》)