《The industrial age of hacking》略读

注:这篇文章被USENIX 2020接收,主要介绍了漏洞挖掘的协作模式,作者认为传统的方式属于深度优先,而作者提出了广度优先,在作者看来,广度优先可以各尽其职、使不同水平的黑客可以承担不同的任务,而且不会在不知道软件难度的情况下一直钻牛角尖。之后设计了实验、进行了两种策略的讨论。
《The industrial age of hacking》略读

Abstract
黑客社区存在一种认知偏见,即选择一种软件并投入大量的人力资源来查找该软件中的错误,而没有事先表明成功的迹象。 我们将此策略标记为深度优先搜索,并提出另一种选择:广度优先搜索。 在广度优先搜索中,人类只需花费很少的工作就可以对一系列目标进行自动化分析,然后投入更多的时间和精力来研究任何特定的目标。我们提出了一项可重复的人类研究,该研究利用了各种技能的团队,同时将自动化技术用于 尽最大可能。 我们的目标是一个有效发现错误的过程; 为团队成员的成长,指导和有效使用制定清晰的计划; 并支持可衡量的渐进式进度。 我们推导出了流水线过程,该过程改进了曾经复杂的手工工作。 我们的工作提供了证据,证明广度优先的方法可以提高团队的效率
Introduction
我们能否建立一个更好的漏洞发现流程?许多研究人员提出了旨在帮助人类工作的工具,包括将符号执行,模糊测试,污点追踪和仿真应用于错误发现问题的方法。 从某种意义上讲,这些技术可以自动进行错误查找,因为它们需要花费一些前期成本,可以随着时间的推移对软件状态进行搜索,而无需人工干预。 每个改进方案发明的目的是提高工具在实际软件上使用时的有效性。 然而,要大规模地发现漏洞仍然遥不可及,部分原因是要有效地设置自动化工具需要人为的努力。我们的工作重点是在自动化基础上进行人工操作。 我们选择专注于自动技术(而不是诸如静态分析等其他漏洞发现技术),因为我们认为它们具有可扩展性的巨大希望,但是我们绝不鼓励单独或与自主权无关地使用其他技术。
我们通过创建一个成文targeting的特意软件选择步骤,对对Votipka的流程[40]提出了较小的建议。我们鼓励新手黑客对潜在的软件目标进行广度优先搜索,以仅完成允许自动分析的基本但初步任务。 我们建议只有新手尝试过自动化而失败后,才应邀请经验丰富的黑客对选定的软件进行更深入但成本更高的分析。 我们的方法是通过将其他工作委托给经验较少的黑客,使最有经验的从业者专注于难题;然后,他们会生成有助于通知更高级分析的工作工件。 由于目标数量众多,所有黑客都有机会选择适合其技能水平的软件,并且团队成员拥有清晰的知识增长和指导途径。本文介绍了我们的漏洞发现过程以及用于评估它的可重复实验。 我们发现大量证据表明,在存在自动化的情况下,先行搜索是一种出色的定位策略。 我们还测量了将过程应用到漏洞发现活动的受试者的信心方面的显着提高。在对§2中的相关工作进行调查之后,我们在§3中介绍了我们的过程。 第3.1节描述了深度优先策略,第3.2节描述了我们的广度优先策略。 §4列出了实验的设计和执行:由两个黑客团队在连续两个星期内应用两种策略的过程的应用。 §5描述了我们的结果,而§6得出结论
Vulnerability
我们旨在发现以自动化(即模糊测试和相关技术)为基础构建团队的效率的方法,其目的是在软件中查找错误。 对我们而言,最有趣的是可以以某种方式利用漏洞来破坏系统的安全性。 我们认为已发布的错误和新颖的错误均针对主要使用漏洞(已发布(n天)或未发布(0天))的已用软件。 在这里,我们根据Votikpa的工作描述了漏洞发现过程。 我们还介绍了与我们的实验进行比较的两种不同策略。观察导致我们将错误发现者分为三类:如图1所示的徒弟,熟练工和大师。总的来说,我们将这三个组称为黑客。 最大化每个技能级别的生产力,同时使从学徒到硕士的逐步发展是​​我们流程的主要动力。学徒黑客具有一般的计算背景,并对如何应用一些自动化软件分析工具有基本的了解。 学徒工具集的核心是模糊器。 学徒在软件修改方面的经验有限,他们还没有掌握用于软件开发的各种构建系统的内部工作的方式。黑客黑客增加了操纵程序以使其工具起作用的能力。Journeyman可以通过修改源码或者给二进制进行patch来处理那些不适合fuzzing的困难问题,如校验机制、加密、不确定的功能等。熟练操作者会例行修改目标以暴露其攻击面。最高技能水平的熟练掌握可增加操作或创建工具的能力,以便更好地调查目标程序。 许多现有的工具都是由需要特殊方法处理特定零碎软件的人编写的。 我们将以爱丽丝为徒弟,以詹姆斯为职业手,以梅根为主要黑客。其他参与者包括*,他们根据黑客的工作做出针对性的决策; 分析师,他们将技术工作与其他资源(例如博客和常见漏洞和披露(CVE))相关联; 系统支持人员,负责管理自动化工作和计算资源。 根据对漏洞发现团队组成的技能水平的观察,我们为Votipka的漏洞发现过程[40]添加了针对性步骤,如图2所示。
Targeting会选择软件进行调查。在漏洞发现者中,target一词很常见,因为软件目标会受到异常的仔细检查,类似于攻击[28]。 目标阶段的目标是将复杂系统或一组复杂系统划分为目标,这些目标可以在漏洞发现过程的后续阶段中进行单独研究。 即使是整体的软件工件也可以分解为多个目标:例如,浏览器可以分解为媒体库,TLS和网络库,HTML / CSS渲染器,JavaScript引擎等,经验表明,许多团队或大多数团队都在考虑多个或多个目标。 在定位阶段应收集有关如何执行此划分的粗略信息。 例子包括针对目标的现有安全研究的普遍性; 目标源代码,错误跟踪器和公共开发人员论坛的可用性; 以及在目标中发现漏洞的影响。 目标本身的可用性; 它的依赖性(例如,软件,硬件和支持资源);以及与目标进行自动和手动交互所必需的工具是其他考虑因素。漏洞发现工作的预期获利与成功的可能性和价值成正比,与成功的成反比。 预计时间投入和所需技能水平

