macOS Auto Start
Ta sekcja opiera się głównie na serii blogów Beyond the good ol' LaunchAgents, celem jest dodanie więcej lokalizacji automatycznego uruchamiania (jeśli to możliwe), wskazanie które techniki wciąż działają obecnie z najnowszą wersją macOS (13.4) i określenie uprawnień wymaganych.
Ominięcie piaskownicy
Tutaj znajdziesz lokalizacje startowe przydatne do omijania piaskownicy, które pozwalają po prostu wykonać coś, pisząc to do pliku i czekając na bardzo powszechne działanie, określoną ilość czasu lub działanie, które zazwyczaj można wykonać z wnętrza piaskownicy bez konieczności posiadania uprawnień root.
Launchd
Lokalizacje
/Library/LaunchAgents
Wywołanie: Ponowne uruchomienie
Wymagane uprawnienia root
/Library/LaunchDaemons
Wywołanie: Ponowne uruchomienie
Wymagane uprawnienia root
/System/Library/LaunchAgents
Wywołanie: Ponowne uruchomienie
Wymagane uprawnienia root
/System/Library/LaunchDaemons
Wywołanie: Ponowne uruchomienie
Wymagane uprawnienia root
~/Library/LaunchAgents
Wywołanie: Ponowne zalogowanie
~/Library/LaunchDemons
Wywołanie: Ponowne zalogowanie
Opis i Wykorzystanie
launchd
to pierwszy proces uruchamiany przez jądro OX S podczas uruchamiania i ostatni, który kończy działanie podczas wyłączania. Zawsze powinien mieć PID 1. Ten proces będzie czytał i wykonywał konfiguracje wskazane w plikach ASEP plists w:
/Library/LaunchAgents
: Agenci dla użytkownika zainstalowani przez administratora/Library/LaunchDaemons
: Demony na poziomie systemu zainstalowane przez administratora/System/Library/LaunchAgents
: Agenci dla użytkownika dostarczeni przez Apple./System/Library/LaunchDaemons
: Demony na poziomie systemu dostarczone przez Apple.
Gdy użytkownik loguje się, pliki plists znajdujące się w /Users/$USER/Library/LaunchAgents
i /Users/$USER/Library/LaunchDemons
są uruchamiane z uprawnieniami zalogowanych użytkowników.
Główną różnicą między agentami a demonami jest to, że agenci są ładowani podczas logowania użytkownika, a demony są ładowane podczas uruchamiania systemu (ponieważ istnieją usługi, takie jak ssh, które muszą być uruchomione przed dostępem jakiegokolwiek użytkownika do systemu). Ponadto agenci mogą korzystać z interfejsu graficznego, podczas gdy demony muszą działać w tle.
Istnieją przypadki, w których agent musi zostać uruchomiony przed zalogowaniem użytkownika, nazywane PreLoginAgents. Na przykład jest to przydatne do dostarczania technologii wspomagających podczas logowania. Mogą one być znalezione również w /Library/LaunchAgents
(zobacz tutaj przykład).
Nowe pliki konfiguracyjne Daemons lub Agents zostaną załadowane po następnym ponownym uruchomieniu lub używając launchctl load <target.plist>
. Jest również możliwe załadowanie plików .plist bez tego rozszerzenia za pomocą launchctl -F <file>
(jednak te pliki plist nie będą automatycznie ładowane po ponownym uruchomieniu).
Możliwe jest również odładowanie za pomocą launchctl unload <target.plist>
(proces wskazany przez niego zostanie zakończony).
Aby upewnić się, że nie ma niczego (jak nadpisanie), co uniemożliwia uruchomienie Agenta lub Daemona, uruchom: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist
Wypisz wszystkie agenty i demony załadowane przez bieżącego użytkownika:
Jeśli plik plist jest własnością użytkownika, nawet jeśli znajduje się w folderach systemowych demona, zadanie zostanie wykonane jako użytkownik, a nie jako root. Może to zapobiec niektórym atakom eskalacji uprawnień.
pliki uruchamiania powłoki
Writeup: https://theevilbit.github.io/beyond/beyond_0001/ Writeup (xterm): https://theevilbit.github.io/beyond/beyond_0018/
Przydatne do ominięcia piaskownicy: ✅
Ominięcie TCC: ✅
Ale musisz znaleźć aplikację z ominięciem TCC, która wykonuje powłokę, która wczytuje te pliki
Lokalizacje
~/.zshrc
,~/.zlogin
,~/.zshenv.zwc
,~/.zshenv
,~/.zprofile
Wywołanie: Otwórz terminal z zsh
/etc/zshenv
,/etc/zprofile
,/etc/zshrc
,/etc/zlogin
Wywołanie: Otwórz terminal z zsh
Wymagane uprawnienia roota
~/.zlogout
Wywołanie: Zamknij terminal z zsh
/etc/zlogout
Wywołanie: Zamknij terminal z zsh
Wymagane uprawnienia roota
Potencjalnie więcej w:
man zsh
~/.bashrc
Wywołanie: Otwórz terminal z bash
/etc/profile
(nie działało)~/.profile
(nie działało)~/.xinitrc
,~/.xserverrc
,/opt/X11/etc/X11/xinit/xinitrc.d/
Wywołanie: Oczekiwane wywołanie z xterm, ale nie jest zainstalowany i nawet po zainstalowaniu występuje ten błąd: xterm:
DISPLAY is not set
Opis & Wykorzystanie
Podczas inicjowania środowiska powłoki, takiego jak zsh
lub bash
, są uruchamiane pewne pliki uruchamiania. Obecnie macOS używa /bin/zsh
jako domyślnej powłoki. Ta powłoka jest automatycznie uruchamiana, gdy uruchamiana jest aplikacja Terminal lub gdy urządzenie jest dostępne za pośrednictwem SSH. Chociaż bash
i sh
są również obecne w macOS, muszą być jawnie wywoływane, aby je użyć.
Strona podręcznika zsh, którą możemy przeczytać za pomocą man zsh
, zawiera długie omówienie plików uruchamiania.
Ponownie otwarte aplikacje
Konfiguracja wskazanego wykorzystania i wylogowanie się, a następnie ponowne zalogowanie lub nawet ponowne uruchomienie nie zadziałało dla mnie, aby uruchomić aplikację. (Aplikacja nie była uruchamiana, być może musi być uruchomiona podczas wykonywania tych działań)
Opis: https://theevilbit.github.io/beyond/beyond_0021/
Lokalizacja
~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
Wyzwalacz: Ponowne otwieranie aplikacji
Opis i Wykorzystanie
Wszystkie aplikacje do ponownego otwarcia znajdują się w pliku plist ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
Aby sprawić, żeby ponownie otwierane aplikacje uruchamiały twoją własną, wystarczy dodać swoją aplikację do listy.
UUID można znaleźć, listując ten katalog lub za pomocą ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'
Aby sprawdzić aplikacje, które zostaną ponownie otwarte, można użyć polecenia:
Aby dodać aplikację do tej listy, możesz użyć:
Preferencje terminala
Przydatne do ominięcia piaskownicy: ✅
Ominięcie TCC: ✅
Terminal używa uprawnień FDA użytkownika, który go używa
Lokalizacja
~/Library/Preferences/com.apple.Terminal.plist
Wywołanie: Otwórz Terminal
Opis i Wykorzystanie
W ~/Library/Preferences
przechowywane są preferencje użytkownika w Aplikacjach. Niektóre z tych preferencji mogą zawierać konfigurację do wykonywania innych aplikacji/skryptów.
Na przykład, Terminal może wykonać polecenie podczas uruchamiania:
Ta konfiguracja jest odzwierciedlona w pliku ~/Library/Preferences/com.apple.Terminal.plist
w ten sposób:
Więc jeśli plik plist preferencji terminala w systemie mógłby zostać nadpisany, to funkcjonalność open
może być użyta do otwarcia terminala i wykonania tej komendy.
Możesz dodać to z wiersza poleceń za pomocą:
Skrypty terminalowe / Inne rozszerzenia plików
Przydatne do ominięcia piaskownicy: ✅
Ominięcie TCC: ✅
Terminal używa uprawnień FDA użytkownika, jeśli go używa
Lokalizacja
W dowolnym miejscu
Wywołanie: Otwórz Terminal
Opis i Wykorzystanie
Jeśli utworzysz skrypt .terminal
i go otworzysz, aplikacja Terminal zostanie automatycznie uruchomiona, aby wykonać polecenia w nim wskazane. Jeśli aplikacja Terminal ma specjalne uprawnienia (takie jak TCC), twoje polecenie zostanie wykonane z tymi specjalnymi uprawnieniami.
Wypróbuj to z:
Możesz również użyć rozszerzeń .command
, .tool
, z zwykłą zawartością skryptów powłoki i zostaną one również otwarte przez Terminal.
Jeśli terminal ma Pełny dostęp do dysku, będzie w stanie ukończyć tę akcję (zauważ, że wykonane polecenie będzie widoczne w oknie terminala).
Wtyczki audio
Opis: https://theevilbit.github.io/beyond/beyond_0013/ Opis: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882
Lokalizacja
/Library/Audio/Plug-Ins/HAL
Wymagane uprawnienia roota
Wyzwalacz: Ponowne uruchomienie coreaudiod lub komputera
/Library/Audio/Plug-ins/Components
Wymagane uprawnienia roota
Wyzwalacz: Ponowne uruchomienie coreaudiod lub komputera
~/Library/Audio/Plug-ins/Components
Wyzwalacz: Ponowne uruchomienie coreaudiod lub komputera
/System/Library/Components
Wymagane uprawnienia roota
Wyzwalacz: Ponowne uruchomienie coreaudiod lub komputera
Opis
Zgodnie z poprzednimi opisami możliwe jest skompilowanie niektórych wtyczek audio i ich załadowanie.
Wtyczki QuickLook
Opis: https://theevilbit.github.io/beyond/beyond_0028/
Lokalizacja
/System/Library/QuickLook
/Library/QuickLook
~/Library/QuickLook
/Applications/NazwaAplikacjiTutaj/Contents/Library/QuickLook/
~/Applications/NazwaAplikacjiTutaj/Contents/Library/QuickLook/
Opis i Wykorzystanie
Wtyczki QuickLook mogą być uruchamiane, gdy uruchamiasz podgląd pliku (naciśnij spację przy wybranym pliku w Finderze) i zainstalowana jest wtyczka obsługująca ten typ pliku.
Możesz skompilować własną wtyczkę QuickLook, umieścić ją w jednej z powyższych lokalizacji, aby ją załadować, a następnie przejść do obsługiwanego pliku i nacisnąć spację, aby ją uruchomić.
Haki logowania/wylogowywania
To nie zadziałało dla mnie, ani z Hakiem logowania użytkownika, ani z Hakiem wylogowywania roota
Opis: https://theevilbit.github.io/beyond/beyond_0022/
Lokalizacja
Musisz być w stanie wykonać coś w rodzaju
defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
Znajduje się w
~/Library/Preferences/com.apple.loginwindow.plist
Są przestarzałe, ale mogą być używane do wykonywania poleceń po zalogowaniu użytkownika.
To ustawienie jest przechowywane w /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
Aby usunąć to:
Plik użytkownika root jest przechowywany w /private/var/root/Library/Preferences/com.apple.loginwindow.plist
Warunkowe pomijanie piaskownicy
Tutaj znajdziesz lokalizacje startowe przydatne do pomijania piaskownicy, co pozwala na po prostu wykonanie czegoś poprzez zapisanie tego do pliku i oczekiwanie na nietypowe warunki jak konkretne zainstalowane programy, "nietypowe" działania użytkownika lub środowiska.
Cron
Opis: https://theevilbit.github.io/beyond/beyond_0004/
Przydatne do pomijania piaskownicy: ✅
Jednakże, musisz móc wykonać binarny
crontab
Lub być użytkownikiem root
Pominięcie TCC: 🔴
Lokalizacja
/usr/lib/cron/tabs/
,/private/var/at/tabs
,/private/var/at/jobs
,/etc/periodic/
Wymagany dostęp roota do bezpośredniego zapisu. Brak wymaganego dostępu roota jeśli możesz wykonać
crontab <plik>
Wywołanie: Zależy od zadania cron
Opis i Wykorzystanie
Wyświetl listę zadań cron bieżącego użytkownika za pomocą:
Można również zobaczyć wszystkie zadania cron użytkowników w /usr/lib/cron/tabs/
i /var/at/tabs/
(wymaga uprawnień roota).
W systemie MacOS można znaleźć kilka folderów wykonujących skrypty z określoną częstotliwością w:
W tym miejscu znajdziesz regularne zadania cron, zadania at (rzadko używane) i zadania periodic (głównie używane do czyszczenia plików tymczasowych). Codzienne zadania periodic można wykonać na przykład za pomocą: periodic daily
.
Aby dodać zadanie cron użytkownika programistycznie, można użyć:
iTerm2
Opis: https://theevilbit.github.io/beyond/beyond_0002/
Przydatne do ominięcia piaskownicy: ✅
Ominięcie TCC: ✅
iTerm2 wcześniej miało udzielone uprawnienia TCC
Lokalizacje
~/Library/Application Support/iTerm2/Scripts/AutoLaunch
Wywołanie: Otwórz iTerm
~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
Wywołanie: Otwórz iTerm
~/Library/Preferences/com.googlecode.iterm2.plist
Wywołanie: Otwórz iTerm
Opis & Wykorzystanie
Skrypty przechowywane w ~/Library/Application Support/iTerm2/Scripts/AutoLaunch
zostaną wykonane. Na przykład:
macOS Auto Start Locations
Launch Agents
Launch Agents are used to run commands when a user logs in. They are stored in ~/Library/LaunchAgents/
or /Library/LaunchAgents/
.
Launch Daemons
Launch Daemons are used to run commands at system startup. They are stored in /Library/LaunchDaemons/
.
Login Items
Login Items are applications that open when a user logs in. They are managed in System Preferences
> Users & Groups
> Login Items
.
Skrypt ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
zostanie również wykonany:
Pliki preferencji iTerm2 znajdują się w ~/Library/Preferences/com.googlecode.iterm2.plist
i mogą wskazywać polecenie do wykonania po otwarciu terminala iTerm2.
To ustawienie można skonfigurować w ustawieniach iTerm2:
A polecenie jest odzwierciedlone w preferencjach:
Możesz ustawić polecenie do wykonania za pomocą:
Bardzo prawdopodobne, że istnieją inne sposoby wykorzystania preferencji iTerm2 do wykonania dowolnych poleceń.
xbar
Opis: https://theevilbit.github.io/beyond/beyond_0007/
Przydatne do ominięcia piaskownicy: ✅
Ale xbar musi być zainstalowany
Ominięcie TCC: ✅
Wymaga uprawnień dostępu do funkcji dostępności
Lokalizacja
~/Library/Application\ Support/xbar/plugins/
Wywołanie: Po uruchomieniu xbar
Opis
Jeśli zainstalowany jest popularny program xbar, można napisać skrypt powłoki w ~/Library/Application\ Support/xbar/plugins/
, który zostanie wykonany po uruchomieniu xbar:
Hammerspoon
Opis: https://theevilbit.github.io/beyond/beyond_0008/
Przydatne do ominięcia piaskownicy: ✅
Ale Hammerspoon musi być zainstalowany
Ominięcie TCC: ✅
Wymaga uprawnień dostępności
Lokalizacja
~/.hammerspoon/init.lua
Wywołanie: Po uruchomieniu Hammerspoona
Opis
Hammerspoon służy jako platforma automatyzacji dla macOS, wykorzystując język skryptowy LUA do swoich operacji. Warto zauważyć, że obsługuje integrację pełnego kodu AppleScript oraz wykonywanie skryptów powłoki, co znacząco zwiększa jego możliwości skryptowe.
Aplikacja szuka jednego pliku, ~/.hammerspoon/init.lua
, i po uruchomieniu zostanie wykonany skrypt.
BetterTouchTool
Przydatne do ominięcia piaskownicy: ✅
Ale BetterTouchTool musi być zainstalowany
Ominięcie TCC: ✅
Wymaga uprawnień do Automatyzacji-Skrótów i Dostępności
Lokalizacja
~/Library/Application Support/BetterTouchTool/*
To narzędzie pozwala wskazać aplikacje lub skrypty do wykonania po naciśnięciu określonych skrótów klawiszowych. Atakujący może skonfigurować własny skrót i akcję do wykonania w bazie danych, aby wykonać dowolny kod (skrót może polegać na po prostu naciśnięciu klawisza).
Alfred
Przydatne do ominięcia piaskownicy: ✅
Ale Alfred musi być zainstalowany
Ominięcie TCC: ✅
Wymaga uprawnień do Automatyzacji, Dostępności, a nawet dostępu do pełnego dysku
Lokalizacja
???
Pozwala tworzyć skrypty, które mogą wykonywać kod, gdy spełnione są określone warunki. Potencjalnie atakujący może stworzyć plik skryptu i sprawić, aby Alfred go załadował (należy opłacić wersję premium, aby korzystać ze skryptów).
SSHRC
Opis: https://theevilbit.github.io/beyond/beyond_0006/
Przydatne do ominięcia piaskownicy: ✅
Ale ssh musi być włączone i używane
Ominięcie TCC: ✅
SSH miał dostęp do pełnego dysku
Lokalizacja
~/.ssh/rc
Wywołanie: Logowanie przez ssh
/etc/ssh/sshrc
Wymagane uprawnienia roota
Wywołanie: Logowanie przez ssh
Aby włączyć ssh, wymagane jest uzyskanie dostępu do pełnego dysku:
Opis & Wykorzystanie
Domyślnie, chyba że PermitUserRC no
w /etc/ssh/sshd_config
, gdy użytkownik loguje się przez SSH, skrypty /etc/ssh/sshrc
i ~/.ssh/rc
zostaną wykonane.
Elementy logowania
Opis: https://theevilbit.github.io/beyond/beyond_0003/
Lokalizacje
~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Wywołanie: Logowanie
Payload eksploatacji przechowywany przy użyciu
osascript
/var/db/com.apple.xpc.launchd/loginitems.501.plist
Wywołanie: Logowanie
Wymagane uprawnienia roota
Opis
W Preferencje systemowe -> Użytkownicy i grupy -> Elementy logowania można znaleźć elementy do wykonania po zalogowaniu użytkownika. Można je wyświetlić, dodać i usunąć z wiersza poleceń:
Te elementy są przechowywane w pliku ~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Elementy logowania mogą być również wskazane za pomocą interfejsu API SMLoginItemSetEnabled, który przechowa konfigurację w /var/db/com.apple.xpc.launchd/loginitems.501.plist
ZIP jako element logowania
(Sprawdź poprzednią sekcję dotyczącą Elementów logowania, jest to rozszerzenie)
Jeśli przechowasz plik ZIP jako Element logowania, Archive Utility
go otworzy, a jeśli zip był na przykład przechowywany w ~/Library
i zawierał folder LaunchAgents/file.plist
z tylnymi drzwiami, ten folder zostanie utworzony (nie jest to domyślne zachowanie), a plist zostanie dodany, więc następnym razem, gdy użytkownik zaloguje się ponownie, tylne drzwi wskazane w pliku plist zostaną wykonane.
Inną opcją byłoby utworzenie plików .bash_profile
i .zshenv
w katalogu domowym użytkownika, więc jeśli folder LaunchAgents już istnieje, ta technika nadal będzie działać.
At
Opis: https://theevilbit.github.io/beyond/beyond_0014/
Lokalizacja
Musisz wykonać
at
i musi być włączone
Opis
Zadania at
są przeznaczone do planowania zadań jednorazowych do wykonania o określonych godzinach. W przeciwieństwie do zadań cron, zadania at
są automatycznie usuwane po wykonaniu. Ważne jest zauważenie, że te zadania są trwałe po ponownym uruchomieniu systemu, co oznacza, że mogą stanowić potencjalne zagrożenie dla bezpieczeństwa w określonych warunkach.
Domyślnie są wyłączone, ale użytkownik root może je włączyć za pomocą:
To spowoduje utworzenie pliku za 1 godzinę:
Sprawdź kolejkę zadań za pomocą atq:
Powyżej widzimy zaplanowane dwa zadania. Szczegóły zadania można wydrukować, używając at -c JOBNUMBER
Jeśli zadania AT nie są włączone, utworzone zadania nie zostaną wykonane.
Pliki zadań można znaleźć pod adresem /private/var/at/jobs/
Nazwa pliku zawiera kolejkę, numer zadania i czas jego zaplanowanego uruchomienia. Na przykład, przyjrzyjmy się a0001a019bdcd2
.
a
- to jest kolejka0001a
- numer zadania w zapisie szesnastkowym,0x1a = 26
019bdcd2
- czas w zapisie szesnastkowym. Reprezentuje minuty od epoki.0x019bdcd2
to26991826
w zapisie dziesiętnym. Jeśli pomnożymy to przez 60, otrzymamy1619509560
, co odpowiadaGMT: 2021. kwiecień 27., wtorek 7:46:00
.
Jeśli wydrukujemy plik zadania, zobaczymy, że zawiera te same informacje, które uzyskaliśmy używając at -c
.
Akcje folderów
Opis: https://theevilbit.github.io/beyond/beyond_0024/ Opis: https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d
Przydatne do ominięcia piaskownicy: ✅
Ale musisz móc wywołać
osascript
z argumentami, aby skontaktować się zSystem Events
i skonfigurować Akcje folderówOminięcie TCC: 🟠
Posiada podstawowe uprawnienia TCC, takie jak Pulpit, Dokumenty i Pobrane
Lokalizacja
/Library/Scripts/Folder Action Scripts
Wymagane uprawnienia administratora
Wywołanie: Dostęp do określonego folderu
~/Library/Scripts/Folder Action Scripts
Wywołanie: Dostęp do określonego folderu
Opis i Wykorzystanie
Akcje folderów to skrypty automatycznie uruchamiane w odpowiedzi na zmiany w folderze, takie jak dodawanie, usuwanie elementów, otwieranie lub zmiana rozmiaru okna folderu. Te akcje mogą być wykorzystane do różnych zadań i mogą być uruchamiane w różny sposób, na przykład za pomocą interfejsu Finder lub poleceń terminala.
Aby skonfigurować Akcje folderów, masz opcje takie jak:
Stworzenie przepływu pracy Akcji folderu za pomocą Automatora i zainstalowanie go jako usługi.
Dołączenie skryptu ręcznie za pomocą Konfiguracji Akcji folderu w menu kontekstowym folderu.
Wykorzystanie OSAScript do wysyłania komunikatów Apple Event do
System Events.app
w celu programowego ustawienia Akcji folderu.
Ta metoda jest szczególnie przydatna do osadzania akcji w systemie, oferując poziom trwałości.
Poniższy skrypt jest przykładowym przykładem tego, co może być wykonane przez Akcję folderu:
Aby skrypt powyżej można było używać w Akcjach folderu, skompiluj go za pomocą:
Po skompilowaniu skryptu skonfiguruj Akcje folderu, wykonując poniższy skrypt. Ten skrypt włączy globalnie Akcje folderu i specyficznie dołączy wcześniej skompilowany skrypt do folderu Pulpit.
Uruchom skrypt instalacyjny za pomocą:
Oto sposób implementacji tej trwałości za pomocą interfejsu graficznego:
To jest skrypt, który zostanie wykonany:
Skompiluj to poleceniem: osacompile -l JavaScript -o folder.scpt source.js
Przenieś to do:
Następnie otwórz aplikację Folder Actions Setup
, wybierz folder, który chcesz obserwować, a następnie wybierz w Twoim przypadku folder.scpt
(w moim przypadku nazwałem go output2.scp):
Teraz, jeśli otworzysz ten folder za pomocą Findera, Twój skrypt zostanie wykonany.
Ta konfiguracja została zapisana w pliku plist znajdującym się w ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
w formacie base64.
Teraz spróbujmy przygotować tę trwałość bez dostępu do interfejsu graficznego:
Skopiuj
~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
do/tmp
, aby go zbackupować:
cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp
Usuń właśnie ustawione Folder Actions:
Teraz, gdy mamy puste środowisko
Skopiuj plik z backupu:
cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/
Otwórz aplikację Folder Actions Setup.app, aby załadować tę konfigurację:
open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"
To nie zadziałało dla mnie, ale to są instrukcje z opisu :(
Skróty Docka
Opis: https://theevilbit.github.io/beyond/beyond_0027/
Przydatne do ominięcia piaskownicy: ✅
Ale musisz mieć zainstalowaną złośliwą aplikację w systemie
Ominięcie TCC: 🔴
Lokalizacja
~/Library/Preferences/com.apple.dock.plist
Wywołanie: Kiedy użytkownik kliknie na aplikację w Docku
Opis i Wykorzystanie
Wszystkie aplikacje, które pojawiają się w Docku, są określone w pliku plist: ~/Library/Preferences/com.apple.dock.plist
Możliwe jest dodanie aplikacji tylko za pomocą:
Z wykorzystaniem inżynierii społecznej można na przykład podszyć się pod Google Chrome w doku i faktycznie wykonać swój własny skrypt:
Wybieraki kolorów
Opis: https://theevilbit.github.io/beyond/beyond_0017
Przydatne do ominięcia piaskownicy: 🟠
Musi zajść bardzo konkretne działanie
Zakończysz w innej piaskownicy
Ominięcie TCC: 🔴
Lokalizacja
/Library/ColorPickers
Wymagane uprawnienia roota
Wyzwalacz: Użycie wybieraka kolorów
~/Library/ColorPickers
Wyzwalacz: Użycie wybieraka kolorów
Opis i Wykorzystanie
Skompiluj pakiet wybieraka kolorów z twoim kodem (możesz użyć na przykład tego) i dodaj konstruktor (tak jak w sekcji Wygaszacz ekranu) i skopiuj pakiet do ~/Library/ColorPickers
.
Następnie, gdy wybierak kolorów zostanie wywołany, twój kod również powinien być uruchomiony.
Zauważ, że binarny ładowacz twojej biblioteki ma bardzo restrykcyjną piaskownicę: /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64
Wtyczki synchronizacji Finder
Opis: https://theevilbit.github.io/beyond/beyond_0026/ Opis: https://objective-see.org/blog/blog_0x11.html
Przydatne do ominięcia piaskownicy: Nie, ponieważ musisz uruchomić własną aplikację
Ominięcie TCC: ???
Lokalizacja
Konkretna aplikacja
Opis & Wykorzystanie
Przykład aplikacji z rozszerzeniem synchronizacji Finder można znaleźć tutaj.
Aplikacje mogą mieć Rozszerzenia synchronizacji Finder
. To rozszerzenie zostanie umieszczone wewnątrz aplikacji, która zostanie uruchomiona. Ponadto, aby rozszerzenie mogło wykonać swój kod, musi być podpisane ważnym certyfikatem dewelopera Apple, musi być umieszczane w piaskownicy (choć mogą być dodane wyjątki) i musi być zarejestrowane za pomocą:
Wygaszacz ekranu
Opis: https://theevilbit.github.io/beyond/beyond_0016/ Opis: https://posts.specterops.io/saving-your-access-d562bf5bf90b
Przydatne do ominięcia piaskownicy: 🟠
Jednakże skończysz w powszechnej aplikacji piaskownicy
Ominięcie TCC: 🔴
Lokalizacja
/System/Library/Screen Savers
Wymagane uprawnienia roota
Wywołanie: Wybierz wygaszacz ekranu
/Library/Screen Savers
Wymagane uprawnienia roota
Wywołanie: Wybierz wygaszacz ekranu
~/Library/Screen Savers
Wywołanie: Wybierz wygaszacz ekranu
Opis i Wykorzystanie
Utwórz nowy projekt w Xcode i wybierz szablon generujący nowy Wygaszacz ekranu. Następnie dodaj do niego kod, na przykład poniższy kod generujący logi.
Zbuduj to i skopiuj pakiet .saver
do ~/Library/Screen Savers
. Następnie otwórz interfejs graficzny wygaszacza ekranu i po prostu kliknij na niego, powinien wygenerować wiele logów:
Należy pamiętać, że wewnątrz uprawnień binarnych, które wczytują ten kod (/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver
), można znaleźć com.apple.security.app-sandbox
, więc będziesz wewnątrz wspólnej piaskownicy aplikacji.
Kod oszczędzania:
Wtyczki Spotlight
opis: https://theevilbit.github.io/beyond/beyond_0011/
Przydatne do ominięcia piaskownicy: 🟠
Ale skończysz w aplikacyjnej piaskownicy
Ominięcie TCC: 🔴
Piaskownica wydaje się bardzo ograniczona
Lokalizacja
~/Library/Spotlight/
Wywołanie: Tworzony jest nowy plik z rozszerzeniem obsługiwanym przez wtyczkę Spotlight.
/Library/Spotlight/
Wywołanie: Tworzony jest nowy plik z rozszerzeniem obsługiwanym przez wtyczkę Spotlight.
Wymagane uprawnienia roota
/System/Library/Spotlight/
Wywołanie: Tworzony jest nowy plik z rozszerzeniem obsługiwanym przez wtyczkę Spotlight.
Wymagane uprawnienia roota
Some.app/Contents/Library/Spotlight/
Wywołanie: Tworzony jest nowy plik z rozszerzeniem obsługiwanym przez wtyczkę Spotlight.
Wymagana nowa aplikacja
Opis i Wykorzystanie
Spotlight to wbudowana funkcja wyszukiwania w macOS, zaprojektowana w celu zapewnienia użytkownikom szybkiego i wszechstronnego dostępu do danych na ich komputerach. Aby ułatwić tę szybką funkcję wyszukiwania, Spotlight utrzymuje własną bazę danych i tworzy indeks, parsując większość plików, umożliwiając szybkie wyszukiwanie zarówno nazw plików, jak i ich zawartości.
Podstawowy mechanizm Spotlight obejmuje centralny proces o nazwie 'mds', co oznacza 'serwer metadanych'. Ten proces kieruje całym serwisem Spotlight. Wspomagają to wielokrotne demony 'mdworker', które wykonują różnorodne zadania konserwacyjne, takie jak indeksowanie różnych typów plików (ps -ef | grep mdworker
). Te zadania są możliwe dzięki wtyczkom importującym Spotlight, czyli "paczkom .mdimporter", które umożliwiają Spotlightowi zrozumienie i indeksowanie treści w różnorodnych formatach plików.
Wtyczki lub paczki .mdimporter znajdują się w wymienionych wcześniej miejscach, a jeśli pojawi się nowa paczka, zostanie załadowana w ciągu minuty (nie trzeba restartować żadnej usługi). Te paczki muszą wskazywać, jakie typy plików i rozszerzenia mogą obsługiwać, w ten sposób Spotlight będzie ich używał, gdy zostanie utworzony nowy plik z wskazanym rozszerzeniem.
Możliwe jest znalezienie wszystkich mdimporterów
załadowanych, uruchamiając:
A na przykład /Library/Spotlight/iBooksAuthor.mdimporter jest używany do analizowania tego typu plików (rozszerzenia .iba
i .book
między innymi):
Jeśli sprawdzisz Plist innego mdimporter
, możesz nie znaleźć wpisu UTTypeConformsTo
. To dlatego, że jest to wbudowany Uniform Type Identifiers (UTI) i nie musi określać rozszerzeń.
Co więcej, domyślne wtyczki systemowe zawsze mają pierwszeństwo, więc atakujący może uzyskać dostęp tylko do plików, które nie są indeksowane przez własne mdimporters
firmy Apple.
Aby stworzyć własny importer, możesz zacząć od tego projektu: https://github.com/megrimm/pd-spotlight-importer, a następnie zmienić nazwę, CFBundleDocumentTypes
i dodać UTImportedTypeDeclarations
, aby obsługiwał rozszerzenie, które chcesz wspierać, i odzwierciedlić je w schema.xml
. Następnie zmień kod funkcji GetMetadataForFile
, aby wykonać swój payload, gdy zostanie utworzony plik z przetworzonym rozszerzeniem.
Na koniec skompiluj i skopiuj swój nowy .mdimporter
do jednej z poprzednich lokalizacji i sprawdź, czy jest ładowany, monitorując logi lub sprawdzając mdimport -L.
Panel Preferencji
Wygląda na to, że to już nie działa.
Opis: https://theevilbit.github.io/beyond/beyond_0009/
Lokalizacja
/System/Library/PreferencePanes
/Library/PreferencePanes
~/Library/PreferencePanes
Opis
Wygląda na to, że to już nie działa.
Ominięcie Piaskownicy Root
Tutaj znajdziesz lokalizacje startowe przydatne do omijania piaskownicy, które pozwalają po prostu wykonać coś, pisząc to do pliku będąc rootem i/lub wymagając innych dziwnych warunków.
Okresowe
Opis: https://theevilbit.github.io/beyond/beyond_0019/
Lokalizacja
/etc/periodic/daily
,/etc/periodic/weekly
,/etc/periodic/monthly
,/usr/local/etc/periodic
Wymagany root
Wywołanie: Kiedy nadejdzie odpowiedni czas
/etc/daily.local
,/etc/weekly.local
lub/etc/monthly.local
Wymagany root
Wywołanie: Kiedy nadejdzie odpowiedni czas
Opis i Wykorzystanie
Skrypty okresowe (/etc/periodic
) są wykonywane z powodu daemonów uruchamiania skonfigurowanych w /System/Library/LaunchDaemons/com.apple.periodic*
. Zauważ, że skrypty przechowywane w /etc/periodic/
są wykonywane jako właściciel pliku, więc nie zadziała to dla potencjalnej eskalacji uprawnień.
Istnieją inne skrypty okresowe, które zostaną wykonane, o czym świadczy /etc/defaults/periodic.conf
:
Jeśli uda ci się napisać którykolwiek z plików /etc/daily.local
, /etc/weekly.local
lub /etc/monthly.local
, zostanie on wykonany wcześniej lub później.
Zauważ, że skrypt okresowy zostanie wykonany jako właściciel skryptu. Jeśli zwykły użytkownik jest właścicielem skryptu, zostanie on wykonany jako ten użytkownik (co może zapobiec atakom z eskalacją uprawnień).
PAM
Rozwiązanie: Linux Hacktricks PAM Rozwiązanie: https://theevilbit.github.io/beyond/beyond_0005/
Lokalizacja
Zawsze wymagany jest dostęp jako root
Opis i Wykorzystanie
Ponieważ PAM jest bardziej skoncentrowany na trwałości i złośliwym oprogramowaniu niż na łatwym wykonaniu w systemie macOS, ten blog nie będzie zawierał szczegółowego wyjaśnienia, przeczytaj rozwiązania, aby lepiej zrozumieć tę technikę.
Sprawdź moduły PAM za pomocą:
Technika trwałości/przywilejów wykorzystująca PAM jest tak łatwa jak modyfikacja modułu /etc/pam.d/sudo poprzez dodanie na początku linii:
Więc będzie to wyglądać mniej więcej tak:
I dlatego każda próba użycia sudo
będzie działać.
Zauważ, że ten katalog jest chroniony przez TCC, więc bardzo prawdopodobne jest, że użytkownik otrzyma monit o dostęp.
Wtyczki Autoryzacyjne
Opis: https://theevilbit.github.io/beyond/beyond_0028/ Opis: https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65
Przydatne do ominięcia piaskownicy: 🟠
Ale musisz być rootem i dokonać dodatkowych konfiguracji
Ominięcie TCC: ???
Lokalizacja
/Library/Security/SecurityAgentPlugins/
Wymagane uprawnienia roota
Konieczne jest również skonfigurowanie bazy danych autoryzacyjnych do użycia wtyczki
Opis i Wykorzystanie
Możesz stworzyć wtyczkę autoryzacyjną, która będzie wykonywana podczas logowania użytkownika, aby zachować trwałość. Aby uzyskać więcej informacji na temat tworzenia takich wtyczek, sprawdź poprzednie opisy (i bądź ostrożny, słabo napisana wtyczka może zablokować Cię i będziesz musiał wyczyścić swój Mac w trybie odzyskiwania).
Przenieś pakiet do lokalizacji, aby został załadowany:
Na koniec dodaj regułę do załadowania tego Pluginu:
evaluate-mechanisms
powie mechanizmowi autoryzacji, że będzie musiał wywołać zewnętrzny mechanizm autoryzacji. Ponadto privileged
spowoduje, że zostanie wykonany przez użytkownika root.
Uruchomienie:
I następnie grupa personelu powinna mieć dostęp sudo (odczytaj /etc/sudoers
, aby potwierdzić).
Man.conf
Rozwiązanie: https://theevilbit.github.io/beyond/beyond_0030/
Przydatne do ominięcia piaskownicy: 🟠
Ale musisz być rootem, a użytkownik musi używać polecenia man
Ominięcie TCC: 🔴
Lokalizacja
/private/etc/man.conf
Wymagany dostęp roota
/private/etc/man.conf
: Za każdym razem, gdy używane jest polecenie man
Opis i Wykorzystanie
Plik konfiguracyjny /private/etc/man.conf
wskazuje binarny/skrypt do użycia podczas otwierania plików dokumentacji man. Ścieżkę do wykonywalnego pliku można zmodyfikować, aby za każdym razem, gdy użytkownik używa polecenia man do czytania dokumentacji, uruchamiane było tylne drzwi.
Na przykład ustaw w /private/etc/man.conf
:
I następnie utwórz /tmp/view
jako:
Apache2
Opis: https://theevilbit.github.io/beyond/beyond_0023/
Przydatne do ominięcia piaskownicy: 🟠
Ale potrzebujesz uprawnień roota i Apache musi być uruchomiony
Ominięcie TCC: 🔴
Httpd nie ma uprawnień
Lokalizacja
/etc/apache2/httpd.conf
Wymagane uprawnienia roota
Wywołanie: Gdy Apache2 jest uruchamiany
Opis & Wykorzystanie
Możesz wskazać w pliku /etc/apache2/httpd.conf
, aby załadować moduł, dodając wiersz tak jak:
W ten sposób Twoje skompilowane moduły zostaną załadowane przez Apache. Jedynym warunkiem jest to, że musisz podpisać je ważnym certyfikatem Apple, lub musisz dodać nowy zaufany certyfikat w systemie i podpisać nimi.
Następnie, jeśli to konieczne, upewnij się, że serwer zostanie uruchomiony, wykonując:
Przykład kodu dla Dylb:
BSM framework audytowy
Opis: https://theevilbit.github.io/beyond/beyond_0031/
Przydatny do ominięcia piaskownicy: 🟠
Ale potrzebujesz być rootem, aby auditd działał i wywołał ostrzeżenie
Ominięcie TCC: 🔴
Lokalizacja
/etc/security/audit_warn
Wymagany dostęp jako root
Wywołanie: Gdy auditd wykryje ostrzeżenie
Opis & Wykorzystanie
Za każdym razem, gdy auditd wykryje ostrzeżenie, skrypt /etc/security/audit_warn
jest wykonywany. Możesz więc dodać swój ładunek do niego.
Możesz wymusić ostrzeżenie za pomocą sudo audit -n
.
Elementy uruchamiania
Jest to przestarzałe, więc nie powinno być tam nic znalezionego.
StartupItem to katalog, który powinien znajdować się w /Library/StartupItems/
lub /System/Library/StartupItems/
. Po utworzeniu tego katalogu musi zawierać dwa konkretne pliki:
Skrypt rc: Skrypt powłoki wykonywany podczas uruchamiania.
Plik plist, o nazwie
StartupParameters.plist
, który zawiera różne ustawienia konfiguracyjne.
Upewnij się, że zarówno skrypt rc, jak i plik StartupParameters.plist
są poprawnie umieszczone w katalogu StartupItem, aby proces uruchamiania mógł je rozpoznać i wykorzystać.
Lokalizacje automatycznego uruchamiania w macOS
W systemie macOS istnieje kilka lokalizacji, w których programy mogą być skonfigurowane do automatycznego uruchamiania przy logowaniu użytkownika. Poniżej znajdują się najczęstsze lokalizacje, w których można znaleźć takie wpisy:
Folder Login Items: Można go znaleźć w Preferencje Systemowe > Użytkownicy i grupy > Nazwa użytkownika > Elementy logowania.
Folder LaunchAgents:
/Library/LaunchAgents
i~/Library/LaunchAgents
.Folder LaunchDaemons:
/Library/LaunchDaemons
i/System/Library/LaunchDaemons
.Folder StartupItems:
/Library/StartupItems
(starsze systemy).
Zaleca się regularne sprawdzanie tych lokalizacji w celu zapobiegania potencjalnym atakom i utrzymania kontroli nad programami uruchamianymi automatycznie.
emond
Nie mogę znaleźć tego komponentu w moim systemie macOS, więc dla dalszych informacji sprawdź opis
Opis: https://theevilbit.github.io/beyond/beyond_0023/
Wprowadzony przez Apple, emond to mechanizm logowania, który wydaje się być niewystarczająco rozwinięty lub być może porzucony, ale nadal jest dostępny. Chociaż nie jest to szczególnie korzystne dla administratora Maca, ta mało znana usługa może służyć jako subtelna metoda trwałości dla aktorów zagrożeń, prawdopodobnie niezauważona przez większość administratorów macOS.
Dla osób świadomych jego istnienia, identyfikacja jakiejkolwiek złośliwej użyteczności emond jest prosta. LaunchDaemon systemu dla tej usługi poszukuje skryptów do wykonania w jednym katalogu. Aby to sprawdzić, można użyć poniższej komendy:
XQuartz
Writeup: https://theevilbit.github.io/beyond/beyond_0018/
Lokalizacja
/opt/X11/etc/X11/xinit/privileged_startx.d
Wymagane uprawnienia roota
Wyzwalacz: Z XQuartz
Opis i Wykorzystanie
XQuartz nie jest już instalowany w macOS, więc jeśli chcesz uzyskać więcej informacji, sprawdź writeup.
kext
Jest tak skomplikowane zainstalowanie kext nawet jako root, że nie będę tego rozważać jako sposób na ucieczkę z piaskownicy ani na trwałość (chyba że masz exploit)
Lokalizacja
Aby zainstalować KEXT jako element uruchamiania, musi być zainstalowany w jednym z następujących miejsc:
/System/Library/Extensions
Pliki KEXT wbudowane w system operacyjny OS X.
/Library/Extensions
Pliki KEXT zainstalowane przez oprogramowanie firm trzecich
Możesz wyświetlić obecnie załadowane pliki kext za pomocą:
Aby uzyskać więcej informacji na temat rozszerzeń jądra sprawdź tę sekcję.
amstoold
Opis: https://theevilbit.github.io/beyond/beyond_0029/
Lokalizacja
/usr/local/bin/amstoold
Wymagane uprawnienia roota
Opis i eksploatacja
Wygląda na to, że plist
z /System/Library/LaunchAgents/com.apple.amstoold.plist
używał tego binarnego pliku, jednocześnie udostępniając usługę XPC... problem w tym, że plik binarny nie istniał, więc można było umieścić tam coś innego, a gdy usługa XPC zostanie wywołana, zostanie wywołany twój binarny plik.
Nie mogę już tego znaleźć w moim systemie macOS.
xsanctl
Opis: https://theevilbit.github.io/beyond/beyond_0015/
Lokalizacja
/Library/Preferences/Xsan/.xsanrc
Wymagane uprawnienia roota
Wyzwalacz: Gdy usługa jest uruchamiana (rzadko)
Opis i eksploatacja
Wygląda na to, że uruchamianie tego skryptu nie jest zbyt powszechne i nawet nie mogłem go znaleźć w moim macOS, więc jeśli chcesz uzyskać więcej informacji, sprawdź opis.
/etc/rc.common
To nie działa w nowoczesnych wersjach MacOS
Możliwe jest również umieszczenie tutaj poleceń, które zostaną wykonane podczas uruchamiania systemu. Przykład zwykłego skryptu rc.common:
Techniki i narzędzia wytrwałości
Last updated