6.1、寒冬
不久以前,新英格兰一家大型IT咨询公司的几位经理和执行官聚集在他们的会议休息室接待了两位咨询顾问。我可以想像坐在会议桌旁的公司技术人员一定对其中一位咨询专家好奇——Dieter Zatko,也就是曾经亨誉黑客世界的Mudge。
故事回到20世纪90年代早期,Mudge和他的一位伙伴召集了一群志趣相投的人在波斯顿一间狭窄的仓库里一起工作;这伙人即将成为一群倍受尊敬的计算机安全人员,他们的组织名叫“l0pht”,或诙谐一点叫“l0pht重工业”(名字的前半部是由小写L、数字0组成,后半部按照黑客的风格,”f“的音由字母ph代替,整个名称发音为”loft“)。随着他们开发的程序取得越来越多的成绩,他的美名也传开了。Mudge被很多单位邀请去分享他的知识财富。他在许多地方做过演讲,如在Montery的美国陆军战略学校做过”信息战“的主题演讲——怎样在不被追踪的情况下,潜入敌人的计算机并破坏服务器,以及资料破坏技术等。
最受计算机黑客欢迎的工具之一(有时候也被安全人员青睐)是l0phtCmck软件包。这个程序展现的魅力被使用它的人看作是理所当然,我极度怀疑有一帮人非常讨厌它。l0pht组员因编写了一种能迅速破坏口令散列的工具(称为l0pht Crack),引起了媒体的注意。Mudge参与了lOph Crack的编写并与人共同创办了在线网点,这一程序能让黑客和任何对它感兴趣的人所使用。最初该程序是免费的,稍后成为收费的应用程序。
6.1.1、初次会晤
有一家公司(我们称之为“牛顿”)决定给客户扩展服务,给他们增加容量和提供“渗透测试”服务,l0pht接到了这家咨询公司打来的电话。公司没有采用雇佣新员工和慢慢创立这个新部门的办法,而是寻找着能整体买下并能够在内部安置的现有组织。会议一开始,一位公司人员就开门见山提出他们的想法,“我们想买下你们,并让你们成为我们公司的一部分。”Mudge回忆当时的反应:
我们好像是这样反应的,“恩,你们甚至还不了解我们。”我们清楚他们对我们这么感兴趣的原因,大部分是因为l0phtCrack带来的媒体狂潮。
一部分原因是想争取时间让自己来习惯卖掉公司的想法,一部分原因是他不想仓促谈判,于是他釆取了拖延战术。
我说,“看,你们并不真正了解你们将得到什么。你看这样行不行?——你们付15,000美元,我们为你们公司做一次全面的渗透测试?”
那个时候,l0pht甚至还不是一家独立的做渗透测试的公司。但我这样跟他们说,“你们还不了解我们的技术水平,基本上你们只是满意我们造成的公众影响力。你们付给我们15,000美元吧。如果你们对结果不满意,就没有必要买下我们,并且也不会浪费彼此的时间,因为你们将得到一个满意的渗透测试报告,而我们也可以进账15,000美元。”“并且,当然,如果你们对测试结果满意并对它有兴趣,这也是我们所期待的,你们就可以买下我们。”他们回答,“确实是个不错的主意。”我心想,“简直是白痴!”
正如Mudge想的那样,他们真是一群白痴。在商讨购买l0pht团体的时候,居然授权让人家攻击他们的文档和信函。Mudge正等着越过白痴的肩膀偷偷窥视呢。
6.1.2、基本规则
做渗透测试的安全咨询顾问就如同一个卧底替察去买毒品:如果某些身着制服的辖区警察当场发现了这场非法交易并掏出了枪,卧底刑警队员只需亮出他的警徽就可以了。不用担心会进监狱。被雇来检测公司防御系统的安全咨询顾问希望得到同样的保护。与警徽不同,每一位渗透测试员都有一封公司执行官签名的信,“此人被雇来为我公司完成一个项目,如果你们见到他正在做一些‘不恰当’的事情,不必担心。请不要为此事费神。就让他继续,并给我有关的详细报告。”
在安全团体中,这封信被称为“免受牢狱之灾的护身符”。渗透测试人员很谨慎,无论是在线上还是在客户公司或其他地方,他们总是把这封信件放在身上,以防胸有大志且嗅觉灵敏的公司安全人员发现并阻止自己的工作,或者被尽责的员工发现,并勇敢地阻挠测试。
测试开始前还有另一个标准步骤,即客户给出基本规则——在他们的操作过程中,什么部分在测试范围内,什么部分不属于测试范围:这究竟是不是一项单纯的技术攻击,测试者们是否能通过找出未保护的系统或穿越防火墙,获得机密信息;是对公开的网页网址,还是内部计算机网络,或是整个工作系统的应用程序测试;是不是也包括“社会工程”攻击——试图欺骗员工让其泄露未授权的信息;以及包不包括真实的攻击,测试人员能不能试图潜入公司,避开警卫力量或通过员工专用通道偷偷溜进去;以及能不能通过垃圾搜寻以获得信息——察看公司的垃圾,以寻找丢弃的带有口令的文件或其他有价值的数据。所有这些,测试之前都要写清楚。
通常公司只想进行有限的测试。l0pht团队的一个成员Carlos,则认为这其实是不现实的。他指出“黑客不会以你认为的方式工作”。他崇尚更具攻击性的方式,即没有任何限制,不遮遮掩掩。这种测试不但对顾客更有价值,而且更合测试人员的口味。如Carlos所说,这样“更有趣更吸引人!”这次,Carios的希望得以实现:“牛顿”同意他们进行全方位的攻击。
安全主要基于信任。委托公司要绝对相信受委托的安全公司所进行的安全测试。此外,大多商业和政府机构要求签定一个非公开的协议(Nondisclosure Agreement,NDA),以合法地保护私有的商业信息不被暴露。
渗透测试人员签定NDA是很常见的,因为他们可能接触到机密信息(当然,NDA看起来几乎是多余的:利用客户信息的任何一家公司是不可能赢得下一位客户的。但是谨慎还是必要的)。通常,渗透测试人员还被要求签定一个附文,即安全公司应尽最大努力不影响对方的日常业务运作。
为“牛顿”做测试的l0pht队伍由7个人组成,他们可单独或成对工作,每个人或小组对公司操作系统的不同方面负责。
6.1.3、攻击
持着免受牢狱之灾的护身符,l0pht成员发起了最猛烈的攻击,甚至让人感觉“吵闹”——即釆取的行动引起了别人的注意,通常测试人员会避免这种情况。但他们仍然希望保持隐秘。Carlos说,“得到了所有的信息而且丝毫没有被察觉到,那样更酷一些。你总会想达到那种境界。”
“牛顿”的Web服务器运行的是流行的服务器软件Apache。Mudge找到的第一个脆弱性是目标公司的Checkpoint Firewall-1里隐藏的一个默认配置,它允许源UDP(用户数据报协议)包或者TCP(传输控制协议)包在端口53到1023以上几乎所有的端口进入。他的第一个念头就是试图用网络文件系统(NFS)来卸下他们导出的文件系统,但是很快意识到防火墙有一个阻挡访问NFS驻留程序(2049端口)的规则。
尽管普通的系统服务被阻塞了,但Mudge知道Solaris操作系统上——个没有文档记载的特点,它可以把rpcbim Kportmapper)绑定到端口32770以上的一个端口上。这个端口映射器将动态的端口号分配给某些程序。通过端口映射器,他可以找到分配给mount驻留服务的动态端口。取决于请求的格式,Mudge说:“mount驻留程序也会生成网络文件系统请求,因为它用同样的代码。我从portmapper那里获得了mount驻留程序,然后我在mount驻留程序上发送了我的NFS请求。”
使用nfsshdl程序,他可以远程加载目标系统的文件系统。Mudge说:“我们很快得到拨号列表号码。我们只是下载了他们所有的导出文件系统。我们完全控制了系统。”Mudge还发现,对于无所不在的PHP孔,目标服务器是非常脆弱的(见第2章“当恐怖分子来袭的时候”)。他可以欺骗PHPCGI脚本去执行模棱两可的命令,方法是将要执行的shell命令后的换行符釆用Unicode字符串。察看了使用PHP的系统,他意识到Apache服务处理器是在“nobody”的账户下运行的。
Mudge很高兴地看到系统管理员“锁了箱子”——也就是,使电脑处于安全状态——这正是当服务器连接到非信任的网络(如Internet)时,我们应该做好的工作。他搜索所有的文件和目录,希望找到一个可用文字表示的文件或目录。在进一步检查之后,他发现Apache的配置文件(httpdxonf)也在“nobody”的账户下,这种错误意味着他可以重写httpd.conf文件的内容。
他的策略是改变Apache的配置文件,这样在Apache下一次重启时,服务器将在ROOT账户特权下运行。但他需要一种编辑配置的方式使他能改变用户在什么系统下运行。
Mudge在一起工作的一个人使用的句柄是Hobbit。两人想出了一种使用netcat程序的方法。因为系统管理员明显将“conf”目录下文件的所有权更改到“nobody”下,Mudge能够使用“Sed”命令来编辑httpd.conf,因此当Apache下一次重启时,它将作为根用户方式运用(当前的Apache版本已经修复了这种脆弱性)。
因为要等到Apache下一次启动时,他的更改才能发生作用,他不得不坐下来等待。一旦服务器被重启,Mudge就能通过PHP相同的脆弱性执行根目录的命令;而这些命令是早先是在“nobody”账户下被执行的。现在Apache作为ROOT目录运行。拥有执行ROOT目录命令的这种能力,获得对系统的完全控制是很容易的。
同时,l0pht攻击者在其他方面也取得了进展。我们大多数从事攻击和安全工作的人将它称作垃圾搜寻,而Mudge本人对此则有一个更为正式的称呼:物理分析(physicalanalysis)。
我们派一些人去做物理分析,我想,某个员工(客户公司的)近段时间可能被解雇了,他们懒得清除了他的文件,而是将他的整个办公桌当成垃圾扔了。被去弃在垃圾堆里的办公桌被‘我们的人员’发现了,抽屉里塞满了旧的飞机票、手册和各种内部文件。
我想告诉客户们,好的安全措施不仅仅是关乎电脑系统的安全。
做这个不需要翻遍所有的垃圾,因为他们通常使用垃圾捣碎机,但捣碎机放不下这张办公桌,我仍然在别处可以找到像这种情况的办公桌。
实际小组进入公司的基地时,使用的是最简单而又是这种情况下最受用的办法,也就是屡试不爽的“尾随”。即紧跟在公司员工身后穿过安全大门,特别是从公司自助餐馆或其他员工活动场所出来,然后进入到安全冈。大多数职员,特别是级别低的支援,在面对随他们进门的陌生人时有些犹豫不决,担心这个陌生人可能是公司的高级别人物。
小组的另一个成员正在对公司的电话和语音信箱系统进行攻击。标准的起点是查出客户所使用的系统制造商和类型,然后将计算机设置成wardialing状态——因为某位员工可能没有设置自己的口令,或者口令很简单,这样通过不断拨打公司的电话分机,兴许就能找到一些口令。一旦他们找到了这些脆弱的电话线路,攻击者就能听到里面存储任何的语音信息(电话黑客——“入侵电话系统者”——使用同样手段以公司的开支拨打各种外线电话)。
当wardialing时,l0pht电话团队通过分析拨号解调器的回应,确认公司的电话分机。这些拨号连接,有时候未受保护,仅依赖于“模糊的安全”,并且总是处于防火墙的“信任区”中。
6.1.4、灯火管制
时间一天天过去了,安全小组一直在记录一些有用并且有趣的信息,但Mudge仍没有想出一个办法可以促使Apache系统重启,并能让他登录网络。就在这个时候不幸发生了,对于安全小组来说,却有一线希望:
我正在听新闻,听到公司所在的地方要进行灯火管制。这真是一个悲剧,在城区的另一边,一名工人在检修锅炉时,因为突发爆破而身亡。但整个城镇因此而断电。
我想,如杲管制时间太长的话,服务器的能量储备很可能会被耗尽。
那就意味着服务器将关闭。当城市的电源恢复时,系统将会重启。
我坐在那儿不断地查询网络服务器,过了一段时间,系统停止了运行。他们必须重启它。时间控制对我们来说真是太完美了。当系统启动时,瞧,你瞧,Apache正以根用户方式运行,正如我们所计划的那样。
那一刻,l0pht小组完全可以对那些机器进行攻击了,这后来成了我开展整个攻击过程的跳板。
安全小组开发了一段代码,能帮助他们不被锁在系统外面。公司的防火墙通常不会被设置成“阻塞外出的流量”。同时,Mudge的小型程序,它安装在“牛顿”的服务器上,在他们的控制下每隔儿分钟就与外部计算机相连。这种连接提供了命令行界面,就像Linux以及老式的Dos操作系统用户所熟悉的命令行解释器。也就是说,“牛顿”的设备经常为Mudge的团队提供绕开公司防火墙而输入命令的机会。
为了避免被检测到,Mudge在他们的脚本中混合了公司的背景语言。任何人查看文件夹时,都会认为那是正常工作环境的一部分。
Mudge开始搜索Oracle数据库,希望找到员工工资表数据。“如果你可以说出首席信息官的工资和奖金,那通常就是你己经拿到所有信息的暗示。”Mudge在公司所有进出的邮件上设置了一个嗅探器,只要“牛顿”的员工进入防火墙进行维护工作,l0pht就会发觉。看到有人使用明文文本登录防火墙,他们很震惊。
在短时间内,l0pht完全渗透了整个网络,而且有数据证明。Mudge说,“你们知道,那就是为什么我认为许多公司不愿对其内部网络进行透视测试的原因了。他们知道结果太糟糕了。”
6.1.5、语音信箱泄漏
电话攻击小组发现,主管商讨购买l0pht的一些执行官在他们的语音信箱上设置了默认口令。Mudge和他的队友得到了令人吃惊的消息——其中一些很滑稽。
他们所要求的条件之一,也是作为把l0pht卖给公司的条件,是一个移动操作装置——他们可以与传动装置装在一起的一个装载器,并可以在其他渗透测试中,来捕获未加密的无线通信。对其中一个执行官而言,为l0pht小组购买一个装载器的意见好像很不合理,他开始将它叫作”温尼贝戈人“(居于东威斯康星等地的北美洲印第安人)。他的语音信箱里全是其他公司领导对“温尼贝戈人”的苛刻评价,以及对l0pht的总体评价。Mudge感觉既好笑又震惊。
6.1.6、最终结果
当测试阶段结束,Mudge和小组成员必须写出详细的报告,并准备好在“牛顿”所有的执行宫都参与的会议上递交。“牛顿”公司的人不知道将会是什么样的结果;l0pht组员知道它将是能“煽动气氛”的会议。
因此我们向他们陈述了报告,同时揭露了他们的不足。他们很难堪,那个不错的系统管理员,真正不赖的一个人,但我们在适当的地方安有嗅探器,并且我们监视到他试着在一个路由器上登录,他输入了一个口令,但口令无效,然后再试,还是无效,接着再试,再次无效。
这是所有不同的内部系统的管理员口令,而渗透测试人员在几分钟内就能得到。Mudge记得那是件既漂亮又容易的事。
语音信箱中最有趣的部分是他们谈论购买我们小组的事情。他们在给我们的语音信箱中说,“是的,我们需要你们所有的人。”但他们彼此之间的语音信箱留言确是,“好吧,除了Mudge,我们不需要任何其他人,他们一旦进来后,我们将尽快解雇他们。”
会议上,l0pht播放了捕获的一部分语音信箱留言,而执行官坐着听这些令人尴尬的对话。但精彩的好戏还在后面。Mudge先前提出了关于购买事项的最后商讨时间,即在这个报告会上。他饶有兴趣地讲起了那些细节。
于是他们走进来说,“我们很乐意给你们这些,这是我们能出的最高价钱,并且我们将会做好所有的事情。”但我们清楚地知道,他们所说的哪部分是真,哪部分是假。
他们一开始就采用偏低的估价。他们像是说,“好吧,你们是怎么想的?”我们如实奉告,“好,我们认为低于……我们不会答应做”,接着说出我们知道他们能出的最高价钱。
接下来就是这样:“哦,哦,我们必须讨论,为什么不给我们几分钟让我们单独留在会议室呢?”如果不是因为这种事情,我们会很认真地考虑的。但他们还是在试图捣鬼。
在报告会议上——两个公司代表之间的最后协商——Mudge记得“我们只是想让他们确信,这没有一台我们不能完全访问的机器。”Carlos记得几个执行官听到这些时“脸非常红”。最后,l0pht团队离开了。他们得到了15000美元,但那时没有卖出他们的公司。