黑客攻击的工业时代

  • A+
所属分类:安全闲碎

黑客攻击的工业时代

笔记作者:[email protected]
原文作者:Timothy Nosco, Jared Ziegler,Zechariah Clark,Davy Marrero,Todd Finkler, Andrew Barbarello,W. Michael Petullo
原文标题:The Industrial Age of Hacking
原文来源:USENIX 2020
原文链接:https://www.usenix.org/conference/usenixsecurity20/presentation/nosco

在黑客社区中存在一种认知偏见,即在没有任何成功迹象之前就选择一种软件并投入大量的人力资源来查找该软件中的漏洞。本研究将此策略标记为深度优先搜索,并提出另一种选择:广度优先搜索。在广度优先搜索中,人类在投入额外的时间和精力来研究任何特定目标之前,只需执行最少的工作即可对一系列目标进行自动分析。

本文提出了一项可重复的人类研究,该研究利用各种技能的团队,同时最大程度地使用自动化。目标是一个有效发现漏洞的过程;为团队成员的成长,指导和有效使用制定清晰的计划;并支持可衡量的渐进式进度。派生了一个流水线过程,该过程改进了曾经复杂的手工工作。本文工作提供了证据,证明广度优先的方法可以提高团队的效率。

0x01 Introduction

我们是否可以建立一个更好的漏洞发现过程?

许多研究人员提出了旨在帮助人类工作的工具,包括将符号执行,模糊测试,污点追踪和仿真应用于发现漏洞的方法。从某种意义上讲,这些技术可以自动进行漏洞查找,因为它们需要花费一些前期成本,可以对软件状态进行长时间搜索,而无需人工干预。每个改进方案发明的目的是提高工具在实际软件上使用时的有效性。然而,大规模发现漏洞仍然遥不可及,部分原因在于有效设置自动化工具所需的人为努力。

通过创建称为目标选择(targeting)的指定软件选择步骤,对Votipka的流程[1]进行了较小的更改。鼓励新手黑客对潜在的软件目标执行广度优先搜索,以仅完成允许自动分析的基本但初步任务。本文建议只有在新手尝试自动化失败后,请经验丰富的黑客对选定的软件进行更深入但更昂贵的分析。本文方法是通过将其他工作委托给经验较少的黑客,使最有经验的从业者专注于难题。反过来,它们会生成有助于通知更高级分析的工作工件。由于目标数量众多,所有黑客都有机会选择适合其技能水平的软件,并且团队成员具有明确的知识增长和指导途径。

本文介绍了研究者的漏洞发现过程以及用来评估它的可重复实验。发现大量证据表明,在存在自动化的情况下,广度优先搜索可以提供出色的目标选择策略。还评估了将本文流程应用于漏洞发现活动的受试者的信心得到了显着改善。

0x02 Vulnerability discovery process

本研究旨在发现提高基于自动化(即模糊测试和相关技术)的团队的效率的方法,其目的是发现软件中的漏洞。最感兴趣的是可以以破坏系统安全性的方式利用的漏洞,本文关注已发布漏洞和新漏洞,重点关注针对已使用软件中的漏洞利用(已发布(n-day)或未发布(0-day))的。在这里,根据Votikpa的工作描述了漏洞发现过程,还介绍了实验比较的两种不同策略。

黑客攻击的工业时代

通过观察将漏洞发现者分为三类:学徒黑客(Apprentice),熟练黑客(Journeyman)和高级黑客(Master)。如上图所示,将这三类称为黑客。最大限度地提高每个技能水平的生产率,同时使从学徒到掌握技能的发展成为本研究流程的主要动力。

学徒黑客具有一般的计算背景,并对如何应用一些自动化软件分析工具有基本的了解。学徒的工具集核心是fuzzer。学徒在修改软件方面的经验有限,并且他们尚不掌握用于软件开发的各种构建系统的内部工作。

熟练的黑客增加了操纵程序以使其工具起作用的能力。熟练黑客可以修改源代码或使用二进制修补程序来处理阻碍模糊测试的障碍,例如校验和,加密或不确定性功能。一名熟练黑客会例行修改目标以暴露其攻击面。

最高的技术水平—高级黑客,增加了操纵或创建工具的能力,以便更好地调查目标程序。许多现有的工具都是由高级黑客编写的,需要针对特定软件或类的专门方法。以Alice为学徒黑客,James为熟练黑客,而Meghan为高级黑客。

其他参与者包括领导者,他们根据黑客的工作做出针对性的决策;分析人员,他们将技术工作与其他资源(例如博客和常见CVE)相关联;系统支持人员,负责管理自动化作业和计算资源。出于对构成漏洞发现团队的技能水平的观察的激励,在Votipka的漏洞发现过程中添加了针对性步骤,如下图所示。

黑客攻击的工业时代

目标选择(Targeting):目标选择阶段会选择要调查的软件。在漏洞发现者中,术语Target是常见的,因为软件目标会受到异常类似的攻击的仔细检查。目标阶段的目标是将复杂系统或一组复杂系统划分为目标,这些目标可以在漏洞发现过程的后续阶段中进行单独研究。即使是整体的软件工件也可以分解为多个目标:例如,浏览器可以分解为媒体库,TLS和网络库,HTML / CSS渲染器,JavaScript引擎等。经验表明,许多团队或大多数团队都在考虑多个目标。

