没有合适的资源?快使用搜索试试~ 我知道了~
Bug发现与分类技术的研究和应用
1599××从一个小程序中变出Bug的能力姜志远NUDT中国弗拉维奥·托法利尼EPFL瑞士美国波士顿大学摘要甘水涛SKL-MEAC,清华大学中国(*通讯作者)卢西奥·罗梅里奥EPFL瑞士超张清华大学中关村实验室中国ACM参考格式:阿德里安·埃雷拉澳大利亚国立大学唐超静NUDT中国马蒂亚斯·帕耶EPFL瑞士覆盖率引导的灰盒模糊器的流行导致了开发人员必须优先考虑和修复的安全关键错误的了解bug暴露的功能(例如,漏洞类型、读取/写入的字节数),从而能够优先处理漏洞修复。不幸的是,理解缺陷的能力是一个这是一个定性和任意的大部分手动过程,可能导致对错误功能的误解。ESCHERATIO自动发现bug的功能。ESCHERATIO分析崩溃测试用例(即,暴露错误的输入)以了解攻击者如何利用错误的全部程度。ESCHERATIO利用一个功能导向模糊器来有效地发现新的bug功能(而不是只生成一个崩溃测试用例,如传统的灰盒模糊器所做的那样)。我们评估了八个开源应用程序中的38个错误(34个CVE和4个错误报告)。 从这些错误中,Evo-c ATIO:(i)比AFL++的崩溃探索模式多发现了10个功能(即,由一组崩溃引起的独特功能的数量高出10个);(ii)将38个错误中的19个转换为新的错误类型(证明手动定性分析的局限性);(iii)为16个测试的CVE中的7个生成了新的概念验证(CET)测试用例,这些测试用例违反了补丁,其中一个仍然在最新版本的软件中触发。CCS概念• 安全和隐私→软件和应用程序安全。关键词Bug能力,Bug分类,Fuzzing允许免费制作本作品的全部或部分的数字或硬拷贝,以供个人或课堂使用,前提是制作或分发副本的目的不是为了盈利或商业利益,并且副本的第一页上必须尊重作者以外的其他人拥有的本作品组件的版权。允许使用学分进行摘要复制或重新发布,张贴在服务器上或重新分发到列表,需要事先获得特定许可Zhiyuan Jiang , Shuitao Gan , Adrian Herrera , Flavio Toffalini ,Lucio Rome- rio,Chaojing Tang,Manuel Egele,Chao Zhang,andMathias Payer.2022年。ESCHERATIO:Conjuring Bug Capabilities froma Single Phase. 在2022年ACM SIGSAC计算机和通信安全会议(CCS'22)的会议记录中,2022年11月7日至11日,美国加利福尼亚州洛杉矶。ACM,纽约州纽约市,美国,15页。https://doi.org/10.1145/3548606.35605751介绍动态软件测试技术生成概念验证(proof-of-concept,缩写为CET)测试用例,触发目标程序中的错误开发人员分析这些PoC以定位错误的根本原因,然后开发补丁来修复它。现代错误查找工具(特别是模糊器)自动(快速)发现大量PoC,大大提高了软件安全性。然而,随着发现的PoC数量的增加,开发人员面临着一个挑战:给定有限的开发人员资源,如何快速有效地分析PoC,以根据错误严重性优先修复错误?基于根对POC进行分组的聚类技术#35753;的原因,是多方面的[7]。 集群可以帮助开发人员估计一组POC中的bug数量。之后,开发人员可以将精力集中在bug上(将对应于同一bug的PoC聚集在一起)。然而,简单地聚类PoCs并不能揭示攻击者在利用给定bug时可以利用的全部功能;聚类之后,分析师必须投入资源来从其队列(或PoCs集群)中了解bug直觉上,能力允许攻击者这可能包括读取(任意)内存位置或更改程序的运行时状态。在存储器安全错误的上下文中,能力被定义为以下的唯一元组:错误类型(例如,越界读/写、释放后使用、内存不足);访问类型(读或写);访问的字节数;牺牲对象的名称(例如,缓冲区);牺牲对象内的偏移;以及位置(例如,堆栈、堆、全局)。示例能力是(OOB,读取,5,缓冲区,10,堆栈),它描述了一个5字节的出界日和/或费用。请求权限请发邮件至permissions@acm.org。CCS©2022版权归所有者/作者所有。授权给ACM的出版权。ACM ISBN 978-1-4503-9450-5/22/11。. . 15美元https://doi.org/10.1145/3548606.3560575从堆栈上的10字节缓冲区开始的读访问任何与未观察到的“能力元组”一起崩溃的输入1600×CCS理解这些功能对于确定bug修复的优先级至关重要:不完整的理解可能会导致不可利用的bug受到过多关注,反之亦然,可利用的bug被忽视。虽然所有的错误都应该被修复,但安全关键的可扩展性必须优先考虑。理想情况下,错误修复的优先级取决于错误在某种威胁模型下造成的风险级别(例如,当考虑代码执行时,任意存储器写入被认为比在固定的未映射地址处的非法读取更严重然而,优先级被开发人员面临的大量错误报告所阻碍[16,61]。在撰写本文时,Google的自动化模糊测试平台syzbot已经提交了971份关于Linux内核的未修复的此外,单个节点(或PoC集群)可能无法完全展示完整的功能集例如,如果一个CPU崩溃,读取了1字节的越界(OOB),这是否是错误的全部范围如果攻击者利用这个漏洞,他们会有什么能力?有趣的是,覆盖率引导的灰盒模糊器(自动bug查找的事实标准)可能会模糊这些问题的答案:模糊器的目标是找到bug,而不是调查它们的能力。Fuzzers将通过相同执行路径触发相同bug的PoC视为重复:他们保留第一个遇到的PoC并丢弃所有其他PoC,而不管它们的完整功能集如何。因此,一个bug的全部攻击能力可能仍然是隐藏的,这给开发人员判断bug的能力带来了更大的负担。为了减少这种负担,需要使用自动化技术来探索和评估bug的能力。理论上,自动漏洞生成(AEG)[3,13,30,72- 74 ]可以确定漏洞的能力(在给定威胁模型的上下文中)。然而,大多数AEG引擎依赖于符号执行来生成漏洞利用[3]。在实践中,符号执行引擎本质上是不完整的(例如,由于路径发散[4]),并遭受状态爆炸。例如,虽然SyzScope [78]揭示了模糊暴露内核错误的安全影响,但其应用受到状态爆炸的限制[1,66]。观察到缺乏可靠的工具来自动评估错误发现)缺陷的能力,并协助人类分析师进行严重性估计。ESCHERATIO减少了花在bug分析上的时间,同时改善了开发人员对bug的评估。ESCHERATIO利用模糊和清理来发现内存损坏错误的新功能,确保这些功能被捕获为单独的POC。 由此,我们提出了一个框架,根据给定的威胁模型来获得一个定量分数的错误的严重性。总之,我们做出了以下贡献:一个帮助开发人员确定优先级和开发关键错误修复的系统ETRADITION由一个自定义的模糊器和消毒器组成,可以发现新的攻击能力,而不仅仅是一个单一的模糊器(如传统的灰盒模糊器所发现的演示了ESCHERATIO我们展示了ESCHERATIO如何自动(a)导出定量严重性评分(类似于[1] Evocatio在拉丁语中的意思是现有的漏洞评分系统),以及(b)验证软件补丁的有效性。使用八个开源应用程序中的38个错误对EPHERATIO进行评估从这些错误中,ESCHERATIO:(i)比AFL++的崩溃探索模式多发现了10个功能(iii)生成的新POC违反了16个测试CVE中7个的补丁,其中一个在最新版本中触发。我们的研究结果强调了自动化错误评估的必要性,并表明ESCHERATIO能够很好地实现这一目标。2背景下面的章节将正式定义功能(2.1节),讨论现有的漏洞评分方法(2.2节),并为我们的工作提供一个激励性的例子(2.3节)。2.1使用能力对奇怪的机器进行一个易受攻击的、有缺陷的程序会暴露出一个奇怪的机器,攻击者可以通过利用它来对这台奇怪的机器进行的能力取决于特定错误暴露的能力。换句话说,当将怪异机器建模为预期有限状态机中的“怪异状态”集合时,不同的能力允许攻击者转换到不同的最终,一个功能定义了一个bug(当被利用时)“可以做什么例如,将字节序列写入函数指针的能力(例如,在vtable数据结构中)可能允许攻击者崩溃或重定向目标程序中的执行类似地,读取堆栈内存的几个字节的能力,可以从中收集敏感数据(例如在CVE-2020-11104 [70]中)是另一种能力。根据防御者的威胁模型,某些能力可能比其他能力例如,如果系统运行时间是关键的,那么空指针解引用是一个严重的错误(可能会使系统崩溃)。但是,如果主要关注的是任意代码的执行,那么同一个bug本身可能相对良性无论如何,在没有完全理解bug拥有的功能的情况下,很难评估bug的严重性;直观地说,bug拥有的功能越多,bug就越严重。这种缺乏理解可能会导致错误的严重性分类2.2当前度量缺陷严重性的方法通用漏洞评分系统(CVSS)[51]是对漏洞严重性的实际衡量。若干指标(例如,攻击向量、复杂性、用户交互)手动汇总,并通过0到10之间的值进行汇总;值越高,严重性越高。 其中一些指标是定性的,不能以程序方式产生(例如,攻击复杂度)。分析人员必须仔细检查bug,并确定这些定性指标的值这是一个耗时、易出错且主观的过程;可能导致不同的分析师对同一个bug分配不同的分数[9,43]。此外,分析师···1601--ESCHERATio:Conjuring Bug Capabilities from a Single PhantomCCS'22,2022年11月7日至11日,美国加利福尼亚州洛杉矶清单1:一个激励性的示例程序。1voidfoo(char*sr c,char*de s) {2intlen_one =sr c[4];//单字节3//多能力字节4intlen_tw0 =sr c[20]+sr c[22]*sr c[33];56memcpy(des,src,len_one);7memcpy(des + len_one,src,len_two);8}910publicintfindDuplicate() {11//难为符号执行12char* src = inflate(input_file);1314//控制流字节15if(src [0] =='a' src [1] =='b'){16char* data = parse Data(src);17如果(strlen(data)!=(120)18返回1;1920//能力字节带约束21intbuf_size =sr c[40] +sr c[41] +sr c[42] +sr c[43];22如果(src [40] + src [41] > 50|| src [42]<100)23返回1;2425char* dest = malloc(buf_size);26foo(src,dest);//错误函数27}28返回0;29}通常只提供一个单独的bug [65],他们必须手动确定bug的全部范围。出于这些原因,我们认为,一个更完整的了解一个错误2.3激励的例子清单1中的程序2激发了对ESCHERATIO的需求。这个程序在foo中包含一个堆缓冲区溢出,它可能会在第6行和第7行崩溃,具体取决于buf_size、len_one和len_two的值。重要的是,授予攻击者的能力(在利用此溢出时)取决于这些值。程序首先调用zlib大多数符号执行引擎在这一点上失败了,因为它们通常无法准确地建模外部库(如zlib),并在解压缩过程中屈服于状态解压缩后,对输入数据的前两个字节执行有效性检查(第15行)。我们将这两个字节标记为“控制流字节“,因为它们影响程序的控制流。在第6行和第7行找到bug需要满足这些控制流约束。一旦满足这些控制流约束,就读取偏移量为40-43的输入这些偏移量中包含的数据影响foo中使用的缓冲区的大小,最终决定溢出的大小。我们将这四个字节标记为“能力字节“(精明的读者将认识到这些能力字节对应于数据流中的变化)。对字节40- 42(第22行)执行额外的检查因此,这些字节既是能力字节,也是控制流字节。foo函数(第11到22行)演示了不同类型的影响能力和能力字节的序列(第4行,这里偏移20、 22、 33处的三字节序列影响能力。清单1包含十个关键字节:两个控制流字节、五个功能字节和三个既是控制流又是功能字节的字节。识别这些字节对于有效地发现新能力、确保不浪费时间探索状态空间中的错误状态(即,与给定bug无关的状态满足控制流字节可以确保新的PoC保持触发原始bug的相同控制流,而探索不同的能力字节值会导致新的PoC以不同的方式表现相同的bug。我们使用模糊自动探索这个空间。3进化模糊器通过运用大量随机生成的输入来发现目标程序中的错误导致崩溃的输入(运行一个或多个错误)允许攻击者控制最终的怪异机器。重要的是,这些输入还授予攻击者一组能力,使他们能够对这个奇怪的机器进行编程。给定一个导致崩溃的输入(由模糊器生成),当攻击者触发底层bug时,他们被授予什么级别的控制权?ESCHERATIO通过系统地探索一个bug从给定的bug中拥有的能力范围来回答这个问题。ESCHERATIO由以下组件组成(图)。1)、能力检测(CapSan)。通过C A pS A n检测新功能。C A pS A n将AddressSanitizer(ASan)的可见性扩展到触发的内存安全漏洞(第3.1节)。能力发现(CapFU ZZ)。新的能力被发现通过CA pFU zz。C A pF U zz通过重新调整传统的覆盖引导模糊器来扰动输入模糊器以发现新的功能。CA pFUZZ使用CApSA n来磨练新的能力,这些能力赋予攻击者更多的权力和控制权(第3.2节)。分析师和开发人员都可以使用新发现的功能。我们在第4节中演示了两个应用程序--估计错误严重性和补丁测试。3.1能力检测扩展需要一种机制来有效地从给定的扩展中提取 本着模糊的精神,最自然的方式来实现这一点是通过消毒剂。事实上,消毒剂和模糊剂经常配对在一起,增加模糊剂对特定行为的敏感性。考虑到我们对内存错误的关注,我们采用Ad- dressSanitizer(ASan)[63]作为我们的能力检测器和收集器。3 ASan检测目标程序,使其在违反内存安全时崩溃。重要的是,只要检测到无效的内存访问,ASan就会生成详细的报告。 虽然模糊器通常会忽略此报告(因为它们只关心是否发生崩溃),但它包含确定何时发现新功能所需的丰富错误信息。 能力检测基于第2.1节中列出的五个属性。我们修改ASan(将我们的工具命名为CA pSAn),以公开此崩溃报告的机器可读版本能力字节:单个能力字节(第2行),其中单个字节3该设计可以扩展到覆盖其他类型的消毒剂,2以CVE-2016-9532为模型我们简化了逻辑和变量名。可以从消毒剂中提取。1602P@IeJ02I)+e2+u0e1ECAPFUZZBu#Cp()*)+yGe/e0&+10D/)+)*)/pu+>1C3K)+I/eKC p()*)6ee4C0)+)2&*By+eD/Ee0e/2eF/#)6ee4 6e*e2+)1/89:;:M=通过+eG3eLue/2e)/Ee0e/2eC p()*)+ yB e+ e2+)1/89:C=6)/#*eG(y+ e)/Ee0e/2e6ee47e+e/+)1/89:;:=@e3+8C10eAuzz)/#=C p()*)+ yB e+ e2+)1/89:C=C0)+)2&*By+e3Gu)4e45u++)1/CGBy+ e3HBGBy+ e35u++) 1/7 u*e89:;:9=C0)+)2&*By+ e3>0) 10)+)z&+)1/89:;:;=CCS图1:EvocaT io工作流程。3.1.1强制执行以检测越界访问。通过去故障,ASan在遇到第一个错误时中止程序执行[25].例如,如果错误覆盖多个OOB字节,ASan将在第一次OOB写入时中止执行这种设计适用于大多数场景;即,当分析师需要找到崩溃的原因时。虽然这限制了误报,但也失去了深入探索bug功能的机会; ASan无法发现隐藏在其他bug后面的bug(例如,几个OOB写入)。例如,CVE-2021-3156(清单2)在将字节从from缓冲区复制到to缓冲区时执行多次写入。但是,由于代码一次复制一个字节(第5行),ASan在第一次OOB写入时终止程序,报告OOB长度为1。相反,该漏洞允许攻击者溢出多个字节(前提是第3行的条件仍然是可满足的)。在这里,ASanCA pSA n通过在检测到错误后继续执行以充分探索bug功能(通过禁用ASan的halt_on_error选项)来缓解此限制为了正确检测每个缓冲区的OOB能力(并防止误报),CA pSA n记录溢出长度并标识溢出的数据结构。这允许CA pSA n区分跨不同缓冲器的不同溢出长度每当到达一个新的数据结构时,我们就停止探索(直观地说,这意味着我们不再触发相同的bug)。清单2:来自CVE-2021-3156的代码片段。现有的模糊器被设计成探索目标在这样做时,模糊器可能会忽略暴露其他功能(与同一错误相关联)的崩溃。 这意味着分析单个模糊器产生的bug不足以完全捕获bug的安全影响。但是,一个完整的安全评估必须至少考虑同一个bug的所有独特崩溃我们提出CA pF uzz来满足这些要求。CA pFU zz是一个能力驱动的模糊器,用于从初始崩溃中发现新的崩溃(从而发现新的能力)CA pF uzz由两个阶段组成:一个用于标记和优先化导致新功能的关键字节的模块(第3.2.1节至3.2.2节),以及一个用于探索功能空间的突变引擎(第3.2.3节至3.2.5节)。3.2.1批判性推理。 如2.3节和之前的工作[21,46,76]所示,只有输入字节的一个子集会影响程序的行为,从而影响bug的能力。因此,有效的能力探索需要理解哪些字节影响bug的能力。 根据第2.3节,我们将关键字节分为两类:影响控制流的(���字节)和影响数据流的(���字节)。算法1概述了我们的方法来识别和分类关键字节。单字节推断。先前的工作[21,76]已经成功地利用单字节推理技术来提高模糊器与此相反,ESCHERATIO使用单字节推断来确定哪些字节对新功能有贡献。它通过执行穷举搜索来将给定的输入字节标记为字节���或���字节(或两者)。算法1中的第2行到第10行描述了这个过程。对于每个输入字节i,是经过测试的。字节i被标记为"字节如果(a)一个新的修正案引起了一个变化,3.2能力发现覆盖率引导的灰盒模糊器通过随机变异不断产生新的输入来探索目标程序模糊器不受符号执行等方法固有的可扩展性限制,使其成为发现真实世界程序中新功能的理想选择。不幸的是,IN相反,如果检测到能力的变化,则i被标记为1/4字节我们通过覆盖图的变化来推断控制流的变化(记录在中���),而数据流的变化则通过能力的差异来推断(记录在C中)。字节序列推断。先前描述的穷举搜索在执行单字节推断时是快速且有效的,但不注意多字节关系(例如,由于特定的语法)。1if(ISSET(sudo_mode,MODE_SHELL)|__2pub lic intfindDuplicate(* findDuplicate){3if(from [0]=='\\'!isspace(from [1]))4从++;5* to ++=* from ++;6}7}1603PP∈←∈∈∈←←∈..PP()下一页()下一页byte[���������������← −1ESCHERATio:Conjuring Bug Capabilities from a Single PhantomCCS'22,2022年11月7日至11日,美国加利福尼亚州洛杉矶算法1:关键性推理。输入:仪器化程序、初始时间、探测时间输出:100字节,100字节/* 获取bug能力C和覆盖图coverage,coverage是未崩溃种子的能力 */1 {C,N} ←执行(P,N)2foreach ���∈ {0,1,. . . |���}do/*单字节推断*/|} do/* Singlebyte inference */3���′←���4foreach���∈ {0,1,. . . 255}do/* 彻底搜索 */5′[]←������6{C′,���C ′} ←执行(P,C′)7如果′���(C′=���C′=C),则8字节[���]←字节[]{}���9else ifC′C′C′���则10字节[���]←字节[���]{{}}���11 rep eat/* Byte-sequence inference */12←RndByteSequenceSelect(RndByteSequenceSelect���)13′←RndMutate(,)/* 应用随机突变 */���14{C′,���C ′} ←执行(P,C′)15如果C′C′C′,则16位←字节序列缩减(ByteSequenceReduction���)���算法2:关键节点上的突变规则输入:仪表化程序,初始值,������字节,字节输出:突变后的种子"/*seqs 是一组序列,seq是一个序列 */1seqsPrioritizedSeqSelect(10字节)2���′���3 foreachseq塞格斯杜4(如果序列)100字节,然后5字节RndPositionsSelect(seq)6个foreach字节字节做7if字节100字节,然后8继续���10RndMutate(",byte)10���′←���′′新能力的发现应当优先于其它序列。在每个循环中,对于每个序列,我们使用以下谓词来确定序列是否会导致新的能力序列:���������(19 直到���=0这些关系要求相关字节一起发生变化一个该谓词应用于最后的n=20个种子4,以确定它们的贡献n(n):清单1的第4行和第22行显示了一个多字节关系的示例。这些序列的大小可以迅速增长,������(������=0������������((二)穷举搜索是不可能的;幸运的是,模糊已经被证明可以有效地处理如此大的搜索空间。第11行到第19行(A1-出租m1)描述了我们用于多字节序列推断的基于模糊的方法我们的多字节推理首先选择输入字节的一个随机子集,并对它们进行变异以创建���'(第12行到第13行)。程序然后执行���'。如果是新的,则将序列添加到���字节能力被发现。不幸的是,发现的序列可以是不可约的(即,不能去除冗余字节)和噪声(由于输入字节的随机选择)。 此噪声以字节的形式存在,不会对的行为的更改产生影响。错误地将这些字节标识为关键字节会显著降低性能(因为更改这些字节会浪费时间)。 必须尽早滤除噪声字节。C A pF U ZZ使用ByteSequenceReduction操作处理噪声字节(第16行)。找到序列后,ByteSequenceReduction会将尽可能多的字节恢复为原始值,同时确保保留新的程序行为。因为字节序列可能很大,我们采用在这里,块中的所有字节都恢复为原始值:如果新的行为持续存在,则缩减成功;否则,选择较小的块大小,并重复该过程,直到我们达到单个字节。3.2.2关键优先级。关键字节推断可能会导致大量的序列在100字节。当目标程序具有复杂的输入语法时,这一点尤其明显虽然突变这些序列中的任何一个都会引入新的能力,但仔细区分序列突变的优先级对于提高CAPpFuzz贡献最大的序列在这里,时间序列代表随时间动态变化的最具能量的序列通过优先化具有更高能力值的序列,CA pFU ZZ关注(a)找到更多能力的序列,以及(b)更快地找到它们的序列。������使用PrioritizedSeqSelect函数(算法2中的第1行)对序列进行优先级排序。3.2.3突变改变关键字节以探索周围的状态空间并发现新功能.CA pF uzz使用在关键字节推断阶段(第3.2.1节)收集的信息来发现与原始崩溃共享相同控制流的新崩溃 我们回想一下,推理阶段������为影响控制流和/或数据流的每个输入字节(或序列)分配一个字节或字节标签。 为了将探索集中到数据流,从而找到遵循与原始PoC-C相同的执行路径的新崩溃,PFUZZ在突变阶段期间仅考虑���字节和序列(算法2)。关键字节与输入长度密切相关;更改输入长度会使以前收集的信息无效。因此,使输入长度保持恒定,并且禁用改变输入长度的突变(例如,插入、复制和拼接)。类似地,跳过确定性突变阶段,因为该过程先前在推断阶段期间发生。3.2.4种子保留。 C A pF U zz旨在发现新功能。因此,它只保留引入新功能的崩溃测试用例。这些测试用例也存储在模糊队列中,确保它们也发生变化(帮助引导模糊器发现新功能)。对每个新生成的测试用例执行检查,以验证它是否引入了新功能。这些检查很频繁[4]我们根据经验选择了最小值,并将参数优化留给以后的工作。1718������������(1���、来自于0否则,请执行以下操1604CCS并且可能成为长模糊CAM-PAIGN的性能瓶颈(由于需要检查的能力数量增加 我们使用一个哈希表,使能力查询效率,并防止影响性能的能力的数量。3.2.5种子选择。 C A pF U zz遵循传统覆盖引导模糊器的策略,并存储“有趣”的测试用例(即,到达新代码的那些)在模糊器队列中用于进一步的突变。在模糊测试活动期间的任何时候,队列中都可能有许多测试用例此外,一个给定的测试用例帮助发现新功能的概率会随着时间的推移而动态地演变。 出于这些原因,需要一种机制来选择最有希望的种子进行突变。我们引入了以下两个用于种子选择的补充规则,其中新序列被定义为尚未执行测试用例的序列:(1)偏好由新序列生成的种子,以及(2)偏好由最具能量的序列生成的种子。 C A pF Uzz按顺序应用这些规则。首先,它验证是否存在新的序列 如果为真,则将其第一个测试用例设置为最高优先级,并将序列标记为已测试(即,它不再是一个新的序列,并且该序列的进一步测试用例将不会被设置为最高优先级)。如果没有发现新的序列,则使用等式(1)来识别能量最大的(2)并优先考虑这一点。4应用我们演示了两种情况,其中发现错误的能力是有用的分析师和开发人员:错误的严重性评估(第4.1节)和验证补丁的功效(第4.2节)。4.1严重程度评估防御者必须根据bug的严重性优先修复哪个bug。然而,对漏洞严重性进行评分是一个主观的过程,并且高度依赖于防御者的威胁模型。自动化这个评分过程需要开发上下文相关的规则来确定多个维度上的bug严重性。 虽然这在一般情况下是不可能的,但我们演示了bug功能如何帮助这个过程。我们设计了一个评分系统,它使用的缺陷发现的功能,覆盖的ESCHERATIO自动得出一个严重性分数。 我们的系统是专为威胁模型,其中攻击者希望实现远程代码执行的目标程序。但是,可以将模型配置为符合更具体的用户该模型在第4.1.1节中详细介绍,实验结果在第6.3节中介绍。我们的研究结果表明,将功能(由ESCHERATIO发现)与自动评分系统相结合,可以提高严重程度评估的效率。4.1.1缺陷严重度评分。我们将CA pF uzz生成的各个功能报告合并到一个bug功能报告中,该报告由以下六个度量组成(基于第2.1节中介绍的度量):错误类型:不同的错误类型-例如,堆栈缓冲区溢出(SOF)、堆缓冲区溢出(HOF)和UAF-可由C A p-FUZZ替换。缺陷类型的种类越多,满足利用条件的概率就越高(即,利用漏洞所需的能力的最小组合最大 OOB读/写的长度:OOB读/写的长度越大,要利用的区域就越大。可读/可写地址范围可以读取/写入的地址范围越大,任意读取/写入成功的概率就越高。Num. OOB对象的数量:这个数量越大,攻击者进行不同攻击的机会就越多(例如,SOF,HOF)。最大OOB大小对象:C A pF UZZ记录溢出缓冲区的不同大小,报告有关原始内存对象的信息(ASan报告最近的对象)。使具有不同大小的对象溢出的能力有助于生成漏洞利用(例如,攻击者可以针对不同的位置)。Num. 不同的读/写偏移量:在原始对象内以不同偏移量读/写的能力给予攻击者更多的灵活性(因为更多/不同的存储器区域潜在地是可读/可写的)。ESCHERATIO跨多个POC聚合这些度量,以计算每个原始类型(即,读和写)。 提供两个分数-而不是一个分数-允许开发人员更准确地评估错误的影响。我们再次强调,评分系统需要特定的威胁模型。这里我们提供(a)示例威胁模型,以及(b)一个可配置的评分系统实例,以显示如何使用能力来测量错误严重性(基于人类知识)。在我们的实现中提供了更多的细节。4.2斑贴试验开发人员需要深入了解给定的bug才能开发完整的补丁。理想情况下,这个补丁可以防止过渡到所有与bug相关的奇怪状态。ESCHERATIO可以很好地帮助开发人员实现完整的补丁,因为它让开发人员了解(通过bug的功能)可以达到什么奇怪的状态。此外,由Escheratio生成的POC可用于测试建议的补丁。我们在第6.4节中证明了这一点,揭示了多个CVE的补丁实际上是不完整的。5执行CA pFUZZ和CA pSA n(第3节)写在C的7K LoC中。我们的示例能力聚合和评分系统(第4.1节)是用Python的1.5K LoC编写的我们在https://github.com/HexHive/Evocatio上提供我们的代码,以帮助这一领域的未来研究。C apSA n利用ASan当遇到新的崩溃时,该崩溃的功能将与先前遇到的功能进行重复数据消除这意味着能力之间的比较是一项频繁的操作,因此需要尽可能高效在模糊化过程中,功能被存储并通过其哈希进行比较在模糊化之前,ESCHERATIO执行第3.2.1节中描述的双阶段推理过程。 第一阶段(单字节推断)是一个穷举搜索,并且总是运行到完成。 第二阶段(序列推断)是基于模糊的,因此具有可变的执行时间。我们根据经验确定10分钟是合理的违约时间。能力探索使用引入新能力(在推理阶段期间发现的)的种子作为初始语料库,1605×ESCHERATio:Conjuring Bug Capabilities from a Single PhantomCCS'22,2022年11月7日至11日,美国加利福尼亚州洛杉矶和关键字节映射来引导突变。能力驱动的模糊引擎建立在AFL++之上[19],它已经被修改为使用能力散列作为指导指标。虽然我们目前的原型是针对内存安全漏洞量身定制的,但ESCHERATIO的实现也可以探索其他漏洞类型和威胁模型。例如,可以修改CA pSAn来利用UBSan,从而探索与未定义的行为错误相关的功能,而不是构建在ASan上类似地,可以基于其他威胁模型来构建其他严重性评分系统我们把这个留给未来的工作。6评价我们通过回答以下研究问题来评估ESCHERATIORQ 1ECRITATIO是否发现了更大范围的功能(与其他崩溃探索工具兼容(第6.1节)RQ2不同的设计组件如何影响ESCHERATIO(第6.2节)RQ3是否可以将EHRATIO应用于严重度评分?(第6.3节)RQ4ESCHERATIO可以应用于斑贴测试吗?(第6.4节)最后,我们用一个案例研究来说明ESCHERATIO的实际好处(第6.6节)。基准套件。 我们的基准测试由38个bug组成,属于6种不同的bug类型:34个CVE和4个开放问题,跨越8个目标。表1概述了目标方案。 我们选择这些目标是因为它们在模糊研究中的流行程度[2,21,29],功能,代码多样性,开发活动以及不同的代码库大小(范围从50k到2M LoC)。基线。能力/崩溃探索是一个探索不足的研究主题; AFL++是执行时间和能力发现之间的适当折衷除非另有说明,否则我们运行EHRATIO和afl-cexp8小时实验重复五次以确保统计显著性。实验环境。所有实验均在Ubuntu 18.04 LTS服务器上进行,在Intel ® Xeon ® Gold 6254 3上具有200 GiB RAM。10 GHzCPU,60个核心。6.1能力发现(RQ 1)表2总结了在我们的基准测试中发现的功能。5在这里,我们报告了bug的影响;也就是说,bug的根本原因所带来的可测量的后果例如,CVE-2016-9532的根本原因是整数溢出。但是,这种溢出的效果是堆溢出(HOF)/堆栈溢出(SOF)。这种区别使我们能够突出额外的bug功能。总的来说,ESCHERATIO成功地发现了表1中50%的bug的新功能.例如,整数溢出(CVE-2016-9532的根本原因)和off-by-one错误(CVE-2021-3156的根本原因)都会因此,我们使用表2中的bug类型来显示ESCHERATIO可以发现多少不同的效果。该实验还表明,ESCHERATIO不仅限于内存损坏错误,还可以识别其他错误类型(例如,CVE-2016-10092中的UAF以前的工作表明,更灵活的溢出简化了利用,导致更高的安全影响[12,71]。表2中的能力多样性和新缺陷类型之间的相关性从经验上证实了这一点:发现新影响的所有缺陷都具有广泛的起源、大小和起源偏移值。Escheratio发现的功能可以帮助开发人员通过更多样化的功能优先考虑这些6.1.1Ca P F U zz vs. afl-cexp. 在这里,我们将Escheratio与这是我们唯一知道的工具。Afl-cexp类似于CA pFU zz:它接受一个单独的对象作为输入,并改变它以尝试生成新的崩溃。在我们的评估中,我们将ESCHERATIO与afl-cexp进行了业绩指标。 我们通过考虑以下因素来评估绩效(a) 随着时间的推移发现的新能力的数量,以及(b)这些能力的多样性。测试时间。与传统的模糊器不同,崩溃探索工具不能长时间运行;这样做会导致bug修复的长时间延迟。在我们的评估中,我们发现表1:基准总结。错误类型包括:堆缓冲区溢出(HOF)、整数溢出(IOF)、释放后使用(UAF )、堆栈缓冲区溢出(SOF)、全局缓冲区溢出(GOF)和逐一关闭(OBO)。程序描述LoC虫子类型#Libtiff图像库84KHOF,IOF11利比明Flash库114KHOF,UAF9Binutils二进制工具2.1MHOF、UAF、SOF、OBO6利布西塞尔图像库37KHOF,SOF3Jasper图像操纵53KHof5Libsndfile音频操纵85KHof1NASMx86 asssembler122KUAF1Fig2dev图形建立47KUAF、SOF、GOF2AFL++表3总结了在执行8小时后获得的能力和种子的总数,6而图11总结了在执行8小时后获得的能力和种子的总数。图2显示了8个CVE随时间的能力/种子的演变,我们选择这些CVE作为基准测试中bug效应的代表这使我们能够跨目标和bug类型比较两种工具的结果表3示出了不同的发现的独特崩溃能力的数量(例如,唯一的数组访问索引,读取的唯一大小/write或bug类型)。ESCHERATIO比afl-cexp多发现10个能力。与afl-cexp相比,Escheratio生成的唯一种子明显更多,这不仅是因为ESCHERATIO更善于发现新功能,还因为afl-cexp会错误地丢弃一些输入(afl-cexp可能会执行某个功能,但由于其种子选择策略而丢弃相应的输入图2显示了afl-cexp快速发现新功能的能力。虽然崩溃种子的数量增加,但能力的数量仍然很低。 这是由于afl-cexp的基于代码覆盖率的反馈机制;它无法检测数据流中的变化。因此,afl-cexp会找到新的种子,但它们会沿着不同的执行路径触发相同的功能与此相反,5.我们在原始错误报告的帮助下,额外进行了8个小时(平均)的手动分析,以验证发现的功能。6我们考虑了不同的无效内存地址。我们还合并了禁用ASLR的连续地址因此,数字大于表2,其中未示出存储器地址。1606CCS表2:Evoca tio发现的功能Bug效应是指在崩溃过程中出现的bug效应,表示为HOF =堆溢出,UAF =释放后使用,SOF =堆栈溢出,GOF =全局缓冲区溢出,#W =野生地址读取,#N =空指针解引用,#A
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功