macOS SIP
Podstawowe informacje
System Integrity Protection (SIP) w macOS to mechanizm zaprojektowany w celu zapobiegania nawet najbardziej uprzywilejowanym użytkownikom w dokonywaniu nieautoryzowanych zmian w kluczowych folderach systemowych. Ta funkcja odgrywa kluczową rolę w utrzymaniu integralności systemu, ograniczając działania takie jak dodawanie, modyfikowanie lub usuwanie plików w chronionych obszarach. Główne foldery chronione przez SIP to:
/System
/bin
/sbin
/usr
Zasady regulujące zachowanie SIP są zdefiniowane w pliku konfiguracyjnym znajdującym się w /System/Library/Sandbox/rootless.conf
. W tym pliku ścieżki, które są poprzedzone znakiem gwiazdki (*), są oznaczone jako wyjątki od w przeciwnym razie surowych ograniczeń SIP.
Rozważ poniższy przykład:
Ten fragment sugeruje, że chociaż SIP generalnie zabezpiecza katalog /usr
, istnieją konkretne podkatalogi (/usr/libexec/cups
, /usr/local
i /usr/share/man
), w których modyfikacje są dozwolone, co wskazuje gwiazdka (*) poprzedzająca ich ścieżki.
Aby sprawdzić, czy katalog lub plik jest chroniony przez SIP, możesz użyć polecenia ls -lOd
, aby sprawdzić obecność flagi restricted
lub sunlnk
. Na przykład:
W tym przypadku flaga sunlnk
oznacza, że katalog /usr/libexec/cups
nie może być usunięty, chociaż pliki w nim mogą być tworzone, modyfikowane lub usuwane.
Z drugiej strony:
Tutaj flaga restricted
wskazuje, że katalog /usr/libexec
jest chroniony przez SIP. W katalogu chronionym przez SIP pliki nie mogą być tworzone, modyfikowane ani usuwane.
Ponadto, jeśli plik zawiera atrybut com.apple.rootless
jako rozszerzony atrybut, ten plik również będzie chroniony przez SIP.
SIP ogranicza również inne działania roota, takie jak:
Ładowanie nieufnych rozszerzeń jądra
Uzyskiwanie portów zadań dla procesów podpisanych przez Apple
Modyfikowanie zmiennych NVRAM
Umożliwianie debugowania jądra
Opcje są przechowywane w zmiennej nvram jako bitflaga (csr-active-config
na Intel i lp-sip0
jest odczytywane z uruchomionego drzewa urządzeń dla ARM). Flagi można znaleźć w kodzie źródłowym XNU w csr.sh
:
Status SIP
Możesz sprawdzić, czy SIP jest włączony w swoim systemie, używając następującego polecenia:
Jeśli musisz wyłączyć SIP, musisz zrestartować komputer w trybie odzyskiwania (naciskając Command+R podczas uruchamiania), a następnie wykonać następujące polecenie:
Jeśli chcesz zachować włączoną SIP, ale usunąć zabezpieczenia debugowania, możesz to zrobić za pomocą:
Inne Ograniczenia
Zabrania ładowania niepodpisanych rozszerzeń jądra (kexts), zapewniając, że tylko zweryfikowane rozszerzenia wchodzą w interakcję z jądrem systemu.
Zapobiega debugowaniu procesów systemowych macOS, chroniąc kluczowe komponenty systemu przed nieautoryzowanym dostępem i modyfikacją.
Hamuje narzędzia takie jak dtrace przed inspekcją procesów systemowych, dodatkowo chroniąc integralność działania systemu.
Dowiedz się więcej o informacji SIP w tej prezentacji.
Obejścia SIP
Obejście SIP umożliwia atakującemu:
Dostęp do danych użytkownika: Odczyt wrażliwych danych użytkownika, takich jak poczta, wiadomości i historia Safari ze wszystkich kont użytkowników.
Obejście TCC: Bezpośrednia manipulacja bazą danych TCC (Transparentność, Zgoda i Kontrola) w celu przyznania nieautoryzowanego dostępu do kamery internetowej, mikrofonu i innych zasobów.
Ustanowienie trwałości: Umieszczenie złośliwego oprogramowania w lokalizacjach chronionych przez SIP, co czyni je odpornym na usunięcie, nawet przez uprawnienia roota. Obejmuje to również możliwość manipulacji Narzędziem Usuwania Złośliwego Oprogramowania (MRT).
Ładowanie rozszerzeń jądra: Chociaż istnieją dodatkowe zabezpieczenia, obejście SIP upraszcza proces ładowania niepodpisanych rozszerzeń jądra.
Pakiety Instalacyjne
Pakiety instalacyjne podpisane certyfikatem Apple mogą omijać jego zabezpieczenia. Oznacza to, że nawet pakiety podpisane przez standardowych deweloperów będą blokowane, jeśli będą próbowały modyfikować katalogi chronione przez SIP.
Nieistniejący plik SIP
Jednym z potencjalnych luk jest to, że jeśli plik jest określony w rootless.conf
, ale obecnie nie istnieje, może zostać utworzony. Złośliwe oprogramowanie mogłoby to wykorzystać do ustanowienia trwałości w systemie. Na przykład, złośliwy program mógłby utworzyć plik .plist w /System/Library/LaunchDaemons
, jeśli jest wymieniony w rootless.conf
, ale nieobecny.
com.apple.rootless.install.heritable
Uprawnienie com.apple.rootless.install.heritable
pozwala na obejście SIP
Odkryto, że możliwe było zamienienie pakietu instalacyjnego po tym, jak system zweryfikował jego podpis kodu, a następnie system zainstalowałby złośliwy pakiet zamiast oryginalnego. Ponieważ te działania były wykonywane przez system_installd
, pozwalałoby to na obejście SIP.
Jeśli pakiet był instalowany z zamontowanego obrazu lub zewnętrznego dysku, instalator wykonywałby binarny plik z tego systemu plików (zamiast z lokalizacji chronionej przez SIP), co sprawiało, że system_installd
wykonywałby dowolny binarny plik.
CVE-2021-30892 - Shrootless
Badacze z tego wpisu na blogu odkryli lukę w mechanizmie Ochrony Integralności Systemu (SIP) macOS, nazwaną luką 'Shrootless'. Ta luka koncentruje się na demonie system_installd
, który ma uprawnienie com.apple.rootless.install.heritable
, które pozwala dowolnym jego procesom potomnym na obejście ograniczeń systemu plików SIP.
Demon system_installd
zainstaluje pakiety, które zostały podpisane przez Apple.
Badacze odkryli, że podczas instalacji pakietu podpisanego przez Apple (.pkg), system_installd
uruchamia wszelkie skrypty po instalacji zawarte w pakiecie. Te skrypty są wykonywane przez domyślną powłokę, zsh
, która automatycznie uruchamia polecenia z pliku /etc/zshenv
, jeśli istnieje, nawet w trybie nieinteraktywnym. To zachowanie mogłoby być wykorzystane przez atakujących: tworząc złośliwy plik /etc/zshenv
i czekając na system_installd
, aby wywołać zsh
, mogliby przeprowadzać dowolne operacje na urządzeniu.
Ponadto odkryto, że /etc/zshenv
mogłoby być używane jako ogólna technika ataku, nie tylko do obejścia SIP. Każdy profil użytkownika ma plik ~/.zshenv
, który zachowuje się tak samo jak /etc/zshenv
, ale nie wymaga uprawnień roota. Plik ten mógłby być używany jako mechanizm trwałości, uruchamiając się za każdym razem, gdy zsh
się uruchamia, lub jako mechanizm podwyższenia uprawnień. Jeśli użytkownik administracyjny podniesie uprawnienia do roota za pomocą sudo -s
lub sudo <polecenie>
, plik ~/.zshenv
zostanie uruchomiony, skutecznie podnosząc uprawnienia do roota.
W CVE-2022-22583 odkryto, że ten sam proces system_installd
mógł być nadal nadużywany, ponieważ umieszczał skrypt po instalacji w losowo nazwanym folderze chronionym przez SIP w /tmp
. Problem polega na tym, że /tmp
sam w sobie nie jest chroniony przez SIP, więc możliwe było zamontowanie obrazu wirtualnego na nim, a następnie instalator umieściłby tam skrypt po instalacji, odmontował obraz wirtualny, odtworzył wszystkie foldery i dodał skrypt po instalacji z ładunkiem do wykonania.
Zidentyfikowano lukę, w której fsck_cs
został wprowadzony w błąd do uszkodzenia kluczowego pliku, z powodu jego zdolności do śledzenia linków symbolicznych. Konkretnie, atakujący stworzyli link z /dev/diskX
do pliku /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist
. Wykonanie fsck_cs
na /dev/diskX
doprowadziło do uszkodzenia Info.plist
. Integralność tego pliku jest kluczowa dla SIP (Ochrony Integralności Systemu) systemu operacyjnego, który kontroluje ładowanie rozszerzeń jądra. Po uszkodzeniu, zdolność SIP do zarządzania wykluczeniami jądra jest zagrożona.
Polecenia do wykorzystania tej luki to:
Wykorzystanie tej luki ma poważne konsekwencje. Plik Info.plist
, normalnie odpowiedzialny za zarządzanie uprawnieniami dla rozszerzeń jądra, staje się nieskuteczny. Obejmuje to niemożność dodania do czarnej listy niektórych rozszerzeń, takich jak AppleHWAccess.kext
. W konsekwencji, gdy mechanizm kontrolny SIP jest uszkodzony, to rozszerzenie może być załadowane, co daje nieautoryzowany dostęp do odczytu i zapisu pamięci RAM systemu.
Możliwe było zamontowanie nowego systemu plików nad folderami chronionymi przez SIP, aby obejść ochronę.
System jest ustawiony na uruchamianie z wbudowanego obrazu dysku instalacyjnego w Install macOS Sierra.app
, aby zaktualizować system operacyjny, wykorzystując narzędzie bless
. Używana komenda jest następująca:
Bezpieczeństwo tego procesu może zostać naruszone, jeśli atakujący zmieni obraz aktualizacji (InstallESD.dmg
) przed uruchomieniem. Strategia polega na zastąpieniu dynamicznego loadera (dyld) złośliwą wersją (libBaseIA.dylib
). To zastąpienie skutkuje wykonaniem kodu atakującego, gdy instalator zostaje uruchomiony.
Kod atakującego przejmuje kontrolę podczas procesu aktualizacji, wykorzystując zaufanie systemu do instalatora. Atak postępuje poprzez modyfikację obrazu InstallESD.dmg
za pomocą metody swizzling, szczególnie celując w metodę extractBootBits
. Umożliwia to wstrzyknięcie złośliwego kodu przed użyciem obrazu dysku.
Ponadto, w InstallESD.dmg
znajduje się BaseSystem.dmg
, który służy jako system plików dla kodu aktualizacji. Wstrzyknięcie dynamicznej biblioteki do tego pozwala złośliwemu kodowi działać w procesie zdolnym do modyfikacji plików na poziomie systemu operacyjnego, znacznie zwiększając potencjał kompromitacji systemu.
W tym wykładzie z DEF CON 31 pokazano, jak systemmigrationd
(które może omijać SIP) wykonuje skrypt bash i skrypt perl, które mogą być nadużywane za pomocą zmiennych środowiskowych BASH_ENV
i PERL5OPT
.
CVE-2023-42860
Jak szczegółowo opisano w tym wpisie na blogu, skrypt postinstall
z pakietów InstallAssistant.pkg
pozwalał na wykonanie:
and it was possible to create a symlink in ${SHARED_SUPPORT_PATH}/SharedSupport.dmg
that would allow a user to unrestrict any file, bypassing SIP protection.
com.apple.rootless.install
Uprawnienie com.apple.rootless.install
pozwala na ominięcie SIP
Uprawnienie com.apple.rootless.install
jest znane z omijania System Integrity Protection (SIP) w macOS. Zostało to szczególnie wspomniane w związku z CVE-2022-26712.
W tym konkretnym przypadku, usługa XPC systemu znajdująca się w /System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc
posiada to uprawnienie. Pozwala to powiązanemu procesowi na obejście ograniczeń SIP. Ponadto, ta usługa wyraźnie przedstawia metodę, która umożliwia przenoszenie plików bez egzekwowania jakichkolwiek środków bezpieczeństwa.
Sealed System Snapshots
Sealed System Snapshots to funkcja wprowadzona przez Apple w macOS Big Sur (macOS 11) jako część mechanizmu System Integrity Protection (SIP), aby zapewnić dodatkową warstwę bezpieczeństwa i stabilności systemu. Są to zasadniczo wersje tylko do odczytu wolumenu systemowego.
Oto bardziej szczegółowy opis:
Niemodyfikowalny system: Sealed System Snapshots sprawiają, że wolumen systemowy macOS jest "niemodyfikowalny", co oznacza, że nie może być zmieniany. Zapobiega to wszelkim nieautoryzowanym lub przypadkowym zmianom w systemie, które mogłyby zagrozić bezpieczeństwu lub stabilności systemu.
Aktualizacje oprogramowania systemowego: Gdy instalujesz aktualizacje lub ulepszenia macOS, macOS tworzy nowy zrzut systemu. Wolumen startowy macOS następnie używa APFS (Apple File System) do przełączenia się na ten nowy zrzut. Cały proces stosowania aktualizacji staje się bezpieczniejszy i bardziej niezawodny, ponieważ system zawsze może wrócić do poprzedniego zrzutu, jeśli coś pójdzie nie tak podczas aktualizacji.
Separacja danych: W połączeniu z koncepcją separacji wolumenów Danych i Systemu wprowadzoną w macOS Catalina, funkcja Sealed System Snapshot zapewnia, że wszystkie twoje dane i ustawienia są przechowywane na oddzielnym wolumenie "Data". Ta separacja sprawia, że twoje dane są niezależne od systemu, co upraszcza proces aktualizacji systemu i zwiększa bezpieczeństwo systemu.
Pamiętaj, że te zrzuty są automatycznie zarządzane przez macOS i nie zajmują dodatkowego miejsca na twoim dysku, dzięki możliwościom współdzielenia przestrzeni APFS. Ważne jest również, aby zauważyć, że te zrzuty różnią się od zrzutów Time Machine, które są kopią zapasową całego systemu dostępną dla użytkownika.
Sprawdź zrzuty
Polecenie diskutil apfs list
wyświetla szczegóły wolumenów APFS i ich układ:
W poprzednim wyjściu można zobaczyć, że lokacje dostępne dla użytkownika są zamontowane pod /System/Volumes/Data
.
Ponadto, zrzut wolumenu systemowego macOS jest zamontowany w /
i jest zabezpieczony (podpisany kryptograficznie przez system operacyjny). Więc, jeśli SIP zostanie ominięty i zmodyfikowany, system operacyjny nie uruchomi się więcej.
Można również zweryfikować, że pieczęć jest włączona uruchamiając:
Ponadto, dysk migawki jest również zamontowany jako tylko do odczytu:
Last updated