当前位置:Linux教程 - Linux - Linux内核即时入侵检测安全增强-后语

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

五.后语
冰块


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


  }