2月15日、The New Stackが「The Feds Push for WebAssembly Security Over eBPF」と題した記事を公開した。この記事では、WebAssemblyを活用してセキュリティを強化するアメリカ政府の推進施策と、eBPFとの比較に関する内容が詳しく紹介されている。
以下に、その内容を紹介する。
アメリカ政府もWebAssemblyに注目
アメリカ政府によると、WebAssemblyを活用することで、クラウドネイティブなサービスメッシュ領域全体でセキュリティを強化すべきだとしている。Wasmがより広く採用されつつあるなかで、セキュリティコンプライアンス要件を満たすためにWebAssemblyの使用が必須になる可能性もあるようだ。
米国国立標準技術研究所(NIST)の論文「A Data Protection Approach for Cloud-Native Applications」によれば、WebAssemblyは特にクラウドネイティブなサービスメッシュ領域でセキュリティ強化のために統合すべきと指摘している。この論文で示されたフレームワークは、将来WebAssemblyやクラウドネイティブ環境におけるコンプライアンス要件につながる可能性があり、セキュリティ強化の文脈でWebAssemblyのより幅広い利用を促進する基礎となりうる。
eBPF概要
論文では、eBPFとの対比についても触れられている。
eBPFとは何か
eBPF(Extended Berkeley Packet Filter)とは、Linuxカーネル上で安全かつ柔軟にプログラムを実行するための仕組みである。従来からあるBPF(Berkeley Packet Filter)の拡張版として開発され、カーネル空間に対して動的にコードを挿入し、さまざまなイベント(パケットの受送信やシステムコールなど)をフックしてリアルタイムに処理できる点が大きな特徴だ。
eBPFを活用すると、以下のような分野で効率的かつ安全な処理を行えるようになる。
- パケット処理・フィルタリング
ネットワークパケットを効率的にキャプチャして分析・フィルタリングする。 - セキュリティ
特定のシステムコールやプロセス活動をモニタして、怪しい動作を検知・ブロックできる。 - パフォーマンス監視
カーネルやユーザ空間で起きるさまざまなイベントを追跡し、詳細なトレースやプロファイリングを行える。 - トラブルシューティング
予期せぬ遅延やエラーなどが発生した場合に、リアルタイムに原因を追跡・診断しやすくなる。
従来のカーネル拡張に比べ、eBPFプログラムは独自のバイトコードでコンパイルされ、カーネル内でサンドボックス化されて実行される。これにより、安全性や安定性を確保しながら高いパフォーマンスを実現できるのが特徴だ。近年では、観測・セキュリティ・ネットワーク制御などの用途で広く利用され、Kubernetesをはじめとするクラウドネイティブ環境でも注目されている。
eBPFの利点と欠点
しかしeBPFは当初、OpenSSL暗号ライブラリを侵害したHeartbleedのようなサイドチャネル攻撃や、カーネルレベルの脆弱性対策にフォーカスして生まれた経緯がある。eBPFでは、問題が発生した際に素早くパッチを当て、その活動をブロックするという手法を取るが、それはカーネルレベルの保護に特化した性質によるものだという。
論文の共著者であるHales氏は、The New Stackの取材に対して「多くの人がeBPFを“万能なハンマー”として扱いがちだが、それは本質的にそうではない」と語り、「eBPFはある特定の用途のために設計されたものだ」と強調している。
Hales氏によれば、「eBPFは導入が簡単で可視性を高めるという利点があるため、あらゆる用途に使われている。しかしeBPFはカーネル空間で動作するため、レイヤ7の人が読みやすいテキストには直接対応できない」。
eBPFはレイヤ4でパケットを扱うが、それらをユーザ空間で解析するには、パケットをミラーリングしてコンテナ内で分析する必要があり、「これは非常にパフォーマンス面で不利となる“フランケンシュタイン的”なプロセスだ」とHales氏は述べる。「Wasmはまさに我々の目的に合致している。実際にeBPFを試作したが、要件を満たすには難しかった」
eBPF vs. Wasm
論文では、eBPFのセキュリティとWasmのセキュリティを比較するにあたり、次のように記されている。
「レイヤ4~7の人間が読みやすいテキストを解析するには、eBPFのような技術よりもWasmを利用するほうが有利である。eBPFはカーネル内で直接データをキャプチャ・操作できる強力な仕組みではあるが、詳細なHTTPトラフィックの解析など、アプリケーション層の複雑な処理をカーネル空間で行うのは困難であり、パフォーマンスやセキュリティの懸念が生じる可能性がある。さらにeBPFにはさまざまな制限があり、データ処理や汎用的な計算を行うには追加の工夫が必要だ。
Wasmは、安全性の高いサンドボックス環境を提供し、複数のプラットフォームで効率よくコードを実行し、アプリケーション層のプロトコルを解析できる。Wasmはユーザ空間やサーバ環境で動作し、既存の解析ライブラリやツールとの統合が容易であり、複雑性を軽減して解析の信頼性を向上させる可能性がある。ポータビリティが高く、さまざまなランタイム環境で組み込み可能であるため、人間が読みやすいテキストを含むプロトコルを扱うネットワークトラフィック分析には実用的だ。」
クラウドネイティブの世界では、すべてのデータトラフィックがサービスメッシュ(たとえばIstio)のプロキシを通ることになる。Wasmはモジュール的、あるいは“サンドボックス化”された設計のため、データがHTTPやgRPC、GraphQLなどを介してやり取りされる場合でも対応可能だ。
大局的な視点
今回の論文の要旨は、「WebAssemblyによるセキュリティがeBPFより優れている」という単純な話ではない。むしろ、全体像として、オブザーバビリティやセキュリティ、包括的なソリューションやベストプラクティスを検討する際に、どちらか一方を置き換えるのではなく、適材適所で使い分けるべきだという提案になっている。政府がWebAssemblyのみを義務化し、eBPFを全く使わなくなるという極端なシナリオは考えにくく、現実的には両方を補完的に利用する形になるだろう。
ARMO社のCTO兼共同創業者であるBen Hirschberg氏は、「eBPFは汎用計算プラットフォームとして設計されておらず、アルゴリズムやメモリ面での制限がある。セキュリティの観点からも、カーネル空間(eBPFが動作する領域)で実行できる機能は最小限に留め、ユーザ空間のWasmに複雑なロジックを任せるのが望ましい」と述べている。
実際、WebAssemblyはそもそもブラウザ内で不審なコードを動かすことを想定した“サンドボックスセキュリティ”の概念を設計当初から持ち合わせている。「世界で最も広く使われているサンドボックス環境は、ほとんどの人がいま使っているウェブブラウザだ。ブラウザは信頼できないコードを実行する前提で作られており、WebAssemblyはまさにブラウザ由来のサンドボックス技術を第一級の機能として提供している」とFermyon社の共同創業者兼CEOであるMatt Butcher氏は説明する。
Butcher氏は「Wasmはプラットフォームに依存しない柔軟なコア技術で、拡張性が高い。多くのOSやアーキテクチャで動作し、主要なプログラミング言語のほぼすべてに対応しているため、eBPFよりも適応力に優れている。Wasmは汎用目的として設計され、eBPFはそうではなかったのだ」とまとめている。
さらに、WasmはHTTP、gRPC、GraphQLなどあらゆる通信形態を対象にできるため、eBPF単独では対処しづらいレイヤ7レベルの可視化やセキュリティ対策を効率的に担うことができるとHales氏は強調している。
一方、セキュリティやオブザーバビリティといった観点で総合的なアプローチを取るには、eBPFとWasmの両方を活用するのが現実的だという見方もある。「eBPFは汎用計算プラットフォームとして設計されていないし、セキュリティ面でもカーネル空間で処理を行うには制限が多い。複雑な解析はWasmで行うほうが好ましいが、eBPFが得意とする分野もある」との意見だ。
詳細はThe Feds Push for WebAssembly Security Over eBPFを参照していただきたい。