macOS SIP

Reading time: 12 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

Temel Bilgiler

Sistem Bütünlüğü Koruması (SIP), macOS'ta ana sistem klasörlerinde yetkisiz değişiklikler yapılmasını önlemek için tasarlanmış bir mekanizmadır. Bu özellik, korunan alanlarda dosya ekleme, değiştirme veya silme gibi eylemleri kısıtlayarak sistemin bütünlüğünü korumada önemli bir rol oynar. SIP tarafından korunan ana klasörler şunlardır:

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

SIP'nin davranışını yöneten kurallar, /System/Library/Sandbox/rootless.conf konumundaki yapılandırma dosyasında tanımlanmıştır. Bu dosyada, bir yıldız işareti (*) ile başlayan yollar, aksi takdirde katı olan SIP kısıtlamalarına istisna olarak belirtilmiştir.

Aşağıdaki örneği düşünün:

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

Bu kesit, SIP'nin genel olarak /usr dizinini güvence altına aldığını, ancak asterisk (*) ile belirtilen belirli alt dizinlerin (/usr/libexec/cups, /usr/local ve /usr/share/man) değişikliklere izin verdiğini ima etmektedir.

Bir dizinin veya dosyanın SIP tarafından korunup korunmadığını doğrulamak için, ls -lOd komutunu kullanarak restricted veya sunlnk bayrağının varlığını kontrol edebilirsiniz. Örneğin:

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

Bu durumda, sunlnk bayrağı, /usr/libexec/cups dizininin kendisinin silinemez olduğunu, ancak içindeki dosyaların oluşturulabileceğini, değiştirilebileceğini veya silinebileceğini belirtir.

Diğer taraftan:

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

Burada, restricted bayrağı, /usr/libexec dizininin SIP tarafından korunduğunu gösterir. SIP ile korunan bir dizinde, dosyalar oluşturulamaz, değiştirilemez veya silinemez.

Ayrıca, bir dosya com.apple.rootless genişletilmiş özelliğini içeriyorsa, o dosya da SIP tarafından korunacaktır.

tip

Sandbox kancası hook_vnode_check_setextattr, genişletilmiş özellik com.apple.rootless'ı değiştirme girişimlerini engeller.

SIP ayrıca diğer kök eylemlerini de sınırlar:

  • Güvensiz çekirdek uzantılarını yükleme
  • Apple imzalı süreçler için görev bağlantı noktalarını alma
  • NVRAM değişkenlerini değiştirme
  • Çekirdek hata ayıklamaya izin verme

