专业IT科技资讯平台,关注科技、手机、电脑、智能硬件、电脑知识!
当前位置:主页 > 建站 > 技术分享 >

白帽黑客机Mayhem如何赢得DARPA“网络超级挑战赛”的故事

导读:

2011年,风险投资家马克•安德森(Marc Andreessen)曾说:“软件正在吞噬世界。”在当时

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万美元奖金。

白帽黑客机Mayhem如何赢得DARPA“网络超级挑战赛”的故事

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

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

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

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

━━━━

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

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

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

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

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