在目标选择阶段仅应收集有关如何执行该划分的粗略信息。实例包括针对目标的现有安全研究的普遍性;目标源代码,漏洞跟踪器和公共开发者论坛的可用性;以及在目标中发现漏洞的影响。目标本身的可用性;它的依存关系(例如软件,硬件和支持资源);其他需要考虑的因素以及与目标交互(自动和手动)所需的工具。

发现漏洞的努力的预期利润与成功的可能性(L)和价值(V)成正比,与预计的时间投入(T)和所需的技能水平(S)成反比。

黑客攻击的工业时代

该模型指导如何在最大化投资回报率的同时进行目标选择和后续决策。

并非所有的黑客都是平等的,建立软件安全方面的专业知识可能需要多年的努力,经验和指导。目标选择策略应提高所有技能水平的整体生产率。本研究希望获得足够多的软件目标,以允许技能水平各异的黑客选择与他们的能力和兴趣相匹配的工作。

最终制定了一种战略,将目标选择的自由与“快速失败”(fail fast)的团队文化以及激励快速产生成果的动机相结合。因此,本研究的目标选择阶段使团队可以自我组织,并可以更有效地利用熟练黑客和高级黑客的稀缺时间。

信息收集:独立黑客和分析人员在漏洞发现过程中采取的第一步是收集有关目标的其他信息,这一次是为了在后续阶段做出决策。这些信息中的关键是有关目标的发展,流行程度以及已知的当前或先前漏洞的一般详细信息,以及已经完成的所有安全研究。

现有的分析可以快速克服障碍,并提供克服这些障碍的方法。在考虑由混合能力组成的团队时,诸如此类的描述性指南使新手可以开始工作,否则他们将需要经验丰富的黑客。

设想A:Alice开始研究提供NTP服务的软件。她记录了常用的版本,审查了国家漏洞数据库中的已知漏洞,并记录了该项目中使用的主要编程语言。

程序理解: 黑客接下来将重点放在了解目标的操作和设计上。有趣的是目标的使用方式,预期的使用情况和配置选项以及目标软件的总体设计。在此阶段收集的信息可以来自文档,源代码,在线论坛,用户,开发人员和其他来源。程序的理解和下一阶段的攻击面分析,构成了漏洞发现过程中的迭代周期;前图用 Obstacle决策点说明了这一点。

设想A(续):Alice通过从在线存储库下载源代码并运行./configure; make来安装NTP服务。她参考了使用说明以与软件进行交互。

设想B:在研究一个单独的项目时,James在阅读了Alice的初步笔记后编译了一个浏览器。这需要一些工作,因为他的Linux发行版没有提供所需的库。他确定了浏览器的JavaScript引擎和HTML渲染器,并指出了用于解码各种媒体格式的库。James还指出,默认构建使用了地址空间布局随机化(ASLR),不可执行的堆栈和栈金丝雀保护(Stack Canaries)。

攻击面分析: 研究程序的攻击面涉及设计向目标程序部分提供输入的方法。在许多情况下,这采取的是模糊测试harness的形式,也称为驱动程序应用(driver application),它将fuzzer生成的输入定向到程序攻击面的一部分。此阶段的实际执行方式在技能各异的黑客中有所不同。

本文的流程要求学徒使用已知的工具,直到障碍阻止他们进一步处理为止。他们的策略是在进度停止时迅速放弃,记录其成功的工作,然后继续下一个目标。

熟练黑客会使用学徒提供的文档,从而使他们能够立即应用高阶分析,并继续进行程序理解-攻击面分析周期。

尽管有明显的漏洞迹象,达到高级黑客水平的项目要么在概念上很重要,要么已经超越了其他黑客的利用能力。高级黑客应进入程序理解-攻击面分析的周期,并附带大量文档和由学徒和熟练黑客产生的其他产品。因此,高级黑客的时间就花在了高级黑客只能执行的任务上。

设想A(续):Alice学习目标接受的输入类型。这些包括通过网络套接字的输入以及服务器启动时读取的配置文件。她所熟悉的模糊测试工具不支持网络模糊测试,因此她为将来的分析师尝试使用网络模糊测试提供了说明。但是,她知道如何根据文件输入开始模糊测试。

设想B(续):James为浏览器的更复杂的媒体库编写了模糊工具,并使用Dockerfile打包了他的工作。Alice可以提供帮助,因为她尚未学习如何使用Docker。

自动化探索:一旦团队学习了如何操纵程序的输入,它就会反复执行这些操纵,以枚举尽可能多的程序功能。这样可以最大程度地发现脆弱状况。虽然“有时’幸运的‘运行时失败会导致漏洞”,但本研究在此阶段中的主要工作是使用上一阶段产生的harness在fuzzer中测试目标程序。为了使结果可重复,研究团队将攻击面阶段的输出标准化为Dockerfile ,该文件结合了目标程序及其fuzz harness。

黑客的熟练程度以及对给定目标的适用性的考虑决定了选择fuzzer。fuzzer的有效性包括利用目标和特征(例如地址清理,可伸缩性,速度等)的效率。不同的模糊测试者倾向于使用不同类型的目标。例如,LibFuzzer有助于编写库的fuzz harness,而American Fuzzy Lop(AFL)使黑客能够在给定二进制目标从文件或标准输入流中读取其输入的情况下快速开始模糊测试。

设想A(续):Alice在配置文件作为模糊输入的情况下,在未修改的NTP程序上开始模糊运行。

设想B(续):James部署了用于模糊测试的浏览器媒体处理harness。当模糊器运行时,它们都在其他目标上工作。

