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, Mac işletim sistemleri için geliştirilmiş bir güvenlik özelliğidir ve kullanıcıların sistemlerinde yalnızca güvenilir yazılımları çalıştırmalarını sağlamak için tasarlanmıştır. Kullanıcıların App Store dışındaki kaynaklardan indirdiği ve açmaya çalıştığı yazılımları doğrulayarak çalışır; bu kaynaklar arasında bir uygulama, eklenti veya yükleyici paketi bulunur.
Gatekeeper'ın ana mekanizması, doğrulama sürecindedir. İndirilen yazılımın tanınmış bir geliştirici tarafından imzalanıp imzalanmadığını kontrol eder ve yazılımın özgünlüğünü sağlar. Ayrıca, yazılımın Apple tarafından noterlenip noterlenmediğini belirler; bu, yazılımın bilinen kötü amaçlı içerikten arındırıldığını ve noterlikten sonra değiştirilmediğini doğrular.
Ayrıca, Gatekeeper, kullanıcıların indirdikleri yazılımları ilk kez açmalarını onaylamaları için kullanıcılara onay istemi göndererek kullanıcı kontrolünü ve güvenliğini artırır. Bu koruma, kullanıcıların yanlışlıkla zararlı olabilecek çalıştırılabilir kodları, zararsız bir veri dosyası olarak yanlış anlamalarını önlemeye yardımcı olur.
Uygulama imzaları, kod imzaları olarak da bilinir ve Apple'ın güvenlik altyapısının kritik bir bileşenidir. Yazılım yazarının (geliştiricinin) kimliğini doğrulamak ve kodun en son imzalandığı tarihten bu yana değiştirilmediğini sağlamak için kullanılır.
İşte nasıl çalıştığı:
Uygulamayı İmzalama: Bir geliştirici uygulamasını dağıtmaya hazır olduğunda, uygulamayı özel bir anahtar kullanarak imzalar. Bu özel anahtar, geliştirici Apple Geliştirici Programı'na kaydolduğunda Apple tarafından kendisine verilen bir sertifika ile ilişkilidir. İmzalama süreci, uygulamanın tüm parçalarının kriptografik bir hash'ini oluşturmayı ve bu hash'i geliştiricinin özel anahtarıyla şifrelemeyi içerir.
Uygulamayı Dağıtma: İmzalanmış uygulama, geliştiricinin sertifikasıyla birlikte kullanıcılara dağıtılır; bu sertifika, ilgili genel anahtarı içerir.
Uygulamayı Doğrulama: Bir kullanıcı uygulamayı indirip çalıştırmaya çalıştığında, Mac işletim sistemi geliştiricinin sertifikasından genel anahtarı kullanarak hash'i çözer. Ardından, uygulamanın mevcut durumu temelinde hash'i yeniden hesaplar ve bu değeri çözülen hash ile karşılaştırır. Eğer eşleşiyorsa, bu, uygulamanın geliştirici tarafından imzalandığı tarihten bu yana değiştirilmediği anlamına gelir ve sistem uygulamanın çalışmasına izin verir.
Uygulama imzaları, Apple'ın Gatekeeper teknolojisinin temel bir parçasıdır. Bir kullanıcı internetten indirilen bir uygulamayı açmaya çalıştığında, Gatekeeper uygulama imzasını doğrular. Eğer imza, Apple tarafından tanınmış bir geliştiriciye verilen bir sertifika ile imzalanmışsa ve kod değiştirilmemişse, Gatekeeper uygulamanın çalışmasına izin verir. Aksi takdirde, uygulamayı engeller ve kullanıcıyı uyarır.
macOS Catalina'dan itibaren, Gatekeeper ayrıca uygulamanın Apple tarafından noterlenip noterlenmediğini kontrol eder ve bu, ek bir güvenlik katmanı ekler. Noterlik süreci, uygulamayı bilinen güvenlik sorunları ve kötü amaçlı kod için kontrol eder ve bu kontroller geçerse, Apple uygulamaya Gatekeeper'ın doğrulayabileceği bir bilet ekler.
Bazı kötü amaçlı yazılım örneklerini kontrol ederken, her zaman ikili dosyanın imzasını kontrol etmelisiniz çünkü imzayı atan geliştirici zaten kötü amaçlı yazılımla ilişkili olabilir.
Apple'ın notarizasyon süreci, kullanıcıları potansiyel olarak zararlı yazılımlardan korumak için ek bir güvenlik önlemi olarak hizmet eder. Bu süreç, geliştiricinin uygulamasını Apple'ın Noter Servisi tarafından incelenmek üzere göndermesini içerir; bu, App Review ile karıştırılmamalıdır. Bu hizmet, kötü amaçlı içerik ve kod imzalama ile ilgili olası sorunlar için gönderilen yazılımı inceleyen otomatik bir sistemdir.
Eğer yazılım, herhangi bir endişe yaratmadan bu incelemeyi geçerse, Noter Servisi bir notarizasyon belgesi oluşturur. Geliştiricinin, bu belgeyi yazılımlarına eklemesi gerekmektedir; bu işleme 'stapling' denir. Ayrıca, notarizasyon belgesi çevrimiçi olarak da yayınlanır ve Gatekeeper, Apple'ın güvenlik teknolojisi, buna erişebilir.
Kullanıcının yazılımı ilk yüklemesi veya çalıştırması sırasında, notarizasyon belgesinin varlığı - ister çalıştırılabilir dosyaya eklenmiş olsun, ister çevrimiçi bulunsun - Gatekeeper'a yazılımın Apple tarafından notarize edildiğini bildirir. Sonuç olarak, Gatekeeper, yazılımın Apple tarafından kötü amaçlı içerik için kontrol edildiğini belirten açıklayıcı bir mesajı ilk başlatma iletişim kutusunda gösterir. Bu süreç, kullanıcıların sistemlerine yükledikleri veya çalıştırdıkları yazılımların güvenliğine olan güvenini artırır.
Sequoia sürümünden itibaren, spctl
artık Gatekeeper yapılandırmasını değiştirmeye izin vermemektedir.
spctl
, Gatekeeper ile etkileşimde bulunmak ve onu listelemek için CLI aracıdır (XPC mesajları aracılığıyla syspolicyd
daemon'u ile). Örneğin, GateKeeper'ın durumunu görmek mümkündür:
GateKeeper imza kontrollerinin yalnızca Quarantine niteliğine sahip dosyalar için gerçekleştirildiğini, her dosya için değil, unutmayın.
GateKeeper, tercihler ve imza doğrultusunda bir ikili dosyanın çalıştırılıp çalıştırılamayacağını kontrol edecektir:
syspolicyd
Gatekeeper'ı uygulamaktan sorumlu ana daemon'dur. /var/db/SystemPolicy
konumunda bir veritabanı tutar ve veritabanını destekleyen kodu burada ve SQL şablonunu burada bulmak mümkündür. Veritabanının SIP tarafından kısıtlanmadığını ve root tarafından yazılabilir olduğunu unutmayın; ayrıca /var/db/.SystemPolicy-default
veritabanı, diğerinin bozulması durumunda orijinal bir yedek olarak kullanılmaktadır.
Ayrıca, /var/db/gke.bundle
ve /var/db/gkopaque.bundle
dosyaları, veritabanına eklenen kurallarla birlikte dosyalar içerir. Bu veritabanını root olarak kontrol edebilirsiniz:
syspolicyd
ayrıca assess
, update
, record
ve cancel
gibi farklı işlemlerle bir XPC sunucusu sunar; bunlara Security.framework
'ün SecAssessment*
API'leri aracılığıyla da erişilebilir ve xpctl
aslında syspolicyd
ile XPC üzerinden iletişim kurar.
İlk kuralın "App Store" ile ve ikinci kuralın "Developer ID" ile bittiğine ve önceki görüntüde App Store ve tanımlı geliştiricilerden uygulama çalıştırma izninin etkin olduğuna dikkat edin. Eğer o ayarı App Store olarak değiştirirseniz, "Notarized Developer ID" kuralları kaybolacaktır.
Ayrıca tip GKE olan binlerce kural da bulunmaktadır:
Bunlar şunlardan elde edilen hash'lerdir:
/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
Ya da önceki bilgileri şu şekilde listeleyebilirsiniz:
The options --master-disable
and --global-disable
of spctl
will completely devre dışı bırakmak these signature checks:
Tamamen etkinleştirildiğinde, yeni bir seçenek görünecektir:
GateKeeper tarafından bir Uygulamanın izin verilip verilmeyeceğini kontrol etmek mümkündür:
GateKeeper'da belirli uygulamaların çalıştırılmasına izin vermek için yeni kurallar eklemek mümkündür:
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.
The presence of a quarantine flag signals macOS's Gatekeeper security feature when a user attempts to execute the file.
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.
Kod imzalarının geçerliliğini kontrol etmek, kodun ve tüm paketlenmiş kaynaklarının kriptografik hash'lerini oluşturmayı içeren kaynak yoğun bir süreçtir. Ayrıca, sertifika geçerliliğini kontrol etmek, verildiği tarihten sonra iptal edilip edilmediğini görmek için Apple'ın sunucularında çevrimiçi kontrol yapmayı gerektirir. Bu nedenlerden dolayı, her uygulama başlatıldığında tam bir kod imzası ve notlandırma kontrolü pratik değildir.
Bu nedenle, bu kontroller yalnızca karantinaya alınmış niteliğe sahip uygulamalar çalıştırıldığında gerçekleştirilir.
Bu nitelik, dosyayı oluşturan/indiren uygulama tarafından ayarlanmalıdır.
Ancak, sandbox'lanmış dosyalar, oluşturdukları her dosya için bu niteliği alacaktır. Ve sandbox'lanmamış uygulamalar bunu kendileri ayarlayabilir veya sistemin oluşturulan dosyalara com.apple.quarantine
genişletilmiş niteliğini ayarlamasını sağlayacak Info.plist dosyasında LSFileQuarantineEnabled anahtarını belirtebilirler.
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:
Ayrıca bir dosyanın karantina genişletilmiş niteliğine sahip olup olmadığını şu komutla bulabilirsiniz:
Genişletilmiş özelliklerin değerini kontrol edin ve karantina özelliğini yazan uygulamayı bulun:
Aslında bir süreç "oluşturduğu dosyalara karantina bayrakları ayarlayabilir" (oluşturulan bir dosyada USER_APPROVED bayrağını uygulamaya çalıştım ama uygulayamadım):
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)