Android设备指纹对抗策略与实践

设备指纹作为一种重要的技术手段,被广泛应用于移动安全领域,用于识别和验证设备的唯一性。然而,在一些特定的场景下,如黑产的自动化爬取等,设备指纹可能会被恶意利用或修改。因此,研究设备指纹的对抗策略具有重要的现实意义。本文将详细探讨自动化采集Android系统级设备指纹的对抗策略,并结合实际案例进行分析。

一、背景与定义

设备指纹是指通过收集和分析设备的硬件、软件、系统设置等信息,生成的一组用于唯一标识设备的特征码。这些特征码可以用于设备识别、安全验证、个性化服务等场景。然而,一些黑产分子为了达到非法目的,会尝试修改设备指纹,以逃避监管和检测。因此,研究设备指纹的对抗策略,对于保护用户的隐私和安全,维护移动互联网的正常秩序具有重要的意义。

二、设备指纹基础知识

  1. 设备指纹分类

    • 系统服务相关设备指纹:包括Android Id、各种Id(IMEI等)、Apk包相关、蓝牙相关、wifi信息相关等。这些指纹通常由系统服务在设备启动时生成,并存储在系统的特定位置。
    • 其他ApkSettingsProvider提供相关设备指纹:如oaid、vaid、aaid等,这些指纹由某些特定的Apk或服务提供,用于标识设备的特定属性。
    • 内核ID相关设备指纹:如/sys/block/mmcblk0/device/cid、/sys/block/mmcblk0/device/serial、/sys/devices/soc0/serial_number、/proc/sys/kernel/random/boot_id等。这些指纹与设备的内核相关,反映了设备的硬件特性。
    • Init进程设备指纹相关:如DRM等指纹产生于Init进程,该进程创建时间早,涉及的内容众多,对设备的安全性至关重要。
    • Apk环境相关设备指纹:通过getprop的方式获取一些与环境相关的设备指纹,如设备的系统属性、设置等。
  2. 设备指纹产生位置

    • 系统服务相关设备指纹主要产生于system_server,这是Android系统中的一个核心服务,负责管理和提供各种系统级的功能和服务。
    • 其他ApkSettingsProvider提供相关设备指纹通常由特定的Apk或服务在运行时生成。
    • 内核ID相关设备指纹产生于设备的内核,反映了设备的硬件特性和内核配置。
    • Init进程设备指纹相关产生于Init进程,该进程是Android系统启动的第一个进程,负责初始化系统的各种资源和服务。
    • Apk环境相关设备指纹通过getprop命令从系统的属性和设置中获取。
  3. 对手模拟
    在进行设备指纹对抗时,我们需要假设对手是国内Apk风控的顶级团队,他们熟练掌握客户端对抗的各种策略和技术。这些对手可能会采用多种手段来获取和修改设备指纹,以逃避检测和监管。因此,我们需要深入了解对手的行为模式和技术手段,才能制定有效的对抗策略。

