
Baron Samedit脆弱性の可視化、ファジング、エクスプロイトおよびパッチ
レポートを見る »
Francesco Marchiori
·
Alessandro Lotto
Unixベースのオペレーティングシステムにはsudoコマンドが搭載されており、それを許可されたユーザーは一時的にroot権限を昇格させることができます。sudoは重要な機能を提供する一方で、悪用されるとシステム自体のセキュリティと信頼性を損なう可能性があります。オペレーティングシステム内での重要性から、sudoのソースコードは頻繁なテストとコードレビューの対象となっています。その結果、CVE-2021-3156として知られるヒープベースのオーバーフロー脆弱性が発見されましたが、驚くべきことに、この脆弱性は約10年間隠されていました。バグや脆弱性の発見に最もよく使われる手法の1つであるファジング技術でさえ、これまでこの脆弱性を発見することはできませんでした。本論文では、バッファオーバーフロー脆弱性を起点に、非特権ユーザーである場合やsudoコマンドの使用を許可されていない場合でもrootシェルを取得するためにどのように悪用されるかまで、CVE-2021-3156 sudo脆弱性を詳細に分析します。
Visualizationディレクトリには、バックスラッシュ文字の有無による引数の解析方法を可視化し、環境変数がヒープレイアウトにどのように影響するかを分析するために使用したスクリプトがいくつかあります。これは、提案されたエクスプロイトの構造をさらに理解するためのものです。
Fuzzingディレクトリには、脆弱性のあるバージョンのsudoに対してファジングを実行するために必要なファイルがあります。また、ファジングを実行できるようにする方法と、AFLがそのままでは動作しない問題を解決する方法も報告されており、これにより脆弱性が約10年間隠されてきた理由が説明されています。
Exploitディレクトリには、別の脆弱性のあるバージョンのsudoに対して攻撃を実行するために必要なファイルがあります。環境変数によるメモリ占有を利用してヒープ・フェン・シュイを実行し、ライブラリをロードする代わりに独自のコードを実行するためにservice_userオブジェクトの名前を上書きします。
Patchディレクトリには、オーバーフローの動作をシミュレートし、私たちが作成した追加コードでパッチを適用するoverflow_simulation_patch.cスクリプトがあります。Sudoプロジェクトの開発者はコード自体ではなく脆弱性のフローを修正することを選択したため、私たちは別のアプローチと、わずか数行のコードで修正できる方法を示します。