Skip to main content
QUICK REVIEW

[论文解读] A Language-Independent Analysis Platform for Source Code

Konrad Weiß, Christian Banse|arXiv (Cornell University)|Mar 16, 2022
Software Engineering Research被引用 4
一句话总结

本文提出 CPG 分析平台,一种与语言无关的源代码分析系统,可将代码转换为统一的代码属性图(CPG)以进行静态分析。通过利用模糊解析和基于图的表示,该系统可在异构代码库中实现精确、与语言无关的安全性和合规性检查,评估结果表明其在可接受时间内高效分析了小型至中型仓库。

ABSTRACT

In this paper, we present the CPG analysis platform, which enables the translation of source code into a programming language-independent representation, based on a code property graph. This allows security experts and developers to capture language level semantics for security analyses or identify patterns with respect to code compliance. Through the use of fuzzy parsing, also incomplete or non-compilable code, written in different programming languages, can be analyzed. The platform comprises an analysis library and interfaces to query, interact with or visualize source code graphs. This set of CPG tools allows finding common weaknesses in heterogeneous software environments, independently of the underlying programming language.

研究动机与目标

  • 为异构软件系统实现安全、与语言无关的源代码分析。
  • 支持在早期开发和代码审计期间对不完整或无法编译的代码进行分析。
  • 为 CI/CD 流水线和安全审计提供可重用、可扩展的静态分析平台。
  • 建模细粒度的语言语义以提高分析精度。
  • 提供统一的基于图的表示,支持跨多种语言的数据流、控制流和类型状态分析。

提出的方法

  • 将多种编程语言(Java、C/C++、Go、Python、TypeScript、LLVM-IR)的源代码转换为与语言无关的代码属性图(CPG)。
  • 使用模糊解析处理不完整或无法编译的代码,通过部分输入重建语法结构。
  • 将代码表示为带标签的、有向的、多图结构,节点表示语法元素,边表示关系(如控制流、数据流、调用关系)。
  • 通过节点类型的语义层次结构(如 Expression、CallExpression、MemberCallExpression)和边索引,保留顺序和上下文信息。
  • 构建执行顺序图(EOG)以捕捉细粒度的执行顺序,包括表达式中的副作用(如 a() + b() 或三元操作)。
  • 应用与语言无关的图遍历操作以增强语义(如调用解析、数据流分析),并通过标准化 API 支持基于查询的分析。

实验结果

研究问题

  • RQ1统一的、与语言无关的图表示能否有效建模多样化的编程语言构造以支持静态分析?
  • RQ2模糊解析在多大程度上能准确重建并分析不完整或无法编译的源代码?
  • RQ3该平台在保持与特定编程语言无关的同时,能在多大程度上支持精确的、语言感知的分析?
  • RQ4该平台在分析跨多种语言的实际代码库时效率如何?
  • RQ5该平台能否在异构系统中有效集成到 CI/CD 流水线和安全审计中?

主要发现

  • 平台在 1,042 秒内分析了 211,541 SLoC 的 Java 代码,在 687 秒内分析了 148,036 SLoC 的 C++ 代码,表明其对小型至中型仓库具有可行性。
  • C++ 代码的分析速度(按 SLoC 计算)快于 Java,尽管覆盖率指标表明这可能是因为 C++ 的代码覆盖率略低。
  • 图增强操作(如控制流、数据流)分别占 Java 总执行时间的 37% 和 C++ 的 46%,表明过程内操作主导了性能瓶颈。
  • 覆盖率指标为上限值,因未处理的 AST 节点所致,Java 的上限为 99%,C++ 的上限为 96%,反映了对常见语言特性的优先支持。
  • 211,541 和 148,036 SLoC 分别在 1,042 和 687 秒内完成分析,表明其在 CI/CD 和审计场景中性能可接受。
  • 共评估了 200 个仓库,其中 14 个(3 个 Java,12 个 C++)超过 5 分钟超时,表明在极大型代码库中存在可扩展性挑战。

更好的研究,从现在开始

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

无需绑定信用卡

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