1 ポイント 投稿者 GN⁺ 2024-03-27 | 1件のコメント | WhatsAppで共有

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件のコメント

 
GN⁺ 2024-03-27
Hacker Newsのコメント
  • CVE-2024-1086の概念実証エクスプロイトが公開された。Linuxカーネル v5.14 から v6.6 までのバージョンが影響を受け、v6.4 から v6.6 までは CONFIG_INIT_ON_ALLOC_DEFAULT_ON カーネル設定変数によって異なる。詳細は README.md を参照のこと。このバグは 2024年2月にパッチが適用されており、Linuxデバイスの更新が推奨される。
  • パッチ内容には以前のコミットを巻き戻す部分があり、そのコミットがなぜ行われたのか明確ではない。これについて経緯を掘り下げた人がいるのか気になる。
  • このエクスプロイトは非特権ユーザー名前空間へのアクセスを前提としている: sysctl kernel.unprivileged_userns_clone = 1。この設定は Debian/Ubuntu および Arch Linux カーネルのデフォルト値である。必要がなければ無効化したほうがよい。
  • セキュリティブログを書く際、読者の前提知識をどこまで想定するかは常に悩ましい。対象読者を定め、十分な背景情報を提供するのは簡単ではない。この記事は研究を始める人にとって有用な指針になるだろう。
  • そもそも非特権ユーザー名前空間がデフォルトで有効になっている理由や、ユーザーに iptables などを実行する権限を標準で与える理由への疑問。
  • ASLR などの現代的な防御策があるにもかかわらず、こうしたエクスプロイトがどうして可能なのかという疑問。大学の授業でさまざまなバグを含むバイナリを使った演習を通じ、実環境でのエクスプロイト開発がどれほど難しいかを経験した。
  • 脆弱な Debian システムでエクスプロイトを実行してみたが、権限昇格は起きず、2回目の実行でシステムが完全に停止した。パッチ適用の重要性がわかる。
  • 現在のカーネル設定は /boot/config または /proc/config.gz ファイルで確認できる。
  • Ubuntu によれば、すべての LTS リリースが影響を受けるが、パッチ済みの最新カーネルでは修正されている。Xenial と Bionic は拡張サポートを受ける利用者向けの情報である。
  • CONFIG_INIT_ON_FREE_DEFAULT_ON はエクスプロイトを防ぐが、ディストリビューションではデフォルトでビルドされていない。カーネルのハードニングがいかに重要かを示す好例である。