反模糊:阻碍二进制可执行文件的模糊审计

2022-02-22 02:05:08

模糊化是在软件程序中发现安全漏洞最广泛、最成功的方法之一。Fuzzing工具会自动随机生成程序的输入,并使用这些输入运行程序,直到程序崩溃。这些崩溃通常表示存在可被攻击者利用的安全漏洞。

但是,想要利用该程序进行攻击的攻击者也可以使用模糊技术。因此,我们能否使我们的程序难以模糊化,从而使攻击者无法检测到我们程序中的任何隐藏漏洞?为了找到答案,本文的作者开发了一些策略,使得模糊化程序变得困难。他们确定了现有模糊化工具成功工作所依赖的一些假设,然后开发了一个工具AntiFuzz,可用于修改目标程序并阻止模糊化。一些假设和对策包括:

模糊程序试图利用覆盖率信息生成可以跨越程序代码所有部分的输入。因此,如果我们能让我们的程序返回虚假的覆盖信息,模糊化将受到极大的阻碍。为了实现这一点,AntiFuzz为程序的每个输入返回不同的虚假覆盖信息。

模糊程序监控操作系统以检测程序崩溃。为了应对这种情况,AntiFuzz向操作系统发送虚假的崩溃信号。

模糊程序需要每秒执行多次程序才能有效运行。由于fuzzers生成的大多数输入都是错误的,因此当反模糊程序检测到这些输入时,它会减慢程序的速度。虽然正常用户不会注意到这种减速,但它会严重阻碍fuzzer的高效运行。

为了看看他们的方法是否真的有效,作者使用了四种不同的最先进的模糊器来模糊一组包含几个bug的目标程序。他们的结果表明,在采取所有应对措施时,AntiFuzz成功地阻止了之前检测到的所有漏洞的检测。

我喜欢他们阻止模糊化的方法,因为它结合了多种措施。然而,通过使公开部署和可访问的程序版本抵抗模糊化,这将使模糊化操作仅限于程序开发人员,从而妨碍同样依赖模糊化的安全研究人员和白帽黑客检测安全漏洞。

Gulerantifuzzz2019 Emre Güler、Cornelius Aschermann、Ali Abbasi和Thorsten Holz:";反模糊:阻碍二进制可执行文件的模糊审计;。2019年USENIX安全研讨会。

计算机安全中的一种通用防御策略是增加成功攻击的计算资源和人力成本。在二进制安全领域,这通常是通过使用模糊处理方法来阻止逆向工程和搜索软件漏洞来实现的。然而,最近在自动错误查找方面的趋势改变了操作方式。如今,通过各种模糊工具发现bug是很常见的。由于越来越多的自动化和对更好的模糊策略的研究,对数百个目标进行大规模、拖网式模糊变得可行。正如我们所展示的,当前的模糊处理技术旨在增加人类理解的成本,对减缓模糊化几乎没有作用。

在本文中,我们介绍了几种技术,以保护二进制可执行文件不受基于模糊、符号/协同执行和污染辅助模糊(通常称为混合模糊)的自动缺陷发现方法的分析的影响。更具体地说,我们对缺陷发现工具的基本假设进行系统分析,并为每个假设制定一般对策。请注意,这些技术不是针对模糊工具的特定实现而设计的,而是针对bug查找工具必须依赖的一般假设。我们的评估表明,这些技术有效地阻止了模糊审计,同时带来了微不足道的性能开销。正如模糊处理技术增加了发现漏洞所需的人力,我们的技术也使得基于模糊处理的自动化方法无效。