hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md
2024-02-10 18:14:16 +00:00

20 KiB
Raw Blame History

macOS SIP

AWS hackleme becerilerini sıfırdan ileri seviyeye öğrenmek için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'a göz atın!

HackTricks'i desteklemenin diğer yolları:

Temel Bilgiler

macOS'teki System Integrity Protection (SIP), en yetkili kullanıcıların bile korumalı sistem klasörlerinde yetkisiz değişiklikler yapmasını engellemek 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 temel klasörler şunlardır:

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

SIP'nin davranışını belirleyen kurallar, /System/Library/Sandbox/rootless.conf konfigürasyon dosyasında tanımlanır. Bu dosyanın içinde, yıldız (*) ile başlayan yollar, aksi takdirde sıkı SIP kısıtlamalarına istisna olarak belirtilir.

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

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

Bu parça, SIP'nin genel olarak /usr dizinini güvence altına aldığını, ancak (/usr/libexec/cups, /usr/local ve /usr/share/man) gibi belirli alt dizinlerde değişikliklere izin verildiğini göstermektedir. Bu izinler, yolun önünde (*) işareti ile belirtilir.

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:

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 silinemeyeceğini ancak içindeki dosyaların oluşturulabileceğini, değiştirilebileceğini veya silinebileceğini belirtir.

Öte yandan:

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

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

Ayrıca, bir dosya com.apple.rootless genişletilmiş özniteliğini içeriyorsa, bu dosya da SIP tarafından korunur.

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

  • Güvenilmeyen çekirdek uzantılarını yükleme
  • Apple tarafından imzalanan işlemler için görev bağlantılarını alma
  • NVRAM değişkenlerini değiştirme
  • Çekirdek hata ayıklamaya izin verme

Seçenekler, bir bit bayrağı olarak nvram değişkeninde tutulur (Intel için csr-active-config ve ARM için önyüklü Aygıt Ağacından lp-sip0 okunur). Bayrakları XNU kaynak kodunda csr.sh dosyasında bulabilirsiniz:

SIP Durumu

Sisteminizde SIP'nin etkin olup olmadığını aşağıdaki komutla kontrol edebilirsiniz:

csrutil status

SIP'yi devre dışı bırakmanız gerekiyorsa, bilgisayarınızı kurtarma modunda yeniden başlatmanız gerekmektedir (başlatma sırasında Command+R tuşlarına basarak), ardından aşağıdaki komutu çalıştırın:

csrutil disable

SIP'yi etkin tutmak isterseniz ancak hata ayıklama korumalarını kaldırmak isterseniz, bunu aşağıdaki şekilde yapabilirsiniz:

csrutil enable --without debug

Diğer Kısıtlamalar

  • Onaylanmamış çekirdek uzantılarının (kexts) yüklenmesine izin vermez, yalnızca doğrulanmış uzantıların sistem çekirdeğiyle etkileşime girmesini sağlar.
  • macOS sistem süreçlerinin hata ayıklanmasını engeller, çekirdek sistem bileşenlerini yetkisiz erişim ve değişikliklerden korur.
  • dtrace gibi araçların sistem süreçlerini incelemesini engeller, sistem işleyişinin bütünlüğünü daha da korur.

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

SIP Atlamaları

SIP'nin atlanması, bir saldırganın aşağıdaki işlemleri gerçekleştirmesine olanak tanır:

  • Kullanıcı Verilerine Erişim: Tüm kullanıcı hesaplarından hassas kullanıcı verilerini (posta, mesajlar ve Safari geçmişi gibi) okuma.
  • TCC Atlaması: TCC (Şeffaflık, Onay ve Kontrol) veritabanını doğrudan manipüle ederek web kamerası, mikrofon ve diğer kaynaklara yetkisiz erişim sağlama.
  • Kalıcılık Kurma: Malware'yi SIP korumalı konumlara yerleştirerek, kök ayrıcalıklarıyla bile kaldırılamaz hale getirme. Bu aynı zamanda Malware Kaldırma Aracı'nın (MRT) manipüle edilme potansiyelini de içerir.
  • Çekirdek Uzantıları Yükleme: Ek güvenlik önlemleri olsa da, SIP'nin atlanması, onaylanmamış çekirdek uzantılarının yüklenme sürecini basitleştirir.

Yükleyici Paketleri

Apple'ın sertifikasıyla imzalanan yükleyici paketleri, bu korumaları atlatabilir. Bu, standart geliştiriciler tarafından imzalanan paketlerin bile SIP korumalı dizinleri değiştirmeye çalıştığında engelleneceği anlamına gelir.

