隐藏和盗窃(上)
浏览更多精彩文章>>
订阅软件安全电子期刊>>
如果你想攻入别人的网络,圣诞节和新年之间的一周是最好的时间。我喜欢一年中的这个时候,四周没有人,大多数地方最多只是最少数量的职员。如果你很能干且做得很好,那么就不会被自动控制系统注意到。这是一年中可以攻击这些家伙们的电子商务站点的最美好的时光――我猜肯定有大量的信用卡号码。
经营这些站点的人欠我的帐。我从他们那儿买过一些计算机硬件,他们给送货。而当这些货送到时有损坏,我就给他们的服务电话打电话让他们退货或者给我换一个,但他们说那个卡不能换,因为这是清仓甩卖的。可是他们的站点并没有说那种卡是甩卖的呀!我跟支持人员说,但是他们不听。他们说,“规定就是规定,”“难道你没有看看下面的小字吗?”如果他们就是这种态度……等着瞧吧,总的来说他们还算是好人,只是要给他们一点教训而已。
所以,想到这里,圣诞节之后的一天我什么也没做。家庭聚会结束后,我决定去看看他们的站点怎么样。我只是在引擎架下浏览了一下。没有什么错误。我时常到处攻击一些Web站点――但不破坏,我只是四处看看。过去我攻击的大多是些大学和国家政府站点。最近我攻击了一些更有趣的站点,而且这些站点的确是十分有趣。事实上,这让一个无聊的下午充满了挑战。
现在我的一个原则是绝不通过开合桥在城堡咆哮。他们的电子商务(也许有数据库)Web站点存放在某个数据中心。因为我沿路追溯过他们的Web站点所以知道这些,我获得了与我曾经追溯过的主要Web站点完全不同的其他主机的路线。所以看上去它似乎把电子商务信息与公司网络分开了,看来很有道理。这使我很容易决定如何接近他们的网络。我想看的是公司网络,而不是他们的数据中心,因为我想也许数据中心有更严密的安全措施。
工具
首先,我显然应该选择Linux平台。几乎我用的所有工具都运行在Linux下。我的一套探索器在Linux下运行得真的很好。现在OpenBSD已经就绪了,我还算得上是个Solaris爱好者,只是在工作时,我不用Linux平台。我并不关心它是Red Hat,Mandrake,还是Debian。这并不重要。重要的是你能根据需要调整操作系统。这才是关键。你要能确信底层操作系统是可靠的。根据有关笔记,我的自制工具是Bourne Shell,Expect和Python脚本的混合体,也有少量Perl,但大多数脚本都是用Python写的。如果你想在这类游戏中获胜,代码重用很重要。
我喜欢用nmap做网络搜寻,这是一个很好的工具。我过去用strobe,而nmap提供了更多的功能――包括从常规连接搜寻到FIN搜寻,UDP搜寻,慢速搜寻,快速搜寻,控制端口等所有功能。它是我选择的在网络上确定目标的搜寻器。我偶尔用它来确定目标操作系统。然而,我已经发现,在某些情况下,它破坏目标机器,那倒是有点无意中的大泄露。
为了识别目标操作系统,我倾向于依靠获取标识。虽然nmap的确为远程操作系统提供指纹,但它有时也会犯错误。我看到过nmap将Solaris7当成了OpenBSD系统。获取标识仍然是远程操作系统指纹的“金科玉律”。只是大多数系统管理员不知道。如果他们只要花时间减少系统识别的步骤,就会使我的工作困难得多。不会花太多时间――只是很小一会儿的努力就行。获取标识有点危险,因为为了获取这个信息一般要建立一个完全连接;然而用nmap的操作系统指纹功能把你的目标击倒也不一定是个好主意。
那么,识别操作系统选择什么端口好呢?两个对抓取标识较有用的TCP端口是80端口(WWW)和25(SMTP)端口。21端口(FTP)和23(Telnet)端口实际上不是好的选择。如果另一端很灵活,就能通过路由器的访问控制列表(ACL),防火墙或经过TCP打包器的访问控制获得被锁定的21端口和23端口。无论怎样,它是相当安全的,那两个端口都在某个地方记下日志。是的,你也许同样对WWW和SMT做了日志。区别在于信息通常隐藏在某个管理员并不真要去看的日志文件里,因为他们每天都有成千上万个连接。
现在,我让应用系统依赖多种工具。选择这些工具几乎都是因为它们简单而且能够根据我的需求而修改。对于Web服务器我倾向于RFP的Whisker程序。是的,我试过Nikto而且很喜欢它(我甚至用它来做Whisker的候补),但是我现在开始真正相信Whisker了。如果你打算用工具获得成功就得相信它们。你会问“但是SSL服务器怎么样?”很好,那些服务器有sslproxy。而它本身并不是一个用来攻击的工具,你能用它来给在SSL服务器上运行的Whisker提供加密。很好,不是吗?
对于微软的SQL Server服务器,可以用LinSQL。这是一个神奇的工具,实际上它是我根据自己的需要做了修改的linux的Microsoft客户端。我一直很惊讶网络管理员将Microsoft SQL Server放在他们能在Internet上访问到的地方。另外令我吃惊的是,我遇到过多少次Microsoft SQL Server的sa账号的密码都是空的。有时,这已经足够提供对网络的直接访问了。LinSQL依靠xp_cmdshell扩展存储过程来执行你发送到操作系统的任何命令。一些足够敏捷的管理员便能从SQL服务器中删除这个过程。对于这些情况,我使用SQLAT作为SQL审计工具。
SQLAT是另外一个可以在Microsoft SQL服务器上使用的Linux/BSD工具包。SQLAT本质上是一套能做目录攻击、上传文件、读系统注册表及导出SAM的工具。也有一个工具可用HTML格式的输出对SQL服务器进行最起码的分析。为了运行一些工具套件需要访问sa账号,但一般这不是问题。如果SQL管理员删除了xp_cmdshell扩展过程,这个工具能临时恢复xp_cmdshell。为了完成这件事情,包含xp_cmdshell代码的动态链接库一定还要在系统上。SQLAT提供了有关SQL服务器的有价值的信息,并使他更容易攻破。一旦收集到了有关SQL服务器的必要的信息,我就能很快获得对系统的访问。
我的工具箱内容丰富多样,包含我多年来获得的一整套探索器。我将所有的东西放在被我叫做“攻击树”的目录结构中。基本上,我让探索器在UNIX探索器和基于Windows的探索器之间进行攻击。我从这儿攻破了两个目录进入远程和本地的子目录。然后将远程和本地目录分成针对不同服务的探索器。下一级是攻破他们影响操作系统的探索器。攻击树的结构被镜像到攻击树目录结构中,如果我需要Solaris8 snmpXdmid服务上的探索器,就要到名为/exploits /unix /remote /snmp /solaris /8的目录下查找探索器代码或者已经被编译的二进制文件,并准备运行。树型结构如下图所示:
探索器攻击树型结构
这里不能列举出全部。我已经保存了Cisco路由器和交换机这样的网络设备探索器的探索结果和信息。我有一个对不同系统和账号的默认密码专用的目录。总之,我有一个很大的攻击网络的工具箱。
一旦进入系统,我一般试图导出SAM或捕获UNIX密码和shell文件。如果能得到这些信息,那么我就能将他们下载到本地系统并通过John the Ripper运行。我个人认为它是最好的开源密码攻击程序。我已经用了很长时间了,还用它跟朋友交换john.pot文件。我的john.pot集现在已经超过10MB了,而且John使用的密码列表有将近60MB了。在Windows系统中,如果能够访问并获得SAM,就能保证获得密码并用它来进一步探索这次访问。
搜寻
如果打算搜寻目标,就需要选择一个合适的日子来做这件事情。你必须认真地考虑被发现的可能性,尤其是IDSs现已变得越来越好了。尽管晚上是搜寻的好时间,因为他们很可能正实行NOC个人轮班制,我觉得这一天应该是个较好的选择。在那天,他们自己站点大量的进出流量会掩盖我的巡视。
开始,没有一个正在巡视的站点Ping了他们的主机。这使那类活动相当低级,从而触发一些IDS。而且大部分网络,如果是紧密的,就会过滤掉进入的ICMP回应请求。所以,我从所谓的“盲查”开始。这种查询基本上使用名为TCP SYN查询的方式来查询一些普通端口。用这种类型的查询,nmap完成了TCP用来建立连接的三程握手的三步中的两步。如果我小心地慢慢搜寻,就可以避免被IDSs发现。
我宁愿用SYN搜寻而不是全连接搜寻。因为连接搜寻很可能在某个地方记下连接日志,可能向网络管理员告警有某个可疑的东西正在接近。所以,对于这些家伙,我减慢巡视,并且只查找20,21,22,23,25,80,443端口(我希望能找到80和443端口,也想找到其它的端口)。
最初的扫描进行得很好。我确定了6个有用的端口。怎么来定义有用呢?问得好。有用意味着那台主机上有多个端口开放,运行了能提供进入网络通道的服务。其中某个主机运行着两个服务,尽管两个服务都被绑定到同一个应用系统――一个Web服务器。他们显然都在提供过滤功能的路由器后面(好像我猜对了),他们的操作系统有很大不同。我做了一个自己发现的系统和服务列表(为了表明我的“清白”,IP地址已经改了)。
查找到的主机和可用的服务
IP地址系统 |
开放的端口
|
运行
|
10.89.144.133
|
80(WWW)
|
Cisco device
|
10.89.144.140
|
80(WWW)
|
Cisco device
|
10.89.144.155
|
80(WWW),443(SSL)
|
Windows NT4.0
|
10.89.144.154
|
22(SSH)
|
未知
|
10.89.144.166
|
80(WWW),443(SSL)
|
Windows 2000
|
10.89.144.241
|
25(SMTP)
|
Sun
|
尽管有了这个列表,但是我现在还需要找到更多信息。那么,这种Cisco设备――是什么?是路由器还是交换机?既然我已经访问到了这些设备上的Web服务器,这就是我开始的地方。
愚蠢的Cisco骗局
Cisco交换机和路由器在其Web服务器上曾经有一个有趣的bug。这个bug允许你通过Web服务器认证,能够对设备上所选择的命令进行访问。真的很简单,我很惊讶,在我之前没有人发现它(可恨,我甚至想踢自己一脚为什么没有早点琢磨这事)。无论怎样,探索器是这样运行的:只要向设备发送与以下类似的URL: http://ip-address/ <xx>/exect/-/show/config,而<xx>是从19到99的数。如果Cisco设备有弱点,就能看到以下信息:
CiscoWeb认证旁路缺陷
非常聪明。可是,我还不知道除了用Web服务器外还打算怎么访问这些设备,后来我想出来了。由此,现在我看着屏幕,显然是个路由器,而且就是Cisco路由器。
Cisco路由器显示版本信息
现在我了解了更多关于这个特殊的路由器的信息。它是一个运行在Internetwork操作系统(IOS)12.0(7)T上的Cisco1720路由器,1720吗?是的,我想不出来这儿为什么是这么一个小的路由器。但是,嗨,我不是他们的网络管理员。重要的是我现在有了一个可用的密码了。
成功的网络访问(不被注意,也不被人抓住)需要时间和努力。就像好莱坞电影里演的那样,你会认为你所要做的事情就是连到网络,输入几个密码,然后就进去了。多么荒唐。要花时间的,尤其是网络管理员已做了很多努力使网络安全。
不管怎样,我还要检查一下另外一个Cisco设备。这个设备不容易受到同一个bug的感染。事实上它想要一个用户名和密码进入授权的EXEC模式。那么,我现在有两个密码可以试:从路由器(攻击)获得的VTY密码和启用密码(Cisco),启用密码没有什么问题就让我进入了。
访问Cisco路由器
所以,我访问了那台路由器和交换机。这肯定是个开始。问题是这并不是我期待的真正的交互式命令行接口。哦,不要误导我,我很高兴访问它,但是要真的到达任何地方,我还需要更多。所以,我需要把注意力转到更潜在的东西。我决定稍后再回到路由器和交换机。现在,我想看看另外四个系统。
计算机就是计算机,McNealy先生
我选定的下一个目标是邮件服务器。识别这个系统真的很容易――真令人厌烦。基本上就是连接到SMTP端口,获取标识。非常容易、简单。
Sun Sendmail服务器
从这些信息中我可以收集到几件事情。他们有Solaries7系统(简称sparc7s,所以我可以将处理器的范围缩小到SPARC)。OS版本是通过sendmail版本8.9.3+Sun/8.9.1识别的。这是Solaris7 SendMail的默认版本。他们甚至根本没有真正上锁。我可以用HELP,EXPN和VRFY。有许多信息泄露出来。所以,我能够访问邮件端口,但是我真正想用的是Telnet访问。我继续进入到Web服务器。
(待续……)
浏览更多精彩文章>>
订阅软件安全电子期刊>>