Skip to main content
QUICK REVIEW

[論文レビュー] TaintAssembly: Taint-Based Information Flow Control Tracking for WebAssembly

William Fu, Raymond Tzer Pin Lin|arXiv (Cornell University)|Feb 4, 2018
Advanced Malware Detection Techniques参考文献 7被引用数 20
ひとこと要約

TaintAssembly は、解釈された WebAssembly における動的タウンティング追跡を可能にする変更済み V8 JavaScript エンジンであり、関数パラメータ、ローカル変数、線形メモリ、確率的タウンティングを含むタウンティング伝播をサポートする。Vanilla V8 と比較してわずか 5–12% のランタイムオーバーヘッドに抑えられており、情報フロー解析を用いた WebAssembly アプリケーションの開発およびデバッグに実用的である。

ABSTRACT

WebAssembly (wasm) has recently emerged as a promisingly portable, size-efficient, fast, and safe binary format for the web. As WebAssembly can interact freely with JavaScript libraries, this gives rise to a potential for undesirable behavior to occur. It is therefore important to be able to detect when this might happen. A way to do this is through taint tracking, where we follow the flow of information by applying taint labels to data. In this paper, we describe TaintAssembly, a taint tracking engine for interpreted WebAssembly, that we have created by modifying the V8 JavaScript engine. We implement basic taint tracking functionality, taint in linear memory, and a probabilistic variant of taint. We then benchmark our TaintAssembly engine by incorporating it into a Chromium build and running it on custom test scripts and various real world WebAssembly applications. We find that our modifications to the V8 engine do not incur significant overhead with respect to vanilla V8's interpreted WebAssembly, making TaintAssembly suitable for development and debugging.

研究の動機と目的

  • WebAssembly における動的タウンティング追跡ツールの不足、特に JavaScript との相互作用を含めた文脈を解決すること。
  • 開発者が開発段階で意図しないデータフローおよび潜在的脆弱性を検出できるようにすること。
  • 顕著なパフォーマンスオーバーヘッドを伴わず、解釈された WebAssembly におけるタウンティング追跡を実装すること。
  • 関数パラメータ、ローカル変数、線形メモリ、および確率的タウンティングモデルを含むタウンティング伝播をサポートすること。
  • 実際のブラウザーエンジン(V8/Chromium)におけるタウンティング追跡の実現可能性とパフォーマンスを評価すること。

提案手法

  • ビットベクトルタウンティング追跡を用いて、関数パラメータおよびローカル変数におけるタウンティングラベルの追跡を可能にするために、V8 の WebAssembly インタプリタを変更した。
  • ランタイムおよびメモリオーバーヘッドを伴うが、別個のタウンティングマップをメモリ位置に維持することで、WebAssembly の線形メモリへのタウンティング追跡を拡張した。
  • 各演算ごとにタウンティング伝播の確率を割り当てる確率的タウンティングモデルを実装し、若干の精度の損失を犠牲にすることでメモリ使用量を削減した。
  • 確率値の分解能を 8 ビットとして設定し、100,000 回の反復を通じてハッシュ関数を用いてタウンティング持続性を評価した。
  • 変更済みの V8 エンジンを Chromium ビルドに統合し、カスタムスクリプトおよび実際の WebAssembly アプリケーション上でベンチマークを実施した。
  • V8 ソースコードのトレースとデバッグを実施し、マスターブランチに不安定性が認められたため、安定したブランチ(chromium/3270)を対象とした。

実験結果

リサーチクエスチョン

  • RQ1解釈された WebAssembly において、著しいパフォーマンスコストを伴わず、動的タウンティング追跡を効果的に実装できるか?
  • RQ2タウンティング伝播は、WebAssembly の関数、ローカル変数、線形メモリの間でどのように動作するか?
  • RQ3実際のブラウザーエンジン(例:V8)におけるタウンティング追跡のパフォーマンスオーバーヘッドはどの程度か?
  • RQ4確率的タウンティング追跡は、メモリ使用量を削減しながらも、タウンティングの持続期間をどれほど効果的に維持できるか?
  • RQ5タウンティング追跡は、WebAssembly と JavaScript 間のデータフローを検出でき、脆弱性検出を可能にするか?

主な発見

  • TaintAssembly は、実際の WebAssembly アプリケーションにおいて、Vanilla V8 と比較してわずか 5–12% のパフォーランスオーバーヘッドに抑えられており、開発用途における実用的実現可能性を示している。
  • 関数パラメータおよびローカル変数に対する基本的なタウンティング追跡は効果的であり、最小限のオーバーヘッドで実現できる。
  • 線形メモリにおけるタウンティング追跡は機能的であるが、別個のタウンティングマップの必要性から、測定可能なランタイムおよびメモリオーバーヘッドを伴う。
  • 確率的タウンティング追跡では、伝播確率が 0.6 未満に低下すると、タウンティング持続性が急激に低下し、確率 0.8 の場合には約 50% の保持率を示した。
  • 2700 回の演算を含むハッシュ関数を通じたタウンティング伝播行動は、ソフトプラス関数に類似しており、タウンティング持続期間の予測可能な減衰を示している。
  • 実装は、WebAssembly と JavaScript 間の相互作用におけるタウンティング追跡を正常にサポートしており、信頼できないソースからのデータフロー検出を可能にした。

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

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

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

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