Skip to main content
QUICK REVIEW

[論文レビュー] Modular Abstract Definitional Interpreters for WebAssembly

Brandl, Katharina, Erdweg, Sebastian|arXiv (Cornell University)|Nov 2, 2021
Security and Verification in Computing被引用数 2
ひとこと要約

この論文は、x86 と WebAssembly にコンパイルされた C プログラム間のセキュリティの相違を調査し、4,469 個の脆弱な C プログラムのうち 24% が WebAssembly にスタック・キャニオンが存在しないため、実行結果が異なることを発見した。この研究は、スタックの破壊防止などのコンパイラ保護が WebAssembly に一貫して適用されていないことが示され、本来ならネイティブコードで検出されるはずのバッファ・オーバーフローの悪用が可能になるリスクを示している。

ABSTRACT

Even though static analyses can improve performance and secure programs against vulnerabilities, no static whole-program analyses exist for WebAssembly (Wasm) to date. Part of the reason is that Wasm has many complex language concerns, and it is not obvious how to adopt existing analysis frameworks for these features. This paper explores how abstract definitional interpretation can be used to develop sophisticated analyses for Wasm and other complex languages efficiently. In particular, we show that the semantics of Wasm can be decomposed into 19 language-independent components that abstract different aspects of Wasm. We have written a highly configurable definitional interpreter for full Wasm 1.0 in 1628 LOC against these components. Analysis developers can instantiate this interpreter with different value and effect abstractions to obtain abstract definitional interpreters that compute inter-procedural control and data-flow information. This way, we develop the first whole-program dead code, constant propagation, and taint analyses for Wasm, each in less than 210 LOC. We evaluate our analyses on 1458 Wasm binaries collected by others in the wild. Our implementation is based on a novel framework for definitional abstract interpretation in Scala that eliminates scalability issues of prior work.

研究の動機と目的

  • C プログラムのセキュリティ特性、特にバッファ・オーバーフロー保護が x86 にコンパイルされた場合に保持されるかどうかを評価すること。
  • スタック・キャニオンなどの既存のコンパイラ保護が、ネイティブ x86 コードと比較して WebAssembly バイナリに欠落しているかどうかを調査すること。
  • 展開されたアプリケーションにおいてセキュリティリスクを引き起こす可能性がある、WebAssembly とネイティブコード間の実行の相違を同定および分析すること。
  • 今後のクロスコンパイルのセキュリティ研究のための、1,088 個の相違を示すプログラムのデータセットを提供すること。
  • バッファ・オーバーフローをはるかに超えた、WebAssembly コンパイル中に生じる広範なセキュリティの相違についての研究を促すこと。

提案手法

  • Clang および Emscripten ツールチェインを用いて、バッファ・オーバーフローが確認された 4,469 個の C プログラムを、x86 および WebAssembly の両方へコンパイルした。
  • Linux 上の Wasmer ランタイムを用いて、x86 および WebAssembly バイナリを同一の条件下で実行した。
  • バッファ・オーバーフロー発生時にクラッシュするかどうかを比較することで、実行の相違を特定した。
  • 手作業による逆アセンブルを実施し、生成されたコードの差異を分析した。特に、スタック・キャニオンが欠落している点に焦点を当てた。
  • コンパイラ最適化レベル(例:-O1)が相違の有無に与える影響を評価した。最適化が保護の出力に影響することを確認した。
  • 再現可能性およびさらなる分析のため、x86 および WebAssembly バイナリを含む、1,088 個の相違を示すプログラムの公開データセットを提供した。

実験結果

リサーチクエスチョン

  • RQ1バッファ・オーバーフローが確認された C プログラムが、x86 と WebAssembly にコンパイルされた場合に、異なる実行結果を示すか?
  • RQ2脆弱な C プログラムにおける WebAssembly とネイティブコード間の実行相違を引き起こす根本的原因は何か?
  • RQ3スタック・キャニオンのようなコンパイラのセキュリティメカニズムが、WebAssembly とネイティブコードのバックエンドでどの程度異なるか?
  • RQ4コンパイラ最適化やコードの変種は、WebAssembly バイナリにおけるセキュリティ保護の有無にどのように影響するか?
  • RQ5バッファ・オーバーフローをはるかに超えた、WebAssembly へのコンパイル中に生じる広範なセキュリティの相違は存在するか?

主な発見

  • 4,469 個の脆弱な C プログラムのうち 24% が、x86 と WebAssembly バイナリ間で異なる実行結果を示した。
  • 相違の根本的原因は、常に WebAssembly バイナリにスタック・キャニオンが存在しないことであった。x86 バイナリにはスタック・キャニオンが存在する。
  • x86 バイナリはスタックベースのバッファ・オーバーフローでクラッシュするのに対し、WebAssembly バイナリは実行を継続していた。これは、実行時保護が欠落していることを示している。
  • WebAssembly にスタック・キャニオンが存在しないのは、WebAssembly の仕様に欠陥があるためではなく、コンパイラのバックエンドの選択によるものである。
  • -O1 などのコンパイラ最適化レベルは、セキュリティ保護の出力に影響を与え、相違の有無に影響することが分かった。
  • x86 および WebAssembly バイナリを含む、1,088 個の相違を示すプログラムのデータセットは、今後の研究のための公開が可能である。

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

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

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

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