macOS Gatekeeper / Quarantine / XProtect
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)
Gatekeeper to funkcja zabezpieczeń opracowana dla systemów operacyjnych Mac, zaprojektowana w celu zapewnienia, że użytkownicy uruchamiają tylko zaufane oprogramowanie na swoich systemach. Działa poprzez weryfikację oprogramowania, które użytkownik pobiera i próbuje otworzyć z źródeł zewnętrznych do App Store, takich jak aplikacja, wtyczka lub pakiet instalacyjny.
Kluczowym mechanizmem Gatekeepera jest jego proces weryfikacji. Sprawdza, czy pobrane oprogramowanie jest podpisane przez uznanego dewelopera, co zapewnia autentyczność oprogramowania. Ponadto ustala, czy oprogramowanie jest notaryzowane przez Apple, co potwierdza, że nie zawiera znanej złośliwej zawartości i nie zostało zmodyfikowane po notaryzacji.
Dodatkowo, Gatekeeper wzmacnia kontrolę i bezpieczeństwo użytkownika, prosząc użytkowników o zatwierdzenie otwarcia pobranego oprogramowania po raz pierwszy. To zabezpieczenie pomaga zapobiegać przypadkowemu uruchomieniu przez użytkowników potencjalnie szkodliwego kodu wykonywalnego, który mogli pomylić z nieszkodliwym plikiem danych.
Podpisy aplikacji, znane również jako podpisy kodu, są kluczowym elementem infrastruktury zabezpieczeń Apple. Służą do weryfikacji tożsamości autora oprogramowania (dewelopera) oraz do zapewnienia, że kod nie został zmodyfikowany od ostatniego podpisania.
Oto jak to działa:
Podpisywanie aplikacji: Gdy deweloper jest gotowy do dystrybucji swojej aplikacji, podpisuje aplikację za pomocą klucza prywatnego. Ten klucz prywatny jest powiązany z certyfikatem, który Apple wydaje deweloperowi po zapisaniu się do programu Apple Developer. Proces podpisywania polega na stworzeniu kryptograficznego skrótu wszystkich części aplikacji i zaszyfrowaniu tego skrótu kluczem prywatnym dewelopera.
Dystrybucja aplikacji: Podpisana aplikacja jest następnie dystrybuowana do użytkowników wraz z certyfikatem dewelopera, który zawiera odpowiadający klucz publiczny.
Weryfikacja aplikacji: Gdy użytkownik pobiera i próbuje uruchomić aplikację, system operacyjny Mac używa klucza publicznego z certyfikatu dewelopera do odszyfrowania skrótu. Następnie ponownie oblicza skrót na podstawie aktualnego stanu aplikacji i porównuje go z odszyfrowanym skrótem. Jeśli się zgadzają, oznacza to, że aplikacja nie została zmodyfikowana od momentu jej podpisania przez dewelopera, a system zezwala na jej uruchomienie.
Podpisy aplikacji są istotną częścią technologii Gatekeeper Apple. Gdy użytkownik próbuje otworzyć aplikację pobraną z internetu, Gatekeeper weryfikuje podpis aplikacji. Jeśli jest podpisana certyfikatem wydanym przez Apple dla znanego dewelopera i kod nie został zmodyfikowany, Gatekeeper zezwala na uruchomienie aplikacji. W przeciwnym razie blokuje aplikację i informuje użytkownika.
Począwszy od macOS Catalina, Gatekeeper sprawdza również, czy aplikacja została notaryzowana przez Apple, co dodaje dodatkową warstwę zabezpieczeń. Proces notaryzacji sprawdza aplikację pod kątem znanych problemów z bezpieczeństwem i złośliwego kodu, a jeśli te kontrole przejdą, Apple dodaje do aplikacji bilet, który Gatekeeper może zweryfikować.
Podczas sprawdzania niektórych przykładów złośliwego oprogramowania zawsze powinieneś sprawdzić podpis binarnego pliku, ponieważ deweloper, który go podpisał, może być już powiązany ze złośliwym oprogramowaniem.
Proces notaryzacji Apple'a służy jako dodatkowe zabezpieczenie chroniące użytkowników przed potencjalnie szkodliwym oprogramowaniem. Polega on na przesłaniu aplikacji przez dewelopera do zbadania przez Usługę Notarialną Apple'a, której nie należy mylić z Przeglądem Aplikacji. Ta usługa to automatyczny system, który dokładnie sprawdza przesłane oprogramowanie pod kątem złośliwej zawartości oraz wszelkich potencjalnych problemów z podpisywaniem kodu.
Jeśli oprogramowanie przejdzie tę inspekcję bez wzbudzania jakichkolwiek obaw, Usługa Notarialna generuje bilet notarialny. Deweloper jest następnie zobowiązany do dołączenia tego biletu do swojego oprogramowania, co nazywa się 'przyklejaniem'. Ponadto, bilet notarialny jest również publikowany online, gdzie Gatekeeper, technologia zabezpieczeń Apple'a, może go uzyskać.
Przy pierwszej instalacji lub uruchomieniu oprogramowania przez użytkownika, istnienie biletu notarialnego - czy to przyklejonego do pliku wykonywalnego, czy znalezionego online - informuje Gatekeeper, że oprogramowanie zostało notarialnie zatwierdzone przez Apple'a. W rezultacie, Gatekeeper wyświetla opisową wiadomość w początkowym oknie dialogowym uruchamiania, wskazując, że oprogramowanie przeszło kontrole pod kątem złośliwej zawartości przez Apple'a. Proces ten zwiększa zaufanie użytkowników do bezpieczeństwa oprogramowania, które instalują lub uruchamiają na swoich systemach.
Zauważ, że od wersji Sequoia, spctl
nie pozwala już na modyfikację konfiguracji Gatekeepera.
spctl
to narzędzie CLI do enumeracji i interakcji z Gatekeeperem (z demonem syspolicyd
za pośrednictwem wiadomości XPC). Na przykład, możliwe jest sprawdzenie statusu Gatekeepera za pomocą:
Zauważ, że kontrole podpisów GateKeepera są wykonywane tylko dla plików z atrybutem kwarantanny, a nie dla każdego pliku.
GateKeeper sprawdzi, czy zgodnie z preferencjami i podpisem binarka może być wykonana:
syspolicyd
jest głównym demonem odpowiedzialnym za egzekwowanie Gatekeepera. Utrzymuje bazę danych znajdującą się w /var/db/SystemPolicy
i można znaleźć kod wspierający bazę danych tutaj oraz szablon SQL tutaj. Zauważ, że baza danych nie jest ograniczona przez SIP i jest zapisywalna przez roota, a baza danych /var/db/.SystemPolicy-default
jest używana jako oryginalna kopia zapasowa w przypadku uszkodzenia innej.
Ponadto, pakiety /var/db/gke.bundle
i /var/db/gkopaque.bundle
zawierają pliki z regułami, które są wstawiane do bazy danych. Możesz sprawdzić tę bazę danych jako root za pomocą:
syspolicyd
udostępnia również serwer XPC z różnymi operacjami, takimi jak assess
, update
, record
i cancel
, które są również dostępne za pomocą Security.framework
's SecAssessment*
API, a xpctl
faktycznie komunikuje się z syspolicyd
za pośrednictwem XPC.
Zauważ, jak pierwsza zasada kończy się na "App Store", a druga na "Developer ID" oraz że w poprzednim obrazie było włączone wykonywanie aplikacji z App Store i zidentyfikowanych deweloperów. Jeśli zmodyfikujesz to ustawienie na App Store, zasady "Notarized Developer ID" znikną.
Istnieją również tysiące zasad typu GKE:
Te hashe pochodzą z:
/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth
/var/db/gke.bundle/Contents/Resources/gk.db
/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db
Lub możesz wymienić poprzednie informacje za pomocą:
Opcje --master-disable
i --global-disable
narzędzia spctl
całkowicie wyłączą te kontrole podpisów:
Kiedy jest całkowicie włączona, pojawi się nowa opcja:
Można sprawdzić, czy aplikacja będzie dozwolona przez GateKeeper za pomocą:
Możliwe jest dodanie nowych reguł w GateKeeper, aby zezwolić na uruchamianie niektórych aplikacji za pomocą:
Regarding kernel extensions, the folder /var/db/SystemPolicyConfiguration
contains files with lists of kexts allowed to be loaded. Moreover, spctl
has the entitlement com.apple.private.iokit.nvram-csr
because it's capable of adding new pre-approved kernel extensions which need to be saved also in NVRAM in a kext-allowed-teams
key.
Upon downloading an application or file, specific macOS applications such as web browsers or email clients attach an extended file attribute, commonly known as the "quarantine flag," to the downloaded file. This attribute acts as a security measure to mark the file as coming from an untrusted source (the internet), and potentially carrying risks. However, not all applications attach this attribute, for instance, common BitTorrent client software usually bypasses this process.
Obecność flagi kwarantanny sygnalizuje funkcję zabezpieczeń Gatekeeper w macOS, gdy użytkownik próbuje wykonać plik.
In the case where the quarantine flag is not present (as with files downloaded via some BitTorrent clients), Gatekeeper's checks may not be performed. Thus, users should exercise caution when opening files downloaded from less secure or unknown sources.
Sprawdzanie ważności podpisów kodu jest zasobożernym procesem, który obejmuje generowanie kryptograficznych hashy kodu i wszystkich jego powiązanych zasobów. Ponadto, sprawdzanie ważności certyfikatu wiąże się z przeprowadzeniem sprawdzenia online na serwerach Apple, aby zobaczyć, czy został on unieważniony po jego wydaniu. Z tych powodów, pełne sprawdzenie podpisu kodu i notaryzacji jest niepraktyczne do przeprowadzenia za każdym razem, gdy aplikacja jest uruchamiana.
Therefore, these checks are only run when executing apps with the quarantined attribute.
Ten atrybut musi być ustawiony przez aplikację tworzącą/pobierającą plik.
Jednak pliki, które są w piaskownicy, będą miały ten atrybut ustawiony dla każdego pliku, który tworzą. A aplikacje, które nie są w piaskownicy, mogą ustawić go same lub określić klucz LSFileQuarantineEnabled w Info.plist, co spowoduje, że system ustawi rozszerzony atrybut com.apple.quarantine
na tworzonych plikach,
Moreover, all files created by a process calling qtn_proc_apply_to_self
are quarantined. Or the API qtn_file_apply_to_path
adds the quarantine attribute to a specified file path.
It's possible to check it's status and enable/disable (root required) with:
Możesz również sprawdzić, czy plik ma rozszerzony atrybut kwarantanny za pomocą:
Sprawdź wartość rozszerzonych atrybutów i znajdź aplikację, która zapisała atrybut kwarantanny za pomocą:
Właściwie proces "może ustawić flagi kwarantanny dla plików, które tworzy" (już próbowałem zastosować flagę USER_APPROVED w utworzonym pliku, ale nie została zastosowana):
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)