<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? A może chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud)
Ograniczenia uruchamiania w macOS zostały wprowadzone w celu zwiększenia bezpieczeństwa poprzez **regulowanie, jak, kto i z jakiego miejsca może zostać uruchomiony proces**. Wprowadzone w macOS Ventura, zapewniają one ramy, które kategoryzują **każdy binarny systemowy do odrębnych kategorii ograniczeń**, zdefiniowanych w **pamięci podręcznej zaufania**, która zawiera binarne systemowe i ich odpowiednie skróty. Ograniczenia te dotyczą każdego wykonywalnego pliku binarnego w systemie i obejmują zestaw **reguł**, które określają wymagania dotyczące **uruchamiania danego pliku binarnego**. Reguły obejmują ograniczenia własne, które musi spełnić dany plik binarny, ograniczenia rodzica, które muszą być spełnione przez proces nadrzędny, oraz ograniczenia odpowiedzialności, które muszą być przestrzegane przez inne istotne podmioty.
Mechanizm ten dotyczy również aplikacji firm trzecich poprzez **Ograniczenia środowiskowe**, wprowadzone od macOS Sonoma, które umożliwiają programistom ochronę ich aplikacji poprzez określenie **zbioru kluczy i wartości dla ograniczeń środowiskowych**.
Definiujesz **ograniczenia uruchamiania i bibliotek** w słownikach ograniczeń, które zapisujesz w plikach **właściwości `launchd`**, lub w **oddzielnych plikach** właściwości, które używasz w podpisach kodu.
Kiedy proces próbuje uruchomić inny proces - poprzez wywołanie `execve(_:_:_:)` lub `posix_spawn(_:_:_:_:_:_:)` - system operacyjny sprawdza, czy **plik wykonywalny** spełnia **własne ograniczenia**. Sprawdza również, czy **plik wykonywalny procesu nadrzędnego** spełnia ograniczenia **rodzica pliku wykonywalnego**, oraz czy **plik wykonywalny procesu odpowiedzialnego** spełnia ograniczenia **pliku wykonywalnego odpowiedzialnego procesu**. Jeśli któreś z tych ograniczeń uruchamiania nie zostanie spełnione, system operacyjny nie uruchamia programu.
[**Fakty, które może wykorzystać LC, są udokumentowane**](https://developer.apple.com/documentation/security/defining\_launch\_environment\_and\_library\_constraints). Na przykład:
* is-init-proc: Wartość logiczna wskazująca, czy plik wykonywalny musi być procesem inicjalizacji systemu operacyjnego (`launchd`).
* is-sip-protected: Wartość logiczna wskazująca, czy plik wykonywalny musi być plikiem chronionym przez System Integrity Protection (SIP).
*`on-authorized-authapfs-volume:` Wartość logiczna wskazująca, czy system operacyjny załadował plik wykonywalny z autoryzowanego, uwierzytelnionego woluminu APFS.
*`on-authorized-authapfs-volume`: Wartość logiczna wskazująca, czy system operacyjny załadował plik wykonywalny z autoryzowanego, uwierzytelnionego woluminu APFS.
* Wolumin Cryptexes
*`on-system-volume:` Wartość logiczna wskazująca, czy system operacyjny załadował plik wykonywalny z obecnie uruchomionego woluminu systemowego.
* **Kategorie LC dla iOS 16** zostały [**odwrócone i udokumentowane tutaj**](https://gist.github.com/LinusHenze/4cd5d7ef057a144cda7234e2c247c056).
* Obecne **kategorie LC (macOS 14** - Somona) zostały odwrócone, a ich [**opisy można znaleźć tutaj**](https://gist.github.com/theevilbit/a6fef1e0397425a334d064f7b6e1be53).
Więcej informacji [**o tym tutaj**](https://theevilbit.github.io/posts/launch\_constraints\_deep\_dive/#reversing-constraints), ale w skrócie, są one zdefiniowane w **AMFI (AppleMobileFileIntegrity)**, więc musisz pobrać zestaw narzędzi do rozwoju jądra, aby uzyskać **KEXT**. Symbole zaczynające się od **`kConstraintCategory`** są tymi **interesującymi**. Wyodrębniając je, otrzymasz zakodowany strumień DER (ASN.1), który będziesz musiał zdekodować za pomocą [ASN.1 Decoder](https://holtstrom.com/michael/tools/asn1decoder.php) lub biblioteki python-asn1 i jej skryptu `dump.py`, [andrivet/python-asn1](https://github.com/andrivet/python-asn1/tree/master), co da ci bardziej zrozumiały ciąg znaków.
To są ustawione Ograniczenia Uruchamiania skonfigurowane w **aplikacjach innych firm**. Deweloper może wybrać **fakty** i **operandy logiczne**, które będą używane w jego aplikacji do ograniczenia dostępu do niej.
W przypadku systemu macOS działającego na urządzeniach Apple Silicon, jeśli podpisany przez Apple plik binarny nie znajduje się w pamięci podręcznej zaufania, AMFI odmówi jego wczytania.
(Inną opcją może być użycie narzędzia [**img4tool**](https://github.com/tihmstar/img4tool), które będzie działać nawet na M1, nawet jeśli wersja jest stara i dla x86\_64, jeśli zainstalujesz je w odpowiednich lokalizacjach).
Na podstawie tych danych możesz sprawdzić aplikacje o **wartości ograniczeń uruchamiania `0`**, które nie są ograniczone ([**sprawdź tutaj**](https://gist.github.com/LinusHenze/4cd5d7ef057a144cda7234e2c247c056), co oznacza każda wartość).
Ograniczenia uruchamiania mogłyby złagodzić wiele starszych ataków, **zapewniając, że proces nie zostanie uruchomiony w nieoczekiwanych warunkach**: na przykład z nieoczekiwanych lokalizacji lub wywołany przez nieoczekiwany proces nadrzędny (jeśli tylko launchd powinien go uruchamiać).
Jednakże, **nie łagodzą powszechnych nadużyć XPC**, wstrzykiwania kodu **Electron** ani wstrzykiwania bibliotek **dylib bez weryfikacji biblioteki** (chyba że znane są identyfikatory zespołów, które mogą ładować biblioteki).
W wydaniu Sonoma istotnym punktem jest **konfiguracja odpowiedzialności** usługi XPC demona. Usługa XPC jest odpowiedzialna za siebie, a nie za klienta łączącego się z nią. Jest to udokumentowane w raporcie zwrotnym FB13206884. Taka konfiguracja może wydawać się wadliwa, ponieważ umożliwia pewne interakcje z usługą XPC:
- **Uruchamianie usługi XPC**: Jeśli założyć, że jest to błąd, taka konfiguracja nie pozwala na uruchomienie usługi XPC za pomocą kodu atakującego.
- **Łączenie z aktywną usługą**: Jeśli usługa XPC jest już uruchomiona (może być aktywowana przez swoją pierwotną aplikację), nie ma żadnych barier dla połączenia z nią.
Choć wprowadzenie ograniczeń dla usługi XPC może być korzystne, **skracając okno potencjalnych ataków**, nie rozwiązuje to podstawowego problemu. Zapewnienie bezpieczeństwa usługi XPC wymaga przede wszystkim **efektywnej weryfikacji klienta łączącego się**. To jest jedyny sposób na wzmocnienie bezpieczeństwa usługi. Warto również zauważyć, że wspomniana konfiguracja odpowiedzialności jest obecnie funkcjonalna, co może nie być zgodne z zamierzonym projektem.
Nawet jeśli wymagane jest, aby aplikacja była **otwierana przez LaunchService** (w ograniczeniach rodzica), można to osiągnąć za pomocą polecenia **`open`** (które może ustawiać zmienne środowiskowe) lub za pomocą interfejsu API **Launch Services** (gdzie można wskazać zmienne środowiskowe).
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? A może chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud)