Android 应用之安全开发

本文探讨了Android应用面临的安全问题,包括病毒、关键信息泄露、APP重打包、进程劫持、数据传输劫持等,并详细阐述了基础安全措施,如Manifest文件安全设置、组件安全策略、反调试与反篡改方法。此外,还强调了数据安全的重要性,如SQLite安全、剪贴板保护、密钥管理等,以及Webview和弱加密风险的防范。最后提及其他风险,如谨慎使用高风险函数和重要函数逻辑安全。建议开发者采取多种措施增强Android应用的安全性。

大佬:“这个 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 漏洞。

三、基础安全

3.1 Manifest 文件安全
禁止 PermissionGroup 的属性为空

Permission

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值