漏洞识别:黑客在遍历整个过程的过程中发现bug,必须确认这些bug是否为漏洞。当一个bug被证明可以被攻击者利用时,就会存在一个漏洞。这可以很简单,就像使用上一个阶段中确定的崩溃输入运行目标程序一样简单,也可以像建立一个复杂的系统来观察某些输入的现实效果一样复杂。在此阶段中,可能需要自动化以平衡查看结果所需的人员时间,尤其是在发现大量程序崩溃时。

设想A(续):Alice开始另一个目标。

设想B(续):Fuzzing发现了六个导致目标浏览器崩溃的输入。James无法利用这些漏洞,因此Meghan承担了任务。James的工作重点转移到模糊浏览器对传输层安全性(TLS)的使用上。

报告:最后,发现漏洞的黑客准备了一份报告,允许开发人员更正该漏洞。对漏洞的影响和普遍性的清晰描述使软件维护人员可以优先考虑其工作。该报告可以采用不同的形式,但是,根据CERT协调漏洞披露指南的规定,应充分记录漏洞和攻击场景的技术和实践细节。为帮助其他黑客的成长,报告应易于获取和搜索。

设想B(续):Meghan和James斯的发现一起记录了她的发现。Meghan和James一起将漏洞利用打包为一种可用的概念证明。稍后,团队讨论他们的结果。

2.1 深度优先策略(SD)

最明显的目标选择策略类似于深度优先搜索。首先,黑客基于某种程度的操作影响来选择一小部分目标。对于每个选定的目标,团队都会花时间审核软件中的漏洞。这个工作流程非常自然:它将团队的精力一次集中在一个软件工件上。研究人员在工作之初就选择了目标,并在相当长的一段时间内持续关注该目标。

深度优先的工作流程中,发现大型软件中的漏洞需要熟悉期。例如,Google Project Zero的研究人员应用了这种策略来查找Apple Safari浏览器中的漏洞。研究人员利用了Safari中使用的基础库,这需要对程序有深刻的了解,并需要对构建链进行修改。他们使用定制工具在一年的时间内发现了26个漏洞。

从管理角度来看,此策略很简单。团队负责人从每个黑客那里收集信息,并将其分发给检查同一目标的队友。领导者根据每个团队成员的方法来划分工作。例如,一个黑客可能会检查与目标软件一起分发的单元测试,并对其进行修改以适合团队的目标。另一个可以使用流行的静态分析工具来分析软件;还有一种可以尝试利用目标程序的不同部分来与fuzzer一起工作。安排模糊测试和随后的评审的责任往往落在harness的作者身上。

黑客使用SD集体记录信息,因为它与其他团队成员立即相关。为了促进培训,该团队将新手黑客与专家配对,希望新手能够吸收专家的概念和技术。

SD的主要缺陷似乎是效率低下,与实际团队中广泛的技能水平相比。在很少的软件工件受到审查的情况下,团队将用尽与查找漏洞相关的简单任务。这会使学徒甚至可能使徒弟们的贡献能力降低。同时,在项目开始时,高级黑客可能会发现自己处于闲置状态或执行更适合其他技能水平的任务。

另一个缺陷是自动化的效率低下。开始进行模糊测试后,团队将继续致力于同一目标。他们可能会建立其他模糊测试harness或进行深入的手动分析。然而,自动化可能会在以后发现有助于这些过程的信息,甚至可能会发现它们所寻找的漏洞。手动分析可能会浪费人力。

2.2 广度优先策略(SB)

本文设计了一种新的策略,旨在解决SD的缺陷。本研究目标是扩大漏洞发现过程的规模,以支持不断壮大的黑客团队,减轻黑客的疲劳度,并提高模糊测试的产量。为此,本文策略依赖于大幅增加软件目标池的想法,鼓励黑客在每个工作日中产生尽可能多的模糊测试工具,称其为广度优先策略(SB)。

当发现利用特定目标需要大量时间投入时,SB鼓励学徒级黑客放弃。学徒们没有继续钻研“rabbit hole”,而是在将目标移到单独的“熟练黑客”队列之前记录了有关目标的所有相关信息。这提供了更多有经验的黑客资料,然后再应用他们的有经验的能力。

此策略的关键是要收集大量目标,并针对每个目标让学徒做最简单的事情,仅此而已。学徒放弃后,有经验的黑客就可以在有报告的情况下更深入地调查目标。在某些情况下,学徒会产生有效的构建甚至是模糊输出的语料库,但如果产生的这些人工产物超出其能力,则不会。生成大量目标的方法包括:

(1)将设备分为其软件组件;

(2)在对系统级攻击面进行彻底分析之后;

(3)枚举库依赖项;

(4)研究多个漏洞赏金。

拥有大量的目标允许学徒拒绝那些障碍超过他们能力的目标。示例可能包括具有挑战性的运行时要求的软件,例如在小众硬件上运行的实时操作系统;需要动态网络流的程序,例如FTP;需要大量系统配置的程序;或使用自定义生成过程的程序。队列如此之大,确定目标的优先级以使黑客将更多时间花在高价值任务上就变得至关重要。例如,渗透测试团队的黑客应优先考虑允许外部网络连接的目标。

