• 快捷搜索
  • 全站搜索

手机应用开发安全措施实践

2016-09-19 17:02:05作者:中国农业银行四川省分行 邓锐编辑:金融咨询网
手机应用的广泛使用满足了用户移动互联的需求,极大地方便了用户生活和工作,但其安全问题也日益凸显,利用Android漏洞展开攻击的事件屡有发生。因此采取有效措施提升Android软件的安全性十分必要,本文将对农业银行Android应用项目中采取的安全措施进行初步探讨。

手机应用的广泛使用满足了用户移动互联的需求,极大地方便了用户生活和工作,但手机应用在给用户带来方便、快捷服务的同时,安全问题也日益凸显,利用Android漏洞展开攻击的事件屡有发生,许多攻击方法和工具都已经成熟。一旦出现这种攻击,对银行来说,用户的个人隐私数据可能发生泄漏,账户信息可能被盗取;如果与钓鱼攻击等结合,则可能使用户产生经济损失。因此采取有效措施提升Android软件的安全性十分必要,农业银行在开展Android应用项目的同时,采取了部分安全措施,取得了一定的效果,本文对Android应用项目中采取的安全措施进行初步探讨。

一、背景

  移动智能终端的普及,特别是Android开放系统的崛起,颠覆了传统的移动终端市场格局。技术的进步带来了更智能化的操作和更完善的用户体验,降低了移动渠道产品价值的传递成本,从而激发出大量的市场需求。移动金融正是新时期移动互联网时代金融信息化发展的必然趋势,银行进行移动金融相关系统的建设,是近期金融信息化建设的重点之一,移动金融系统的建设有利于提升内部效率、降低沟通成本,同时能够提供更多的渠道来服务于金融客户。

  在此背景下手机应用软件的开发便成为当前银行科技创新工作的重要组成部分,Android软件开发中安全技术应用也成为各个项目提升系统安全性的重要措施。与集中管理的10S相比,Android提供了一种开放的环境,在提供了灵活性、可以满足各种定制需求的同时,也损失了部分安全性。因此,开发团队在集中精力进行产品设计、功能实现、提升用户体验和系统效率等方面工作的同时,也需要考虑系统安全运行设计,下面对部分安全措施进行总结,以供同行借鉴参考。

