本篇来自Darknet Diaries Podcast2022年4月5日EP114的HD Moore访谈
https://darknetdiaries.com/episode/114/
JACK: 你知道吗,在1982年,一台机器人被警察逮捕了?是的,听好了;它当时站在洛杉矶的北比弗利驱动道上,给人们发名片。它还会说话,对人们说一些随机的机器人的事情。嗯,它引起了一阵骚动。人们就站在那里,盯着它看。交通堵塞,汽车按喇叭;它确实闹出了一场风波。警察想要制止这一切。他们查看机器人周围和机器人内部,试图找出是谁在控制它,但他们没能搞清楚,于是他们开始拖拽它,而机器人开始尖叫“救命,他们想要拆了我。”警官断开了电源,把机器人拘留了。他们把它放在警车里,开到了比弗利山警察局。结果,其实是两个十几岁的男孩远程控制的。他们借用了父亲的机器人来派发他的机器人工厂的名片。
时间真是让我们对事物的兴趣发生了变化。如果今天有台机器人站在同一个角落发名片,几乎不会引起任何注意。但在1982年,那可真是一大景象。有时候我们只需要一些时间来适应未来。
这些都是来自互联网阴暗面的真实故事。我是Jack Rhysider。这里是《Darknet Diaries》。
JACK:你准备好了吗?今天你的第六杯咖啡喝了吗?
HD:喝了,是的。整壶我都喝完了。
JACK:你感觉…你听起来很兴奋。
HD: 我刚刚倒退了,我觉得。
JACK: 你说话很快,东西做得很快;对你来说一切都在不断前进。好吧,那你叫什么名字?
HD: 我叫HD Moore。
JACK: 你是怎么开始接触安全或黑客方面的事情的,青少年时期你做过哪些早期的事情?
HD: 我曾是互联网上的不良分子。我最早是在老式的BBS日子开始的,去朋友家玩,他很早就睡觉了,留下他的Mac和他的各种BBS账号,我就开始拨号,看看我们能连上什么,下载杂志,弄清楚如何拨入城里所有有趣的UNIX机器。
JACK:在城里怎样才能拨进所有有趣的UNIX机器呢?看,回到90年代,没有很多网站能让你无限地刷屏,但有很多电脑被配置成可以接受外部连接。连接这些电脑的方式不是通过互联网,而是直接拨打那个电话号码,看看有没有电脑接通。如果电脑接听了,现在就该弄清楚这台机器是什么,它为什么会对拨入的电话有所反应?你可能会发现一些奇怪的东西,一些你本不该接触的东西,只是因为系统没被配置好来阻止任何人。HD住在德州奥斯汀,他很好奇自己城镇里是否有电脑在等待连接。所以,他开始随机拨打电话号码,看看是否有电脑会接线。
HD:我母亲那时候是一名医疗记录员,互联网早期的好处是,为此我们家需要很多电话线路。我们有两三条普通的POTS线路,一条ISDN线路和两台电脑。她睡觉很早,所以她一睡觉,我就起来了,几乎每晚我都在整个512区号里用ToneLoc搜寻,这样持续了好几年。每当你找到些有趣的东西,你就试图弄明白它是什么以及你能用它做什么。回想那时候的有趣经历,比如说可以关闭各种百货商店的暖通空调系统,拨进无线电传输塔,还能摆弄那些装置。当然,那时候我还不到十八岁,也没太在乎后果,但整个过程真的让我对安全、安全研究,最终也对互联网产生了兴趣。
JACK:对HD来说,这是一种非常有趣的体验,在黑暗中摸索,试图找到一些有趣的东西,然后在那个系统中迷失一会儿。他对这一切都很着迷。最终,互联网开始逐渐形成,IRC变得越来越流行。这只是一个聊天室,HD在Phrack聊天频道上花了很多时间。现在,Phrack是连续运行时间最长的黑客杂志。第一期于1985年出版,到了90年代,它们已经积累了大量信息。如果你想学习如何黑入或破坏电脑,可以先阅读每一期的Phrack,读完后,你就会对黑客活动有相当的了解。所以,Phrack聊天频道就像是HD的家,他喜欢在那里待着,学习黑客技术。
HD:我们都用我们那些滑稽的别名,玩转漏洞,并在彼此之间制造混乱。突然,有个人给我发了个消息说,嘿,你找工作吗?我说,哦,是的,我确实在找。他说,嗯,你离圣安东尼奥不远,对吧?我说,哦,我可以开车过去。于是他安排了我跟Computer Sciences Corporation——现在只叫做CSC——面试,那时他们为我记得叫AFIC,或者——最终变成了AIA。但就是美国空军情报局,美国空军的情报部门,他们基本上是为空军内部的各种红队制作工具。我觉得,为军队编写漏洞工具听起来很有趣,我很感兴趣。所以,我是一个非常糟糕的程序员,现在也好不到哪去,但去那里是一份有趣的第一份工作,有些相当模糊的指示,比如——我们需要一个能在网络上监听数据包的工具,和这些东西一起用,或者扫描网络寻找开放的注册表键值然后做这些其他的事情,这是我的第一次专业经历,构建进攻性工具。
JACK:我认为DoD承包商的招聘人员在Phrack聊天室里找人来建构黑客工具,以测试空军的防御力量,这事儿有点怪。但事情就是这样发生的。HD现在开始将他的黑客技能用于正道,而且那时候他甚至还在上高中。在为这家承包商工作的某个时刻,他们要求他试着黑入当地的一家企业。那家商业其实付费进行了安全评估,想要看看他们是否有漏洞。
HD: 那真的很有趣。我们基本上就是大摇大摆地走进去,拿下了一切。里面也好外面也好,他们的HP 3000服务器也好,一切之间,玩得很开心。我们回到CSC,说我们想开始做更多商业渗透测试,结果他们回应说不行,我们只做联邦政府的项目。所以,我们整个团队就离开创办了一家新的初创公司。那就是Digital Defense。
JACK: HD 很喜欢为客户做安全评估,这其实就是一次渗透测试。客户会雇佣他们去检查他们的电脑系统是否有漏洞,他们也做其他事情,像监控安全事件,帮助更好地加固网络安全。但有一个问题,如果你问我,那真的是个大问题。在90年代末,漏洞是很难找到的。你看,让我带你了解一下典型的渗透测试是怎么回事。首先,你通常会想从一个漏洞扫描器开始。这个东西会告诉你网络上有哪些计算机,运行着什么服务,什么应用程序,甚至可能会给你一个关于软件运行的版本的概念,因为有时当你连接到那台电脑上时,它会告诉你正在运行的软件版本。现在,作为一个渗透测试者,一旦你知道了一台计算机运行的应用程序版本,你可以去查看是否有任何已知的漏洞。可能他们运行的是旧版本。现在问题在这里;假设是的,你确实找到了一个系统,它没有更新,正在运行一个有已知漏洞的旧版本软件。那么仅仅告诉客户他们的服务器没打补丁,需要更新是不够的。
客户可能会回击说,那么不更新真的风险有多大呢?所以,渗透测试者必须真的利用这个系统来证明如果他们不更新会出什么问题。他们需要像对手一样行动。但要获得那个漏洞,以便你能向客户证明这台机器是脆弱的,那是困难的部分。至少,在90年代是这样。一些黑客网站可能会有你可以下载的漏洞。这些通常是相当旧和过时的。所以,你可能会开始在聊天室里四处摸索,试图看看谁掌握了货。如果你运气好,你可能会被指向一个FTP服务器去下载一些漏洞,但那里没有文档,谁知道这个漏洞会做什么?它可能是一个真正的病毒。作为一个专业的渗透测试人员,你真的不能只是随便从互联网上下载一些随机的漏洞然后在客户的网络上启动它;绝对不行。谁知道那东西会做什么呢?它可能会在整个网络中传播一些恶性病毒或创建一些其他黑客可以进入的后门。所以,那会儿真的没有地方可以从中获得良好的漏洞,特别是没有地方可以获得最新最棒的漏洞。
HD: 当你进入2000年代,发生的事情是,所有之前与研究人员和社区分享漏洞的人们,显然要么是找到了真正的工作,停止分享他们的工具,要么是认为这样做有道德问题。但基本上,这些都枯竭了。它转变为一些商业公司。比如,大概在同一时间,Core Impact就是以商业化漏洞工具为目标。其他人决定不再做这件事或他们遇到了麻烦。所以,如果你是一家试图为客户进行渗透测试的安全公司,那时候要获得漏洞是非常困难的,而且也很难知道它们在不重写每一个字节的shell代码情况下是否安全。所以,获得正确工具和漏洞的挑战很大,你不得不在内部构建许多东西。
JACK: 嗯,他当时工作的公司并没有能力或专业知识或资源来开发自己的漏洞工具包。但HD作为一个有着强烈驱动力的人,是黑客文化的一部分,正在收集相当多的漏洞,并且了解它们的工作原理,并且编写了一些自己的漏洞。但这些漏洞是不组织的;它们散落在他的电脑上,没有文档,很难与他的一些队友分享,这就是为什么HD Moore决定制作Metasploit。
Metasploit是一个漏洞工具包,基本上意味着它是一个包含很多漏洞的单一应用程序。所以,一旦你加载它,就可以选择使用哪个漏洞,输入一些参数,然后在目标上发动它。它不是很棒,但它是一个基本的收集HD知道而且可以信任的,不包含病毒的漏洞。他制作的这个小工具帮助他进行安全评估,现在由于他制作了一个框架,他可以不断添加新的漏洞从而使它变得更好。但随着时间的推移,新的漏洞不断被发现,所以不断向Metasploit添加东西是一个永无止境的工作。
HD:嗯,我想这是一种结合了自己找漏洞,和朋友们分享,有时候上报漏洞,有时候不上报,然后我和我朋友整天分享利用程序的方式。我自己写了一些;它们不是非常好,但我一直都在写。然后你访问到了一些真正有趣的或者高知名度的漏洞,稍微玩弄一下,看看你能拿它做些什么。最初的Metasploit版本是非常基于菜单的,非常基于终端的。我们大概选择了漏洞,选择了NOP编码器,漏洞编码器,还有负载(payload),把它们组合在一起,然后发送出去。到了Metasploit 2的时候,我们把所有这些都抛到了脑后,提出了一个想法——你可以像拼乐高积木一样组装漏洞。所以,它不是——在这之前,大多数利用程序可能有一个负载,也许是两个。
JACK:哦是的,负载。负载是指你在利用了漏洞之后想要你的电脑做的事情。想象一下针头和注射器;针头就是那个漏洞。它让你越过了防御进入系统,但是一个空的注射器什么也做不了。负载就是注射器里的内容,就是在电脑被穿透后注入到电脑里的东西。所以,一个典型的负载是什么?它可能是打开门,给你命令行访问权限,也可能是上传一个文件并在你刚刚进入的那台电脑上执行它,或者可能是重启电脑。漏洞是进入的方式,负载是你一旦进入后采取的行动。是的,那些你当时能拿到手的漏洞,都有内置的负载。
即使你有权访问漏洞的源代码,并且能够构建你自己的负载,改变负载并不总是一个选项。即使你做到了,下次当你想要用那个漏洞搭配另一个负载时怎么办呢?你得重新编译整个东西,加入一些新内容,然后调整它以确保它能真正起作用。当然,你不想在你的客户电脑上运行别人制作的负载,除非你能检查源代码并看到它做了什么。HD意识到这是一个问题,并且将攻击的构建方式模块化。有了Metasploit,他让这个过程变得简单,给你提供了选择漏洞,选择负载,然后选择目标的选项。这使得黑客活动容易了千倍。
HD:所以,你不会再被一个负载或一个漏洞所束缚,你可以把任何负载,任何漏洞,任何编码器,任何NOP生成器都组合成一个链。这对于很多原因来说都很棒;在渗透测试中有更多的灵活性,你可以尝试一些非常有趣的非标准负载,而且因为一切都是随机的,很多基于网络的检测工具都跟不上。
JACK:因为一切都是随机的?这实际上是他在工具中加入的一个非常聪明的功能。所以,如果你置身于防御者的立场,他们显然不想在网络中运行漏洞利用程序,并且想要识别它们,不让那些程序运行,对吧?防御者可能甚至在防病毒程序中设置一条规则,说:嘿,如果有一个程序这么大,有这么多字节,这么长,叫这个名字,那么它是一个已知病毒。不要让这个程序运行。Metasploit所做的就是随机化这些部分。它们会给它一个随机的名称,一个随机的大小和各种随机的字符,仅仅是为了让防病毒工具难以检测。之所以让Metasploit尝试绕过防病毒,是因为确保网络安全应该是多层的。第一层应该确保网络中的电脑是最新的,并且已经打了最新的补丁。然后下一层应该是它们配置正确。如果这两者都失败了,那么防病毒可以检查发生什么事,并尝试停止正在进行的攻击。但是,如果防病毒阻止了攻击,它就没有测试那个系统是否安全。所以,它需要绕过防病毒工具来实际测试服务器的情况,一个好的渗透测试员会测试多层防御以确保每层防御实际上都起作用。
HD:所以,从定义上来说,Metasploit 默认就是具有规避性质的。
JACK:那时候,HD正在使用这个工具对那些想要检查自己网络是否容易被黑的人进行渗透测试。HD是加入这家公司的最初几个人之一,但他并不是任何领导角色,也不是经理什么的。所以,试想一下你是HD的老板,HD向你展示了这个自制的漏洞利用工具包,它被编程用来搜索和利用计算机中已知的漏洞,并且内置了有效载荷。显然,如果在合适的人手里,这就是一把武器。这是攻击者梦寐以求的东西。它包含的一些漏洞是高质量的,使它们非常危险,那时候几乎给了你访问任何东西的权限。他把Metasploit带到工作中,就像带进了一桶没有安全帽的注射针,其中一些是从可疑的地下场所捡来的。还有一些是DIY自制的,通常情况下,你会看到这些注射器在高技能专业人员比如医生,或者那些需要有益药物的人手里,或者是毒品成瘾者。所以,一桶注射器可能极其危险或极其有益。并没有真正的中间立场。Metasploit也是一样,这是一桶一些相当可怕的漏洞,如果在办公室放任不管,将会是一个相当大的问题。所以,带这样一个工具包到工作中,嗯,HD的雇主并不支持这个工具。
HD:我想更准确地说,他们对它感到恐惧。他们不想与我正在从事的任何事情有关联。但同时,他们有点依赖我,因为我负责大多数渗透测试操作。
JACK:他们为什么感到恐惧呢?
HD:对漏洞和责任的恐惧很大。担心的是,如果我们发布了一个漏洞,然后一些坏人用它来黑进别人的系统,不知怎的,我的公司可能会负有责任。所以,他们想尽可能远离它。我们的主要客户群是信用合作社,它们本质上比较保守,可能现在仍然是这样。他们不想知道,他们雇佣来进行安全评估的人,同时也在互联网上发布和开源漏洞利用工具。
JACK:这是一个有趣的二元对立,不是吗?一方面,如果你要测试一个公司是否容易被黑,你需要这些攻击工具,这些武器。但是没有人会问渗透测试者,你从哪里弄到你的武器?他们只是假设,既然你是个黑客,你就知道怎么做。但这不像你只需输入几个命令就能绕过一些安全措施。那就像每次你要做评估都要重新发明轮子一样。你需要适合这份工作的工具,一套你知道能用得很好并且可以信赖不会在客户网络上放置恶意软件或造成伤害的攻击套件。但是确保这一切的工作量很大,如果你为自己制作了这样的黑客工具,然后可能还让别人使用,这听起来的确像是会反咬一口的。如果有人用它来真的犯罪,你要承担多少责任?所以,他必须做出决定该怎么处理这个Metasploit工具。如果他的工作不会帮助他完成这个,他应该怎么做?
HD:嗯,这是那些事情之一,一方面,他们不支持它;另一方面,我们迫切需要这个工具来完成我们的工作。它变成了一个晚上和周末的事情。所以,我下班之后就会花剩下的整个晚上不睡觉,研究漏洞攻击,编写shell代码,尽管一开始这些攻击手段并不尽如人意,但我最终还是变得更好,最后我们得到了一些足以单独使用而不仅仅是糟糕的脚本小子工具或重新编写一堆新漏洞的东西。这导致了——我认为我的第一次旅行是去马来西亚的Hack the Box去讲述这个。那是一次很棒的经历,真的能得到反馈,了解它与其他人当时所做的有多不同。这真的有助于给我动力继续研究它。它也帮助我找到了合作伙伴。所以很快之后,我见到了Annette, Spoonm,紧接着就是Matt Miller或者说Skape。他们加入了团队,然后我们将其作为边项目继续维护了好几年。
JACK:所以,在2002年,他首次与他人分享了Metasploit,这立即引起了一些人的极大兴趣,他们想要帮忙制作这个工具。随着有些人帮他,到了2003年,他决定公开发布Metasploit,供其他人下载和使用。毕竟,它为他提供了很多价值来更好地完成工作,所以很可能也会让其他渗透测试者更容易地完成他们的工作。他还决定免费提供,重要的是,他将其开源,这样任何人都可以检查代码,以验证其中没有太糟糕的操作。
HD:因此,创建了metasploit.com,那是我们首先开始发布一些我们自己想出来的、比其他人的要小很多的Windows shell代码的有趣变种的地方。然后最终,它成为了我们分享Metasploit框架代码的地方。当然,缺点是这为其他人提供了一个攻击目标。所以,一旦我们开始将Metasploit框架的版本发布到metasploit.com,我们就开始遭受DDoS攻击,漏洞攻击尝试。情况变得如此严重,以至于有一个家伙实际上并不能黑掉我们的服务器,于是他黑了我们的ISP,通过黑进ISP的基础设施,ARP-欺骗网关,然后用它将我们的网页重定向到他自己的网络服务器。所以他无法黑掉我们的网络服务器或者篡改它,但他只是重定向整个ISP的流量,只为了能够篡改metasploit.com。
JACK:等等,Metasploit的网站遭到攻击?被谁攻击?
HD: 在早期,每个人都讨厌Metasploit。我的雇主讨厌Metasploit,我们的客户也讨厌Metasploit。他们认为它很危险。所有的黑客,所有在地下交易漏洞的人,他们绝对讨厌我们,因为我们把他们认为是自己的东西提供给了其他人。所以,这是其中一件事,专业人士讨厌它是因为他们认为这是一个脚本小工具。黑客讨厌我们,因为他们认为我们在拿走他们的东西,所有的专业人士、雇主和客户一开始就认为这是可疑的,所以要花很长时间才能克服这些。但与此同时,我们不断遭受DDoS攻击,有人试图污损我们的网站,有人冒充我的身份,在网上以我的名义做各种糟糕的事情,不胜枚举。
JACK: 有人决定因为发布漏洞而攻击HD。他们想不出对他的有效攻击方法,所以就花时间查明了他工作的地方,决定攻击他的雇主。他们扫描了雇主的网站,并发现了一个演示站点。那并不是雇主的主站点;它是一个演示如何破解密码的工具。嗯,这个演示站点正在运行Samba服务,但它已经完全打了补丁,所以不应该有通过Samba服务进入的方法。HD甚至尝试用Metasploit攻击它,但没有找到进入的方法。但有人确实知道一个Samba的漏洞。他们开发了自己的漏洞利用程序,攻击了HD雇主的网站,试图进入系统。但是他们的负载没那么有效,导致服务器崩溃了。
HD: 所以,我收到了这个警报,机器基本上是关闭的,它崩溃了。我们开始时就很好地捕获了进出那台机器的所有流量,正因为此,我们能够提取出最初的漏洞利用程序。
JACK: 哇,这太吸引人了。因为HD捕获了进出那台机器的所有流量,他能够找到用来利用Samba服务的确切代码,这简直不可思议。我的意思是,这就像在大海捞针。但当他研究这个用来利用系统的代码时,他意识到这是一个完全未知的漏洞,这就是所谓的零日漏洞。HD能够分析这个并学会了如何自己使用它。
HD: 做了一些分析,然后联系了Samba团队说,嘿,Samba里有一个非常严重的远程0-day漏洞。所以,我们编写了我们自己版本的漏洞利用程序,放到了metasploit.com上,那就是与——我甚至不知道是哪个组织的长期战争的开始,但他们接下来的两周都在DDoSing我们网站,因为我们泄露了他们的漏洞。不仅泄露了它,而且写了一个更好的版本。
JACK:真是太棒了。因为有人不喜欢HD创造了Metasploit,他们攻击了他的雇主,这让他发现了他们的漏洞,然后他报告给了Samba团队让它得到修复,之后他又把它加入到他的工具Metasploit中。这让攻击他的人对他更加愤怒,他一直不断地遭受这样的攻击。
HD:就像有些人喜欢给我老板发邮件,让他解雇我这样子。我们有一些……
JACK:但是是啊,为什么人们想要你被解雇呢?
HD:他们觉得公布漏洞是不负责任的,我是公司的一个风险,他们不希望我因为我在业余时间所做的事而有工作。
JACK:嗯。他们有道理吗?你有同感吗?
HD:这给了我很好的动力去更加努力。
JACK:那么,某个人对你周末在做的副项目不满到要说‘我要对付这个家伙HD;我要毁了他,我要给他老板发邮件让他老板炒掉他’的程度,这在我看来就像是‘取消文化’的前身,尽管当时还没有‘取消文化’这个词。
HD:我猜这和现在没有太大不同。我觉得或许对他们来说,那是一种道德伦理的困境。他们认为我在做某件道德上不对的事,因此理应受到惩罚。但的确,这种压力很大。不仅来自黑帽研究人员和那些不喜欢我所做事情的客户,而且还来自其他的安全供应商。他们说如果你想和我们做生意,那你就得掩盖这个漏洞。你不能谈论这个。
JACK:哇,所以当他在他雇主的商业伙伴之一的公司里找到一个漏洞时,如果HD发布了利用该漏洞的代码,并将其加入到Metasploit中,那个公司绝对会不高兴的。因为记住,Metasploit使黑客活动简单了太多,这意味着如果漏洞在这个工具里,那么利用该公司的产品变得轻而易举了。所以,他们会对他大发雷霆,让他撤下谈论这个漏洞的博客文章,并且从工具中移除它。他们甚至威胁如果他不服从的话,就要取消他们与他雇主的合作伙伴身份。事情变得相当丑陋,而他的雇主对HD也越来越不满。他经常发现自己成为许多攻击的目标,但这就是他的领域;黑客活动,攻击,防御。这些都是他白天的工作内容,但也正是他晚上为乐趣所做的事情,他甚至梦想这些事情。所以,如果有人攻击HD Moore,你知道他肯定会以此为乐。
HD:发生的事是我们发布的某个被利用的漏洞,正在被一些制作僵尸网络的黑帽子们所积极利用,他们对此非常愤怒,决定用那个僵尸网络来对metasploit.com进行DDoS攻击。但他们没意识到,Metasploit不是一家公司。Metasploit只是我业余时间运营的一个副项目,我认为他们花这么多时间去DDoS它挺好笑的。不过,我并不喜欢他们对我喜欢合作的ISP进行DDoS攻击的这个事实。
JACK:所以,这个僵尸网络(botnet)攻击了他的两个DNS名称,metasploit.com和www.metasploit.com。它发送了如此巨大的流量以至于网站无人能用,实际上相当于瘫痪了。HD调查了这个僵尸网络,发现了控制它的地点。他找到了它们的指挥和控制服务器,或者说C2服务器。
HD:碰巧他们也有两个指挥和控制服务器。所以,灵机一动。就像,那好吧,我们让www.metasploit.com指向他们其中一个C2,然后再把他们的域名指向另一个,然后坐下来等几周,看看会发生什么,对吧?所以,因为那些是僵尸网络的控制服务器,并且僵尸网络正在对其控制服务器进行DDoS攻击,他们被锁定在自己的僵尸网络之外,直到我们更改DNS设置。所以,我们实质上劫持了他们自己的僵尸网络,基本上无限期地让它淹没他们自己的C2,直到一周后他们最终给我们发邮件,说请可以还给我们吗?
JACK:等等,什么?他们给你发邮件了?
HD:是的,因为他们不知道还有什么别的办法能联系到我们。所以,他们基本上失去了自己的僵尸网络。我们说好吧,别再对我们进行DDoS攻击了。他们说好的,我们不会了,就这样结束了。我们再也没有被DDoS攻击过。
JACK:我们要快速进入广告时间,但别走开,因为HD接下来还有更多故事。你认为你与哪些圈子有关吗?因为我感觉你好像一脚踏在三个不同的领域。一方面,你身处Phrack IRC频道,它通常在那个时候是黑帽黑客,对吧?这些人可能是黑客行动主义者或真正的网络罪犯。然后你和美国国防部(DoD)有关系,然后你还有你的专业关系,在这里你试图展示自己,看看,我有真正的本领,在这里我可以为某个费用进行这类渗透工作。我是个专业人士,这个事情,而且我还在开发一个可以供专业人士使用的工具。所以,在这个情况下,你感觉你最像在家里的是哪里?
HD:这是个好问题。我确实在所有那些群体中感到自己像局外人。Phrack 频道在2000年左右发生了很大的变化,它曾经是一些颇受尊敬的黑客研究员类型的聚集地,后来被一群自称为 Phrack High Council 的恶作剧者接管了,我和那些人相处得不好。这导致了持续多年的不断恶作剧和混乱之类的事情。即便是在专业方面,除了同事之外,我也真的没什么人可以和我一起出去玩,我在那里确实有一些好朋友,但是总感觉我在这三个圈子中都有点像外人。
JACK:是的,因为我知道黑客社区里这种内斗情况。当一个黑客认为自己很了不起,他们会发表一些东西,做一个网站之类的。其他黑客会尝试把他们的信息公开并攻击他们的网站,就是这样不断地做。你觉得这就是这种情况吗,就是一些黑客对抗黑客的事吗?比如说,看吧,我是一个比你更聪明的黑客?还是感觉不是,你不是我们中的一员,给我滚出去的那种攻击?
HD:这绝对不是友好的。我和一些朋友总是会相互攻击对方的东西,这没什么大不了的。你会说嘿,看看,检查你的家目录;那里有一个文件,或者其他什么的,对吧?这些人,他们会偷你的邮件池,然后在互联网上公开它,他们会用你的名字伪造东西,试图让你被解雇,试图让你被逮捕。在 swatting 出现之前,他们做了各种事情几乎是为了毁了你的生活。这是不折不扣的;我们会毁了你,祝你好运,应对吧。所以这绝对不是那种好玩的类型。
JACK:到这个时候,HD 和 Metasploit 的团队自己已经发现了许多新的不为人知的漏洞,一些软件制造商甚至不知道这是一个问题。他们通过扫描互联网,攻击自己的测试服务器,试图破坏自己的电脑来实现这一点。但是,当你发现某款软件中的一个未知漏洞时,你会做什么?好的方法是找到一种好的途径向供应商报告,对吧?但是HD和向供应商报告错误方面有一些历史。
HD:在我十几岁的时候,还在上高中,我为了好玩,正在研究 NT4 的一些漏洞,比如旧的 HGR 缓冲区溢出等。一天,当我在那里溜达的时候,我发现了一种绕过他们国家验证的方法,用来下载——我想是 Microsoft 的 NT Service Pack 4。所以它不是根据你的IP地址做地理定位,而是查看你在 URL 中放进去的参数,你基本上可以从俄罗斯或其他地方下载 NT SP6 的高加密版本,当时因为所有的出口控制这不是一件好事。所以我联系了当时还很新的 Microsoft 安全团队,说嘿,你可以绕过你所有的出口控制;这可能不好。他们就像,那你想要什么?我说,我什么都不想要,但你们有什么?他们说那你想要什么?我就像,我可以有一个 MSDN 许可吗?那会太棒了。那是与那里的安全团队一系列非常奇怪的互动的开始。快进到……
JACK:我在想 MSDN 许可是什么来着。
HD:MSDN 许可是一种许可证,它允许你访问 Microsoft 制作的所有操作系统 CD 和媒体。所以,如果你有一个 MSDN 许可证,基本上你可以安装任何版本的 Windows,任何版本的 Exchange Server,所有那些东西。因此,对于黑客或做安全研究的人来说,这是一个金矿,因为你可以在一个地方获得所有的批量安装程序和数据。
JACK:懂了。好的。
HD:所以,让我们快进到我的第一家初创公司,在那里我发现了 Microsoft 产品的漏洞,做了大量关于 asp.net 和配置的工作,还有我们在渗透测试中遇到的其他问题,而 Microsoft 不喜欢别人报告漏洞。他们会尽一切可能让你闭嘴。他们不喜欢有人发布他们平台上漏洞的利用代码。我在的第一家初创公司是 Microsoft 的合作伙伴,所以我们有 MSDN 的折扣之类的,用于内部许可,而 Microsoft 的一位先生不断给我们的 RCO 打电话说,嘿,你需要阻止这个家伙发布东西。你需要解雇这个人,不然我们就要取消你们的合作伙伴许可。所以,他们不断向我的同事、我的老板和 CEO 施压,基本上是因为我发布漏洞的工作而要摆脱我。这只是让我愤怒;关于这件事我很早就心存不满了,等到我参加在马来西亚的 Hack the Box 比赛来宣布 Metasploit 时,他们有一个 Windows 2000…那是什么?我记得那时候宣布的是 Windows 2003 服务器,他们有一个它的 CTF。我就想,太好了,我参加这个 CTF。
JACK:所以,CTF 代表 Capture the Flag。这是很多黑客会议都有的挑战,他们把一台电脑放在房间中央,看谁能黑进去。在这种情况下,它是一台全面打了补丁的 Windows 电脑,HD 很好奇他是否能找到漏洞进入其中。所以,他创建了一些工具发送随机命令和输入,他能发送的任何东西来尝试使它出现故障。果然,他让一台全面打了补丁的 Windows 电脑出现了故障。于是,他检查了自己发送给这台电脑导致它故障的数据,并能够利用这些数据创建了一个漏洞利用工具,让他能远程访问系统。现在,由于这是 Microsoft 不知道的一个bug,而 Microsoft 当时在这个黑客大会上做赞助,他就上前告诉了他们这个问题。
HD:他们说太好了,请向我们报告。我说不,这是我的。我会因此获得奖励吗?你们打算怎么处理它?我发现了这个漏洞。这是我想怎么处理就怎么处理的东西。于是我就向Hack the Box报告了这件事,我说,嘿,微软正试图压力我不公开我发现的这个事情。这不是重点,对吗?重点是,我发现了你们服务器的一个bug;现在我要谈论它。我会和你们分享,但我的想法是之后要发布它。结果他们把整个事情都压下去了。所以,我间接听说微软威胁要撤销对Hack the Box大会的赞助,只要他们让这个漏洞被公布。整件事情就被掩盖了。
JACK:当时微软并没有像他们应该那样重视自己的安全问题。他们没有公布他们找到的所有漏洞,也没有为人们找到的漏洞提供奖励。正如HD所说,他们请求人们不要公开发布漏洞。他们认为隐藏其中一些攻击会更好,这样就没人知道它。但大约在这个时候,2002年,比尔·盖茨向微软的每个人发了一封著名的备忘录,其中说安全现在是业务的优先事项,他们开始了一个叫做Trustworthy Computing Group的新计划。HD看到他发现的这个漏洞在大会上造成了问题,他喜欢那个大会,不想让他们失去最大的赞助商,所以他同意就坐在这个漏洞上,什么也不做。六个月后,别人发现了同一个漏洞并报告给了微软,然后他们得以解决它。直到那时,HD才发布了他的版本。
HD:所以简短的版本是,我很高兴告诉那些厂商这件事,但我也想在某个时间点公开它。这是那些当时压根儿没动力公开向他们报告的漏洞的厂商,无论是压根儿不公开,还是坐在上面一年、两年,甚至永远不披露。他们会尽一切所能给你施压,不让你公开。微软可能是当时最大的-之一,是施压研究人员不公开他们发现的漏洞的。
JACK:你知道那时候他们有没有一个-即使是他们公布的漏洞列表?
HD:我认为微软-那个时候有CVEs,微软有他们的安全忠告,但是安全忠告只是冰山一角。有太多东西被报告给他们,他们就把它压下去了。保持这些秘密的挑战,无论是因为你是厂商不想让人知道而且市场反映不好,还是你是黑帽子试图用它来入侵系统,都是因为外面的其他人无法保护自己。他们不能测试自己。他们不知道他们是否真的容易受到攻击,他们买来防止被利用的安全产品是否真的起作用,对吧?所以,关于一个最近披露的漏洞拥有公开可用的利用程序,一个很好的事情是你可以确保你所有的减缓措施、所有的控制、所有的检测,都在按照它们应该工作的方式运作。其他人则不想要这样。
JACK:当时,微软的浏览器是Internet Explorer。HD因为之前和微软打交道时背上了一块心理负担,所以决定看看自己能在Internet Explorer上找到多少漏洞。
HD:基本上就是我和几个朋友,我们一起组建了一些浏览器fuzzer。我们使用浏览器自己的JavaScript引擎,就这样发现了成百上千的漏洞。我们测试了Windows上每一个ActiveX控件,结果发现它们全都一次性出了问题。所以,我们基本上创造了这个大规模的漏洞生成器,在那时候,我们手头大概有600到700个漏洞,但供应商们对此却毫无作为。
JACK:他不断向微软报告一个又一个的漏洞,但从他的角度看,没有任何事情被处理。那么,当你已经告诉了供应商很多漏洞,而他们没有采取行动,而你还有成百上千个时,你会怎么做呢?
HD:最后我们就放弃了。我们说,知道吗?我们要来一个整月;我们打算连续一个月每天公布一个0-day漏洞,这样做完后我们手头还会剩下好几百个。我认为,正是那一连串的事件和那个特殊的情况,最终导致了ActiveX和Internet Explorer的终结。
JACK:为什么?你为什么这么认为?
HD:嗯,当第三十或第四十个ActiveX漏洞被报告之后,我们就像,嘿伙计们,我们还有两百到三百个。我们可以一整年都这么继续下去。这明显表明他们意识到了实现ActiveX控件和Internet Explorer的安全方式是不存在的。
JACK:微软意识到他们产品中的安全性不够好。他们需要做得更好,实际上他们已经在这方面努力了。事实上,他们开始向那些向他们报告漏洞的人提供工作机会。
HD:所以,如果你之前是在向微软报告大量漏洞的人,突然间你就得到了工作邀请。我的意思是,有一个了不起的安全研究小组叫LSD,来自波兰,这个团队中的三个成员在那段时间加入了微软。
JACK:那他们联系过你吗?
HD:我们是朋友。我在马来西亚遇到过他们,在各种会议上也会见到他们。微软在早期确实向我发出了一些邀请,但我回应的条款很荒谬,基本上就是不可能的任务,因为我觉得他们并没有把社区的最佳利益放在心上。他们绝对会关闭我正在做的任何东西。大部分情况下,这是真的;那些在做过漏洞研究后接受了微软工作的人,你再也没听到他们有任何消息了。
JACK:嗯,你能想象如果那发生了会怎样吗?如果HD被微软雇用了?他们可能会尝试完全关闭Metasploit,那将是一个巨大的损失。因为当时Metasploit开始变得越来越受欢迎,尽管它被很多人讨厌,但却在被更多的人使用。遍布各地的渗透测试员开始把它作为测试网络安全的首选工具之一。它正成为一种至关重要的和惊人的工具,因为它使渗透测试员的工作比以前容易多了。随着对渗透测试员需求的增长,对更好的渗透测试工具的需求也在增长。当然,一直以来,Metasploit都是免费和开源的,这样社区就可以查看源代码,验证在你黑掉某人电脑后,没有恶意软件被安装上去。安全社区正在慢慢地采纳并越来越喜欢它。好了,随着时间的推移,微软真的在处理研究人员发现的漏洞上加强了他们的游戏。他们修补问题的速度变得更快,并且开始意识到他们不能控制外部研究人员发现的漏洞。
这甚至对今天的公司来说都是一件难事。如果有人在你的产品中找到了漏洞,你无法控制那个人会怎么处理那个漏洞。你可以尝试提供漏洞赏金奖励给他们,但那并不意味着研究人员会接受。他们可能会把它卖给其他人,或者公开发布,让所有人都能看到。软件供应商无法控制人们如何处理他们发现的漏洞,而像HD这样的人,就一直在发布漏洞,清楚地表明了这一点。微软有一个只有微软员工参加的内部会议。它叫做蓝帽子(BlueHat),在某个时刻,他们开始邀请来自微软外部的安全研究人员来参加发表演讲。HD认识其中一个要发表演讲的研究人员,并被邀请一起在蓝帽子会议上共同演讲。所以,HD有机会去参加这个独家的微软会议,并向他们的开发人员展示。我只能想象你的演讲就像是,这里有400个微软的问题。
HD:是的,大部分都是那样的。就像是,一个很好的例子是回到——是哪年来着?大概2005年左右,我在飞往蓝帽子会议的飞机上时,正在玩一个我当时叫做KarMetasploit的工具,或者说Karma遇上Metasploit。Karma是一种说服无线客户端加入你假冒的接入点,然后立刻开始与你通话并尝试像你是个文件分享者或打印机一样进行认证的方法。所以,本质上如果你的Wi-Fi卡在飞机上启用了,而另一台笔记本电脑上的人正在编写这个工具,他们就会加入你的假接入点,尝试自动访问公司资源,两次给出他们的密码,然后提供很多可利用的场景,让你能够接管他们的机器。所以,我们认为在我们飞行到蓝帽子会议的飞机上运行这个工具会很有趣,果不其然,我们在这个过程中取得了微软员工的一堆密码哈希。
JACK:你这个小捣蛋鬼。
HD:那是有趣的时光。
JACK:你对这个负责任披露问题持什么态度?你是想尽快修复这些漏洞还是你更倾向于——你怎么看——如果你发现了一个漏洞应该怎么办?
HD:走过那条路好几百次后,我发现让一个漏洞得到快速修复的最快方法就是当天把它发布到互联网上。不管这样做是否负责任,但这很有效。
JACK:嗯,他有一个观点。这确实是真的;如果你发现一个漏洞并希望尽快得到修复,就应该以最大声势公之于众,这样它就会快速得到解决。但尽管这是最快的解决漏洞的方法,这不是负责任的做法,因为这样做会让很多无法阻止攻击的人暴露风险之中。这意味着犯罪分子可能会在漏洞得到修复之前利用它,这将使很多人面临风险,也就是说,你可能造成的破坏比帮助更大。更好的方法是私下告诉软件制造商,并给他们时间来修复。但是当你给了他们足够的时间,他们却还没修复,那么他们可能需要一点压力来让他们行动起来。有时为了让公司有动力,你需要给他们一些负面的公关压力。
HD:这确实取决于漏洞的性质。这几天,我越来越倾向于采用一种所谓的98披露政策,你先给供应商45天时间了解这个问题,然后再告诉其他人做为一个防死机制。如果供应商对此置之不理,信息泄露了,那么其他人不管怎样最终都会公布它。过去几年我一直在使用这种策略,与US-CERT合作,每当你向供应商公布一个漏洞,他们将有45天的独家处理时间,45天后,信息会转交给US-CERT,或者说是CERT CC,他们实际上保证在45天后会发布它。所以,这种模式的好处在于,你在分担责任;你确保供应商认真对待并及时发布补丁,但你也不需要直接在互联网上公布它。因此,有这样一个第三方真的能减少供应商向任何单个研究者施压的能力,因为那时信息已经在另一方手中了。
JACK:有几个组织采用了同样的模型。趋势科技有"零日计划",谷歌有"项目零"。这些团体都在寻找漏洞并向供应商报告,然后给供应商90天时间来修复。之后,他们就会公开发布。所以,供应商知道如果他们从这些团队收到一个漏洞报告,他们必须要迅速行动,修复漏洞,避免公开后引发公关噩梦。看到像谷歌这样的大型科技公司在和软件制造商玩这种硬球游戏实在是太疯狂了。但这一方法效果还不错。因为现在我们看到趋势科技发布了一些诸如惠普这样的大公司的零日漏洞,因为惠普没有足够快地修复他们的漏洞。
HD:是的,很棒。我认为这是有效的;有时候你不得不这么做。你之前和惠普的那些人谈过,他们的想法是,如果我们公布了一个零日漏洞,那就是团队获得所需资源来修复产品的唯一方式。
JACK:在某个时候,Metasploit增加了一个新功能,叫做Meterpreter。
HD:Meterpreter是Matthew Miller,又名Skape的创意,还有很多其他人也参与了这个项目,但他实际上是这个架构的设计者。
JACK:Meterpreter是一种有效载荷。记住,有效载荷是你希望在你的利用手段为你打开了门之后发生的行动。但Meterpreter有效载荷就像是终极有效载荷。它让你可以在你刚刚黑入的目标系统上做很多事情;你可以查看正在运行的进程,可以向该系统上传文件或下载文件。它帮助你提升权限或者抓取存储密码的哈希文件。想想看,这有多疯狂。比方说你使用Metasploit进入了一台计算机,然后只需一个命令,hashdump,它就知道密码文件在那台计算机上的确切位置,然后它就去抓取这些文件,下载到你的计算机上,你就可以开始在本地破解密码。你不需要知道密码文件在那台计算机上存储的位置;Meterpreter会帮你搞定这点。你只需要知道一个命令,hashdump,你就搞定了。但Meterpreter的功能远不止这些;它让你能打开麦克风,监听麦克风能捕捉到的任何声音。它让你能打开摄像头,看到那台计算机能看到的东西。它让你能截图,看用户现在正在做什么。如果你想看用户按的是哪些键,它还可以让你安装键盘记录器。Meterpreter是令人难以置信的,但有了这样的有效载荷,它让Metasploit变得更加危险。我是说,所有这些特性如果被错误的人滥用,会造成很大的破坏。
HD:对于那些供应商来说,这是可怕的,因为相比之前那些他们可以轻松检测到的非常简单的有效载荷,现在利用手段可以滴入任何东西。它们可以滴入经TLS-加密的连接包。它们可以滴入实际上是迷你恶意软件的东西,这些恶意软件能自动转储密码哈希,并通过你想要的任何协议进行通信。所以,我们让利用过程中的有效载荷这一侧变得难以置信地复杂和强大。这是Metasploit的一些特性,特别是Meterpreter,开始与恶意软件世界非常接近的时候之一。
JACK:对,我觉得我想往那个方向走,但你做的不仅仅是一个概念验证,就是说,看看,我可以进入你的机器,然后这是我的ID,我以什么进程ID运行。你打造的——Meterpreter让你完全访问那台电脑,允许你截屏、做键盘嗅探之类的,所有这些都是更加挑衅性的事情,我不知道这是否太过火了。这就是我在想的——它不仅仅是一个概念验证;我们可以彻底摧毁这台机器,虽然我猜你得某种程度上证明这点,以展示这个漏洞的严重性,但它几乎对我来说走得太远了。你怎么看?
HD:嗯,我最喜欢Meterpreter的一点是,我们有办法在内存中加载VNC桌面共享服务,作为负载的一部分。我们在Metasploit中配置好了,所以你真的运行Metasploit的攻击代码,你会立马在屏幕上看到一个桌面,能够移动鼠标光标,能在他们的键盘上打字。这就是通过攻击通道本身,立即访问机器的远程图形界面,那时候对于负载来说简直令人震惊,因为它不依赖于RDP或者类似的东西。它也不依赖于防火墙是否打开,因为它会和你建立连接,然后代理。这种传递方式真的很了不起。那个特定的负载震惊了很多人,使我们很容易展示一个攻击的影响。
如果你在做完渗透测试之后,试图向一个高管展示,嘿,我们进入了你的服务器;这里是我们做目录列表的命令提示符,那是一回事。但是如果你展示你真的接管了他们的服务器,你连上网络两秒钟后就在他们桌面上移动鼠标,那就是你可以展示的一个完全不同级别的影响。它也让我们构建了很多其他非常复杂、非常有趣的用例,真正展示了攻击的影响。这不仅仅是哦,你有一个漏洞没打补丁,现在我有了一个命令外壳。不是这样的;不,不;我拥有你系统的所有访问权限,不管它是什么。
JACK:是的,我想这也是吸引我来到Metasploit的原因,哦我的天哪,它不仅仅是一个漏洞攻击,而是你在获取进入之后用漏洞攻击来做什么。但正如你所说,Meterpreter开始变得接近成为它自己的恶意软件。解释一下你的意思。
HD:嗯,即便是今天,很多恶意软件负载都是用C语言写的,它们有所有这些高级的通信渠道和C2联系机制,还有所有这些样板文件,比如提供链式加载负载,下载更多东西,与后端通信,在不同后端之间跳转。我们把Meterpreter做到了它实际上拥有一些更高级恶意软件的能力,这时它开始对我来说有点过界了,因为我们不想做恶意软件行业的事。我们在这儿是为了展示攻击的影响,让人们测试他们的系统,通常来说演示安全控制失败或缺少补丁的安全影响。但我们并不是在这儿持续感染机器,Meterpreter非常、非常接近这条线。真正让它和实际恶意软件区分开的是,它始终只基于内存。它从来没有在磁盘上。
JACK:嗯,这是个很奇怪的领域。Metasploit的唯一工作就是黑入计算机。无论你是否有权限这么做,这就是它的目的。但似乎用它的人的意图告诉我们Metasploit是恶意软件还是有用的工具。因此,Metasploit团队必须非常小心地使用这个工具。现在这是一个多开源的、多开发者的项目。你们是否有某种宣言,或者开会说好了,伙计们,这是我们的路线——我们要全力以赴,除了不留后门。是否有类似的宣言?比如你刚才说的,你不想让你的客户变得更弱。这是一个安全的——这是个专业工具;是否有些书面的东西?
HD:从来没有书面的宣言,但这不是一个伦理界限;它只是一个实际的界限。如果你在渗透测试过后Metasploit会在你的机器上留下垃圾或以某种难以修复的方式留下后门,你就不会用它来做渗透测试。有些漏洞可能需要创建一个临时的后门用户账户或者创建可能会增加更多风险的东西,我们一直非常小心地记录下利用漏洞后的场景。比如,在你运行这个东西之后,你需要做另一件事,所以我们创建了这些事后清理模块来移除任何痕迹。但这也是我在抗争的事情之一,因为我真的很讨厌不得不降低系统安全性这样的事——作为利用过程的一部分。这也是违反直觉的;这有点违背我们最初努力的目标。
JACK:是的,我知道。我的意思我没表达好,但这就好像你直接戳到客户的眼睛,你却说我们不想伤害你。
HD:那就是了;你尝试成为一个专业的对手。所以你得有最可能残酷、恶毒地对待问题的方式,就好像你会用其他人也会使用的同样技术。但你需要划定界限,关于你在何处留下客户,以及攻击的实际影响是什么。
JACK:好,所以我们听说HD有很多敌人,对吗?网络犯罪分子不喜欢他公开他们的武器,让它们失效,老派黑客不喜欢他让黑客行为变得如此容易以至于一个脚本小子都可以做一些惊人的事情,而供应商不喜欢他公布他们的漏洞。他被这些人从四面八方攻击。但还有一个对Metasploit不满的群体;执法部门。有人用Metasploit犯了罪。
HD:这是我第一次编写Windows shell代码。Metasploit发布的第一份Windows shell代码在它发布后不久就被Blaster蠕虫病毒利用了。
JACK:看吧,我的意思是什么?有一个大规模的蠕虫病毒,使用了他发布的信息去做肮脏的事情。就在今天,我读到一篇文章,文章说在2020年,有超过1000个恶意软件活动利用了Metasploit。那么,在你制造的工具被罪犯使用的情况下,会发生什么呢?让我们回顾几个其他案例。我做了一期关于Mariposa僵尸网络的节目。启动这个僵尸网络的人都被逮捕了,但他们不是开发僵尸网络的人。Butterfly僵尸网络是由一个叫Iserdo的家伙创建的,但这个Iserdo家伙所做的,只是开发了工具并释放出去。他从未用它攻击任何人,但他仅仅因为开发工具就被逮捕并判入狱了。法庭证明的是,他明知故犯地将其提供给罪犯用于犯罪。或者我们来看看Marcus Hutchins的案例;他开发了一种后来被称为Kronos的恶意软件,但他只是开发了它。他从未向任何人发起攻击。但正是因为他将其提供给了使用它去攻击银行的人,这才是Marcus被FBI逮捕的原因。在这两个案例中,问题归根到底是软件制造者是否有意将这些黑客工具提供给打算用它违法的人。但HD声称他对人们如何使用他的工具没有责任。
HD:我不知道,如果你做了一堆饼干,把它们放在街上,然后说饼干免费,如果罪犯吃了饼干,我们负责吗?我不知道。我觉得这是不同的。它是开源的,是基于社区的,是公共领域的。每个人都在同一个竞技场上。我觉得这是那种情况,如果你只是将这些漏洞、这些武器提供给犯罪社区的某人并为此收费,那是一回事。但如果你是为了帮助每个人理解事物的运作,并测试他们自己的系统而创建项目的,糟糕的行为者恰好也拿去使用了,这看起来像是一件完全不同的事情。
JACK:但我担心HD,因为他将Metasploit带到黑客会议和黑客聚会上去演示和教授它给那里的其他人。大家都知道这些地方有罪犯出没。我的意思是,光是和他在Phrack这类黑客聊天室里分享,他怎么可能一直都没发现他刚刚教会或者给过东西的那个人是个已知的罪犯?你在这个项目上有律师帮忙吗?
HD:没有。偶尔我会寻求帮助,但通常不是我自己雇的律师。通常是我认识的一些恰好是律师的人会给我一些建议。
JACK:但这就是我问律师的原因,是否你们有一些关于Metasploit目的的细微界限,或许条款使用上的一些语言。比如,可能有一些内容说你不能将此用于犯罪行为,或类似的。这是用来防止你惹麻烦的东西吗?在这个意义上,你是怎么做到避免麻烦的?
HD:我认为早期的解决方案是我配偶有一个“保出狱基金”,有一个专门的律师基金放在一边,所以如果我半夜被拖走,她有一些现金,这些现金不和我的个人账户或我们的共同账户挂钩,用来找律师和支付保释金。大概六七年都是这种情况,那时我确实很担心因为我在做的任何事情而被逮捕,因为所有这些都非常靠近法律界限,无论是互联网扫描,还是Metasploit的事情。这真的归结于你是否认为检察官会提出案件,是否他们认为他们可以胜诉。检察官不想输案子,所以除非他们非常肯定能赢,否则他们不会对你提起指控。这就是为什么定罪率如此之高的原因。
所以,这是一件事情,意图很重要,但更重要的是检察官是否真的想追究你,如果你能说服他们,嘿,我并不是坏人,我不是在做这些事情,我不是在推动与犯罪分子相关的经济活动,那么这是有帮助的。但这就是我真的不喜欢美国法律的一点,例如CFA并不关心意图。我们的计算机欺诈与滥用法案没有考虑你是否出于善意。我们的许多法律都有这样的问题。不仅仅是经常被引用的标准部分,还有1120节。美国刑法的其他几个部分,在脱离语境或被用来为本不该起诉的事情构建案件时就非常危险。所以不幸的是,很多美国的起诉真的只是取决于有没有人想追究你,而你能做的就是尽你最大的努力守法,而当法律真的很模糊时,尽你最大的努力不要成为一个诱人的目标。
JACK:是啊,但让我惊讶的是,当我下载一些软件,甚至看一些关于黑客攻击的教程和视频时,开头总会有一个免责声明;不得将此信息用于非法目的。不得用这些信息违法。当我下载Metasploit时,它并没有说只限于渗透测试,只能在你获得许可的系统上使用,我想知道为什么你们不加上这些呢?
HD:坦白说,我们从未想过要加上警告。我们觉得如果你在下载Metasploit,你知道自己在干什么。你知道自己是在下载一个安全工具来进行安全测试。我们不在那儿告诉你不应该擅闯马路或不应该向邻居家扔燃烧弹。我们假设人们使用这个软件有合理的理由,我们不觉得我们在提供工具的同时在怂恿你犯罪。
JACK: 明白了。但在现实世界中,你可能会感到压力,因为执法部门会说,看吧,我们一直在发现罪犯在用你的工具。你需要做更多的事情。你需要制定一份使用条款。可能你得找律师来说,嘿,我们需要做什么才能不惹上麻烦?我很惊讶这些事情没有直接冲到你脸上来。法律——黑帽子对你不满,供应商对你不满,但法律没有对你不满?我很惊讶。
HD: 我的意思是,当然出现了一些问题,但大多数时候,我还是能用这样那样的方式摆脱的。我认为,很大一部分是——在那个领域取胜而不被关进监狱的方法,就是尽可能大声、明显和光明正大地做事。所以,在每个会议上做Metasploit的讲话,很早的时候就有成千上万的Metasploit用户,让200个不同的开发者参与项目;你把项目做得越大、越广、越喧哗,人们就越不太可能会说这只是一个为罪犯准备的工具,然后去追究它。
JACK: 你真是过着令人惊讶的——充满冒险的生活。你和普通的渗透测试员之间存在很大差异,HD Moore。普通的渗透测试员今天会学习如何使用Metasploit,这是HD创造的工具。HD是那个在学习漏洞如何工作、编写shell代码让它们起效,并且不断寻找新漏洞的人。除此以外,他还要应对来自创造这个工具而产生的无休止的攻击,所以他很擅长防御和攻击系统。他在这个领域的经验几乎无与伦比,但他之所以达到这一点,是因为他对安全的热情。我只想对任何即将崭露头角的渗透测试员们说,获取正在工作的漏洞并且为开源项目做贡献,是成为这个领域的熟练者的极好方式。GitHub上有很多开源的黑客工具,下载源代码来看看它们是如何工作的,尝试改进它们,会是一段很棒的经历。即使你只是一个初学者,你可能也能做一些帮助,不管是写更好的文档还是改进帮助菜单。成为这类项目的一部分可以发射你的事业。HD甚至帮助很多他的贡献者找到了工作。学会发现和开发漏洞对HD来说真的很有价值,但对他来说,坚持下去是一段艰难的旅程。
HD: 是的,我想大概用了三四年的时间,在‘那很蠢’和‘那太烂了’到‘那是小白工具’到‘那是一坨垃圾,我不喜欢’,再到‘好吧,行吧,我会用它——嘿,现在大家都在用它’之间真的走过了一个转折点。
JACK: Metasploit成长为安全专业人士在全球范围内使用的一些事实上的工具之一。最终,学校开始教授学生如何使用它。我是说,你能想象一个黑客工具成为学校课程大纲的一部分吗?更甚的是,为了通过某些考试和获得安全认证,懂得如何使用Metasploit变得必不可少。尽管起步艰难,收到了很多负面评价,但Metasploit还是成为了渗透测试社区不可或缺的工具,并被安全团队广泛采用。
HD:到了2008年,Skape和Spoonm都开始转向其他事物了。Skape的公司被微软收购了,他去那里工作,这标志着他在Metasploit贡献的终止。Spoonm回到学校,然后好像消失了一段时间,专注于他的事业。所以,大概到了2008年,项目又是我一个人在运营了,我和一个叫Egypt的家伙合作已经很长时间了,他一直在为项目贡献漏洞并且我们会讨论一些事情。我邀请他成为核心成员之一。他加入团队后,我们开始向3.0版本迈进,我记得是那个时候。在所有这些事情发生的时候,接近2009年的时候,我在一家创业公司工作,生活并不特别开心。我相当穷。创业公司给我的薪水不多,我背负了一堆信用卡债务,还有个相当沉重的房屋贷款,当时我在会议上做Metasploit培训,以此来支付账单和维持生计,但同时我也要白天为创业公司工作,晚上处理Metasploit,每个周末,连续几年每天晚上都这样。非常有压力,宝宝就要出生了,在我休产假的时候,我收到了Rapid7要收购Metasploit的报价。
JACK:哇,Rapid7这家公司提出要收购Metasploit?这太了不起了。当时,Rapid7的产品是一种漏洞扫描器,而典型的渗透测试场景是先运行漏洞扫描器,然后使用Metasploit尝试进入你找到的脆弱系统。这两种工具的结合美妙至极,因此Rapid7想要收购这个工具是有道理的。但Metasploit是一个开源软件,并且并没有产生任何利润,所以HD对于将他的工具交给一个公司感到有些怀疑。但他们在对的时间提出了请求,因为他当时压力很大,手头紧缺,而且即将有他的第一个孩子。他有点需要一个重大的突破。
HD:是的,当收购的提议来临的时候,这绝对是诱人的,我和Rapid7团队聊了很多次,了解事情会变成什么样子,最终我说好,我们试一试吧。
JACK:嗯,你有没有提醒他们?像,等一下,如果你们承担这个责任,你们会受到攻击。你知道的,这是我在这里承受的压力,有人可能会打电话来试图让你被解雇。
HD:可以这么说;他们让我来领导Metasploit团队,并且打造一个产品线,同时也让我作为他们的安全负责人。所以,最初几年我承受了大部分的压力。Metasploit拥有相当强大的追随者,但那时根据我们的下载日志,只有大约33,000活跃用户。因此,这是将开源工具商业化但同时保持开源的一个绝佳机会,而所有的商业化实际上是通过构建一个工具的专业版本并出售它来实现的。所以,我们团队能够——基本上是在奥斯汀建立了一个新办公室,招募了团队,在大概六七个月内推出了第一个商业产品。
我认为在十二个月内,我们的团队自己支付了费用,通过销售我们的产品Pro版本开始盈利。所以情况最终还是不错的。即使到现在,Rapid7还有一个完整的团队在全职工作于Metasploit。他们的作用不仅限于开发方面;他们还为我承受了所有我面对的戏剧性事件,所有执法部门的调查,所有随机威胁,以及所有其他的事情提供了像公司盾牌一样的保护。他们站出来帮我挡住了这些问题。他们为我雇佣了律师,为我雇佣了说客。他们尽力保证Metasploit,漏洞开发和漏洞研究能够继续存在,能够被依赖,他们尽最大努力保护合法前线。所以,除了所有商业条款和产品的事情,我非常感谢他们对漏洞研究,漏洞披露和分享的帮助,使其成为了今天的样子。
JACK: 是的,所以你提到了说客;他们为什么要雇佣说客呢?
HD: 嗯,其中很多工作——确保漏洞研究,披露等事情的合法性,关乎到教育工作。就像是说,嘿,人们需要获取信息的正当理由。你不希望去规范漏洞披露。你不希望制定法律使漏洞披露成为非法行为。我的意思是,如果有人提议说我们要阻止你分享让人们攻击对方的工具,那你会觉得,是的,那听起来是件好事。你不希望人们相互分享邪恶的工具,对吗?让那成为非法。问题是,除非你更深入地挖掘,你才会意识到你真的不想将此刑事化,因为这是你的防御者学习的方式。这是你的实际防御者测试自己系统的方式。如果你不能反过来使用这些工具,你就无法知道你的任何防御措施的效力。这只是其中一件事,在表面上很难辩护,但一旦你开始教育人们什么是好处,一旦你让更多的人意识到通过刑事化这种工作你所失去的东西,然后你就试图建立那种支持。所以,Rapid7请来的说客在不仅从Wassenaar协议中分离Metasploit框架(至少是美国的解释方式),还在保护漏洞研究方面,发挥了重要作用。
JACK: 嗯。你能解释一下Wassenaar协议吗?
HD: 哦,当然可以。我已经有一段时间没有接触过了,所以我可能会记错细节,但Wassenaar协议是一项由许多国家签署的国际武器条约,宣布我们将或将不会在没有批准的情况下向其他国家出口什么。对它的一次修改或者对该协议的一种解释开始将网络安全工具分类为武器。这么做的目标是防止NSO集团那样的攻击,对吧,这种攻击是通过发送一个设计用来入侵别人机器的软件工具包或硬件工具包,并且真的是为了最恶意的——不管是监视用途还是真正的网络战争类型的用途。然而,该语言也涵盖了很多无关的工具。所有用于专业安全测试的工具,如果你仔细观察,也会根据Wassenaar协议被分类为武器。Rapid7公司花费了大量的时间和说客一起工作,尝试帮助人们理解像Metasploit这样的开源工具和那些更有针对性的,恶意的,以及武器化的东西之间的区别。
JACK:我不明白的是Rapid7收购的问题在于,你怎么能买一个免费的、开源的工具呢?他们为什么不直接复制它,然后改个名字呢?
HD:实际上,有人尝试过这么做。但结果并不怎么样。事实上,有好几个人都做过。在Metasploit 3发布之前,当我们用Ruby完全重写了整个东西,Metasploit是用Perl写的。有家叫SAINT的公司发布了一个叫做SAINTexploit的产品,也是用Perl写的。我们当时就觉得,啊,这有点可疑。后来,有人把SAINTexploit的副本分享给了我们,我们当时想,你知道吗?我们的一半shell代码都是他们的,还有很多漏洞的代码看起来真的很像我们写的。SAINTexploit的产品和Metasploit框架之间也有很多相似之处。所以,我们有点不高兴了。我们觉得,如果你要用我们的代码,这很好,但要合作。
不要假装是你的。不要说嘿,我做了这个。就像,不,不;这是开源的。要对它做出贡献,要分享它。所以我们改变了它。我们将Metasploit的许可证真的只限于商业用途改了一段时间,大约一年左右。在2.0的Perl重写和全新的3.0代码之间,我们简单地因为对SAINT和SAINTexploit的看法,让它暂时脱离了非开源许可证。最终,当埃及加入项目,我们在Rapid7商业化或Rapid7收购之前,我们决定将许可证改回BSD,因为我们觉得这样做才是真正发展项目的正确方式。但在那之后,关闭许可证绝对是一种本能反应。
JACK:所以,Metasploit在Rapid7的统治下继续保持开源且免费,有HD和一个叫Egypt的家伙加入并且努力工作,使它变得更好。一项永无止境的工作就是将更多的漏洞工具导入该工具。
HD:当我在Rapid7工作时,每当一个补丁星期二发布时,我们首要的事情就是尽快为所涉及的每个问题发布漏洞利用工具,以及弄清楚它们是什么?不过,将一个二进制补丁转化来试图发现漏洞可能需要花费一周或两周的时间,而那仅仅是发现漏洞。那还没有得到漏洞利用工具。要使漏洞利用工具工作,触发它,确保它的可靠性,正确管理内存,确定有效载荷,负载问题,我是说,进入其中的工作量是巨大的。我认为其中一个理由——我可能不再那么多做漏洞利用工具的原因之一是它们变得复杂多了。
要想搞定那些繁杂的堆溢出攻击,你需要更深层次的技能。基本上,要达到能把堆调整到合适状态去构建一个攻击的能力,你就需要有着海量的背景知识。老实说,我编程的水平不算太高。我并不是一个特别优秀的漏洞开发者;我只是在这方面投入了大量时间。所以,我感觉要跟上现在的步伐对我来说难度太大了。我真的很喜欢逻辑漏洞,非常喜欢老式的栈溢出和SCH溢出之类的东西。但我觉得现代的漏洞利用,尤其是在ARM架构的移动平台上的——我的天啊,光是为了得到一个有效的漏洞就需要花费巨大的努力。
JACK:现在我有点害怕了,因为刚才我还说你是漏洞开发和渗透测试的守护神,现在你却说这对你太复杂了。现在还有谁能做得到,如果连你的技能都达不到的话?
HD:这得是超级专业化的。如果你看看Project Zero的一些帖子,我不想点名,因为担心说错了,但有一些了不起的人在那里,而当你看到真正写出好的漏洞利用时,你会发现有些人在攻击之前可能花了几个月甚至几年时间来研究周边的软件堆栈。当你在研究IOS怎样解析消息或者特定操作系统的堆是如何被特定方式优化,或者Linux内核如何被整理时,你需要建立起这样一种超深、超专门的知识,才能开始在特定领域进行漏洞利用。这不像以前,一旦你知道了如何利用一个平台、一个操作系统,其他的都相对简单。以前是这样,好比我知道如何利用Spark; 我可以用一点点努力利用大多数其他的NIPS。但是现在每个操作系统都是如此的不同,如此的深奥,如此的复杂,以至于你确实需要专门化。
JACK:是的,但我觉得你确实很享受在黑暗中玩耍,我是说,你想要走出已知知识的世界。好吧,这里有一个圆圈,代表我们在世界上所知的事物; 我要走出这个圆圈,去发现世界未知的事物,并将其带入已知的世界。那是一个非常困难的位置。那是一个可怕的地方。你不知道该往哪里走,哪个方向去,往哪里指。你一次又一次地撞在墙上,寻找漏洞和零日这种事就是这么难。即使你知道那里有一个漏洞,找到它也可能很难。
HD:这可能是——特别是在补丁逆向方面;你会感到非常沮丧,因为你知道它就在那里。你知道它已经被修补了。你知道它就在你面前。你知道它很可能就在你看的地方不远处,但你看不见它。所以,现在我花时间在网络协议和指纹识别技术以及那类型的研究,那里你要真的深入协议堆栈,寻找行为上的差异以及网络中设备的响应方式——挑战类似;你必须去发现这些非常微妙、非常难找的东西,然后从中推断出所有的价值,比如说,现在我知道它这样响应,那样响应,它一定是IOS设备或者这些人是内核版本或者这特定的更新已经应用到它上了。所以我喜欢做那种工作,但它确实像你说的,在黑暗中工作。但它远没有做现代堆溢出攻击那么复杂。
JACK: 我发现这个技能是处理技术问题时最重要的技能之一,那就是在黑暗中,在你对某些领域一无所知或看不见的情况下,也能够舒适地进行操作。因为在 IT 行业,你不断地面临着你不知道如何解决的新挑战或问题。问题可能会奇怪到你甚至不知道该怎么用 Google 搜索,所以你得学会勇于进入未知领域,即使那只是对你未知,你需要学会在这些黑暗的领域中保持舒适。尝试你知道自己会失败的事情,甚至在做的时候看起来很愚蠢,是既可怕又令人沮丧的,但是你越是能够适应在未知的世界里工作,下次你面对黑暗的时候,你的表现就越好,而且这种情况像是,一直在发生。你还在 Rapid7 吗?
HD: 哦,不,不。大概三年半前,我开始创建我自己的公司做网络发现(network discovery)方面的工作。那就是 Rumble;我们帮助公司发现他们的网络环境或他们的云里可能连接的每一件单独的东西。
JACK: 是的,多说一些。给个好的推销讲话。
HD: 当然。所以我现在已经做了二十七年的渗透测试和安全工作,还有开发产品,不管是在做渗透测试,试图闯入某人的网络,还是在构建产品,做一些网络上的事情比如漏洞扫描器或渗透测试工具,你得先搞清楚外面有什么。你得扫描网络。你得找到目标、资产、IP 地址等等。所以我们提出了一个非常酷的扫描引擎,它可以非常快速地告诉你网络上每件事的惊人信息。现在我们的产品 Rumble Network Discovery 能找到你所有的网络。所以从对你的环境零了解开始,它们会在你组织里的每一个可能的可路由的私有 IP 上进行抽样扫描,它们会找到每一个已占用的子网,每一台设备,对每台设备进行分类,告诉你它运行在什么硬件上,同时识别像是跨越不同网络的多所有权系统。它都是在未认证的情况下进行的,非常快速,几乎不需要互动,也几乎不影响网络。
JACK: 让我觉得 HD 惊奇的是他为了创造 Metasploit 所经历的挣扎。我是说,单是编写漏洞和有效载荷的技术就已经令人印象深刻了,他得不断地写新的漏洞,因为新东西不停地出现。但是面对一连串攻击,这些攻击是因为公开漏洞而来,他继续发布更多内容,这种决心和毅力是难以置信的。如果是我,如果厂商打电话给我的老板,让他解雇我,或者如果执法机关一直打搅我,我想我可能会屈服,放弃继续开展这项工作,但 HD 不会。他坚持了下来,因为他有一个愿景,有一种信念,认为自己所做的是正确的,而整个世界都是错的。我认为事实最终证明了他是对的。世界是错误的,因为我们慢慢看到世界开始改变,并最终同意 HD 的看法。微软现在处理漏洞的方式有了巨大的改变,他们的安全性比以前好得多。谷歌对公司施加了与 HD 类似的压力,说你最好修复我们发现的这个漏洞,否则我们将告诉全世界。当事情没有得到解决时,他们确实会公布它,而对于政府来说,改变了他们看待开源工具的方式。为了让每个人都能使用一些像样的黑客工具,真是一场疯狂的旅程。
尾声:非常感谢HD Moore,他是网络安全领域真正的传奇人物。你可以通过访问rumble.run了解他现在正在做的项目。这个节目由我,NOP雪橇手Jack Rhysider制作,并且在这一集中Damienne提供了编辑帮助。这一集由Tristan Ledger组装,由Proximity Sound混音。我们的主题音乐出自密码大师Breakmaster Cylinder之手。嘿,HD,最后问你一个问题。
HD:嗯。
JACK:当你审查别人的代码时,你能告诉我什么是糟糕的代码吗?
HD:无可奉告。
JACK:这里是《暗网日记》。