Varolmayan SIP Dosyası

Potansiyel bir açık nokta, rootless.conf dosyasında belirtilen ancak mevcut olmayan bir dosyanın oluşturulabilmesidir. Kötü amaçlı yazılım, bu durumu kullanarak sisteme kalıcılık sağlayabilir. Örneğin, kötü amaçlı bir program, rootless.conf dosyasında listelenmiş ancak mevcut olmayan /System/Library/LaunchDaemons dizininde bir .plist dosyası oluşturabilir.

com.apple.rootless.install.heritable

{% hint style="danger" %} com.apple.rootless.install.heritable yetkisi, SIP'nin atlanmasına izin verir. {% endhint %}

Shrootless

Bu blog yazısındaki araştırmacılar, macOS'in Sistem Bütünlük Koruması (SIP) mekanizmasında 'Shrootless' adı verilen bir zafiyet keşfettiler. Bu zafiyet, system_installd adlı hizmet süreci etrafında dönüyor ve bu sürecin com.apple.rootless.install.heritable yetkisi, SIP'nin dosya sistemi kısıtlamalarını atlamak için herhangi bir alt sürecine izin veriyor.

system_installd hizmet süreci, Apple tarafından imzalanan paketleri yükler.

Araştırmacılar, Apple tarafından imzalanan bir paketin (.pkg dosyası) kurulumu sırasında, pakete dahil edilen herhangi bir post-install betiğini çalıştırır. Bu betikler, varsayılan kabuk olan zsh tarafından yürütülür ve etkileşimli olmayan modda bile /etc/zshenv dosyasından komutları otomatik olarak çalıştırır. Bu davranış saldırganlar tarafından istismar edilebilir: kötü niyetli bir /etc/zshenv dosyası oluşturarak ve system_installd'nin zsh'yi çağırmasını bekleyerek, cihaz üzerinde keyfi işlemler gerçekleştirebilirler.

Ayrıca, /etc/zshenv'nin yalnızca bir SIP atlama tekniği olarak değil, genel bir saldırı tekniği olarak da kullanılabileceği keşfedildi. Her kullanıcı profili, /etc/zshenv ile aynı şekilde davranan bir ~/.zshenv dosyasına sahiptir, ancak kök izinleri gerektirmez. Bu dosya, her zsh başladığında tetiklenen bir kalıcılık mekanizması olarak veya bir ayrıcalık yükseltme mekanizması olarak kullanılabilir. Bir yönetici kullanıcısı sudo -s veya sudo <komut> kullanarak köke yükseldiğinde, ~/.zshenv dosyası tetiklenir ve etkili bir şekilde köke yükselir.

CVE-2022-22583

CVE-2022-22583 içinde aynı system_installd sürecinin hala kötüye kullanılabileceği keşfedildi, çünkü post-install betiğini SIP tarafından korunan rastgele adlandırılmış bir klasöre yerleştiriyordu. Sorun şu ki, /tmp SIP tarafından korunmamaktadır, bu yüzden üzerine bir sanal görüntü bağlanabilir, ardından yükleyici bu klasöre post-install betiğini yerleştirir, sanal görüntüyü ayırır, tüm klasörleri yeniden oluşturur ve yürütülecek payload ile post-installation betiğini ekler.

fsck_cs yardımcı programı

fsck_cs'nin sembolik bağlantıları takip edebilme yeteneği nedeniyle, fsck_cs'nin önemli bir dosyayı bozmasına neden olacak şekilde yanıltıldığı bir zafiyet tespit edildi. Saldırganlar özellikle /dev/diskX ile /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist dosyası arasında bir bağlantı oluşturdu. fsck_cs'yi /dev/diskX üzerinde çalıştırmak, Info.plist'in bozulmasına yol açtı. Bu dosyanın bütünlüğü, çekirdek uzantılarının yüklenmesini kontrol eden sistem bütünlük koruması (SIP) için hayati önem taşır. Bir kez bozulduğunda, SIP'nin çekirdek hariç tutmaları yönetme yeteneği tehlikeye girer.

Bu zafiyeti istismar etmek için kullanılan komutlar:

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 sömürülmesi ciddi sonuçları beraberinde getirir. Normalde çekirdek uzantıları için izinleri yöneten Info.plist dosyası etkisiz hale gelir. Bu, AppleHWAccess.kext gibi belirli uzantıları kara listeye alma yeteneğinin olmamasını içerir. Sonuç olarak, SIP'nin kontrol mekanizması bozulduğunda, bu uzantı yüklenebilir ve sistem RAM'ine yetkisiz okuma ve yazma erişimi sağlar.

