1 ポイント 投稿者 GN⁺ 2024-08-10 | まだコメントはありません。 | WhatsAppで共有

CVE-2023-2163: eBPF Linuxカーネル脆弱性の発見と修正

背景

  • eBPFは、複雑なカーネルモジュールを書かずに、実行時にLinuxカーネルの機能を拡張できる技術。
  • eBPFプログラムは特定のイベント発生時に実行され、ロード前に安全性の検証を受ける必要がある。
  • 検証器(verifier)は複雑なコードで構成されており、多くの脆弱性が見つかっている。
  • Googleは、eBPF verifierを自動監査するファザー(fuzzer)であるBuzzerを開発した。

Buzzerのポインタ算術戦略

  • BuzzerはeBPF向けの新しいファザーで、論理バグを引き起こすことを狙った戦略を用いる。
  • ポインタ算術戦略は次のような段階で構成される:
    1. レジスタを任意の値で初期化するヘッダーを生成
    2. 任意の算術命令およびジャンプ命令を生成
    3. 任意のレジスタを選択し、eBPFマップ要素へのポインタとの加算を実行
    4. その要素にマジック値を書き込む

eBPFのパス枝刈り

  • eBPF verifierは、プログラムが安全に実行できるかを確認する役割を担う。
  • 条件文がある場合、あらゆる可能な状態をシミュレートする。
  • 条件付きジャンプが多い場合は、性能向上のためにパス枝刈り戦略を使用する。

バグ

  • CVE-2023-2163は「正確な追跡」という概念を導入し、パス枝刈りをより効率的にした。
  • バグは、r9レジスタがr6の正確性に寄与していることを見落としたために発生した。

エクスプロイト

  • CVE-2023-2163を悪用することで任意の読み取り/書き込みを達成し、LPEおよびコンテナ脱出を実行できる。
  • 主な段階:
    1. 任意の読み取り/書き込みを達成
    2. プロセスの資格情報を見つけて権限を昇格

修正

  • CVE-2023-2163を修正するため、正確なレジスタに影響を与える演算で、不正確なレジスタを正確としてマークするようにした。
  • 性能への影響は不明だが、追加の問題は見つかっていない。

今後のアイデア

  • eBPFプログラムの安全性を保証することは、検証プロセスの複雑さゆえに難しい。
  • GoogleはBuzzerを通じてこの問題の解決に取り組んでおり、オープンソースコミュニティからの貢献を歓迎している。

GN⁺のまとめ

  • この記事は、eBPF verifierの脆弱性を発見し修正する過程を説明している。
  • eBPFはカーネルセキュリティ研究における重要な技術であり、その安全性を保証するのは難しい。
  • GoogleはBuzzerというファザーを開発し、eBPF verifierの脆弱性を自動監査している。
  • この記事はセキュリティ研究者や開発者にとって有用であり、eBPFのような複雑なシステムの安全性を保証する助けとなる。
  • 類似機能を持つプロジェクトとして、eBPFに関連する他のファザー系ツールがある。

まだコメントはありません。

まだコメントはありません。