macOS Auto Start
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ovaj odeljak se u velikoj meri oslanja na seriju blogova Beyond the good ol' LaunchAgents, cilj je dodati više lokacija za automatsko pokretanje (ako je moguće), ukazati na koje tehnike još uvek funkcionišu danas sa najnovijom verzijom macOS-a (13.4) i precizirati dozvole koje su potrebne.
Ovde možete pronaći lokacije za pokretanje korisne za sandbox bypass koje vam omogućavaju da jednostavno izvršite nešto tako što ćete to napisati u datoteku i čekati na veoma uobičajenu akciju, određenu količinu vremena ili akciju koju obično možete izvršiti iznutra sandbox-a bez potrebe za root dozvolama.
/Library/LaunchAgents
Okidač: Ponovno pokretanje
Potrebne root dozvole
/Library/LaunchDaemons
Okidač: Ponovno pokretanje
Potrebne root dozvole
/System/Library/LaunchAgents
Okidač: Ponovno pokretanje
Potrebne root dozvole
/System/Library/LaunchDaemons
Okidač: Ponovno pokretanje
Potrebne root dozvole
~/Library/LaunchAgents
Okidač: Ponovno prijavljivanje
~/Library/LaunchDemons
Okidač: Ponovno prijavljivanje
Kao zanimljiva činjenica, launchd
ima ugrađenu listu svojstava u Mach-o sekciji __Text.__config
koja sadrži druge dobro poznate usluge koje launchd mora pokrenuti. Štaviše, ove usluge mogu sadržati RequireSuccess
, RequireRun
i RebootOnSuccess
, što znači da moraju biti pokrenute i uspešno završene.
Naravno, ne može se modifikovati zbog potpisivanja koda.
launchd
je prvi proces koji izvršava OX S kernel prilikom pokretanja i poslednji koji se završava prilikom gašenja. Uvek bi trebao imati PID 1. Ovaj proces će pročitati i izvršiti konfiguracije navedene u ASEP plist-ovima u:
/Library/LaunchAgents
: Agenti po korisniku instalirani od strane administratora
/Library/LaunchDaemons
: Daemoni na nivou sistema instalirani od strane administratora
/System/Library/LaunchAgents
: Agenti po korisniku koje pruža Apple.
/System/Library/LaunchDaemons
: Daemoni na nivou sistema koje pruža Apple.
Kada se korisnik prijavi, plist-ovi smešteni u /Users/$USER/Library/LaunchAgents
i /Users/$USER/Library/LaunchDemons
se pokreću sa dozvolama prijavljenih korisnika.
Glavna razlika između agenata i daemona je ta što se agenti učitavaju kada se korisnik prijavi, a daemoni se učitavaju prilikom pokretanja sistema (jer postoje usluge poput ssh koje treba izvršiti pre nego što bilo koji korisnik pristupi sistemu). Takođe, agenti mogu koristiti GUI dok daemoni moraju raditi u pozadini.
Postoje slučajevi kada agent treba da se izvrši pre nego što se korisnik prijavi, ovi se nazivaju PreLoginAgents. Na primer, ovo je korisno za pružanje asistivne tehnologije prilikom prijavljivanja. Mogu se naći i u /Library/LaunchAgents
(vidi ovde primer).
Nove konfiguracione datoteke za Daemons ili Agents će biti učitane nakon sledećeg ponovnog pokretanja ili korišćenjem launchctl load <target.plist>
Takođe je moguće učitati .plist datoteke bez te ekstenzije sa launchctl -F <file>
(međutim, te plist datoteke neće biti automatski učitane nakon ponovnog pokretanja).
Takođe je moguće isključiti sa launchctl unload <target.plist>
(proces na koji se ukazuje biće prekinut),
Da se osigura da ne postoji ništa (kao što je preklapanje) što sprečava Agent ili Daemon da radi pokrenite: sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist
Prikazati sve agente i daemone učitane od strane trenutnog korisnika:
Ako je plist u vlasništvu korisnika, čak i ako se nalazi u sistemskim folderima daemona, zadatak će biti izvršen kao korisnik a ne kao root. Ovo može sprečiti neke napade eskalacije privilegija.
launchd
je prvi proces korisničkog režima koji se pokreće iz jezgra. Pokretanje procesa mora biti uspešno i ne može se zatvoriti ili srušiti. Čak je i zaštićen od nekih signala za ubijanje.
Jedna od prvih stvari koje launchd
radi je da pokrene sve daemone kao što su:
Daemoni tajmera zasnovani na vremenu za izvršavanje:
atd (com.apple.atrun.plist
): Ima StartInterval
od 30min
crond (com.apple.systemstats.daily.plist
): Ima StartCalendarInterval
da se pokrene u 00:15
Mrežni daemoni kao što su:
org.cups.cups-lpd
: Sluša na TCP (SockType: stream
) sa SockServiceName: printer
SockServiceName mora biti ili port ili usluga iz /etc/services
com.apple.xscertd.plist
: Sluša na TCP na portu 1640
Put daemoni koji se izvršavaju kada se promeni određena putanja:
com.apple.postfix.master
: Proverava putanju /etc/postfix/aliases
IOKit notifikacijski daemoni:
com.apple.xartstorageremoted
: "com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...
Mach port:
com.apple.xscertd-helper.plist
: Ukazuje u MachServices
unosa na ime com.apple.xscertd.helper
UserEventAgent:
Ovo se razlikuje od prethodnog. Omogućava launchd-u da pokreće aplikacije kao odgovor na određene događaje. Međutim, u ovom slučaju, glavni binarni fajl koji je uključen nije launchd
već /usr/libexec/UserEventAgent
. Učitava dodatke iz SIP ograničenog foldera /System/Library/UserEventPlugins/ gde svaki dodatak ukazuje na svog inicijalizatora u XPCEventModuleInitializer
ključa ili, u slučaju starijih dodataka, u CFPluginFactories
rečniku pod ključem FB86416D-6164-2070-726F-70735C216EC0
svog Info.plist
.
Writeup: https://theevilbit.github.io/beyond/beyond_0001/ Writeup (xterm): https://theevilbit.github.io/beyond/beyond_0018/
Korisno za zaobilaženje sandboxes: ✅
TCC zaobilaženje: ✅
Ali morate pronaći aplikaciju sa TCC zaobilaženjem koja izvršava shell koji učitava ove fajlove
~/.zshrc
, ~/.zlogin
, ~/.zshenv.zwc
, ~/.zshenv
, ~/.zprofile
Okidač: Otvorite terminal sa zsh
/etc/zshenv
, /etc/zprofile
, /etc/zshrc
, /etc/zlogin
Okidač: Otvorite terminal sa zsh
Potreban root
~/.zlogout
Okidač: Izađite iz terminala sa zsh
/etc/zlogout
Okidač: Izađite iz terminala sa zsh
Potreban root
Potencijalno više u: man zsh
~/.bashrc
Okidač: Otvorite terminal sa bash
/etc/profile
(nije radilo)
~/.profile
(nije radilo)
~/.xinitrc
, ~/.xserverrc
, /opt/X11/etc/X11/xinit/xinitrc.d/
Okidač: Očekuje se da se aktivira sa xterm, ali nije instaliran i čak i nakon instalacije prikazuje se ova greška: xterm: DISPLAY is not set
Kada se inicira shell okruženje kao što su zsh
ili bash
, izvode se određeni startup fajlovi. macOS trenutno koristi /bin/zsh
kao podrazumevani shell. Ovaj shell se automatski pristupa kada se pokrene aplikacija Terminal ili kada se uređaj pristupi putem SSH. Dok su bash
i sh
takođe prisutni u macOS-u, moraju se eksplicitno pozvati da bi se koristili.
Man stranica za zsh, koju možemo pročitati sa man zsh
ima dug opis startup fajlova.
Konfigurisanje naznačenog iskorišćavanja i odjavljivanje i prijavljivanje ili čak ponovo pokretanje nije mi pomoglo da pokrenem aplikaciju. (Aplikacija nije bila pokrenuta, možda treba da bude aktivna kada se ove radnje izvrše)
Writeup: https://theevilbit.github.io/beyond/beyond_0021/
~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
Okidač: Ponovno pokretanje otvorenih aplikacija
Sve aplikacije koje treba ponovo otvoriti su unutar plist-a ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
Dakle, da ponovo otvorene aplikacije pokrenu vašu, samo treba da dodate svoju aplikaciju na listu.
UUID se može pronaći listanjem tog direktorijuma ili sa ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'
Da proverite aplikacije koje će biti ponovo otvorene možete uraditi:
Da dodate aplikaciju na ovu listu možete koristiti:
Korisno za zaobilaženje sandbox-a: ✅
TCC zaobilaženje: ✅
Terminal koristi FDA dozvole korisnika koji ga koristi
~/Library/Preferences/com.apple.Terminal.plist
Trigger: Otvorite Terminal
U ~/Library/Preferences
se čuvaju podešavanja korisnika u Aplikacijama. Neka od ovih podešavanja mogu sadržati konfiguraciju za izvršavanje drugih aplikacija/skripti.
Na primer, Terminal može izvršiti komandu pri pokretanju:
Ova konfiguracija se odražava u datoteci ~/Library/Preferences/com.apple.Terminal.plist
na sledeći način:
Dakle, ako se plist podešavanja terminala u sistemu može prepisati, tada se open
funkcionalnost može koristiti za otvaranje terminala i ta komanda će biti izvršena.
Možete to dodati iz CLI-a sa:
Korisno za zaobilaženje sandbox-a: ✅
TCC zaobilaženje: ✅
Terminal se koristi za dobijanje FDA dozvola korisnika koji ga koristi
Bilo gde
Okidač: Otvorite Terminal
Ako kreirate .terminal
skriptu i otvorite je, Terminal aplikacija će automatski biti pozvana da izvrši komande navedene u njoj. Ako Terminal aplikacija ima neke posebne privilegije (kao što je TCC), vaša komanda će biti izvršena sa tim posebnim privilegijama.
Isprobajte to sa:
Možete takođe koristiti ekstenzije .command
, .tool
, sa sadržajem običnih shell skripti i one će takođe biti otvorene u Terminalu.
Ako terminal ima Potpunu Disk Pristup, moći će da izvrši tu akciju (napomena: izvršena komanda će biti vidljiva u terminal prozoru).
Writeup: https://theevilbit.github.io/beyond/beyond_0013/ Writeup: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882
/Library/Audio/Plug-Ins/HAL
Potreban root
Okidač: Ponovno pokretanje coreaudiod-a ili računara
/Library/Audio/Plug-ins/Components
Potreban root
Okidač: Ponovno pokretanje coreaudiod-a ili računara
~/Library/Audio/Plug-ins/Components
Okidač: Ponovno pokretanje coreaudiod-a ili računara
/System/Library/Components
Potreban root
Okidač: Ponovno pokretanje coreaudiod-a ili računara
Prema prethodnim writeup-ima, moguće je kompilirati neke audio pluginove i učitati ih.
Writeup: https://theevilbit.github.io/beyond/beyond_0028/
/System/Library/QuickLook
/Library/QuickLook
~/Library/QuickLook
/Applications/AppNameHere/Contents/Library/QuickLook/
~/Applications/AppNameHere/Contents/Library/QuickLook/
QuickLook pluginovi mogu biti izvršeni kada pokrenete pregled datoteke (pritisnite razmaknicu sa izabranom datotekom u Finder-u) i plugin koji podržava taj tip datoteke je instaliran.
Moguće je kompilirati svoj vlastiti QuickLook plugin, postaviti ga u jednu od prethodnih lokacija da bi ga učitali, a zatim otići do podržane datoteke i pritisnuti razmaknicu da ga pokrenete.
Ovo nije radilo za mene, ni sa korisničkim LoginHook-om ni sa root LogoutHook-om
Writeup: https://theevilbit.github.io/beyond/beyond_0022/
Morate biti u mogućnosti da izvršite nešto poput defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
Lo
cira se u ~/Library/Preferences/com.apple.loginwindow.plist
Oni su zastareli, ali se mogu koristiti za izvršavanje komandi kada se korisnik prijavi.
Ova postavka se čuva u /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
Da biste to obrisali:
The root korisnik se čuva u /private/var/root/Library/Preferences/com.apple.loginwindow.plist
Ovde možete pronaći lokacije za pokretanje korisne za zaobilaženje peskovnika koje vam omogućava da jednostavno izvršite nešto upisivanjem u datoteku i očekivanjem ne tako uobičajenih uslova kao što su specifični instalirani programi, "neobične" korisničke radnje ili okruženja.
Pisanje: https://theevilbit.github.io/beyond/beyond_0004/
Korisno za zaobilaženje peskovnika: ✅
Međutim, morate biti u mogućnosti da izvršite crontab
binarni fajl
Ili biti root
TCC zaobilaženje: 🔴
/usr/lib/cron/tabs/
, /private/var/at/tabs
, /private/var/at/jobs
, /etc/periodic/
Root je potreban za direktan pristup pisanju. Nije potreban root ako možete izvršiti crontab <file>
Okidač: Zavisi od cron posla
Prikazivanje cron poslova trenutnog korisnika sa:
Možete takođe videti sve cron poslove korisnika u /usr/lib/cron/tabs/
i /var/at/tabs/
(potrebne su administratorske privilegije).
Na MacOS-u se nekoliko foldera koji izvršavaju skripte sa određenom frekvencijom može naći u:
Tamo možete pronaći redovne cron poslove, at poslove (koji se ne koriste često) i periodične poslove (koji se uglavnom koriste za čišćenje privremenih datoteka). Dnevni periodični poslovi mogu se izvršiti, na primer, sa: periodic daily
.
Da biste programatski dodali korisnički cronjob, moguće je koristiti:
Writeup: https://theevilbit.github.io/beyond/beyond_0002/
~/Library/Application Support/iTerm2/Scripts/AutoLaunch
Okidač: Otvorite iTerm
~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
Okidač: Otvorite iTerm
~/Library/Preferences/com.googlecode.iterm2.plist
Okidač: Otvorite iTerm
Skripte smeštene u ~/Library/Application Support/iTerm2/Scripts/AutoLaunch
biće izvršene. Na primer:
или:
Skripta ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
će takođe biti izvršena:
Podešavanja iTerm2 koja se nalaze u ~/Library/Preferences/com.googlecode.iterm2.plist
mogu ukazivati na komandu koja će se izvršiti kada se iTerm2 terminal otvori.
Ova postavka može biti konfigurisana u iTerm2 podešavanjima:
A komanda se odražava u podešavanjima:
Možete postaviti komandu za izvršavanje sa:
Veoma je verovatno da postoje drugi načini za zloupotrebu iTerm2 podešavanja za izvršavanje proizvoljnih komandi.
Writeup: https://theevilbit.github.io/beyond/beyond_0007/
Korisno za zaobilaženje sandboxes: ✅
Ali xbar mora biti instaliran
TCC zaobilaženje: ✅
Zahteva dozvole za pristup
~/Library/Application\ Support/xbar/plugins/
Okidač: Kada se xbar izvrši
Ako je popularni program xbar instaliran, moguće je napisati shell skriptu u ~/Library/Application\ Support/xbar/plugins/
koja će biti izvršena kada se xbar pokrene:
Writeup: https://theevilbit.github.io/beyond/beyond_0008/
Korisno za zaobilaženje sandbox-a: ✅
Ali Hammerspoon mora biti instaliran
TCC zaobilaženje: ✅
Zahteva dozvole za pristup
~/.hammerspoon/init.lua
Trigger: Kada se izvrši hammerspoon
Hammerspoon služi kao platforma za automatizaciju za macOS, koristeći LUA skriptni jezik za svoje operacije. Značajno, podržava integraciju kompletnog AppleScript koda i izvršavanje shell skripti, značajno poboljšavajući svoje skriptne mogućnosti.
Aplikacija traži jedan fajl, ~/.hammerspoon/init.lua
, i kada se pokrene, skripta će biti izvršena.
Korisno za zaobilaženje sandbox-a: ✅
Ali BetterTouchTool mora biti instaliran
TCC zaobilaženje: ✅
Zahteva dozvole za Automatizaciju-Prečice i Pristupačnost
~/Library/Application Support/BetterTouchTool/*
Ovaj alat omogućava da se označe aplikacije ili skripte koje će se izvršiti kada se pritisnu određene prečice. Napadač bi mogao da konfiguriše svoju prečicu i akciju za izvršavanje u bazi podataka kako bi izvršio proizvoljan kod (prečica bi mogla biti samo pritisak na taster).
Korisno za zaobilaženje sandbox-a: ✅
Ali Alfred mora biti instaliran
TCC zaobilaženje: ✅
Zahteva dozvole za Automatizaciju, Pristupačnost i čak Pristup celom disku
???
Omogućava kreiranje radnih tokova koji mogu izvršavati kod kada su ispunjeni određeni uslovi. Potencijalno je moguće da napadač kreira datoteku radnog toka i natera Alfreda da je učita (potrebno je platiti premium verziju za korišćenje radnih tokova).
Writeup: https://theevilbit.github.io/beyond/beyond_0006/
Korisno za zaobilaženje sandbox-a: ✅
Ali ssh mora biti omogućen i korišćen
TCC zaobilaženje: ✅
SSH koristi za FDA pristup
~/.ssh/rc
Okidač: Prijava putem ssh
/etc/ssh/sshrc
Potreban root
Okidač: Prijava putem ssh
Da bi se uključio ssh, potrebna je dozvola za Pristup celom disku:
Po default-u, osim ako nije PermitUserRC no
u /etc/ssh/sshd_config
, kada se korisnik prijavi putem SSH skripte /etc/ssh/sshrc
i ~/.ssh/rc
će biti izvršene.
Writeup: https://theevilbit.github.io/beyond/beyond_0003/
~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Okidač: Prijava
Eksploatacijski payload se čuva pozivajući osascript
/var/db/com.apple.xpc.launchd/loginitems.501.plist
Okidač: Prijava
Potreban root
U System Preferences -> Users & Groups -> Stvari za prijavu možete pronaći stavke koje će biti izvršene kada se korisnik prijavi. Moguće je da ih navedete, dodate i uklonite iz komandne linije:
Ovi stavovi se čuvaju u datoteci ~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Stvari za prijavu mogu takođe biti označene korišćenjem API-ja SMLoginItemSetEnabled koji će sačuvati konfiguraciju u /var/db/com.apple.xpc.launchd/loginitems.501.plist
(Pogledajte prethodni odeljak o stavkama za prijavu, ovo je ekstenzija)
Ako sačuvate ZIP datoteku kao stavku za prijavu, Archive Utility
će je otvoriti i ako je zip, na primer, sačuvan u ~/Library
i sadrži folder LaunchAgents/file.plist
sa backdoor-om, taj folder će biti kreiran (nije podrazumevano) i plist će biti dodat tako da će sledeći put kada se korisnik ponovo prijavi, backdoor naznačen u plist-u biti izvršen.
Druga opcija bi bila da se kreiraju datoteke .bash_profile
i .zshenv
unutar korisničkog HOME-a, tako da ako folder LaunchAgents već postoji, ova tehnika bi i dalje radila.
Izveštaj: https://theevilbit.github.io/beyond/beyond_0014/
Potrebno je izvršiti at
i mora biti omogućeno
at
zadaci su dizajnirani za zakazivanje jednokratnih zadataka koji će se izvršiti u određenim vremenima. Za razliku od cron poslova, at
zadaci se automatski uklanjaju nakon izvršenja. Važno je napomenuti da su ovi zadaci postojani kroz ponovna pokretanja sistema, što ih označava kao potencijalne bezbednosne probleme pod određenim uslovima.
Po podrazumevanoj postavci su onemogućeni, ali root korisnik može omogućiti ih sa:
Ovo će kreirati datoteku za 1 sat:
Proverite red zadataka koristeći atq:
Iznad možemo videti dva zakazana posla. Možemo odštampati detalje posla koristeći at -c JOBNUMBER
Ako AT zadaci nisu omogućeni, kreirani zadaci neće biti izvršeni.
fajlovi zadataka se mogu naći na /private/var/at/jobs/
The filename contains the queue, the job number, and the time it’s scheduled to run. For example let’s take a loot at a0001a019bdcd2
.
a
- ovo je red
0001a
- broj posla u heksadecimalnom formatu, 0x1a = 26
019bdcd2
- vreme u heksadecimalnom formatu. Predstavlja minute koje su prošle od epohe. 0x019bdcd2
je 26991826
u decimalnom formatu. Ako to pomnožimo sa 60 dobijamo 1619509560
, što je GMT: 27. april 2021., utorak 7:46:00
.
If we print the job file, we find that it contains the same information we got using at -c
.
Writeup: https://theevilbit.github.io/beyond/beyond_0024/ Writeup: https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d
Korisno za zaobilaženje sandbox-a: ✅
Ali morate moći da pozovete osascript
sa argumentima da biste kontaktirali System Events
kako biste mogli da konfigurišete Folder Actions
TCC zaobilaženje: 🟠
Ima neka osnovna TCC dopuštenja kao što su Desktop, Documents i Downloads
/Library/Scripts/Folder Action Scripts
Potrebna je root privilegija
Okidač: Pristup određenom folderu
~/Library/Scripts/Folder Action Scripts
Okidač: Pristup određenom folderu
Folder Actions su skripte koje se automatski pokreću promenama u folderu kao što su dodavanje, uklanjanje stavki ili druge akcije poput otvaranja ili promena veličine prozora foldera. Ove akcije se mogu koristiti za razne zadatke i mogu se pokrenuti na različite načine kao što su korišćenje Finder UI ili terminalskih komandi.
Da biste postavili Folder Actions, imate opcije kao što su:
Kreiranje Folder Action radnog toka sa Automator i instaliranje kao uslugu.
Ručno povezivanje skripte putem Folder Actions Setup u kontekstualnom meniju foldera.
Korišćenje OSAScript-a za slanje Apple Event poruka System Events.app
za programatsko postavljanje Folder Action.
Ova metoda je posebno korisna za ugrađivanje akcije u sistem, nudeći nivo postojanosti.
The following script is an example of what can be executed by a Folder Action:
Da biste učinili gornji skript upotrebljivim za Folder Actions, kompajlirajte ga koristeći:
Nakon što je skripta kompajlirana, postavite Folder Actions izvršavanjem sledeće skripte. Ova skripta će omogućiti Folder Actions globalno i posebno povezati prethodno kompajliranu skriptu sa Desktop folderom.
Pokrenite skriptu za podešavanje sa:
Ovo je način na koji se implementira ova postojanost putem GUI:
Ovo je skripta koja će biti izvršena:
Kompajlirajte to sa: osacompile -l JavaScript -o folder.scpt source.js
Premestite to u:
Zatim otvorite aplikaciju Folder Actions Setup
, izaberite folder koji želite da pratite i izaberite u vašem slučaju folder.scpt
(u mom slučaju sam ga nazvao output2.scp):
Sada, ako otvorite taj folder sa Finder, vaš skript će biti izvršen.
Ova konfiguracija je sačuvana u plist datoteci koja se nalazi u ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
u base64 formatu.
Sada, hajde da pokušamo da pripremimo ovu postavku bez GUI pristupa:
Kopirajte ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
u /tmp
da biste je sačuvali:
cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp
Uklonite Folder Actions koje ste upravo postavili:
Sada kada imamo prazan okruženje
Kopirajte rezervnu datoteku: cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/
Otvorite Folder Actions Setup.app da biste iskoristili ovu konfiguraciju: open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"
I ovo nije radilo za mene, ali to su uputstva iz izveštaja:(
Izveštaj: https://theevilbit.github.io/beyond/beyond_0027/
Korisno za zaobilaženje sandbox-a: ✅
Ali morate imati instaliranu zlonamernu aplikaciju unutar sistema
TCC zaobilaženje: 🔴
~/Library/Preferences/com.apple.dock.plist
Okidač: Kada korisnik klikne na aplikaciju unutar dock-a
Sve aplikacije koje se pojavljuju u Dock-u su navedene unutar plist-a: ~/Library/Preferences/com.apple.dock.plist
Moguće je dodati aplikaciju samo sa:
Korišćenjem neke socijalne inženjering mogli biste imitirati na primer Google Chrome unutar dock-a i zapravo izvršiti svoj skript:
Writeup: https://theevilbit.github.io/beyond/beyond_0017
Korisno za zaobilaženje sandboxes: 🟠
Potrebna je vrlo specifična akcija
Završićete u drugom sandboxu
TCC zaobilaženje: 🔴
/Library/ColorPickers
Potrebna je root privilegija
Okidač: Koristite selektor boja
~/Library/ColorPickers
Okidač: Koristite selektor boja
Kompajlirajte paket selektora boja sa vašim kodom (možete koristiti ovaj na primer) i dodajte konstruktor (kao u odeljku za screensaver) i kopirajte paket u ~/Library/ColorPickers
.
Zatim, kada se selektor boja aktivira, vaš kod bi takođe trebao da se izvrši.
Napomena da binarni fajl koji učitava vašu biblioteku ima veoma restriktivan sandbox: /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64
Writeup: https://theevilbit.github.io/beyond/beyond_0026/ Writeup: https://objective-see.org/blog/blog_0x11.html
Korisno za zaobilaženje sandboks-a: Ne, jer morate izvršiti svoju aplikaciju
TCC zaobilaženje: ???
Specifična aplikacija
Primer aplikacije sa Finder Sync ekstenzijom može se naći ovde.
Aplikacije mogu imati Finder Sync Extensions
. Ova ekstenzija će ući u aplikaciju koja će biti izvršena. Štaviše, da bi ekstenzija mogla da izvrši svoj kod, mora biti potpisana nekim važećim Apple razvojnim sertifikatom, mora biti sandboxed (iako bi mogle biti dodate opuštene izuzetke) i mora biti registrovana sa nečim poput:
Writeup: https://theevilbit.github.io/beyond/beyond_0016/ Writeup: https://posts.specterops.io/saving-your-access-d562bf5bf90b
Korisno za zaobilaženje sandbox-a: 🟠
Ali ćete završiti u zajedničkom aplikacionom sandbox-u
TCC zaobilaženje: 🔴
/System/Library/Screen Savers
Potreban root
Okidač: Izaberite zaštitni ekran
/Library/Screen Savers
Potreban root
Okidač: Izaberite zaštitni ekran
~/Library/Screen Savers
Okidač: Izaberite zaštitni ekran
Kreirajte novi projekat u Xcode-u i izaberite šablon za generisanje novog Zaštitnog ekrana. Zatim, dodajte svoj kod, na primer sledeći kod za generisanje logova.
Izgradite ga, i kopirajte .saver
paket u ~/Library/Screen Savers
. Zatim, otvorite GUI za zaštitni ekran i ako samo kliknete na njega, trebalo bi da generiše mnogo logova:
Imajte na umu da se unutar prava binarnog koda koji učitava ovaj kod (/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver
) može naći com.apple.security.app-sandbox
, tako da ćete biti unutar zajedničkog aplikacionog sandboks-a.
Saver code:
writeup: https://theevilbit.github.io/beyond/beyond_0011/
Korisno za zaobilaženje sandboxes: 🟠
Ali ćete završiti u aplikacionom sandboxu
TCC zaobilaženje: 🔴
Sandbox izgleda veoma ograničeno
~/Library/Spotlight/
Okidač: Novi fajl sa ekstenzijom kojom upravlja spotlight plugin je kreiran.
/Library/Spotlight/
Okidač: Novi fajl sa ekstenzijom kojom upravlja spotlight plugin je kreiran.
Potreban root
/System/Library/Spotlight/
Okidač: Novi fajl sa ekstenzijom kojom upravlja spotlight plugin je kreiran.
Potreban root
Some.app/Contents/Library/Spotlight/
Okidač: Novi fajl sa ekstenzijom kojom upravlja spotlight plugin je kreiran.
Potrebna nova aplikacija
Spotlight je ugrađena pretraga u macOS-u, dizajnirana da korisnicima omogući brz i sveobuhvatan pristup podacima na njihovim računarima. Da bi olakšao ovu brzu pretragu, Spotlight održava proprietarnu bazu podataka i kreira indeks parsanjem većine fajlova, omogućavajući brze pretrage kroz imena fajlova i njihov sadržaj.
Osnovni mehanizam Spotlight-a uključuje centralni proces nazvan 'mds', što znači 'metadata server'. Ovaj proces orchestrira celu Spotlight uslugu. Pored toga, postoje višestruki 'mdworker' daemoni koji obavljaju razne zadatke održavanja, kao što je indeksiranje različitih tipova fajlova (ps -ef | grep mdworker
). Ovi zadaci su omogućeni kroz Spotlight importer plugine, ili ".mdimporter bundles", koji omogućavaju Spotlight-u da razume i indeksira sadržaj kroz raznovrsne formate fajlova.
Plugini ili .mdimporter
paketi se nalaze na mestima pomenutim ranije i ako se pojavi novi paket, on se učitava u trenutku (nema potrebe za ponovnim pokretanjem bilo koje usluge). Ovi paketi moraju da označe koji tip fajla i ekstenzije mogu da upravljaju, na ovaj način, Spotlight će ih koristiti kada se kreira novi fajl sa označenom ekstenzijom.
Moguće je pronaći sve mdimporters
učitane u radu:
I na primer /Library/Spotlight/iBooksAuthor.mdimporter se koristi za parsiranje ovih tipova datoteka (ekstenzije .iba
i .book
među ostalima):
Ako proverite Plist drugih mdimporter
, možda nećete pronaći unos UTTypeConformsTo
. To je zato što je to ugrađeni Uniform Type Identifiers (UTI) i ne mora da specificira ekstenzije.
Pored toga, sistemski podrazumevani dodaci uvek imaju prioritet, tako da napadač može pristupiti samo datotekama koje nisu inače indeksirane od strane Apple-ovih mdimporters
.
Da biste kreirali svoj vlastiti uvoznik, možete početi sa ovim projektom: https://github.com/megrimm/pd-spotlight-importer i zatim promeniti ime, CFBundleDocumentTypes
i dodati UTImportedTypeDeclarations
kako bi podržao ekstenziju koju želite da podržite i reflektujte ih u schema.xml
.
Zatim promenite kod funkcije GetMetadataForFile
da izvršite svoj payload kada se kreira datoteka sa obrađenom ekstenzijom.
Na kraju izgradite i kopirajte svoj novi .mdimporter
na jednu od prethodnih lokacija i možete proveriti da li je učitan prateći logove ili proveravajući mdimport -L.
Ne izgleda da ovo više radi.
Writeup: https://theevilbit.github.io/beyond/beyond_0009/
/System/Library/PreferencePanes
/Library/PreferencePanes
~/Library/PreferencePanes
Ne izgleda da ovo više radi.
Ovde možete pronaći startne lokacije korisne za zaobilaženje sandboks-a koje vam omogućavaju da jednostavno izvršite nešto upisivanjem u datoteku kao root i/ili zahtevajući druge čudne uslove.
Writeup: https://theevilbit.github.io/beyond/beyond_0019/
/etc/periodic/daily
, /etc/periodic/weekly
, /etc/periodic/monthly
, /usr/local/etc/periodic
Potreban root
Okidač: Kada dođe vreme
/etc/daily.local
, /etc/weekly.local
ili /etc/monthly.local
Potreban root
Okidač: Kada dođe vreme
Periodični skripti (/etc/periodic
) se izvršavaju zbog launch daemona konfigurisanih u /System/Library/LaunchDaemons/com.apple.periodic*
. Imajte na umu da se skripte smeštene u /etc/periodic/
izvršavaju kao vlasnik datoteke, tako da ovo neće raditi za potencijalno eskaliranje privilegija.
Postoje drugi periodični skripti koji će biti izvršeni, a koji su navedeni u /etc/defaults/periodic.conf
:
Ako uspete da napišete bilo koji od fajlova /etc/daily.local
, /etc/weekly.local
ili /etc/monthly.local
, biće izvršen pre ili kasnije.
Napomena: periodični skript će biti izvršen kao vlasnik skripta. Dakle, ako običan korisnik poseduje skript, biće izvršen kao taj korisnik (to može sprečiti napade na eskalaciju privilegija).
Writeup: Linux Hacktricks PAM Writeup: https://theevilbit.github.io/beyond/beyond_0005/
Root uvek potreban
Kako je PAM više fokusiran na perzistenciju i malver nego na lako izvršavanje unutar macOS-a, ovaj blog neće dati detaljno objašnjenje, pročitajte writeup-ove da biste bolje razumeli ovu tehniku.
Proverite PAM module sa:
Tehnika postojanosti/povećanja privilegija koja zloupotrebljava PAM je jednostavna kao modifikacija modula /etc/pam.d/sudo dodavanjem linije na početak:
Tako će izgledati nešto poput ovoga:
I stoga će svaki pokušaj korišćenja sudo
raditi.
Napomena da je ovaj direktorijum zaštićen TCC-om, tako da je veoma verovatno da će korisnik dobiti obaveštenje koje traži pristup.
Još jedan lep primer je su, gde možete videti da je takođe moguće dati parametre PAM modulima (i takođe možete dodati backdoor u ovu datoteku):
Writeup: https://theevilbit.github.io/beyond/beyond_0028/ Writeup: https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65
Korisno za zaobilaženje sandbox-a: 🟠
Ali morate biti root i napraviti dodatne konfiguracije
TCC zaobilaženje: ???
/Library/Security/SecurityAgentPlugins/
Potreban root
Takođe je potrebno konfigurisati bazu podataka autorizacije da koristi plugin
Možete kreirati autorizacioni plugin koji će se izvršiti kada se korisnik prijavi kako bi održao postojanost. Za više informacija o tome kako da kreirate jedan od ovih pluginova, pogledajte prethodne izveštaje (i budite oprezni, loše napisan može vas zaključati i biće potrebno da očistite vaš mac iz režima oporavka).
Premestite paket na lokaciju koja treba da se učita:
Konačno dodajte pravilo za učitavanje ovog dodatka:
evaluate-mechanisms
će reći okviru za autorizaciju da će morati da pozove spoljašnji mehanizam za autorizaciju. Štaviše, privileged
će omogućiti da se izvrši kao root.
Pokrenite ga sa:
I onda grupa staff treba da ima sudo pristup (proverite /etc/sudoers
da potvrdite).
Writeup: https://theevilbit.github.io/beyond/beyond_0030/
Korisno za zaobilaženje sandbox-a: 🟠
Ali morate biti root i korisnik mora koristiti man
TCC zaobilaženje: 🔴
/private/etc/man.conf
Potreban root
/private/etc/man.conf
: Kada god se koristi man
Konfiguracioni fajl /private/etc/man.conf
označava binarni/skript koji se koristi prilikom otvaranja man dokumentacionih fajlova. Tako da putanja do izvršnog fajla može biti izmenjena tako da svaki put kada korisnik koristi man za čitanje nekih dokumenata, backdoor se izvršava.
Na primer, postavite u /private/etc/man.conf
:
А затим креирајте /tmp/view
као:
Writeup: https://theevilbit.github.io/beyond/beyond_0023/
Korisno za zaobilaženje sandboxes: 🟠
Ali morate biti root i apache mora biti pokrenut
TCC zaobilaženje: 🔴
Httpd nema ovlašćenja
/etc/apache2/httpd.conf
Potreban root
Okidač: Kada se Apache2 pokrene
Možete naznačiti u /etc/apache2/httpd.conf
da učitate modul dodajući liniju kao što je:
Na ovaj način će vaš kompajlirani modul biti učitan od strane Apache-a. Jedina stvar je da ili treba da potpišete sa važećim Apple sertifikatom, ili treba da dodate novi poverljivi sertifikat u sistem i potpišete ga sa njim.
Zatim, ako je potrebno, da biste bili sigurni da će server biti pokrenut, možete izvršiti:
Primer koda za Dylb:
Writeup: https://theevilbit.github.io/beyond/beyond_0031/
Korisno za zaobilaženje sandbox-a: 🟠
Ali morate biti root, auditd mora biti pokrenut i izazvati upozorenje
TCC zaobilaženje: 🔴
/etc/security/audit_warn
Potreban root
Okidač: Kada auditd detektuje upozorenje
Kada god auditd detektuje upozorenje, skripta /etc/security/audit_warn
se izvršava. Tako možete dodati svoj payload u nju.
Možete naterati upozorenje sa sudo audit -n
.
Ovo je zastarelo, tako da ne bi trebalo da se nađe ništa u tim direktorijumima.
StartupItem je direktorijum koji treba da bude smešten u /Library/StartupItems/
ili /System/Library/StartupItems/
. Kada je ovaj direktorijum uspostavljen, mora sadržati dva specifična fajla:
rc skripta: Shell skripta koja se izvršava pri pokretanju.
plist fajl, specifično nazvan StartupParameters.plist
, koji sadrži razne konfiguracione postavke.
Osigurajte da su i rc skripta i StartupParameters.plist
fajl ispravno smešteni unutar StartupItem direktorijuma kako bi proces pokretanja mogao da ih prepozna i koristi.
Ne mogu pronaći ovu komponentu na svom macOS-u, pa za više informacija proverite izveštaj
Izveštaj: https://theevilbit.github.io/beyond/beyond_0023/
Uveden od strane Apple-a, emond je mehanizam za logovanje koji deluje nedovoljno razvijen ili možda napušten, ali ostaje dostupan. Iako nije posebno koristan za Mac administratora, ova nejasna usluga može poslužiti kao suptilan metod postojanosti za pretnje, verovatno neprimećen od strane većine macOS administratora.
Za one koji su svesni njenog postojanja, identifikacija bilo kakve zlonamerne upotrebe emond-a je jednostavna. LaunchDaemon sistema za ovu uslugu traži skripte za izvršavanje u jednoj direktorijumu. Da biste to proverili, može se koristiti sledeća komanda:
Writeup: https://theevilbit.github.io/beyond/beyond_0018/
/opt/X11/etc/X11/xinit/privileged_startx.d
Potrebne su administratorske privilegije
Okidač: Sa XQuartz
XQuartz više nije instaliran u macOS, pa ako želite više informacija, proverite izveštaj.
Veoma je komplikovano instalirati kext čak i kao root, tako da ovo neću smatrati za izlazak iz sandboxes ili čak za postojanost (osim ako nemate eksploataciju)
Da bi se KEXT instalirao kao stavka pri pokretanju, mora biti instaliran na jednoj od sledećih lokacija:
/System/Library/Extensions
KEXT datoteke ugrađene u OS X operativni sistem.
/Library/Extensions
KEXT datoteke instalirane od strane softvera trećih strana
Možete nabrojati trenutno učitane kext datoteke sa:
Za više informacija o proveri kernel ekstenzija pogledajte ovu sekciju.
Pisanje: https://theevilbit.github.io/beyond/beyond_0029/
/usr/local/bin/amstoold
Potrebne su administratorske privilegije
Naizgled, plist
iz /System/Library/LaunchAgents/com.apple.amstoold.plist
je koristio ovu binarnu datoteku dok je izlagao XPC servis... stvar je u tome što binarna datoteka nije postojala, tako da ste mogli staviti nešto tamo i kada se XPC servis pozove, vaša binarna datoteka će biti pozvana.
Više ne mogu da pronađem ovo na svom macOS-u.
Pisanje: https://theevilbit.github.io/beyond/beyond_0015/
/Library/Preferences/Xsan/.xsanrc
Potrebne su administratorske privilegije
Okidač: Kada se servis pokrene (retko)
Naizgled, nije baš uobičajeno pokretati ovaj skript i nisam mogao ni da ga pronađem na svom macOS-u, tako da ako želite više informacija, pogledajte pisanje.
Ovo ne funkcioniše u modernim verzijama MacOS-a
Takođe je moguće ovde postaviti komande koje će se izvršavati prilikom pokretanja. Primer regularnog rc.common skripta:
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)