内核后门

 

 

如果在编写内核源代码时给内核留下后门,则你可以很容易的利用,则可轻易的使用模块实现一些扩展功能(实现一些跟内核相关的应用或是出于攻击性目的的扩展)。

例如:在read系统调用的实现中,你留下了后门:

read_write.c中,定义了函数指针void (backdoor*)(size_t *count) = NULL;

并使用EXPORT_SYMBOL带出符号backdoor

sys_read中加入如下代码:

if(backdoor != NULL)
         backdoor(&count); //
这里的countsys_read的最后一个参数

在内核模块中,你可以实现自己的后门函数,并将backdoor指针指向该函数,从而实现扩展的功能;

 

 

extern void (backdoor*)(size_t *count);
void my_backdoor(size_t *count)
{
    *count = 0;
}

int mybackdoor_init()
{
    backdoor = my_backdoor;
    return 0;
}

void mybackdoor_exit()
{
    backdoor = NULL;
}

 

则在模块加载之后你所有的read操作将读取不倒任何数据,因为count在系统调用执行的过程中被改为0

同样,你可以通过该方法实现一些其他的功能,如统计网络数据包等,但前提是你清楚内核的执行流,知道在哪个地方添加后门。

 

 
posted @ 2013-04-19 14:07  ydzhang  阅读(198)  评论(0编辑  收藏  举报