|
发表于 2004-9-3 23:03:50
|
显示全部楼层
(转)如何发现和防范内部网络的非法代理服务器和NAT(Part I)一些ISP和一些单位,需要限制内部网络的某些机器不能访问Internet,这时,一些能够访问Internet的机器会架设一台代理服务器或者NAT来让一些非法用户访问Internet,这篇文章,就是说明如何从技术角度来侦测(或者反侦测)这些非法的代理服务器或者NAT。首先,得区分两个概念:Proxy和NAT这两个概念都搞不明白的,偶想最好还是先找点相关资料看看再来看这篇文章。进入本系列文章的第一部分如何发现和防范内部网络的非法代理服务器本来是不想取这么个名字的,代理服务器,概念太大了,HTTP Proxy/FTP Proxy/SMTP Proxy/Telnet Proxy/Socks Proxy等等等等...xxbin经常用的代理,其实也就是HTTP Proxy,下面将会针对如何发现内部网络的非法HTTP Proxy来进行分析。(第一部分的文章的标题似乎改成如何发现内部网络的非法HTTP代理服务器更合适 不过还是保留这个标题吧,哪天知道其它协议的Proxy的检测方法也可以继续写在这里了。)如何发现非法HTTP代理服务器?1) 流量监控若是有条件的话,进行流量监控是个不错的选择,代理别人的机器,其流量会比一般机器的平均流量大几倍,从流量,可以发现可疑的用户,不过,仅仅根据流量,你是没有证据说他用了代理软件的,碰上一些有资历的或者刁蛮的用户,你反而会吃不了兜着走的说。 2) 端口扫描开一个nmap或者你所喜欢的端口扫描器,对某些网段进行端口扫描,然后再在扫描的结果中人工寻找可疑目标,比如哪些8080/3128什么的端口,多半是HTTP Proxy,最后再用代理猎手来确认,或者自己利用HTTP协议来手工确认(use telnet or netcat )。不过,端口扫描仅仅是对菜鸟有用,高手会把自己的端口改成一个很怪异很高数值的端口(谁会愿意每隔一段时间去扫描几个网段的IP的1-64K的端口?),甚至,他还可以把代理服务器的端口仅仅开在他的内部IP上(就是那个接其它需要非法上网机器的非法IP),这样你从你的内部网络,是不可能用通常手段扫描到他的内部IP到底开了哪些端口的。3) SNIFFER以上的两个方法对侦测HTTP Proxy都不是太有效,不得已,我们可能需要从HTTP协议本身来下手分析某个HTTP请求是否用了非法的代理服务器。为了分析HTTP协议,首先要做的就是SNIFFER,若你真的是网络管理员,偶想你是有N个办法来搞到某个IP对外的HTTP请求甚至是整个内部网络所有的对外的HTTP请求(偶的建议是Internet出口采用Linux+IPTables+Squid来做一个透明代理服务器+防火墙,并且可以利用tcpdump来sniffer 当然你也可以选择你所喜欢的方法)。首先来看看标准的HTTP协议,HTTP协议分HTTP请求和HTTP应答两部分,在通常的情况下,HTTP请求由浏览器发出,而HTTP应答是由HTTP Server来发出。用telnet可以非常简单的模拟出这个过程:telnet www.netbuddy.org 80 (然后在TELNET窗口里面输入)GET / HTTP/1.1Host: www.netbuddy.org最后跟两个回车以上就是HTTP请求部分,接着偶们的telnet窗口就会显示这个HTTP请求的应答:HTTP/1.1 200 OKDate: Fri, 28 Nov 2003 17:40:18 GMTServer: Apache/2.0.47Last-Modified: Tue, 02 Sep 2003 13:12:50 GMTAccept-Ranges: bytesContent-Length: 755Content-Type: text/html; charset=GB2312NetBuddy.Org首页...通常,一般的浏览器(IE or Mozilla)都不会提交象偶上面这么简单的HTTP请求的,它还会把一些有关信息包括进去,比如浏览器的版本以及操作系统版本,(User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0),这样HTTP服务器就可以得到更多的客户端的信息,偶们监听这个HTTP会话的话,也可以看到这些信息。HTTP客户端(浏览器)通过HTTP Proxy来访问某个HTTP服务器的过程大概如下: HTTP请求-> HTTP请求->HTTP Client ------------------ HTTP Proxy (更改某些HTTP头部信息) ------------------- HTTP Server 有兴趣的可以检测一下你是否用了代理。 http://www.netbuddy.org/tools/proxy-detect.php你可以改改这个脚本,让它把信息记录到文本文件中,然后伪装成图片(象bug签名那种)或者用其它的形式包含到一个你的内部网用户都要访问的一个内部网页里面去。5) 防范措施对于高校的网管,偶的建议是在Internet出口采用Linux+IPTables+Squid来做一个透明代理服务器+防火墙,并用iptables对HTTP协议进行内容过滤,发现头部有HTTP_VIA什么的就DROP掉。6) 其它补充上面所描述的任何一种方式,都需要很多条件来实现,而且只能针对HTTP代理。而且那个针对HTTP协议细节的检测方法必须是HTTP代理所代理的那些客户端向外或者向你的内部站点发起请求之后,才能得到我们所要的信息。除了上面偶说的那两个HTTP变量,当下面的变量出现在HTTP请求头部的时候,这个HTTP请求多半是HTTP Proxy发起的了。HTTP_VIA, HTTP_X_FORWARDED_FOR, HTTP_USER_AGENT_VIA, HTTP_CACHE_CONTROL, HTTP_CACHE_INFO, HTTP_PROXY_CONNECTION另外根据国外的资料,Netscape Proxy Server会增加一个名叫HTTP_PROXY_USER 的变量,其值为Client的真实IP地址。xxbin几年前调过这个代理服务器,因为在AIX平台上跑得不稳定,就换成Squid了,所以也就没有测试环境来检测这个说法是否正确,哪位有条件的可以测试一下。上文是对HTTP代理检测的一个总结,具有非常强的针对性??仅仅针对管理大型内部网络的网络管理员,而且是那些不怕麻烦的管理员。另外,友情提醒一下,光靠技术是不行的,行政手段要跟上,技术仅仅只能是做为实施行政手段的一个有效的方法。偶抛出这篇文章,仅仅想抛砖引玉,希望大家多多参与讨论,其实这个问题,是困扰网络管理员的一个非常头痛的问题。另外有关NAT的检测,还是等到下一篇再说吧。 或者,谁把自己的玉拿出来给大家开开眼? |
|