macOS XPC Connecting Process Check
Sprawdzanie procesu łączącego się z XPC
Gdy nawiązywane jest połączenie z usługą XPC, serwer sprawdzi, czy połączenie jest dozwolone. Oto zwykle wykonywane sprawdzenia:
Sprawdzenie, czy łączący się proces jest podpisany certyfikatem Apple (wydanym tylko przez Apple).
Jeśli to nie zostanie zweryfikowane, atakujący może stworzyć fałszywy certyfikat, aby dopasować się do innych sprawdzeń.
Sprawdzenie, czy łączący się proces jest podpisany certyfikatem organizacji (weryfikacja identyfikatora zespołu).
Jeśli to nie zostanie zweryfikowane, dowolny certyfikat dewelopera od Apple może być używany do podpisania i połączenia z usługą.
Sprawdzenie, czy łączący się proces zawiera właściwy identyfikator pakietu.
Jeśli to nie zostanie zweryfikowane, dowolne narzędzie podpisane przez tę samą organizację może być używane do interakcji z usługą XPC.
(4 lub 5) Sprawdzenie, czy łączący się proces ma właściwy numer wersji oprogramowania.
Jeśli to nie zostanie zweryfikowane, stare, podatne klienty, podatne na wstrzykiwanie procesów, mogą być używane do połączenia z usługą XPC, nawet jeśli inne sprawdzenia są włączone.
(4 lub 5) Sprawdzenie, czy łączący się proces ma zabezpieczony czas wykonania bez niebezpiecznych uprawnień (takich jak te, które pozwalają na ładowanie dowolnych bibliotek lub korzystanie z zmiennych środowiskowych DYLD)
Jeśli to nie zostanie zweryfikowane, klient może być podatny na wstrzykiwanie kodu.
Sprawdzenie, czy łączący się proces ma uprawnienie, które pozwala mu na połączenie się z usługą. Dotyczy to binarnych plików Apple.
Weryfikacja musi być oparta na tokenie audytu klienta łączącego się zamiast na jego identyfikatorze procesu (PID), ponieważ to pierwsze zapobiega atakowi ponownego wykorzystania PID.
Deweloperzy rzadko korzystają z wywołania API tokena audytu, ponieważ jest ono prywatne, więc Apple może je zmienić w dowolnym momencie. Ponadto, korzystanie z prywatnego interfejsu API nie jest dozwolone w aplikacjach Mac App Store.
Jeśli używana jest metoda
processIdentifier
, może być podatnaZamiast
xpc_connection_get_audit_token
należy używaćxpc_dictionary_get_audit_token
, ponieważ ta ostatnia może również być podatna w określonych sytuacjach.
Ataki komunikacyjne
Aby uzyskać więcej informacji na temat ataku ponownego wykorzystania PID, sprawdź:
pagemacOS PID ReuseAby uzyskać więcej informacji na temat ataku xpc_connection_get_audit_token
, sprawdź:
Zapobieganie atakom na obniżenie wersji Trustcache
Trustcache to metoda obronna wprowadzona w maszynach Apple Silicon, która przechowuje bazę danych CDHSAH binarnych plików Apple, dzięki czemu można uruchamiać tylko dozwolone, niezmodyfikowane wersje. Zapobiega to wykonywaniu obniżonych wersji.
Przykłady kodu
Serwer będzie implementował 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ć przy użyciu czegoś takiego jak:
Jeśli programista nie chce sprawdzać wersji klienta, może przynajmniej sprawdzić, czy klient nie jest podatny na wstrzykiwanie procesu:
Last updated