本文研究中的一个重要考虑因素是弄清楚如何快速培训新成员,同时使他们为团队提供运营价值。大量的目标使学徒可以选择与他们已经知道如何使用的工具兼容的目标。当他们发现目标无法与他们所知道的工具一起使用时,他们可以记录所学的知识并将其移入操作人员队列。熟练黑客获取学徒已经开始的目标并将其推向探索阶段。反过来,学徒可以从这项工作中学到东西。因此,每个团队成员的工作都会经常由经验丰富的人员进行审查,并且有一条明确的道路可供他人根据他人的经验进行学习。同样,高级黑客会记录他们所克服的问题以及所采用的解决方案的类型。这些说明也经常帮助熟练黑客增加知识。

为了有效利用自动化,每当新的自动化作业开始时,所有工作都应在特定目标上停止。仅在完成该工作(基于某种预定的完整性度量)后,才对结果进行审核,将其合并到发现中,并用于确定后续步骤。这样,通过最大程度地依靠自动化,可以最大程度地减少不必要的人力。

0x03 Experiment

黑客攻击的工业时代

本文设计了一项人类研究来研究提出的两种策略:深度优先(SD)和广度优先(SB)。实验历时10天,如上图所示。这种平衡的设计遵循SAGE传播研究方法百科全书,包括在第一周结束时进行受试者间测试,在第二周结束时进行受试者内测试,在2019年11月7日至11月22日的工作日进行了实验,将在伍军人节的8号和11号休假。

3.1 受试者选择

受试者来自一群美国网络司令部人员,每个人至少对系统和软件安全性原理有基本的了解。招募的主要手段是在美国网络司令部各工作区张贴小册子,但也通过电子邮件邀请有希望的候选人。宣传的目标是确定最佳的目标选择策略以发现漏洞,并且表明选定的主体将与专家黑客一起花费两周的时间来分析一系列真实软件。最后指出,将为所有参与者提供AFL模糊测试教程。小册子要求申请人(1)具有Linux经验,(2)可以从事开源项目,(3)可以进行基于Internet的目标研究,以及(4)可以阅读和修改C程序的申请人。共15人表示关注,候选人签署了参与协议,并完成了用于分配团队的自我评估。

3.2 方针

实验的第一天有十二名受试者参加,利用受试者自述的多年黑客经验来创建小组。然后进行了有代表性的随机抽样,将当前的受试者分配给到两个平衡的6人小组。最初的15名申请人的分布情况包括:八名具有一年经验的受试者,两名介于一年和两年之间,两名有四年,两名有五年和一名报告八年经验的受试者。所有拥有一年以上经验的申请人都声称,在某些时候,黑客是他们全职工作的一部分。划分不是统一的,而是以可分为两个团队的方式划分报告的技能。为每个团队分配了一名调查人员担任领导,每个团队都有经验丰富的黑客团队。

教学阶段:该课程将讲座与练习结合起来,从如何使用afl-gcc进行编译到使用afl-qemu对bzip2模糊化,还提供了一个有关Docker的30分钟仅讲课的课程。

技能评估:本文的自我评估是主观的,因此以一系列技术技能评估测试的形式设计了一种更为客观的受试者技能度量。对这些受试者进行了3次测试:一次是在初始培训课程结束后立即进行,一次是在中途完成(在团队交换策略之前),一次是在实验结束时进行。目的之一是衡量受试者在执行每种策略的过程中开发的技能数量。

所有这三个技能评估都遵循相同的形式,每次包括从一组15个库中提取的一组新的五个二进制文件。从模糊测试目标的三种流行的公共语料库中提取了这些二进制文件:改编的网络大挑战(Cyber Grand Challenge)二进制文件的“比特追踪”(Trail of Bits),麻省理工学院林肯实验室Rode0day漏洞注入挑战和Google的OSS-Fuzz项目,在某些情况下提供了源代码。到最后,每个受试者在三项技能评估过程中已经调查了所有十五个二进制文件。选择的二进制文件代表了许多实际挑战,这些挑战在许多方面都有所不同,包括小型程序与大型程序,预构建程序与复杂的构建系统以及人为bug与自然bug。

技能评估中使用的每个目标都可以在互联网上免费获得。网上还为每个目标提供了一个““answer key”,在某些情况下包括一些漏洞列表,在某些情况下还包括一个预先构建的模糊工测试harness。目的是强调开源研究是漏洞发现过程的关键组成部分,并承认已知的n-day漏洞至关重要。

正好给受试者一个小时的时间,以在这些目标上取得进展;显然没有足够的时间深入了解其中任何一个。他们的指令强调了两个目标:(1)发现bug;(2)创建模糊测试harness。

发现漏洞的动机是不言而喻的,因为它与漏洞研究的总体目标一致。创建模糊测试harness的目的是为了让受试者意识到使用自动化作为实现第一个目标的主要策略。

目标选择:为该实验选择目标并非易事,在评估黑客时遇到了许多挑战。在考虑在早期工作中使用基准测试之后做出了其他决定。选择评估OpenWrt,OpenWrt可用的软件包是开源的,可用于多种用途。每个目标都是真实的,因此代表了现代、复杂和已部署的软件。

在受试者开始漏洞发现过程之前,运行了一个简单的静态分析脚本,该脚本从每个OpenWrt软件包中提取了一些重要信息。收集了每个软件包的版本,该软件包导出的文件的清单,运行文件的结果,然后将每个ELF文件的导出符号与一组经常被滥用的标准库函数(例如strcpy和gets)的交集。

