hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md

14 KiB
Raw Blame History

macOS SIP

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

基本情報

System Integrity Protection (SIP) は、macOSのセキュリティ技術であり、特定のシステムディレクトリを未承認のアクセスから保護します。これには、ルートユーザーでもこれらのディレクトリへの変更、ファイルの作成、変更、削除が含まれます。SIPが保護する主なディレクトリは次のとおりです

  • /System
  • /bin
  • /sbin
  • /usr

これらのディレクトリおよびサブディレクトリの保護ルールは、/System/Library/Sandbox/rootless.conf ファイルで指定されています。このファイルでは、アスタリスク(*で始まるパスは、SIPの制限の例外を表します。

たとえば、次の設定:

/usr
* /usr/libexec/cups
* /usr/local
* /usr/share/man

次のように示されています。/usr ディレクトリは一般的にSIPによって保護されています。ただし、3つのサブディレクトリ/usr/libexec/cups/usr/local、および/usr/share/man)では変更が許可されており、先頭にアスタリスク(*)が付いてリストされています。

ディレクトリやファイルがSIPによって保護されているかどうかを確認するには、ls -lOd コマンドを使用して restricted または sunlnk フラグの存在をチェックできます。例えば:

ls -lOd /usr/libexec/cups
drwxr-xr-x  11 root  wheel  sunlnk 352 May 13 00:29 /usr/libexec/cups

この場合、sunlnk フラグは、/usr/libexec/cups ディレクトリ自体は削除できないことを示していますが、その中のファイルは作成、変更、削除が可能です。

一方、

ls -lOd /usr/libexec
drwxr-xr-x  338 root  wheel  restricted 10816 May 13 00:29 /usr/libexec

ここでは、restricted フラグは /usr/libexec ディレクトリがSIPによって保護されていることを示しています。SIPで保護されたディレクトリでは、ファイルの作成、変更、削除ができません。

SIPの状態

次のコマンドを使用して、システムでSIPが有効かどうかを確認できます。

csrutil status

SIPを無効にする必要がある場合は、コンピュータをリカバリーモードで再起動する必要があります起動時にCommand+Rを押します。その後、次のコマンドを実行してください

csrutil disable

SIPを有効にしたままデバッグ保護を削除したい場合は、次の手順で行うことができます。

csrutil enable --without debug

その他の制限

SIPは他にもいくつかの制限を課しています。たとえば、署名されていないカーネル拡張kextsの読み込みを禁止し、macOSシステムプロセスのデバッグを防止します。また、dtraceのようなツールがシステムプロセスを検査するのを妨げます。

SIPの回避方法

価格

攻撃者がSIPを回避することに成功した場合、以下のことが得られます

  • すべてのユーザーのメール、メッセージ、Safariの履歴などを読むことができる
  • ウェブカメラ、マイクなどの許可を付与することができるSIPで保護されたTCCデータベースに直接書き込むことにより
  • 永続性SIPで保護された場所にマルウェアを保存し、誰も削除することができなくなります。また、MRTを改ざんすることもできます。
  • カーネル拡張の簡単な読み込み(これには他の厳格な保護策もあります)。

インストーラーパッケージ

Appleの証明書で署名されたインストーラーパッケージは、SIPの保護を回避することができます。これは、標準の開発者によって署名されたパッケージでも、SIPで保護されたディレクトリを変更しようとする場合にはブロックされます。

存在しないSIPファイル

潜在的な抜け穴の1つは、rootless.confに指定されたファイルが現在存在しない場合、作成することができるというものです。マルウェアはこれを利用してシステム上で永続性を確立することができます。たとえば、悪意のあるプログラムがrootless.confにリストされているが存在しない場合、/System/Library/LaunchDaemonsに.plistファイルを作成することができます。

com.apple.rootless.install.heritable

{% hint style="danger" %} 権限 com.apple.rootless.install.heritable はSIPを回避することができます {% endhint %}

