iOS APP侧恶意行为分析及应对

1、APP安装包被修改

1、检查是否有代码代码注入

  • 1.1 是否注入了测试框架,通过框架来模拟操作
  • 1.2 是否注入了私有API,用来模拟事件发送

iOS测试框架名单

测试框架名称 测试脚本语言 是否需要代码侵入 关键类名/API
XCTest OC 需要Xcode开发工具 配置工程进行调试、 编写测试脚本、熟悉APP业务  
UIAutomation JavaScript 需要Xcode 开发工具进行调试, Xcode 8.1(2016.10.27发布) 开始已经移除了这个框架  
Frank Ruby 需要代码侵入 FrankLoader FrankServer
KIF OC 需要代码侵入 依赖苹果私有API KIFGSEventProxy UIEvent->_setGSEvent UIEvent->_setHIDEvent
Calabash-ios Ruby 需要代码侵入 CalabashServer
Subliminal OC 基于UIAutomation编写,需要依赖Xcode  
Kiwi OC 需要Xcode开发工具配置工程进行调试, 修改相应代码、 编写测试脚本、熟悉APP业务  

系统关键私有API名单

API名称 关键类名
_setGSEvent UIEvent
_setHIDEvent UIEvent

注:

在没有源码的前提下,如果向iOS ipa安装包内注入代码,步骤:

1、准备一台已越狱的iPhone设备

2、在App Store内下载APP

3、通过这个越狱手机砸壳解密APP,导出解密后的ipa安装包

4、向已解密的ipa二进制可执行文件内注入恶意代码

5、重新签名得到新的ipa安装包

应对:
APP启动后,利用objec-c的runtime机制,检查是否包含名单内的测试框架代码。
如某个关键类名或相应API是否存在,需要列出名单。
如果命中任意一个关键点,禁止使用APP.

2、检查手机是否越狱

应对:拒绝越狱机器使用APP

3、检查APP是否重签名

应对:重签名的APP禁止启动

2、APP被抓包工具抓包

macOS系统常用抓包工具 Charles、Wireshark

1、检查APP发起的网络请求,HTTPS服务是否使用了非可信证书

应对:非可信证书禁止使用APP

2、检查APP的网络请求是否使用了代理

应对:
    基于WIFI网络时,使用代理网络禁止使用APP
    如果是手机自建代理,是否放行?

如果接口响应报文均已加密,这种抓包行为可忽略。

3、无侵入模拟使用APP

调试一般都会插入USB数据线,衍生出充电行为。

方式

利用iOS的通讯机制,使用Python脚本驱动模拟真人操作的行为。

关键依赖:

脚本Python

引擎WDA (facebook/WebDriverAgent) https://github.com/openatx/facebook-wda

第三方通讯库libimobiledevice

该方式门槛较高,需要Mac电脑配置复杂的环境,连接手机进行调试。

采集、分析滚动视图的滑动特征

初级判断维度:滚动速度、滚动频率、是否充电中(连接了USB进行调试)
如果攻击方设置了随机值,此处不太好判断

4、源码泄漏

……

5、人海战术

……