市面上已经有很多基于位置服务的应用场景,如运动品类应用基于地理位置生成运动轨迹,企业办公应用基于定位信息进行打卡,游戏品类应用基于位置信息开发区域排名,电商品类应用基于位置发放区域性优惠券等等。在黑灰产嗅探到背后的商业利益后,通过伪造定位信息来达到自己的目的。为了进一步降低技术门槛和对抗难度,虚拟定位工具应运而生。
在以前 iOS 系统上需要越狱系统或通过篡改技术修改 CoreLocation
实现虚拟定位,不仅增加了黑灰产自己的复杂度和设备成本,也为检测带来了更多的检测特征。为了解决这痛点,黑灰产越来越多开始使用AnyGo、iAnyGo、爱思助手等工具进行位置伪造。
一款运动产品的工作人员找到极验,表示他们发现越来越多的代刷在使用AnyGo进行位置伪造,向我们寻求解决办法。在帮助客户解决问题之前,我们先来了解一下AnyGo是一款怎样的虚拟定位软件。
AnyGo 简介
AnyGo 利用 Xcode 提供通过 GPX 文件的定位模拟服务,而无需在 iOS上安装 App 或者需要 iPhone 系统越狱。下面是 AnyGo 界面截图:
AnyGo 模拟定位
AnyGo 通过 GPX 文件,不仅仅可以模拟定位到某一个位置,且可以根据场景模拟运动轨迹,并对全局系统有效:
模拟跑步
模拟驾车
使用 Xcode 实现 iOS 虚拟定位
既然AnyGo是使用的一种Apple开发中的测试服务,那么我们通过 Xocde 动手操作一下吧。
首先在 Xcode 开启Debug的 Simulate Location
,选定位置或通过GPX文件修改定位信息,即可完成虚拟定位的主要操作。
Simulate Location
是通过GPX文件对虚拟的定位进行描述的。其中GPX是一种为应用软件设计的通用的全球定位系统的XML格式数据,可以用来描述点、路径和轨迹。
AnyGo的工作原理
为了弄清楚AnyGo等同类型的虚拟定位工具的原理,我们下面需要了解 com.apple.dt.simulatelocation
服务和 libimobiledevice
开源库。
AnyGo 通过跨平台开源库 libimobiledevice
提供的 Wi-Fi 或 USB通讯能力与 iOS 设备连接,并向设备上的lockdown进程发送开启 com.apple.dt.simulatelocation
服务命令。该服务会使用指定的 GPX 文件进行系统全局的虚拟定位,从而让系统上的所有应用使用虚假的定位信息。以下是部分 libimobiledevice
源码:
#define DT_SIMULATELOCATION_SERVICE "com.apple.dt.simulatelocation"
if (lockdownd_start_service(lockdown, DT_SIMULATELOCATION_SERVICE, &svc) != LOCKDOWN_E_SUCCESS) {
lockdownd_client_free(lockdown);
idevice_free(device);
printf("ERROR: Could not start the simulatelocation service. Make sure a developer disk image is mounted!\n");
return -1;
}
lockdown
lockdown 是 iOS 设备上一个开机启动的守护进程,用于 iPhone 进程与系统服务的通讯,以root权限运行,其配置文件声明位于/System/Library/LaunchDaemons/com.apple.mobile.lockdown.plist
路径下。未来我们将进一步分享相关内容。
如何对AnyGo检测
如何对这类虚拟定位进行识别?其实,通过 iOS 系统提供的 API 便可进行初步的检测。
在 iOS 15+,系统在 CLLocation
库提供了isProducedByAccessory
和isSimulatedBySoftware
属性来识别通过GPX进行的虚拟定位。
未篡改获取定位信息返回的结果:
使用 GPX 修改定位后返回结果:
可以看到已经实现了虚拟定位,并且 isSimulatedBySoftware
已经命中。此外我们也可以利用 AnyGo的原理进行识别。
最终该运动品类客户通过我们的产品解决了他们迫在眉睫的问题。
当然除了对虚拟定位的识别外,做好后续的代码对抗也是必不可少的。极验设备验是极验近期推出的一款风控产品,通过三维复合和弱特征归因算法等生成了设备唯一标识符,可以检测不限于虚拟定位、模拟器、篡改、代理、多开、越狱等多种风险,为企业的安全前行保驾护航。
添加Eva微信:Geetest_1024,加入极验读者交流群