干货 | 聊聊移动端安全加固

2021-11-15 15:41:21 浏览数 (2)

作者简介

老松树,携程高级开发经理,专注于移动应用的信息安全。

随着移动互联网产业的高速发展,智能手机的全面普及,移动App已经无处不在。据统计,我国智能手机用户达到12亿,手机App总量达到400万款。手机APP在方便人们生活之余,也带来了巨大的安全隐患。

App主要面临的风险:

1)静态攻击风险

APP通常很容易被反编译逆向分析源码,出现被破解、篡改、广告植入、二次打包、仿冒/钓鱼应用等风险。

2)动态攻击风险

由于APP运行环境和用户操作行为不可控,导致APP在运行过程中面临各种动态攻击,如模拟器、多开器、加速器、注入攻击、动态调试、设备篡改、位置欺诈等攻击。

3)业务作弊风险

企业大量业务已经由线下及Web端转至手机APP端,目前地下黑灰产通常在APP注册、登录、营销活动场景进行批量化、机器化作业,威胁平台利益和用户账号安全。

移动安全已经成为互联网企业发展过程中面临的一个重要问题,需要更多的关注和投入。

一、手机APP安全加固介绍

解决移动安全问题,要从APP前端的加固,和业务后端的分析两方面进行。本文将介绍手机APP安全加固方面的知识。

下面从iOS平台着手,从以下几个方面,介绍移动端安全加固的方案。

一个标准的安全加固SDK,要包含以下几个要素:

  • 运行环境检测
  • 环境数据的收集
  • 符号,代码的混淆
  • 算法的混淆
  • 虚拟机技术

二、运行环境检测

确认APP的运行环境是否安全,是APP加固的最基础条件。所以我们的加固SDK中,要尽量靠前的进行APP的检测。

检测主要包括以下方面:

  • 越狱检测
  • Hook检测
  • Debug检测
  • 重签名检测
  • 模拟器检测
  • 代理检测

2.1 越狱检测

2.1.1 越狱概念

越狱是指利用iOS系统的某些漏洞,取得到iOS的root权限,然后改变一些程序使得设备的功能得到加强,突破封闭式环境。

越狱使得第三方管理工具可以完全访问iOS设备的所有目录,并可安装更改系统功能的插件和盗版的软件。

对于攻击者来说,越狱一般是iOS设备破解的第一步,只有越狱过才能实现后续的安装插件,砸壳获取二进制文件等一系列操作。

2.1.2 越狱检测

根据越狱手机和非越狱手机权限等方面的区别,我们可以检测当前环境是否是越狱设备。

例如,可以检测下面这些目录:

  • 检测系统根目录文件
  • 检测是否有一些越狱插件
代码语言:javascript复制
/bin/bash
/bin/sh
/var/lib/cydia/
/Applications/Cydia.app
/Library/MobileSubstrate
...

如果这些目录存在,则表示当前是越狱设备。

2.2 Hook检测

2.2.1 Hook概念

Hook(钩子),实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息。在Hook程序执行完,再决定后续的操作。

攻击者在破解APP时,经常会通过Hook方式,对APP中的关键位置的函数进行Hook。

通过Hook手段,攻击者可以方便破解分析,可以模拟发送业务请求,可以调用加密方法进行数据处理等。

2.2.2 Hook检测

iOS中的Hook主要有以下几种:

  • 通过iOS的runtime消息转发的特性,实现对iOS函数的Hook。
  • 利用程序在调用外部函数时,通过符号表查询函数实际地址,实现的例如C系统函数的Hook。
  • 利用第三方插件库,实现汇编级别的Hook。

在Hook检测时,可以通过各类Hook的原理和特性,进行反向的检测。

对于汇编级别的Hook,通过比较函数内的汇编代码,来判断是否有汇编级别的Hook。

2.3 Debug检测

2.3.1 Debug

在破解App包时,需要通过GDB或LLDB来进行调试。所以对APP的调试检测,也是必须的。

2.3.2 Debug检测

可以通过ptrace等方法,查看是否处于调试状态。对于已经发布的包,如果检测出调试状态,应该及时终止进程,阻止攻击者的攻击。并且让崩溃点,尽量远离检测点,并清空进程信息,防止攻击者确认检测关键点位置。

2.4 重签名检测

2.4.1 重签名

App Store下载的应用,在砸壳之后,可以通过重签名的方式,实现App包的安装运行,实现逻辑的修改,APP的多开等功能。

2.4.2 重签名检测

对于包的重签名检测,可以从以下两方面进行:

  • 检测embedded.mobileprovision中的签名信息,是否正确。
  • App Store下载的包都是加密的,砸壳后的包是没有加密的,可以检测加密标志的状态。

2.5 模拟器检测

攻击者也有可能使用ARM模拟器运行,需要进行模拟器检测。

2.6代理检测

攻击者可以通过设置网络代理,抓取App的业务请求,实现修改重发等操作,要进行必要的代理检测。

三、环境数据的收集

通过收集App运行手机的环境信息,尽可能的识别和标识运行设备,跟踪危险用户动作行为,进行持续分析。

