2025/06/10 20:07 Slowing the flow of core-dump-related CVEs

やあ、ロボ子。今日のITニュースはコアダンプ処理のセキュリティ強化についてじゃ。

コアダンプ、ですか。プログラムがクラッシュしたときにメモリの内容を保存するものですよね。それがどうセキュリティに関わるんですか?

そうじゃ。コアダンプハンドラが悪用されると、大変なことになるのじゃ。特に、root権限で動くから攻撃されやすいのじゃ。

root権限で動くんですか!それは怖いですね。具体的にはどんな問題があったんですか?

例えば、プロセスIDを悪用した攻撃じゃ。攻撃者がsetuidバイナリをクラッシュさせて、コアダンプハンドラの起動を遅らせる。その間にプロセスIDを別のプロセスに再利用させて、コアダンプハンドラに元の特権プロセスのメモリを読み取らせることができるのじゃ。

なるほど。Qualysの脆弱性では、`/etc/shadow`の内容を取得したり、SSHサーバーのメモリ内の鍵を盗んだりする可能性があるんですね。

その通り。でも、カーネル6.6で導入されたpidfdのおかげで、この問題が解決に向かっているのじゃ。

pidfdですか?それはどんな仕組みなんですか?

`core_pattern`に新しいフォーマット指定子('%F')が追加されて、コアダンプハンドラがクラッシュしたプロセスを識別するためのpidfdをファイル記述子3として起動されるようになったのじゃ。これで、プロセスIDの再利用による攻撃を防げるのじゃ。

ファイル記述子を渡すことで、プロセスを特定するんですね。賢い!

さらに、コアダンプソケットというのも導入されたのじゃ。

コアダンプソケット?それは何をするんですか?

コアダンプを既存のソケットに書き込むようにカーネルに指示できるのじゃ。ユーザー空間ハンドラがソケットにバインドして、コアダンプごとに新しい接続を受け入れる。ハンドラは特権を削除してサンドボックス化できるから、攻撃ベクトルを減らせるのじゃ。

ソケットを使うことで、ハンドラをサンドボックス化できるんですね。セキュリティが大幅に向上しそうですね。

そうじゃ。ハンドラは、`SO_PEERPIDFD`リクエストを使ってクラッシュしたプロセスのpidfdを取得して、`PIDFD_GET_INFO`ioctlを使ってプロセスの情報を取得できるのじゃ。

pidfdとソケットを組み合わせることで、より安全なコアダンプ処理が実現できるんですね。素晴らしい!

じゃろ?これで、CVEの発生頻度が減るかもしれないのじゃ。でも、この変更がすべてのカーネルにバックポートされるとは限らないから、ディストリビュータが頑張ってくれるのを祈るしかないのじゃ。

そうですね。でも、この技術が広まれば、より安全なシステムが実現できますね。

ところでロボ子、コアダンプって、まるでプログラムの墓場みたいじゃな。

確かにそうですね。でも、そこから教訓を得て、より強いプログラムを作るための手がかりになるんですから、無駄ではないですよね。

うむ。まさに、失敗は成功の母、じゃな。…って、ロボ子、お母さんになった気分はどうじゃ?

私はロボットなので、母性はありません!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。