* Bir **cybersecurity şirketinde** çalışıyor musunuz? **Şirketinizi HackTricks'te reklamını görmek** ister misiniz? veya **PEASS'ın en son sürümüne veya HackTricks'i PDF olarak indirmek** ister misiniz? [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonunu keşfedin
* [**Resmi PEASS & HackTricks ürünlerine**](https://peass.creator-spring.com) sahip olun
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter**'da takip edin 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
**Gatekeeper**, Mac işletim sistemleri için geliştirilen bir güvenlik özelliğidir ve kullanıcıların sistemlerinde **yalnızca güvenilir yazılımları çalıştırmalarını** sağlamayı amaçlar. Kullanıcının indirdiği ve App Store dışındaki kaynaklardan (bir uygulama, bir eklenti veya bir kurulum paketi gibi) açmaya çalıştığı yazılımı**doğrulayarak** çalıştırmasını sağlar.
Gatekeeper'ın temel mekanizması, indirilen yazılımın **tanınmış bir geliştirici tarafından imzalanıp imzalanmadığını** kontrol etmesidir, bu da yazılımın otantikliğini sağlar. Ayrıca, yazılımın **Apple tarafından noterleme işleminden geçip geçmediğini** de belirler. Bu, yazılımın bilinen kötü amaçlı içeriklerden arındırıldığını ve noterlemeden sonra değiştirilmediğini doğrular.
Ek olarak, Gatekeeper, kullanıcı kontrolünü ve güvenliğini güçlendirir ve kullanıcıları indirilen yazılımın ilk kez açılmasını**onaylamaya zorlar**. Bu güvenlik önlemi, kullanıcıların zararlı olabilecek yürütülebilir kodu yanlışlıkla zararsız bir veri dosyası olarak yanlış anlamalarını önlemeye yardımcı olur.
Uygulama imzaları, Apple'ın güvenlik altyapısının önemli bir bileşenidir. Bunlar, yazılım yazarının (geliştiricinin) kimliğini **doğrulamak** ve kodun son imzalandığından beri değiştirilmediğinden emin olmak için kullanılır.
1.**Uygulamanın İmzalanması:** Bir geliştirici uygulamasını dağıtmaya hazır olduğunda, uygulamayı**özel bir anahtar kullanarak imzalar**. Bu özel anahtar, geliştirici Apple Developer Programına kaydolduğunda Apple tarafından geliştiriciye verilen bir **sertifika ile ilişkilidir**. İmzalama işlemi, uygulamanın tüm parçalarının kriptografik bir özetini oluşturmayı ve bu özeti geliştiricinin özel anahtarıyla şifrelemeyi içerir.
2.**Uygulamanın Dağıtılması:** İmzalanan uygulama, geliştiricinin sertifikasını içeren ilgili genel anahtarıyla birlikte kullanıcılara dağıtılır.
3.**Uygulamanın Doğrulanması:** Bir kullanıcı uygulamayı indirip çalıştırmaya çalıştığında, Mac işletim sistemi, geliştiricinin sertifikasından genel anahtarı kullanarak özeti şifresini çözer. Ardından, uygulamanın mevcut durumuna dayanarak özeti yeniden hesaplar ve bu özeti çözülen özetiyle karşılaştırır. Eşleşiyorsa, bu, uygulamanın geliştirici tarafından imzalandığından beri **değiştirilmediği** anlamına gelir ve sistem uygulamanın çalışmasına izin verir.
Uygulama imzaları, Apple'ın Gatekeeper teknolojisinin önemli 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 uygulama, Apple tarafından bilinen 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ıya uyarı verir.
macOS Catalina'dan itibaren, Gatekeeper ayrıca uygulamanın Apple tarafından **noterleme işleminden geçip geçmediğini** de kontrol eder ve ek bir güvenlik katmanı ekler. Noterleme işlemi, uygulamayı bilinen güvenlik sorunları ve kötü amaçlı kodlar açısından kontrol eder ve bu kontrolleri geçerse, Apple uygulamaya Gatekeeper'ın doğrulayabileceği bir biletleme ekler.
Bazı**kötü amaçlı yazılım örneğini** kontrol ederken her zaman **binary'nin 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 verir. Bu süreç, geliştiricinin uygulamasını Apple'ın Notary Service'ine göndermesini içerir, bu da App Review ile karıştırılmamalıdır. Bu hizmet, gönderilen yazılımı kötü amaçlı içerik ve kod imzalama ile ilgili potansiyel sorunlar açısından inceleyen otomatik bir sistemdir.
Yazılım, herhangi bir endişe uyandırmadan bu incelemeyi geçerse, Notary Service bir notarizasyon bileti oluşturur. Geliştirici daha sonra bu bileti yazılımlarına eklemek zorundadır, bu işleme 'stapling' denir. Ayrıca, notarizasyon bileti aynı zamanda Gatekeeper'ın erişebileceği şekilde çevrimiçi olarak da yayınlanır.
Kullanıcının yazılımı ilk kez yüklemesi veya çalıştırması durumunda, yürütülebilir dosyaya eklenmiş veya çevrimiçi bulunan notarizasyon bileti, Gatekeeper'a yazılımın Apple tarafından notarize edildiğini bildirir. Sonuç olarak, Gatekeeper, kullanıcıya yazılımın Apple tarafından kötü amaçlı içerik kontrolünden geçtiğini belirten açıklayıcı bir mesaj gösterir. Bu süreç, kullanıcıların sistemlerine yükledikleri veya çalıştırdıkları yazılımların güvenliği konusunda kullanıcı güvenini artırır.
SELECT requirement,allow,disabled,label from authority where label != 'GKE' and disabled=0;
requirement|allow|disabled|label
anchor apple generic and certificate 1[subject.CN] = "Apple Software Update Certification Authority"|1|0|Apple Installer
anchor apple|1|0|Apple System
anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists|1|0|Mac App Store
anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists and (certificate leaf[field.1.2.840.113635.100.6.1.14] or certificate leaf[field.1.2.840.113635.100.6.1.13]) and notarized|1|0|Notarized Developer ID
Dikkat edin, ilk kural "**App Store**" ile bitti ve ikinci kural "**Developer ID**" ile bitti ve önceki görüntüde **App Store'dan ve tanımlanmış geliştiricilerden uygulamaları çalıştırmaya izin verildi**.\
Eğer bu ayarı App Store olarak **değiştirirseniz, "Notarized Developer ID" kuralları kaybolacaktır**.
Bu, **`/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth`, `/var/db/gke.bundle/Contents/Resources/gk.db`** ve **`/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db`** dosyalarından gelen karma değerleridir.
Bir uygulama veya dosya indirildiğinde, web tarayıcıları veya e-posta istemcileri gibi belirli macOS uygulamaları indirilen dosyaya yaygın olarak bilinen "**karantina bayrağı**" olarak adlandırılan bir genişletilmiş dosya özniteliği ekler. Bu öznitelik, dosyanın güvenilmeyen bir kaynaktan (internet) geldiğini ve potansiyel riskler taşıdığını belirtmek için bir güvenlik önlemi olarak hareket eder. Bununla birlikte, tüm uygulamalar bu özniteliği eklememektedir, örneğin, yaygın BitTorrent istemci yazılımları genellikle bu süreci atlar.
Karantina bayrağı**mevcut olmadığında** (bazı BitTorrent istemcileri aracılığıyla indirilen dosyalar gibi), Gatekeeper'ın **kontrolleri gerçekleştirilmeyebilir**. Bu nedenle, kullanıcılar daha az güvenli veya bilinmeyen kaynaklardan indirilen dosyaları açarken dikkatli olmalıdır.
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, sertifikanın verildikten sonra iptal edilip edilmediğini görmek için Apple'ın sunucularına **çevrimiçi bir kontrol** yapmayı gerektirir. Bu nedenlerle, tam bir kod imzası ve onaylama kontrolü, bir uygulama başlatıldığında her seferinde çalıştırılması**uygulanabilir değildir**.
Ancak, kumlanmış dosyalar, oluşturdukları her dosya için bu özniteliğin ayarlanmış olması gerekmektedir. Ve kumlanmamış uygulamalar kendileri ayarlayabilir veya **Info.plist** içinde [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information\_property\_list/lsfilequarantineenabled?language=objc) anahtarını belirtebilir, bu da sistemin oluşturulan dosyalara `com.apple.quarantine` genişletilmiş özniteliğini eklemesini sağlar.
Aslında bir işlem, oluşturduğu dosyalara karantina bayrakları ayarlayabilir (USER_APPROVED bayrağını oluşturulan bir dosyaya uygulamayı denedim ancak uygulanmadı):
Çekirdek uzantısı sadece sistemdeki **çekirdek önbelleği** aracılığıyla kullanılabilir; ancak, **https://developer.apple.com/** adresinden Kernel Hata Ayıklama Kiti'ni indirebilirsiniz, bu kit, uzantının sembolize edilmiş bir sürümünü içerecektir.
XProtect, macOS'ta yerleşik bir **anti-malware** özelliğidir. XProtect, herhangi bir uygulama ilk kez başlatıldığında veya değiştirildiğinde, bilinen kötü amaçlı yazılım ve güvensiz dosya türleri veritabanına karşı kontrol eder. Safari, Mail veya Messages gibi belirli uygulamalar aracılığıyla bir dosya indirdiğinizde, XProtect otomatik olarak dosyayı tarar. Veritabanındaki herhangi bir bilinen kötü amaçlı yazılıma uyan bir dosya indirildiğinde, XProtect dosyanın çalışmasını**engeller** ve tehdide ilişkin bir uyarı gösterir.
XProtect veritabanı, Apple tarafından düzenli olarak yeni kötü amaçlı yazılım tanımlarıyla güncellenir ve bu güncellemeler otomatik olarak Mac'inize indirilir ve yüklenir. Bu, XProtect'in her zaman en son bilinen tehditlerle güncel olduğunu sağlar.
Ancak, **XProtect tam özellikli bir antivirüs çözümü değildir**. Yalnızca belirli bir bilinen tehdit listesini kontrol eder ve çoğu antivirüs yazılımı gibi on-access tarama yapmaz.
XProtect, **/Library/Apple/System/Library/CoreServices/XProtect.bundle** konumunda SIP korumalıdır ve içinde XProtect'ın kullandığı bilgilere ulaşabilirsiniz:
* **`XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist`**: Bu cdhashlere sahip kodların eski yetkilendirmeleri kullanmasına izin verir.
* **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: BundleID ve TeamID veya minimum bir sürüm belirterek yüklenmesine izin verilmeyen eklenti ve eklentilerin listesi.
* **`XProtect.bundle/Contents/Resources/XProtect.yara`**: Zararlı yazılımları tespit etmek için Yara kuralları.
* **`XProtect.bundle/Contents/Resources/gk.db`**: Engellenen uygulamaların ve TeamID'lerin karma değerlerini içeren SQLite3 veritabanı.
Gatekeeper'ın her uygulamayı çalıştırdığını unutmayın, sadece _**AppleMobileFileIntegrity**_ (AMFI) zaten Gatekeeper tarafından doğrulanmış ve onaylanmış bir uygulamayı çalıştırdığınızda **yürütülebilir kod imzalarını doğrular**.
Bu nedenle, önceden bir uygulamayı Gatekeeper ile önbelleğe almak için uygulamayı çalıştırmanız ve onaylamanız mümkündü, ardından (Electron asar veya NIB dosyaları gibi) uygulamanın yürütülemez dosyalarını değiştirir ve başka bir koruma olmadığı sürece uygulama **zararlı** eklemelerle **çalıştırılırdı**.
Ancak, artık bu mümkün değil çünkü macOS, uygulama paketlerinin içindeki dosyaları değiştirmeyi **engeller**. Bu nedenle, [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md) saldırısını denerseniz, artık bunu kötüye kullanmanız mümkün olmadığını göreceksiniz çünkü uygulamayı Gatekeeper ile önbelleğe almak için uygulamayı çalıştırdıktan sonra paketi değiştiremezsiniz. Ve örneğin, İçerik dizininin adını NotCon olarak değiştirir ve ardından uygulamanın ana ikili dosyasını Gatekeeper ile önbelleğe almak için çalıştırırsanız, bir hata oluşur ve çalıştırılmaz.
Gatekeeper'ı atlamak için herhangi bir yol (kullanıcının bir şeyi indirmesini ve Gatekeeper'ın izin vermemesi gereken bir şeyi çalıştırmasını sağlamak) macOS'ta bir güvenlik açığı olarak kabul edilir. Bunlar, geçmişte Gatekeeper'ı atlamayı sağlayan tekniklere atanan bazı CVE'lerdir:
**Arşiv Yardımcısı** kullanılarak çıkarma işlemi yapıldığında, **886 karakteri aşan yollara sahip** dosyalar com.apple.quarantine genişletilmiş özniteliğini almaz. Bu durum yanlışlıkla bu dosyaların Gatekeeper'ın güvenlik kontrollerini **atlamasına** izin verir.
Bir uygulama **Automator** ile oluşturulduğunda, neyi yürüteceği hakkındaki bilgiler `application.app/Contents/document.wflow` içindedir, yürütülebilirde değil. Yürütülebilir sadece genel bir Automator ikili dosyası olan **Automator Application Stub**'dır.
Bu nedenle, `application.app/Contents/MacOS/Automator\ Application\ Stub`'u **sembolik bir bağlantıyla sistemdeki başka bir Automator Application Stub'a** işaret edecek şekilde yaparsanız, `document.wflow` içindeki (betiğiniz) şeyi **Gatekeeper'ı tetiklemeden** yürütür çünkü gerçek yürütülebilirin karantina xattr'ı yoktur. 
Bu atlamada, bir zip dosyası`application.app` yerine `application.app/Contents`'den sıkıştırmaya başlayan bir uygulama oluşturuldu. Bu nedenle, **karantina özniteliği** tüm **`application.app/Contents`'daki dosyalara** uygulandı, ancak **`application.app`'a** uygulanmadı, Gatekeeper'ın kontrol ettiği şey bu olduğu için Gatekeeper atlandı, çünkü `application.app` tetiklendiğinde **karantina özniteliği yoktu**.
Bileşenler farklı olsa da, bu güvenlik açığının sömürülmesi öncekine çok benzer. Bu durumda, **`application.app/Contents`** dizininden bir Apple Arşivi oluşturacağız, böylece **`application.app`** **Archive Utility** tarafından açıldığında karantina özelliği almayacak.
[**Kaynak kodunda**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) görülebileceği gibi, **`com.apple.acl.text`** adlı xattr içinde depolanan ACL metin temsili, sıkıştırılmış dosyada ACL olarak ayarlanacaktır. Bu nedenle, ACL'yi diğer xattr'lerin yazılmasını engelleyen bir ACL ile bir uygulamayı zip dosyasına sıkıştırırsanız... karantina xattr'i uygulamaya ayarlanmaz:
Daha fazla bilgi için [**orijinal raporu**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) kontrol edin.
AppleDouble dosya biçimleri, bir dosyanın özniteliklerini `._` ile başlayan ayrı bir dosyada saklar, bu macOS makineleri arasında dosya özniteliklerini kopyalamaya yardımcı olur. Ancak, bir AppleDouble dosyası sıkıştırıldıktan sonra, `._` ile başlayan dosyaya **karantina özniteliği atanmadığı** fark edildi.
Quarantine özniteliği ayarlanmayan bir dosya oluşturabilmek, Gatekeeper'ı atlamak mümkündü. Hile, AppleDouble adlandırma kuralını kullanarak bir DMG dosyası uygulaması oluşturmak ve karantina özniteliği olmayan bu gizli dosyaya bir sembolik bağ olarak görünen bir dosya oluşturmaktı. DMG dosyası çalıştırıldığında, karantina özniteliği olmadığı için Gatekeeper'ı atlayacaktır.
<summary><strong>AWS hacklemeyi sıfırdan kahramanla öğrenin</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
* **Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**'ı takip edin**.