黑客避开检测的手段
程序员文章站
2022-07-10 15:11:15
黑客的聪明并不只是在于他们知道如何去入侵服务器,还在于他们知道如何去伪装自己的攻击。恶意的攻击者会使用多种逃避的手段来让自己不会被检测到...
黑客的聪明并不只是在于他们知道如何去入侵服务器,还在于他们知道如何去伪装自己的攻击。恶意的攻击者会使用多种逃避的手段来让自己不会被检测到,所以作为系统管理员,也应当了解这些手段以应付可能发生的攻击。
这篇文章的主要目的不是揭示黑客新的攻击手法,而是对那些黑客所用到的逃避检测的手法以及他们可能留下的证据做描述。这些手段的欺骗性很大,所以想检测到它们也更加的困难。
网络服务器
我们的实验环境使用两种最常用的网络服务器,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
首先应注意到的是在这两个例子中都是200代码说明命令完成成功。但是在第二中情况中,日志中出现的是十六进制的值而不是明文的。如果我们是依赖于形式来对这种攻击进行检测的话,那么我们是不可能检测到所发生的攻击的。许多的入侵检测系统使用的格式匹配技术智能化都不高,并且有些产品不会将十六进制的url转换过后进行匹配。但是不论所使用的入侵检测软件是否能够对十六进制的代码进行转换,所有的网络管理员都应当对这种伎俩有所了解。
代理服务器
因为对攻击者而言完全隐藏攻击行为是很难做到的,所以掩盖攻击的真实来源也就成为相当重要的课题了。如果黑客可以隐藏他的源ip地址的话,那么他就可以在不用担心被抓住的情况下进行攻击。而黑客用来隐藏他们的源ip地址的一种手段就是使用代理服务器。
代理服务器是被合法的用来从一个单一的访问点转发多种协议的。一般来说,内部用户必须通过代理服务器才能访问internet,因此管理员就可以在代理服务器指定外部访问以及内部访问的限制策略。用户首先是和代理服务器建立连接,然后代理服务器就将连接请求转发到真正的目的地址。目的地址会记录下代理服务器的ip地址以作为请求的源地址,而不是最初发出请求的系统的ip地址。
但是不幸的是代理服务器在internet上的放置太随意了。(可以查看proxys-4-all来获得这些错误配置机器的列表。) 这些服务器经常会存在配置错误使得internet用户可以连接到这些代理服务器上。一旦某个internet用户通过代理服务器连接到某个服务器上,该服务器就会将代理服务器的ip地址作为发出请求的源地址记录在日志中。而在被攻击服务器的日志中对攻击者的记录其ip地址是属于一个没有任何攻击行为的“无辜”主机的,而不是攻击者的真正地址。我们来看以下的例子。
下面的例子显示了黑客的攻击和攻击在日志中产生的相关信息。
攻击者
[root@10.1.1.1 /]# nc -v 10.8.8.8 80
head / http/1.0
日志文件
10.1.1.1 - - [18/oct/2000:03:31:58 -0700] "head / http/1.0" 200 0
在下面这种情况中,我们看到攻击者达到了同样的目的,但是这次他使用了代理服务器。
攻击者
[root@10.1.1.1 /]# nc -v 216.234.161.83 80
head http://10.8.8.8/ http/1.0
日志文件
216.234.161.83 - - [18/oct/2000:03:39:29 -0700] "head / http/1.1" 200 0
注意在这个例子中,日志文件中所出现的地址是代理服务器的(216.234.161.83,proxy.proxyspace.com),而不是攻击者的真实地址。在这个案例中,攻击者成功的隐藏了攻击的来源地址。不过网络管理员如果能得到代理服务的支持的话还是可以追踪到攻击的真正来源。大多数的代理服务器都会保存一份相当详细的日志,所以多半也就可以从中找到攻击的来源。但是道高一尺魔高一仗,黑客也有相应的方法来反跟踪:他们可以使用多重代理,也可以说是一个“代理链”来进行攻击。而管理员和执法部门也就必须对所有的中间代理服务器进行依次检查来获得攻击来源。在黑客的团体中这种“代理链”的使用非常的普遍,并且有类似sockschain for windows这样的工具可供使用。
ssl
对此以往很多人进行了讨论,但是它现在值得再一次提出:允许ssl的服务器是不会被网络入侵检测系统所检测到的。如果让一个黑客在80端口(http)和443端口(https)之间做一个选择的话,攻击者每一次都会选择443端口的。这实际上并不是什么手段,而是由于加密通讯的使用所造成的副作用。你可以使用网络服务器日志文件来监视443端口的请求。
结论
我们向你演示了一些网络上的黑客常用的欺骗伎俩。无须多说,这些手段是随着黑客们的想象力和创造力不断增加而不断扩展的。例如十六进制编码这样的技术不光是用在欺骗性的日志文件入口这样的地方;它同样也欺骗网络服务器的url解析机制,并可能导致例如源代码暴露之类的漏洞的出现。攻击者某些时候也使用多代理服务器来进行扫描和攻击,让管理员很难跟踪攻击的真正来源。当然,ssl某些时候为“安全黑客行为”铺平了道路。
这篇文章的主要目的不是揭示黑客新的攻击手法,而是对那些黑客所用到的逃避检测的手法以及他们可能留下的证据做描述。这些手段的欺骗性很大,所以想检测到它们也更加的困难。
网络服务器
我们的实验环境使用两种最常用的网络服务器,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
首先应注意到的是在这两个例子中都是200代码说明命令完成成功。但是在第二中情况中,日志中出现的是十六进制的值而不是明文的。如果我们是依赖于形式来对这种攻击进行检测的话,那么我们是不可能检测到所发生的攻击的。许多的入侵检测系统使用的格式匹配技术智能化都不高,并且有些产品不会将十六进制的url转换过后进行匹配。但是不论所使用的入侵检测软件是否能够对十六进制的代码进行转换,所有的网络管理员都应当对这种伎俩有所了解。
代理服务器
因为对攻击者而言完全隐藏攻击行为是很难做到的,所以掩盖攻击的真实来源也就成为相当重要的课题了。如果黑客可以隐藏他的源ip地址的话,那么他就可以在不用担心被抓住的情况下进行攻击。而黑客用来隐藏他们的源ip地址的一种手段就是使用代理服务器。
代理服务器是被合法的用来从一个单一的访问点转发多种协议的。一般来说,内部用户必须通过代理服务器才能访问internet,因此管理员就可以在代理服务器指定外部访问以及内部访问的限制策略。用户首先是和代理服务器建立连接,然后代理服务器就将连接请求转发到真正的目的地址。目的地址会记录下代理服务器的ip地址以作为请求的源地址,而不是最初发出请求的系统的ip地址。
但是不幸的是代理服务器在internet上的放置太随意了。(可以查看proxys-4-all来获得这些错误配置机器的列表。) 这些服务器经常会存在配置错误使得internet用户可以连接到这些代理服务器上。一旦某个internet用户通过代理服务器连接到某个服务器上,该服务器就会将代理服务器的ip地址作为发出请求的源地址记录在日志中。而在被攻击服务器的日志中对攻击者的记录其ip地址是属于一个没有任何攻击行为的“无辜”主机的,而不是攻击者的真正地址。我们来看以下的例子。
下面的例子显示了黑客的攻击和攻击在日志中产生的相关信息。
攻击者
[root@10.1.1.1 /]# nc -v 10.8.8.8 80
head / http/1.0
日志文件
10.1.1.1 - - [18/oct/2000:03:31:58 -0700] "head / http/1.0" 200 0
在下面这种情况中,我们看到攻击者达到了同样的目的,但是这次他使用了代理服务器。
攻击者
[root@10.1.1.1 /]# nc -v 216.234.161.83 80
head http://10.8.8.8/ http/1.0
日志文件
216.234.161.83 - - [18/oct/2000:03:39:29 -0700] "head / http/1.1" 200 0
注意在这个例子中,日志文件中所出现的地址是代理服务器的(216.234.161.83,proxy.proxyspace.com),而不是攻击者的真实地址。在这个案例中,攻击者成功的隐藏了攻击的来源地址。不过网络管理员如果能得到代理服务的支持的话还是可以追踪到攻击的真正来源。大多数的代理服务器都会保存一份相当详细的日志,所以多半也就可以从中找到攻击的来源。但是道高一尺魔高一仗,黑客也有相应的方法来反跟踪:他们可以使用多重代理,也可以说是一个“代理链”来进行攻击。而管理员和执法部门也就必须对所有的中间代理服务器进行依次检查来获得攻击来源。在黑客的团体中这种“代理链”的使用非常的普遍,并且有类似sockschain for windows这样的工具可供使用。
ssl
对此以往很多人进行了讨论,但是它现在值得再一次提出:允许ssl的服务器是不会被网络入侵检测系统所检测到的。如果让一个黑客在80端口(http)和443端口(https)之间做一个选择的话,攻击者每一次都会选择443端口的。这实际上并不是什么手段,而是由于加密通讯的使用所造成的副作用。你可以使用网络服务器日志文件来监视443端口的请求。
结论
我们向你演示了一些网络上的黑客常用的欺骗伎俩。无须多说,这些手段是随着黑客们的想象力和创造力不断增加而不断扩展的。例如十六进制编码这样的技术不光是用在欺骗性的日志文件入口这样的地方;它同样也欺骗网络服务器的url解析机制,并可能导致例如源代码暴露之类的漏洞的出现。攻击者某些时候也使用多代理服务器来进行扫描和攻击,让管理员很难跟踪攻击的真正来源。当然,ssl某些时候为“安全黑客行为”铺平了道路。