VaultFuzzer: Linux カーネルに対する状態ベースのアプローチ September 13, 2021 | 6 最小読み取り

VaultFuzzer: Linux カーネルに対する状態ベースのアプローチ

背景

コンピュータソフトウェア開発の開始以来、ソフトウェア品質はソフトウェアテストの分野で避けられない問題となっています。ソフトウェアの欠陥(一般にバグとして知られている)をより効率的に識別するために、ファジーザー(ファジーテストツール)が登場しましたが、異なる分野でのファジーザの使用目的は異なります。

  • QA指向のファジーテスト、すなわちバグを検出し、それらを修正

*セキュリティ指向のファジーテスト、すなわちバグを検出し、その悪用可能かどうかを把握する

技術的なアーキテクチャ/実装の面では、現在、Linux / Androidカーネル用のファジーザには2つの主要なタイプがあります。

  • トリニティなどのシステムコール用のファジーザー

  • syzkallerなどのコードカバレッジガイド付きファジーザ

トリニティは、2010年代初頭にLinuxカーネル用の最も人気のあるファジングツールでした。システムコールと特定の範囲のランダムパラメータの組み合わせを使用して、ルールに基づいてシステムコールをテストします。コードパスの詳細な調査は理想的ではなく、当時は三位一体が唯一の選択肢でした。カーネル内の各サブシステムのカバレッジを広げることは、ハードコーディングされたカスタマイズが使用されているとしても困難です。2015年2月、KASANはGoogleのプロジェクトであるLinuxカーネルにマージされました。これは、コードカバレッジガイド付きファジーザーsyzkallerの礎石です。多くのセキュリティ研究者とQAエンジニアは、2016年初頭にsyzkallerの実験を始めました。

alter-text

問題

一般的なファジーソリューションとしてのSyzkallerは、数年にわたる改善の後、Linuxカーネルのメインライン開発でうまく機能します。しかし、特定のサブシステムを詳細に調査することは、業界のお客様の高い安定性要件を満たすにはほど遠いものです。金融、ICS(産業用制御システム)、自動車、クラウドコンピューティング、その他の業界は、このような状況下でいくつかの問題に対処しなければならないかもしれません。

*サードパーティのカーネルコードまたはモジュールが導入されていますが、これはしばしばセキュリティ脆弱性のリスクの高い領域であり、オープンソースでなくてもリバースエンジニアリングによるセキュリティ分析に使用できます

  • フィールド固有のアプリケーションは、特定のカーネルサブシステム内のコードパスに依存しており、汎用QAアプローチは「許容可能な」時間内にコードカバレッジに達することはできません

*アプリケーションでの不完全な回帰テスト、すなわちアプリケーションのベンダーは通常、カーネルの安定性の基本的なテストを完了しません

私たちのソリューション: ヴォルトファジー

HardenedVaultは、上記の要件に基づいて、Linuxカーネル用の状態ベースのターゲット指向ファジー「VaultFuzzer」を開発しました。VaultFuzzerは既存のsyzkallerフレームワークと互換性があり、お客様のアプリケーションを特定のカーネルサブシステムと関連付けることができるという最大の利点があり、このようなファジーテストは本番システムの安定性を高めることができます。主な機能は次のとおりです。

alter-text
  • ターゲット関数アドレスは、LLVM IR、アセンブリコード、カーネルイメージの静的解析によって取得され、加重PCへのアタッチメントはLLVM IRプロセスのCFGに基づいて取得でき、これらはすべてVaultFuzzerによって使用されます。

*カバレッジフィルタは、サブシステム、ファイル、およびコードブロックにターゲットを集中させ、ターゲットの外側の探索に計算が無駄になるのを防ぎます。

*重み付けされたPCは、CFGと異なる重みに基づいて不均衡な重み付けシステムを構築するために、テストの方向を導くために異なるコードブロックに割り当てられます。

  • カーネル状態モードであるCLANG/LLVMインストルメンテーションが導入され、バグトリガの状態をテストケースとして記録して、より複雑なコンテキストでコードパスの実際の状態をより効率的にマッピングできますが、コーパスとの互換性は本質的に空間的なアプローチであり、正式な検証方法などの許容できないパフォーマンスオーバーヘッドを回避します。

*サポートクラン/ LLVM 10/11/12

(大まかに) テスト結果: VaultFuzzer と Syzkaller

CPU時間で*ファジング:100時間 *物理的な世界での時間:6時間40分

  • ハードウェア: 32 コア + 64 ギガバイトの RAM
  • syzkaller (Aug 2021): デフォルトポリシー
  • VaultFuzzer (Mar 2021): カバレッジ フィルターのみが有効
alter-text alter-text

結果から、VaultFuzzerのTCPとSCTPはsyzbot/CIに近いため、見栄えが良いです。syzbot/CI はコーパスを常に更新 (新しいコード カバレッジに当たった場合は新しいコーパスを追加し、その逆も同様) しますが、合計累積時間は 2 年以上で、実行時間は 7 時間未満です。Vaultfuzzer は、SCTP などのよりきめの細かいサブシステムの状態ベースのテストがあれば、より優れたパフォーマンスを発揮します。

まとめ

ファジー化は長い間、ソフトウェアテストとセキュリティにとって重要であり、ソフトウェアテスターは通常、システムの安定性を向上させるためにできるだけ早くバグを特定することだけに焦点を当て、セキュリティエンジニアは次のように分かれています。

*攻撃側は、悪用可能なバグを特定し、時間内に0dayの悪用を武器化します *防御側、すべてのバグ(悪用可能なものであるかどうかにかかわらず)を特定し、システムの安定性とセキュリティを向上させるためにできるだけ早く修正する

NISTは、2021年7月に大統領令EO 14028に対応して[ソフトウェアの開発者検証のための最低基準に関するガイドライン](https://www.nist.gov/system/files/documents/2021/07/13/Developer ソフトウェアの検証.pdf)を発行しました。幸いなことに、「ファジーザーの実行」と「回帰テスト」がリストにあります。これは、生産システムに関連するファジーザーに対する業界の長年の注意の欠如を補うでしょう。技術動向に関しては、Microsoftのセキュリティチームはまた、将来的には国家ベースのファジーザーがトレンドであると考えている。

VaultFuzzer は、カーネル保護モジュールの安定性を確保するために VED (Vault Exploit Defense) にも使用されます。HardenedVaultは、現時点でアジアでLinuxカーネルの状態ベースのファジーザーの唯一のソリューションプロバイダーです。