大佬:“这个 APP 破解下,可以兼容客户已出货的产品”
我:“这个不合适吧”
大佬:“这个客户对我们很重要”
我:“好吧”
然后,就是通过反编译某 APP ,分析蓝牙交互协议,在新的 APP 中去兼容已出货的设备,达到无缝对接。 –这种场景在开发中还是比较经常碰到的。
一、引言
随着移动互联网向社会生活的各个领域渗透,APP 的使用越来越广泛。但 Android 系统由于其开源的属性,市场上针对开源代码定制的 ROM 参差不齐(特别中国区域),在系统层面的安全防范和易损性都不一样,Android 应用市场对 APP 的审核相对 iOS 来说也比较宽泛,市场上一些主流的 APP 虽然多少都做了一些安全防范,但由于大部分 APP 不涉及资金安全,所以对安全的重视程度不够;而且由于安全是门系统学科,绝大部分 APP 层的开发人员缺乏对 APP 安全意识及措施,导致被有心者有机可乘。
Android 开发是当前最火的话题之一,但很少开发者会讨论这个领域的安全问题,除了专业从业者,但移动应用安全隐患也给发展带来了挑战。
- 开发团队通常将精力集中在产品设计、功能实现、用户体验和系统效率等方面,而很少考虑安全问题;
- 与一切都是集中管理的 iOS 相比,Android 提供了一种开放的环境,在获得了灵活性、可以满足各种定制需求的同时,也损失了部分安全性;
- Android 提供的安全机制比较复杂,开发者需要理解它们,并对常见的攻击思路和攻击方法有所了解,才能有效地保护软件;
- 目前很少出现对特定移动软件安全漏洞的大规模针对性攻击,在真实的攻击出现之前,许多人对此并不重视。
声明,我不是专业的安全人员,从事的跟安全工作也没有什么关系,本文从自已平时涉及的项目出发,对客户端的代码质量、代码篡改、不安全的数据储存、不安全的通信、不安全的认证、加密不足等安全问题作了说明,从普通开发者角度尽量去提高自已的 APP 安全,以降低代码安全漏洞,减少代码被利用的可能性,避免信任危机、经济损失和法律风险。
二、移动应用面临的安全问题
2.1 病毒
Android 病毒就是手机木马,主要是一些恶意的应用程序。手机木马有的独立存在,有的则伪装成图片文件的方式附在正版 APP 上,隐蔽性极强,部分病毒还会出现变种,并且一代比一代更强大。
这些病毒有一些通用的特征:
- 母包 + 恶意子包的运行机制
- 通过技术手段防止用户通过正常途径卸载
- 以窃取用户账户资金为目的
- 以短信作为指令通道
2.2 关键信息泄露(反编译)
虽然 Java 代码一般要做混淆,但是 Android 的几大组件的创建方式是依赖注入的方式,因此不能被混淆,而且目前常用的一些反编译工具比如 Apktool 等能够毫不费劲的还原 Java 里的明文信息,Native 里的库信息也可以通过 objdump 或 IDA 获取。因此一旦 Java 或 Native 代码里存在明文敏感信息,基本上是毫无安全而言的。
2.3 APP 重打包
即反编译后重新加入恶意的代码逻辑,从新打包一个 APK 文件。重打包的目的一般都是上面提到和病毒结合,对正版 APK 进行解包,插入恶意病毒后重新打包并发布,因此伪装性很强。截住 APP 重打包就一定程度上防止了病毒的传播。
2.4 进程被劫持
一般通过进程注入或者调试进程的方式来 Hook 进程,改变程序运行的逻辑和顺序,获取程序运行的内存信息,也就是用户所有的行为都被监控起来,这也是盗取帐号密码最常用的一种方式。
当然 Hook 行为不一定完全是恶意的,比如有些安全软件会利用 Hook 的功能做主动防御。一般来说,Hook 需要获取 root 权限或者跟被 Hook 进程相同的权限,因此如果你的手机没有被 root,而且是正版 APK 的话,被注入还是很困难的。
2.5 数据在传输过程中遭劫持
传输过程最常见的劫持就是中间人攻击。很多安全要求较高的应用程序要求所有的业务请求都是通过 Https,但是 Https 的中间人攻击也逐渐多了起来,而且在实际使用中,证书交换和验证在一些山寨手机或者非主流 ROM 上面存在一些问题,让 Https 的使用碰到阻碍。
2.6 键盘输入安全隐患
支付密码一般是通过键盘输入的,键盘输入的安全直接影响了密码的安全。键盘的安全隐患来自三个方面:
- 使用第三方输入法,则所有的点击事件在技术上都可以被三方输入法截取,如果不小心使用了一些不合法的输入法,或者输入法把采集的信息上传并且泄露,后果是不堪设想的。
- 截屏,该方法需要手机具有 root 权限,才能跑起截屏软件
- getevent,通过读取系统驱动层 dev/input/event1 中的信息,获取手机触屏的位置坐标,在结合键盘的布局,就能算出来事件跟具体数字的映射关系,这也是目前比较常用的攻击方式。
2.7 Webview 漏洞
由于现在 Hybrid APP 的盛行(混合开发),Webview 在 APP 的使用也是越来越多,Android 系统 Webview 存在一些漏洞,造成 js 提权。最为著名的就是传说中 js 注入漏洞和 webkit xss 漏洞。