黑客的聪明并不只是在于他们知道如何去入侵服务器,还在于他们知道如何去伪装自己的攻击。恶意的攻击者会使用多种逃避的手段来让自己不会被检测到,所以作为系统管理员,也应当了解这些手段以应付可能发生的攻击。
这篇文章的主要目的不是揭示黑客新的攻击手法,而是对那些黑客所用到的逃避检测的手法以及他们可能留下的证据做描述。这些手段的欺骗性很大,所以想检测到它们也更加的困难。
??网络服务器
我们的实验环境使用两种最常用的网络服务器,Apache和微软的Internet Information Server(IIS)。我们在Red Hat Linux上运行Apache 1.3.9,在Windows NT 4.0上运行IIS 4.0。并且两种都采用普通和允许SSL的版本,所以我们可以对加密和未加密的服务器的攻击做测试。
??16进制编码
一种最简单的将攻击伪装的手段就是修改URL请求。作为管理员,我们一般会在日志文件中查找某些字符串,或是一些普通文本的字符集。例如我们在请求中查找匹配已知漏洞的字符串。例如,我们在我们的IIS服务器中发现了如下的字符串,我们就知道有人正在查找是否有IIS中可以远程利用的MDAC漏洞:
??06:45:25 10.0.2.79 GET /msadc/ 302
??要知道攻击者是如何躲过这种匹配检测的,请参考以下作为恶意攻击者策略一部分的请求。要确定msadc目录是否存在,攻击者可能键入以下内容:
??[root@localhost /root]# nc -n 10.0.2.55 80
??GET /msadc HTTP/1.0
??这就会产生我们以上所见的日志文件。攻击者可以将请求进行十六进制的ASCII字符编码。在以上的例子中,字符串msadc在十六进制编码以后就会变为6D 73 61 64 63。你可以使用Windows Charmap程序来快速的进行字符的ASCII到十六进制的转换。以上的HTTP请求,将字符串msadc用十六进制编码以后,就变成了:
??[root@localhost]# nc -n 10.0.2.55 80
??GET /%6D%73%61%64%63 HTTP/1.0
??IIS的日志文件显示:
??07:10:39 10.0.2.31 GET /msadc/ 302
??应当注意的是,虽然采用了十六进制编码的手段,但是所产生的日志和没有使用十六进制编码的URL产生的是一样的。所以在这个例子里,编码并没有帮助攻击者逃避检测。但是,如果我们看看看Apache的日志情况,那么就是另外一个情形了。以下列出了攻击者使用来搜索某个CGI脚本的命令,后面跟着的是使用十六进制编码以后的同样命令:
??[root@localhost]# nc -n 10.0.0.2 80
??HEAD /cgi-bin/test-cgi HTTP/1.0
??[root@localhost]# nc -n 10.0.0.2 80
??HEAD /%63%67%69-bin/test-%63%67%69 HTTP/1.0
??现在我们来查看一下access_log文件:
??10.10.10.10 - - [18/Oct/2000:08:22:47 -0700] "HEAD /cgi-bin/test-cgi HTTP/1.0" 200 0
??10.10.10.10 - - [18/Oct/2000:08:23:47 -0700] "HEAD /%63%67%69-bin/test-%63%67%69 HTTP/1.0" 200 0