对于SD,选择了两个目标:dropbear和uhttpd。由于默认情况下已安装这些服务并在网络套接字上监听,因此对于执行SD的黑客来说,它们代表了最可能的选择。对于SB目标,允许受试者选择OpenWrt包管理器提供的任何软件,但dropbear和uhttpd除外。在期SB间排除了这两个目标,以便两个团队在期间SD都可以重新开始那些目标。的两SD个目标和SB的千个目标确实存在不对称性。初次检查时,这似乎是不公平的,因为(1)基本目标中的真实漏洞有偏差,并且(2)两个目标需SD要比SB目标的平均水平更高的分析技能。

读者可能会声称:“当然SB可以找到更多的bug,还有更多的bug可以找到!”,这是本文研究者同意的。研究者认为这种感觉上的不公平实际上是直觉,SB比更有SD效,因为本文的选择代表了真实的系统。存在bug,但是过度致力于单个目标并不是找到它们的最简单方法。

为了帮助进行研究后分析,选择了OpenWrt版本:15.05.1。正如其他人所提到的,没有很好的替代品可以找到真正的bug。由程序路径或堆栈哈希定义的单独崩溃与单独bug无关。通过选择较旧的OpenWrt版本,本文希望受试者能够找到18.06.5版本(实验的最新版本)所修补的漏洞。这样,可以对崩溃进行更精确的分类。由于所有目标都是开源的,因此将使用它们的问题跟踪工具来报告仍在现代版本中出现的崩溃。

工作流程和工具:SD和SB这两种策略都需要工具来管理漏洞发现过程的执行,在介绍这些工具及其使用方式的过程中花了一些时间。

由于功能集和开源可用性,本研究依靠GitLab来管理本文的团队。对于每个漏洞发现活动,创建了一个GitLab项目,对于每个建议的目标,创建了一个GitLab问题。将源自脚本的打包信息添加到每个问题的文本中。

黑客攻击的工业时代

研究者指导受试者小组使用GitLab Issue面板会跟踪其进度,该Issue面板分为与漏洞发现过程中每个步骤相关的列表。每个团队的面板会针对公开、信息收集、项目理解、漏洞利用和熟练黑客都包含一个清单。在上图中描绘了一个这样的面板的快照。包括Newport在内的许多作者都指出,需要将专家的干扰降到最低,这就是为什么没有在 issue 面板中包括漏洞发现过程每个步骤的原因。取而代之的是,本研究尝试平衡受试者对注意力的需求,跟踪进度的需求以及团队记录重要信息的需求。认为合理的折衷方案可以要求受试者:

在目标上开始工作时,将ticket从公开状态拖到信息收集中;在问题的后面附加相关的文章,博客,源存储库,语料库以及在搜索过程中未发现的其他信息;一旦他们创建了值得提交给目标GitLab存储库的产品,就将问题从信息收集转移到了对程序的理解上;在创建有效的模糊测试harness后将问题移至漏洞利用清单;如果进度变得太困难,则将问题熟练黑客列表。在这种情况下,评论将解释遇到的障碍。

为每个主题提供了一个与团队成员同处一处与互联网相连的工作站。工作站包含针对受试者的工具,包括:Ghidra,AFL,Honggfuzz,Docker和Mayhem。每个工作站还包含监视软件,因此与本文的数据收集联系在一起。进一步允许受试者使用他们想要的任何漏洞发现工具,但鼓励他们使用动态分析工具。还为受试者提供了一个Docker容器,该容器模拟了OpenWrt 15.05.1文件系统和服务。

3.3 执行

实验涉及漏洞发现过程的两次迭代。在第一次迭代中,团队A应用了SD,而团队B应用了SB。大约每过一个小时会要求停止工作,并要求受试者完成调查。团队将他们的策略用于第二次迭代,并且在每次迭代后重复进行技能评估。每一天以一天结束时调查结束,最后一天包括实验结束时的调查。

在接下来的四个工作日中,由研究人员领导的每个团队的受试者都在为其分配的策略进行工作。通过选择仅两个SD目标和大约1,000个SB目标来强制每个小组使用分配的策略。团队负责人鼓励SB受试者迅速放弃并选择可以在两个小时的工作中合理完成的目标。在进行最后四个工作日交换策略之前,对受试者进行了中级技能评估。在最后一天,受试者进行了最终技能评估。

局限性:本研究的抽样人群仅由美国网络司令部人员组成,但认为本文结果适用于其他组织。双方都在第一天就采用了本文的两种策略,为他们在两周内都针对的软件进行了开发。这本可以导致对未来目标的展望,但是团队领导通过集中精力缓解了这一问题。本研究的两个团队负责人确实使调查人员人数增加了一倍,但他们在指导团队时试图减轻对SB的偏见。

研究的其他方面很难甚至无法控制。尽管两支队伍的集体时间似乎相等,但由于不可预见的紧急情况,一些受试者错过了工作,有时互联网连接变得异常缓慢。这影响了两个团队,并且在研究的两个星期中似乎都持续存在。有时受试者会重新启动工作站,或者由于笨拙的渗透测试而崩溃。这影响了收集和记录有关参与者行为的数据的能力。在实验过程中,还发现X11监视工具无法捕获在X11锁定屏幕上花费的时间。

人类研究标准和数据收集:在执行本文所述的研究之前,获得了美国国防部人类研究保护计划(HRPP)的确定。这包括由本研究的机构审查委员会(IRB)进行的审查。所有招聘都是自愿的,并最大程度地减少了不适当的影响。给每个受试者分配了一个两个字的假名,这也是他们的机器的主机名、他们的Rocket.Chat用户名、他们的调查回复名和他们的GitLab用户名。记录的数据带有这个假名,并且与该用户的真实姓名没有任何关联。本研究收集了技能评估、调查、GitLab承诺、评论和工作产品。还使用execsnoop和x11monitor收集数据,该数据记录了对象启动的程序,而execsnoop则记录了受试者的X11光标焦点。

