作者:David Brumley

2011年,风险投资家马克•安德森(Marc Andreessen)曾说:“软件正在吞噬世界。”在当时这还是一个新奇的想法。现在,很明显,软件渗透了我们的生活。从医疗设备和自动驾驶车辆等复杂的电子设备到联网灯泡和温度计等简单的物体,我们被软件包围着。

这意味着我们比以往任何时候都更容易受到软件攻击的影响。

每年,现有的软件代码数量会新增1110亿行,每行都代表着一个潜在的新攻击目标。研究公司Cybersecurity Ventures的创始人兼总编史蒂夫•摩根(Steve Morgan)预测,到2021年,美国将平均每天发生一次利用此前未知的漏洞入侵系统的事件,行业中称之为“零日漏洞”(zero day exploits),而2015年时还只是每周发生一次。

为了解决这个问题,我和我在卡耐基梅隆大学(CMU,位于匹兹堡)的同事们花了近10年时间来开发能够自动保护软件安全的技术。2012年,我们成立了ForAllSecure公司,将我们的产品推向世界。我们要做的就是证明我们可以做到我们宣称能做到的事情。通过一场大奖赛,我们证明了这一点。


2016年,我的团队挤在拉斯维加斯的一家酒店宴会厅里,咬着指甲,十分确定我们刚刚输掉了一场花了数千小时准备的比赛。这场比赛是由美国国防部高级研究计划局(DARPA)举办的“网络超级挑战赛”(CGC)。美国国防部高级研究计划局为推动国家安全技术实现突破而举办了多项比赛,21世纪早期的自动驾驶汽车大赛也是其中一项。举办“网络超级挑战赛”是因为,美国国防部高级研究计划局期待有一天,美国可实现无需人力或工具便能自动抵御网络威胁。

网络安全战场上尽是技术娴熟的黑客,最高水平的黑客还能创造性地利用软件漏洞进入某个组织的防御系统。为了自己的利益而这样做的罪犯通常被称为“黑帽”,他们经常创建大批业余的“脚本小子”,作为进行破坏的工具,比如,2016年物联网僵尸网络在控制了人们家中的微型摄像机和录像机后,在互联网上发动了大规模攻击。与之相反,“白帽”则利用他们的技能来阻止这种攻击。但是,我们没有足够的白帽黑客来保护商业世界数量激增的所有软件,更不用说对国家和全球安全至关重要的公共基础设施和军事平台了。

2014年,美国国防部高级研究计划局宣布了一个为期两年的项目——“网络超级挑战赛”,举办这次竞赛的目的是,测试是否有可能开发出能够发现、验证和修补软件漏洞的人工智能系统。2015年,总共有大约100个团队进入资格预审阶段。2016年,预审阶段的前7名晋级总决赛,在决赛中,他们需要进入一个完整的网络推理系统,这个系统不仅能够发现问题,还能推断出问题的性质。冠军将赢得200万美元奖金,亚军和季军将分别获得100万和75万美元奖金。

在美国国防部高级研究计划局公布了比赛细则之后,我和同事们意识到这是一个绝佳机会,可以证明我们开发的自动化网络安全不仅仅是理论游戏。在运营ForAllSecure公司之来,我们一直面临着对解决方案可行性的质疑。我们认为我们最好能在美国国防部高级研究计划局的比赛中获胜,因为我们已经为此努力了10年。

我们在卡耐基梅隆大学的研究始于一个简单的前提:人们需要一种可以检查他们所购买软件并确保其安全的方法。当然,编码人员将尽力排除安全漏洞,但他们主要关注更为基本的方面:必须按时交付产品,并确保它能够发挥预期功能。但问题就在于,黑客会找到方法让软件做它不该做的事情。

当今最先进的软件安全技术会利用特殊工具来检查源代码并标记潜在的安全漏洞。由于这一过程会产生很多误报——标记的实际上并不是漏洞,所以必须再安排一个人来仔细核查每个标记。为了提高故障发现率,一些公司依靠白帽黑客进行一次性分析,或者参与“故障奖励”计划,根据发现的故障数量和严重程度向他们支付奖励。但只有盈利最多的公司才有钱对其软件开展最大程度的测试。随着完成的软件产品中包含越来越多来自开源项目和其他第三方的组件,这个问题也变得越来越复杂。