该模型指导如何进行目标定位和后续决策,同时最大程度地提高回报

并非所有的黑客都是平等的,在软件安全方面积累专业知识可能需要多年的努力,经验和指导[28]。 定位策略应可提高所有技能水平的总体生产率。 我们希望推导足够多的软件目标,以允许具有不同技能水平的黑客选择与他们的能力和兴趣相匹配的工作。最终,我们制定了将目标选择的*与“快速失败”的团队文化和激励相结合的策略。 以产生快速的结果。 因此,我们的tar提取阶段使团队可以自我组织,并可以更有效地利用旅行者和主级黑客的稀缺时间。 我们在第3.1节中介绍了深度优先策略,在第3.2节中介绍了我们偏爱的广度优先策略。
信息收集个体黑客和分析人员在漏洞发现过程中采取的第一步是收集有关目标的其他信息,这一次是为了着眼于后期阶段的决策。 这些信息中的关键是有关目标的发展,患病率以及已知的当前或先前缺陷的一般详细信息,以及已经完成的任何安全研究[40]。现有分析可以快速推进对障碍的理解以及克服障碍的方法。 例如,模糊化OpenSSH守护程序[26]的工作描述了11种不重要的技术来模糊化模糊目标。 在考虑混合水平的团队时,诸如此类的描述性指南允许团队协作或者更有经验的黑客
方案AAlice开始研究提供NTP服务的软件。 她记录了该版本的常用版本,审查了国家漏洞数据库中的已知漏洞,并记录了该项目中使用的主要编程语言。
程序理解黑客接下来将重点放在了解目标的操作和设计上。有趣的是目标的使用目的,更高级的用例和配置选项以及目标软件的总体设计。 在此阶段收集的信息可以来自文档,源代码,在线论坛,用户,开发人员[40]和其他来源。 程序的理解和下一阶段的攻击面分析,构成了漏洞发现过程中的迭代周期; 图2用障碍物决策点说明了这一点。
方案A(续)爱丽丝通过从在线存储库下载其源代码并运行来安装NTP服务。 使。 她使用了与软件交互的使用说明。场景B在一个单独的项目中,詹姆斯在阅读了爱丽丝的初步笔记后编译了一个浏览器。 这需要一些工作,因为他的Linux发行版未提供所需的库。 他确定了浏览器的JavaScript引擎和HTML渲染器,并指出了用于解码各种媒体的库3
格式。 James还指出,默认构建使用地址空间布局随机化(ASLR),非可执行堆栈金和stack canaries.
攻击面分析调查程序的攻击面涉及设计提供目标程序部分输入的方法。 在许多情况下,这采取的是模糊测试工具的形式,也称为驱动程序应用程序[21],它将测试仪生成的输入定向到程序攻击面的一部分。 此阶段的实际执行方式因技术水平各异的黑客而异。我们的流程要求学徒使用已知的工具,直到障碍阻止他们进一步进行。 他们的策略是在进度停止时迅速放弃,记录其成功的工作,然后转到下一个目标。服务员使用学徒制作的文档,使他们能够立即应用高阶分析并继续进行程序了解-攻击面分析周期 尽管有迹象表明存在虫子行为,但达到大师级水平的项目要么在概念上很重要,要么超出了其他黑客的利用能力。 硕士应始终进入计划的理解-攻击面分析周期,其中包含大量的文档以及由学徒和熟练工产生的其他产品。 因此,大师的时间被浪费在做大师只能执行的任务上。一些文献表明,即使开始漏洞发现,一个人也必须已经具备了我们所描述的大师的技能:“尽管模糊测试工具更为普遍,但人们通常不使用现成的工具。 -架子工具; 他们更喜欢自己做模糊器。 。 。 [11]“我们发现了反例样本,学徒和熟练工可以在漏洞发现的每个阶段继续前进。在其他情况下,它们为黑客的后期工作提供了明显的价值。 无论哪种情况,我们的流程都旨在最大程度地减少经验不足的黑客的贡献,同时使高手黑客的使用效率更高
方案A(续)爱丽丝学习目标物接受的输入类型。 这些包括通过网络套接字的输入以及服务器启动时读取的配置文件。 她熟悉的模糊测试工具不支持网络模糊测试,因此她为将来的分析师尝试使用网络模糊测试做笔记。 但是,她知道如何根据文件输入开始进行模糊测试。场景B(续)詹姆斯为浏览器更复杂的媒体库编写了模糊测试工具,并使用Dockerfile打包了工作。 Alice有所帮助,因为她还没有学会如何使用Docker
自动化探索一旦团队学习如何操纵程序的输入,它就会反复执行这些操作以枚举程序的尽可能多的功能。 这样可以最大程度地发现脆弱状况。 尽管“有时,幸运的运行时失败会导致漏洞[11]”,但在此阶段中,我们主要将精力集中在使用上一阶段产生的工具在auzzer中测试目标程序。为了使结果可重复, 团队将攻击面阶段的输出标准化为Dockerfile [3],该文件将目标程序及其模糊测试工具组合在一起。黑客的熟练程度以及对给定目标的适用性的考虑决定了模糊测试器的选择。 模糊器的有效性包括利用目标和功能(例如地址清理,可伸缩性,速度等)的效率。 不同的模糊测试者倾向于使用不同类型的目标。 举例来说,LibFuzzer有助于编写论坛的模糊工具,而American Fuzzy Lop(AFL)使黑客能够在给定二进制目标从文件或标准输入流中读取其输入的情况下快速开始模糊测试。
方案A(续)爱丽丝以配置文件作为模糊输入,在未修改的NTP程序上开始模糊运行。方案B(续)詹姆斯(James)部署了浏览器媒体处理工具以进行模糊处理。 它们在模糊测试运行时都在其他目标上工作
漏洞识别在迭代过程中发现错误的黑客必须确认错误是否为漏洞。 当一个漏洞被证明可以被攻击者利用时,就会存在一个漏洞[34]。这可以很简单,就像使用上一个阶段中确定的崩溃输入来运行目标程序一样简单,也可以像设置一个复杂的系统来观察实际效果那样复杂。 某些输入。 此阶段可能需要自动化以平衡查看结果所需的人力,尤其是在发现大量程序崩溃的情况下
方案A(续)爱丽丝开始另一个目标。方案B(续)模糊化发现了六个输入,这些输入导致目标浏览器崩溃。 James无法利用这些错误,因此Meghan承担了任务。James的工作重点转移到模糊浏览器对传输层安全性(TLS)的使用上
3.1Depth-first strategy (SD)
最明显的定位策略类似于深度优先搜索。 首先,黑客基于某种程度的操作影响来选择一小部分目标。 对于每个选定的目标,团队都会花时间审核软件的错误。 这个工作流程是很自然的:它将团队的精力一次集中在一个软件工件上。 研究人员在工作之初就选择了目标,并在相当长的一段时间内持续关注该目标。深度优先的工作流程发现大型软件中的错误需要熟悉一段时间[11]。 例如,Google Project Zero的研究人员运用这种策略来查找Apple Safari浏览器中的错误。 研究人员利用了Safari中使用的基础库,这需要对程序有深刻的了解,并需要对构建链进行修改。 他们在一年的时间内使用定制工具发现了26个错误[13]。从管理层的角度来看,这种策略很简单。 团队负责人从每个黑客那里收集信息,并将其分发给检查同一目标的队友。 领导者根据每个团队成员的方法来划分工作。 例如,一名黑客可能会检查与目标软件一起分发的单元测试,并对其进行修改以适合团队的目标; 另一个可以使用流行的静态分析工具来分析软件; 还有一种可以尝试利用目标程序的不同部分来与模糊器一起工作。 安排繁琐的工作并进行后续审核的责任通常落在线束的作者身上。骇客采用SD记录信息,因为该信息与其他团队成员直接相关。 为了促进教练的发展,团队将新手黑客与专家配对,希望新手能够吸收专家的概念和技术.SD的主要缺陷似乎是它与实际团队的广泛技能水平相比效率低下。 与查找错误相关的更轻松的任务。 同时,在项目开始时,主人可能会发现自己闲置或执行更适合其他技能水平的任务。另一个陷阱是对自动化的低效使用。 开始进行模糊测试后,团队将继续在同一目标上工作。 他们可能会建立更多的模糊工具或进行深入的手动分析。 然而,自动化之后可能会发现有助于这些过程的信息,甚至可能会找到他们寻求的错误。 耕作可能会浪费人力
3.2 Breadth-first strategy (SB
我们设计了一种旨在解决SD陷阱的新策略。 我们的目标是扩大漏洞发现过程的规模,以支持不断壮大的黑客团队,减轻黑客的疲劳并增加绒毛的产生。 为此,我们的策略依赖于急剧增加软件目标池的想法。 鼓励黑客在每个工作日内产生尽可能多的令人困惑的安全带。 我们称此为广度优先策略(SB)。当很明显地利用特定目标需要大量时间投入时,SB鼓励学徒级黑客放弃。 学徒们没有继续钻研“兔子洞”,而是在将目标移到单独的“旅人”队列之前记录了有关目标的任何相关信息。 这提供了更多经验丰富的黑客材料,然后再应用他们的更丰富经验的功能。我们认为,此策略的关键是收集大量目标,并针对每个目标让学徒做最简单的事情,仅此而已。 将学徒拒之门外,使技术娴熟的黑客可以在有报告的情况下更深入地调查目标。 在某些情况下,学徒会产生工作状态甚至模糊的输出语料,但如果产生的这些人工产物超出其能力,则不会。 生成大量有趣目标的方法包括:(1)将设备划分为其软件组件;(2)在对系统级攻击面进行彻底分析之后;(3)枚举库依赖性;以及(4)研究多个错误赏金 。 有大量目标可以使学徒拒绝障碍超过其能力的目标。 示例可能包括具有挑战性的运行时要求的软件,例如在小众硬件上运行的实时操作系统; 需要动态网络流的程序,例如FTP; 需要大量系统配置的程序; 或使用自定义构建过程的程序。 这么大排队,确定目标的优先级,使黑客将更多时间花在高价值物品上就变得至关重要。 例如,渗透测试团队的黑客应优先考虑允许外部网络连接的目标。我们研究中的重要考虑因素是弄清楚如何快速培训新成员,同时允许他们为团队提供运营价值。 大量的目标使学徒可以选择与他们已经知道如何使用的工具兼容的对象。 当他们发现目标无法与他们所知道的工具一起使用时,他们可以记录所学的知识并将其移入操作人员队列。 旅人接送的目标是学徒已经开始并将他们推向探索阶段。 学徒可以反过来从这项工作中学习。 因此,每个团队成员的工作都会由经验更丰富的人员进行审查,并且有一条明确的道路可供他人根据他人的经验进行学习。 同样,高级黑客会记录他们所克服的问题以及所采用的解决方案的类型。 这些说明也经常帮助职业人士发展知识。为了有效利用自动化,每当新的自动化工作开始时,所有工作都应在特定目标上停止。 仅在完成该工作(基于某种预定的完整性度量)后,才对结果进行审核,将其合并到发现中,并用于确定后续步骤。 这样,通过最大程度地依靠自动化,可以最大程度地减少不必要的人力
4.Experiment
《The industrial age of hacking》略读《The industrial age of hacking》略读

《The industrial age of hacking》略读

《The industrial age of hacking》略读