macOS XPC Connecting Process Check
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)
Gdy nawiązywane jest połączenie z usługą XPC, serwer sprawdzi, czy połączenie jest dozwolone. Oto kontrole, które zazwyczaj są przeprowadzane:
Sprawdź, czy proces łączący jest podpisany certyfikatem podpisanym przez Apple (wydawanym tylko przez Apple).
Jeśli to nie jest zweryfikowane, atakujący może stworzyć fałszywy certyfikat, aby dopasować się do innej kontroli.
Sprawdź, czy proces łączący jest podpisany certyfikatem organizacji (weryfikacja ID zespołu).
Jeśli to nie jest zweryfikowane, dowolny certyfikat dewelopera z Apple może być użyty do podpisania i połączenia z usługą.
Sprawdź, czy proces łączący zawiera odpowiedni identyfikator pakietu.
Jeśli to nie jest zweryfikowane, każde narzędzie podpisane przez tę samą organizację może być użyte do interakcji z usługą XPC.
(4 lub 5) Sprawdź, czy proces łączący ma odpowiedni numer wersji oprogramowania.
Jeśli to nie jest zweryfikowane, stary, niebezpieczny klient, podatny na wstrzykiwanie procesów, może być użyty do połączenia z usługą XPC, nawet przy innych kontrolach.
(4 lub 5) Sprawdź, czy proces łączący ma wzmocniony czas działania bez niebezpiecznych uprawnień (jak te, które pozwalają na ładowanie dowolnych bibliotek lub używanie zmiennych środowiskowych DYLD).
Jeśli to nie jest zweryfikowane, klient może być podatny na wstrzykiwanie kodu.
Sprawdź, czy proces łączący ma uprawnienie, które pozwala mu połączyć się z usługą. To dotyczy binariów Apple.
Weryfikacja musi być oparta na tokenie audytu klienta zamiast na jego identyfikatorze procesu (PID), ponieważ ten pierwszy zapobiega atakom na ponowne użycie PID.
Deweloperzy rzadko używają tokena audytu w wywołaniach API, ponieważ jest on prywatny, więc Apple może zmienić go w dowolnym momencie. Dodatkowo, użycie prywatnych API nie jest dozwolone w aplikacjach Mac App Store.
Jeśli używana jest metoda processIdentifier
, może być podatna.
xpc_dictionary_get_audit_token
powinno być używane zamiast xpc_connection_get_audit_token
, ponieważ to ostatnie może być również podatne w pewnych sytuacjach.
Aby uzyskać więcej informacji na temat ataku ponownego użycia PID, sprawdź:
macOS PID ReuseAby uzyskać więcej informacji o ataku xpc_connection_get_audit_token
, sprawdź:
Trustcache to metoda obronna wprowadzona w maszynach Apple Silicon, która przechowuje bazę danych CDHSAH binariów Apple, aby tylko dozwolone, niezmodyfikowane binaria mogły być wykonywane. Co zapobiega wykonywaniu wersji downgrade.
Serwer zaimplementuje tę weryfikację w funkcji o nazwie shouldAcceptNewConnection
.
Obiekt NSXPCConnection ma prywatną właściwość auditToken
(ta, która powinna być używana, ale może się zmienić) oraz publiczną właściwość processIdentifier
(ta, która nie powinna być używana).
Proces łączący można zweryfikować za pomocą czegoś takiego:
Jeśli deweloper nie chce sprawdzać wersji klienta, może przynajmniej sprawdzić, że klient nie jest podatny na wstrzykiwanie procesów:
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)