macOS Auto Start
Ova sekcija se temelji na blog serijalu Beyond the good ol' LaunchAgents, cilj je dodati više lokacija automatskog pokretanja (ako je moguće), naznačiti koje tehnike još uvek funkcionišu danas sa najnovijom verzijom macOS-a (13.4) i specificirati potrebne dozvole.
Bypass peska
Ovde možete pronaći lokacije pokretanja korisne za bypass peska koji vam omogućava da jednostavno izvršite nešto tako što to upišete u datoteku i sačekate za vrlo uobičajenu akciju, određeno vreme ili akciju koju obično možete izvršiti iz peska bez potrebe za root dozvolama.
Launchd
Lokacije
/Library/LaunchAgents
Okidač: Ponovno pokretanje
Potrebno root
/Library/LaunchDaemons
Okidač: Ponovno pokretanje
Potrebno root
/System/Library/LaunchAgents
Okidač: Ponovno pokretanje
Potrebno root
/System/Library/LaunchDaemons
Okidač: Ponovno pokretanje
Potrebno root
~/Library/LaunchAgents
Okidač: Ponovna prijava
~/Library/LaunchDemons
Okidač: Ponovna prijava
Kao zanimljivost, launchd
ima ugrađenu listu svojstava u Mach-o sekciji __Text.__config
koja sadrži druge dobro poznate servise koje launchd
mora pokrenuti. Osim toga, ovi servisi mogu sadržati RequireSuccess
, RequireRun
i RebootOnSuccess
što znači da moraju biti pokrenuti i uspešno završeni.
Naravno, ne može se menjati zbog potpisa koda.
Opis & Eksploatacija
launchd
je prvi proces koji se izvršava od strane OX S kernela pri pokretanju i poslednji koji se završava pri gašenju. Uvek bi trebao imati PID 1. Ovaj proces će čitati i izvršavati konfiguracije naznačene u ASEP plistama u:
/Library/LaunchAgents
: Agensi po korisniku instalirani od strane administratora/Library/LaunchDaemons
: Demoni na nivou sistema instalirani od strane administratora/System/Library/LaunchAgents
: Agensi po korisniku koje pruža Apple./System/Library/LaunchDaemons
: Demoni na nivou sistema koje pruža Apple.
Kada se korisnik prijavi, plistovi 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 demona je u tome što se agenti učitavaju kada se korisnik prijavi, a demoni se učitavaju pri pokretanju sistema (kako postoje servisi poput ssh koji moraju biti izvršeni pre nego što bilo koji korisnik pristupi sistemu). Takođe, agenti mogu koristiti GUI dok demoni moraju raditi u pozadini.
Postoje slučajevi kada je potrebno izvršiti agenta pre nego što se korisnik prijavi, ovi se nazivaju PreLoginAgents. Na primer, ovo je korisno za pružanje asistivne tehnologije pri prijavi. Mogu se pronaći i u /Library/LaunchAgents
(videti ovde primer).
Konfiguracioni fajlovi novih demona ili agenata će biti učitani nakon sledećeg restarta ili korišćenjem launchctl load <target.plist>
Takođe je moguće učitati .plist fajlove bez te ekstenzije sa launchctl -F <file>
(međutim, ovi plist fajlovi neće biti automatski učitani nakon restarta).
Takođe je moguće ih isključiti sa launchctl unload <target.plist>
(proces koji pokazuje na njega će biti završen),
Da osigurate da ne postoji ništa (kao što je prekoračenje) koje sprečava Agenta ili Demona da se pokrene pokrenite: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist
Izlistajte sve agente i demone učitane od strane trenutnog korisnika:
Ako je plist u vlasništvu korisnika, čak i ako se nalazi u sistemskim folderima demona, zadatak će biti izvršen kao korisnik a ne kao root. Ovo može sprečiti neke napade na eskalaciju privilegija.
Više informacija o launchd
launchd
je prvi proces režima korisnika koji se pokreće iz jezgra. Pokretanje procesa mora biti uspešno i ne sme izaći ili se srušiti. Čak je zaštićen od nekih signala za ubijanje.
Jedna od prvih stvari koje bi launchd
uradio bilo bi da pokrene sve demone kao što su:
Demoni tajmera zasnovani na vremenu za izvršenje:
atd (
com.apple.atrun.plist
): ImaStartInterval
od 30 minutacrond (
com.apple.systemstats.daily.plist
): ImaStartCalendarInterval
da se pokrene u 00:15
Mrežni demoni poput:
org.cups.cups-lpd
: Sluša na TCP-u (SockType: stream
) saSockServiceName: printer
SockServiceName mora biti ili port ili usluga iz
/etc/services
com.apple.xscertd.plist
: Sluša na TCP-u na portu 1640
Demoni putanje koji se izvršavaju kada se promeni određena putanja:
com.apple.postfix.master
: Proverava putanju/etc/postfix/aliases
IOKit obaveštenja demona:
com.apple.xartstorageremoted
:"com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...
Mach port:
com.apple.xscertd-helper.plist
: Označava u unosuMachServices
imecom.apple.xscertd.helper
UserEventAgent:
Ovo je drugačije od prethodnog. Pravi da launchd pokrene aplikacije kao odgovor na određeni događaj. Međutim, u ovom slučaju, glavni binarni fajl uključen nije
launchd
već/usr/libexec/UserEventAgent
. Učitava dodatke iz SIP restrikovanog foldera /System/Library/UserEventPlugins/ gde svaki dodatak pokazuje svoj inicijalizator u ključuXPCEventModuleInitializer
ili, u slučaju starijih dodataka, u rečnikuCFPluginFactories
pod ključemFB86416D-6164-2070-726F-70735C216EC0
svogInfo.plist
.
Datoteke pokretanja ljuske
Analiza: https://theevilbit.github.io/beyond/beyond_0001/ Analiza (xterm): https://theevilbit.github.io/beyond/beyond_0018/
Korisno za zaobilaženje peska: ✅
TCC Zaobilaženje: ✅
Ali morate pronaći aplikaciju sa TCC zaobilaženjem koja izvršava ljusku koja učitava ove datoteke
Lokacije
~/.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 je root
~/.zlogout
Okidač: Izlaz iz terminala sa zsh
/etc/zlogout
Okidač: Izlaz iz terminala sa zsh
Potreban je 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 pokrene sa xtermom, ali nije instaliran i čak nakon instalacije javlja se greška: xterm:
DISPLAY is not set
Opis & Eksploatacija
Prilikom pokretanja okruženja ljuske poput zsh
ili bash
, određene datoteke pokretanja se izvršavaju. macOS trenutno koristi /bin/zsh
kao podrazumevanu ljusku. Ova ljuska se automatski pristupa kada se pokrene aplikacija Terminal ili kada se uređaj pristupi putem SSH-a. Iako su bash
i sh
takođe prisutni u macOS-u, moraju se eksplicitno pozvati da bi se koristili.
Stranica za pomoć zsh, koju možemo pročitati sa man zsh
, ima dugačak opis datoteka pokretanja.
Ponovno otvorene aplikacije
Konfigurisanje naznačene eksploatacije i odjavljivanje i ponovno prijavljivanje ili čak ponovno pokretanje nisu radili za mene da bih izvršio aplikaciju. (Aplikacija nije bila pokrenuta, možda treba da se pokreće kada se ove radnje izvrše)
Writeup: https://theevilbit.github.io/beyond/beyond_0021/
Lokacija
~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
Okidač: Ponovno pokretanje otvorenih aplikacija
Opis & Eksploatacija
Sve aplikacije za ponovno otvaranje nalaze se unutar plist datoteke ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
Dakle, da biste omogućili da se vaša aplikacija pokrene prilikom ponovnog otvaranja aplikacija, 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 biste proverili aplikacije koje će biti ponovo otvorene, možete uraditi:
Da dodate aplikaciju na ovu listu možete koristiti:
Postavke Terminala
Korisno za zaobilaženje peska: ✅
TCC zaobilaženje: ✅
Terminal koristi FDA dozvole korisnika koji ga koristi
Lokacija
~/Library/Preferences/com.apple.Terminal.plist
Okidač: Otvori Terminal
Opis & Eksploatacija
U ~/Library/Preferences
se čuvaju postavke korisnika u Aplikacijama. Neke od ovih postavki 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
ovako:
Dakle, ako se plist datoteka postavki terminala u sistemu može prepisati, onda se open
funkcionalnost može koristiti da otvori terminal i izvrši tu komandu.
Ovo možete dodati sa komandne linije pomoću:
Terminalski skriptovi / Druge ekstenzije datoteka
Korisno za zaobilaženje peska: ✅
TCC zaobilaženje: ✅
Terminal koristi FDA dozvole ako ih korisnik koristi
Lokacija
Bilo gde
Okidač: Otvori Terminal
Opis & Eksploatacija
Ako kreirate .terminal
skript i otvorite ga, Terminal aplikacija će automatski biti pozvana da izvrši komande navedene unutar njega. Ako Terminal aplikacija ima posebne privilegije (kao što su TCC), vaša komanda će biti izvršena sa tim posebnim privilegijama.
Isprobajte sa:
Možete takođe koristiti ekstenzije .command
, .tool
, sa redovnim sadržajem shell skripti i one će takođe biti otvorene pomoću Terminala.
Ako Terminal ima Pristup celom disku, biće u mogućnosti da završi tu akciju (imajte na umu da će izvršena komanda biti vidljiva u prozoru Terminala).
Audio dodaci
Objašnjenje: https://theevilbit.github.io/beyond/beyond_0013/ Objašnjenje: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882
Lokacija
/Library/Audio/Plug-Ins/HAL
Potreban je root
Okidač: Ponovno pokretanje coreaudiod ili računara
/Library/Audio/Plug-ins/Components
Potreban je root
Okidač: Ponovno pokretanje coreaudiod ili računara
~/Library/Audio/Plug-ins/Components
Okidač: Ponovno pokretanje coreaudiod ili računara
/System/Library/Components
Potreban je root
Okidač: Ponovno pokretanje coreaudiod ili računara
Opis
Prema prethodnim objašnjenjima moguće je kompajlirati neke audio dodatke i učitati ih.
QuickLook dodaci
Objašnjenje: https://theevilbit.github.io/beyond/beyond_0028/
Lokacija
/System/Library/QuickLook
/Library/QuickLook
~/Library/QuickLook
/Applications/AppNameHere/Contents/Library/QuickLook/
~/Applications/AppNameHere/Contents/Library/QuickLook/
Opis & Eksploatacija
QuickLook dodaci mogu biti izvršeni kada pokrenete pregled fajla (pritisnite taster razmaka dok je fajl izabran u Finderu) i instaliran je dodatak koji podržava taj tip fajla.
Moguće je kompajlirati svoj QuickLook dodatak, postaviti ga na jednu od prethodnih lokacija da ga učitate, a zatim otvoriti podržani fajl i pritisnuti razmak da ga pokrenete.
Login/Logout kuke
Ovo nije radilo za mene, ni sa korisničkom LoginHook ni sa root LogoutHook
Objašnjenje: https://theevilbit.github.io/beyond/beyond_0022/
Lokacija
Morate biti u mogućnosti da izvršite nešto poput
defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
Na
lazi 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 je sačuvana u /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
Da biste ga obrisali:
Root korisnik se čuva u /private/var/root/Library/Preferences/com.apple.loginwindow.plist
Uslovna Bypass peska
Ovde možete pronaći lokacije za pokretanje korisne za bypass peska koji vam omogućava da jednostavno izvršite nešto tako što to upišete u datoteku i očekujete ne baš česte uslove kao što su specifični instalirani programi, "neobične" korisničke radnje ili okruženja.
Cron
Writeup: https://theevilbit.github.io/beyond/beyond_0004/
Korisno za zaobilaženje peska: ✅
Međutim, morate moći da izvršite binarni
crontab
Ili biti root
TCC zaobilaženje: 🔴
Lokacija
/usr/lib/cron/tabs/
,/private/var/at/tabs
,/private/var/at/jobs
,/etc/periodic/
Potreban je root za direktni pristup pisanju. Root nije potreban ako možete izvršiti
crontab <datoteka>
Okidač: Zavisi od cron posla
Opis & Eksploatacija
Prikažite cron poslove trenutnog korisnika sa:
Takođe možete videti sve cron poslove korisnika u /usr/lib/cron/tabs/
i /var/at/tabs/
(potreban je root).
Na macOS-u se mogu pronaći nekoliko foldera koji izvršavaju skripte sa određenom učestalošću:
Ovde možete pronaći redovne cron poslove, at poslove (koji se retko koriste) i periodične poslove (uglavnom korišćene za čišćenje privremenih fajlova). Dnevni periodični poslovi mogu biti izvršeni na primer sa: periodic daily
.
Za dodavanje korisničkog cron posla programatski moguće je koristiti:
iTerm2
Objašnjenje: https://theevilbit.github.io/beyond/beyond_0002/
Lokacije
~/Library/Application Support/iTerm2/Scripts/AutoLaunch
Okidač: Otvori iTerm
~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
Okidač: Otvori iTerm
~/Library/Preferences/com.googlecode.iterm2.plist
Okidač: Otvori iTerm
Opis & Eksploatacija
Skripte smeštene u ~/Library/Application Support/iTerm2/Scripts/AutoLaunch
će biti izvršene. Na primer:
macOS Auto Start Locations
System-wide Launch Daemons and Agents
These are located in /Library/LaunchDaemons
and /Library/LaunchAgents
. Daemons run under root
, while agents run under the logged-in user.
Per-User Launch Agents
Located in ~/Library/LaunchAgents
, these agents run when the user logs in.
Login Items
Found in System Preferences > Users & Groups > Login Items
, these are apps that open when the user logs in.
Startup Items
Deprecated since macOS 10.7, these used to be managed in /Library/StartupItems
.
Cron Jobs
Scheduled tasks can be set up using cron
and are stored in the user's crontab. View and edit with crontab -e
.
Launchctl
Use launchctl list
to view all the services managed by launchctl. Check /Library/LaunchDaemons
, /Library/LaunchAgents
, and ~/Library/LaunchAgents
for plist files that define the services.
Skripta ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
će takođe biti izvršena:
Podešavanja iTerm2 nalaze se u ~/Library/Preferences/com.googlecode.iterm2.plist
i mogu ukazati na komandu koja će se izvršiti prilikom otvaranja iTerm2 terminala.
Ovo podešavanje može biti konfigurisano u iTerm2 podešavanjima:
A komanda se odražava u podešavanjima:
Možete postaviti komandu koja će se izvršiti sa:
Visoko je verovatno da postoje druge metode zloupotrebe iTerm2 postavki za izvršavanje proizvoljnih komandi.
xbar
Objašnjenje: https://theevilbit.github.io/beyond/beyond_0007/
Korisno za zaobilaženje peska: ✅
Ali xbar mora biti instaliran
TCC zaobilaženje: ✅
Traži dozvole za pristupačnost
Lokacija
~/Library/Application\ Support/xbar/plugins/
Okidač: Jednom kada se xbar izvrši
Opis
Ako je instaliran popularni program xbar, moguće je napisati shell skriptu u ~/Library/Application\ Support/xbar/plugins/
koja će se izvršiti kada se xbar pokrene:
Hammerspoon
Opis: https://theevilbit.github.io/beyond/beyond_0008/
Korisno za zaobilaženje peska: ✅
Ali Hammerspoon mora biti instaliran
TCC zaobilaženje: ✅
Traži dozvole za pristupačnost
Lokacija
~/.hammerspoon/init.lua
Okidač: Jednom kada se pokrene Hammerspoon
Opis
Hammerspoon služi kao platforma za automatizaciju za macOS, koristeći LUA skriptni jezik za svoje operacije. Posebno, podržava integraciju potpunog AppleScript koda i izvršavanje shell skripti, značajno unapređujući svoje sposobnosti skriptiranja.
Aplikacija traži jednu datoteku, ~/.hammerspoon/init.lua
, i kada se pokrene, skripta će biti izvršena.
BetterTouchTool
Korisno za zaobilaženje peska-boksa: ✅
Ali BetterTouchTool mora biti instaliran
TCC zaobilaženje: ✅
Zahteva dozvole za automatizaciju prečica i pristupačnosti
Lokacija
~/Library/Application Support/BetterTouchTool/*
Ovaj alat omogućava označavanje aplikacija ili skripti za izvršavanje 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 tastera).
Alfred
Korisno za zaobilaženje peska-boksa: ✅
Ali Alfred mora biti instaliran
TCC zaobilaženje: ✅
Zahteva dozvole za automatizaciju, pristupačnost i čak pristup celom disku
Lokacija
???
Omogućava kreiranje radnih tokova koji mogu izvršiti kod kada se ispune određeni uslovi. Potencijalno je moguće da napadač kreira datoteku radnog toka i natera Alfred da je učita (potrebno je platiti premium verziju za korišćenje radnih tokova).
SSHRC
Opis: https://theevilbit.github.io/beyond/beyond_0006/
Korisno za zaobilaženje peska-boksa: ✅
Ali ssh mora biti omogućen i korišćen
TCC zaobilaženje: ✅
SSH ima pristup celom disku
Lokacija
~/.ssh/rc
Okidač: Prijavljivanje putem ssh
/etc/ssh/sshrc
Potreban je root
Okidač: Prijavljivanje putem ssh
Za uključivanje ssh-a potreban je pristup celom disku:
Opis & Eksploatacija
Podrazumevano, osim ako nije PermitUserRC no
u /etc/ssh/sshd_config
, kada se korisnik prijavi putem SSH-a, skripte /etc/ssh/sshrc
i ~/.ssh/rc
će biti izvršene.
Stavke za prijavljivanje
Analiza: https://theevilbit.github.io/beyond/beyond_0003/
Korisno za zaobilaženje peska-boksa: ✅
Ali morate izvršiti
osascript
sa argumentimaTCC zaobilaženje: 🔴
Lokacije
~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Okidač: Prijavljivanje
Eksploatacija payloada pozivanjem
osascript
/var/db/com.apple.xpc.launchd/loginitems.501.plist
Okidač: Prijavljivanje
Potreban je root
Opis
U Sistemskim postavkama -> Korisnici & Grupa -> Stavke za prijavljivanje možete pronaći stavke koje će se izvršiti prilikom prijavljivanja korisnika. Moguće ih je izlistati, dodati i ukloniti sa komandne linije:
Ovi predmeti se čuvaju u datoteci ~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Stavke za prijavljivanje takođe mogu biti naznačene korišćenjem API-ja SMLoginItemSetEnabled koji će sačuvati konfiguraciju u /var/db/com.apple.xpc.launchd/loginitems.501.plist
ZIP kao stavka za prijavljivanje
(Pogledajte prethodni odeljak o Stavkama za prijavljivanje, ovo je proširenje)
Ako sačuvate ZIP datoteku kao Stavku za prijavljivanje, Archive Utility
će je otvoriti, a ako je zip na primer sačuvan u ~/Library
i sadrži fasciklu LaunchAgents/file.plist
sa zadnjim ulazom, ta fascikla će biti kreirana (to nije podrazumevano) i plist će biti dodat tako da sledeći put kada se korisnik ponovo prijavi, zadnji ulaz naznačen u plist-u će biti izvršen.
Druga opcija bi bila da se kreiraju datoteke .bash_profile
i .zshenv
unutar korisničkog HOME-a tako da ako fascikla LaunchAgents već postoji, ova tehnika bi i dalje radila.
At
Objašnjenje: https://theevilbit.github.io/beyond/beyond_0014/
Lokacija
Potrebno je izvršiti
at
i on mora biti omogućen
Opis
at
zadaci su dizajnirani za planiranje jednokratnih zadataka koji će biti izvršeni u određeno vreme. Za razliku od cron poslova, at
zadaci se automatski uklanjaju nakon izvršenja. Bitno je napomenuti da su ovi zadaci postojani nakon ponovnog pokretanja sistema, što ih čini potencijalnim sigurnosnim rizikom u određenim uslovima.
Podrazumevano su onemogućeni, ali root korisnik može omogućiti njih sa:
Ovo će kreirati fajl za 1 sat:
Proverite red poslova koristeći atq:
Iznad možemo videti dva zakazana posla. Detalje posla možemo odštampati koristeći at -c BROJPOSLA
Ako AT zadaci nisu omogućeni, kreirani zadaci neće biti izvršeni.
Job fajlovi se mogu pronaći na /private/var/at/jobs/
Fajl sadrži red, broj posla i vreme kada je zakazan da se pokrene. Na primer, pogledajmo a0001a019bdcd2
.
a
- ovo je red0001a
- broj posla u heksadecimalnom formatu,0x1a = 26
019bdcd2
- vreme u heksadecimalnom formatu. Predstavlja minute koje su prošle od epohe.0x019bdcd2
je26991826
u decimalnom formatu. Ako ga pomnožimo sa 60 dobijamo1619509560
, što jeGMT: 2021. April 27., utorak 7:46:00
.
Ako odštampamo fajl posla, otkrivamo da sadrži iste informacije koje smo dobili koristeći at -c
.
Akcije fascikle
Analiza: https://theevilbit.github.io/beyond/beyond_0024/ Analiza: https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d
Korisno za zaobilaženje peska: ✅
Ali morate moći da pozovete
osascript
sa argumentima da biste kontaktiraliSystem Events
kako biste mogli konfigurisati Akcije fascikleTCC zaobilaženje: 🟠
Ima neka osnovna TCC odobrenja poput Desktopa, Dokumenata i Preuzimanja
Lokacija
/Library/Scripts/Folder Action Scripts
Potreban je root
Okidač: Pristup određenoj fascikli
~/Library/Scripts/Folder Action Scripts
Okidač: Pristup određenoj fascikli
Opis & Eksploatacija
Akcije fascikle su skripte koje se automatski pokreću promenama u fascikli poput dodavanja, uklanjanja stavki ili drugih akcija poput otvaranja ili promene veličine prozora fascikle. Ove akcije mogu se koristiti za različite zadatke i mogu se pokrenuti na različite načine poput korišćenja Finder UI-a ili terminalskih komandi.
Za postavljanje Akcija fascikle, imate opcije kao što su:
Izrada radnog toka Akcije fascikle sa Automatorom i instaliranje kao servisa.
Ručno povezivanje skripte putem Postavke Akcija fascikle u kontekstualnom meniju fascikle.
Korišćenje OSAScripta za slanje Apple Event poruka aplikaciji
System Events.app
za programsko postavljanje Akcije fascikle.
Ovaj metod je posebno koristan za ugradnju akcije u sistem, nudeći nivo postojanosti.
Naredni skript je primer onoga što može biti izvršeno pomoću Akcije fascikle:
Da biste napravili gore navedeni skript upotrebljivim pomoću Folder Actions-a, kompajlirajte ga koristeći:
Nakon što je skripta kompajlirana, postavite Akcije fascikle izvršavanjem sledeće skripte. Ova skripta će omogućiti Akcije fascikle globalno i posebno će povezati prethodno kompajliranu skriptu sa Desktop fasciklom.
Pokrenite skriptu postavki pomoću:
Ovo je način da implementirate ovu postojanost putem GUI-ja:
Ovo je skripta koja će biti izvršena:
Kompajlirajte ga sa: osacompile -l JavaScript -o folder.scpt source.js
Premestite ga na:
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-om, vaš skript će biti izvršen.
Ova konfiguracija je sačuvana u plist fajlu smeštenom u ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
u base64 formatu.
Sada, hajde da pokušamo da pripremimo ovu postojanost bez pristupa GUI-ju:
Kopirajte
~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
u/tmp
da biste napravili rezervnu kopiju:
cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp
Uklonite Folder Actions koje ste upravo postavili:
Sada kada imamo prazno okruženje
Kopirajte rezervni fajl:
cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/
Otvorite Folder Actions Setup.app da biste primenili ovu konfiguraciju:
open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"
I ovo nije radilo za mene, ali to su uputstva iz teksta:(
Dock prečice
Tekst: https://theevilbit.github.io/beyond/beyond_0027/
Korisno za zaobilaženje peska-boksa: ✅
Ali morate imati instaliranu zlonamernu aplikaciju unutar sistema
TCC zaobilaženje: 🔴
Lokacija
~/Library/Preferences/com.apple.dock.plist
Okidač: Kada korisnik klikne na aplikaciju unutar Dock-a
Opis & Eksploatacija
Sve aplikacije koje se pojave u Dock-u su navedene unutar plist-a: ~/Library/Preferences/com.apple.dock.plist
Moguće je dodati aplikaciju samo sa:
Korišćenjem nekog socijalnog inženjeringa mogli biste npr. da se predstavite kao Google Chrome unutar dock-a i zapravo izvršite svoj sopstveni skript:
Birači boja
Opis: https://theevilbit.github.io/beyond/beyond_0017
Korisno za zaobilaženje peska: 🟠
Potrebno je da se desi vrlo specifična akcija
Završićete u drugom pesku
TCC zaobilaženje: 🔴
Lokacija
/Library/ColorPickers
Potreban je root pristup
Okidač: Korišćenje birača boja
~/Library/ColorPickers
Okidač: Korišćenje birača boja
Opis & Eksploatacija
Kompajlirajte birač boja paket sa vašim kodom (možete koristiti ovaj na primer) i dodajte konstruktor (kao u odeljku o čuvarima ekrana) i kopirajte paket u ~/Library/ColorPickers
.
Zatim, kada se birač boja okida, vaš kod takođe treba da se izvrši.
Imajte na umu da binarni fajl koji učitava vašu biblioteku ima vrlo restriktivan pesak: /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64
Finder Sync Dodaci
Opis: https://theevilbit.github.io/beyond/beyond_0026/ Opis: https://objective-see.org/blog/blog_0x11.html
Korisno za zaobilaženje peska: Ne, jer morate izvršiti svoju sopstvenu aplikaciju
TCC zaobilaženje: ???
Lokacija
Određena aplikacija
Opis & Eksploatacija
Primer aplikacije sa Finder Sync Ekstenzijom može se pronaći ovde.
Aplikacije mogu imati Finder Sync Ekstenzije
. Ova ekstenzija će biti smeštena unutar aplikacije koja će biti izvršena. Štaviše, da bi ekstenzija mogla da izvrši svoj kod, mora biti potpisana nekim validnim Apple-ovim sertifikatom, mora biti u pesku (mada se mogu dodati opuštena izuzetka) i mora biti registrovana sa nečim poput:
Screen Saver
Writeup: https://theevilbit.github.io/beyond/beyond_0016/ Writeup: https://posts.specterops.io/saving-your-access-d562bf5bf90b
Lokacija
/System/Library/Screen Savers
Potreban je root pristup
Okidač: Izaberite screensaver
/Library/Screen Savers
Potreban je root pristup
Okidač: Izaberite screensaver
~/Library/Screen Savers
Okidač: Izaberite screensaver
Opis & Eksploatacija
Napravite novi projekat u Xcode-u i izaberite šablon za generisanje novog Screen Saver-a. Zatim, dodajte kod u njega, na primer sledeći kod za generisanje logova.
Izgradite ga, i kopirajte .saver
paket u ~/Library/Screen Savers
. Zatim, otvorite GUI Screen Saver i ako samo kliknete na njega, trebalo bi da generiše mnogo logova:
Imajte na umu da zato što se unutar dozvola binarnog koda koji učitava ovaj kod (/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver
) možete pronaći com.apple.security.app-sandbox
bićete unutar zajedničkog aplikacionog peska.
Kod čuvara ekrana:
Dodaci Spotlight-a
writeup: https://theevilbit.github.io/beyond/beyond_0011/
Korisno za zaobilaženje peska: 🟠
Ali ćete završiti u aplikacionom pesku
TCC zaobilaženje: 🔴
Pesak izgleda veoma ograničeno
Lokacija
~/Library/Spotlight/
Okidač: Kreiran je novi fajl sa ekstenzijom koju upravlja dodatak Spotlight-a.
/Library/Spotlight/
Okidač: Kreiran je novi fajl sa ekstenzijom koju upravlja dodatak Spotlight-a.
Potreban je root
/System/Library/Spotlight/
Okidač: Kreiran je novi fajl sa ekstenzijom koju upravlja dodatak Spotlight-a.
Potreban je root
Some.app/Contents/Library/Spotlight/
Okidač: Kreiran je novi fajl sa ekstenzijom koju upravlja dodatak Spotlight-a.
Potrebna je nova aplikacija
Opis & Eksploatacija
Spotlight je ugrađena funkcija pretrage macOS-a, dizajnirana da korisnicima pruži brz i sveobuhvatan pristup podacima na njihovim računarima. Da bi olakšao ovu brzu mogućnost pretrage, Spotlight održava vlastitu bazu podataka i kreira indeks parsiranjem većine fajlova, omogućavajući brze pretrage kako kroz imena fajlova tako i kroz njihov sadržaj.
Osnovni mehanizam Spotlight-a uključuje centralni proces nazvan 'mds', što označava 'metadata server'. Ovaj proces orkestrira celu uslugu Spotlight-a. Kao dopuna tome, postoje više 'mdworker' demona koji obavljaju različite zadatke održavanja, kao što je indeksiranje različitih tipova fajlova (ps -ef | grep mdworker
). Ovi zadaci su omogućeni putem dodataka Spotlight-a, ili ".mdimporter paketa", koji omogućavaju Spotlight-u da razume i indeksira sadržaj preko raznovrsnog spektra formata fajlova.
Dodaci ili .mdimporter
paketi se nalaze na prethodno pomenutim mestima i ako se pojavi novi paket, učitan je u roku od minuta (nije potrebno ponovno pokretati bilo koji servis). Ovi paketi moraju naznačiti koje tipove fajlova i ekstenzije mogu upravljati, na ovaj način, Spotlight će ih koristiti kada se kreira novi fajl sa naznačenom ekstenzijom.
Moguće je pronaći sve mdimportere
koji su učitani pokretanjem:
Na primer, /Library/Spotlight/iBooksAuthor.mdimporter se koristi za parsiranje ovih vrsta fajlova (ekstenzije .iba
i .book
među ostalima):
Ako proverite Plist drugog mdimporter
-a, možda nećete pronaći unos UTTypeConformsTo
. To je zato što je to ugrađeni Uniform Type Identifiers (UTI) i ne treba specificirati ekstenzije.
Štaviše, sistemski podrazumevani dodaci uvek imaju prioritet, tako da napadač može pristupiti samo datotekama koje nisu indeksirane od strane Apple-ovih mdimporters
-a.
Za kreiranje sopstvenog uvoznika možete početi sa ovim projektom: https://github.com/megrimm/pd-spotlight-importer a zatim promeniti ime, CFBundleDocumentTypes
i dodati UTImportedTypeDeclarations
kako bi podržao ekstenziju koju želite da podržite i odraziti ih u schema.xml
.
Zatim promenite kod funkcije GetMetadataForFile
da izvrši vaš payload kada se kreira datoteka sa obrađenom ekstenzijom.
Na kraju izgradite i kopirajte svoj novi .mdimporter
na jedno od prethodnih lokacija i možete proveriti kada se učita prateći logove ili proverom mdimport -L.
Preference Pane
Ne izgleda da ovo više radi.
Objašnjenje: https://theevilbit.github.io/beyond/beyond_0009/
Lokacija
/System/Library/PreferencePanes
/Library/PreferencePanes
~/Library/PreferencePanes
Opis
Ne izgleda da ovo više radi.
Bypass korijenskog peska
Ovde možete pronaći startne lokacije korisne za bypass peska koji vam omogućava da jednostavno izvršite nešto upisivanjem u datoteku kao root i/ili zahtevajući druge čudne uslove.
Periodično
Objašnjenje: https://theevilbit.github.io/beyond/beyond_0019/
Lokacija
/etc/periodic/daily
,/etc/periodic/weekly
,/etc/periodic/monthly
,/usr/local/etc/periodic
Potreban je root
Okidač: Kada dođe vreme
/etc/daily.local
,/etc/weekly.local
ili/etc/monthly.local
Potreban je root
Okidač: Kada dođe vreme
Opis & Eksploatacija
Periodični skriptovi (/etc/periodic
) se izvršavaju zbog launch daemona konfigurisanih u /System/Library/LaunchDaemons/com.apple.periodic*
. Imajte na umu da skripte smeštene u /etc/periodic/
se izvršavaju kao vlasnik datoteke, tako da ovo neće raditi za potencijalno eskalaciju privilegija.
Postoje i drugi periodični skriptovi koji će biti izvršeni, a naznačeni su 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 ranije ili kasnije.
Imajte na umu da će periodični skript biti izvršen kao vlasnik skripte. Dakle, ako običan korisnik poseduje skriptu, biće izvršena kao taj korisnik (ovo može sprečiti napade na eskalaciju privilegija).
PAM
Writeup: Linux Hacktricks PAM Writeup: https://theevilbit.github.io/beyond/beyond_0005/
Lokacija
Uvek potreban root
Opis & Eksploatacija
Pošto je PAM više fokusiran na upornost i malver nego na jednostavno izvršavanje unutar macOS-a, ovaj blog neće pružiti detaljno objašnjenje, pročitajte writeup-ove da biste bolje razumeli ovu tehniku.
Proverite PAM module sa:
Tehnika upornosti/escalacije privilegija zloupotrebom PAM-a je jednostavna kao što je modifikacija modula /etc/pam.d/sudo dodavanjem na početak linije:
Tako će izgledati nešto poput ovoga:
I zbog toga će svaki pokušaj korišćenja sudo
raditi.
Imajte na umu da je ovaj direktorijum zaštićen TCC-om, pa je vrlo verovatno da će korisnik dobiti prozor zahteva za pristup.
Plugins za autorizaciju
Objašnjenje: https://theevilbit.github.io/beyond/beyond_0028/ Objašnjenje: https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65
Korisno za zaobilaženje peska: 🟠
Ali morate biti root i napraviti dodatne konfiguracije
TCC zaobilaženje: ???
Lokacija
/Library/Security/SecurityAgentPlugins/
Potreban je root pristup
Takođe je potrebno konfigurisati bazu autorizacije da koristi plugin
Opis & Eksploatacija
Možete kreirati plugin za autorizaciju koji će se izvršiti kada se korisnik prijavi kako bi održao postojanost. Za više informacija o tome kako kreirati jedan od ovih pluginova, proverite prethodna objašnjenja (i budite oprezni, loše napisan može vas zaključati i moraćete očistiti svoj Mac iz režima oporavka).
Premestite paket na lokaciju koja će biti učitana:
Konačno dodajte pravilo za učitavanje ovog dodatka:
evaluate-mechanisms
će reći okviru autorizacije da će mu biti potrebno pozvati spoljni mehanizam za autorizaciju. Štaviše, privileged
će ga učiniti izvršnim od strane root korisnika.
Pokrenite ga sa:
I onda grupa osoblja treba imati sudo pristup (pročitaj /etc/sudoers
da potvrdiš).
Man.conf
Writeup: https://theevilbit.github.io/beyond/beyond_0030/
Korisno za zaobilaženje peska: 🟠
Ali morate biti root i korisnik mora koristiti man
TCC zaobilaženje: 🔴
Lokacija
/private/etc/man.conf
Potreban je root
/private/etc/man.conf
: Svaki put kada se koristi man
Opis & Eksploatacija
Konfiguracioni fajl /private/etc/man.conf
pokazuje binarni/skriptu koju treba koristiti prilikom otvaranja fajlova sa man dokumentacijom. Dakle, putanja do izvršne datoteke može biti izmenjena tako da svaki put kada korisnik koristi man za čitanje nekih dokumenata, izvrši se zadnja vrata.
Na primer, postavite u /private/etc/man.conf
:
I zatim kreiraj /tmp/view
kao:
Apache2
Opis: https://theevilbit.github.io/beyond/beyond_0023/
Korisno za zaobilaženje peska: 🟠
Ali morate biti root i apache mora biti pokrenut
TCC zaobilaženje: 🔴
Httpd nema dozvole
Lokacija
/etc/apache2/httpd.conf
Potreban je root pristup
Okidač: Kada se pokrene Apache2
Opis & Eksploatacija
Možete naznačiti u /etc/apache2/httpd.conf
da učita modul dodavanjem linije poput:
Na ovaj način će vaši kompajlirani moduli biti učitani od strane Apache servera. Jedina stvar je da ili trebate potpisati ga važećim Apple sertifikatom, ili trebate dodati novi pouzdani sertifikat u sistem i potpisati ga sa njim.
Zatim, ako je potrebno, da biste bili sigurni da će server biti pokrenut, možete izvršiti:
Primer koda za Dylb:
BSM audit framework
Writeup: https://theevilbit.github.io/beyond/beyond_0031/
Korisno za zaobilaženje peska: 🟠
Ali potrebno je da budete root, da auditd radi i da izazovete upozorenje
TCC zaobilaženje: 🔴
Lokacija
/etc/security/audit_warn
Potreban je root pristup
Okidač: Kada auditd otkrije upozorenje
Opis & Eksploatacija
Kada auditd otkrije upozorenje, skripta /etc/security/audit_warn
se izvršava. Dakle, možete dodati svoj payload na nju.
Lokacije automatskog pokretanja
Ovo je zastarelo, tako da ništa ne bi trebalo da se pronađe u tim direktorijumima.
StartupItem je direktorijum koji bi trebalo da bude smešten ili u /Library/StartupItems/
ili u /System/Library/StartupItems/
. Kada se ovaj direktorijum uspostavi, mora obuhvatiti dva specifična fajla:
rc skript: Shell skripta koja se izvršava pri pokretanju.
plist fajl, specifično nazvan
StartupParameters.plist
, koji sadrži različite konfiguracione postavke.
Proverite da su kako rc skript tako i fajl StartupParameters.plist
pravilno smešteni unutar direktorijuma StartupItem kako bi proces pokretanja prepoznao i koristio ih.
Lokacije automatskog pokretanja na macOS-u
Na macOS-u, postoji nekoliko lokacija gde se servisi mogu konfigurisati da se automatski pokreću prilikom pokretanja sistema. Ove lokacije uključuju sledeće:
LaunchDaemons i LaunchAgents: Ove lokacije sadrže konfiguracione fajlove koji definišu servise koji se pokreću kao sistemski procesi (LaunchDaemons) ili korisnički procesi (LaunchAgents).
Login Items: Ova opcija se nalazi u System Preferences > Users & Groups i omogućava korisnicima da odaberu aplikacije koje će se automatski pokrenuti prilikom prijavljivanja na sistem.
StartupItems: Iako je ova opcija zastarela i podržana samo radi kompatibilnosti unazad, neki stariji servisi i dalje mogu koristiti ovu lokaciju za automatsko pokretanje.
Provera i upravljanje ovim lokacijama može biti korisna za poboljšanje bezbednosti i performansi sistema.
emond
Ne mogu da pronađem ovu komponentu na mom macOS-u, pa za više informacija pogledajte writeup
Writeup: https://theevilbit.github.io/beyond/beyond_0023/
Predstavljen od strane Apple-a, emond je mehanizam za beleženje koji deluje nedovoljno razvijeno ili možda napušteno, ali i dalje je dostupan. Iako nije posebno koristan za administratora Mac računara, ovaj skriveni servis može poslužiti kao suptilan metod upornosti za napadače, verovatno neprimećen od većine macOS administratora.
Za one koji su svesni njegovog postojanja, identifikacija bilo kakve zlonamerne upotrebe emond-a je jednostavna. LaunchDaemon sistema za ovaj servis traži skripte za izvršavanje u jednom direktorijumu. Da biste to proverili, može se koristiti sledeća komanda:
XQuartz
Writeup: https://theevilbit.github.io/beyond/beyond_0018/
Lokacija
/opt/X11/etc/X11/xinit/privileged_startx.d
Potreban je root pristup
Okidač: Sa XQuartz-om
Opis & Eksploatacija
XQuartz više nije instaliran u macOS-u, pa ako želite više informacija pogledajte writeup.
kext
Toliko je komplikovano instalirati kext čak i kao root da neću smatrati ovo kao beg iz peska ili čak za postojanost (osim ako imate eksploit)
Lokacija
Da biste instalirali KEXT kao stavku za pokretanje, potrebno je da bude instaliran na jednoj od sledećih lokacija:
/System/Library/Extensions
KEXT fajlovi ugrađeni u OS X operativni sistem.
/Library/Extensions
KEXT fajlovi instalirani od strane softvera trećih lica
Možete prikazati trenutno učitane kext fajlove sa:
Za više informacija o kernel ekstenzijama pogledajte ovu sekciju.
amstoold
Objašnjenje: https://theevilbit.github.io/beyond/beyond_0029/
Lokacija
/usr/local/bin/amstoold
Potreban je root pristup
Opis & Eksploatacija
Navodno je plist
fajl sa lokacije /System/Library/LaunchAgents/com.apple.amstoold.plist
koristio ovaj binarni fajl dok je izlagao XPC servis... problem je bio što binarni fajl nije postojao, pa ste mogli staviti nešto tamo i kada se XPC servis pozove, vaš binarni fajl će biti pozvan.
Ne mogu više pronaći ovo na mom macOS-u.
xsanctl
Objašnjenje: https://theevilbit.github.io/beyond/beyond_0015/
Lokacija
/Library/Preferences/Xsan/.xsanrc
Potreban je root pristup
Okidač: Kada se servis pokrene (retko)
Opis & eksploatacija
Navodno nije vrlo često pokretati ovaj skript i čak ga nisam mogao pronaći na mom macOS-u, pa ako želite više informacija pogledajte objašnjenje.
/etc/rc.common
Ovo ne funkcioniše u modernim verzijama MacOS-a
Takođe je moguće ovde postaviti komande koje će biti izvršene pri pokretanju sistema. Primer redovnog rc.common skripta:
Tehnike i alati za postojanost
Last updated