Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4066037
  • 博文数量: 251
  • 博客积分: 11197
  • 博客等级: 上将
  • 技术积分: 6862
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-05 14:41
个人简介

@HUST张友东 work@taobao zyd_com@126.com

文章分类

全部博文(251)

文章存档

2014年(10)

2013年(20)

2012年(22)

2011年(74)

2010年(98)

2009年(27)

分类: LINUX

2010-08-22 18:48:36

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

例如:在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

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


阅读(2720) | 评论(1) | 转发(2) |
给主人留下些什么吧!~~

omycle2010-08-22 21:13:37

呵,回调函数--钩子