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ürecinde yatmaktadır. İ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 noterlemeden 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ıları uyararak kontrol ve güvenliği 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ışır:
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. Noterleme süreci, uygulamayı bilinen güvenlik sorunları ve kötü amaçlı kod için kontrol eder; bu kontroller geçerse, Apple, 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ü niyetli 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ü niyetli 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çermektedir. 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 bu ayarı App Store olarak değiştirirseniz, "Notarized Developer ID" kuralları kaybolacaktır.
Ayrıca tip GKE olan binlerce kural da bulunmaktadır:
Bunlar şu dosyalardan alınan 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:
spctl
'nin --master-disable
ve --global-disable
seçenekleri bu imza kontrollerini tamamen devre dışı bırakacaktır:
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, kaynak yoğun bir süreçtir ve kodun ve tüm paketlenmiş kaynaklarının kriptografik hash'lerini oluşturmayı içerir. 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ı, tam bir kod imzası ve notary kontrolü, her uygulama başlatıldığında çalıştırmak pratik değildir.
Bu nedenle, bu kontroller yalnızca karantinaya alınmış niteliğe sahip uygulamalar çalıştırıldığında yapılır.
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 ayarlayacaktır. Ve sandbox'lanmamış uygulamalar bunu kendileri ayarlayabilir veya sistemin oluşturulan dosyalara com.apple.quarantine
genişletilmiş niteliğini ayarlamasını sağlayacak LSFileQuarantineEnabled anahtarını Info.plist içinde 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:
You can also find if a file has the quarantine extended attribute with:
Kontrol et değerini uzatılmış özelliklerin ve karantina özelliğini yazan uygulamayı bul:
Aslında bir süreç "oluşturduğu dosyalara karantina bayrakları ayarlayabilir" (oluşturulan bir dosyada USER_APPROVED bayrağını uygulamayı denedim ama uygulamıyor):
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)