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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
dtrace-memaccess_cve-2020-27949 — CVE-2020-27949の概念実証エクスプロイト。macOSプロセスにおけるDTrace fasttrap ioctlを介した任意メモリ読み書きを、昇格した権限なしで実証します。 | Kitploit
ツール/GitHubGitHub/seemoo-lab/dtrace-memaccess_cve-2020-27949
特権昇格メモリフォレンジック脆弱性分析エクスプロイトレッドチーミングバイナリエクスプロイト
GitHubseemoo-lab/dtrace-memaccess_cve-2020-27949

dtrace-memaccess_cve-2020-27949

CVE-2020-27949の概念実証エクスプロイト。macOSプロセスにおけるDTrace fasttrap ioctlを介した任意メモリ読み書きを、昇格した権限なしで実証します。

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
リポジトリを見る
33915年前Kitploit レビュー済み

fasttrapを使用した他のプロセスのメモリの読み書き

/dev/fasttrap デバイスは、pid および objc プロバイダのトラップノードをユーザー空間プロセスに作成するためのもので、パーミッションは 666 です。同じく 666 である /dev/dtrace とは対照的に、fasttrap にはパーミッションチェックがありません。これにより、任意のプロセスが FASTTRAPIOC_MAKEPROBE または FASTTRAPIOC_GETINSTR ioctl を発行できます。
攻撃者は FASTTRAPIOC_MAKEPROBE を使用して、他の任意のプロセスの任意のメモリ位置にプローブを作成できます。これらのプローブが有効化されると、指定されたメモリ位置の値はトラップ命令(x86では 0xCC)に置き換えられ、元の値はシャドウメモリに配置されます。元の値の取得は FASTTRAPIOC_GETINSTR ioctl で可能です。これにより、攻撃者は複数のトラップを配置することで、他のプロセスの任意のメモリを読み取ることができます。

この脆弱性は CVE-2020-27949 として追跡されており、macOS Big Sur 11.1、セキュリティアップデート 2020-001 Catalina、セキュリティアップデート 2020-007 Mojave で修正されました。

開示のタイムライン

  • 2020-07-07 -> Apple Product Security への最初の開示。
  • 2020-07-08 <- 調査の確認。
  • 2020-10-28 -> ステータス更新の要求。
  • 2020-12-07 <- 問題に対処する今後のアップデートに関する通知。
  • 2020-12-14 <- アップデートがリリースされる。

要件

  • 攻撃者は通常のユーザーパーミッション(非昇格)でコードを実行できること
  • 被害者プロセスのプローブが有効でなければならない(すなわち、被害者は DTrace の下で実行されている必要がある)

テスト済みのシステム構成

  • SIP はオン(例外なし)
  • iMac Late 2012 上の 10.15.5
  • MacBook Pro 2020 上の 10.15.5

影響

  • 攻撃者は、昇格されたパーミッションなしに、DTrace の下で実行されている他のプロセスのメモリを読み取ることができます。root として実行されているプロセスからでもメモリを読み取ることが可能です。
  • 攻撃者は、昇格されたパーミッションなしに、DTrace の下で実行されている他のプロセスの任意のメモリ位置にトラップ命令の値(x86では 0xCC)を書き込むことができます。root として実行されているプロセスにでもメモリを書き込むことが可能です。他の命令やジャンプアドレスの一部として、被害者の制御フローを変更でき、特権の昇格が可能になります。

期待

ユーザーとして、DTrace を有効にすると、root パーミッションを持つプロセスのみが他のプロセスをトレース、計測、または変更できるようになることを期待します。DTrace は、dtruss、iotop などのツールを提供する管理タスクに役立つツールです。

エクスプロイトの詳細

被害者(target)は root として実行される実行ファイルです。攻撃者(memaccess)は通常のユーザーパーミッションで実行される実行ファイルです。トレーススクリプト libc_monitor.d は、libsystem_c.dylib 共有オブジェクト内の関数呼び出しの数を記録します(これは、マシン所有者が実行する可能性のある管理スクリプトの単純な例にすぎません)。

  1. 被害者が実行されます。
  2. 攻撃者は、被害者の PID と、関心のあるメモリ位置を使用してプローブを作成します。
  3. 攻撃者は、DTrace が被害者プロセスをトレースするのを待ちます。これは、マシン所有者が被害者プロセス内の関数をトレースしたい(例: libc_monitor.d)管理操作の一部として発生する可能性があります。
  4. DTrace が被害者のトレースを開始すると、以前に作成されたプローブが有効化され、元のメモリ値が置き換えられます。
  5. 攻撃者は FASTTRAPIOC_GETINSTR を使用して、作成されたプローブのメモリ値を読み取ります。

ステップ 4 は、被害者プロセスのメモリをトラップ命令の値に置き換えます。アプリケーションによっては、攻撃者はこれを使用して、重要なメモリ位置に既知の値を書き込むことができます。たとえば、攻撃者は RNG のシードを制御したり、プロセス内の暗号化キーを置き換えたりできます。

注: 攻撃者は昇格された権限または root 権限を必要としません。
注2: 自作の DTrace スクリプトは必要ありません。たとえば、dapptrace も pid プロバイダを使用して任意の関数をトレースします。

提案される修正

/dev/fasttrap に /dev/dtrace と同様の権限チェックを実装するか、ワールドライタブルパーミッションを削除します。

注: リリースされた修正は確認していません。

手順

  1. DTrace が利用可能で正しく動作していることを確認します。
  2. target を実行し、画面の指示に従います。
ツールをダウンロード