このブログポストの研究者たちは、macOSのシステム整合性保護SIPメカニズムである「Shrootless」という脆弱性を発見しました。この脆弱性は、**system_installdデーモンに関連しており、com.apple.rootless.install.heritableという権限を持っています。この権限により、system_installd**の子プロセスはSIPのファイルシステム制限を回避することができます。

**system_installd**デーモンは、Appleによって署名されたパッケージをインストールします。

研究者たちは、Appleによって署名されたパッケージ.pkgファイルのインストール中に、パッケージに含まれるpost-installスクリプトが**system_installdによって実行されることを発見しました。これらのスクリプトはデフォルトのシェルであるzshによって実行され、非対話モードでも/etc/zshenvファイルからコマンドが自動的に実行されます。この動作は攻撃者によって悪用される可能性があります。悪意のある/etc/zshenvファイルを作成し、system_installdzshを呼び出すのを待つ**ことで、デバイス上で任意の操作を実行することができます。

さらに、/etc/zshenvはSIPの回避だけでなく、一般的な攻撃手法としても使用できます。各ユーザープロファイルには~/.zshenvファイルがあり、これは/etc/zshenvと同じように動作しますが、ルート権限は必要ありません。このファイルは、zshが起動するたびにトリガーされる永続性のメカニズムとして、または特権の昇格のメカニズムとして使用することができます。管理者ユーザーがsudo -sまたはsudo <command>を使用してルートに昇格する場合、~/.zshenvファイルがトリガーされ、実質的にルートに昇格します。

CVE-2022-22583では、同じ**system_installdプロセスが悪用される可能性があることが発見されました。なぜなら、post-installスクリプトが/tmp内のSIPで保護されたランダムに名前が付けられたフォルダに配置されていたからです。ただし、/tmp自体はSIPで保護されていないため、仮想イメージをマウントすることが可能であり、その後、インストーラーpost-installスクリプトをそこに配置し、仮想イメージをアンマウントし、すべてのフォルダを再作成し、ペイロードを実行するためのpost-installationスクリプト**を追加することができました。

com.apple.rootless.install

{% hint style="danger" %} 権限 com.apple.rootless.install はSIPを回避することができます {% endhint %}

CVE-2022-26712では、システムのXPCサービスである/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpcには、**com.apple.rootless.install**という権限があり、プロセスにSIPの制限を回避する権限を与えます。また、セキュリティチェックなしでファイルを移動するためのメソッドを公開しています。

シールドされたシステムスナップショット

シールドされたシステムスナップショットは、Appleが**macOS Big SurmacOS 11**で導入した機能であり、**システム整合性保護SIP**メカニズムの一部として、追加のセキュリティとシステムの安定性を提供するためのものです。これらは、システムボリュームの読み取り専用バージョンです。

以下に詳細を示します:

  1. 不変のシステムシールドされたシステムスナップショットにより、macOSシステムボリュームは「不変」となり、変更することができなくなります。これにより、セキュリティやシステムの安定性に影響を及ぼす可能性のある、不 | | スナップショット: FAA23E0C-791C-43FF-B0E7-0E1C0810AC61 | | スナップショットディスク: disk3s1s1 | | スナップショットマウントポイント: / | | スナップショットシールド: はい [...]
    +-> ボリューム disk3s5 281959B7-07A1-4940-BDDF-6419360F3327
    APFSボリュームディスク役割: disk3s5データ
    名前: Macintosh HD - Data大文字と小文字を区別しない
    FileVault: はい(ロック解除済み)

前の出力では、ユーザーがアクセス可能な場所/System/Volumes/Dataの下にマウントされていることがわかります。

さらに、macOSシステムボリュームのスナップショット/にマウントされており、シールドOSによって暗号的に署名されているされています。したがって、SIPがバイパスされて変更された場合、OSは起動しなくなります

また、シールドが有効であることを確認するには、次のコマンドを実行します:

csrutil authenticated-root status
Authenticated Root status: enabled

さらに、スナップショットディスクは読み取り専用としてマウントされます。

mount
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