Linux可卸载内核模块详解与实战

需积分: 26 3 下载量 113 浏览量 更新于2024-09-08 收藏 45KB TXT 举报
"这篇文章是关于Linux可卸载内核模块(LKMs)的全面指南,适合黑客、病毒编码者和系统管理员。它介绍了如何在Linux内核中动态加载和卸载模块,以及如何利用LKMs进行系统扩展和调试。本文档可能包含一些过时的信息,如针对Linux 2.0.x和2.2.x版本的内容,但对于理解LKMs的基本概念仍然有价值。" 在Linux系统中,可卸载内核模块(LKMs)是实现系统动态扩展的关键技术。它们允许用户在不重新编译整个内核的情况下,添加或移除特定的功能。这种灵活性对于开发和调试新功能,或者为特定硬件提供驱动程序至关重要。 创建一个LKMs通常包括以下几个步骤: 1. **定义模块入口点**:模块的生命周期由`init_module`和`cleanup_module`两个函数控制。`init_module`是模块启动时执行的代码,用于初始化模块的功能;`cleanup_module`则在模块卸载时运行,负责清理资源。 2. **模块编译**:使用`insmod`命令将编译好的模块对象文件(如`.o`)加载到内核中。`create_module`函数创建内核中的模块实例。 3. **获取符号信息**:为了使模块能够与内核的其他部分交互,需要使用`get_kernel_syms`获取内核的符号表,这样模块可以调用内核中的函数。 4. **加载和卸载**:使用`insmod`加载模块,`rmmod`卸载模块。这些工具提供了运行时向内核添加或删除功能的能力。 5. **内核接口**:LKMs通过特定的内核API与核心代码通信,如请求内存、注册设备驱动、处理中断等。 然而,随着Linux内核版本的发展,一些早期的机制已被废弃或替换。例如,较新的内核版本可能不再使用`get_kernel_syms`,而是采用更安全的`kallsyms`接口来访问内核符号。 对于黑客和系统管理员来说,掌握LKMs的创建和管理能力意味着可以更好地定制系统,增强安全性,或者对内核进行故障排查。但同时,这需要深入理解内核源码和相关编程知识,因为错误的模块可能导致系统崩溃或安全漏洞。 此外,本文档提到了使用LKMs进行实时内核修补(Runtime Kernel Patching),这是一种在内核运行时应用补丁的技术,尽管这种方法在某些场景下可能有其优势,但通常被看作是风险较高的操作,除非对内核有深入理解,否则应谨慎使用。 Linux可卸载内核模块是Linux内核灵活性的一个重要体现,它使得开发者可以快速响应系统需求变化,但同时也要求用户具备一定的内核编程知识和风险意识。随着内核版本的更新,学习最新的内核开发实践和技术是非常必要的。
2008-01-20 上传
第一部分 基础知识
1.1 什么是LKMs
1.2 什么是系统调用
1.3 什么是内核符号表(Kernel-Symbol-Table)
1.4 如何实现从用户空间到内核空间的转换
1.5 使用用户空间函数的方法
1.6 常用内核空间函数列表
1.7 什么是内核守护进程
1.8 创建你自己的设备

第二部分 渐入佳境
2.1 如何截获系统调用
2.2 一些有趣的系统调用
2.2.1 发现有趣的系统调用(strace方法)
2.3 迷惑内核的系统表
2.4 和文件系统有关的攻击
2.4.1 如何隐藏文件
2.4.2 如何隐藏文件的内容(完全的)
2.4.3 如何隐藏文件的某一部分(一个实现原型)
2.4.4 如何重新定向或者监视文件操作
2.4.5 如何避免任何文件权限问题
2.4.6 如何使的一个有入侵工具的目录不可存取
2.4.7 如何改变CHROOT环境
2.5 和进程有关的入侵
2.5.1 如何隐藏任何进程
2.5.2 如果改变文件的执行结果
2.6 和网络(Socket)有关的入侵
2.6.1 如果控制Socket操作
2.7 TTY纪录的方法
2.8 用LKMs写病毒
2.8.1 如何让LKM病毒感染任何文件(不仅仅是模块)
2.8.2 如何让LKM病毒帮助我们进入系统
2.9 使我们的LKM不可见,而且不可卸载
2.10 其他的入侵kerneld进程的方法
2.11 如何检查当前的我们的LKM

第三部分 解决方案(给系统管理员)
3.1 LKM检测的理论和想法
3.1.1 一个使用的检测器的原形
3.1.2 一个密码保护的create_module(...)的例子
3.2 防止LKM传染者的方法
3.3 使你的程序不可以被跟踪(理论)
3.3.1 一个反跟踪的实用例子
3.4 使用LKMs来防护你的linux内核
3.4.1 为什么我们必须允许任何一个程序都拥有可执行的权限
3.4.2 链接的补丁
3.4.3 /proc权限的补丁
3.4.4 安全级别的补丁
3.4.5 底层磁盘补丁

第四部分 一些更好的想法(给hacker的)
4.1 击败系统管理员的LKM的方法
4.2 修补整个内核-或者创建Hacker-OS
4.2.1 如何在/dev/kmem中找到内核符号表
4.2.2 新的不需要内核支持的'insmod'
4.3 最后的话

第五部分 最近的一些东西:2.2.x版本的内核
5.1 对于LKM作者来说,一些主要的不同点

第六部分 最后的话
6.1 LKM传奇以及如何使得一个系统即好用又安全
6.2 一些资源链接