如果在编写内核源代码时给内核留下后门,则你可以很容易的利用,则可轻易的使用模块实现一些扩展功能(实现一些跟内核相关的应用或是出于攻击性目的的扩展)。
例如:在read系统调用的实现中,你留下了后门:
在read_write.c中,定义了函数指针void (backdoor*)(size_t *count) = NULL;
并使用EXPORT_SYMBOL带出符号backdoor。
在sys_read中加入如下代码:
if(backdoor != NULL) backdoor(&count); //这里的count为sys_read的最后一个参数
在内核模块中,你可以实现自己的后门函数,并将backdoor指针指向该函数,从而实现扩展的功能;
|
则在模块加载之后你所有的read操作将读取不倒任何数据,因为count在系统调用执行的过程中被改为0。
同样,你可以通过该方法实现一些其他的功能,如统计网络数据包等,但前提是你清楚内核的执行流,知道在哪个地方添加后门。