快捷搜索:  as  3384  3335  中国重工  test  创意文化园  万通顺达  java

usdt回收(www.payusdt.vip):行使Honeybee和Intel处置器举行笼罩率指导的模糊测试

USDT自动充值接口

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

克日我们公布了一款名为Honeybee的笼罩率指导的Fuzzer,该Fuzzer使用Intel Processor Trace(IPT)手艺纪录了程序控制流。以前,由于捕捉系统和跟踪剖析效率低下,对IPT的性能并没有施展出最大作用。我的研究集中于应对这些挑战,以使基于IPT的模糊测试变得切实有用。

https://github.com/trailofbits/Honeybee

IPT是一种异步纪录程序控制流的硬件功效,在纪录时仅破费8-15%的开销。然则,将IPT用作模糊笼罩机制并不能行,除了高度实验性的二进制笼罩解决方案外,由于源代码工具通常可提供更好的性能。Honeybee解决了这一限制,使IPT的捕捉速率大大提高,剖析速率提高了数百倍。因此,现在我们有了笼罩率指导的模糊测试,其性能与源码级其余笼罩率测试相比有时甚至更快。在这里,我将形貌Honeybee背后的开发历程以及其设计的思绪。

0x01 研究靠山

IPT是特定于Intel的处置器功效,可用于一次纪录几分钟所有历程的完整控制流历史,而对性能的影响最小。IPT大大改善了英特尔的较旧的硬件跟踪系统,例如Branch Trace Store,其性能损失可能跨越100%。更好的是,IPT支持通过特定历程或虚拟地址局限对跟踪目的举行精致选择。

像IPT这样的硬件机制对于平安研究职员而言尤其诱人,由于它是闭源的,未经修改的目的二进制文件提供代码笼罩率信息。一个鲜为人知的事实是,IPT不仅比任何现有的黑盒方式(如QEMU,中止)都快得多,而且IPT还应该比源码插桩工具更快。

笼罩率检测工具通过对大型笼罩率缓冲区的频仍,随机写入来损坏种种CPU缓存,从而抑制了运行时性能。源代码级检测还抑制了许多主要的编译时优化,例如自动矢量化。此外,由于大多数程序的多线程性子,检测代码需要在原子位图上举行原子操作,这极大地限制了流水线吞吐量。

IPT应该在闭源和开源目的上都可以事情,而笼罩局限天生计谋应保持稳固,而且只发生最小的8-15%的性能损失。

0x02 研究现状

不幸的是,性能下降8-15%并不能说明所有问题。IPT的捕捉开销很低,但剖析开销却不低。为了捕捉硬件上的长时间跟踪,IPT使用种种手艺来最小化每个跟踪存储的数据量。一种手艺是仅纪录无法从底层二进制静态剖析中容易获得的控制流信息,例如已接纳/未接纳的分支和间接分支目的。只管此优化假设IPT解码器可以接见底层程序二进制文件,但此假设通常是准确的。(例如,参见图1。)

IPT是一种异常麋集的二进制名堂。为了展示存储的信息,我在图1中将其转换为更具可读性的名堂。数据包类型在左列,数据包有用负载在右列。

示例IPT跟踪显示IPT若何在程序执行历程中最洪水平地削减存储的数据。

1. 在程序以0x7ffff7f427ef执行时最先跟踪。

2. 该程序掷中条件分支并接受它。(第2行中的第一个!。)

3. 该程序将掷中两个条件分支,而且不接受它们。(第2行中的.。)

4. 该程序掷中条件分支,不接受它。(第2行中的最后一个!)

5. 该程序掷中条件分支并接受它。(第4行。)

6. 程序到达一个间接分支,这时它跳转到最后一个指令指针,并用低2个字节替换为0x3301。

7. 该程序掷中条件分支并接受它。

8. 程序继续举行,没有其他条件/间接分支,直到指令指针的最后四个字节为0xf7c189a0为止,此时由于程序退出或与过滤器不匹配的另一段代码最先执行而住手跟踪。

只管提供了所有跟踪数据,但仍有大量信息被忽略。跟踪提供其最先的虚拟地址,最终的条件分支以及是否接纳它们。然则,没有提供无条件的和控制流转移(即call和jmp指令)和有条件的分支目的。由于1)从未纪录过非分支代码,2)条件分支示意为单个位,3)间接分支仅通过更改指令指针来示意,以是这减小了跟踪巨细。

那么若何从这部门数据中重构出真正的控制流程呢?IPT解码器可以将跟踪数据与基础二进制文件配对,然后从跟踪起始地址“遍历”二进制文件。当解码器遇到无法确定的控制流转移时(例如条件分支),它会查询跟踪。跟踪中的数据指示已接纳/未接纳的分支以及间接控制流转移的效果。通过遍历二进制和跟踪直到跟踪竣事,解码器可以重修整个流程。