二、安全措施和技术

  1.动态水印技术

  办公应用中,用户在使用手机应用时,可能会有意无意地通过手机截屏转发等方式分享自己所获得的信息,这样就存在敏感信息泄露的风险,为保护敏感信息不被非法复制、截屏传播,手机应用可在系统显示的敏感信息上加上动态水印信息,水印信息中包含了用户姓名、手机号等个人信息,这样如果信息发生截屏传播的情况,可以追查到是哪位用户进行了非法复制和传播,水印技术的应用可以很好地警示用户不能截屏传播,从而达到防止敏感信息被非法传播和使用的目的。

  2.数据加密传输

  手机应用系统架构一般采用客户端服务器模式,这就需要手机客户端和后台服务之间通过网络交换数据,实现业务逻辑和功能。为了保护数据在网络传输过程中的安全,一般采用安全文本传输协议(https)和敏感数据加密技术。

  https是以安全为目标的HTTP通道,简单讲是HTTP的安全版,现在它被广泛用于互联网上安全敏感的通信。

  数据加密是指将一条信息经过加密钥匙及加密函数转换,变成无意义的密文,而接收方则将此密文经过解密函数、解密钥匙还原成明文,加密技术是网络安全技术的基石。

  农业银行在开发手机应用项目中,除了采用https协议进行网络传输以外,还采用国密算法对敏感信息进行了加密处理,以保障数据在传输过程中的安全。

  3.交易合法性验证

  采用客户端服务器架构的应用系统,从服务端来看,需要保障收到的请求交易是由客户真实发起,为确保交易的真实合法性,Web应用一般采用用户认证、Session等技术和机制保障网页请求的合法性。手机软件作为一个客户端应用可以采用类似的方法保障交易的合法性,用户登录时可采用用户和密码认证等方式进行认证,服务端根据用户的访问权限,生成用户访问权限秘钥(token)反馈给客户端,客户端保存token,在后续的交易请求报文中携带token等秘钥信息,用于服务端合法性校验,保障每次交易的合法性。

  4.敏感信息保存

  为了提升用户体验,一种方法是大量的手机应用都采用了在客户端保存部分数据的方式,改善用户体验,例如许多软件有“记住密码”的功能,如果开发者依字面含义将密码存储到本地,可能导致敏感信息泄露。针对这种情况,一般采用将数据加密后存储在本地,对于用户密码信息可采用MD5算法加密存放,或者钥匙串等技术存放。另一种方法是将软件运行时依赖的数据尽可能地保存在内存,软件退出(destroy)时,内存中的数据自动失效,提升系统安全性,例如上节中提到的token数据就可以采用变量的方式存放在变量中。

  5.APK程序保护

  由于Java字节码的抽象级别较高,Android的APK较容易被反编译。如果一款应用APK被破解,可能造成敏感信息泄露,甚至造成资金损失。下面几种常用的方法可用于保护Java字节码不被反编译。这些方法并不能绝对防止程序被反编译,只是加大反编译的难度而已,因为这些方法都有自己的使用环境和弱点。

  (1)隔离Java程序

  该方法就是让用户不能够访问到JavaC1ass程序,这种方法是最根本的方法,具体实现有多种方式。例如,开发人员可以将关键的JavaC1ass放在服务器端,客户端通过访问服务器的相关接口来获得服务,而不是直接访问Class文件。这样黑客就没有办法反编译C1ass文件,起到安全防护的作用。

  (2)对Class文件进行加密

  为了防止C1ass文件被直接反编译,许多开发人员将一些关键的Class文件进行加密,例如对注册码、序列号管理相关的类等。在使用这些被加密的类之前,程序首先需要对这些类进行解密,而后再将这些类装载到JVM当中。这种方法存在的问题是加密程序本身不是被加密的,因此它可能成为黑客最先攻击的目标。如果相关的解密密钥和算法被攻克,那么被加密的类也很容易被解密。

  (3)转换成本地代码

  将程序转换成本地代码也是一种防止反编译的有效方法。因为本地代码往往难以被反编译。开发人员可以选择将整个应用程序转换成本地代码,也可以选择关键模块转换。如果仅仅转换关键部分模块,Java程序在使用这些模块时,需要使用JNI技术进行调用。当然,在使用这种技术保护Java程序的同时,也牺牲了Java的跨平台特性。

  (4)代码混淆

  代码混淆是对C1ass文件进行重新组织和处理,使得处理后的代码与处理前代码完全相同的功能(语义)。但是混淆后的代码很难被反编译,即反编译后得出的代码是非常难懂、晦涩的,因此反编译人员很难得出程序的真正语义。

  (5)在线加密

  部分互联网网站提供了在线对APK程序进行加密的服务,可以支持Java和C++语言的保护,能达到反调试、反编译的效果。例如通过在线工具APKProtect加密的APK变得非常难以破解,从而能够很好地保护APK。

  利用手机系统漏洞展开攻击并不太难,网上流传着很多攻击方法和工具,因此采取措施提升手机应用的安全性十分必要,本文对农业银行已经采取的部分技术措施进行了总结,但这些措施还不十分完善,需要业界进一步了解手机应用特征,深入分析网络攻击方法,学习互联网新技术,采取更安全可靠的协议,例如0Auth认证,用户认证基于凭据而不是密码的协议满足资源持久访问的需求。从系统架构、应用层面、硬件层面、管理措施等多个维度进行综合考虑,构建企业级安全的应用,不断提升应用系统安全性。

(文章来源:《中国金融电脑杂志》)

扫码即可手机
阅读转发此文

本文评论

相关文章