首页
社区
课程
招聘
[原创]内核改机[一]:目标判断
2022-6-18 11:00 9178

[原创]内核改机[一]:目标判断

2022-6-18 11:00
9178

改机作为一种攻击手段,存在着一劳永逸的优势,只要改的足够深,就极难应对。
接下来打算花时间慢慢把过去自己琢磨着玩的一些东西讲出来,都是一些没人讲过的东西,比较主流的东西就不出来丢人现眼了
这一篇先讲讲在内核里怎样进行目标判断

非侵入式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
bool isTargetByTask(struct task_struct* p)
{
    int time = 0;
    while(strcmp(p->comm,"init") != 0)
    {
        if(strstr(p->comm,"xxx") != 0)
        {
            return true;
        }
        if(time > 10)
        {
            return false;
        }
        time++;
        if(p->pid != p->tgid)
        {
            p = p->group_leader;
        }
        else
        {
            p = p->parent;
        }
    }
    return false;
}
 
bool isTargetByPid(int pid)
{
    struct task_struct* p;
    p = pid_task(find_get_pid(pid),PIDTYPE_PID);
    return isTargetByTask(p);
}
 
bool isTarget(void)
{
    return isTargetByTask(pid_task(find_vpid(task_tgid_vnr(current)),PIDTYPE_PID));
}

厂商可以故意制造孤儿进程,孤儿进程的ppid变成init,所以不能用ppid判断目标进程,而应使用tgid

缺点

内核内进程名最多15个字节,性能消耗相对高。
内核给进程生成动态资源时(比如/proc/xxx/maps)还没有给进程改名。

侵入式

  1. include/linux/sched.h中找到struct task_strcut,在末尾添加一个标志位,用于标识是否是目标进程
  2. kernel/fork.c中,复制一份自己的_do_fork(),在其执行完copy_process()后,把子进程的目标标志位置1
  3. 复制一份与fork一样的syscall,新增的syscall用于调用my_do_fork
  4. 在bionic依法复制clone和fork
  5. 在framework层里的zygote复制,在forkAndSpecialize里判断如果niceName是目标APP包名则使用定制的fork

    缺点

    理论上有可能会影响系统稳定性,这个取决于内核代码规范性,不规范就容易GG(我用了很久都没事)

非内核

c、c++代码和framework层就直接用syscall进内核判断就完事了。
service层的话mContext.getPackageManager().getNameForUid(Binder.getCallingUid())即可获取包名,即可根据包名判断是否为目标进程

未完成目录:

文件权限、读取、隐藏、存在、重定向
文件属性
基于真实内存伪造maps
修改网卡mac等相关信息
修改已启动时间
使用hash管理读入的需要使用的信息
rsa验证信息
暂时能想到的就这么多,其他的别人讲的少的东西都挺零零散散的,或者解决起来很简单一两句话搞定,到时候一篇文章搞定

 

有兴趣的欢迎探讨


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2022-6-19 12:38 被又一个小菜鸟编辑 ,原因:
收藏
点赞5
打赏
分享
最新回复 (4)
雪    币: 4
活跃值: (479)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Gordonhat 2022-6-20 16:46
2
0

感谢分享

最后于 2022-6-20 16:46 被Gordonhat编辑 ,原因:
雪    币: 251
活跃值: (1105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cs1001 2022-8-12 10:09
3
0
牛,学习
雪    币: 38
活跃值: (614)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cnhuaWu 2022-10-21 17:26
4
0
netlink读取mac地址,这个正头疼呢
雪    币: 1
活跃值: (150)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
暖心系 2023-4-1 22:31
5
0
老板接开发吗?可否留个联系方式
游客
登录 | 注册 方可回帖
返回