通过设备信息的聚合分析,判断用户的环境是否真实,是否是虚拟的伪造的设备。例如:对于攻击者通过设备,进行自动化的注册登录等行为,通过设备ID等信息的聚合,可以发现其中的一些规律。

手机的环境信息,列举部分:

代码语言:javascript复制
IDFA      广告标示符
IDFV      Vendor(供应商)标识
Appleid   appleid的相关的一串id
Wifi      Wi-Fi信息
fingerprint  设备指纹信息
os_model  系统型号信息
CUP信息
手机型号
屏幕宽高
内存大小
手机容量
.....

通过种类繁多的设备信息的收集,上传到后端后,由后端通过AI,大数据等手段进行设备打分,设备聚合等一系列操作,给设备定义出一个安全范围。为安全人员的后续分析,提供有力的数据支撑。

四、符号,代码的混淆

4.1符号的混淆

对代码中,关键部分的代码,类名,函数名等部分,要进行混淆。让攻击者无法轻易通过名称,理解当前代码的功能含义,增加破解难度。

可以通过宏定义的方式,混淆函数名称,例如:

代码语言:javascript复制
#define  MyClass       FX123ADHZA
#define  propertyName  XZAF891AFJ
#define  method_arg1   KAJ18XA91F
#define  method_arg2   JAC12DDASS
#define  method_arg3   WIAK198FJS

@interface MyClass : NSObject
@property (nonatomic,copy) NSString * propertyName;
- (void)method_arg1:(NSString *)arg1 method_arg2:(NSString *)arg2 method_arg3:(NSString *)arg3;
@end

编译出来的代码如下图所示,混乱的方法名,让攻击者理解方法含义的成本增加:

4.2 字符串混淆

攻击者在进行逆向分析时,通常会根据一些特定的字符串,查找定位到代码的关键位置。所以在安全加固的过程中,不让关键的字符串以明文的形式存在,要对字符串进行混淆,在运行使用时,再解析出来:

例如字符串,对这段字符串可以使用异或等方式进行混淆,混淆后的结果为:

代码语言:javascript复制
0123456789ABCDEF

混淆后的效果为:

4.3 数据混淆

常用的加密算法,算法通常都有一些运算的模数。对这些模数,也要进行混淆处理,在使用时再解析出来使用。

五、算法的混淆

攻击者逆向过程中,通过砸壳获取到APP的二进制文件。将二进制文件放入IDA软件,可以进行静态分析,还可以通过插件,反编译出伪代码。

所以,在安全加固的过程中,要对安全SDK中的关键算法,进行算法的编译混淆。

通过Clang,在编译过程中,将算法逻辑打乱重排,嵌套一些while循环,或者switch分支,并且插入一些混淆代码,防止攻击者的反编译。

例如,正常的算法的汇编代码:

这样的汇编代码,可以在IDA中,通过IDA等分析工具,可以反编译出伪代码,攻击者可以很方便的进行分析,通过调试还原出代码的原始逻辑:

而我们在编译过程中,将汇编代码进行打乱重排,插入虚假判断逻辑等,可以有效的进行防范。如下图所示,便是一种混淆模式,将算法混淆之后的效果:

混淆后的代码,代码段被切割重排,中间还插入了无用代码,使攻击者无法阅读,更增加了攻击者调试的成本。

六、虚拟机技术

在安全加固方面,安全性最高的一种加固手段,就是虚拟机加固技术。它是将原始代码的算法代码,编译为动态的VM虚拟机指令,在虚拟机中解释执行,最终计算出计算结果。

加密后的代码,具有不可逆性,无法被反编译回源代码。算法代码动态执行,单步执行,难以调试分析。

而且,虚拟机处理的算法代码,可以动态下发,极大的提高了算法的安全性。

七、携程安全加固SDK的产品功能

7.1 种类齐全的设备信息

携程安全加固产品,经用户授权后,收集种类相对齐全的设备信息,通过设备信息,后端分析算法,可以高效辨别设备的真实性。

通过大数据技术,对设备信息进行多维度分析,给设备进行打分,建立用户安全等级。

7.2 多样/隐蔽/安全的设备环境监测

我们对设备的环境监测,越狱,调试,重签名等检测项,都提供了两种以上的检测方案,做到多方案互备。

每种检测方法,都使用了非常隐蔽的调用方法,减少被Hook,被定位的可能性。让加固产品的环境监测更加安全可信。

7.3 自主实现的代码混淆技术

使用了自主实现的代码混淆技术(bnof),对比市面上开源的混淆算法,更加安全和高效。

携程的代码混淆技术,可以抗优化,可以灵活调节代码切割粒度,执行效率更加高效。混淆后的汇编代码,无法进行反编译,修复成本极高,能对关键加密代码提供很好的保护。

7.4 自主实现的虚拟机技术

携程的安全加固产品,使用了自主实现的虚拟机技术(VM),安全,稳定,可靠。虚拟机技术为核心的加密代码,提供了极强的保护。

八、总结

在严峻的安全形势下,携程加固产品上线以来,取得了良好的效果,为安全部门和业务部门的风控和反爬虫工作,提供了强力的支持。

0 人点赞