Modern code reuse attacks are taking full advantage of bloated software. Attackers piece together short sequences of instructions in otherwise benign code to carry out malicious actions. Eliminating these reusable code snippets, known as gadgets, has become one of the prime concerns of attack surface reduction. The aim is to break these chains of gadgets, thereby making such code reuse attacks impossible or substantially less common. Previous work on attack surface reduction has typically tried to eliminate such attacks by subsetting the application, e.g. via user-specified inputs, configurations, or features, or by focusing on third-party libraries to achieve high gadget reductions with minimal interference to the application. In this work we present a general, whole-program attack surface reduction technique called OCA that significantly reduces gadgets and has minor performance degradation. OCA requires no user inputs and leaves all features intact. OCA identifies specific program points and through analysis determines key function sets to enable/disable at runtime. The runtime system, thus, controls the set of enabled functions during execution, thereby significantly reducing the set of active gadgets an attacker can use, and by extension, cutting down the set of active gadget chains dramatically. On SPEC CPU 2017, our framework achieves 73.2% total gadget reduction with only 4% average slowdown. On 10 GNU coreutils applications, it achieves 87.2% reduction. On the nginx server it achieves 80.3% reduction with 2% slowdown. We also provide a gadget chain-breaking study across all applications, and show that our framework breaks the shell-spawning chain in all cases.
翻译:现代代码再利用攻击正在充分利用浮肿的软件。 攻击者在其它无害代码中拼凑了简短的指令序列, 以实施恶意行动。 消除这些被重新使用的代码片段, 被称为小工具, 已经成为攻击表面减少的主要关切之一。 目的是打破这些工具链链, 从而使这种代码再利用攻击成为不可能或远不那么常见。 以前关于攻击表面减少的工作通常试图消除这些袭击, 方法是通过对应用程序进行分解, 例如通过用户指定的输入、 配置或功能, 或侧重于第三方图书馆, 实现高减速, 并尽量减少对应用程序的干扰。 在这项工作中, 我们展示了一种通用的、 全程序化的进攻减少技术, 大大减少了工具, 并稍有性能退化。 OCA 不需要用户输入, 使所有特性保持完好。 OCOCA 确定具体的程序点, 并通过分析确定关键功能设置, 以便在运行时能够/ 。 因此, 运行时控制所有启用的功能, 从而显著减少系统, 从而大大降低攻击工具的缩缩缩缩图, 。 在扩展中, 运行中, 运行中, 将运行中, 运行中, 将显示 运行中, 运行中, 运行中, 运行中, 运行中, 运行中, 运行中, 运行中, 运行中, 运行中, 运行中, 运行中, 运行中, 运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行, 运行, 运行, 运行, 运行, 运行, 运行, 运行, 运行, 运行中运行中运行中运行中运行, 运行, 运行, 运行, 运行, 运行, 运行, 运行, 运行, 运行, 运行, 运行, 运行, 运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行中运行, 运行, 运行, 运行, 运行, 运行中运行, 运行, 运行, 运行, 运行, 运行, 运行, 运行, 运行, 运行, 运行,