但这是IPT的难题:只管捕捉速率很快,但外面上看代码却并非云云,由于解码器必须在每个解码步骤中剖析并剖析多个x86-64指令。只管拆卸和剖析的开销对于调试和提要剖析方案而言不是问题,但它严重地阻碍了Fuzzing吞吐量。不幸的是,这种昂贵的剖析从基本上是不能制止的,由于若是不剖析原始程序就无法解码。

0x03 提升IPT的性能

在对英特尔参考IPT解码器libipt举行性能剖析时,我注重到在跟踪剖析历程中,有跨越85%的CPU时间用于解码指令。鉴于必须通过遍历二进制文件查找IPT数据以举行控制撒播输,因此这并不新鲜。然则,在指令解码时代破费大量时间现实上是个好新闻

为什么?Fuzzer需要针对统一二进制文件对大量Trace举行解码。延续剖析一个二进制文件的单条Trace的指令可能是合理的,然则对于统一二进制文件,数百万次重新剖析统一指令是异常虚耗的。

声称是最快的IPT解码器(稍后会详细先容)的开源解码器libxdc试图使用快速运行缓存来解决此问题。使用运行时缓存和其他性能编程手艺,libxdc的运行速率比Intel的参考解码器快10至40倍,这注释缓存异常主要。

我对libxdc的指斥是,它的动态指令高速缓存以两种方式引入了不需要和昂贵的开销。首先,动态缓存通常需要破费许多资源来查找,由于它需要盘算目的的哈希值并确保缓存现实上是掷中工具。这给整个算法中最热的部门之一带来了更多的开销和庞大性,而且不容忽视。

其次,坦率地说,更糟糕的是,通常期望动态缓存填充。纵然是最好的缓存计谋也将导致未来的事情:由于被Fuzzer永远不会仅将代码作为目的,因此任何被撤回的指令最终都将需要重新解码。每次逐出缓存都市造成重复的事情量息争码器性能的损失

我的想法是引入一个静态的,提前天生的高速缓存,该高速缓存保留所有可能需要的IPT解码数据。高速缓存将在多个线程之间共享而不会带来任何损失,而且无需哈希或锁定即可举行接见。通过完全消除二进制剖析缓和存接见开销,我可以比libxdc更快地解码跟踪,这是由于我的解码器只会做更少的事情。

Honeybee架构。

,

Usdt第三方支付接口

