Software obfuscation is a crucial technology to protect intellectual property. Despite its importance, commercial and academic state-of-the-art obfuscation approaches are vulnerable to a plethora of automated deobfuscation attacks, such as symbolic execution, taint analysis, or program synthesis. While several enhanced techniques were proposed to thwart taint analysis or symbolic execution, they either impose a prohibitive runtime overhead or can be removed by compiler optimizations. In general, they suffer from focusing on a single attack vector, allowing an attacker to switch to other more effective techniques, such as program synthesis. In this work, we present Loki, an approach for code obfuscation that is resilient against all known automated deobfuscation attacks. To this end, we deploy multiple techniques, including a generic approach to synthesize formally verified expressions of arbitrary complexity. Contrary to state-of-the-art approaches that rely on a few hardcoded generation rules, our expressions are more diverse and harder to pattern match against. Moreover, Loki protects against previously unaccounted attack vectors such as program synthesis, for which it reduces the success rate to merely 19%. Overall, our design incurs significantly less overhead while providing a much stronger protection level.
翻译:软件的模糊化是保护知识产权的关键技术。 尽管它很重要, 商业和学术上最先进的模糊化方法很容易受到大量的自动模糊化攻击, 比如象征性执行、 污点分析或程序合成。 虽然提出了数种强化技术来阻止污点分析或象征性执行, 但它们要么施加了令人望而却步的运行时间性高压, 要么可以通过编译器优化来去除。 一般来说, 它们因专注于单一攻击矢量而受害, 使得攻击者能够转向其他更有效的技术, 比如程序合成。 在这项工作中, 我们介绍了Loki, 一种对已知的所有自动模糊化攻击具有耐受力的代码模糊化方法。 为此, 我们使用了多种技术, 包括一种对任意复杂性形式进行正式核实的通用方法。 与依赖少数硬编码生成规则的状态方法相反, 我们的表达方式更加多样化, 更难与模式匹配。 此外, Loki 保护先前不明的攻击矢量的矢量, 比如程序合成, 它会大大降低成功率到19 %。 总体而言, 我们的设计需要大大降低成功率。