我们的参赛系统Mayhem能够自动完成白帽黑客的工作。它不仅能够指出可能的漏洞,还能利用它们,从而最终证明它们实际上就是漏洞。这也是“网络超级挑战赛”的一个关键部分,因为利用可操纵漏洞来证明漏洞是机器得分的规则。Mayhem 是一台可以扩展到数百或数千个节点的机器,可以实现人类无法匹敌的分析速度。


为了打造Mayhem,我们从我们在卡耐基梅隆大学开发的第一个软件分析系统着手,该系统以程序形式化分析为基础。这种方法好比创建一个数学方程式,用于表示软件程序可能采取的每一条路径,从而生成一棵不断分支的分析树。很快,这棵树就会变得太大而无法管理,但我们已经找到了巧妙的方法来重叠一些路径,将大树修剪成几根树枝。接下来,我们便可以更深入地探索剩下的树枝。

符号执行是设立一个方程来表示程序中的所有逻辑,例如“x+5=7”,然后求解该方程。还有另一种与这种策略不同的软件分析方法,被称为“模糊测试”。模糊测试将随机排列的数据输入到程序中进行处理,然后就可以确定漏洞的薄弱点何在,以及如何被恶意攻击所利用。模糊测试不断地输入随机数据,直到一个特定的数据串使方程成立,最后确定x=2。

这两种方法各有各的优点,但多年来,模糊测试更具优势,因为它更容易操作,而且在尝试新的输入时速度更快。与此同时,符号执行也向学会并驯服它的人展示了尚未开发的巨大潜力。我们于2010年开始开发Mayhem,并在这个系统中完美地结合了这两种方法。

模糊测试就像是快速智力猜测——看哪些输入可能会触发程序的新行为,然后跟踪那些实际引发行为的输入数据。符号执行则好比让一位数学家努力正规地计算出哪些输入数据会利用程序。我们发现,对有些故障来说,快速猜测是最好的发现办法,其他的则最好通过数学方法发现。所以我们决定同时运行这两种方法。符号执行会对程序的一部分进行深入推算,算出哪一个输入数据会触发该区域代码。然后,系统可以将该输入数据传递给模糊测试程序,快速敲打同一区域代码,找到漏洞。

Mayhem的另一个特点是它可以直接处理二进制代码,而不是人工编码的文本文件——源代码。这意味着系统可以在没有开发人员帮助的情况下分析程序,这对于包含第三方程序的组件来说非常重要,因为它们可能没有源代码。但是二进制代码的推算比较困难,因为与源代码不同,它没有函数,没有局部变量,也没有数据抽象。二进制代码有一个大的存储区域和固定长度的位向量——一种高效存储位的数据结构。你要变成一台机器才能处理这些代码,而且实际上,建造一台可以在这些约束条件下工作的机器需要的工程量很大。

Mayhem 识别出一个漏洞后,会产生并运行一段利用漏洞的代码,也就是黑帽黑客可能用来入侵程序的代码,证明可以利用漏洞获得对操作系统的特权访问或根访问。结果是,Mayhem可以十分确定地标识出漏洞,而不是像大多数代码分析工具那样仅仅标记出可能会有问题。

2014年,我们对Debian发行的每一个程序都进行了一次Mayhem技术测试(Debian是世界各地台式机和服务器上普遍使用的一个Linux版本)。Mayhem 发现了近1.4万个独特漏洞,然后将漏洞列表缩小到250个值得优先考虑的新漏洞。通过在亚马逊云的大量服务器上部署Mayhem,整个测试不到一周就完成了,几乎没有人为干预。我们向Debian网络社区提交了更重要的发现。我们将我们的研究剥离出来成立一家公司,就是为了当我们分析成千上万程序并发现存在大量漏洞时,能够与开发人员一起有规模地开展工作。

2015年6月3日,100多位参赛者进入资格赛,接到131项有特殊设置的挑战,每项挑战都包含软件安全漏洞。安全得分(以发现并修补漏洞为评判基础)最高的7支队伍进入了网络超级挑战赛决赛,FoAllSecure队的得分是半决赛亚军的两倍多。短暂的喜悦很快过去,我们意识到压力现在才真正来了!

