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)とエッジインデックスを用いて、順序と文脈を保持すること。
  • 関数呼び出しの順序や式内での副作用(例:a() + b() や三項演算子)を含む、細粒度の実行順序を捉える評価順序グラフ(EOG)を構築すること。
  • 言語に依存しないグラフパスを適用して意味論を拡張(例:呼び出し解決、データフロー)し、標準化されたAPIを介したクエリベースの解析を可能にすること。

実験結果

リサーチクエスチョン

  • RQ1統一的かつ言語に依存しないグラフ表現は、静的解析のための多様なプログラミング言語構文を効果的にモデル化できるか?
  • RQ2曖昧なパーサーは、不完全またはコンパイル不能なソースコードをどれほど正確に再構築し、解析できるか?
  • RQ3このプラットフォームは、特定のプログラミング言語に依存せずに、正確で言語に特化した解析をどの程度実現できるか?
  • RQ4このプラットフォームは、複数の言語に跨る実際のコードベースをどの程度効率的に解析できるか?
  • RQ5このプラットフォームは、異種システムにおけるCI/CDパイプラインやセキュリティ監査に効果的に統合できるか?

主な発見

  • Javaの211,541 SLoCとC++の148,036 SLoCがそれぞれ1,042秒および687秒で解析され、小さなから中程度のリポジトリにおいて実現可能性が示された。
  • C++コードの解析はSLoCあたりの速度がJavaより速かったが、カバレッジ指標から、C++のコードカバレッジがわずかに低いことが原因である可能性がある。
  • グラフ強化パス(例:制御フロー、データフロー)は、Javaで合計時間の37%、C++で46%を占めており、パフォーマンスに影響を与える主な要因は関数内処理であることが示された。
  • カバレッジ指標は、未処理のASTノードのための上界である。Javaでは99%、C++では96%の上界を示しており、一般的な言語機能の優先順位を反映している。
  • 211,541 SLoCと148,036 SLoCがそれぞれ1,042秒および687秒で解析された。CI/CDおよび監査シナリオにおいて、妥当なパフォーマンスを示した。
  • 200のリポジトリが評価されたが、そのうち14(Java 3、C++ 12)が5分のタイムアウトを超え、非常に大きなコードベースではスケーラビリティの課題があることが示唆された。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。