玩转freebsd内核模块

2009-05-13 09:20:52来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

玩转freebsd内核模块 原文 :   04/08/2001
作者 : Stephanie Wehner  
主页 :www.r4k.net
翻译整理 : wujianqiangis@mail.china.com
注:文章很老的,linux大家都熟了,相对来说bsd少了很多,但是原理还是一样的,这篇文章还是相当不错的,有助于
kernel hacking in freebsd :) 献给我即将开始的4年级的最后几门考试.....
文中提到的Curious Yellow可以在xfocus找到。
1. 介绍
1.1. 内核模块
1.2. 一些有用的函数
2. 方法
2.1. 替换函数指针
2.1.2. 系统调用
2.1.3. 其它的表
2.1.4. 单一的函数指针
2.2. 修改内核空间的队列
2.3. 读写内核空间
2.3.1. 查找符号的地址
2.3.2. 读数据
2.3.3. 修改内核数据
3. 应用
3.1. 隐藏并重定向文件
3.2. 隐藏进程
3.3. 隐藏网络连接
3.4. 隐藏防火墙规则
3.5. 触发器
3.6. 隐藏模块
3.7. 其它的应用
4. 内核补丁
4.1 介绍
4.2 插入跳转指令
4.3 替换内核代码
5. 越过重启
6. 实战
7. 保护自己:猫和老鼠的游戏
7.1. 检查符号表
7.2. 构件一个陷阱模块
7.3. 重新直接得到数据
7.4. 注意事项
8. 结论
9. 代码
10. 参考
11. 感谢
---------------------------------------------
1. 介绍
首先介绍内核模块的概念,还有系统调用的概念,说明的一点就是freebsd安全级别问题,通常在2级就不可以加载模块了
可以用sysctl 调整设置或者在/etc/rc.conf中增加如下条目在启动时调整:
kern_securelevel_enable="YES"
kern_securelevel="2"
本文only用来教育目的,:)所有涉及的代码都可以在Curious Yellow (CY)中找到.
1.2. 内核模块
请参考 scz@nsfocus 前辈翻译的,如果你对linux的lkm了解,这个很好理解。在/usr/share/examples/kld/ 有简单的例子。
1.2 一些有用的的函数
这里给出一些有用的函数,通常在系统调用中用到copyin/copyout/copyinstr/copyoutstr 这几个函数可以用来从用户空间得到
连续的大块数据,manpage copy(9)可以得到更多了解,在KLD tutorial也可以找到
下面是个小例子来展示copyin的用法,我们构造了一个带有一个字符串指针做参数的系统调用,通过copyin把字符串从用户空间移动
到内核空间来
struct example_call_args {
    char *buffer;
};
int
example_call(struct proc *p, struct example_call_args *uap)
{
    int error;
    char kernel_buffer_copy[BUFSIZE];
    /* copy in the user data */
    error = copyin(uap->buffer, &kernel_buffer_copy, BUFSIZE);
    [...]
}
fetch/store
这两个函数用来得到比较小块的数据,小到字节或者字长的数据
spl..
这个函数用来调整中断优先级,可以用来阻止某些中断处理程序的执行,下面的例子中当中断处理函数指针icmp_input修改时,因为
它通常要经过一些时时间,所以我们要防止对这个中断的处理。
2. 方法
这节列出一些常用的方法,将在后面的具体技术中使用,比如隐藏进程,网络连接。当然这些方法也可以用来实现其他的..
2.1. 修改函数指针
最古老也最经常用的方法,修改函数指针,用来指向你的函数,或者通过改写/dev/kmem达到相同的目的。(下面)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:2.7 Device

下一篇:Xft和fontconfig的体系结构及用户指南