macOS SIP

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

基本情報

システム整合性保護 (SIP) は、macOSにおいて、最も特権のあるユーザーでさえも重要なシステムフォルダーに対して不正な変更を行うことを防ぐために設計されたメカニズムです。この機能は、保護された領域内のファイルを追加、変更、または削除する行動を制限することによって、システムの整合性を維持する上で重要な役割を果たします。SIPによって保護されている主なフォルダーは以下の通りです:

  • /System

  • /bin

  • /sbin

  • /usr

SIPの動作を規定するルールは、/System/Library/Sandbox/rootless.conf にある設定ファイルで定義されています。このファイル内では、アスタリスク(*)で始まるパスは、厳格なSIP制限の例外として示されています。

以下の例を考えてみてください:

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

このスニペットは、SIPが一般的に**/usr**ディレクトリを保護している一方で、特定のサブディレクトリ(/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 によって保護されたディレクトリでは、ファイルを作成、変更、または削除することはできません。

さらに、ファイルが com.apple.rootless 拡張 属性 を含む場合、そのファイルも SIP によって保護されます

SIP は他のルートアクションも制限します 例えば:

  • 信頼できないカーネル拡張の読み込み

  • Apple 署名プロセスのタスクポートの取得

  • NVRAM 変数の変更

  • カーネルデバッグの許可

オプションはビットフラグとして nvram 変数に保持されます(Intel では csr-active-config、ARM ではブートされたデバイステーブルから lp-sip0 が読み取られます)。フラグは csr.sh の XNU ソースコード内で見つけることができます:

SIP ステータス

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

csrutil status

SIPを無効にする必要がある場合は、リカバリーモードでコンピュータを再起動する必要があります(起動中にCommand+Rを押します)。次に、以下のコマンドを実行します:

csrutil disable

SIPを有効のままにしてデバッグ保護を削除したい場合は、次のコマンドを使用できます:

csrutil enable --without debug

Other Restrictions

  • 署名されていないカーネル拡張の読み込みを禁止 (kexts) し、検証された拡張のみがシステムカーネルと相互作用することを保証します。

  • macOSシステムプロセスのデバッグを防止し、コアシステムコンポーネントを不正アクセスや変更から保護します。

  • dtraceのようなツールを抑制し、システムの動作の完全性をさらに保護します。

このトークでSIP情報についてもっと学ぶ.

SIP Bypasses

SIPをバイパスすることで攻撃者は:

  • ユーザーデータにアクセス: すべてのユーザーアカウントからメール、メッセージ、Safariの履歴などの機密ユーザーデータを読み取ることができます。

  • TCCバイパス: TCC (Transparency, Consent, and Control) データベースを直接操作し、ウェブカメラ、マイク、その他のリソースへの不正アクセスを許可します。

  • 持続性を確立: SIP保護された場所にマルウェアを配置し、ルート権限による削除に対して抵抗力を持たせます。これには、マルウェア除去ツール (MRT) を改ざんする可能性も含まれます。

  • カーネル拡張を読み込む: 追加の保護があるにもかかわらず、SIPをバイパスすることで署名されていないカーネル拡張の読み込みが簡素化されます。

Installer Packages

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

Inexistent SIP file

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

com.apple.rootless.install.heritable

権限 com.apple.rootless.install.heritable はSIPをバイパスすることを許可します

システムがそのコード署名を検証した後にインストーラーパッケージを入れ替えることが可能であることが発見されました。その後、システムは元のパッケージの代わりに悪意のあるパッケージをインストールします。これらのアクションは**system_installd**によって実行されるため、SIPをバイパスすることができます。

マウントされたイメージまたは外部ドライブからパッケージがインストールされた場合、インストーラーそのファイルシステムからバイナリを実行します(SIP保護された場所からではなく)、これにより**system_installd**が任意のバイナリを実行します。

CVE-2021-30892 - Shrootless

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

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

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

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

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

**fsck_csが重要なファイルを破損させるように誤導される脆弱性が特定されました。これは、シンボリックリンクをたどる能力によるものでした。具体的には、攻撃者は/dev/diskXから/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plistへのリンクを作成しました。fsck_cs**を/dev/diskXで実行すると、Info.plistが破損しました。このファイルの整合性は、カーネル拡張の読み込みを制御するオペレーティングシステムのSIP(システム整合性保護)にとって重要です。一度破損すると、SIPのカーネル除外を管理する能力が損なわれます。

この脆弱性を悪用するためのコマンドは:

ln -s /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist /dev/diskX
fsck_cs /dev/diskX 1>&-
touch /Library/Extensions/
reboot

この脆弱性の悪用は深刻な影響を及ぼします。通常、カーネル拡張の権限を管理する役割を持つ Info.plist ファイルは無効になります。これには、AppleHWAccess.kext のような特定の拡張をブラックリストに登録できないことが含まれます。その結果、SIPの制御メカニズムが機能しなくなると、この拡張が読み込み可能になり、システムのRAMへの不正な読み書きアクセスが許可されます。

保護を回避するためにSIP保護フォルダ上に新しいファイルシステムをマウントすることが可能でした。

mkdir evil
# Add contento to the folder
hdiutil create -srcfolder evil evil.dmg
hdiutil attach -mountpoint /System/Library/Snadbox/ evil.dmg

システムは、OSをアップグレードするためにInstall macOS Sierra.app内の埋め込みインストーラーディスクイメージからブートするように設定されており、blessユーティリティを利用しています。使用されるコマンドは次のとおりです:

/usr/sbin/bless -setBoot -folder /Volumes/Macintosh HD/macOS Install Data -bootefi /Volumes/Macintosh HD/macOS Install Data/boot.efi -options config="\macOS Install Data\com.apple.Boot" -label macOS Installer

このプロセスのセキュリティは、攻撃者がブート前にアップグレードイメージ(InstallESD.dmg)を変更すると危険にさらされる可能性があります。この戦略は、動的ローダー(dyld)を悪意のあるバージョン(libBaseIA.dylib)に置き換えることを含みます。この置き換えにより、インストーラーが開始されると攻撃者のコードが実行されます。

攻撃者のコードはアップグレードプロセス中に制御を取得し、インストーラーに対するシステムの信頼を利用します。攻撃は、InstallESD.dmgイメージをメソッドスウィズリングを通じて変更することによって進行し、特にextractBootBitsメソッドをターゲットにします。これにより、ディスクイメージが使用される前に悪意のあるコードを注入することが可能になります。

さらに、InstallESD.dmg内には、アップグレードコードのルートファイルシステムとして機能するBaseSystem.dmgがあります。ここに動的ライブラリを注入することで、悪意のあるコードはOSレベルのファイルを変更できるプロセス内で動作することができ、システムの危険性が大幅に増加します。

このDEF CON 31の講演では、systemmigrationd(SIPをバイパスできる)がbashperlスクリプトを実行する方法が示されており、これらは環境変数**BASH_ENVPERL5OPT**を介して悪用される可能性があります。

CVE-2023-42860

このブログ記事で詳述されているようにInstallAssistant.pkgパッケージのpostinstallスクリプトが実行されていました:

/usr/bin/chflags -h norestricted "${SHARED_SUPPORT_PATH}/SharedSupport.dmg"

and it was possible to crate a symlink in ${SHARED_SUPPORT_PATH}/SharedSupport.dmg that would allow a user to unrestrict any file, bypassing SIP protection.

com.apple.rootless.install

権限 com.apple.rootless.install は SIP をバイパスすることを許可します

権限 com.apple.rootless.install は、macOS のシステム整合性保護 (SIP) をバイパスすることが知られています。これは特に CVE-2022-26712 に関連して言及されました。

この特定のケースでは、/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc にあるシステム XPC サービスがこの権限を持っています。これにより、関連するプロセスは SIP 制約を回避できます。さらに、このサービスは、セキュリティ対策を強制せずにファイルを移動することを許可する方法を提供します。

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

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

以下は詳細です:

  1. 不変のシステム: シールドされたシステムスナップショットは、macOS システムボリュームを「不変」にし、変更できないようにします。これにより、セキュリティやシステムの安定性を損なう可能性のある不正または偶発的な変更を防ぎます。

  2. システムソフトウェアの更新: macOS の更新やアップグレードをインストールすると、macOS は新しいシステムスナップショットを作成します。macOS の起動ボリュームは、その後 APFS (Apple File System) を使用してこの新しいスナップショットに切り替えます。更新を適用するプロセス全体が安全で信頼性が高くなり、更新中に何か問題が発生した場合でも、システムは常に前のスナップショットに戻ることができます。

  3. データの分離: macOS Catalina で導入されたデータとシステムボリュームの分離の概念と組み合わせて、シールドされたシステムスナップショット機能は、すべてのデータと設定が別の「データ」ボリュームに保存されることを保証します。この分離により、データはシステムから独立し、システムの更新プロセスが簡素化され、システムのセキュリティが向上します。

これらのスナップショットは macOS によって自動的に管理され、APFS のスペース共有機能のおかげでディスク上に追加のスペースを占有しません。また、これらのスナップショットは、システム全体のユーザーアクセス可能なバックアップである Time Machine スナップショット とは異なることに注意することが重要です。

スナップショットの確認

コマンド diskutil apfs listAPFS ボリュームの詳細 とそのレイアウトをリストします:

+-- Container disk3 966B902E-EDBA-4775-B743-CF97A0556A13
|   ====================================================
|   APFS Container Reference:     disk3
|   Size (Capacity Ceiling):      494384795648 B (494.4 GB)
|   Capacity In Use By Volumes:   219214536704 B (219.2 GB) (44.3% used)
|   Capacity Not Allocated:       275170258944 B (275.2 GB) (55.7% free)
|   |
|   +-< Physical Store disk0s2 86D4B7EC-6FA5-4042-93A7-D3766A222EBE
|   |   -----------------------------------------------------------
|   |   APFS Physical Store Disk:   disk0s2
|   |   Size:                       494384795648 B (494.4 GB)
|   |
|   +-> Volume disk3s1 7A27E734-880F-4D91-A703-FB55861D49B7
|   |   ---------------------------------------------------
|   |   APFS Volume Disk (Role):   disk3s1 (System)
|   |   Name:                      Macintosh HD (Case-insensitive)
|   |   Mount Point:               /System/Volumes/Update/mnt1
|   |   Capacity Consumed:         12819210240 B (12.8 GB)
|   |   Sealed:                    Broken
|   |   FileVault:                 Yes (Unlocked)
|   |   Encrypted:                 No
|   |   |
|   |   Snapshot:                  FAA23E0C-791C-43FF-B0E7-0E1C0810AC61
|   |   Snapshot Disk:             disk3s1s1
|   |   Snapshot Mount Point:      /
|   |   Snapshot Sealed:           Yes
[...]
+-> Volume disk3s5 281959B7-07A1-4940-BDDF-6419360F3327
|   ---------------------------------------------------
|   APFS Volume Disk (Role):   disk3s5 (Data)
|   Name:                      Macintosh HD - Data (Case-insensitive)
    |   Mount Point:               /System/Volumes/Data
    |   Capacity Consumed:         412071784448 B (412.1 GB)
    |   Sealed:                    No
|   FileVault:                 Yes (Unlocked)

前の出力では、ユーザーアクセス可能な場所/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)

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポートする

Last updated