macOS Gatekeeper / Quarantine / XProtect
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)
Gatekeeper je bezbednosna funkcija razvijena za Mac operativne sisteme, dizajnirana da osigura da korisnici pokreću samo pouzdan softver na svojim sistemima. Funkcioniše tako što verifikuje softver koji korisnik preuzima i pokušava da otvori iz izvora van App Store-a, kao što su aplikacija, dodatak ili instalacioni paket.
Ključni mehanizam Gatekeeper-a leži u njegovom procesu verifikacije. Proverava da li je preuzeti softver potpisan od strane priznatog programera, osiguravajući autentičnost softvera. Pored toga, utvrđuje da li je softver notarisan od strane Apple-a, potvrđujući da je bez poznatog zlonamernog sadržaja i da nije menjan nakon notarizacije.
Pored toga, Gatekeeper jača kontrolu i bezbednost korisnika tako što traži od korisnika da odobre otvaranje preuzetog softvera prvi put. Ova zaštita pomaže u sprečavanju korisnika da nenamerno pokrenu potencijalno štetan izvršni kod koji su mogli zamisliti kao bezopasan podatkovni fajl.
Potpisi aplikacija, takođe poznati kao potpisi koda, su ključna komponenta Apple-ove bezbednosne infrastrukture. Koriste se za verifikaciju identiteta autora softvera (programera) i za osiguranje da kod nije menjan od poslednjeg potpisivanja.
Evo kako to funkcioniše:
Potpisivanje aplikacije: Kada je programer spreman da distribuira svoju aplikaciju, on potpisuje aplikaciju koristeći privatni ključ. Ovaj privatni ključ je povezan sa sertifikatom koji Apple izdaje programeru kada se upiše u Apple Developer Program. Proces potpisivanja uključuje kreiranje kriptografskog haša svih delova aplikacije i enkriptovanje ovog haša privatnim ključem programera.
Distribucija aplikacije: Potpisana aplikacija se zatim distribuira korisnicima zajedno sa sertifikatom programera, koji sadrži odgovarajući javni ključ.
Verifikacija aplikacije: Kada korisnik preuzme i pokuša da pokrene aplikaciju, njihov Mac operativni sistem koristi javni ključ iz sertifikata programera da dekriptuje haš. Zatim ponovo izračunava haš na osnovu trenutnog stanja aplikacije i upoređuje ga sa dekriptovanim hašem. Ako se poklapaju, to znači da aplikacija nije modifikovana od kada ju je programer potpisao, i sistem dozvoljava aplikaciji da se pokrene.
Potpisi aplikacija su esencijalni deo Apple-ove Gatekeeper tehnologije. Kada korisnik pokuša da otvori aplikaciju preuzetu sa interneta, Gatekeeper verifikuje potpis aplikacije. Ako je potpisana sertifikatom koji je Apple izdao poznatom programeru i kod nije menjan, Gatekeeper dozvoljava aplikaciji da se pokrene. U suprotnom, blokira aplikaciju i obaveštava korisnika.
Počevši od macOS Catalina, Gatekeeper takođe proverava da li je aplikacija notarizovana od strane Apple-a, dodajući dodatni sloj bezbednosti. Proces notarizacije proverava aplikaciju na poznate bezbednosne probleme i zlonamerni kod, i ako ove provere prođu, Apple dodaje tiket aplikaciji koji Gatekeeper može da verifikuje.
Kada proveravate neki uzorak zlonamernog softvera, uvek treba da proverite potpis binarnog fajla jer programer koji ga je potpisao može već biti povezan sa zlonamernim softverom.
Apple-ov proces notarizacije služi kao dodatna zaštita za korisnike od potencijalno štetnog softvera. Uključuje razvijanje aplikacije za ispitivanje od strane Apple-ove Notarizacione Usluge, što se ne sme mešati sa Pregledom Aplikacija. Ova usluga je automatski sistem koji pažljivo ispituje dostavljeni softver na prisustvo malicioznog sadržaja i bilo kakvih potencijalnih problema sa potpisivanjem koda.
Ako softver prođe ovu inspekciju bez podizanja bilo kakvih zabrinutosti, Notarizacijska Usluga generiše tiket notarizacije. Razvijač je zatim obavezan da priključi ovaj tiket svom softveru, proces poznat kao 'stapling.' Pored toga, tiket notarizacije se takođe objavljuje online gde mu Gatekeeper, Apple-ova sigurnosna tehnologija, može pristupiti.
Prilikom prve instalacije ili izvršavanja softvera od strane korisnika, postojanje tiketa notarizacije - bilo da je priključen na izvršni fajl ili pronađen online - obaveštava Gatekeeper da je softver notarizovan od strane Apple-a. Kao rezultat, Gatekeeper prikazuje opisnu poruku u inicijalnom dijalogu za pokretanje, ukazujući da je softver prošao provere za maliciozni sadržaj od strane Apple-a. Ovaj proces tako poboljšava poverenje korisnika u sigurnost softvera koji instaliraju ili pokreću na svojim sistemima.
Napomena da od verzije Sequoia, spctl
više ne dozvoljava modifikaciju konfiguracije Gatekeeper-a.
spctl
je CLI alat za enumeraciju i interakciju sa Gatekeeper-om (sa syspolicyd
demonima putem XPC poruka). Na primer, moguće je videti status GateKeeper-a sa:
Napomena da se provere potpisa GateKeeper-a vrše samo za datoteke sa atributom karantina, a ne za svaku datoteku.
GateKeeper će proveriti da li prema postavkama i potpisu može da se izvrši binarni fajl:
syspolicyd
je glavni daemon odgovoran za sprovođenje Gatekeeper-a. Održava bazu podataka smeštenu u /var/db/SystemPolicy
i moguće je pronaći kod koji podržava bazu podataka ovde i SQL šablon ovde. Napomena da baza podataka nije ograničena SIP-om i da je moguće pisati u nju kao root, a baza podataka /var/db/.SystemPolicy-default
se koristi kao originalna rezervna kopija u slučaju da se druga ošteti.
Pored toga, paketi /var/db/gke.bundle
i /var/db/gkopaque.bundle
sadrže datoteke sa pravilima koja se ubacuju u bazu podataka. Možete proveriti ovu bazu podataka kao root sa:
syspolicyd
takođe izlaže XPC server sa različitim operacijama kao što su assess
, update
, record
i cancel
koje su takođe dostupne koristeći Security.framework
's SecAssessment*
API-je, a xpctl
zapravo komunicira sa syspolicyd
putem XPC.
Obratite pažnju na to kako je prvo pravilo završilo u "App Store" i drugo u "Developer ID" i da je u prethodnoj slici bilo omogućeno izvršavanje aplikacija iz App Store-a i identifikovanih developera. Ako izmenite tu postavku na App Store, pravila "Notarized Developer ID" će nestati.
Takođe postoji hiljade pravila tipa GKE:
Ovo su heševi koji dolaze iz:
/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth
/var/db/gke.bundle/Contents/Resources/gk.db
/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db
Ili možete navesti prethodne informacije sa:
Opcije --master-disable
i --global-disable
alata spctl
će potpuno onemogućiti ove provere potpisa:
Kada je potpuno omogućeno, nova opcija će se pojaviti:
Moguće je proveriti da li će aplikacija biti dozvoljena od strane GateKeeper-a sa:
Moguće je dodati nova pravila u GateKeeper da bi se omogućila izvršavanje određenih aplikacija sa:
Regarding kernel extensions, the folder /var/db/SystemPolicyConfiguration
contains files with lists of kexts allowed to be loaded. Moreover, spctl
has the entitlement com.apple.private.iokit.nvram-csr
because it's capable of adding new pre-approved kernel extensions which need to be saved also in NVRAM in a kext-allowed-teams
key.
Upon downloading an application or file, specific macOS applications such as web browsers or email clients attach an extended file attribute, commonly known as the "quarantine flag," to the downloaded file. This attribute acts as a security measure to mark the file as coming from an untrusted source (the internet), and potentially carrying risks. However, not all applications attach this attribute, for instance, common BitTorrent client software usually bypasses this process.
Prisutnost oznake karantina signalizira bezbednosnu funkciju Gatekeeper-a macOS-a kada korisnik pokuša da izvrši datoteku.
In the case where the quarantine flag is not present (as with files downloaded via some BitTorrent clients), Gatekeeper's checks may not be performed. Thus, users should exercise caution when opening files downloaded from less secure or unknown sources.
Proveravanje validnosti potpisa koda je resursno intenzivan proces koji uključuje generisanje kriptografskih hash-eva koda i svih njegovih pratećih resursa. Furthermore, checking certificate validity involves doing an online check to Apple's servers to see if it has been revoked after it was issued. For these reasons, a full code signature and notarization check is impractical to run every time an app is launched.
Therefore, these checks are only run when executing apps with the quarantined attribute.
Ova oznaka mora biti postavljena od strane aplikacije koja kreira/preuzima datoteku.
Međutim, datoteke koje su u sandbox-u će imati ovu oznaku postavljenu na svaku datoteku koju kreiraju. A aplikacije koje nisu u sandbox-u mogu je postaviti same, ili odrediti LSFileQuarantineEnabled ključ u Info.plist koji će omogućiti sistemu da postavi com.apple.quarantine
proširenu oznaku na kreiranim datotekama,
Moreover, all files created by a process calling qtn_proc_apply_to_self
are quarantined. Or the API qtn_file_apply_to_path
adds the quarantine attribute to a specified file path.
It's possible to check it's status and enable/disable (root required) with:
Možete takođe proveriti da li datoteka ima prošireni atribut karantina sa:
Proverite vrednost proširenih atributa i saznajte aplikaciju koja je napisala atribut karantina sa:
Zapravo, proces "može postaviti zastavice karantina na datoteke koje kreira" (već sam pokušao da primenim USER_APPROVED zastavicu na kreiranoj datoteci, ali se ona neće primeniti):
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)