0x04 Results

对实验结果的分析涉及四类:调查问题确定发现的bug数量测量对象的黑客技能以及辅助数据。在对本研究的两种策略发表评论之前,在此介绍此分析。

4.1 调查

本研究使用Mann-Whitney u-test p-value(MW)。也就是说,根据观察列出的陈述不正确的可能性。使用此测试来比较调查结果的方式并符合必要的假设,但每个条目都是独立的试验。期望单个受试者的结果中会出现差异,因此进行了多次采样。之所以选择Mann-Whitney,主要是因为它是一种非参数检验,对数据分布的假设极少,并且允许检验SD和SB间两组均值的有符号差异。B代表伯努利试验,本研究必须假设12个样本“足够大”,为了使测试数量与小样本数量保持平衡,使用0.020的接受标准。

每小时的调查结果:在比较第一周的两个团队的受试者时,与SD相比,执行SB的受试者感到不那么惊讶(MW = 0.003),更少的沮丧(MW = 3×10 ^(-4))和不确定性(MW = 0.004)。他们还花费了更多的时间与工具进行交互(MW = 5×10 ^(-7))和更多的时间进行利用(MW = 0.002)。

第二周后,比较了从SD转到SB的团队内部受试者。这些受试者报告说,SB让他们花更少的时间在研究上(MW = 1×10 ^(-4)),而感到更少的沮丧(MW = 0.007),怀疑(MW = 0.001)和困惑(MW = 0.009)。SB发现他们与工具进行了交互(MW = 0.008),并进一步利用了工具(MW = 0.009)。

实验结束的结果:受试者感到SD的整体效果不及SB的整体效率(B = 0.019),使用团队技能的效率也较低(B = 0.003)。当被问及他们希望采用哪种方法时,受试者选择的SD可能性较小(B = 0.003)。受试者感到广度优先的工作更加独立,但让他们感到自己不属于团队的一部分(B = 0.003)。受试者声称SB的挫败感较小(B = 0.003),他们一致表示SB更容易上手(B = 2.400×10 ^(-4)),新手更容易做出贡献(B = 2.400×10 ^(-4))。受试者还一致声称他们在实验中学到了一些东西(B = 2.400×10 ^(-4))。受试者在黑客攻击中感到更有准备(MW = 0.010)和更感兴趣(MW = 0.015)。每个参与者报告发现至少一个漏洞(B = 2.400×10 ^(-4))。

4.2 确定漏洞数量

许多论文未能为模糊测试结果的随机性提供控制,本文方法是收集受试者的fuzz harness,并使用harness创建者选择的语料库和fuzzer在三个独立的试验中进行24小时的测试并使用漏洞重复数据删除机制。

统计测试:使用MW来测试覆盖率和漏洞度量的平均差异的显着性,并符合所有必需的假设。选择此测试来衡量SD和SB发现的bug的差异。

漏洞结果:在总共使用了18,432个计算小时来测试每个harness后,分别进行了24小时的三个独立时间测试,每个测试两个内核,然后收集了结果。下表显示了在每个独立的模糊测试Tx中发现的单独bug的累积数量。

黑客攻击的工业时代

测试f(SD)<f(SB)会发现一些潜在的巧合结果。小组A内部受试者的p值为(0.038> 0.020);团队B的受试者内的p值为(0.032> 0.020)。对于第一周的受试者间测试为(0.032> 0.020)。但是,结合这两个团队的发现,发现有充分的证据要求f(SD)<f($SB)的p值为(0.002 <0.020)。

除了发现更多bug外,与SD中发现的漏洞相比,SB发现的漏洞类别也更加多样化且与安全性相关。两个都SB发现了多个越界写原语,如Common Weakness Enumeration(CWE)数据库中所述,而均未SD找到。两种策略都发现跨界读,但是SB发现的策略更多,有些可能导致信息泄露。对于赏金猎人来说,这一点很重要,因为漏洞的严重程度决定了获得的赏金。

4.3 技能评估

每次评估后,收集了受试者的工作产品和注释,并对它们进行了分级,目的是确定三个客观的指标:(1)h:工作的harness数量,(2)b:发现的bug数量和(3)r:再现的漏洞数量。如果在短时间内发现目标程序中的新路径,将模糊测试harness 定义为有效。将bug定义为任何可能会导致核心转储的信号终止的程序。一些常见的示例包括:SIGABRT,SIGFPE,SIGILL,SIGSEGV和SIGTRAP。最后,受试者有可能通过静态分析或信息收集来发现bug,但不能重现。重现bug需要受试者成功地使用崩溃的输入运行程序。

收集每项客观指标后,将它们合并为每个参与者的单个分数,以进行分析。虽然可以想象为每个类别分配不同的权重,但可能会根据训练数据中的模型拟合来选择这些权重。也许将来的研究人员可能会使用HackerRank之类的数据。鉴于这项研究的范围很大,选择对每个类别进行平均加权。那么,参与者的分数就是所有指标的总和:h + b + r。

统计测试和结果:在研究之前和每种策略之后对受试者的评估使它成为Friedman符号秩检验的理想人选。选择此测试而不是诸如重复测量ANOVA之类的其他测试,因为该测试不需要在本文的案例中,这很重要,因为既不知道测试分数的分布,也不认为假设分布是正态的,再次使用0.020的接受标准。

