macOS Gatekeeper / Quarantine / XProtect
Gatekeeper
Gatekeeper je bezbednosna funkcija razvijena za Mac operativne sisteme, dizajnirana da osigura da korisnici pokreću samo pouzdani softver na svojim sistemima. Funkcioniše tako što validira softver koji korisnik preuzima i pokušava da otvori sa izvora van App Store-a, kao što je 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 prepoznatljivog developera, osiguravajući autentičnost softvera. Dodatno, utvrđuje da li je softver notarisan od strane Apple-a, potvrđujući da je lišen poznatog zlonamernog sadržaja i da nije menjan nakon notarizacije.
Pored toga, Gatekeeper jača kontrolu korisnika i bezbednost tako što traži od korisnika odobrenje za otvaranje preuzetog softvera prvi put. Ova zaštita pomaže u sprečavanju korisnika da slučajno pokrenu potencijalno štetan izvršni kod koji su možda greškom smatrali bezopasnim datotekama.
Potpisi Aplikacija
Potpisi aplikacija, takođe poznati kao kodni potpisi, su ključna komponenta Apple-ove bezbednosne infrastrukture. Koriste se za verifikaciju identiteta autora softvera (developera) i kako bi se osiguralo da kod nije menjan od poslednjeg potpisa.
Evo kako to funkcioniše:
Potpisivanje Aplikacije: Kada developer bude spreman da distribuira svoju aplikaciju, on potpisuje aplikaciju koristeći privatni ključ. Taj privatni ključ je povezan sa sertifikatom koji Apple izdaje developeru kada se upiše u Apple Developer Program. Proces potpisivanja uključuje kreiranje kriptografskog heša svih delova aplikacije i šifrovanje ovog heša privatnim ključem developera.
Distribucija Aplikacije: Potpisana aplikacija se zatim distribuira korisnicima zajedno sa sertifikatom developera, 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 developera da dešifruje heš. Zatim ponovo izračunava heš na osnovu trenutnog stanja aplikacije i upoređuje ga sa dešifrovanim hešom. Ako se poklapaju, to znači da aplikacija nije menjana od trenutka kada ju je developer potpisao, i sistem dozvoljava aplikaciji da se pokrene.
Potpisi aplikacija su bitan deo Apple-ove Gatekeeper tehnologije. Kada korisnik pokuša da otvori aplikaciju preuzetu sa interneta, Gatekeeper verifikuje potpis aplikacije. Ako je potpisan sertifikatom koji je Apple izdao poznatom developeru 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 ovi testovi prođu, Apple dodaje "ticket" aplikaciji koji Gatekeeper može da verifikuje.
Provera Potpisa
Prilikom provere nekog uzorka malvera uvek treba proveriti potpis binarnog koda jer bi developer koji ga je potpisao već mogao biti povezan sa malverom.
Notarizacija
Apple-ov proces notarizacije služi kao dodatna zaštita kako bi se korisnici zaštitili od potencijalno štetnog softvera. Uključuje razvojničko podnošenje njihove aplikacije na pregled od strane Apple-ove Notary Service, što ne treba mešati sa App Review-om. Ova usluga je automatizovan sistem koji detaljno pregleda podneti softver radi otkrivanja zlonamernog sadržaja i potencijalnih problema sa potpisivanjem koda.
Ako softver prođe ovu inspekciju bez podizanja bilo kakvih zabrinutosti, Notary Service generiše notarizacioni tiket. Razvojničko je zatim potrebno da priloži ovaj tiket uz svoj softver, proces poznat kao 'stapling.' Nadalje, notarizacioni tiket se takođe objavljuje online gde Gatekeeper, Apple-ova sigurnosna tehnologija, može da mu pristupi.
Prilikom korisnikove prve instalacije ili izvršavanja softvera, postojanje notarizacionog tiketa - bilo da je prikačen za izvršnu datoteku ili pronađen online - obaveštava Gatekeeper da je softver notarizovan od strane Apple-a. Kao rezultat toga, Gatekeeper prikazuje opisnu poruku u dijalogu prvog pokretanja, ukazujući da je softver prošao provere na zlonamerni sadržaj od strane Apple-a. Ovaj proces time unapređuje korisničko poverenje u sigurnost softvera koji instaliraju ili pokreću na svojim sistemima.
Enumeracija GateKeeper-a
GateKeeper je nekoliko sigurnosnih komponenti koje sprečavaju izvršavanje nepoverenih aplikacija i takođe je jedna od komponenti.
Moguće je videti status GateKeeper-a sa:
Imajte na umu da se provere potpisa GateKeeper-a vrše samo nad datotekama sa atributom karantina, a ne nad svakom datotekom.
GateKeeper će proveriti da li prema postavkama i potpisu binarni fajl može biti izvršen:
Baza podataka koja čuva ovu konfiguraciju nalazi se u /var/db/SystemPolicy
. Možete proveriti ovu bazu kao root korisnik sa:
Zapaženo je kako se pravilo završilo na "App Store", a drugo na "Developer ID" i da je u prethodnoj slici omogućeno izvršavanje aplikacija sa App Store-a i identifikovanih programera. Ako promenite tu postavku na App Store, pravila "Notarized Developer ID" će nestati.
Postoji i hiljade pravila tipa GKE:
Ovo su heševi koji potiču 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 da nabrojite prethodne informacije sa:
Opcije --master-disable
i --global-disable
komande spctl
će potpuno onemogućiti provere potpisa:
Kada je potpuno omogućen, pojaviće se nova opcija:
Moguće je proveriti da li će aplikacija biti dozvoljena od strane GateKeeper-a sa:
Moguće je dodati nove pravila u GateKeeper kako bi se omogućilo izvršavanje određenih aplikacija pomoću:
Karantin fajlovi
Prilikom preuzimanja aplikacije ili fajla, određene macOS aplikacije kao što su veb pregledači ili klijenti za e-poštu dodaju prošireni atribut fajla, poznat kao "atribut karantina," preuzetom fajlu. Ovaj atribut služi kao sigurnosna mera za označavanje fajla kao dolaznog sa nepouzdane izvora (internet), i potencijalno nosi rizike. Međutim, ne sve aplikacije dodaju ovaj atribut, na primer, uobičajeni BitTorrent klijenti softver obično zaobilaze ovaj proces.
Prisustvo atributa karantina signalizira sigurnosnu funkciju macOS Gatekeeper-a kada korisnik pokuša da izvrši fajl.
U slučaju kada atribut karantina nije prisutan (kao kod fajlova preuzetih putem nekih BitTorrent klijenata), provere Gatekeeper-a se možda neće izvršiti. Stoga, korisnici treba da budu oprezni prilikom otvaranja fajlova preuzetih sa manje sigurnih ili nepoznatih izvora.
Provera validnosti potpisa koda je resursno intenzivan proces koji uključuje generisanje kriptografskih heševa koda i svih njegovih pakovanih resursa. Nadalje, provera validnosti sertifikata uključuje online proveru na Apple-ovim serverima da vidi da li je opozvan nakon što je izdat. Iz ovih razloga, potpuna provera potpisa koda i notarizacije je nepraktična za pokretanje svaki put kada se pokrene aplikacija.
Stoga, ove provere se izvršavaju samo prilikom izvršavanja aplikacija sa atributom karantina.
Ovaj atribut mora biti postavljen od strane aplikacije koja kreira/preuzima fajl.
Međutim, fajlovi koji su u pesku će imati ovaj atribut postavljen za svaki fajl koji kreiraju. I aplikacije koje nisu u pesku mogu ga postaviti same, ili specificirati LSFileQuarantineEnabled ključ u Info.plist koji će naterati sistem da postavi com.apple.quarantine
prošireni atribut na kreirane fajlove,
Štaviše, svi fajlovi kreirani od strane procesa koji poziva qtn_proc_apply_to_self
su u karantinu. Ili API qtn_file_apply_to_path
dodaje atribut karantina na određenu putanju fajla.
Moguće je proveriti njegov status i omogućiti/onemogućiti (potreban je root) sa:
Takođe možete pronaći da li datoteka ima prošireni atribut karantina sa:
Proverite vrednost proširenih atributa i saznajte koja je aplikacija napisala atribut karantina sa:
Zapravo, proces "može postaviti karantinske zastave na datoteke koje kreira" (pokušao sam da primenim USER_APPROVED zastavu na kreiranu datoteku, ali se ne primenjuje):
Last updated