0. 読む前に
- このブログ記事は、Linuxカーネルの脆弱性研究に取り組みたい未来のタイムトラベラーたちのためのもので、初心者が研究ワークフローを学び、経験豊富な研究者が新しい技術を学べるように書かれている。
- ブログ記事は研究論文の形式をとっており、分量が多いにもかかわらず、簡単にスキャンして知識を抽出できるように構成されている。
- ブログ記事を効率的に読む方法として、概要セクションを読み、画面を分割して読みながら検索し、バグのセクションに飛んでバグの動作を理解し、概念実証セクションを経てエクスプロイトを見ることが提案されている。
1. 概要
- このブログ記事では、nf_tablesで見つかった0-dayのdouble-freeバグを利用して、強化されたLinuxカーネル(例: KernelCTFの緩和インスタンス)を成功率93%〜99%でエクスプロイトする新しい手法を紹介している。
- このエクスプロイトは、nf_tablesが有効であり、かつ非特権ユーザー名前空間が有効な場合にのみ動作し、ユーザー空間からカーネル空間を鏡のように反映するKSMA(カーネル空間ミラーリング攻撃)を実行する。
- Dirty Pagedirectory手法を用いることで、物理アドレスに対する無制限の読み書き権限を取得でき、これはページテーブルの混乱を通じて実現される。
2. 背景情報
nf_tablesはLinuxカーネルのインツリー・モジュールの1つで、最近のバージョンのiptablesのバックエンドとして使われている。
iptablesはファイアウォールツールであり、パケットがファイアウォールを通過するかどうかを判断するために状態マシンとユーザー指定のルールを使用する。
- Netfilter verdictは、特定のパケットがファイアウォールを通過するかどうかについてのNetfilterルールセットの判断であり、パケットをドロップするか受け入れるかなどの決定を行う。
sk_buff構造体はネットワークデータ(例: IPパケット、イーサネットフレームなど)を記述するために使用され、sk_buff->headオブジェクトは実際のパケット内容を含む。
- IPv4のパケット断片化機能により、パケットを複数のIPフラグメントとして送信でき、Linuxカーネルはすべてのフラグメントを同じレッドブラックツリーに格納する。
GN⁺のコメント
- このブログ記事は、Linuxカーネルの脆弱性を研究したい人々にとって非常に有用な情報を提供している。特に、nf_tablesに関連する脆弱性を理解し、それをエクスプロイトする方法を学べる。
- 提示されたエクスプロイト手法は、実環境におけるセキュリティ研究に重要な貢献をもたらす可能性があり、これらの技術を通じてセキュリティ専門家はシステムの脆弱性をよりよく理解し、防御できるようになる。
- しかし、このようなエクスプロイト手法が悪意ある目的で使用される可能性もあるため、これを共有することで生じうる倫理的問題について考慮する必要がある。
- Linuxカーネルのセキュリティを強化するために、コミュニティは継続的に脆弱性を発見し、パッチを適用する作業を進める必要があり、このブログ記事はそのような取り組みの一環と見ることができる。
- この技術や類似の技術を使ってセキュリティ研究を行う場合、研究者は責任ある公開ポリシーに従い、脆弱性が広く悪用される前にパッチが配布されるよう協力すべきである。
1件のコメント
Hacker Newsのコメント
CONFIG_INIT_ON_ALLOC_DEFAULT_ONカーネル設定変数によって異なる。詳細は README.md を参照のこと。このバグは 2024年2月にパッチが適用されており、Linuxデバイスの更新が推奨される。sysctl kernel.unprivileged_userns_clone = 1。この設定は Debian/Ubuntu および Arch Linux カーネルのデフォルト値である。必要がなければ無効化したほうがよい。/boot/configまたは/proc/config.gzファイルで確認できる。CONFIG_INIT_ON_FREE_DEFAULT_ONはエクスプロイトを防ぐが、ディストリビューションではデフォルトでビルドされていない。カーネルのハードニングがいかに重要かを示す好例である。