Red Teaming macOS 101
Ten post obejmuje podstawowe koncepcje bezpieczeństwa systemu macOS i, miejmy nadzieję, służy jako wprowadzenie do czerwonych zespołów środowisk macOS.
Omówione tematy
- Omówienie zabezpieczeń systemu macOS
— Gatekeeper i XProtect
— Wzmocnione środowisko wykonawcze
— Ochrona integralności systemu (SIP)
— Przejrzystość, zgoda i kontrola (TCC)
— Piaskownica macOS
— Pęk kluczy - Ładunki i trwałość dostępu początkowego
— Pakiety aplikacji
— Pakiety instalacyjne
— Obrazy dysków (DMG) - Eskalacja uprawnień i wykorzystanie po wykorzystaniu
— Świadomość sytuacyjna
— Kradzież plików cookie
— Monitorowanie schowka
— Wstrzykiwanie kodu
— Ładowanie Mach-O w pamięci
Nic w tym poście nie jest „nowym” badaniem, ale zamiast tego skonsolidowane informacje na powyższe tematy, z poniższych zasobów, w jednym miejscu dla łatwiejszego czytania i wprowadzania.
- Blogi
- Patrick Wardle/Objective See
- Adam Chester
- Justin Bui
- Csaba Fitzl
- Wojciech Reguła
- Cedric Owens
- Chris Ross
- Leo Pitt - Filmy
— DEFCON 29: Red Teaming macOS Cedrica Owensa
— OBTS Cody'ego Thomasa: macOS Red Teaming
— X33fcon Wojciecha Reguły: Red Teaming macOS
— OBTS Cody'ego Thomasa: Otwieranie zamka w pęku kluczy macOS - Książki/kursy
— The Art of Mac — Patrick Wardle — Złośliwe oprogramowanie
— OSMR firmy Offensive Security - Odniesienie do wszystkiego w jednym
— Awesome-macOS-Red-Teaming
Gatekeeper i XProtect
Gatekeeper to mechanizm bezpieczeństwa zaprojektowany tak, aby zezwalał na uruchamianie tylko zaufanych aplikacji w systemach, podobnie jak SmartScreen i MOTW w systemie Windows. Gdy pliki wykonywalne są pobierane z Internetu, są one oznaczane atrybutem com.apple.quarantine, który uruchamia strażnika po uruchomieniu pliku.
Jeśli plik wykonywalny jest poświadczony notarialnie, Gatekeeper weryfikuje sygnaturę kodu pliku i wyświetla użytkownikowi monit o potwierdzenie chęci uruchomienia pliku.
Jeśli plik wykonywalny nie jest poświadczony notarialnie, Gatekeeper wyświetli monit użytkownikowi, informując go, że plik nie może zostać uruchomiony, ponieważ jest niepodpisany. Aby uruchomić niepodpisane pliki wykonywalne, użytkownik musi kliknąć plik prawym przyciskiem myszy, a następnie kliknąć Otwórz, zamiast klikać dwukrotnie.
Po weryfikacji sygnatury kodu XProtect, który jest wbudowanym antywirusem systemu macOS, przeskanuje plik w poszukiwaniu złośliwego oprogramowania. XProtect wykorzystuje reguły YARA, które można znaleźć za pośrednictwem locate XProtect.yarai które są w większości bezużyteczne, chyba że korzystasz z domyślnych ładunków Metasploit. Ponadto XProtect skanuje w poszukiwaniu złośliwego oprogramowania tylko pod trzema warunkami
- Plik jest uruchamiany po raz pierwszy
- Hash pliku uległ zmianie
- Zasady YARA XProtect zostały zaktualizowane
Utwardzony czas pracy
Wzmocnione środowisko wykonawcze to funkcja, którą można włączyć w aplikacjach w celu ochrony przed wstrzyknięciem kodu poprzez przejęcie dylib, zmienne środowiskowe i wstrzyknięcie portu zadań. Jednym z przykładów tego, jak ulepszone środowisko wykonawcze chroni przed wstrzyknięciem, jest wymaganie, aby każda biblioteka dylib ładowana do procesu była podpisana tym samym certyfikatem, co sama aplikacja. To oczywiście powoduje problemy, gdy aplikacja musi załadować biblioteki dylib innych firm, dlatego aplikacje mogą mieć pewne uprawnienia do usunięcia niektórych z tych ograniczeń.
Możemy wyświetlić listę uprawnień do aplikacji za pomocą codesign -d --entitlements :- <file>polecenia list_entitlementsPoseidon, a jeśli którykolwiek z poniższych elementów jest obecny, być może uda nam się wstrzyknąć do aplikacji:
- Upoważnienie
com.apple.security.cs.disable-library-validationumożliwia załadowanie do procesu dowolnej biblioteki dylib, podpisanej lub niepodpisanej. W zależności od lokalizacji bibliotek dylib, które ładuje aplikacja, może to otworzyć drzwi do przejęcia kontroli nad biblioteką. - Uprawnienie
com.apple.security.cs.allow-dyld-environment-variablesumożliwia ładowanie bibliotek dylib zeDYLD_INSERT_LIBRARIESzmiennej środowiskowej. Jednak samo to uprawnienie nie usuwa wspomnianych wcześniej wymagań dotyczących podpisywania kodu. Jeśli to uprawnienie jest obecne wraz z uprawnieniem do sprawdzania poprawności wyłączenia biblioteki, możesz wstrzyknąć do aplikacji podobnieDYLD_INSERT_LIBRARIES=malicious.dylib ./appjakLD_PRELOADw systemie Linux. - Uprawnienie
com.apple.security.get-task-allowumożliwia innym aplikacjom uzyskanie portu zadania Twojej aplikacji, co jest podobne do uzyskiwania uchwytu do procesu w systemie Windows. Należy zauważyć, że aby uzyskać dostęp do portu zadania, twój kod musi działać jako root. Dzięki portowi zadań możesz następnie wykonać klasyczne wstrzyknięcie procesu poprzez napisanie kodu powłoki i utworzenie wątku.
Ochrona integralności systemu (SIP)
SIP znany jako „bez rootowania” chroni pliki systemowe przed modyfikacjami. Zasadniczo nawet jako użytkownik root nie możemy zmieniać niektórych plików systemowych, takich jak pliki wykonywalne w /bin/. Pliki chronione przez SIP można zidentyfikować za pomocą restrictedflagi.
SIP można wyłączyć przez csrutil disable, jednak wymaga to ponownego uruchomienia urządzenia w trybie odzyskiwania, dlatego zwykle nie wchodzi to w rachubę z perspektywy czerwonego zespołu.
Przejrzystość, zgoda i kontrola (TCC)
TCC to funkcja ochrony prywatności systemu macOS zaimplementowana w wersji 10.14+, która monituje użytkownika o jawne przyznanie uprawnień, gdy aplikacja próbuje uzyskać dostęp do określonych zasobów, takich jak kamera i określone foldery, w tym , , Desktoporaz Downloadsdyski Documents/woluminy.
Próba uzyskania dostępu do zasobu chronionego przez TCC bez uprawnień może doprowadzić do przypadkowego wygenerowania monitu, powiadomienia użytkownika o Twojej obecności, a ostatecznie do zakończenia zaangażowania wcześniej niż oczekiwano. Poniżej znajduje się kilka przydatnych plików, które nie są chronione przez TCC:
- Ukryte pliki i foldery w katalogu domowym —
~/.aws/*,~/.ssh/*,~/.bash_history,~/.zsh_history - Dane aplikacji użytkownika —
~/Library/Application Support/* - pliki cookies —
~/Library/Application Support/Google/Chrome/Default/Cookies,~/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/Cookies
Baza danych TCC użytkownika wymaga pełnego dostępu do dysku (FDA) do interakcji, jednak jeśli możemy z nią wchodzić w interakcje, możemy ją zmodyfikować, aby zapewnić sobie dostęp do innych zasobów. Możemy sprawdzić, czy mamy FDA bez pytania użytkownika, sprawdzając filebazę danych TCC użytkownika.
Obwodnice TCC nie są szczególnie „rzadkie” i polecam sprawdzanie bloga Csaby Fitzl, aby być na bieżąco ze starymi i nowymi obwodnicami.
Piaskownica macOS
Piaskownica macOS to funkcja, z której programiści mogą korzystać w swoich aplikacjach, jeśli zostały wydane poza App Store, i jest obowiązkowa dla wszystkich aplikacji pobranych bezpośrednio z App Store. Aplikacje, które zdecydowały się na funkcję piaskownicy, będą miały uprawnienia com.apple.security.app-sandboxi, jak sama nazwa wskazuje, zmuszą je do działania w piaskownicy. Aplikacje działające w piaskownicy mają bardzo ograniczony dostęp do systemu, np. możliwość odczytu lub zapisu plików na dysku. Z tego powodu niektóre ścieżki ataków na macOS, takie jak phishing za pośrednictwem makr, nie są kuszące. Ponieważ aplikacje Microsoft Office dołączają do piaskownicy i zapobiegają utrzymywaniu się i grabieży.
Brelok do kluczy
Pęk kluczy można porównać do LSASS w systemie Windows i zawiera on tajemnice, takie jak hasła i klucze do aplikacji. Na przykład aplikacja może szyfrować pliki, które przechowuje na dysku, a klucz odszyfrowywania tych plików jest przechowywany w pęku kluczy. Pęk kluczy systemowych można znaleźć pod adresem, /Library/Keychains/System.keychaina pęk kluczy użytkownika pod adresem ~/Library/Keychains/login.keychain-db.
Możesz pobrać pęk kluczy użytkownika, chociaż zawarte w nim sekrety zostaną zaszyfrowane hasłem użytkownika. W zależności od tego, czy masz hasło użytkownika, możesz wykorzystać Chainbreaker do wydobycia tajemnic lub zrzucenia skrótu hasła pęku kluczy --dump-keychain-password-hashdo formatu hashcat, który jest bardzo wolny do złamania.
Wreszcie, każdy wpis w pęku kluczy ma powiązane listy ACL i uprawnienia, które można przeglądać w aplikacji Dostęp do pęku kluczy. Zaufane aplikacje to aplikacje, które mogą wykonywać operacje na wpisie pęku kluczy bez pytania użytkownika. Listę tę można znaleźć na karcie „Kontrola dostępu”, a interesującym przypadkiem jest sytuacja, w której lista ma wartość „NULL”, co oznacza, że wszystkie aplikacje są zaufane, a nie mylić z pustą listą, która po prostu oznacza, że żadne aplikacje nie są zaufane.
Jeśli działasz w kontekście zaufanej aplikacji lub lista ma wartość NULL i masz dowolne z poniższych uprawnień, możesz wyodrębnić tajne informacje bez pytania użytkownika:
- ACLAuthorizationDecrypt
- ACLAuthorizationExportClear
- ACLAuthorizationExportWrapped
- ACLAautoryzacjaDowolna
Ładunki i trwałość dostępu początkowego
Jeśli chcesz dowiedzieć się więcej o typach ładunków dla systemu macOS alternatywnych do tych wymienionych poniżej, polecam zapoznanie się z projektem Mystikal i powiązanym postem na blogu .
Ponadto należy zauważyć, że produkty EDR w systemie macOS nie są dojrzałe i zasadniczo działają tylko jako produkt do rejestrowania. Dlatego zazwyczaj możesz użyć dowolnego domyślnego agenta C2 oprócz Metasploit i nie musisz się martwić, że EDR przechwyci Twój ładunek.
Pakiety aplikacji
Pakiety aplikacji (.app) są jednymi z najpopularniejszych typów programów i są formatem, w jakim wydawane jest prawie całe oprogramowanie użytkownika końcowego. Pakiety aplikacji są przechowywane /Applications/i wyświetlane po kliknięciu Launchpada. Odwołując się do dokumentacji firmy Apple , minimalny pakiet aplikacji ma zazwyczaj następującą strukturę:
AppName.app/
Contents/
Info.plist # App config info
MacOS/ # Contains the app's executable file
Resources/ # Fonts, images, sounds, icons, etc.
1 — Utwórz strukturę folderów pakietu aplikacji
mkdir FakeZoom.app
mkdir FakeZoom.app/Contents
touch FakeZoom.app/Contents/Info.plist
mkdir FakeZoom.app/Contents/MacOS
mkdir FakeZoom.app/Contents/Resources
Następnie, ponieważ zarówno komputery Mac Intel, jak i Silicon są teraz powszechne, możemy utworzyć ładunek zarówno AMD, jak i ARM Poseidon, a następnie połączyć je w uniwersalny Mach-O, który może działać na dowolnej architekturze za pośrednictwem, a następnie umieścić go w lipo -create <arm-payload> <amd-payload> -output <universal-payload>katalogu MacOS.
3 - Utwórz Info.plistplik.
Odnosząc się do dokumentów programistycznych Apple, musimy określić kilka kluczy:
- CFBundleExecutable — Nazwa głównego pliku wykonywalnego w katalogu MacOS (PoseidonPayload)
- CFBundleIconFile — Nazwa obrazu aplikacji (ZoomImageForPayload)
- CFBundleIdentifier — Ciąg, który jednoznacznie identyfikuje Twoją aplikację w systemie (com.examplepayload.Zoom)
- CFBundleName — Nazwa Twojej aplikacji (FakeZoom)
- CFBundleVersion — Numer wersji kompilacji Twojej aplikacji (1.0.0)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>PoseidonPayload</string>
<key>CFBundleIconFile</key>
<string>ZoomImageForPayload</string>
<key>CFBundleIdentifier</key>
<string>com.examplepayload.Zoom</string>
<key>CFBundleName</key>
<string>FakeZoom</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
</dict>
</plist>
Ponieważ tworzymy fałszywą aplikację Zoom, możemy po prostu skopiować plik icns Zoom z katalogu /Applications/(jeśli jest zainstalowany) do Resources/ZoomImageForPayload, jednak możesz alternatywnie użyć dowolnej ikony.
Pakiety instalacyjne
Pakiety instalacyjne (.pkg) to archiwa xar i inny popularny typ programów widziany, gdy oprogramowanie musi być zainstalowane z uprawnieniami roota. Podczas gdy pakiety instalatora mogą zawierać główny ładunek do uruchomienia po otwarciu, alternatywą jest wykorzystanie skryptów „przed instalacją” i „po instalacji”, co sugeruje nazwa, uruchomi skrypt przed i po instalacji.
W tym przykładzie utworzymy pakiet instalacyjny, który użyje tych skryptów do zarejestrowania LaunchDaemona w celu trwałości jako użytkownik root po otwarciu.
1 - Utwórz strukturę folderów pakietu instalatora
mkdir scripts
mkdir scripts/files
touch scripts/preinstall
touch scripts/postinstall
chmod +x scripts/preinstall
chmod +x scripts/postinstall
2 - Utwórz plik plist, aby zarejestrować się jako LaunchDaemon
W tym pliku plist jest naprawdę potrzebna tylko jedna wartość, która ProgramArgumentszasadniczo określa, co ma zostać uruchomione po uruchomieniu LaunchDaemon.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.examplepayload.persistence</string>
<key>ProgramArguments</key>
<array>
<string>/Library/Application Support/PoseidonPayload</string>
</array>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
3 - Utwórz skrypty przed i poinstalacyjne
Te skrypty są zwykłymi skryptami basha, jednak muszą zaczynać się #!/bin/bashi kończyć na exit 0. Użyjemy skryptu przedinstalacyjnego, aby skopiować nasz plist i ładunek do właściwych lokalizacji na dysku, a następnie skryptu poinstalacyjnego, aby zarejestrować LaunchDaemona.
#!/bin/bash
cp files/PoseidonPayload "/Library/Application Support/PoseidonPayload"
cp files/com.examplepayload.persistence.plist "/Library/LaunchDaemons/com.examplepayload.persistence.plist"
exit 0
#!/bin/bash
launchctl load "/Library/LaunchDaemons/com.examplepayload.persistence.plist"
exit 0
Aby utworzyć pakiet instalacyjny z tych skryptów, możemy po prostu uruchomićpkgbuild --identifier <identifier> --nopayload --scripts <path to scripts folder> <output>.pkg
Możemy zwolnić LaunchDaemona, uruchamiając launchctl unload com.examplepayload.persistence.plisti należy zauważyć, że upuszczenie ładunku do /Library/Application Support/było czysto preferencją i można go upuścić gdzie indziej.
LaunchDaemony reprezentują tylko jedną formę trwałości w systemie macOS, a jeśli interesują Cię inne formy, polecam zajrzeć na blog SentinelOne .
Obrazy dysków (DMG)
DMG to skompresowane woluminy, które mogą zawierać inne formaty ładunku. Zaletą dostarczania ładunku w pliku DMG jest to, że można dodawać elementy graficzne, aby pomóc w socjotechnice, aby użytkownik kliknął prawym przyciskiem myszy, a następnie otworzył swój ładunek, aby ominąć Gatekeepera, ponieważ sam DMG nie wywołuje Gatekeepera.
Aby zbudować naprawdę wyglądający DMG, musimy stworzyć niestandardowy obraz tła. Wolę wykorzystać legalne oprogramowanie lub tapetę firmową wraz z draw.io , ale możesz stworzyć własny, jak chcesz.
W tym demo poszedłem z tym obrazem jako podstawą i stworzyłem to:
Aby rozpocząć, możemy utworzyć obraz dysku, otwierając Disk Utilityi wybierając „Plik”, a następnie „Nowy obraz”, a następnie „Pusty obraz…”
Możemy wybrać nazwę naszego woluminu, a następnie zmienić „Format” na „Mac OS Extended (Journaled)”.
Otwórz plik .dmg, który w moim przypadku to „example-payload.dmg”, a na pulpicie pojawi się wolumin, a następnie otwórz wolumin, który w moim przypadku jest „przykładem”. Aby wyświetlić ukryte pliki w systemie macOS, możesz kliknąć „[shift] + [command] + [kropka]”.
Przenieś swój obraz tła do woluminu /Volumes/<volume-name>/jako ukryty plik wraz z ładunkiem. W tym przykładzie możemy ponownie wykorzystać pakiet aplikacji z powyższej sekcji.
Następnie możemy kliknąć wolumin i wybrać „Widok”, a następnie „Pokaż opcje widoku”.
W sekcji „Tło” wybierz „Obraz”, a następnie kliknij dwukrotnie pole „Przeciągnij obraz tutaj”. Otworzy się nowe okno Findera i możesz wybrać obraz tła z poziomu woluminu. Jeśli nie wybierzesz obrazu zawartego w woluminie, może to spowodować błędy. Dodatkowo możemy zmienić rozmiar ikony za pomocą „Rozmiar ikony”.
Zmień rozmiar okna, aby dopasować je do tła i wyśrodkuj pakiet aplikacji.
Gdy jesteś zadowolony z układu, a okno Findera jest nadal otwarte, kliknij prawym przyciskiem myszy wolumin na pulpicie i kliknij „Wysuń”.
Otwórz ponownie Disk Utilityi wybierz „Obrazy”, a następnie „Konwertuj…”
Wybierz plik DMG, a następnie wybierz „Szyfrowanie: brak” i „Format obrazu: skompresowany”
Oczywiście to demo nie ma większego sensu, biorąc pod uwagę, że jest to tło Chrome z aplikacją Zoom (lol), jednak mam nadzieję, że rozumiesz, o co chodzi.
Ostatnią rzeczą, na którą należy zwrócić uwagę w odniesieniu do ładunków, jest to, że pliki pobrane za pośrednictwem przeglądarki będą zawierały atrybut com.apple.metadata:kMDItemWhereFroms, który zawiera listę miejsca, z którego plik został pobrany. Jeśli pobierasz ładunek Posejdona bezpośrednio z Mythic w przeglądarce przed spakowaniem go, może to doprowadzić do przypadkowego ujawnienia lokalizacji serwera zespołu. Możesz usunąć ten atrybut za pomocą xattr -d com.apple.metadata:kMDItemWhereFroms <file>.
Eskalacja uprawnień i wykorzystanie po zakończeniu
Ta sekcja nie wyczerpuje wszystkich czynności, które można wykonać po zdobyciu powłoki, i ma na celu przedstawienie jedynie ogólnego pojęcia post-ex w systemie macOS.
Świadomość sytuacyjna
Możesz zacząć od pewnych kontroli świadomości sytuacyjnej w systemie, uruchamiając HealthInspector lub SwiftBelt lub ręcznie przeglądając pliki konfiguracyjne. Wiele z tych plików będzie plikami plist w formacie binarnym i aby były czytelne, możesz użyć plików plutil. Niektóre interesujące pliki mogą być:
- Jakie aplikacje użytkownik ma w stacji dokującej? —
plutil -p ~/Library/Preferences/com.apple.dock.plist - Z jakimi plikami użytkownik ostatnio wchodził w interakcję? —
plutil -p ~/Library/Preferences/com.apple.finder.plist - Z jakiej wersji systemu macOS korzystasz? —
plutil -p /System/Library/CoreServices/SystemVersion.plist
Następnie możesz rozpocząć pobieranie z dysku niektórych plików, które nie są chronione przez TCC, w tym historii bash lub zsh użytkownika, kluczy ssh, kluczy chmurowych (AWS, GCP itp.), pęku kluczy i plików cookie.
Biorąc pod uwagę, że korzystasz z systemu macOS, prawdopodobnie organizacją, do której się zaangażujesz, może być firma technologiczna lub startup, a Slack jest często spotykany w tych środowiskach. Jeśli tak, możesz pobrać następujące pliki:
~/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/storage/root-state.json~/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/Cookies
Następnie możesz kierować reklamy na pliki cookie przeglądarki, w tym przykładzie użyjemy przeglądarki Google Chrome. Jeśli masz hasło użytkownika, które znalazłeś w historii bash lub zsh albo uruchomiłeś monit o hasło , możesz pobrać ~/Library/Application Support/Google/Chrome/Default/Cookiesi odszyfrować plik w trybie offline. Alternatywnie, jeśli nie masz hasła użytkownika, możesz użyć narzędzi, takich jak WhiteChocolateMacademiaNut , aby uruchomić Chrome z włączonym zdalnym debugowaniem, a następnie zrzucić pliki cookie przez gniazdo sieciowe. Ponownie, ponieważ mac EDR nie są dojrzałe, upuszczenie zniekształconych narzędzi na dysk nie powinno stanowić większego problemu.
Mając dostęp do plików cookie przeglądarki, możesz otworzyć SOCKS za pomocą wbudowanego polecenia Poseidona lub upuścić dłuto i przeglądać strony wewnętrzne. W szczególności możesz chcieć kierować reklamy na wewnętrzne witryny z dokumentacją, takie jak ich Confluence i ich wewnętrzne repozytoria kodu, aby znaleźć uprzywilejowane dane uwierzytelniające.
Monitorowanie schowka
W systemie macOS za każdym razem, gdy zmienia się zawartość schowka, licznik jest zwiększany, dzięki czemu możemy monitorować wartość licznika w odstępach czasu i pobierać zawartość schowka, jeśli uległa zmianie. Posejdon ma wbudowaną komendę clipboard_monitor, którą możemy w tym celu wykorzystać.
Kilka dodatkowych rzeczy do zapamiętania:
- Polecenie
clipboard_monitorfiltruje, aby pobrać tylko zwykły tekst, więc jeśli użytkownik skopiuje duży plik binarny do swojego schowka, nie musimy się martwić wysyłaniem dużych ilości ruchu przez nasz C2. - Użytkownik root nie ma dostępu do schowka, więc wszelkie narzędzia do monitorowania schowka muszą być uruchamiane w kontekście użytkownika.
Jak wspomniano wcześniej w części poświęconej wzmocnieniu środowiska wykonawczego, możliwość wstrzykiwania kodu do aplikacji jest przydatna z perspektywy czerwonego zespołu, ponieważ może potencjalnie zapewnić dodatkowe uprawnienia i dostęp do zasobów, których wcześniej nie posiadałeś.
Na przykład Twój początkowy ładunek może nie mieć dostępu do folderu Pobrane, jednak jeśli możesz wstrzyknąć do Chrome kod, który może mieć uprawnienia com.apple.security.files.downloads.read-write, będziesz mógł przeglądać folder Pobrane.
Aby znaleźć cele do wstrzyknięcia kodu, możesz uruchomić polecenie Poseidona, list_entitlementsktóre wyszuka uruchomione procesy z uprawnieniami wymienionymi w sekcji hardened runtime.
Stąd możesz następnie sprawdzić każdy proces, aby znaleźć potencjalny cel.
Inną formą wstrzykiwania kodu, o której wcześniej nie wspomniano, jest „przechwytywanie elektronów”, które jest obszernie omawiane przez Adama Chestera na tym blogu . Zasadniczo możesz wykorzystać ELECTRON_RUN_AS_NODEzmienną środowiskową, aby odrodzić proces jako dziecko aplikacji elektronowej, a ponieważ procesy potomne dziedziczą uprawnienia TCC swojego rodzica, możesz potencjalnie uzyskać ich uprawnienia.
Ładowanie Mach-O w pamięci
Chociaż zdecydowanie nie jest to potrzebne przy obecnym stanie EDR macOS, możliwe jest uruchamianie Mach-Os w pamięci. Interfejsy API używane do ładowania w pamięci różnią się w zależności od wersji systemu operacyjnego, więc nie będę tego omawiał, ale zamiast tego polecam sprawdzić post Justina Bui i post Adama Chestera .

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































