Skip to main content
QUICK REVIEW

[论文解读] Extracting and Verifying Cryptographic Models from C Protocol Code by Symbolic Execution

Mihhail Aizatulin, Andrew D. Gordon|arXiv (Cornell University)|Jul 6, 2011
Security and Verification in Computing被引用 13
一句话总结

本文提出了一种完全自动化的、计算上可靠的方法,通过符号执行提取符号模型并使用 ProVerif 验证,以验证加密协议 C 实现中的弱保密性和认证性。该方法无需预先存在的协议规范或手动注释,能够对包含指针和动态内存操作的低级 C 代码进行验证,但仅限于单条执行路径。

ABSTRACT

Consider the problem of verifying security properties of a cryptographic protocol coded in C. We propose an automatic solution that needs neither a pre-existing protocol description nor manual annotation of source code. First, symbolically execute the C program to obtain symbolic descriptions for the network messages sent by the protocol. Second, apply algebraic rewriting to obtain a process calculus description. Third, run an existing protocol analyser (ProVerif) to prove security properties or find attacks. We formalise our algorithm and appeal to existing results for ProVerif to establish computational soundness under suitable circumstances. We analyse only a single execution path, so our results are limited to protocols with no significant branching. The results in this paper provide the first computationally sound verification of weak secrecy and authentication for (single execution paths of) C code.

研究动机与目标

  • 通过直接验证 C 代码而无需预先存在的规范,弥合形式化协议验证与实际 C 实现之间的差距。
  • 直接为 C 源代码定义计算安全属性,确保与加密模型的形式化一致性。
  • 开发一种自动且可扩展的方法,从具有指针和动态内存操作的 C 代码中提取高层协议模型。
  • 确保提取的模型在计算可靠性下保持安全属性,从而能够使用现有工具(如 ProVerif)进行验证。
  • 通过在模型提取过程中显式验证内存安全,支持遗留代码和非内存安全的 C 代码。

提出的方法

  • 使用位串值的符号变量对 C 程序进行符号执行,以过度近似内存状态,从而分析所有可能的执行路径。
  • 将符号执行轨迹转换为一种中间语言,抽象掉低级内存操作和破坏性更新。
  • 应用代数重写技术,将提取的模型转换为与 ProVerif 兼容的过程演算表示形式。
  • 利用先前工作的计算可靠性结果,将 ProVerif 中的符号验证与 C 程序中的计算安全定义关联起来。
  • 使用 CIL 将 C 代码编译为一种简单的基于栈的中间语言(CVM),以简化符号执行并确保正确性。
  • 将分析限制在单条执行路径上以控制复杂度,同时仍支持动态内存分配和指针运算。

实验结果

研究问题

  • RQ1我们能否直接为 C 源代码形式化定义安全属性(例如弱保密性和认证性),而无需依赖预先存在的协议规范?
  • RQ2如何自动从具有指针和动态内存的 C 代码中提取高层协议模型,同时保留安全语义?
  • RQ3基于符号执行的模型提取在计算安全定义方面是否可靠?
  • RQ4现有的协议验证工具(如 ProVerif)能否以计算可靠性的方式验证提取模型的安全属性?
  • RQ5当该方法应用于具有复杂控制流的 C 代码时,其局限性是什么,以及如何缓解?

主要发现

  • 该方法实现了对单条执行路径下 C 代码中弱保密性和认证性的首次计算上可靠的验证,无需协议规范或手动注释。
  • 符号执行引擎使用位串值的符号变量,能够分析未知或可变长度的消息,这与以往工具将每个字节单独处理的方法不同。
  • 模型提取过程保留了安全语义,且生成的模型被简化为可直接由 ProVerif 验证的形式。
  • 该方法支持具有指针和动态内存分配的 C 代码,并在提取过程中显式验证内存安全。
  • 该方法仅限于非分支代码路径,但此限制对许多本质上非分支的认证协议已足够。
  • 当验证失败时,该框架通过暴露包含源代码位置的符号执行轨迹,提供可操作的反馈,有助于调试。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。