[論文レビュー] 2LS: Heap Analysis and Memory Safety (Competition Contribution)
2LSは、テンプレートベースの合成と段階的$k$-帰納を用いて、形状および内容の不変条件を統合することで、ヒープ解析を強化するCプログラム向けの静的解析フレームワークである。プログラムにアサーションを挿入し、SATベースの推論を活用することで、ヌルポ인터の間接参照、使用後フリー、メモリリークといったメモリ安全特性の検証が可能となり、複雑なデータ構造に焦点を当てた新しいMemSafetyカテゴリのベンチマークのうち9つを達成した。
2LS is a framework for analysis of sequential C programs that can verify and refute program assertions and termination. The 2LS framework is built upon the CPROVER infrastructure and implements template-based synthesis techniques, e.g. to find invariants and ranking functions, and incremental loop unwinding techniques to find counterexamples and k-induction proofs. The main improvements in this year's version are the ability of 2LS to analyse programs requiring combined reasoning about shape and content of dynamic data structures, and an instrumentation for memory safety properties.
研究の動機と目的
- データ構造の形状と要素値の両方を統合的に考慮する必要がある、複雑なヒープを操作するCプログラムの検証の課題に対処する。
- ヌルポインタの間接参照、使用後フリー、メモリリークのためのアサーションを符号化することで、メモリ安全の検証を向上させる。
- 抽象ドメインの組み合わせとシンボリックパス追跡を用いて、動的データ構造の正確な解析を可能にする2LSフレームワークを拡張する。
- 段階的SATソルバを用いて、値制約付きの危単一リンクリストなどの非有界データ構造を含むプログラムのスケーラブルな検証を可能にする。
- SV-COMPコンペティションに、動的データ構造における形状と内容の推論を評価するための新しいベンチマークを寄与する。
提案手法
- ループのアンワインディングと過剰近似を伴う単一静的代入(SSA)形式でのGOTOプログラムにCプログラムを表現する。
- テンプレートベースの合成を用いて、抽象ドメインにおける帰納的不変条件を計算し、形状、ゾーン(区間)、およびシンボリックパスドメインを統合する。
- 形状とポリヘドラル(ゾーン)不変条件を論理積で結合することで、製品ドメインを構築し、ポインタ構造と数値の両方を同時に推論する。
- 実行されたループを追跡するためのシンボリックパスを導入し、パスセンシティブな不変条件と、精度向上のためのパワー・ドメインの組み合わせを可能にする。
- アサーションをプログラムに挿入してメモリ安全違反を検出する:ヌルポインタの間接参照のための$p \neq \mathtt{NULL}$、使用後フリーのための$p \neq \mathit{fr}$、メモリリークのための$\mathit{fr} \neq \&ao_{i}^{co}$。
- $k$-帰納と$k$-不変条件($k$IkI)アルゴリズムを用いて、段階的SATソルバを活用し、アサーションの妥当性または誤りの証明、および停止性の検証を行う。
実験結果
リサーチクエスチョン
- RQ1静的解析フレームワークは、Cプログラムにおける動的データ構造について、形状と内容の両方の推論を効果的に統合できるか?
- RQ2シンボリック実行と不変条件の合成を用いて、ヌルポインタの間接参照や使用後フリーといったメモリ安全特性を、どのように正確に符号化・検証できるか?
- RQ3テンプレートベースの合成とドメインの組み合わせは、複雑なヒープを操作するプログラムの検証をどの程度向上できるか?
- RQ4シンボリックパス抽象化は、異なるプログラムパスにおける不変条件の精度をどの程度向上できるか?
- RQ5非有界データ構造や複雑なメモリ操作を含むプログラムの検証において、$k$IkIアルゴリズムのスケーラビリティと正確性はどの程度か?
主な発見
- 2LSは、値が区間[1,10]に制限された非有界の単一リンクリストを含む10のベンチマークのうち9つを正しく検証し、形状と内容の両方の統合的分析能力を強く示した。
- SV-COMPのMemSafetyカテゴリにおいて、他のすべてのツールが10の形状・内容ベンチマークのうち3つを越えて検証できなかったのに対し、2LSはその分野で最も優れた性能を示した。
- ヌルポインタの間接参照と使用後フリーのメモリ安全チェックはアサーションで符号化され、SATベースの推論により正当に証明され、コンペティションで偽陽性は報告されなかった。
- メモリリーク検出は、ループが存在しない、または完全にアンワインディングされたループを持つプログラムに限って正当に証明された。これは、抽象的動的オブジェクトにおけるすべてのオブジェクトを追跡する能力の制限に起因する。
- MemSafetyカテゴリで4位となり、銅メダルをわずかに逃したが、停止性解析において未確認の証拠(witness)の存在が残るという大きな課題が残っている。
- $k$IkIアルゴリズムは、順次実行Cプログラムにおいてスケーラブルであることが示されたが、再帰処理や配列要素の推論処理の対応には依然として制限がある。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。