macOS TCC Bypasses
Po funkcionalnosti
Bypass za pisanje
Ovo nije zaobilazak, to je samo kako TCC radi: Ne štiti od pisanja. Ako Terminal nema pristup čitanju Desktop-a korisnika, i dalje može da piše u njega:
Prošireni atribut com.apple.macl
dodaje se novom datotekom kako bi dao pristup aplikaciji kreatora da je pročita.
TCC ClickJacking
Moguće je postaviti prozor preko TCC prozora kako bi korisnik prihvatio bez primetnog obaveštenja. Možete pronaći PoC u TCC-ClickJacking.
TCC Zahtev po proizvoljnom imenu
Napadač može kreirati aplikacije sa bilo kojim imenom (npr. Finder, Google Chrome...) u Info.plist
i zatražiti pristup nekoj TCC zaštićenoj lokaciji. Korisnik će pomisliti da legitimna aplikacija traži ovaj pristup.
Osim toga, moguće je ukloniti legitimnu aplikaciju sa Dock-a i postaviti lažnu na nju, tako da kada korisnik klikne na lažnu (koja može koristiti istu ikonu) može pozvati legitimnu, zatražiti TCC dozvole i izvršiti malver, čineći korisnika da poveruje da je legitimna aplikacija zatražila pristup.
Više informacija i PoC u:
pagemacOS Privilege EscalationSSH Bypass
Podrazumevano, pristup putem SSH je imao "Pristup celom disku". Da biste ovo onemogućili, morate ga imati navedenog ali onemogućenog (uklanjanje sa liste neće ukloniti te privilegije):
Ovde možete pronaći primere kako su neki malveri uspeli da zaobiđu ovu zaštitu:
Imajte na umu da sada, da biste mogli omogućiti SSH, potrebno je imati Pristup celom disku
Upravljanje ekstenzijama - CVE-2022-26767
Atribut com.apple.macl
dodeljuje se datotekama kako bi dala određenoj aplikaciji dozvole da je pročita. Ovaj atribut se postavlja kada se prevuče i ispusti datoteka preko aplikacije, ili kada korisnik dvaput klikne na datoteku da je otvori sa podrazumevanom aplikacijom.
Stoga, korisnik bi mogao registrovati zlonamernu aplikaciju da upravlja svim ekstenzijama i pozvati Launch Services da otvori bilo koju datoteku (tako da će zlonamerna datoteka dobiti pristup da je pročita).
iCloud
Pravo com.apple.private.icloud-account-access
omogućava komunikaciju sa com.apple.iCloudHelper
XPC servisom koji će pružiti iCloud tokene.
iMovie i Garageband imali su ovo pravo i druga koja su dozvoljena.
Za više informacija o eksploataciji za dobijanje icloud tokena iz tog prava, pogledajte predavanje: #OBTS v5.0: "Šta se dešava na vašem Mac-u, ostaje na Apple-ovom iCloud-u?!" - Wojciech Regula
kTCCServiceAppleEvents / Automatizacija
Aplikacija sa dozvolom kTCCServiceAppleEvents
moći će da kontroliše druge aplikacije. To znači da bi mogla zloupotrebiti dozvole dodeljene drugim aplikacijama.
Za više informacija o Apple skriptama pogledajte:
pagemacOS Apple ScriptsNa primer, ako aplikacija ima dozvolu za Automatizaciju nad iTerm
, na primer u ovom slučaju Terminal
ima pristup nad iTerm-om:
Nad iTerm-om
Terminal, koji nema Pristup celom disku, može pozvati iTerm, koji ima, i koristiti ga za izvršavanje akcija:
Preko Findera
Ili ako aplikacija ima pristup preko Findera, mogla bi koristiti skriptu poput ove:
Po ponašanju aplikacije
CVE-2020–9934 - TCC
tccd daemon u korisničkom prostoru koristi HOME
env promenljivu za pristup bazi podataka korisnika TCC iz: $HOME/Library/Application Support/com.apple.TCC/TCC.db
Prema ovom Stack Exchange postu i zato što TCC daemon radi putem launchd
unutar trenutne korisničke domene, moguće je kontrolisati sve environment promenljive koje mu se prosleđuju.
Stoga, napadač može postaviti $HOME
environment promenljivu u launchctl
da pokazuje na kontrolisani direktorijum, restartovati TCC daemon, a zatim direktno izmeniti TCC bazu podataka kako bi sebi dao sve dostupne TCC privilegije bez ikakvog upita korisniku.
PoC:
CVE-2021-30761 - Beleške
Beleške su imale pristup TCC zaštićenim lokacijama, ali kada se napravi beleška, ona se kreira na lokaciji koja nije zaštićena. Dakle, mogli ste zatražiti od beleški da kopiraju zaštićenu datoteku u belešku (na lokaciju koja nije zaštićena) i zatim pristupiti datoteci:
CVE-2021-30782 - Translokacija
Binarni fajl /usr/libexec/lsd
sa bibliotekom libsecurity_translocate
imao je dozvolu com.apple.private.nullfs_allow
koja mu je omogućila da kreira nullfs mount i imao je dozvolu com.apple.private.tcc.allow
sa kTCCServiceSystemPolicyAllFiles
za pristup svakoj datoteci.
Bilo je moguće dodati karantin atribut "Library", pozvati XPC servis com.apple.security.translocation
i zatim mapirati Library u $TMPDIR/AppTranslocation/d/d/Library
gde su sve datoteke unutar Library-ja mogle biti pristupljene.
CVE-2023-38571 - Muzika & TV
Muzika
ima zanimljivu funkciju: Kada se pokrene, uvešće datoteke koje su spuštene u ~/Muzika/Muzika/Media.localized/Automatski dodaj u Muziku.localized
u korisnikov "medijski biblioteku". Osim toga, poziva nešto poput: rename(a, b);
gde su a
i b
:
a = "~/Muzika/Muzika/Media.localized/Automatski dodaj u Muziku.localized/mojafajl.mp3"
b = "~/Muzika/Muzika/Media.localized/Automatski dodaj u Muziku.localized/Nije dodato.localized/2023-09-25 11.06.28/mojafajl.mp3
Ova rename(a, b);
funkcionalnost je ranjiva na Trku stanja, jer je moguće staviti lažnu TCC.db datoteku unutar foldera Automatski dodaj u Muziku.localized
i zatim kada se kreira novi folder(b), kopirati datoteku, obrisati je, i usmeriti je ka ~/Biblioteka/Podrška Aplikacije/com.apple.TCC
/.
SQLITE_SQLLOG_DIR - CVE-2023-32422
Ako je SQLITE_SQLLOG_DIR="putanja/folder"
to u osnovi znači da će svaka otvorena baza podataka biti kopirana na tu putanju. U ovom CVE-u, ova kontrola je zloupotrebljena kako bi se pisalo unutar SQLite baze podataka koja će biti otvorena od strane procesa sa FDA bazom podataka TCC, a zatim zloupotrebljena SQLITE_SQLLOG_DIR
sa simboličkom vezom u imenu datoteke tako da kada se ta baza podataka otvori, korisnikova TCC.db baza podataka bude prebrisana otvorenom bazom.
Više informacija u objašnjenju i u predavanju.
SQLITE_AUTO_TRACE
Ako je postavljena okolina promenljiva SQLITE_AUTO_TRACE
, biblioteka libsqlite3.dylib
će početi logovati sve SQL upite. Mnoge aplikacije su koristile ovu biblioteku, pa je bilo moguće logovati sve njihove SQLite upite.
Nekoliko Apple aplikacija je koristilo ovu biblioteku za pristup informacijama zaštićenim TCC-om.
MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407
Ova env promenljiva se koristi od strane Metal
okvira koji je zavisnost za različite programe, najpoznatije Music
, koji ima FDA.
Postavljanjem sledećeg: MTL_DUMP_PIPELINES_TO_JSON_FILE="putanja/naziv"
. Ako je putanja
validan direktorijum, bag će biti aktiviran i možemo koristiti fs_usage
da vidimo šta se dešava u programu:
biće otvoren fajl, nazvan
putanja/.dat.nosyncXXXX.XXXXXX
(X je slučajan)jedan ili više
write()
će upisati sadržaj u fajl (mi ne kontrolišemo ovo)putanja/.dat.nosyncXXXX.XXXXXX
će biti preimenovan uputanja/naziv
To je privremeni upis fajla, praćen sa rename(stari, novi)
što nije sigurno.
Nije sigurno jer mora da reši stare i nove putanje odvojeno, što može potrajati neko vreme i može biti ranjivo na Trku Stanja. Za više informacija možete proveriti xnu
funkciju renameat_internal()
.
Dakle, ako privilegovani proces preimenuje iz foldera koji kontrolišete, mogli biste dobiti RCE i naterati ga da pristupi drugom fajlu ili, kao u ovom CVE-u, otvoriti fajl koji je privilegovana aplikacija kreirala i sačuvati FD.
Ako preimenovanje pristupi folderu koji kontrolišete, dok ste modifikovali izvorni fajl ili imate FD do njega, promenite destinacioni fajl (ili folder) da pokazuje na simboličnu vezu, tako da možete pisati kad god želite.
Ovo je bio napad u CVE-u: Na primer, da prepišemo korisnikov TCC.db
, možemo:
kreirati
/Users/hacker/nasalink
da pokazuje na/Users/hacker/Library/Application Support/com.apple.TCC/
kreirati direktorijum
/Users/hacker/tmp/
postaviti
MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db
aktivirati bag pokretanjem
Music
sa ovom env varijablomuhvatiti
open()
/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX
(X je slučajan)ovde takođe
open()
ovaj fajl za pisanje, i zadržati fajl deskriptoratomički zameniti
/Users/hacker/tmp
sa/Users/hacker/nasalink
u petljiovo radimo da bismo maksimizirali šanse za uspeh jer je prozor trke prilično kratak, ali gubitak trke ima zanemarljive posledice
sačekati malo
testirati da li smo imali sreće
ako ne, pokrenuti ponovo od početka
Više informacija na https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html
Sada, ako pokušate da koristite env promenljivu MTL_DUMP_PIPELINES_TO_JSON_FILE
aplikacije se neće pokrenuti
Apple Remote Desktop
Kao root možete omogućiti ovu uslugu i ARD agent će imati pun pristup disku što bi zatim mogao biti zloupotrebljen od strane korisnika da ga natera da kopira novu TCC bazu podataka korisnika.
Preko NFSHomeDirectory
TCC koristi bazu podataka u HOME folderu korisnika da kontroliše pristup resursima specifičnim za korisnika na $HOME/Library/Application Support/com.apple.TCC/TCC.db. Stoga, ako korisnik uspe da ponovo pokrene TCC sa $HOME env promenljivom koja pokazuje na različit folder, korisnik bi mogao kreirati novu TCC bazu podataka u /Library/Application Support/com.apple.TCC/TCC.db i prevariti TCC da odobri bilo koju TCC dozvolu bilo kojoj aplikaciji.
Imajte na umu da Apple koristi postavku sačuvanu unutar korisničkog profila u NFSHomeDirectory
atributu za vrednost $HOME
, tako da ako kompromitujete aplikaciju sa dozvolama za modifikaciju ove vrednosti (kTCCServiceSystemPolicySysAdminFiles
), možete oružati ovu opciju sa TCC zaobilaskom.
CVE-2021-30970 - Powerdir
Prvi POC koristi dsexport i dsimport da modifikuje HOME folder korisnika.
Dobiti csreq blob za ciljnu aplikaciju.
Ubaciti lažni TCC.db fajl sa potrebnim pristupom i csreq blobom.
Izvezite korisnikov unos Directory Services-a sa dsexport.
Modifikujte unos Directory Services-a da promenite korisnikov home direktorijum.
Uvezite modifikovani unos Directory Services-a sa dsimport.
Zaustavite korisnikov tccd i ponovo pokrenite proces.
Drugi POC koristi /usr/libexec/configd
koji je imao com.apple.private.tcc.allow
sa vrednošću kTCCServiceSystemPolicySysAdminFiles
.
Bilo je moguće pokrenuti configd
sa -t
opcijom, napadač bi mogao specificirati prilagođeni Bundle za učitavanje. Stoga, eksploatacija zamenjuje metod dsexport
i dsimport
za promenu korisnikovog home direktorijuma sa configd
kodom za ubacivanje.
Za više informacija proverite originalni izveštaj.
Ubacivanjem procesa
Postoje različite tehnike za ubacivanje koda unutar procesa i zloupotrebu njegovih TCC privilegija:
pagemacOS Process AbuseŠtaviše, najčešće ubacivanje procesa za zaobilaženje TCC koje je pronađeno je putem dodataka (učitavanje biblioteke). Dodaci su dodatni kod obično u obliku biblioteka ili plist, koji će biti učitani od strane glavne aplikacije i izvršavati se pod njenim kontekstom. Stoga, ako glavna aplikacija ima pristup TCC ograničenim fajlovima (putem odobrenih dozvola ili privilegija), prilagođeni kod će takođe imati pristup.
CVE-2020-27937 - Directory Utility
Aplikacija /System/Library/CoreServices/Applications/Directory Utility.app
je imala privilegiju kTCCServiceSystemPolicySysAdminFiles
, učitavala je dodatke sa .daplug
ekstenzijom i nije imala ojačan runtime.
Da bi se oružao ovaj CVE, NFSHomeDirectory
je promenjen (zloupotrebljavajući prethodnu privilegiju) kako bi se moglo preuzeti korisničko TCC skladište zaobići TCC.
Za više informacija proverite originalni izveštaj.
CVE-2020-29621 - Coreaudiod
Binarni fajl /usr/sbin/coreaudiod
imao je dozvole com.apple.security.cs.disable-library-validation
i com.apple.private.tcc.manager
. Prva dozvola omogućavala je ubacivanje koda, a druga mu je davala pristup za upravljanje TCC.
Ovaj binarni fajl je omogućavao učitavanje dodatnih plug-ina iz foldera /Library/Audio/Plug-Ins/HAL
. Stoga je bilo moguće učitati dodatak i zloupotrebiti TCC dozvole pomoću ovog PoC-a:
Za više informacija pogledajte originalni izveštaj.
Dodaci sloja apstrakcije uređaja (DAL)
Sistemski programi koji otvaraju video strim putem Core Media I/O (aplikacije sa kTCCServiceCamera
) učitavaju u proces ove dodatke smeštene u /Library/CoreMediaIO/Plug-Ins/DAL
(neograničeno od strane SIP-a).
Dovoljno je samo sačuvati biblioteku sa zajedničkim konstruktorom kako bi se omogućilo ubacivanje koda.
Nekoliko Apple aplikacija je bilo ranjivo na ovo.
Firefox
Aplikacija Firefox je imala dozvole com.apple.security.cs.disable-library-validation
i com.apple.security.cs.allow-dyld-environment-variables
:
Za više informacija o tome kako lako iskoristiti ovo proverite originalni izveštaj.
CVE-2020-10006
Binarni fajl /system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl
imao je dozvole com.apple.private.tcc.allow
i com.apple.security.get-task-allow
, što je omogućilo ubacivanje koda unutar procesa i korišćenje TCC privilegija.
CVE-2023-26818 - Telegram
Telegram je imao dozvole com.apple.security.cs.allow-dyld-environment-variables
i com.apple.security.cs.disable-library-validation
, tako da je bilo moguće zloupotrebiti ih kako bi se dobio pristup njenim dozvolama poput snimanja kamerom. Možete pronaći payload u analizi.
Primetite kako se koristi env promenljiva da se učita biblioteka, prilagođeni plist je kreiran da ubaci ovu biblioteku i launchctl
je korišćen da je pokrene:
Pomoću otvorenih poziva
Moguće je pozvati open
čak i dok je pesakovan
Terminalni skriptovi
Često je uobičajeno dati terminalu Pristup celom disku (FDA), barem na računarima koje koriste tehničari. I moguće je pozvati .terminal
skriptove koristeći ga.
.terminal
skriptovi su plist fajlovi poput ovog sa naredbom za izvršenje u ključu CommandString
:
Aplikacija bi mogla napisati terminalni skriptu na lokaciji poput /tmp i pokrenuti je sa komandom poput:
Montiranjem
CVE-2020-9771 - mount_apfs TCC zaobilaženje i eskalacija privilegija
Bilo koji korisnik (čak i neprivilegovani) može kreirati i montirati snimak vremenske mašine i pristupiti SVIM datotekama tog snimka.
Jedina privilegija potrebna je za korišćenu aplikaciju (kao što je Terminal
) da ima Pristup celom disku (Full Disk Access - FDA) (kTCCServiceSystemPolicyAllfiles
) koja mora biti odobrena od strane administratora.
Detaljnije objašnjenje možete pronaći u originalnom izveštaju.
CVE-2021-1784 & CVE-2021-30808 - Montiranje preko TCC fajla
Čak i ako je TCC DB fajl zaštićen, bilo je moguće montirati preko direktorijuma novi TCC.db fajl:
Proverite potpunu eksploataciju u originalnom writeup-u.
asr
Alat /usr/sbin/asr
omogućio je kopiranje celog diska i montiranje na drugom mestu zaobilazeći TCC zaštite.
Lokacijske usluge
Postoji treća TCC baza podataka u /var/db/locationd/clients.plist
koja pokazuje klijente koji su dozvoljeni da pristupe lokacijskim uslugama.
Folder /var/db/locationd/
nije bio zaštićen od DMG montiranja pa je bilo moguće montirati naš plist.
Pokretanjem aplikacija
pagemacOS Auto StartKorišćenjem grep-a
U nekoliko slučajeva, fajlovi će čuvati osetljive informacije poput emailova, brojeva telefona, poruka... na nezaštićenim lokacijama (što se računa kao ranjivost u Apple-u).
Sintetički klikovi
Ovo više ne funkcioniše, ali je funkcionisalo u prošlosti:
Drugi način korišćenjem CoreGraphics događaja:
Reference
Last updated