三、对抗模拟与实践

  1. 准备工作

    • 设备要求:为了进行有效的设备指纹对抗,我们需要准备3台以上的Android手机,系统版本要求为11以上,最好是13以上,并且需要刷入Apatch。
    • 账号设置:准备10个以上的账号,每个账号的阈值设置为1000数据量/一天。在实际操作中,可以根据需要逐步增加设备和账号的数量。
  2. 客户端架构

    • 设备指纹对抗模块:该模块的主要功能是通过修改系统服务中相关设备指纹的产生过程来实现设备指纹的修改。例如,通过hook系统服务的相关函数,修改Android id、隐藏包名等设备指纹信息。
    • 环境信息对抗模块:该模块主要负责对Apk签名、模拟器、云手机、沙箱等环境信息进行检测和对抗。例如,通过检测Apk的签名信息,判断Apk是否被重打包或篡改;通过检测设备的传感器信息,判断设备是否为模拟器或云手机等。
  3. 设备指纹对抗策略

    • 系统服务相关设备指纹对抗:对于系统服务相关设备指纹,我们可以直接在system_service中初始化lsplant,然后使用Xposed api进行hook。例如,通过hook SettingsProvider中的相关函数,修改Android id等设备指纹信息。
    • 其他ApkSettingsProvider提供相关设备指纹对抗:对于其他ApkSettingsProvider提供相关设备指纹,如oaid、vaid、aaid等,我们可以在Magisk模块中发现加载相关Apk时,注入lsplant,请求服务端,拿到java代码句柄,然后直接hook对应的代码,实现设备指纹的修改。
    • 内核ID相关设备指纹对抗:内核ID相关设备指纹,如/sys/block/mmcblk0/device/cid、/sys/block/mmcblk0/device/serial等,虽然产生于内核,但我们可以通过Apatch模块在内核中直接进行全局的IO重定向或使用Mount命令进行修改。例如,对于Boot_id的修改,我们可以先找到内核获取它的函数,然后通过KPM模块hook并自定义syscall往内核写入Mock的boot_id。
    • Init进程设备指纹对抗:Init进程产生的DRMID等设备指纹,由于Init进程创建时间早,涉及的内容复杂,我们需要通过ptrace注入到目标进程,然后用inlinehook去hook相关函数,实现设备指纹的修改。例如,我们可以编写注入器,让目标进程调用dlopen打开指定的so文件,实现初始化并进行hack。
    • Getprop指纹修改:getprop里面保存的一些变量,如oem分区的值、历史开机时间等,Selinux权限很高。为了防止这些信息被随意读取,我们需要开启Selinux,并可以使用magisk自带的magisk resetprop命令直接修改这些环境变量。
  4. 一机多号实现:为了实现一机多号,我们可以通过Mount命令对/data/data/包名、SD卡相关数据等进行IO重定向。具体来说,我们可以为每个用户保存设备指纹相关数据、SD卡相关数据和/data/data/包名相关数据三个目录。在切换用户时,我们可以读取设备指纹数据并mock到内存中,然后设置mock的设备指纹读取内存值即可。

四、对抗总结与反思

通过以上的对抗策略和实践,我们可以在客户端不注入一行代码的情况下,实现设备指纹的全量修改。这样,客户端获取的设备指纹都是被修改过的,但系统本身的值被修改,且未修改目标进程的任何代码。然而,在实际应用中,我们可能会遇到一些问题,如检测挂载文件、magisk模块痕迹、手机root检测、客户端获取数据等。针对这些问题,我们需要进一步优化对抗策略,提高设备指纹的安全性和可靠性。

例如,对于检测挂载文件的问题,我们可以通过在内核中写个模块把这个文件特征抹掉,或者使用IO重定向等技术来绕过检测。对于magisk模块痕迹的问题,我们可以在magisk模块加载完毕后调用api_->setOption(zygisk::Option::DLCLOSE_MODULE_LIBRARY),把magisk模块so移除掉,以减少痕迹。对于手机root检测的问题,我们可以使用shamiko + magisk修改包名等技术来过掉国内99.999%的App root检测。对于客户端获取数据的问题,我们可以使用自动点击的软件配合OCR文字识别,或者通过抓包、路由代理等方式来解密数据。

此外,我们还需要不断关注技术的发展和对手的动态,及时调整和优化对抗策略,以应对不断变化的安全挑战。同时,我们也应该加强对用户的教育和宣传,提高用户的安全意识,共同维护移动互联网的安全和稳定。

五、相关知识拓展与应用

  1. 设备指纹获取方式的多样性:以Android id为例,它有不下5种的获取方式,包括通过Settings.Secure.getString、反射查询android id cache、ContentResolver间接获取、query命令查询和代码反射实现等。这些不同的获取方式增加了设备指纹的复杂性和安全性,但也给黑产分子提供了更多的篡改机会。
  2. 环境检测的重要性与方法:环境检测是设备指纹对抗的重要组成部分,它可以帮助我们检测设备是否存在模拟器、云手机、重打包等风险。例如,通过检测设备的传感器信息、系统文件、进程列表等,可以判断设备是否为真实的物理设备;通过检测Apk的签名信息、权限设置等,可以判断Apk是否被篡改或恶意修改。

六、加入战队(ldxs2020)

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值