SIP korumalı klasörlerin üzerine bağlama

SIP korumalı klasörlerin üzerine yeni bir dosya sistemi bağlamak, korumayı atlamak için mümkün oldu.

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

Yükseltici atlatma (2016)

Sistem, işletim sistemini yükseltmek için Install macOS Sierra.app içinde yer alan bir yerleşik kurulum diski görüntüsünden başlatılmak üzere yapılandırılmıştır ve bless yardımcı programı kullanılmaktadır. Kullanılan komut aşağıdaki gibidir:

/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, saldırganın başlatmadan önce yükseltme görüntüsünü (InstallESD.dmg) değiştirmesi durumunda tehlikeye girebilir. Strateji, kötü niyetli bir sürüm (libBaseIA.dylib) ile bir dinamik yükleyiciyi (dyld) değiştirmeyi içerir. Bu değiştirme, yükleyici başlatıldığında saldırganın kodunun yürütülmesine neden olur.

Saldırganın kodu, yükseltme süreci sırasında kontrol kazanır ve sistemin yükleyiciye olan güvenini istismar eder. Saldırı, InstallESD.dmg görüntüsünün extractBootBits yöntemine özellikle hedeflenen yöntem sarmalamayla değiştirilerek devam eder. Bu, disk görüntüsü kullanılmadan önce kötü amaçlı 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 bulunur. Bu dinamik bir kitaplığın enjekte edilmesi, kötü amaçlı kodun, işletim sistemi düzeyindeki dosyaları değiştirebilen bir işlem içinde çalışmasına olanak tanır ve sistem tehlikesini önemli ölçüde artırır.

systemmigrationd (2023)

Bu DEF CON 31 konuşmasında, SIP'yi atlayabilen systemmigrationd'nin bir bash ve bir perl betiğini nasıl yürüttüğü gösterilmektedir ve bu, env değişkenleri BASH_ENV ve PERL5OPT aracılığıyla kötüye kullanılabilir.

com.apple.rootless.install

{% hint style="danger" %} com.apple.rootless.install yetkisi, SIP'yi atlamaya izin verir {% endhint %}

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

Bu özel durumda, bu yetkiye sahip olan sistem XPC hizmeti, /System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc konumunda bulunur. Bu, ilgili işlemin SIP kısıtlamalarını atlamasına olanak tanır. Ayrıca, bu hizmet, herhangi bir güvenlik önlemi uygulamadan dosyaların 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'ın macOS Big Sur (macOS 11)'de tanıttığı bir özelliktir ve ek bir güvenlik ve sistem istikrarı katmanı sağlamak için Sistem Bütünlüğü Koruması (SIP) mekanizmasının bir parçası olarak sunulur. Bunlar, temelde sistem hacminin değiştirilemez bir sürümüdür.

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" yapar, yani değiştirilemez. Bu, güvenliği veya sistem istikrarını tehlikeye atabilecek herhangi bir yetkisiz veya kazara sistem değişikliğini önler.
  2. Sistem Yazılımı Güncellemeleri: macOS güncellemelerini veya yükseltmelerini yüklediğinizde, macOS yeni bir sistem anlık görüntüsü oluşturur. macOS başlangıç hacmi daha sonra bu yeni anlık görüntüye geçmek için APFS (Apple Dosya Sistemi)'ni kullanır. Güncelleme işleminin tamamı, sistem güncellemesi sırasında bir şeyler yanlış giderse her zaman önceki anlık görüntüye geri dönülebilmesi nedeniyle daha güvenli ve daha güvenilir hale gelir.
  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 depolanmasını sağlar. Bu ayrım, verilerinizi sistemden bağımsız hale getirir ve sistem güncelleme 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şma yetenekleri sayesinde diskinizde ek alan kaplamadığını unutmayın. Ayrıca, bu anlık görüntüler, tüm sistemin kullanıcı tarafından erişilebilir yedeklemeleri olan Time Machine anlık görüntülerinden farklıdır.

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

diskutil apfs list komutu, APFS hacimlerinin ayrıntıları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ı tarafından erişilebilen konumların /System/Volumes/Data altında bağlandığı görülebilir.

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

Mührün etkin olduğunu doğrulamak için aşağıdaki komutu çalıştırabilirsiniz:

csrutil authenticated-root status
Authenticated Root status: enabled

Ayrıca, anlık görüntü diski de salt okunur olarak bağlanır:

mount
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
AWS hackleme becerilerini sıfırdan kahraman seviyesine öğrenmek için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'ı öğrenin!

HackTricks'i desteklemenin diğer yolları: