8.2、Robert,垃圾邮件发送者之友
在遥远的澳大利亚居住着另一位正直的绅士。白天,他被尊为安全专家。而当夜幕降临的时候,他就变成了一名黑帽黑客,通过攻击这个星球上最具有抗攻击能力的软件公司来提高自己的技术,同时还能让自己还清债务。
但是Robert,这个与众不同的人,并不能很专注地将自己限制在一个领域。他似乎太博学了——这个月,攻击某个软件作为自己的消遣活动,满足他寻求挑战的嗜好;下个月,因为需要钱,他又开始投身于一个工程之中,这个工程使他成为了某些人中的一员,他自称之为“肮脏的垃圾邮件发送者”。你会发现,如果说他不脏,是因为他只是偶尔才会参与到垃圾邮件发送者之中:而说他肮脏,是因为他所发送的垃圾邮件的种类。
Robert做黑客来挣钱,他说,“确实是一个观念问题。”也许这只是在自我辩解,但是他并不介意与我们一同分享他的故事。实际上,他是很主动地提起了他的故事。而且,他还杜撰了一个词来调侃自己:“我想你可以说我是一个‘邮件黑客’——个为垃圾邮件发送者服务的黑客。”
我的一个朋友来联系上我,对我说,“我想向人们销售一些色情作品,所以我需要上百万,甚至上亿的那些喜欢色情作品的人的电子邮件地址。”
换做你或我,都不会接受这个建议的。然而Robert“考虑了一会儿”之后,决定看看自己到底能做些什么。“我搜索了所有那些色情站点”,他坦言,虽然“我的女朋友非常厌恶我做这些事”,但是他还是做了。他用了一个直截了当的方法来进行搜索:使用Google,以及另外一个使用了多个搜索引擎的搜索portal,www.copernic.com
搜索结果被列成了一个工作列表。“我只是想从这些(站点)得到这方面的信息:是什么人喜欢他们的色情作品;是什么人想要从他们这里得到最新的内容;是什么人对这些恶心的事物感兴趣。”如果说Robert己经打算参与制造垃圾邮件,那么他并没有打算“用最普遍的愚蠢的办法”来做这件事。他可不愿意给每个人都发送数百份电子邮件,不管他们是否对这个主题感兴趣。
8.2.1、获取邮件列表
Robert发现的许多黄色Web站点,都在使用一个major应用程序来管理订阅邮件列表。我将其称之为:SubscribeList。
只通过Google,我就已经发现,有人曾定制了一份“SubscribeList”的副本,并且把它放在了Web服务器上。我认为这是一个中国台湾或者中国大陆的站点。
接下来的工作甚至比他预期的还要简单得多。
他们的Web服务器配置错误。因为无论哪一位用户都可以看到这个软件的源代码。这虽不是这个软件的最新版本,但也算是相当新的一个版本了。
错误就在于某人不小心地或者意外地在Web服务器的根目录上留下了一份源代码的压缩归档。Robert下载了这份源代码。
Robert从已有的站点上获取了这个程序以及名称,他知道:
我已经能够发出这样的电子邮件了:“快来访问我的站点吧!我们拥有所有你想要的刺激!更重要的是,半价!”
这样很多人都会订阅这些东西的。
然而,到现在为止,虽然他已经拥有了邮件列表软件,但是他仍旧没有邮件列表。
他开始潜心研究SubscribeList的源代码。终于他发现了一个良机:它的技术解释很复杂(参见本章末尾章节”远见“)。
在前面的故事中,那位破解者使用“&”符号,欺骗程序使之执行他的命令;而本故事中的Robert也用了相同的方法:利用“setup.pl”的缺陷:这个缺陷的产生是因为简易安装程序setup.pl脚本不恰当而不能充分验证传向它的数据。它被称为“backticked变量注入缺陷”。(这两种方法的区别在于操作系统的不同:Erik的方法适用于Windows上;而Robert的方法则适用于Linux。)一个用心险恶的攻击者可以发送一串数据破坏储存在变量中的值,从而欺骗脚本使之创建另一个Peri脚本用来执行任意命令。多亏了这位程序师的一时疏忽,使得攻击者能够嵌入shell命令。
这个方法愚弄了semp.pl,使之认为这个攻击者只是安装了SubscribeList,并想要进行初始化。无论什么公司,只要它正在运行这种有漏洞的软件版本,Robert能够对其使用这个骗术。那么他又是如何找到这些符合条件的色情公司的呢?
Robert说,他的代码是“有点昏了头,真是一个笨蛋写的”。他的脚本一旦完成了任务,将会自动清除自身,并且恢复所有配置变量,所以,没有人会知道发生过什么。“而且,就我所知,还没有人发现过这个脚本。”
考虑周到的黑客,绝对不会用一种可能会被追踪的方法,来将这些文件直接发送至他们自己的地址。
我的确是一个超级Web迷。我热爱Web。Web的世界是匿名的。你可以在一个Internet网吧里继续你的事情,没有人会知道你到底是谁。我的文件并非直接发送回来,而在世界各地的网络中转了好几次。这是很难追踪的,而且在“公司的”日志里最多只可能会有一两条记录。
8.2.2、色情作品盈大利
Robert发现很多色情站点都使用同样的邮件列表软件。通过使用改良过的程序,Robert把他们的站点作为攻击目标,最终获取了他们的邮件列表。然后他将其移交给他的朋友,那位垃圾邮件发送者。Robert希望他的行为能被理解,他解释说:“我并没有向人们发送垃圾邮件啊!”
这一招出奇的有效。因为他们早已知道有些人“很喜欢这些恶心东西”(这是Robert所使用的有趣短语),然后直接发送垃圾邮件给那些人,所以他们收到的回馈的机率之高是空前的。
通常你所能看到的“回馈率”只有0.1%、0.2%,但是通过对目标进行选择,‘我们’收到的回馈率达到了至少30%。有几乎30%~40%的人将要买我们的产品。对于一个发送垃圾邮件的比率来说,这绝对是很高的了。
最后,我一定给他们带来了大约4.5万—5万美元的盈利。我得到了其中的三分之一。
在这个肮脏事例中成功依仗于Robert搜集邮件列表所做出的努力。是他找到了那些愿意的为这类东西花费钱财的人。如果他告诉我们的数字是准确的,那么对于我们所生存的世界,这是一个多么令人沮丧的数字啊。
他说:“我找到了1000万到1500万人的名字。”
8.2.3、Robert是条汉子
尽管Robert参与了这件肮脏的事,他还是坚持认为“我不是一个肮脏的令人讨厌的垃圾邮件发送者;我是一个非常正直的人”。剩下的故事将证实他的话。他在一个“非常虔诚并且正直的公司”中的安全部门工作,而对外界,他的身份是一个独立的安全顾问。他还是一位研究安全问题的出版作者。
我发现,当他谈到关于黑客攻击的态度时,他会变得特别健谈。
我真的很喜欢接受挑战,与系统对抗。我喜欢在配置层面上和社会层面上与系统对抗,而不是在一个严格的技术层面上——社会层面,是指进入那些操纵计算机的人‘的思维’。
Robert做黑客已经有很长时间了。他提到了一个朋友(一位他不想透露姓名的美国黑客),这位朋友常常和Robert-起做游戏。
我们俩常常‘攻击进入’很多软件开发公司,比如说那些制造ActiveX控件、Delphi控件,或者很棒的编程小工具的公司。我们先找到一本相关主题的杂志,里面每隔一页就有一则广告推销他们的新产品。然后我们开始看是否能找到我们还没有攻破过的产品。很特别的游戏,不是吗?
他已经“遍游”了所有主要的游戏软件公司的Internet网络,并且获取了他们一些游戏产品的源代码。
最后,他和他的黑客密友开始意识到“实际上,我们几乎已经攻破了所有那些为自己的新产品登广告的公司。我们已经搞定了一个公司,又一个个公司,再一个公司……我们还在努力继续,但是已经没有对手了。”
对Robert来说,仍然有一个领域他很感兴趣,那就是被称为“视频后期制作“的软件产品——尤其是那些用来制作动画的产品。
我喜欢参与到他们这些人所做的事情当中。他们中有些人确实是制作这些东西的天才。我喜欢读他们的产品,想知道这些产品是如何运作的。因为当你细看它们的时候,你会发现它们是如此地不同寻常。我是说,当你看到那些动画片的时候,你可能会想:“哇噻,真的是像那么回事啊!”
最让他着迷的是在一个纯数学的层面上,査看那些代码——“那些等式和函数,还有那些产品制造者的思维模式。真的是很杰出昵。”
所有的这些都鼓舞着他。他知道,现在他所看到的一切将会成为他最难忘的一次黑客行动中的攻击目标。
8.2.4、软件的诱惑
2003年,Robert正在翻阅一本软件杂志上的各种产品的介绍,突然发现一个新产品,可用来制作“DVE数位影像效果,一流的光线填充——使得光线看起来跟真的一样,画面极其流畅。”这款产品的全部卖点就是它能用于最新的动画大片——他们所使用的用来设计、造型,以及表演的工具。
当我听到关于它的消息的时候,它看起来真的很棒。我附近圏子里有些喜欢上网的人,都对这个软件非常感兴趣。很多人都想得到它。
因为它非常贵,很难得手,所以每个人都想得到这个应用程序——这个程序好像值20万到30万美元。Industrial Lightand Magic公司就使用这个软件。但是,好像全世界总共只有4到5个其他的公司购买了这个软件。
总之,我真的很渴望得到这个软件。所以我决定开始攻击这个公司。暂且称这个公司为X公司。但是光做个决定就可以了吗?要知道,X公司在美国,他们的整个网络都是集中化的。
他的目标并不局限于只是自己得到这个软件,他还要让全世界成千上万的imernet使用者都能获得它。
他发现这个公司拥有“一道前端防火墙,以及一个很小很严密的网络。他们有很多服务器,以及多个Web服务器。从这一点上,我猜测他们大致拥有100150名雇员。”
8.2.5、发现服务器名称
当Robert试图入侵某个大规模的公司网络的时候,通常他会使用一个通用策略。首先,他会“调查他们是如何满足人们访问他们网络的需求的。在这方面,一个大公司要比小公司面临更多的挑战。如果你只有五个员工,你可以给他们发电子邮件,是不是?或者,你可以直接召集他们然后告诉他们‘这是你从家里连接你的服务器的方法,这是你在家里接收电子邮件的方法。’”但是一个大公司通常会有一个帮助程序或者某种外部资源,使得人们在遇到计算机问题时能够求助于它。Robert发现一个拥有大量雇员的公司一定会在某个地方设置一系列的说明——很可能来自它的帮助程序——来解释如何远程访问文件和电子邮件。如果他能够发现这些说明,那么他就很可能获知从外部进入公司网络的步骤,比如说什么软件是要通过企业VPN连接内部网络所必须的。尤其是,他希望找到开发商用来从外部访问开发系统所使用的访问结点,因为这些访问结点拥有Robert垂涎万分的访问权限。
因此,这个阶段他所面临的挑战就是找到进入帮助程序的方法。
我开始使用的是我自己编写的很小的应用程序Network Mapper。基本上,它是连续不断地对典型主机名列表进行搜索。我使用它作为我的顺序DNS解析器。
这个Network Mapper能够识别主机并且为每个主机提供IP地址。Robert所写的简短的Perl脚本简单地列出了常见的主机名,并且检验这个主机名列表是否存在于目标公司的域内。所以,如果攻击的公司名为“digitaltoes”,那么这个脚本可能会搜索web.digitaltoes.com,mail.digitaltoes.com等等。这个小玩意有时能够发现隐藏的IP地址以及不易被识别的网络地址块。一旦运行这个脚本,他就可能得到与下面类似的结果:
从这些内容可以得知,我们所假想的公司“digitaltoes”在63.115网络地址块中拥有一些服务器,但是我会把我的钱放在65.115网络地址块中的服务器上,并且使用“intranet”的名称,作为他们的内部网络。
8.2.6、Helpdesk.exe的小帮助
在NetworkMapper的帮助下,Robert发现了一些服务器。其中有一个正是他希望得到的:helpdesk.companyx.com。然而,当他试图访问这个站点的时候,弹出一个登录对话框,要求输入用户名以及口令,只允许授权用户访问。
这个helpdesk应用程序在一个运行着IIS4的服务器上。IIS4是Microsoft的软件Internet Information Server(IIS)的——个很古老的版本。Robert知道它存在许多漏洞。如果运气好的话,也许他能找出一个还没有被打上补丁的漏洞作为使用。
同时,他还发现了一个巨大的漏洞。这个公司的某个管理员激活了MS FrontPage,使得任何人都能够从存储Web服务器文件的根目录上载或下载文件。
(我对这个问题非常熟悉。我所在的公司(一个做安全方面的新兴公司)里的一个Web服务器就曾经被攻击过,攻击者利用的就是一个相似的漏洞。因为那位主动给我帮助的系统管理员并没有对系统进行合理配置,这一点给了我机会,让我乘虚而入。幸运的是,那个服务器在它自己的网络段上,是一个独立系统。)
当他意识到这个漏洞让他能够从服务器下载和上载文件的时候,他就开始琢磨这个服务器是如何搭建的。
搭建一些简易IIS服务器最普遍的思路就是,“无论谁搭建它”都能使FrontPage授权成为可能。
实际上,这个站点也有个弱点。部署Microsoft FrontPage(一个用来简易地创建和编辑HTML文件的应用程序)的时候并没有设置适当的文件许可,有时候是系统管理员的一时疏忽,有时候却是管理员为图方便有意这样设置的。在这个实例里,这就意味着任何人都不仅能够阅读这些文件,还能够将文件上载至任何未被保护的目录之中。Robert很兴奋。
我正在考虑该如何进入,“天啊,我居然能阅读或编辑服务器上任意一页文件,而不需要任何用户名和口令。”所以,我可以登录,并且查看Web服务器的根。
Robert认为大部分黑客都在这里错过了一次机会。
事实是,当黑客们对服务器进行网络扫描时,他们通常不会用服务器去扩展,比如说FrontPage,去寻找那些普通的不当配置。他们看了看‘服务器的种类’,然后说,“算了吧,这只不过是Apache”或者是“这只不过是IIS”。如果FrontPage确实是配置不当,那么这样他们就错过了把他们的工作变得更加便捷的机会。
事情进展并没有像Robert想像中的那般顺利,因为“在服务器上并没有太多的有用的东西”。然而,当他用浏览器访问这个站点的时候,他还是发现了一个名为helpdesk的应用程序。而且很快,这个helpdesk程序将会被证实是非常有用的,但是登录它需要输入口令。
所以,我努力思考着:到底该怎么做才能够搞定这个玩意呢?我不太喜欢做的一件事就是,通过上载某些其他文件到Web服务器,因为一旦管理员查看他们的Web日志,就会发现当成百上千的人都是登录到helpdesk.exe的时候,突然,发现有一个南太平洋的家伙却登录到了two.exe或者其他的什么机器上,他们一定会觉得很奇怪,肯定会仔细考虑原因的,不是吗?所以我要试着不在日志中留下蛛丝马迹。
这个Helpdesk应用程序是由一个单独的可执行文件和一个动态链接库(DLL,dynamic-linklibrary)文件组成的(动态链接库文件是指用.DLL作为扩展名的文件,包括一些应用程序可调用的Windows函数)。
当黑客拥有将文件上载到Web根目录的权限时,他们很容易地就能上传一个简单的脚本,来使得他们能够通过自己的浏览器来执行命令。但是Robert不是这样的黑客。他最引以为豪的就是自己的谨慎小心,他不会在Web服务器日志中留下任何痕迹。他并没有用上传脚本的老办法,而是将helpdesk.exe以及helpdesk.dll这两个文件下载到他的计算机中,然后凭借他多年来积累的经验,分析这个应用程序是如何工作的。“我曾经对很多应用程序做过逆向工程,并且在汇编语言的层次去看过这些程序。”所以,他知道已编译的C代码是如何运行以及如何逆向产生汇编程序的。
他开始看(使用IDA Pro,Interactive Disassembler(www.ccso.com有售)这个程序,用他的话说,“大量的防病毒软件公司以及制造蠕虫的黑客们利用这个程序,把一些软件反汇编为汇编程序,然后阅读汇编代码以了解这些软件是如何运行的。”于是他反汇编了Helpdesk.exe,并称赞这个程序的编写者很专业,“写得的确是棒极了!”
8.2.7、黑客的锦囊妙计:“SQL注入”攻击
把程序解汇编之后,就开始检查代码,确定helpdesk应用程序是否易受到了“SQL注入”的影响。“SQL注入”是一种可以找到编程漏洞的攻击手段。一名有安全意识的编程人员会通过添加代码来净化用户的任何询问,并过滤掉某些特殊的字符,例如:省略号、引号和大小于号。如果不过滤这些符号,那么一些别有用心的用户就会让软件程序运行他们精心准备的数据库询问操作,从而控制整个系统。
事实上,Robert已经意识到helpdesk软件的确可以作出恰当的防护检查来阻止有人使用SQL注入。绝大多数黑客只是上传一个ASP脚本给Web服务器,然后利用它来开始行动,但是Robert更关心的是如何一直隐藏,而不是如何通过发现一个简单的漏洞来控制系统。
我想,“这真是有趣,简直是太酷了。我要好好享受这个过程。”
我心里盘算着,“好,我要通过强迫性的有效性检查来进行SQL注入。”我发现被保留的无效字符的所在串,然后我将它们整个地作了更改。我想我是把它们变成了应该是一个空格符号或者是一个颚化符号(~),或者其他的当时我并没有打算使用的某种符号。但是同时,这些符号并不会影响到其他任何人。
换句话说,他修改了这个程序(使用了一个hex编辑器去“破坏”了这个用于检验用户输入的例行程序),使得这些特殊字符就不会再被拒绝了。他用这种方法秘密地完成了SQL注入,而且并没有更改这个应用程序对其他人的行为。另一个额外的惊喜就是:如果没有任何明显被窜改的标志,管理员似乎不喜欢检查这个helpdesk应用程序的完整性。
然后,Robert将他修改过的helpdesk应用程序发送至Web服务器,替代了原有的版本。这就有点像人们从各个地方搜集邮票、明信片或者纸板火柴一样,黑客们有时候不仅仅只是保存他们在攻破中所获得的战利品,他们还会保存曾使用过的代码。Robert就保存着他曾经创建的一个可执行程序的已编译二进制备份。
因为他是在家里进行攻击的(这很危险,并不推荐,否则很可能会遭受失败),所以他上载了他的“最新的、改良过的”helpdesk应用程序版本,通过一条代理服务器链——这些服务器是用来作为用户机与他(或她)想要侵犯的目标机之间的中介的。如果一个用户要求从计算机A中获得资源,那么这个请求将通过代理服务器到达计算机A,同时计算机A的回应也将通过代理服务器回到用户机。
代理服务器是透过防火墙获取World Wide Web资源的最经典工具。Robert通过使用一些位于世界不同地方的代理服务器提高了安全性,减少被发现的可能性。这些代理服务器被网络攻击者称为“开放的代理服务器(openproxy)”,一般就是用来隐藏计算机攻击的发起地。
Robert将自己修改过的helpdesk应用程序版本上载并运行该程序,然后开始用他的Internet浏览器去连接被锁定的站点。当被要求提交一个用户名和口令时,他开始了一次最普通的SQL注入攻击。在一般情况下,一旦用户输入了用户名和口令——例如,“davids”和“zl8M296q”——应用程序就会利用这些输入,生成一个SQL语句:
Select record from users where user=’davids’and password=’ zl8M296q’
如果用户域以及口令域与数据库里的内容匹配了,那么这个用户就登录了。于是可以预料的是,Robert的SQL注入攻击会如下:他先在用户域中输入了命令:
‘or where password like’%—
然后在口令域也同样输入:
‘or where password like’%—
这个应用程序用这些输入生成了类似于下面的一个SQL语句:
Select record from users where user=”or where password like‘%’and password = “or where password like‘%’
“or password like ‘%’”这一部分是让SQL返回记录的,其中口令“%”是通配符)。应用程序一旦发现口令满足这个豪无意义的要求后,就会接受Robert为一个合法的用户,就好像他己经输入了被授权的用户证书一样。随后,这个应用程序会让Robert登录到用户数据库的首位,而那通常是管理员的位子。结果,Robert不仅成功地登录了,而且还拥有了管理员的权限。
成功登录后的Robert像所有雇员以及其他被授权用户一样,可以查看当日消息。从这些消息里,他收集到了一些有用的信息:访问网络的拨号上网号码,以及一些可以增删Windows下VPN组用户的超链接。这家公司使用的是微软的VPN服务器,这种服务器要求雇员用Windows下的账户名和口令登录。因为Robert在helpdesk程序中是以管理员的身份登录,所以他可以增加VPN组的用户,并且改变用户在Windows账号下的口令。
初见成效。但是到现在为止,他还只是以一个管理员的身份登录到了这个程序,这并不能使他更接近他们的源代码。他的下一个目标是,通过他们的VPN设置获得内部网络的访问权限。
Robert开始做一个测试,即尝试通过helpdesk菜单来改变一个似乎休眠的账号的口令,然后把它添加到VPN用户和管理员组当中去——这样他的活动就不太可能引起别人的注意。他找到了他们这个VPN配置的一些细节,所以他可以“通过VPN进入。这很好,就是运行起来有点慢。”
我在美国时间凌晨1:00左右进入了网络。对于我来说,身在澳大利亚这个时区内真的非常好。因为在美国已是凌晨1:00的时候,在澳大利亚却还是工作时间。我要在网络空无一人时入侵,我不想任何人会在这时候登录或是注意到我,因为他们也许会有每个人进入网络的动态记录。我只是想万无一失。
Robert对IT和网络安全人员如何工作总是有一种异于常人的直觉。他觉得,在世界各地,这些工作的工作方式都不会有太大的差别。“他们要想发现我‘在线’的唯一方法就是不停的浏览日志。”对于IT和网络安全人员来说,他这个观点可不是那么讨人喜欢的。“人们不会每个早晨都来阅读日志。当你来到办公桌时,一般都是先坐下来,喝杯咖啡,上上自己比较感兴趣的站点。你不会马上跑去读日志,看谁昨天修改了自己的口令。”
Robert说,他在攻击过程中注意到了一个现象,“当你改变一个站点上的东西时,人们或许会立刻发现,也可能根本不会发现。但如果他们正在运行例如Tripwire的程序,那么就有可能发现我改变了站点。”Robert所说的Tripwire是一种校验系统程序完整性的软件,也用于口令校验和与已知值表比较。
关于这点他倒觉得很放心,引用现今流行的词来说就是“M&M安全”——即外强中干。“没有人当真关心谁在他们的网络里溜达,因为你已处在核心的内部。”你成功地穿透安全防护层并到达了核心,那么你就会像在自己家里一样自由自在了(这意味着,一旦一个黑客处于网络内部并像授权用户一样应用资源,那么他的非授权活动就很难被检测到了)。
Robert发现,利用hdpdesk程序抢到的那个账号(就是改变口令的那个)能允许他通过微软VPN服务先接入网络,再把计算机连接到公司的内部网络,这样,他使用的计算机就好像插入了公司内部网络一样。
到现在为止,他都非常小心,没有让任何可能被某位尽职的系统管理员发现的日志项产生,他依然逍遥自在。
一旦连接到公司的内部网络,Robert就会把Windows计算机名字映射到他们的IP地址上去,找到拥有FINANCE、BACKUP2、WEB和HELPDESK一类的名字的主机。他将其他的主机用人们的名字来映射,让独立的雇员的机器能够显而易见。关于他的故事的这几页内容,他总是反复重申这点。
关于服务器的命名,公司里总有人会幽默地异想天开,这在高科技领域是屡见不鲜的,始作俑者的就是苹果计算机。在苹果计算机欣欣向荣的早期,拥有着创造性思维和打破常规方法的Steve Jobs决定:公司大楼里所有会议室都不能取名叫212A、会议室六层或诸如此类的了无生趣的日常名字。于是,这栋大楼里的房间都被命名为卡通片里的角色,那栋大楼里的房间也都被命名为电影明星等等不一而足。Robert发现,这家软件公司对他们的某些服务器也是这样命名的,除了联系到动画产业之外,他们选择的名字还包括着名的动画角色。
不过,吸引他的并不是一个有着有趣名字的服务器,而是一台名叫BACKUP2的服务器。他终于掘出了一块宝石:在一个名叫Johnny的网络共享存储里,某个雇员在其中做了大量的文件备份。这个家伙好像自我感觉良好,很少关心安全问题。在他/她的目录中有一个Outlook个人文件夹,其中包含了所有保存过的电子邮件备份(网络共享存储指:一个硬盘或是硬盘的一部分被有意设置为可供他人访问或共享文件)。
8.2.8、备份数据的危险
人们备份数据一般都是为了日后能起到作用。如果有足够的空间,人们一般会把所有的东西备份,而后抛之脑后。备份的东西变得越来越多,但是人们总是会任其发展而并不釆取措施来移动或者删除其中哪怕一部分内容,最后总是使得服务器或是备份盘溢出。
Robert说道,“通常备份包含关键、重要甚至让人惊讶的信息,但没有人会关心他们,因为那只是备份而已,人们对备份的安全意识太低了。”(当我自己还是一个年轻的黑客时,我就已经注意到了同样的状况。一家公司可能会不遗余力地保护他们的某些数据,但却丝豪不管包含同样数据的备份是否安全。在我四处漂泊的时候,我为一家法律公司工作,这家公司把备份磁带放到受保护计算机房外的入口处,等着存储公司来收取。在这个期间内,几乎任何人都可以大摇大摆地偷走几盘磁带)。在BACKUP2上,Robert注意到有人居然在一个共享区域内备份了所有的东西,于是他对这个情况做了一番推测,而这样的情况应该会很常见:
某一天,这个家伙突然来了感觉。他想,“我需要备份一下。”于是他就做了备份。三个月或四个月后,备份依然在那里。
这种情况让我对对网络有了一个大体印象,也让我真正知道了系统管理员是如何工作的,因为这根本不是什么开发人员或没有访问权限的人。这个人能创造共享空间,但是很明显,他完全没有关心安全问题。
Robert接着说道:
如果他能像我一样的话,他就应该给共享空间设置一个口令,同时还要给这个共享空间起一个随意点的名字。一段时间后,他应该移动或者删除这个共享空间。
在Robert看来,更妙的是“这个人把了自己Outlook也复制进去了,而且还带有所有的地址和联系。”我复制下了文件归档,Robert说道,“我找回了他Outlook.pst文件和所有电子邮件,一共大概有130或140个消息。”
注销后花了好几个小时阅读这个家伙的电子邮件。他打开了这个家伙所有的东西:公共告示、工资变化和绩效评估。“我发现很多关于他的信息——他是网络上一个系统管理的头,负责所有的Windows服务器。”Robert说道:“我还能从他的机器里得知其他人还有谁是系统管理员,以及谁拥有多少权限。这就更妙了。”
这个人的电子邮件中的信息非常有用,我列出了一张名单,罗列出所有可能拥有我想要的源代码获取权限的人。我写下这些人的名字和所有我能得到的细节,然后开始四处转悠。我在这个家伙完整的邮件文件里搜索‘口令’,结果找到了两个登记证registration,其中一个是一家网络应用公司的。
这个人用自己的电子邮件地址和口令在他们支持的站点建立了一个账户。他这么建立了两三次。我发现从网络应用公司返回的电子邮件是这样写的:“非常感谢注册账户,你的用户名是XX,你的口令是XX。”两家不同公司的口令都是“mypassword”。
很可能这就是这个人现在还在使用的口令,当然这只是个可能。不过人们通常都很懒,所以这绝对值得一试。
不出所料,Robert猜对了。在公司的服务器上,这个口令在这个人的一个账户上生了效,不过这个账户还不是Robert所期待的域管理员账户。域管理员账户能让Robert获取master账户数据库,数据库里面存储着每个域用户的用户名和散列过的口令。此刻,这个数据库正被调用去认证用户在整个域中的权限。显然,这个人的用户名都是一样的,但是访问权限的级别却可能不同,这取决于他登录的是域还是本地机。Robert需要域管理员权限以便获取公司最机密的系统,但管理员对域管理员账户设置了不同的口令,而Robert并没有这个口令。“这的确挺烦人的”,Robert抱怨道。
整个事件开始变得有点让人泄气。“但是我想,我一定可以从其他资源里找出这个人其他账户的口令。”
接下来,情况开始好转。Robert发现公司正在使用项目管理程序Visual Source Safe,于是他成功地得到了外部口令文件的权限,只要是有系统进入权限的用户都可以阅读这个外部口令文件。利用公共的域口令破解软件,Robert最终破解了这个口令文件,这花费了他“大概一个半或两个星期,最后总算是得到那个人的另一个口令。”Robert找到了这个被他严密监视的管理员的第二个口令。该小小地庆祝一下了,因为这个口令对域管理员账户也同样有效,于是Robert总算拥有了这样的权限来进入所有他想要进入的服务器。
8.2.9、口令观测
口令是非常个人化的东西,Robert说:“如何去辨别哪些公司是非常谨慎的公司呢?谨慎的公司通常给每个人一个非常冷僻和严格的口令;又如何去辨别那些不谨慎的公司呢?他们给出的默认口令通常是一周的某天、公司的名字或者是一些没用脑子的东西。”
(Robert告诉我,在他攻击的那家公司,雇员的口令都设置为开始工作的当天日期。当试图登录时,“你一共可以尝试7次,直到系统将你锁死”。但如果你真打算迸入某人的账户,“你只需要不超过5次的猜测就可以登录了”。)发现他试图进入的这家公司的很多账户都有一个默认口令,即:
Companyname - 2003。
他没有找到任何带有2002或是更早年份的口令,显然,他们在新年开始那天就统一更改了口令。这样的口令管理可真是巧妙至极啊!
8.2.10、获取完整访问权限
Robert能感觉到自己离目标已经越来越近了。拥有了从那个管理员那盗取的第二个口令,他现在可以获取整个域口令的散列了。他用PwDump2析取出Primary Domain Controller的散列,同时利用1OphtCrackill破解了大多数口令。
这个最新技术采用了彩虹表,即口令的散列与相应的口令构成的表格。有个站点‘http://sarcapij.wayrcth.cu.org/’会尝试为你破解口令的散列。你只需要提交LAN Manager和NT散列,以及你的email地址,它就会回信告诉你所有它得到的口令。Robert解释道,“他们拥有已提前生成好的一些经常被用作构造口令的特定散列,这样就省去了大量的计算,因为他们拥有已提前生成好的散列和相关口令已经达到18G或者20G了。如果一台计算机通过这些已提前生成好的散列来寻找匹配的方法进行扫描的话,这个过程是很快的。这就好像在不停地问“是这个吗?是这个吗?是这个吗?是的——就是这个。”只要这一个彩虹表就能把破解时间减少到了秒。
当lOphtCrack结束时,Robert几乎已经拥有了域中所有人的口令。到目前为止,他利用从早先截获的邮件中得到的信息列出了一张表,表中罗列出了所有和这个系统管理员交换过消息的人。其中有一个员工写信说道,一个服务器坏掉了,他抱怨说:“我现在不能存储任何新的修改,而且我也不能发展我的代码了。”显然他是一个开发人员。这是个很有用的信息。很快,Robert就找到了这个开发人员的用户名和口令。
他拨号接入网络,签署了那位开发人员的信任证书,“以他的名义登录,我将拥有一切。”这里的“一切”特别指的是产品的源代码——“那是整个王国的钥匙”,随后,他拥有了这把钥匙。“我要窃取资源。任何东两我都想要。”他兴奋不已。
8.2.11、把代码发回家
现在,Robert已经看到了他所寻找的宝藏发射出的光芒了。但他仍必须找到一个方法——安全的方法——让宝藏乖乖地送上门来。“这些文件非常大”,他说,“我估计整个源代码树大约有1G,我得要花好几个星期才能下载完毕。”
(不过,这至少比用14.4k波特的调制解调器来下载一个大型压缩软件要强那么一点——在很多年前,我从Digital Equipment Coiporation复制好几百兆的VMS源代码时用的就是这个笨方法。)
因为源代码如此之大,所以他想要一个更快捷的连接进行传送。他需要一条自己不会轻易被跟踪的传输链路。快速连接链路并不是什么大问题。他以前搞定过一家使用Citrix Meta Frame的美国公司,这家公司也是Internet上一个易被攻击的对象。
Robert建立了一个到目标公司的VPN连接,然后将硬盘映射到源代码所在的地方。很容易,他就将源代码下载了下来。“我再次利用了到VPN的Citrix服务器进入到‘软件公司’的网络,然后映射到共享存储空间中,紧接着我复制了所有的源代码,二进制数据以及这个可用的Citrix服务器中其他的数据。”为了找到一个安全的,不会被跟踪(他希望这样)的传输文件的路由,他使用了我自己最钟爱的搜索引擎Google来定位一个匿名的FTP服务器——这种服务器允许任何人去上载和下载文件到一个公共的可访问的目录下。此外,他还在寻找一个匿名的FTP服务器,它拥有可通过HTTP(利用web浏览器)去访问的目录。他认为,通过利用一个匿名的FTP服务器,他的一举一动将“湮没在噪声中”,因为还有许多其他人也在使用这个服务器去交换情色资料,破解软件、音乐和电影。
他在Google中搜索关键字如下:
Index of parent incoming inurl:ftp
对FTP服务器的搜索是允许匿名访问的。从Google搜索识别到的服务器中,他选择了一个满足他如前文提到的HTTP下载要求的服务器,这样他就可以通过他的Web浏览器下载代码了。
Robert拥有已从公司传送到被控制的Citrix服务器上的源文件之后,他开始把这些源文件再次传送到那个被Google搜索找到的匿名FTP服务器上去。
现在只剩下最后一步了!他马上就要最终拥有这份珍贵的源代码了。现在只需要将这些代码从FTP服务器传送到他自己机器上。但是“直到那天晚上,我都没有想过用我的Internet地址去下载所有的这些源代码,尤其是小会几小时不间断地连续下载,希望你明白我的意思。”所以,在把文件传输到FTP服务器之前,他先把这些文件压缩为一个更小的压缩包,并且给它起一个不起眼的名字(“gift.Zip,或者类似的什么名字”)。
他再次利用开放的代理服务器链去跳转他的连接,并使其很难被追踪。Robert解释道,“仅在台湾,就有数百个开放的Socks代理。同时你还知道,在任何时候都会有数百人使用这些代理中的任意一个。”所以如果他们能够全部登录的话,那么日志会变得非常大,这就意味着那些西装革履的家伙不太可能会侦察到你的存在,或是来到你家来逮捕你。“这就像大海捞针一样,绝对是非常麻烦的事情。”
最后,在他做完所有这些努力之后,传输开始有条不紊地进行了。
我不敢相信这代码将要被下载下来了,它真的是太大了。