不幸的是,Friedman检验未显示这三个评估之间的统计学显着性均值差异。测试所有十二名参与者时,其p值为0.02024;第一组为0.10782;第二组为0.12802。较大的受试者样本可能会显示出更重要的结果。

4.4 辅助数据

浏览网络与策略浏览根据Wilcoxon的排名,将工作时间划分为数小时的窗口以将X11集中在Firefox(预先安装的Web浏览器)上花费的时间,根据Wilcoxon符号秩检验,按策略SD或SB对值进行分组并不重要。Firefox历史记录中的条目数与团队的策略也不显着相关。

黑客攻击的工业时代

生产的材料:上图描述了两种策略下两个团队生产的材料数量。两个团队在SB下生产的材料均比SD多:团队A分别在SD和下SB生产了151和588产品。B小组在和SD和SB下分别生产了177和387种产品。

4.5 深度优先策略讨论

本节以及第5.6节记录了在与小组的日常团队讨论中进行的观察。在基于团队的半自治分析环境中,有许多因素会挑战SD。将大量资源投资于一个单一目标的过程可以揭示新的缺陷或根本没有缺陷;如果不先花费大量时间和精力,黑客就不会知道哪个。

最低技能门槛:学徒黑客很容易掉进"rabbit hole"。Votipka这样描述:“ 在没有经验指导分类的情况下,实践者依靠偶然性遇到漏洞;或者依靠他们的好奇心、个人创造力和坚持,有足够的时间去挖掘程序的复杂性。这种发现是耗时和偶然的,结果几乎没有一致性”。

SD使招募工作变得更加困难,因为要开始本研究的某些目标需要大量先决知识。考虑到本文提到的两个深度优先的项目,寻求以下方面的经验:(1)软件逆向工程和汇编体系结构(2)C软件开发(3)理解和修改软件构建工具链(4)二进制修补程序(5)源审计(6)查找bug(7)使用静态分析工具(8)模糊测试。本研究的目的还在于寻找有自我激励的问题解决者。

不足为奇的是,SD压倒了低技能的受试者。与SB期间相比,执行SD的受试者感到更加惊讶,沮丧和怀疑。受试者还声称,与相SB比,SD对团队技能的使用效率较低。本研究认为,些观点是由于在查找bug开始时新手工作很快就精疲力尽而导致的,而这些任务需要更熟练的从业人员。早前,当研究uhttpd和dropbear时,新手受试者从互联网研究中发现了有价值的信息,但是在本周的剩余时间里,他们对团队进步的贡献明显不足。

反馈循环:当团队被分配一个目标时,即使自动化可能正在寻求解决方案,他们仍会继续解决该问题。在某个时候,由于这种自动化,人类最终会做不必要的工作。这是低效的,因为通常来说,人的时间很昂贵,而计算机的时间却很便宜。

与SB相比,SD给受试者减少了与工具交互的时间,并减少了时间利用。这意味着黑客无法最大程度地花费时间来生产用于测试新代码的新harness。有一个自然的突破,即一旦完成一个harness利用,黑客直到他们知道自动化将发现什么之前就无法继续工作,效率很低。

知识共享和任务分配:一个团队同时研究同一目标会导致很高的同步开销。有些发现是普遍感兴趣的,应尽快分享,但其他信息可能没有广泛的兴趣。通信会产生开销,但沟通不足会导致重复的工作。如何平衡这一点并不总是立即清楚的。受试者的反馈表明,与SD相比,SB使他们感觉不到团队的一部分。本研究认为,这是由于SB自然会导致更多的独立工作,并减少了支持异步通信(例如注释和代码提交)的实时通信这一事实。通过在相关学科中进行团队研究,发现网络防御演习中生产力最高的团队与人类的直接互动最少,从而巩固了这一地位。

模糊测试过程中的离散任务似乎有利于并行化。在实践中,这些任务实际上是一条管道,必须先完成一项任务才能前进到下一项任务。对于某些目标,例如ubus,模拟目标是模糊测试的重要前提。SD的目标选择范围狭窄,对并行化模糊处理管线几乎没有帮助。

输出:最终,A团队在uhttpd中发现了零个bug,在dropbear中发现了三个bug;B队,零和四。由于SD,黑客往往会陷入“rabbit hole”,将大量时间和精力投入到分析目标的复杂组件上。花费在研究特定组件上的时间越多,越会形成狭窄的视野。这使目标的其他组件被忽略。最终,最后期限导致了被忽视的bug,使用自动化技术和最少的人力即可轻松发现这些漏洞。

4.6 广度优先策略讨论

最低技能门槛和反馈:使用SB时,学徒黑客既多产,又更有效。SB允许人员将工作完全交给机器,并且只有在机器有机会找到解决方案时才继续在该目标上继续工作。这样的模型允许从人到机器再到机器的反馈循环,从而将花费的时间最小化,并迭代直到达到期望的结果。

知识共享和任务分配:SB允许团队成员自信地处理独立的任务,不断进步直到他们了解关键信息,然后以异步方式交流这些信息。这减少了开销和冗余,同时导致不断增加的发现记录,每个记录都记录到下一个记录中。在教练方面,将新手与专家配对通常会导致专家花费更多的时间进行教学,然后再进行黑客攻击。在团队成员可以记录和传达他们的问题解决方案的模型中,更多的专家可以查看这些问题并根据他们的经验提出前进的道路。SB的大量目标意味着黑客可以创建并行处理策略的一部分模糊测试管道。

