macOS Auto Start
Ta sekcja opiera się głównie na serii blogów Beyond the good ol' LaunchAgents, celem jest dodanie więcej lokalizacji Autostart (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 czynność powszechną, określoną ilość czasu lub czynność, którą zazwyczaj można wykonać z wnętrza piaskownicy bez konieczności posiadania uprawnień root.
Launchd
Lokalizacje
/Library/LaunchAgents
Wywołanie: Restart
Wymagane uprawnienia root
/Library/LaunchDaemons
Wywołanie: Restart
Wymagane uprawnienia root
/System/Library/LaunchAgents
Wywołanie: Restart
Wymagane uprawnienia root
/System/Library/LaunchDaemons
Wywołanie: Restart
Wymagane uprawnienia root
~/Library/LaunchAgents
Wywołanie: Ponowne logowanie
~/Library/LaunchDemons
Wywołanie: Ponowne logowanie
Jako ciekawostkę, launchd
ma wbudowaną listę właściwości w sekcji Mach-o __Text.__config
, która zawiera inne dobrze znane usługi, które launchd
musi uruchomić. Ponadto te usługi mogą zawierać RequireSuccess
, RequireRun
i RebootOnSuccess
, co oznacza, że muszą być uruchomione i zakończone pomyślnie.
Oczywiście nie można go modyfikować ze względu na podpisywanie kodu.
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 w:
/Library/LaunchAgents
: Agenci dla użytkownika zainstalowani przez administratora/Library/LaunchDaemons
: Demony systemowe zainstalowane przez administratora/System/Library/LaunchAgents
: Agenci dla użytkownika dostarczeni przez Apple./System/Library/LaunchDaemons
: Demony systemowe dostarczone przez Apple.
Gdy użytkownik loguje się, pliki ASEP znajdujące się w /Users/$USER/Library/LaunchAgents
i /Users/$USER/Library/LaunchDemons
są uruchamiane z uprawnieniami zalogowanego użytkownika.
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, gdy agent musi zostać wykonany przed zalogowaniem użytkownika, nazywane są PreLoginAgents. Na przykład jest to przydatne do dostarczania technologii wspomagającej podczas logowania. Mogą być one 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
Wyświetl wszystkie załadowane agenty i demony 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ń.
Więcej informacji o launchd
launchd
to pierwszy proces trybu użytkownika, który jest uruchamiany z jądra. Uruchomienie procesu musi być udane i nie może się zakończyć ani zawiesić. Jest on nawet chroniony przed niektórymi sygnałami zabijania.
Jedną z pierwszych rzeczy, które launchd
zrobi, będzie uruchomienie wszystkich demonów, takich jak:
Demony czasowe oparte na czasie do wykonania:
atd (
com.apple.atrun.plist
): MaStartInterval
30 minutcrond (
com.apple.systemstats.daily.plist
): MaStartCalendarInterval
aby uruchomić o 00:15
Demony sieciowe takie jak:
org.cups.cups-lpd
: Nasłuchuje w TCP (SockType: stream
) zSockServiceName: printer
SockServiceName
musi być portem lub usługą z/etc/services
com.apple.xscertd.plist
: Nasłuchuje na TCP na porcie 1640
Demony ścieżkowe, które są wykonywane, gdy określona ścieżka ulega zmianie:
com.apple.postfix.master
: Sprawdzanie ścieżki/etc/postfix/aliases
Demony powiadomień IOKit:
com.apple.xartstorageremoted
:"com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...
Port Mach:
com.apple.xscertd-helper.plist
: Wskazuje w wpisieMachServices
nazwęcom.apple.xscertd.helper
UserEventAgent:
Jest to inny niż poprzedni. Powoduje, że launchd uruchamia aplikacje w odpowiedzi na określone zdarzenie. Jednak w tym przypadku głównym plikiem zaangażowanym nie jest
launchd
, a/usr/libexec/UserEventAgent
. Ładuje wtyczki z zablokowanego folderu SIP/System/Library/UserEventPlugins/
, gdzie każda wtyczka wskazuje swój inicjator w kluczuXPCEventModuleInitializer
lub, w przypadku starszych wtyczek, w słownikuCFPluginFactories
pod kluczemFB86416D-6164-2070-726F-70735C216EC0
swojegoInfo.plist
.
pliki startowe powłoki
Opis: https://theevilbit.github.io/beyond/beyond_0001/ Opis (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 ładuje te pliki
Lokalizacje
~/.zshrc
,~/.zlogin
,~/.zshenv.zwc
,~/.zshenv
,~/.zprofile
Wyzwalacz: Otwórz terminal z zsh
/etc/zshenv
,/etc/zprofile
,/etc/zshrc
,/etc/zlogin
Wyzwalacz: Otwórz terminal z zsh
Wymagane uprawnienia roota
~/.zlogout
Wyzwalacz: Zamknij terminal z zsh
/etc/zlogout
Wyzwalacz: Zamknij terminal z zsh
Wymagane uprawnienia roota
Potencjalnie więcej w:
man zsh
~/.bashrc
Wyzwalacz: 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/
Wyzwalacz: Oczekiwano wywołania z xterm, ale nie jest zainstalowany i nawet po zainstalowaniu pojawia się ten błąd: xterm:
DISPLAY is not set
Opis i Wykorzystanie
Podczas inicjowania środowiska powłoki, takiego jak zsh
lub bash
, pewne pliki startowe są uruchamiane. 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łane, aby zostały użyte.
Strona podręcznika zsh, którą możemy przeczytać za pomocą man zsh
, zawiera długie opisy plików startowych.
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 po restarcie
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 używając ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'
Aby sprawdzić aplikacje, które zostaną ponownie otwarte, można użyć:
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
Wywołanie: Zrestartuj coreaudiod lub komputer
/Library/Audio/Plug-ins/Components
Wymagane uprawnienia roota
Wywołanie: Zrestartuj coreaudiod lub komputer
~/Library/Audio/Plug-ins/Components
Wywołanie: Zrestartuj coreaudiod lub komputer
/System/Library/Components
Wymagane uprawnienia roota
Wywołanie: Zrestartuj coreaudiod lub komputer
Opis
Zgodnie z poprzednimi opisami możliwe jest skompilowanie niektórych wtyczek audio i załadowanie ich.
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/wylogowania
To nie zadziałało dla mnie, ani z Hakiem logowania użytkownika, ani z Hakiem wylogowania roota
Opis: https://theevilbit.github.io/beyond/beyond_0022/
Lokalizacja
Musisz móc wykonać coś w stylu
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 obejście piaskownicy
Tutaj znajdziesz lokalizacje startowe przydatne do obejścia piaskownicy, które pozwala na po prostu wykonanie czegoś poprzez zapisanie tego do pliku i oczekiwanie na niezbyt powszechne warunki jak konkretne zainstalowane programy, "niezwykłe" działania użytkownika lub środowiska.
Cron
Opis: https://theevilbit.github.io/beyond/beyond_0004/
Przydatne do obejścia piaskownicy: ✅
Jednakże, musisz być w stanie wykonać binarny
crontab
Lub być użytkownikiem root
Ominięcie TCC: 🔴
Lokalizacja
/usr/lib/cron/tabs/
,/private/var/at/tabs
,/private/var/at/jobs
,/etc/periodic/
Wymagane uprawnienia roota do bezpośredniego zapisu. Brak wymaganych uprawnień 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/
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
macOS Auto Start Locations
macOS provides several locations where programs can be configured to automatically start when a user logs in. These locations include:
Login Items: Found in
System Preferences > Users & Groups > Login Items
. Users can add or remove applications from this list.Launch Agents: Found in
/Library/LaunchAgents
and~/Library/LaunchAgents
. These are used to run programs when a user logs in.Launch Daemons: Found in
/Library/LaunchDaemons
and/System/Library/LaunchDaemons
. These are used to run system-wide services.Startup Items: Deprecated since macOS 10.7, these were stored in
/Library/StartupItems
and/System/Library/StartupItems
.
It is important to regularly review these auto start locations to ensure that only necessary and trusted programs are set to run automatically.
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ć przepływy pracy, które mogą wykonywać kod, gdy spełnione są określone warunki. Potencjalnie atakujący może utworzyć plik przepływu pracy i sprawić, aby Alfred go załadował (należy opłacić wersję premium, aby korzystać z przepływów pracy).
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 ma dostęp do pełnego dysku
Lokalizacja
~/.ssh/rc
Wywołanie: Logowanie za pomocą ssh
/etc/ssh/sshrc
Wymagane uprawnienia roota
Wywołanie: Logowanie za pomocą 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, to jest rozszerzenie)
Jeśli przechowasz plik ZIP jako Element logowania, Archive Utility
go otworzy, a jeśli np. plik zip był 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 NUMERZADANIA
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 systemie dziesiętnym. Jeśli pomnożymy to przez 60, otrzymamy1619509560
, co odpowiadaGMT: 2021. kwiecień 27., wtorek 7:46:00
.
Jeśli wyświetlimy 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:
Tworzenie przepływu pracy Akcji folderu za pomocą Automatora i instalowanie go jako usługi.
Dołączanie 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 wdrożenia tej trwałości za pomocą interfejsu graficznego:
To jest skrypt, który zostanie wykonany:
Skompiluj za pomocą: osacompile -l JavaScript -o folder.scpt source.js
Przenieś do:
Następnie otwórz aplikację Folder Actions Setup
, wybierz folder, który chcesz obserwować i 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 backupem:
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 & Wykorzystanie
Wszystkie aplikacje widoczne 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:
Wybieracze kolorów
Opis: https://theevilbit.github.io/beyond/beyond_0017
Przydatne do ominięcia piaskownicy: 🟠
Wymagane jest bardzo konkretne działanie
Zakończysz w innej piaskownicy
Ominięcie TCC: 🔴
Lokalizacja
/Library/ColorPickers
Wymagane uprawnienia roota
Wyzwalacz: Użycie wybieracza kolorów
~/Library/ColorPickers
Wyzwalacz: Użycie wybieracza kolorów
Opis i Wykorzystanie
Skompiluj pakiet wybieracza kolorów z twoim kodem (możesz użyć na przykład tego) i dodaj konstruktor (tak jak w sekcji Wygaszacz ekranu) oraz skopiuj pakiet do ~/Library/ColorPickers
.
Następnie, gdy wybieracz kolorów zostanie uruchomiony, twój kod również powinien.
Zauważ, że binarny plik ładujący twoją bibliotekę 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 ładują 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 piaskownicy aplikacji
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 multiple 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ą wskazać, które typy plików i rozszerzenia mogą zarządzać, 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
. Dzieje się tak 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 powyższych 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 eskalacji 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 jest bardzo prawdopodobne, ż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 utrzymać trwałość. Aby uzyskać więcej informacji na temat tworzenia takich wtyczek, sprawdź poprzednie opisy (i bądź ostrożny, źle 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łę ładowania tego Pluginu:
evaluate-mechanisms
powie frameworkowi autoryzacyjnemu, że będzie musiał wywołać zewnętrzny mechanizm autoryzacji. Ponadto privileged
spowoduje, że zostanie wykonany przez roota.
Uruchomienie:
Następnie grupa personelu powinna mieć dostęp do 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, uruchamiany był backdoor.
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 musisz być rootem i Apache musi być uruchomiony
Ominięcie TCC: 🔴
Httpd nie ma uprawnień
Lokalizacja
/etc/apache2/httpd.conf
Wymagany dostęp jako root
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 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 go podpisać.
Następnie, jeśli to konieczne, upewnij się, że serwer zostanie uruchomiony, wykonując:
Przykład kodu dla Dylb:
Struktura audytu BSM
Opis: https://theevilbit.github.io/beyond/beyond_0031/
Przydatne do ominięcia piaskownicy: 🟠
Ale potrzebujesz uprawnień roota, aby auditd działał i wywołał ostrzeżenie
Ominięcie TCC: 🔴
Lokalizacja
/etc/security/audit_warn
Wymagane uprawnienia roota
Wywołanie: Gdy auditd wykryje ostrzeżenie
Opis i 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.
Elementy uruchamiania
Jest to przestarzałe, więc nie powinno być tam znaleźć żadnych elementów.
StartupItem to katalog, który powinien znajdować się w /Library/StartupItems/
lub /System/Library/StartupItems/
. Po utworzeniu tego katalogu musi on 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ć.
Nazwa usługi super
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 groźby, 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ć następującej 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 Wykorzystanie
Wygląda na to, że plist
z /System/Library/LaunchAgents/com.apple.amstoold.plist
używał tego pliku binarnego, eksponując usługę XPC... problem polegał na 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 plik binarny.
Nie mogę już tego znaleźć w moim macOS.
xsanctl
Opis: https://theevilbit.github.io/beyond/beyond_0015/
Lokalizacja
/Library/Preferences/Xsan/.xsanrc
Wymagane uprawnienia roota
Wywołanie: 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 komend, które zostaną wykonane podczas uruchamiania systemu. Przykład zwykłego skryptu rc.common:
Techniki i narzędzia trwałości
Last updated