我的一亩三分地 我就喜欢!
13fen  设为主页
 收藏本站
 
当前位置: > 一亩三分地:首页 > 网络学院 > 网络编程 > ASP专区 > Asp客户端/系统 > LIDS精通与进阶(中)
热门文章排行
热门文章排行 手推车”功能的实现(10-07)
八大法则防范ASP网站漏洞(10-23)
ASP教程十一、调试ASP脚本(10-23)
在JSP中访问数据库大全(10-23)
虚机服务中常见Asp.Net低级错误一览(03-21)
精采文章排行
精采文章排行 ASP.NET实现抓取网页中的链接(11-15)
ASP连接数据库的11种方法(11-10)
如何动态创建网页的RSS内容摘要(11-10)
ASP网站漏洞及入侵防范方法(11-10)
ASP自定义函数:对字符串正则替换(11-10)
技术专题推荐
网管论坛交流
 

LIDS精通与进阶(中) 

作者:佚名   来源:一亩三分地   点击:   日期:2007-03-23

作者:chaobowang@sina.com


四、保护重要进程

    进程是操作系统的动态入口。内核里有两个特殊进程,进程ID 0 (swapd) 和进程ID 1(init)。Init进程是在系统启动的时候所有进程的父进程。

    1、不可杀死的进程。

    就象你可以看到是否有人要夺得root特权一样,我们可以很容易的杀死那些该内核发送特别信号的进程。为了杀死一个进程,你必须得到进程的ID,然后用kill命令来杀死它。

    系统杀死进程的调用是kill,是在内核里的sys_kill()命令里的调用。

    让我们看看LIDS的保护代码

    在/usr/src/linux/kernel/signal.c里

    asmlinkage int

    sys_kill(int pid, int sig)

    {

            struct siginfo info;


            #ifdef CONFIG_LIDS_INIT_CHILDREN_LOCK pid_t this_pid;

            int i;

            #ifdef CONFIG_LIDS_ALLOW_KILL_INIT_CHILDREN

            if (!(current->flags & PF_KILLINITC))

            #endif

            if (lids_load && lids_local_load && LIDS_FISSET(lids_flags,LIDS_FLAGS_LOCK_INIT_CHILDREN)) {

                    this_pid = pid>0?pid:-pid;

                    for(i=0;i
        if( this_pid == lids_protected_pid[i]) {

                lids_security_alert("Try to kill pid=%d,sig=%dn",pid,sig);

            return -EPERM;

                                }

                    }

            }

        #endif

        ...

        }

    你可以在内核里看到两个标签,,CONFIG_LIDS_INIT_CHILDREN_LOCK 和CONFIG_LIDS_ALLOW_KILL_INIT_CHILDREN.

    在CONFIG_LIDS_INIT_CHILDREN_LOCK的开启状态,LIDS能保护初使的运行程序。如,如果你在系统里运行inetd程序,你可以在隐藏内核前运行它,然后,你还可以杀死它。但是一些人如果telnet到你的机器,inetd就会创造子进程来为用户服务,这个子进程不会被LIDS保护,因为用户在任何时候退出和杀死程序。

    2、隐藏进程

    另外一个保护进程的方法就是隐藏进程。当一个黑客危机你的系统。他会登陆,然后会看看有没有一些已知的进程在监视它。然后他就杀死它。如果你隐藏了这个功能的进程,黑客就不会知道进程的所有情况并且你可以记录他在你系统上做的任何事情。

    如何隐藏进程

    为了隐藏进程,你必须在配置内核的时候提供一个完全的路径名。

    当内核启动的时候,LIDS会访问文件结点到一个叫proc_to_hide[]的结构里。

    在include/linux/sched.h里

    #ifdef CONFIG_LIDS_HIDE_PROC

    #define PF_HIDDEN 0x04000000 /* Hidden process */

    #endif

    /* in fs/lids.c */

    #ifdef CONFIG_LIDS_HIDE_PROC

    struct allowed_ino proc_to_hide[LIDS_MAX_ALLOWED];

    int last_hide=0;

    #endif

    ....

    /* in fs/lids.c , init_vfs_security(),

    fill up the hidden process in proc_to_hide[]

    */

    #ifdef CONFIG_LIDS_HIDE_PROC

    lids_fill_table(proc_to_hide,&last_hide,LIDS_MAX_ALLOWED,CONFIG_LIDS_HIDDEN_PROC_PATH);

    #endif

    PF_HIDDEN是否用户可以用显示进程的命令(如“ps –a”)来显示和检查进程,如果一个进程被LIDS隐藏,当他执行的时候,进程就会得到一个PF_HIDDEN的属性。然后,当系统输出系统进程信息到用户的时候,它就会可以检查当前输出进程是否有PF_HIDDEN标志。如果发现了,它就不会输出这个进程的信息。

    在in fs/exec.c

    int do_execve(char * filename, char ** argv, char ** envp, struct pt_regs * regs)

    {

    ...

    if (retval >= 0) {

            #ifdef CONFIG_LIDS_HIDE_PROC

            if (lids_search_proc_to_hide(dentry->d_inode))

                        current->flags |= PF_HIDDEN;

            ...

    因为每一个linux的进程都有一个在/proc文件系统的入口,我们为了隐藏进程也需要修改proc的文件入口。

    在fs/proc/root.c

 

    static struct dentry *proc_root_lookup(struct inode * dir, struct dentry * dentry)

    {

    ...

    inode = NULL;

    #ifdef CONFIG_LIDS_HIDE_PROC

        if ( pid && p && (! ((p->flags & PF_HIDDEN) && lids_load && lids_local_load)) ) {

    #else

        if (pid && p) {

    #endif

    unsigned long ino = (pid >> 16) + PROC_PID_INO;

    inode = proc_get_inode(dir->i_sb, ino, &proc_pid);

    if (!inode)

    return ERR_PTR(-EINVAL);

    inode->i_flags|=S_IMMUTABLE;

    }

    ...

    }

    然后如果进程被PF_HIDDEN标记,它就不会在proc文件系统里显示。


五、密封内核

    我们需要在系统启动的时候做一些必要的操作,但是我们也需要在系统运行的时候保护它们。


    例如,我们需要象内核里插入一些需要的模块,但是我们不希望在系统运行的时候插入任何模块,因为那样会十分危险。如何解决这个问题呢?这里就有一些密封的方法。我们可以在系统启动的时候做我们任何想做的事情,然后我们就密封内核。然后,我们就不能做那些以前在没有密封的时候可以做的事情。用密封的方法,我们可以用模块来解决问题,我们可以在密封前向内核里插入我们想要的模块,在密封后我们就不可以在内核里插入或是删除任何模块。 <

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·ASP中巧用Response属性 ·第六课:ASP脚本循环语句
·在 Web 页上使用条件数值格式 ·连接数据库查询手册(不仅仅适用于asp)
·警惕"给你的FileSystemObject对象加把锁" ·用ASP做全文检索

   文章评论:(条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:一分  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。