Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
kfd — kfd, short for kernel file descriptor, is a project to read and write kernel memory on Apple devices. | Kitploit
ツール/GitHubGitHub/felix-pb/kfd
iOS SecurityExploitationMobile SecurityBinary Exploitation
GitHubfelix-pb/kfd

kfd

kfd, short for kernel file descriptor, is a project to read and write kernel memory on Apple devices.

リポジトリを見る
1k1842年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

簡単な免責事項:他のデバイスやiOSバージョン向けのオフセットを追加するつもりはありません。

kfd

「kfd」は、kernel file descriptor(カーネルファイルディスクリプタ)の略で、Appleデバイスのカーネルメモリを読み書きするためのプロジェクトです。このプロジェクトは、ダングリングPTEを取得するために悪用可能なさまざまな脆弱性を活用します。このダングリングPTEは、以降「PUAFプリミティブ」(physical use-after-free の略)と呼びます。次に、それらの物理ページ内に特定のカーネルオブジェクトを再割り当てし、ダングリングPTEを通じてユーザースペースから直接操作することで、「KRKWプリミティブ」(kernel read/write の略)を達成します。エクスプロイトコードはライブラリ libkfd に完全に含まれていますが、このプロジェクトには iOS および macOS 用のシンプルな実行可能ラッパーも含まれています。libkfdの公開APIは非常に小さく、直感的です:

root@kitploit:~
enum puaf_method {
    puaf_physpuppet,
    puaf_smith,
    puaf_landa,
};

enum kread_method {
    kread_kqueue_workloop_ctl,
    kread_sem_open,
};

enum kwrite_method {
    kwrite_dup,
    kwrite_sem_open,
};

u64 kopen(u64 puaf_pages, u64 puaf_method, u64 kread_method, u64 kwrite_method);
void kread(u64 kfd, u64 kaddr, void* uaddr, u64 size);
void kwrite(u64 kfd, void* uaddr, u64 kaddr, u64 size);
void kclose(u64 kfd);

kopen() は、概念的には「kernel file descriptor(カーネルファイルディスクリプタ)」を開きます。以下の4つの引数を取ります:

  • puaf_pages: ダングリングPTEを持つ物理ページの目標数。
  • puaf_method: PUAFプリミティブを取得するために使用する方法。以下のオプションがあります:
    • puaf_physpuppet:
      • この方法は CVE-2023-23536 を悪用します。
      • iOS 16.4 および macOS 13.3 で修正されました。
      • App Sandbox からは到達可能ですが、WebContent sandbox からは到達できません。
      • Apple Security Bounty の報奨金 52,500 ドル。
    • puaf_smith:
      • この方法は CVE-2023-32434 を悪用します。
      • iOS 16.5.1 および macOS 13.4.1 で修正されました。
      • WebContent sandbox から到達可能であり、活発に悪用されていた可能性があります。
    • puaf_landa:
      • この方法は CVE-2023-41974 を悪用します。
      • iOS 17.0 および macOS 14.0 で修正されました。
      • App Sandbox からは到達可能ですが、WebContent sandbox からは到達できません。
      • Apple Security Bounty の報奨金 70,000 ドル。
  • kread_method: 初期の kread() プリミティブを取得するために使用する方法。
  • kwrite_method: 初期の kwrite() プリミティブを取得するために使用する方法。

エクスプロイトが成功すると、kopen() は64ビットの不透明なファイルディスクリプタを返します。実際には、これはlibkfdが必要とする構造体へのユーザースペースポインタにすぎません。ただし、その構造体はライブラリの外部からアクセスすべきではないため、不透明な整数として返されます。エクスプロイトが失敗した場合、ライブラリはエラーメッセージを表示し、30秒間スリープしてから、ステータスコード1で終了します。KRKW後にクリーンアップを必要とする一部のPUAFメソッド(例:puaf_smith)では、終了時にカーネルがパニックを起こす可能性があるため、30秒間スリープします。

kread() と kwrite() は、それぞれ copyout() と copyin() のユーザースペース版です。kread_method と kwrite_method のオプションについては、別の 解説記事 で説明されていることに注意してください。さらに、これらのメソッドによって付与される初期プリミティブを使用して、より優れたKRKWプリミティブをブートストラップできます。最後に、kclose() はカーネルファイルディスクリプタを単に閉じます。これらはすべて、最初の引数として kopen() が返す不透明な整数を受け取ります。


iPhoneでkfdをビルドして実行するには?

Xcodeで、プロジェクトのルートフォルダを開き、iOSデバイスを接続します。

  • プロジェクトをビルドするには、Product > Build (⌘B) を選択します。
  • プロジェクトを実行するには、Product > Run (⌘R) を選択し、アプリ内の「kopen」ボタンをクリックします。

Macでkfdをビルドして実行するには?

ターミナルで、プロジェクトのルートフォルダに移動します。

必要に応じて、グローバルおよびプロセスごとのファイルディスクリプタ制限を増やすと、特に複数回連続して実行する場合の成功率が向上します。その場合は、コマンド make s を入力し、sudoパスワードを入力してください。

  • プロジェクトをビルドするには、コマンド make b を入力します。
  • プロジェクトを実行するには、コマンド make r を入力します。
  • プロジェクトを一度にビルドして実行するには、コマンド make br を入力します。

エクスプロイトの詳細な解説記事はどこにありますか?

このREADMEでは、kfdプロジェクトの概要を説明しました。PUAFプリミティブが達成されると、残りのエクスプロイトは汎用的になります。そこで、エクスプロイトの共通部分を専用の解説記事にまとめました:

  • PUAFの悪用

さらに、PUAFプリミティブを達成するために使用される脆弱性固有の部分を、発見時系列順に以下のとおり個別の解説記事に分けました:

  • PhysPuppet
  • Smith
  • Landa

ただし、これらの解説記事は、XNU仮想メモリシステムにすでに精通している読者を対象に書かれていることに注意してください。

ツールをダウンロード