采用Mayhem核心技术,建立一个完全自动化的网络推理系统是一项艰巨的任务。我们之所以能够完成,部分原因是美国国防部高级研究计划局为所有7支入围队伍提供了充足的资金,供我们开展为期一年的开发工作。我们的核心组件包括将可执行程序转换为相对容易理解和分析的语言的工具集,还包括用于查找和利用漏洞的攻击工具、自动修补有缺陷的二进制代码的防御工具,以及有效协调各项工作的程序。

在准备最后一轮比赛时,我们面临两大挑战。首先,虽然我们对Mayhem发现漏洞的能力感到满意,但我们觉得打补丁还不够有效。在比赛中,就像在现实生活中一样,你不愿意多耗费处理能力去为一个不值得解决的问题安装补丁。因此,我们花了大量时间开发自动漏洞补丁,一般情况下其执行时间比例介于0到5%之间。

其次,我们需要一个战略来打赢这场比赛。比如说发现漏洞和打补丁。如果打补丁需要增加太多的执行时间,从而使程序速度变慢,你可能不希望立即启用补丁。相反,有时最好等待,只在绝对必要的时候才打补丁。我们开发了一个专家系统来决定何时打补丁。

2016年8月5日,当我们的团队走进拉斯维加斯的宴会厅参加最后一场比赛时,我们看到在一个大舞台上有7个灯光闪烁的庞大机架,下面是180吨水,用于保持各队的计算机处于冷却状态。在比赛开始的前一天晚上,参赛者安装好这些机器,然后美国国防部高级研究计划局切断了对它们的所有访问。这些机器是被气隙隔离的——它们与外界没有联系。我们唯一能做的就是看着Mayhem不停地工作,观察各个系统机架报告的电源使用情况和系统温度统计数据。Mayhem一直是7台参赛计算机中最努力的——这是一个好迹象,至少我们希望如此。

在近100轮的比赛中,新程序被分到各参赛系统,机器只有几分钟的时间来分析代码寻找漏洞,并迅速发布防护补丁。每一轮都根据机器发现和证实漏洞的能力以及补丁的性能来打分。

为了使“网络超级挑战赛”最后一场比赛令观众觉得更加刺激,比赛组织方决定,只有在比赛结束时才逐场报告得分。这意味着我们不知道我们是领先还是落后,只能看着Mayhem 提交它发现的漏洞。然而,在比赛进行了几个小时,在第40轮比赛之后,我们发现Mayhem停止了提交漏洞。程序崩溃了。


我们的肚子好像挨了一记重拳,噩梦成真。我们请求组织方重新启动,但他们不允许。比赛还剩一半,我们开始考虑失败的耻辱。

最后一轮结束时,逐场解说开始了,绚丽的可视化效果展示了每个团队的机器是如何在几秒内发现和修复安全缺陷的,相比之下,人工团队可能需要花费数月或数年的时间。观众超过5000人,由一位天体物理学家和多位黑客明星担任嘉宾评论员,搅得观众群情激动。我们鼓足勇气看屏幕,准备听人宣布并确认我们的失败。

然而,当我们看到每一轮比赛的比分不断出现时,我们突然发现,虽然Mayhem在第40轮之后就停止了比赛,但领先优势足以让它保持在第一位。当最后一轮比赛结果宣布时,我们肩上的重担卸下了。我们赢了。

美国国防部高级研究计划局的项目主管迈克•沃克(Mike Walker)表示,比赛展示的网络自动防御“只是软件安全革命的开端”。他将比赛的成果比作莱特兄弟的首次飞行,他们虽然没有飞很远,但指明了洲际航行的路线。

目前,ForAllSecure正在向早期采用者(包括美国政府和高技术公司及航空航天行业的公司)销售其新服务的首个版本。在这个阶段,我们的服务主要是指出问题,然后由人工专家参与解决。在未来的一段时间里,像Mayhem 这样的系统将与人工安全专家合作,让世界上的软件更加安全。在更远的将来,我们相信机器智能将独自处理这项工作。

声明:本文来自悦智网,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。