[論文レビュー] Debloating Software through Piece-Wise Compilation and Loading
本論文は、ソフトウェアコンponentsのパーツワイズコンパイルおよびロードを可能にするコンパイラベースのデブローティングフレームワークを提示する。ベンチマークプログラムではコードブロードを最大86%まで削減し、coreutilsでは86%以上削減した。機能的欠損なしに、脆弱なコードや再利用可能なガジェットコードをすべて削除する。ロード時のオーバーヘッドは最小限であり、Firefox や curl といった実世界のアプリケーションにおいて、セキュリティとパフォーマンスの両面で顕著な利点を示した。
Programs are bloated. Our study shows that only 5% of libc is used on average across the Ubuntu Desktop environment (2016 programs); the heaviest user, vlc media player, only needed 18%. In this paper: (1) We present a debloating framework built on a compiler toolchain that can successfully debloat programs (shared/static libraries and executables). Our solution can successfully compile and load most libraries on Ubuntu Desktop 16.04. (2) We demonstrate the elimination of over 79% of code from coreutils and 86% of code from SPEC CPU 2006 benchmark programs without affecting functionality. We show that even complex programs such as Firefox and curl can be debloated without a need to recompile. (3) We demonstrate the security impact of debloating by eliminating over 71% of reusable code gadgets from the coreutils suite and show that unused code that contains real-world vulnerabilities can also be successfully eliminated without adverse effects on the program. (4) We incur a low load time overhead.
研究の動機と目的
- 実際の利用状況ではライブラリ内のコードのわずか数パーセントしか使用されていないという、ソフトウェアブロードの広範な問題に対処すること。
- 不要なコードを削除できるように、選択的コンパイルとランタイムロードを可能にするコンパイラツールチェーンの設計および実装。
- 実世界のアプリケーションおよびシステムライブラリの機能的正しさ、パフォーマンスオーバーヘッド、セキュリティへの影響を評価すること。
- Firefox や curl のような複雑なプログラムに対し、再コンパイルなしにデブローティングを適用できることを実証し、機能を保持すること。
- 実世界の脆弱性を含む不要なコードを削除することで、攻撃表面積をどの程度削減できるかを定量化すること。
提案手法
- 変更済みのコンパイラツールチェーンを活用し、ライブラリおよび実行可能ファイルから必要なコードセグメントを分析・抽出する。
- パーツワイズコンパイルおよびロードを実装し、実行時に必要な関数およびデータのみをロード可能にする。
- Ubuntu Desktop 16.04環境における多様なプログラムにおいて、使用済みおよび未使用のコードパスを特定するために静的および動的解析を実施する。
- バイナリインストルメンテーションおよびランタイムロードメカニズムを適用し、必要に応じて必要なコードセグメントのみをオンデマンドでロードする。
- 従来のビルドシステムおよびランタイム環境と統合することで、後方互換性を確保し、最小限の混乱をもたらす。
- coreutils、SPEC CPU 2006ベンチマーク、Firefox や curl といった本番環境アプリケーションを対象に、広範なテストを通じて機能を検証する。
実験結果
リサーチクエスチョン
- RQ1実世界のプログラムから不要なコードを安全に削除できる範囲はどの程度か?
- RQ2パーツワイズコンパイルおよびロードは、多様なソフトウェアワークロードにおいてコードサイズをどの程度削減できるか?
- RQ3ランタイムロードメカニズムによって引き起こされるパフォーマンスオーバーヘッドはどの程度か?
- RQ4デブローティングは、再利用可能なコードガジェットおよび既知の脆弱性の数をどの程度削減できるか?
- RQ5Firefox や curl のような複雑な、事前にコンパイル済みバイナリに対しても、再コンパイルなしにデブローティングを適用できるか?
主な発見
- 2016年版Ubuntu Desktopプログラムの2016個のプログラムにおいて、libcの平均使用率は5%であり、vlcメディアプレlayerでは最大18%に達した。
- 本フレームワークは、coreutilsを79%以上、SPEC CPU 2006ベンチマークを86%以上デブローティングし、機能的欠損なしに成功した。
- coreutilsスイートでは、再利用可能なコードガジェットの71%以上が削除され、潜在的な攻撃表面積が削減された。
- 実世界の脆弱性を含む不要なコードが正常に削除され、プログラム動作に悪影響を及ぼさなかった。
- ランタイムロードオーバーヘッドは低く抑えられ、本番環境への実用的導入可能性を示した。
- Firefox や curl のような複雑な、事前にコンパイル済みバイナリに対しても、再コンパイルなしにデブローティングが可能となった。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。