第五章:后渗透与防御对抗 —— 隐身、持久化与取证
拿到 Root 后,如何长期控制设备而不被发现?如何清理痕迹?以及,作为蓝队(防御方),如何在服务器日志和手机行为中发现这些入侵痕迹?
1. 当“拿到Root”只是开始
在前四章,我们花了大量精力“攻进去”(Get in)。但在真实的红队演练(Red Team)或高级持续性威胁(APT)场景中,拿到权限只是第一步。
新的目标:
-
持久化(Persistence):手机重启后,我还能控制它吗?
-
隐身(Stealth):如何不被用户发现(电池消耗异常、流量激增、弹窗)?
-
情报窃取(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数据,流量监控会立刻报警。
-
对抗:
-
分时段传输:只在深夜(2:00 - 5:00)传输数据。
-
域名伪装:使用看起来像“谷歌服务”或“系统更新”的域名(如
gms-update.com)。 -
协议伪装:使用 HTTPS(443端口),混入正常流量中。
-
4. 实战:构建一个“间谍软件”的简化版
为了让你理解上述技术的结合,我们来构思一个简单的后渗透模块。
场景:已获取 Root 权限,植入了持久化后门。
功能设计:
-
监听短信:Hook 系统的短信数据库(
content://sms/inbox),实时读取验证码(这是黑产最常用的手段,用于盗刷资金)。 -
定位追踪:调用
LocationManager,每隔30分钟获取一次 GPS 坐标,发送给 C2 服务器。 -
屏幕截图:利用 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. 终极防御:容器化与零信任
对于企业级用户,传统的杀毒软件已经不够了。
-
工作资料(Work Profile):
安卓自带的 Android Enterprise 功能。将工作App(邮件、钉钉)和个人App完全隔离。即使个人App被Root了,工作资料里的数据依然是加密隔离的。
-
移动设备管理(MDM):
企业可以控制员工的手机。禁止Root设备访问内网、禁止安装未知来源应用、远程擦除数据。
-
硬件级安全(TEE):
将最核心的数据(如银行卡号、人脸数据)存储在 TrustZone(可信执行环境)中。这是一块独立于安卓系统的硬件区域,哪怕你把手机Root了,也读不到里面的数据(这也是为什么微信支付指纹验证很难被Hook的原因)。
7. 结语:攻防的尽头是“人”
至此,我们的《渗透安卓设备系列》从应用层(代码、Hook)打到了系统层(Root、内核),最后落到了对抗层(隐身、取证)。
你会发现一个规律:
-
攻击者的目标:越来越隐蔽,越来越像“系统本身”。
-
防御者的目标:越来越底层,越来越依赖“硬件隔离”。
最后的忠告:
技术是中性的。本系列文章旨在帮助开发者修补漏洞,帮助安全从业者建立防御体系。请务必在法律授权的范围内进行测试。未经授权入侵他人设备,不仅是技术问题,更是刑事犯罪。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)