科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Linux内核入侵检测安全增强实现(下) (3)

Linux内核入侵检测安全增强实现(下) (3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

系统管理员(root用户)可以通过一些新的命令来管理访问控制数据库汇写到sys_setuid_aclm系统调用中,它叫做aclmng,它有以下的功能选项

作者:赛迪网技术社区 来源:赛迪网技术社区 2007年10月28日

关键字: 安全 入侵 内核 Linux

  • 评论
  • 分享微博
  • 分享邮件

系统管理员(root用户)可以通过一些新的命令来管理访问控制数据库汇写到sys_setuid_aclm系统调用中,它叫做aclmng,它有以下的功能选项:

-l 列出保存在内核区域的访问控制数据库的内容。

-L 从文件/etc/bop/acd中引导数据到访问控制数据库,大多数都用在启动时刻。

-w从文件/etc/bop/acd中写数据到访问控制数据库,大多数都用在系统关闭的时刻。

-h 显示功能信息;efault 如果没有选项,默认执行-l选项。

五.后语

这篇文章的整个补丁代码我没有找到,可能是因为这个人关于这个东西的开发已经放弃了吧。呵呵,如果谁能找到。这篇文章和以前发表的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; 


   }
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章