文章总结: 本文提出利用侧信道时间差检测APatchRoot的方案。针对APatch在内核Hooktruncate系统调用的机制,设计程序绑定CPU核心并对比触发后门深层代码与浅层代码的执行耗时。APatch环境下时间差异显著而正常环境下差异微小,据此可有效识别设备Root状态。 综合评分: 92 文章分类: 移动安全,安全工具,逆向分析,恶意软件
侧信道检测APatch Root
原创
ru1n ru1n
网络空间威胁观察
2026年1月20日 22:48 上海
侧信道检测APatch Root
摘要
APatch在内核中HOOK了truncate(45号)系统调用,作为应用层请求ROOT权限的接口。如下是相关代码,它的含义如下:
- • 挑选truncate作为后门调用, 安装HOOK
- • 取调用的key与cmd参数, 如果参数校验通过, 进入后门调用, 否则进入正常调用
- 后门系统调用代码
由此可以得出检验方法:
- 1. 设置key, cmd参数, 尽可能多的触发后门调用中的代码, 计算执行时间为T1
- 2. 设置key, cmd参数, 尽可能少的触发后门调用中的代码, 计算执行时间为T2
- 3. 在正常环境中, T1与T2应该接近, 因为都会触发truncate的参数检验提前返回
- 4. 在APatch环境中, T1与T2应该有较大相差值
实现细节
检测代码如下, 基本逻辑如下:
- • 要将执行线程绑定到固定CPU核心上, 避免线程切换CPU核心产生影响
- • 设置参数1为su, 参数2在1000-1005执行若干次, 计算时间T1
- • 设置参数1为su, 参数2在994-999执行若干次, 计算时间T2
- • 在APatch环境中, T1与T2存在较大差异, 因为T1会执行更多后门代码, T2在后门代码开头即会退出
- • 在正常环境中, T1与T2基本无差异, 因为会在truncate函数入口处由于su文件不存在退出
#define _GNU_SOURCE
#include <sched.h>
#include <stdio.h>
#include <unistd.h>
static inline uint64_t get_ticks() {
uint64_t v;
asm volatile("isb; mrs %0, cntvct_el0; isb" : "=r"(v) : : "memory");
return v;
}
void bind_to_cpu(int cpu_id) {
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(cpu_id, &cpuset);
if (sched_setaffinity(0, sizeof(cpu_set_t), &cpuset) == -1) {
perror("sched_setaffinity");
} else {
printf("Thread successfully bound to CPU %d\n", cpu_id);
}
}
int get_current_cpu() {
int cpu = sched_getcpu();
if (cpu == -1) {
perror("sched_getcpu");
return -1;
}
return cpu;
}
uint64_t runner(int cmd) {
char buffer[3] = "su";
uint64_t t1 = get_ticks();
for (int i = 0; i < 10000; i++) {
syscall(45, buffer, cmd);
}
uint64_t t2 = get_ticks();
return t2 - t1;
}
int main(int argc, char *argv[]) {
// 绑定cpu核心, 避免切换cpu核心对结果的影响
bind_to_cpu(0);
uint64_t d1 = 0, d2 = 0;
for (int i = 0; i < 5; i++) {
d2 += runner(0x999 - i);
}
for (int i = 0; i < 5; i++) {
d1 += runner(0x1000 + i);
}
printf("Duration for cmd 0x1000: %lu tk\n", d1);
printf("Duration for cmd 0x500 : %lu tk\n", d2);
uint64_t diff = d1 > d2 ? d1 - d2 : d2 - d1;
printf("Delta percentage: %.2f%%\n",
(double)diff / ((double)(d1 + d2) / 2) * 100.0);
return 0;
}
如下图所示, APatch环境中T1 T2差异较明显, 正常环境中T1 T2差异不明显
APatch环境
正常环境
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:网络空间威胁观察 ru1n ru1n《侧信道检测APatch Root》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论