Mystra: Declarative Dynamic Taint Analysis via Shadow Virtual Machine
本論文は、テイントのセマンティクスをランタイムのインストルメンテーションから分離する宣言型言語およびShadow仮想マシンアーキテクチャであるMystraを紹介するものであり、これによりSharツールが、既存のソリューションと比較して、複数のJavaScriptおよびPythonランタイムにわたって高い精度と大幅に低いオーバーヘッドを実現することを可能にしている。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
いたずら好きな幽霊(セキュリティ脆弱性)を捕まえようとしていると想像してください。その幽霊は、巨大で賑やかな街(コンピュータプログラム)をこっそり通り抜けていきます。幽霊は、手紙の中にある一滴の無害なインク(信頼できないデータ)として始まりますが、もしそれが特定のドア(ファイルの読み取りなどの機密性の高い操作)に到達すると、建物全体を破壊してしまいます。
長い間、セキュリティの専門家はこの幽快を捕まえるために2つの主要な方法を試みてきましたが、どちらにも大きな問題がありました。一つの方法は、誰かが引っ越してくる前に街の設計図を書き換えるようなものでした(ソース書き換え)。これは安全でしたが、街の進行を極端に遅らせ、20倍から50倍も遅くしてしまいました!もう一つの方法は、特定の近所にしか働けない特別な探偵を雇うようなものでした(エンジンネイティブ)。これは高速でしたが、もし街のレイアウトが変わったり、別の近所に移動したりすると、その探偵は解雇され、最初から再教育を受け直さなければなりませんでした。
ここに、ジョンズ・ホプキンス大学の新しい調査チームであるMystraとSharが登場します。彼らは、本物の街のすぐ隣に「シャドウ・シティ(影の街)」を建設することに決めました。
シャドウ・シティ(シャドウ仮想マシン)
本物の街を作り変えたり、設計図を書き換えたりする代わりに、研究者たちは本物のプログラムと並行して動作する、並列で目に見えない「シャドウ仮想マシン」を構築しました。それは、本物の街が作るあらゆる動きを鏡のように映し出す、幽霊のような双子の街です。
実在の操作(関数が別の関数を呼び出す、あるいはファイルが開かれるなど)が発生すると、シャドウ・シティは即座にそれを察知します。しかし、ここが魔法のポイントです。シャドウ・シティは、本物の街がどのように建てられているかを気にしません。本物の街が高速なモダンエンジン(Node.jsのV8など)で動いていようと、古いエンジン(CPythonなど)で動いていようと、シャドウ・シティは全く同じ「イベント」を見ます。これは、エンジンの具体的な仕組みに絡め取られることなく、調査員がアクションを見守ることができるユニバーサルな翻訳機を持っているようなものです。
ルールブック(Mystra)
ただ街を見守るだけでは不十分です。何に注目すべきかを知る必要があります。そこでMystraの出番です。Mystraは、セキュリティ専門家が次のような単純なルールを書くための、特別で読みやすい言語(「宣言型」言語)です。「もしファイルパスがユーザーから来たもので、かつそのパスがファイルを開くために使用されたなら、警報を鳴らせ!」
論文では、従来のツールはあまりに硬直的であり、専門家に特定のエンジンに縛られた複雑で乱雑なコードを書かせると指摘しています。Mystraは異なります。それは、どんなエンジンにもカチッとはめ込めるLEGOの指示書のようなものです。
- 「注入(Inject)」と「抽出(Extract)」のトリック: Mystraが「高階関数」(JavaScriptの
Array.mapなど)を扱う方法は、最もクールな機能の一つです。例えば、ある機械が箱を受け取り、中のものを加工するために作業者に渡し、その後、再び箱に戻す工場を想像してください。Mystraは、「箱の汚れを作業者の手に注入し、作業者が終わった時に、その汚れを箱へと抽出する」と言うことができます。これにより、システムは、以前のツールが混乱して苦戦していた「コールバック関数」の中に幽霊が飛び込んだとしても、その幽霊を追跡することができます。
結果:高速かつ正確
研究者たちは、このアイデアをテストするためにSharというツールを構築しました。彼らは単に推測したのではなく、現実世界のベンチマークを用いて測定を行いました。
- 速度: SharをNode.jsで実行したところ、プログラムの速度低下はわずか1.85倍でした。従来のソース書き換えツールが22.7倍も遅くなっていたのと比較すると、Sharがいかに速いかがわかります!また、Sharは、全く同じワークロードにおいて、前回の最高ツールであるNodeMedic-FINEよりも22.7倍高速です。
- 正確性: 既知の脆弱性493件(SecBench.jsと呼ばれる)のテストセットにおいて、Sharはそれらの95.5%を捉えました。さらに優れたことに、ソフトウェアの修正済みバージョン(穴がすでに塞がれたもの)をテストした際、Sharはゼロの誤報を出しました。一度も空振りに終わることなく、正しく判断したのです。
- 移植性: チームは、このアイデアが異なる世界でも機能することを証明しました。彼らは同じコアエンジンとルールを持ち込み、V8(Node.jsやChromeで使用)、SpiderMonkey(Firefoxで使用)、CPython(Pythonで使用)という3つの異なるランタイムへの移植に成功しました。彼らは各エンジンに対して小さな「アダプター」を書くだけで済み、メインの頭脳はそのまま維持されました。
彼らが解決できなかったこと
このツールが「できないこと」を知っておくことも重要です。論文では、Sharは「暗黙的なフロー(implicit flows)」を追跡しないことを明記しています。もし幽霊がインクの跡を残すのではなく、罠を知らせるために空の色を変えたとしたら、それは暗黙的なフローです。Sharは空を見てはいません。インクだけを見ています。著者らは、これらの目に見えない信号を追跡することは、システムの速度を劇的に低下させる(他の研究では36.7倍の遅延)ため、当面は目に見える跡を追跡することに焦点を絞ったと述べています。
また、プログラムがテキストの文字列を細かな断片に分割する場合(文章を単語に分けるなど)、元の「汚れた」テキストとの繋がりが失われることがあることも分かりました。これはこの種の追跡における既知の制限であり、将来の研究では、これを修正するために文字単位の追跡を検討する必要があるだろうと示唆されています。
結論
この論文は、SharとMystraを、あらゆるセキュリティ問題を解決する魔法の杖としてではなく、データの追跡方法における大きな進歩として提示しています。追跡するもの(ルール)と、プログラムを監視する方法(シャドウVM)を切り離すことで、彼らは高速で正確、かつ柔軟なシステムを作り上げました。
テストにおいて、彼らは、セキュリティツールがスピードの怪物であり、かつ鋭い目の探偵でもあり得ること、そしてプログラムを保護しながらもその速度を落とすことなく、**95.5%**の脆弱性を特定できることを示しました。これは、もはや「スピードか安全性か」のどちらかを選ぶ必要はないという証明なのです。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。