Seçenekler, nvram değişkeninde bir bit bayrağı olarak saklanır (csr-active-config Intel'de ve lp-sip0 ARM için başlatılan Aygıt Ağacından okunur). Bayrakları csr.sh dosyasında XNU kaynak kodunda bulabilirsiniz:

SIP Durumu

SIP'in sisteminizde etkin olup olmadığını aşağıdaki komutla kontrol edebilirsiniz:

bash
csrutil status

Eğer SIP'i devre dışı bırakmanız gerekiyorsa, bilgisayarınızı kurtarma modunda yeniden başlatmalısınız (başlangıçta Command+R tuşlarına basarak), ardından aşağıdaki komutu çalıştırmalısınız:

bash
csrutil disable

SIP'yi etkin tutmak ancak hata ayıklama korumalarını kaldırmak istiyorsanız, bunu şu şekilde yapabilirsiniz:

bash
csrutil enable --without debug

Diğer Kısıtlamalar

  • İmzalanmamış çekirdek uzantılarının (kexts) yüklenmesini engeller, yalnızca doğrulanmış uzantıların sistem çekirdeği ile etkileşimde bulunmasını sağlar.
  • macOS sistem süreçlerinin hata ayıklanmasını engeller, temel sistem bileşenlerini yetkisiz erişim ve değişikliklerden korur.
  • dtrace gibi araçların sistem süreçlerini incelemesini engeller, sistemin işleyişinin bütünlüğünü daha da korur.

Bu konuşmada SIP bilgileri hakkında daha fazla bilgi edinin.

SIP ile İlgili Yetkiler

  • com.apple.rootless.xpc.bootstrap: launchd kontrolü
  • com.apple.rootless.install[.heritable]: Dosya sistemine erişim
  • com.apple.rootless.kext-management: kext_request
  • com.apple.rootless.datavault.controller: UF_DATAVAULT yönetimi
  • com.apple.rootless.xpc.bootstrap: XPC kurulum yetenekleri
  • com.apple.rootless.xpc.effective-root: launchd XPC üzerinden root
  • com.apple.rootless.restricted-block-devices: Ham blok cihazlarına erişim
  • com.apple.rootless.internal.installer-equivalent: Sınırsız dosya sistemi erişimi
  • com.apple.rootless.restricted-nvram-variables[.heritable]: NVRAM'a tam erişim
  • com.apple.rootless.storage.label: İlgili etiketle com.apple.rootless xattr tarafından kısıtlanan dosyaları değiştirme
  • com.apple.rootless.volume.VM.label: Hacimde VM takasını sürdürme

SIP Aşmaları

SIP'yi aşmak, bir saldırgana şunları sağlar:

  • Kullanıcı Verilerine Erişim: Tüm kullanıcı hesaplarından hassas kullanıcı verilerini, örneğin e-posta, mesajlar ve Safari geçmişini okuma.
  • TCC Aşma: TCC (Şeffaflık, Onay ve Kontrol) veritabanını doğrudan manipüle ederek, yetkisiz erişim sağlama webcam, mikrofon ve diğer kaynaklara.
  • Kalıcılık Sağlama: SIP ile korunan alanlara kötü amaçlı yazılım yerleştirme, bu da kaldırılmasına karşı dirençli hale getirir, hatta root ayrıcalıklarıyla bile. Bu, Kötü Amaçlı Yazılım Kaldırma Aracı (MRT) ile oynama potansiyelini de içerir.
  • Çekirdek Uzantılarını Yükleme: Ek korumalara rağmen, SIP'yi aşmak, imzalanmamış çekirdek uzantılarını yükleme sürecini basitleştirir.

Yükleyici Paketleri

Apple'ın sertifikasıyla imzalanmış yükleyici paketleri, korumalarını aşabilir. Bu, standart geliştiriciler tarafından imzalanmış paketlerin bile, SIP ile korunan dizinleri değiştirmeye çalıştıklarında engelleneceği anlamına gelir.

Mevcut Olmayan SIP Dosyası

Bir potansiyel açık, rootless.conf dosyasında belirtilen ancak şu anda mevcut olmayan bir dosyanın oluşturulabilmesidir. Kötü amaçlı yazılım, bu durumu kullanarak sistemde kalıcılık sağlama fırsatını değerlendirebilir. Örneğin, kötü niyetli bir program, rootless.conf dosyasında listelenmiş ancak mevcut olmayan bir .plist dosyasını /System/Library/LaunchDaemons dizininde oluşturabilir.

com.apple.rootless.install.heritable

di̇kkat

Yetki com.apple.rootless.install.heritable, SIP'yi aşmayı sağlar.

CVE-2019-8561

Sistem, kod imzasını doğruladıktan sonra yükleyici paketini değiştirme işleminin mümkün olduğu keşfedildi ve ardından sistem, orijinal yerine kötü amaçlı paketi yükleyecekti. Bu işlemler system_installd tarafından gerçekleştirildiği için, SIP'yi aşmayı sağladı.

CVE-2020–9854

Bir paket, bir montajlı görüntüden veya harici bir sürücüden yüklendiğinde, yükleyici o dosya sisteminden ikili dosyayı çalıştırır (SIP korumalı bir konumdan değil), bu da system_installd'nin rastgele bir ikili dosyayı çalıştırmasına neden olur.

CVE-2021-30892 - Shrootless

Bu blog yazısından araştırmacılar macOS'un Sistem Bütünlüğü Koruma (SIP) mekanizmasında, 'Shrootless' olarak adlandırılan bir güvenlik açığı keşfettiler. Bu güvenlik açığı, system_installd daemon'u etrafında döner ve bu daemon'un, SIP'nin dosya sistemi kısıtlamalarını aşmasına izin veren com.apple.rootless.install.heritable yetkisi vardır.

system_installd daemon'u, Apple tarafından imzalanmış paketleri yükleyecektir.

Araştırmacılar, Apple imzalı bir paket (.pkg dosyası) yüklenirken, system_installd paket içindeki herhangi bir kurulum sonrası betiği çalıştırdığını buldular. Bu betikler, varsayılan kabuk olan zsh tarafından çalıştırılır ve eğer mevcutsa, /etc/zshenv dosyasından komutları otomatik olarak çalıştırır, hatta etkileşimli modda bile. Bu davranış, saldırganlar tarafından kötüye kullanılabilir: kötü niyetli bir /etc/zshenv dosyası oluşturarak ve system_installd'nin zsh'yi çağırmasını bekleyerek, cihazda rastgele işlemler gerçekleştirebilirler.

Ayrıca, /etc/zshenv dosyasının yalnızca SIP aşmak için değil, genel bir saldırı tekniği olarak kullanılabileceği keşfedildi. Her kullanıcı profili, ~/.zshenv dosyasına sahiptir ve bu dosya, /etc/zshenv ile aynı şekilde davranır ancak root izinleri gerektirmez. Bu dosya, zsh her başladığında tetiklenecek şekilde bir kalıcılık mekanizması olarak veya ayrıcalık yükseltme mekanizması olarak kullanılabilir. Eğer bir yönetici kullanıcı, sudo -s veya sudo <komut> kullanarak root'a yükselirse, ~/.zshenv dosyası tetiklenecek ve etkili bir şekilde root'a yükselecektir.

CVE-2022-22583

CVE-2022-22583 içinde, aynı system_installd sürecinin hala kötüye kullanılabileceği keşfedildi çünkü kurulum sonrası betiği SIP tarafından korunan rastgele adlandırılmış bir klasörün içine koyuyordu ve bu klasör /tmp içindeydi. Sorun şu ki, /tmp kendisi SIP tarafından korunmamaktadır, bu nedenle sanallaştırılmış bir görüntü üzerinde montaj yapmak mümkündü, ardından yükleyici oraya kurulum sonrası betiği koyacak, sanallaştırılmış görüntüyü kaldıracak, tüm klasörleri yeniden oluşturacak ve yükleme sonrası betiği yüklemek için payload ile ekleyecekti.

fsck_cs aracı

fsck_cs aracının, sembolik bağlantıları takip etme yeteneği nedeniyle kritik bir dosyayı bozduğu bir güvenlik açığı tespit edildi. Özellikle, saldırganlar /dev/diskX dosyasından /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist dosyasına bir bağlantı oluşturdu. fsck_cs'yi /dev/diskX üzerinde çalıştırmak, Info.plist dosyasının bozulmasına yol açtı. Bu dosyanın bütünlüğü, işletim sisteminin SIP'si (Sistem Bütünlüğü Koruma) için hayati öneme sahiptir ve çekirdek uzantılarının yüklenmesini kontrol eder. Bozulduğunda, SIP'nin çekirdek hariç tutmalarını yönetme yeteneği tehlikeye girer.

Bu güvenlik açığını istismar etmek için gereken komutlar:

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

Bu güvenlik açığının istismarı ciddi sonuçlar doğurmaktadır. Info.plist dosyası, normalde çekirdek uzantıları için izinleri yönetmekten sorumlu olan, etkisiz hale gelir. Bu, AppleHWAccess.kext gibi belirli uzantıları kara listeye alma yeteneğini içerir. Sonuç olarak, SIP'nin kontrol mekanizması bozulduğunda, bu uzantı yüklenebilir ve sistemin RAM'ine yetkisiz okuma ve yazma erişimi sağlar.

SIP korumalı klasörlerin üzerine bağlanma

Korumanın aşılması için SIP korumalı klasörlerin üzerine yeni bir dosya sistemi bağlamak mümkündü.

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

Upgrader bypass (2016)

Sistem, OS'u yükseltmek için Install macOS Sierra.app içindeki gömülü bir yükleyici disk görüntüsünden önyükleme yapacak şekilde ayarlanmıştır ve bless aracını kullanmaktadır. Kullanılan komut aşağıdaki gibidir:

bash
/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

Bu sürecin güvenliği, bir saldırganın yükseltme görüntüsünü (InstallESD.dmg) önyüklemeden önce değiştirmesi durumunda tehlikeye girebilir. Strateji, dinamik bir yükleyiciyi (dyld) kötü niyetli bir sürümle (libBaseIA.dylib) değiştirmeyi içerir. Bu değişiklik, yükleyici başlatıldığında saldırganın kodunun çalıştırılmasına neden olur.

Saldırganın kodu, yükseltme süreci sırasında kontrolü ele geçirir ve sistemin yükleyiciye olan güvenini istismar eder. Saldırı, InstallESD.dmg görüntüsünü yöntem değiştirme (method swizzling) ile değiştirerek, özellikle extractBootBits yöntemini hedef alarak devam eder. Bu, disk görüntüsü kullanılmadan önce kötü niyetli kodun enjekte edilmesine olanak tanır.

Ayrıca, InstallESD.dmg içinde, yükseltme kodunun kök dosya sistemi olarak hizmet eden bir BaseSystem.dmg bulunmaktadır. Buna dinamik bir kütüphane enjekte etmek, kötü niyetli kodun OS düzeyindeki dosyaları değiştirebilen bir süreç içinde çalışmasına olanak tanır ve sistemin tehlikeye girme potansiyelini önemli ölçüde artırır.

systemmigrationd (2023)

DEF CON 31 konuşmasında, systemmigrationd (SIP'yi atlayabilen) bir bash ve bir perl betiği çalıştırdığı ve bunun BASH_ENV ve PERL5OPT ortam değişkenleri aracılığıyla kötüye kullanılabileceği gösterilmektedir.

CVE-2023-42860

bu blog yazısında detaylı olarak açıklandığı gibi, InstallAssistant.pkg paketlerinden bir postinstall betiği çalıştırılıyordu:

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

ve ${SHARED_SUPPORT_PATH}/SharedSupport.dmg içinde bir symlink oluşturmak mümkündü, bu da bir kullanıcının herhangi bir dosyayı kısıtlamadan geçmesini, SIP korumasını atlamasını sağlıyordu.

com.apple.rootless.install

caution

com.apple.rootless.install yetkisi SIP'yi atlamaya izin verir

Yetki com.apple.rootless.install, macOS'ta Sistem Bütünlüğü Koruması'nı (SIP) atlamak için bilinir. Bu, özellikle CVE-2022-26712 ile ilgili olarak belirtilmiştir.

Bu özel durumda, /System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc konumundaki sistem XPC servisi bu yetkiye sahiptir. Bu, ilgili sürecin SIP kısıtlamalarını aşmasına olanak tanır. Ayrıca, bu hizmet, dosyaların herhangi bir güvenlik önlemi uygulanmadan taşınmasına izin veren bir yöntem sunar.

Mühürlü Sistem Anlık Görüntüleri

Mühürlü Sistem Anlık Görüntüleri, Apple tarafından macOS Big Sur (macOS 11) ile tanıtılan bir özelliktir ve Sistem Bütünlüğü Koruması (SIP) mekanizmasının bir parçası olarak ek bir güvenlik ve sistem istikrarı katmanı sağlamak için tasarlanmıştır. Temelde sistem hacminin salt okunur sürümleridir.

Daha ayrıntılı bir bakış:

  1. Değiştirilemez Sistem: Mühürlü Sistem Anlık Görüntüleri, macOS sistem hacmini "değiştirilemez" hale getirir, bu da onun değiştirilmesini engeller. Bu, güvenliği veya sistem istikrarını tehlikeye atabilecek yetkisiz veya kazara değişiklikleri önler.
  2. Sistem Yazılım Güncellemeleri: macOS güncellemeleri veya yükseltmeleri yüklediğinizde, macOS yeni bir sistem anlık görüntüsü oluşturur. macOS başlangıç hacmi, bu yeni anlık görüntüye geçmek için APFS (Apple Dosya Sistemi) kullanır. Güncellemeleri uygulama süreci daha güvenli ve daha güvenilir hale gelir, çünkü sistem güncelleme sırasında bir şeyler ters giderse her zaman önceki anlık görüntüye geri dönebilir.
  3. Veri Ayrımı: macOS Catalina'da tanıtılan Veri ve Sistem hacmi ayrımı kavramıyla birlikte, Mühürlü Sistem Anlık Görüntüsü özelliği, tüm verilerinizin ve ayarlarınızın ayrı bir "Veri" hacminde saklandığından emin olur. Bu ayrım, verilerinizi sistemden bağımsız hale getirir, bu da sistem güncellemeleri sürecini basitleştirir ve sistem güvenliğini artırır.

Bu anlık görüntülerin macOS tarafından otomatik olarak yönetildiğini ve APFS'nin alan paylaşım yetenekleri sayesinde diskinizde ek alan kaplamadığını unutmayın. Ayrıca, bu anlık görüntülerin, tüm sistemin kullanıcı erişimine açık yedekleri olan Time Machine anlık görüntülerinden farklı olduğunu belirtmek önemlidir.

Anlık Görüntüleri Kontrol Et

diskutil apfs list komutu, APFS hacimlerinin detaylarını ve düzenini listeler:

+-- 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)

Önceki çıktıda, kullanıcı erişimine açık konumların /System/Volumes/Data altında monte edildiği görülebilir.

Ayrıca, macOS Sistem hacmi anlık görüntüsü / içinde monte edilmiştir ve mühürlüdür (OS tarafından kriptografik olarak imzalanmıştır). Bu nedenle, SIP atlanır ve değiştirilirse, OS artık başlatılamaz.

Ayrıca, mühürlemenin etkin olduğunu doğrulamak için şu komutu çalıştırmak mümkündür:

bash
csrutil authenticated-root status
Authenticated Root status: enabled

Ayrıca, anlık görüntü diski de salt okunur olarak monte edilmiştir:

bash
mount
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin