The continuing use of proprietary cryptography in embedded systems across many industry verticals, from physical access control systems and telecommunications to machine-to-machine authentication, presents a significant obstacle to black-box security-evaluation efforts. In-depth security analysis requires locating and classifying the algorithm in often very large binary images, thus rendering manual inspection, even when aided by heuristics, time consuming. In this paper, we present a novel approach to automate the identification and classification of (proprietary) cryptographic primitives within binary code. Our approach is based on Data Flow Graph (DFG) isomorphism, previously proposed by Lestringant et al. Unfortunately, their DFG isomorphism approach is limited to known primitives only, and relies on heuristics for selecting code fragments for analysis. By combining the said approach with symbolic execution, we overcome all limitations of their work, and are able to extend the analysis into the domain of unknown, proprietary cryptographic primitives. To demonstrate that our proposal is practical, we develop various signatures, each targeted at a distinct class of cryptographic primitives, and present experimental evaluations for each of them on a set of binaries, both publicly available (and thus providing reproducible results), and proprietary ones. Lastly, we provide a free and open-source implementation of our approach, called Where's Crypto?, in the form of a plug-in for the popular IDA disassembler.
翻译:在许多行业垂直的嵌入系统中,从实际出入控制系统和电信到机器对机器的认证,继续使用自有加密系统,这是对黑箱安全评价努力的重大障碍。深入的安全分析要求将算法定位和分类,往往使用非常大的二进制图像,从而进行人工检查,即使使用时间耗时,即使使用疲劳和耗时。在本文件中,我们提出了一个新颖的方法,将(自有)加密原始的二进制代码中的(自有)加密原始的识别和分类自动化。我们的方法基于数据流动图(DFG)的形态学,以前是由Lestringant等人提议的。 不幸的是,其DFG的形态学方法仅限于已知的原始生物,而仅依赖超自然学来选择用于分析的代码片断。通过将上述方法与象征性执行相结合,我们克服了他们工作的所有局限性,并且能够将分析扩展到未知、专有加密原始原始法的领域。为了证明我们的建议是实用的,我们开发了各种签名,每个针对不同的类加密原始和他人。不幸的是,它们只针对已知的类的加密原始材料的原始材料,因此,而现在的纸面的理论和实验性地提供了一种自由的版本的版本的版本的版本。为每个版本的公开的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本的版本