SakitinSU 内核提权部分讲解
1. 概述
SakitinSU 内核部分 是一个针对 Android 内核的提权与 Selinux 处理的部分:
- root 权限提升:自动将指定进程提权为 root。
- 能力管理绕过:通过 hook 能力检查函数,绕过 Linux 能力限制。
- SELinux 绕过:hook SELinux 访问控制,允许敏感操作。
- 动态进程监控:监控
su执行自动触发提权操作。
2. 技术架构与核心机制
2.1 关键 Hook 点与探针部署
| 探针类型 | Hook 函数 | 功能说明 |
|---|---|---|
| kprobe | sys_execve (按情况) | 监控敏感命令执行,触发提权 |
| kretprobe | cap_capable | 绕过 Linux 能力检查 |
| kretprobe | avc_denied | 绕过 SELinux 访问控制 |
探针注册流程
flowchart TD
A[模块加载] --> B[注册 execve kprobe]
B --> C[注册 cap_capable kretprobe]
C --> D[注册 avc_denied kretprobe]
D --> E[监控/劫持敏感操作]
2.2 核心提权逻辑
部分代码片段
struct cred *cred = (struct cred *)__task_cred(current);
// 1. 提权为 root
cred->uid = cred->euid = cred->suid = cred->fsuid = GLOBAL_ROOT_UID;
cred->gid = cred->egid = cred->sgid = cred->fsgid = GLOBAL_ROOT_GID;
cred->securebits = 0;
// 2. 赋予所有能力
memset(&cred->cap_inheritable, 0xff, sizeof(kernel_cap_t));
memset(&cred->cap_permitted, 0xff, sizeof(kernel_cap_t));
memset(&cred->cap_effective, 0xff, sizeof(kernel_cap_t));
memset(&cred->cap_bset, 0xff, sizeof(kernel_cap_t));
memset(&cred->cap_ambient, 0xff, sizeof(kernel_cap_t));
// 3. 关闭 seccomp (部分需要依情况)