macOS SIP
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Sistem Bütünlüğü Koruması (SIP), macOS'ta, en ayrıcalıklı kullanıcıların bile ana sistem klasörlerinde yetkisiz değişiklikler yapması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 kritik 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 dikkate alın:
Bu kesit, SIP'nin genel olarak /usr
dizinini güvence altına aldığını, ancak belirli alt dizinlerde (/usr/libexec/cups
, /usr/local
ve /usr/share/man
) değişikliklere izin verildiğini, yollarının önündeki yıldız (*) ile gösterildiğ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:
Bu durumda, sunlnk
bayrağı, /usr/libexec/cups
dizininin kendisinin silinemez olduğunu belirtir, ancak içindeki dosyalar oluşturulabilir, değiştirilebilir veya silinebilir.
Diğer taraftan:
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.
Sandbox kancası hook_vnode_check_setextattr
, genişletilmiş özellik com.apple.rootless
üzerinde herhangi bir değişiklik yapma girişimini 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, bir bit bayrağı olarak nvram değişkeninde saklanır (csr-active-config
Intel için ve lp-sip0
ARM için önyüklenen Aygıt Ağacından okunur). Bayrakları csr.sh
dosyasında XNU kaynak kodunda bulabilirsiniz:
SIP'in sisteminizde etkin olup olmadığını aşağıdaki komutla kontrol edebilirsiniz:
Eğer SIP'yi devre dışı bırakmanız gerekiyorsa, bilgisayarınızı kurtarma modunda yeniden başlatmalısınız (başlangıç sırasında Command+R tuşuna basarak), ardından aşağıdaki komutu çalıştırmalısınız:
Eğer SIP'yi etkin tutmak ama hata ayıklama korumalarını kaldırmak istiyorsanız, bunu şu şekilde yapabilirsiniz:
İ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.
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'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şması: 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 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ı'nın (MRT) değiştirilmesi 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.
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.
Bir potansiyel açık, rootless.conf
içinde belirtilen ancak şu anda mevcut olmayan bir dosyanın oluşturulabilmesidir. Kötü amaçlı yazılım, bunu kullanarak sistemde kalıcılık sağlama fırsatını değerlendirebilir. Örneğin, kötü niyetli bir program, rootless.conf
içinde listelenmiş ancak mevcut olmayan bir .plist dosyasını /System/Library/LaunchDaemons
içinde oluşturabilir.
Yetki com.apple.rootless.install.heritable
, SIP'yi aşmayı sağlar.
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ğlıyordu.
Bir paket, bir bağlı 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 ile korunan bir konumdan değil), bu da system_installd
'nin rastgele bir ikili dosyayı çalıştırmasına neden olur.
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 zafiyet keşfettiler. Bu zafiyet, system_installd
daemon'u etrafında döner ve bu daemon'un, herhangi bir çocuk sürecinin SIP'nin dosya sistemi kısıtlamalarını aşmasına izin veren bir yetkisi vardır, com.apple.rootless.install.heritable
.
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 istismar edilebilir: 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
'nin genel bir saldırı tekniği olarak kullanılabileceği keşfedildi, sadece SIP aşması için değil. Her kullanıcı profili, /etc/zshenv
ile aynı şekilde davranan bir ~/.zshenv
dosyasına sahiptir, 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 içinde, aynı system_installd
sürecinin hala kötüye kullanılabileceği keşfedildi çünkü kurulum sonrası betiği SIP ile 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 ile korunmamaktadır, bu nedenle sanallaştırılmış bir görüntüyü üzerinde monte etmek 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
'nin, sembolik bağlantıları takip etme yeteneği nedeniyle kritik bir dosyayı bozduğu bir zafiyet tespit edildi. Özellikle, saldırganlar /dev/diskX
'den /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist
dosyasına bir bağlantı oluşturdu. /dev/diskX
üzerinde fsck_cs
ç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 zafiyeti istismar etmek için gereken komutlar:
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 dosya, etkisiz hale gelir. Bu, AppleHWAccess.kext
gibi belirli uzantıları kara listeye alma yeteneğinin kaybolmasını 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.
Koruma atlamak için yeni bir dosya sistemi SIP korumalı klasörler üzerinde montaj yapmak mümkündü.
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:
Bu sürecin güvenliği, bir saldırganın yükseltme görüntüsünü (InstallESD.dmg
) başlatmadan ö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şim, 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 ilerler. 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.
DEF CON 31 konuşmasında, systemmigrationd
(SIP'yi atlayabilen) bir bash ve bir perl betiği çalıştırdığı gösterilmektedir; bu betikler BASH_ENV
ve PERL5OPT
ortam değişkenleri aracılığıyla kötüye kullanılabilir.
bu blog yazısında detaylı olarak açıklandığı gibi, InstallAssistant.pkg
paketlerinden bir postinstall
betiği çalıştırılıyordu:
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.
Yetki com.apple.rootless.install
SIP'yi atlatmaya izin verir.
Yetki com.apple.rootless.install
, macOS'ta Sistem Bütünlüğü Koruması (SIP) atlatmak 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, 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ğlar. Temelde, sistem hacminin salt okunur sürümleridir.
Daha ayrıntılı bir bakış:
Değiştirilemez Sistem: Mühürlü Sistem Anlık Görüntüleri, macOS sistem hacmini "değiştirilemez" hale getirir, yani değiştirilemez. Bu, güvenliği veya sistem istikrarını tehlikeye atabilecek yetkisiz veya kazara değişiklikleri önler.
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.
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.
diskutil apfs list
komutu, APFS hacimlerinin ayrıntılarını ve düzenini listeler:
Önceki çıktıda, kullanıcı erişimine açık konumların /System/Volumes/Data
altında monte edildiğini görebilirsiniz.
Ayrıca, macOS Sistem hacmi anlık görüntüsü /
altında monte edilmiştir ve mühürlüdür (OS tarafından kriptografik olarak imzalanmıştır). Bu nedenle, SIP atlatılır ve değiştirilirse, OS artık başlatılamaz.
Mühürlemenin etkin olduğunu doğrulamak için de çalıştırmak mümkündür:
Ayrıca, anlık görüntü diski de salt okunur olarak bağlanır:
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)