1. 当“拿到Root”只是开始

在前四章,我们花了大量精力“攻进去”(Get in)。但在真实的红队演练(Red Team)或高级持续性威胁(APT)场景中,拿到权限只是第一步。

新的目标

  1. 持久化(Persistence):手机重启后,我还能控制它吗?

  2. 隐身(Stealth):如何不被用户发现(电池消耗异常、流量激增、弹窗)?

  3. 情报窃取(Exfiltration):如何把通讯录、短信、相册悄无声息地传走?

本章将带你站在攻击者的“售后阶段”,同时也站在防御者的“救火现场”。


2. 持久化:如何“赖着不走”

安卓系统有一个特点:App进程容易被系统杀死,且重启后不一定自动运行。作为攻击者,我们需要解决这两个问题。

2.1 开机自启(Broadcast Receiver)

这是最基础的手段。

  • 原理:注册一个广播接收器,监听系统发出的 BOOT_COMPLETED(开机完成)广播。

  • 代码逻辑

    <receiver android:name=".BootReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>
  • 对抗:现代安卓系统(Android 8+)限制了大部分后台广播,且用户可以在设置里禁止App自启。

2.2 前台服务(Foreground Service)

这是目前最主流的“保活”手段。

  • 原理:安卓系统不会轻易杀死正在前台运行的服务(Service)。

  • 攻击手法:启动一个前台服务,并在通知栏显示一个伪造的通知(如“正在同步数据”、“系统更新中”),让用户以为这是系统行为。

    startForeground(NOTIFICATION_ID, notification);
  • 效果:只要用户不清掉通知,App 就不会死。

2.3 双进程守护(Native层)

  • 原理:用 C 语言(NDK)写一个守护进程(Daemon)。当主App被杀死时,守护进程立刻把它拉起来。

  • Root加持:如果有 Root 权限,可以直接将恶意程序放入 /system/bin//system/xbin/,变成系统级服务,用户根本卸载不了。


3. 隐身术:清理痕迹与反取证

高级攻击者最怕的不是攻不进去,而是留下证据

3.1 日志清理

安卓系统会记录一切操作。

  • Logcat:应用崩溃日志、调试信息。

  • DropBox:系统错误报告。

  • 清理命令(需Root)

    rm -rf /data/system/dropbox/*
    rm -rf /data/log/*

3.2 隐藏图标

一个没有图标的App,用户很难在桌面上发现它。

  • 手法:在 AndroidManifest.xml中移除 <category android:name="android.intent.category.LAUNCHER"/>

  • 触发方式:通过短信指令(收到特定短信“#START#”则启动服务)或服务器推送。

3.3 流量伪装

如果恶意软件每分钟向服务器发送1MB数据,流量监控会立刻报警。

  • 对抗

    1. 分时段传输:只在深夜(2:00 - 5:00)传输数据。

    2. 域名伪装:使用看起来像“谷歌服务”或“系统更新”的域名(如 gms-update.com)。

    3. 协议伪装:使用 HTTPS(443端口),混入正常流量中。


4. 实战:构建一个“间谍软件”的简化版

为了让你理解上述技术的结合,我们来构思一个简单的后渗透模块。

场景:已获取 Root 权限,植入了持久化后门。

功能设计

  1. 监听短信:Hook 系统的短信数据库(content://sms/inbox),实时读取验证码(这是黑产最常用的手段,用于盗刷资金)。

  2. 定位追踪:调用 LocationManager,每隔30分钟获取一次 GPS 坐标,发送给 C2 服务器。

  3. 屏幕截图:利用 Root 权限调用 screencap命令,截取用户当前屏幕(获取聊天记录或支付界面)。

防御视角

作为安全软件(杀毒软件/EDR),如何发现它?

  • 行为检测:一个没有界面的App,却在后台频繁调用 GPS 和 截屏 API。

  • 权限异常:一个普通App申请了 READ_LOGS权限(通常只有系统App才有)。


5. 防御方:如何发现“入侵痕迹”

如果你是企业的蓝队成员,员工手机疑似被植入后门,你应该检查什么?

5.1 检查“正在运行的服务”

adb shell dumpsys activity services

寻找可疑的、没有应用名称的服务(如 com.android.update.service)。

5.2 检查“开机启动项”

adb shell pm list packages -u  # 列出所有包
adb shell dumpsys package <package_name> | grep BOOT_COMPLETED

5.3 检查“网络出口”

即使流量是加密的,你也能看到连接了谁

  • 使用 netstat -an查看是否有连接到境外陌生IP的常驻连接。

  • 使用抓包工具查看是否有不明域名的请求。

5.4 系统完整性校验

  • 检查 Bootloader 状态fastboot oem device-info。如果是 unlocked,说明手机被解锁过,可能被刷入过恶意 Recovery。

  • 检查 Magisk:查看 /sbin/.magisk目录是否存在。


6. 终极防御:容器化与零信任

对于企业级用户,传统的杀毒软件已经不够了。

  1. 工作资料(Work Profile)

    安卓自带的 Android Enterprise​ 功能。将工作App(邮件、钉钉)和个人App完全隔离。即使个人App被Root了,工作资料里的数据依然是加密隔离的。

  2. 移动设备管理(MDM)

    企业可以控制员工的手机。禁止Root设备访问内网、禁止安装未知来源应用、远程擦除数据。

  3. 硬件级安全(TEE)

    将最核心的数据(如银行卡号、人脸数据)存储在 TrustZone(可信执行环境)中。这是一块独立于安卓系统的硬件区域,哪怕你把手机Root了,也读不到里面的数据(这也是为什么微信支付指纹验证很难被Hook的原因)。


7. 结语:攻防的尽头是“人”

至此,我们的《渗透安卓设备系列》从应用层(代码、Hook)打到了系统层(Root、内核),最后落到了对抗层(隐身、取证)。

你会发现一个规律:

  • 攻击者的目标:越来越隐蔽,越来越像“系统本身”。

  • 防御者的目标:越来越底层,越来越依赖“硬件隔离”。

最后的忠告

技术是中性的。本系列文章旨在帮助开发者修补漏洞,帮助安全从业者建立防御体系。请务必在法律授权的范围内进行测试。未经授权入侵他人设备,不仅是技术问题,更是刑事犯罪。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