Linux内核即时入侵检测安全增强-后语

王朝system·作者佚名  2006-11-24
宽屏版  字体: |||超大  

五.后语

冰块

这篇文章的整个补丁代码我没有找到,可能是因为这个人关于这个东西的开发已经放弃了吧。呵呵,如果谁能找到。请告诉大家,原来他们提供的url是:

www.iac.rm.cnr.it/tecno/software/indexs.html

这篇文章和以前发表的LIDS文章都是关于内核模块级的系统安全的。这篇主要是对缓冲区溢出的漏洞进行防范。虽然没有代码的原形,但是它给出的几个代码事例能够帮助我们更好的理解Linux的内核模块如何截获系统调用,或是如何对进程运行权分析的实现。对于我们理解Linux和其他操作系统的内核有一定的帮助。希望大家能通过这篇文章能多提高点理解认识,对以后自己开发系统安全软件能有一定理论上的帮助作用。下面是check_rootproc函数的代码:

/*check_rootproc.c*/

int check_rootproc(struct inode *ino){

int cont=0,iproc=0,error=0;

suidp_t * suidproc;

efile_t f;

suidp_t p;

if ((IS_SETUID_TO_ROOT(current))||(IS_A_ROOT_DAEMON(current))) {

for (;cont

if ((permitted.lst[cont].efid.device==ino->i_dev&&

permitted.lst[cont].efid.inode==ino->i_ino)){

if ((permitted.lst[cont].efid.size==ino->i_size)&&

permitted.lst[cont].efid.modif==ino->i_mtime)){

suidproc=permitted.lst[cont].processes;

for(iproc=1;iproc<=permitted.lst[cont].proc_nr;iproc++){

if(!strcmp(suidproc->suidp_id.comm,current->comm)){

suidproc->suidp_id.count++;

return PSA;

}

if (iproc

suidproc=suidproc->next;

}

}

}else{

error=EFNA;

goto file_exe_unauthorized;

}

}

}

error=EXENA;/*EXE is not in the database*/

goto file_exe_unauthorized;

}

return PNS;/*the process is not setuid to root or root daemon*/

file_exe_unauthorized:

f.efid.device=ino->i_dev;

f.efid.inode=ino->i_ino;

f.efid.size=ino->i_size;

f.efid.modif=ino->i_mtime;

strncpy(p.suidp_id.comm,current->comm,

sizeof(p.suidp_id.comm));

p.suidp_id.count=1;

do{

while(writer_pid!=0){

cli();/*interrupt disabled*/

if (writer_pid!=0)

interruptible_sleep_on(&pid_queue);

sti();

}

}

while(!atomic_access(&writer_pid,current->pid));

/*start of critical section*/

do_setuid_put(&(f.efid),&(p.suidp_id),FAILURE);

writer_pid=0;/*end of critical section*/

atomic_access(&writer_pid,0);/*release of the lock*/

return error;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有