4.7 后续工作

实验后将广度优先策略应用于其他大型项目,并在此记录了一些其他的经验教训。还建议未来的工作领域。

目标选择:本研究进一步实现了目标选择阶段的自动化,以提高领导者的效率。在一个项目中,一个团队被要求分析四个有趣的设备。希望应用SB,因此编写了一个脚本来枚举每个设备上的二进制文件,并在GitLab上为每个设备建立问题。这简化了决定要做什么的工作,并简化了进度跟踪。

将来的实验可能会受益于确定目标的优先级,实验队列中的目标未排序。因此,分析人员倾向于从头到尾遍历GitLab中的“Open”列,这表明对队列进行排序将导致花费更多的时间来分析最高优先级的软件。

信息收集:未来的工作可以使用网络爬虫进行调查,以执行常见的研究任务。例如,如果目标是objdump,则脚本可以收集搜索“ objdump CVE”或“fuzzing objdump.”的结果。这些工具可以轻松地将此信息附加到每个目标的GitLab问题上。

对程序的理解:在现有的程序及其对决策的影响方面,有大量的进一步研究要做。自动化工具应识别潜在漏洞的指标。这些指示将证明有更多时间花费在改善harness上,并更深入地了解目标程序。没有它们,扩展就变得困难,即使不是不可能,因为分析师往往将大量时间花在专注于具有挑战性的目标上,而可能忽略了其他目标中易于发现的漏洞。这并不是说要挑战性的目标应该被忽略,而是团队领导者应该以证据为基础来确定要花多少时间在具有挑战性的目标上,而不是人力成本超过发现漏洞的好处。

工具可能会添加到目标的GitLab问题中的其他信息的明显示例包括:缺少基本的运行时保护机制,例如栈金丝雀保护,PIE,RELRO和不可执行的堆栈;SUID位的存在;--help和--version输出;以及该程序是侦听端口(即netstat输出)还是自动运行(即ps输出)。这些信息将有助于领导者确定目标的优先级或由黑客选择目标,并且显然还有更多想法的余地。

攻击面分析:在本文实验之前进行的一项试点研究中,在专用集群上运行fuzz harness需要将harness转移到一个单独的网络中,由团队成员管理模糊测试工作。事实证明,这是一项重大任务。黑客提供的文档质量各不相同,因此,有时无法复制harness。失败导致数小时的返工。作为补救措施,采用了Docker。从那时起,一个能够在AFL处于停滞状态的基本Ubuntu映像上构建目标程序的Dockerfile便随之伴随着每个新harness,让黑客负责执行其Dockerfile的测试构建。转换为可交付成果的Dockerfile大大减少了将harness转移到另一个网络进行模糊测试时产生的开销。后来扩展了此架构,以便黑客可以使用任何任意模糊测试程序生成Docker映像。

自动化探索:此阶段的自动化包括获取完整的harness并在计算资源上运行它们。诸如Clusterfuzz之类的体系结构符合本研究的意图。在深度优先策略中,尝试通过在集群的多个节点上运行单个模糊作业来使用本研究的计算资源。当过渡到具有多个目标时,需要一个更简单的结构以允许快速运行许多作业。在初步研究之后,决定在单个节点上运行并在节点上使用所有内核的作业将满足需求。

漏洞识别:尽管本研究的实验重点是围绕利用目标应用程序的过程来建立团队,但却意识到,要建立管理模糊测试结果的流程,还需要做更多的工作-大规模的漏洞识别。某些应用程序产生了很多崩溃,一个应用程序会导致数千次崩溃。必须开发出用于在发生故障时分派足够的时间,同时又继续利用新目标的技术。在人力有限的情况下,这是一个具有挑战性的问题,目前仍在努力解决。

选择扩展本文工作的其他研究人员应尝试为发现的错误分配关键评分。他们可能还希望在实验之前确定所使用目标中已知错误的数量。

其他:发现SB的间接耗费对的SD影响要小得多。诸如强制执行GitLab策略或启用或禁用目标计算机资源之类的小事情变得很耗时,许多项目同时进行。模糊测试、归档和查看结果很难与队列中的其他目标保持平衡。此外,在本研究实际运营环境中,更高的领导者将增加目标队列,这使研究者能够确定如何分配优先级,同时平衡正在进行的工作。与许多努力一样,这些实际问题是将来工作的成熟领域。

0x05 Conclusion

由于对SD的缺陷感到沮丧,本研究寻求到了一个更好的解决方案。有证据表明SB在漏洞发现方面更有效,也发现了一些积极的副作用。SB更有效地雇用了各种技能水平的黑客,它还增加了可供黑客和领导者使用的文档和学习资源的数量,从而促进了技术的发展。SB更好地应用了自动匹配的漏洞查找工具,并且更清晰地定义了工作角色和单元任务。本研究测试SD和SB的实验是可重复的,因此可以使研究人员在类似的环境中测试与黑客攻击过程相关的其他假设。最后,本文学习、训练和攻击是为了乐趣和收益。

Reference

[1] Daniel Votipka, Rock Stevens, Elissa Redmiles, Jeremy Hu, and Michelle Mazurek. Hackers vs. testers: A comparison of software vulnerability discovery processes. In 2018 IEEE Symposium on Security and Privacy, pages 374–391, May 2018.

安全学术圈招募队友-ing, 有兴趣加入学术圈的请联系secdr#qq.com

黑客攻击的工业时代

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: