システムコールの Linux カーネルスタックアドレスをランダム化するために導入されたパッチ

kernel.org の元主任システム管理者であり、Ubuntu セキュリティ チームのリーダーであり、現在は Google で Android と ChromeOS のセキュリティ保護に取り組んでいる Kees Cook 氏は、システム コールの処理時にカーネル スタック内のオフセットをランダム化するためのパッチ セットを公開しました。 パッチはスタックの配置を変更することでカーネルのセキュリティを向上させ、スタックへの攻撃をより困難にし、成功しにくくします。 初期実装では、ARM64 および x86/x86_64 プロセッサがサポートされています。

このパッチの元のアイデアは PaX RANDKSTACK プロジェクトに属しています。 2019 年、Intel のエンジニアである Elena Reshetova は、メインの Linux カーネルに組み込むのに適したこのアイデアの実装を作成しようとしました。 その後、この主導権は Kees Cook によって引き継がれ、彼はカーネルのメイン バージョンに適した実装を提示しました。 パッチは 5.13 リリースの一部として含まれる予定です。 このモードはデフォルトでは無効になっています。 これを有効にするために、カーネル コマンド ライン パラメーター「randomize_kstack_offset=on/off」と CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT 設定が提案されています。 このモードを有効にすることによるオーバーヘッドは、約 1% のパフォーマンス損失と推定されます。

提案された保護の本質は、システム コールごとにランダムなスタック オフセットを選択することです。これにより、次のシステム コールでスタックのベース アドレスが変更されるため、アドレス データを受信した後でもメモリ内のスタック レイアウトを決定することが困難になります。 PaX RANDKSTACK 実装とは異なり、カーネルに含めることが提案されているパッチでは、ランダム化は初期段階 (cpu_current_top_of_stack) ではなく、pt_regs 構造体の設定後に実行されます。そのため、ptrace ベースのメソッドを使用してランダム化されたオフセットを決定することができなくなります。長時間実行されているシステム コール中。

出所: オープンネット.ru

コメントを追加します