菜宝钱包(www.caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

遵照Honeybee的主题,我将这些静态的,提前天生的缓存称为“设置单元”,由于它们需要确立事情,但只需要确立一次即可。为了确立Honeybee Box,我确立了hive_generator,它使用ELF可执行文件并捕捉解码跟踪可能需要的信息。hive_generator搜索所有控制流指令,并天生所有基本块的编码,而且代码可以继续执行。

首先,这种编码是对数据高速缓存友好的,由于不仅块的巨细即是高速缓存行的巨细,而且编码后的块以与原始二进制文件相同的顺序存储,这是一个很小的主要细节。这意味着Honeybee的解码器可以充实行使原始二进制文件的缓存局部性优化,由于编译器通常会将相关的基本块相互靠近。在动态高速缓存中,例如在libxdc中,这通常是不能能的,由于高速缓存的哈希函数是凭证设计将相邻块发送到随机位置的。这会影响性能,由于它会从CPU的数据高速缓存中找出有意义的数据。

另一个主要的功效是,块以按位友好的名堂编码,因此Honeybee可以使用专有的高吞吐量ALU操作来处置压缩的块。这种设计使几个要害操作完全无分支-例如确定一个块是以直接分支,间接分支照样条件分支竣事。将此与高吞吐量的ALU操作相连系,可以制止许多价值高昂的分支错误展望。

这些更改似乎相对来说是微不足道的,然则我希望它们能够连系起来,从而在当前的最新手艺libxdc上取得可观的性能提升。

0x04 Honeybee解码器

为了对照Honeybee的解码器和Intel解码器的性能,我在100 kb到45 MB巨细的二进制文件中运行了从几十千字节到1.25 GB不等的跟踪。测试举行了25次,而且我验证了这两个解码都对相同的跟踪文件使用了相同的控制流路径。

对照Honeybee的解码速率以提高速率。

这些测试显示出令人鼓舞的效果(图3)。在像clang这样的大型程序上,Honeybee优于Intel的解码器,它和libxdc是一个数目级。

就上下文而言,此测试套件中最大的跟踪“ honey_mirror_1 / clang_huge.pt”为1.25GB,源于对庞大的静态剖析程序的跟踪,该程序剖析了整个35MB的clang二进制文件。

Honeybee仅需3.5秒即可完成英特尔参考解码器在两分半钟内完成的事情,这是44倍的改善!

在这种情形下,Honeybee只需6.6微秒即可完成英特尔的参考编码器所需的451微秒的事情。

将Honeybee与honggfuzz集成。

现在,现实上将这种新的笼罩机制集成到Fuzzer中。我之以是选择Google的honggfuzz,是由于它是模块化的,尤其是由于它现实上已经有了使用英特尔参考解码器的基于IPT笼罩率的另一种方式。我的设计是镌汰英特尔的解码器,将Honeybee牢固在适当的位置,并提升速率。然则,这比我预期的要庞大。

挑战在于Linux网络IPT数据,由于主线内核现实上已经对perf中内置的IPT提供了支持。然则我发现Honeybee需要整理IPT数据的庞大而激进的过滤机制露出了perf中的稳固性和性能问题。

性能没有显著的提升,而且异常不稳固。Honeybee所使用的庞大设置会引发性能方面的严重错误,这可能会导致CPU设置错误,而且需要完全重新指导系统才气从锁定中恢复。可以明晰的是,这两个问题最终使得在捕捉与Honeybee有关的任何模糊测试义务中捕捉IPT数据时都无法使用。

我为IPT编写了一个名为“ honey_driver”的小型内核模块,该模块专门针对模糊测试举行了优化。只管这个新的内核模块一定没有perf功效壮大,而且可能存在平安隐患,然则honey_driver却异常快,它使用户空间客户端能够以很少的开销快速重新设置跟踪并剖析效果。

因此,有了这小部门自界说代码,honggfuzz就可以使用Honeybee的IPT数据了!

0x05 提升模糊测试效率

Fuzzer性能丈量很庞大,因此有许多更可靠和确定的方式来丈量性能。作为一个大略的基准测试,我坚持使用四种差其余笼罩计谋对一个小型HTML剖析器举行模糊测试。然后,在纪录测试时代的平均执行次数之前,我允许honggfuzz使用所选的笼罩率手艺对二进制文件举行模糊处置。

将Honeybee与Hongfuzz举行对照。

实验中的第一个样本工具没有任何笼罩面。通过将随机输入输入测试程序,它的运行速率与honggfuzz可以在此二进制文件上运行的速率一样快。在这种设置下,honggfuzz每秒平均执行239K次。在我的系统中,这是相当快的,然则仍然一定会受到模糊目的的CPU性能的限制。

接下来,我通过在未启用其他功效的情形下使用检测编译器编译目的来测试honggfuzz的源代码级软件检测。与没有笼罩的基准相比,这导致平均每秒执行98K次,或效率降低41%,这是由于缺少编译器优化,许多函数挪用,昂贵的锁定以及高速缓存发抖而导致的模糊测试时的普遍接受和预期的损失。

在举行软件检测之后,我们将先容更有趣的笼罩手艺。如前所述,honggfuzz支持使用libipt举行处置器跟踪以举行剖析,并使用未经由滤的perf数据举行IPT捕捉。然则,honggfuzz现有的IPT支持不会天生完整甚至准确的笼罩局限信息,由于honggfuzz仅从跟踪中提取间接分支IP,而完全忽略任何条件分支。此外,由于不使用perf举行过滤,因此honggfuzz会为历程中的每段代码天生笼罩率,包罗诸如libc之类的无趣的库。

纵然有了这些捷径,honggfuzz的现有IPT也只能平均每秒执行1.1K次(约莫是理论最大值的一半)。由于笼罩率数据不准确,因此无法与软件工具举行真正的对照,由于它可能会更快地找到更难题的路径。然则,现实上,差距是云云之大,鉴于先前确定的perf和libipt的性能问题,该问题不太可能解决大部门开销。

最后,我们有Honeybee及其定制的解码器和捕捉系统。与现有的honggfuzz实现差异,Honeybee对整个轨迹举行解码,因此能够天生完整,准确的基本块和边缘笼罩局限信息。Honeybee平均每秒执行17.1万次执行,与基线相比,性能下降仅为28%。

这不应该令人感应震惊,由于IPT仅具有8-15%的纪录时间开销。这样就剩下了基线总执行时间的14-21%来处置IPT数据并天生笼罩局限。鉴于Honeybee解码器的精彩性能及其快速解码轨迹的能力,完全有理由假设Honeybee数据处置的总开销可能会增添29%的性能损失。

我剖析了Honeybee的笼罩局限,并确认它运行正常并准确处置了所有数据。因此,我很喜悦地说Honeybee能够比传统的软件检测方式更快,更有用地Fuzzing 闭源和开源软件!

0x06 改善事情

若是这些模式更普各处适用,那么对于那些需要举行源码模糊测试的人来说,这可能意味着极大的性能提速。然则,更令人兴奋的是,对于那些需要执行黑盒模糊测试而且一直依赖低速且不能靠的工具(例如QEMU仪器,Branch Trace Store(BTS))的用户来说,这绝对是一个绝佳的加速,由于这意味着他们可以在没有做出任何重大妥协的情形下,以与有源码相同或更高的速率举行模糊测试。这种高性能解码在模糊测试之外很有用,由于它支持许多新颖的应用程序,包罗更高级的调试器和性能剖析工具。

本文翻译自:https://blog.trailofbits.com/2021/03/19/un-bee-lievable-performance-fast-coverage-guided-fuzzing-with-honeybee-and-intel-processor-trace/:
发表评论
搜头条声明:该文看法仅代表作者自己,与本平台无关。请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片

您可能还会对下面的文章感兴趣: