macOS Gatekeeper / Quarantine / XProtect
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fpentest.eu%2FRENDER_WebSec_10fps_21sec_9MB_29042024.gif&width=768&dpr=4&quality=100&sign=bc0743d1&sv=1)
Gatekeeper
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 odobri 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.
Application Signatures
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 pokretanje aplikacije.
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 pokretanje aplikacije. 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.
Check Signatures
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.
Notarization
Apple-ov proces notarizacije služi kao dodatna zaštita za korisnike od potencijalno štetnog softvera. Uključuje razvijanje aplikacije od strane programera za Apple-ovu Notarizaciju, š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, Notarizacija generiše tiket notarizacije. Programer 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 dijalogu za početno 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.
Enumerating GateKeeper
GateKeeper je i several security components koji sprečavaju izvršavanje nepouzdanih aplikacija i takođe jedna od komponenti.
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 binarni fajl može biti izvršen:
Baza podataka koja čuva ovu konfiguraciju se nalazi u /var/db/SystemPolicy
. Možete proveriti ovu bazu podataka kao root sa:
Napomena kako je prvo pravilo završilo sa "App Store" a drugo sa "Developer ID" i da je u prethodnoj slici bilo omogućeno izvršavanje aplikacija iz App Store-a i od 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
i /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, pojaviće se nova opcija:
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:
Quarantine Files
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 quarantine flag-a signalizira macOS-ovu Gatekeeper sigurnosnu funkciju 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-ova 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.
This attribute must be set by the application creating/downloading the file.
However, files that are sandboxed will have this attribute set to every file they create. And non sandboxed apps can set it themselves, or specify the LSFileQuarantineEnabled key in the Info.plist which will make the system set the com.apple.quarantine
extended attribute on the files created,
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 koja aplikacija je napisala atribut karantina sa:
Zapravo, proces "može postaviti zastavice karantina na datoteke koje kreira" (pokušao sam da primenim USER_APPROVED zastavicu na kreiranoj datoteci, ali se nije primenila):
Last updated