macOS Gatekeeper / Quarantine / XProtect

Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

Gatekeeper

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ğlamak amacıyla tasarlanmıştır. Kullanıcıların App Store dışındaki kaynaklardan (uygulama, eklenti veya yükleyici paketi gibi) indirdikleri ve açmaya çalıştıkları yazılımları doğrulayarak çalışmasını sağlar.

Gatekeeper'ın ana mekanizması, doğrulama sürecinde yatar. İndirilen yazılımın tanınmış bir geliştirici tarafından imzalandığını kontrol eder, yazılımın gerçekliğini sağlar. Ayrıca yazılımın Apple tarafından noterleme işleminden geçip geçmediğini de kontrol eder, bu da yazılımın bilinen kötü amaçlı içerikten yoksun olduğunu ve noterlemeden sonra değiştirilmediğini doğrular.

Ayrıca, Gatekeeper, kullanıcıların indirdikleri yazılımın ilk kez açılmasını onaylamalarını isteyerek kullanıcı kontrolünü ve güvenliğini güçlendirir. Bu koruma, kullanıcıların zararlı olabilecek yürütülebilir kodları yanlışlıkla zararsız veri dosyası olarak algılayabileceği durumları önlemeye yardımcı olur.

Uygulama İmzaları

Uygulama imzaları, Apple'ın güvenlik altyapısının kritik bir bileşenidir. Bunlar, yazılım yazarının (geliştiricinin) kimliğini doğrulamak ve kodun son imzalandığından bu yana değiştirilmediğinden emin olmak için kullanılır.

İşleyiş şu şekildedir:

  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ştiricinin Apple Geliştirici Programı'na kaydolduğunda Apple'ın geliştiriciye verdiği 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, kullanıcılara geliştiricinin sertifikasını içeren ve karşılık gelen genel anahtarı içeren birlikte 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ındaki genel anahtarı kullanarak özeti şifreler. Daha sonra uygulamanın mevcut durumuna dayanarak özeti yeniden hesaplar ve bunu şifrelenmiş özetiyle karşılaştırır. Eşleşirse, 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 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ıyı uyarır.

macOS Catalina'dan itibaren, Gatekeeper ayrıca uygulamanın Apple tarafından noterleme işleminden geçip geçmediğini de kontrol eder, 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 bilet ekler.

İmzaları Kontrol Etme

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.

# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"

# Check if the app’s contents have been modified
codesign --verify --verbose /Applications/Safari.app

# Get entitlements from the binary
codesign -d --entitlements :- /System/Applications/Automator.app # Check the TCC perms

# Check if the signature is valid
spctl --assess --verbose /Applications/Safari.app

# Sign a binary
codesign -s <cert-name-keychain> toolsdemo

Notarizasyon

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, geliştiricinin uygulamasını Apple'ın Notary Service tarafından incelenmesi için sunmasıyla gerçekleşir, bu da App Review ile karıştırılmamalıdır. Bu hizmet, gönderilen yazılımı zararlı içerik ve kod imzalama ile ilgili olası sorunlar açısından inceleyen otomatik bir sistemdir.

Eğer yazılım bu incelemeyi sorunsuz bir şekilde geçerse, Notary Service bir notarizasyon bileti oluşturur. Geliştiricinin daha sonra bu bileti yazılımlarına eklemesi gerekir, bu işlem 'stapling' olarak bilinir. Ayrıca, notarizasyon bileti de çevrimiçi olarak yayınlanır ve Gatekeeper, Apple'ın güvenlik teknolojisi, buna erişebilir.

Kullanıcının yazılımı ilk kez yüklediğinde veya çalıştırdığında, 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 zararlı içerik açısından kontrol edildiğ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 konusundaki güvenlerini artırır.

GateKeeper'ı Sıralama

GateKeeper, güvenilmeyen uygulamaların yürütülmesini engelleyen birkaç güvenlik bileşeni ve aynı zamanda bileşenlerden biridir.

GateKeeper'ın durumunu görmek mümkündür:

# Check the status
spctl --status

GateKeeper imza kontrollerinin yalnızca Karantina özniteliğine sahip dosyalara uygulandığını unutmayın.

GateKeeper, bir ikili dosyanın yürütülebilir olup olmadığını tercihlere ve imzaya göre kontrol eder:

Bu yapılandırmayı tutan veritabanı /var/db/SystemPolicy konumundadır. Bu veritabanını kök olarak şu şekilde kontrol edebilirsiniz:

# Open database
sqlite3 /var/db/SystemPolicy

# Get allowed rules
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
[...]

Not: İlk kuralın "App Store" ile bittiğine ve ikincisinin "Developer ID" ile bittiğine dikkat edin ve önceki görüntüde App Store ve tanımlanmış geliştiricilerden uygulamaları çalıştırmaya izin verildiği unutulmamalıdır. Eğer o ayarı App Store olarak değiştirirseniz, "Notarized Developer ID" kuralları kaybolacaktır.

Ayrıca binlerce GKE türünde kural bulunmaktadır:

SELECT requirement,allow,disabled,label from authority where label = 'GKE' limit 5;
cdhash H"b40281d347dc574ae0850682f0fd1173aa2d0a39"|1|0|GKE
cdhash H"5fd63f5342ac0c7c0774ebcbecaf8787367c480f"|1|0|GKE
cdhash H"4317047eefac8125ce4d44cab0eb7b1dff29d19a"|1|0|GKE
cdhash H"0a71962e7a32f0c2b41ddb1fb8403f3420e1d861"|1|0|GKE
cdhash H"8d0d90ff23c3071211646c4c9c607cdb601cb18f"|1|0|GKE

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ğerlerdir.

Ya da önceki bilgileri şu şekilde listeleyebilirsiniz:

sudo spctl --list

spctl'ın --master-disable ve --global-disable seçenekleri bu imza kontrollerini tamamen devre dışı bırakacaktır:

# Disable GateKeeper
spctl --global-disable
spctl --master-disable

# Enable it
spctl --global-enable
spctl --master-enable

Tamamen etkinleştirildiğinde, yeni bir seçenek görünecektir:

GateKeeper tarafından izin verilip verilmeyeceğini kontrol etmek mümkündür:

spctl --assess -v /Applications/App.app

GateKeeper'a belirli uygulamaların yürütülmesine izin vermek için yeni kurallar eklemek mümkündür:

# Check if allowed - nop
spctl --assess -v /Applications/App.app
/Applications/App.app: rejected
source=no usable signature

# Add a label and allow this label in GateKeeper
sudo spctl --add --label "whitelist" /Applications/App.app
sudo spctl --enable --label "whitelist"

# Check again - yep
spctl --assess -v /Applications/App.app
/Applications/App.app: accepted

Karantina Dosyaları

Bir uygulama veya dosya indirildiğinde, web tarayıcıları veya e-posta istemcileri gibi belirli macOS uygulamaları, indirilen dosyaya genellikle "karantina bayrağı" olarak bilinen bir genişletilmiş dosya özniteliği ekler. Bu öznitelik, dosyayı güvenilmeyen bir kaynaktan (internet) geldiği ve potansiyel riskler taşıdığı şeklinde işaretlemek için bir güvenlik önlemi olarak hareket eder. Ancak, tüm uygulamalar bu özniteliği eklemeyebilir, örneğin, yaygın BitTorrent istemci yazılımları genellikle bu süreci atlar.

Karantina bayrağının varlığı, bir kullanıcının dosyayı çalıştırmaya çalıştığında macOS'in Gatekeeper güvenlik özelliğine sinyal verir.

Karantina bayrağının bulunmadığı durumda (bazı BitTorrent istemcileri aracılığıyla indirilen dosyalar gibi), Gatekeeper'ın kontrolleri gerçekleştirilmeyebilir. Bu nedenle, kullanıcılar, güvenli olmayan 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ı içerir. Bu nedenlerden dolayı, tam bir kod imzası ve noterlik kontrolü her uygulama başlatıldığında her seferinde çalıştırılması pratik değildir.

Bu nedenle, bu kontroller yalnızca karantina özniteliğine sahip uygulamalar çalıştırıldığında çalıştırılır.

Bu öznitelik, dosyayı oluşturan/indiren uygulama tarafından ayarlanmalıdır.

Ancak, kumlanmış dosyalar bu özniteliğe her oluşturdukları dosyada ayarlanmış olacaktır. Ve kumlanmamış uygulamalar kendileri ayarlayabilir veya Info.plist içinde LSFileQuarantineEnabled anahtarını belirleyebilirler, bu da sistemin oluşturulan dosyalara com.apple.quarantine genişletilmiş özniteliğini eklemesini sağlar,

Ayrıca, qtn_proc_apply_to_self çağrısını yapan bir işlem tarafından oluşturulan tüm dosyalar karantinaya alınır. Veya qtn_file_apply_to_path API'si belirtilen dosya yoluna karantina özniteliğini ekler.

Durumunu kontrol etmek ve etkinleştirmek/devre dışı bırakmak (kök gerekli) mümkündür:

spctl --status
assessments enabled

spctl --enable
spctl --disable
#You can also allow nee identifies to execute code using the binary "spctl"

Ayrıca, bir dosyanın karantina uzatılmış özniteliğe sahip olup olmadığını şu şekilde bulabilirsiniz:

xattr file.png
com.apple.macl
com.apple.quarantine

Genişletilmiş özniteliklerin değerini kontrol edin ve karantina özniteliğini yazan uygulamayı bulun:

xattr -l portada.png
com.apple.macl:
00000000  03 00 53 DA 55 1B AE 4C 4E 88 9D CA B7 5C 50 F3  |..S.U..LN.....P.|
00000010  16 94 03 00 27 63 64 97 98 FB 4F 02 84 F3 D0 DB  |....'cd...O.....|
00000020  89 53 C3 FC 03 00 27 63 64 97 98 FB 4F 02 84 F3  |.S....'cd...O...|
00000030  D0 DB 89 53 C3 FC 00 00 00 00 00 00 00 00 00 00  |...S............|
00000040  00 00 00 00 00 00 00 00                          |........|
00000048
com.apple.quarantine: 00C1;607842eb;Brave;F643CD5F-6071-46AB-83AB-390BA944DEC5
# 00c1 -- It has been allowed to eexcute this file (QTN_FLAG_USER_APPROVED = 0x0040)
# 607842eb -- Timestamp
# Brave -- App
# F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded

Gerçekte bir işlem "oluşturduğu dosyalara karantina bayrakları ayarlayabilir" (oluşturulan bir dosyaya USER_APPROVED bayrağını uygulamayı denedim ancak uygulanmadı):

Kaynak Kodu karantina bayraklarını uygula

```c #include #include

enum qtn_flags { QTN_FLAG_DOWNLOAD = 0x0001, QTN_FLAG_SANDBOX = 0x0002, QTN_FLAG_HARD = 0x0004, QTN_FLAG_USER_APPROVED = 0x0040, };

#define qtn_proc_alloc _qtn_proc_alloc #define qtn_proc_apply_to_self _qtn_proc_apply_to_self #define qtn_proc_free _qtn_proc_free #define qtn_proc_init _qtn_proc_init #define qtn_proc_init_with_self _qtn_proc_init_with_self #define qtn_proc_set_flags _qtn_proc_set_flags #define qtn_file_alloc _qtn_file_alloc #define qtn_file_init_with_path _qtn_file_init_with_path #define qtn_file_free _qtn_file_free #define qtn_file_apply_to_path _qtn_file_apply_to_path #define qtn_file_set_flags _qtn_file_set_flags #define qtn_file_get_flags _qtn_file_get_flags #define qtn_proc_set_identifier _qtn_proc_set_identifier

typedef struct _qtn_proc *qtn_proc_t; typedef struct _qtn_file *qtn_file_t;

int qtn_proc_apply_to_self(qtn_proc_t); void qtn_proc_init(qtn_proc_t); int qtn_proc_init_with_self(qtn_proc_t); int qtn_proc_set_flags(qtn_proc_t, uint32_t flags); qtn_proc_t qtn_proc_alloc(); void qtn_proc_free(qtn_proc_t); qtn_file_t qtn_file_alloc(void); void qtn_file_free(qtn_file_t qf); int qtn_file_set_flags(qtn_file_t qf, uint32_t flags); uint32_t qtn_file_get_flags(qtn_file_t qf); int qtn_file_apply_to_path(qtn_file_t qf, const char *path); int qtn_file_init_with_path(qtn_file_t qf, const char path); int qtn_proc_set_identifier(qtn_proc_t qp, const char bundleid);

int main() {

qtn_proc_t qp = qtn_proc_alloc(); qtn_proc_set_identifier(qp, "xyz.hacktricks.qa"); qtn_proc_set_flags(qp, QTN_FLAG_DOWNLOAD | QTN_FLAG_USER_APPROVED); qtn_proc_apply_to_self(qp); qtn_proc_free(qp);

FILE *fp; fp = fopen("thisisquarantined.txt", "w+"); fprintf(fp, "Hello Quarantine\n"); fclose(fp);

return 0;

}

</detaylar>

Ve şu komutla **kaldırın**:
```bash
xattr -d com.apple.quarantine portada.png
#You can also remove this attribute from every file with
find . -iname '*' -print0 | xargs -0 xattr -d com.apple.quarantine

Ve karantinaya alınmış tüm dosyaları bulun:

find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.quarantine"

Karantina bilgileri ayrıca ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2 dizinindeki LaunchServices tarafından yönetilen merkezi bir veritabanında saklanır.

Quarantine.kext

Çekirdek uzantısı yalnızca sistemdeki çekirdek önbelleği aracılığıyla erişilebilir; ancak, https://developer.apple.com/ adresinden Kernel Hata Ayıklama Kiti'ni indirebilir ve uzantının sembolleştirilmiş bir sürümünü alabilirsiniz.

XProtect

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. Belirli uygulamalar aracılığıyla dosya indirdiğinizde, örneğin Safari, Posta veya Mesajlar, XProtect dosyayı otomatik olarak tarar. Veritabanındaki herhangi bir bilinen kötü amaçlı yazılıma uyan bir dosya indirirseniz, XProtect dosyanın çalışmasını engeller ve tehdidi size bildirir.

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 olmasını sağlar.

Ancak, XProtect'in tam özellikli bir antivirüs çözümü olmadığını belirtmek önemlidir. Yalnızca belirli bilinen tehditler için kontrol eder ve çoğu antivirüs yazılımı gibi erişim üzerinden tarama yapmaz.

En son XProtect güncellemesi hakkında bilgi alabilirsiniz:

system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistConfigData" | tail -n 5

XProtect, /Library/Apple/System/Library/CoreServices/XProtect.bundle konumunda bulunur ve içinde XProtect'ın kullandığı bilgilere ulaşabilirsiniz:

  • XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist: Bu cdhash'lere sahip kodların eski ayrıcalıkları kullanmasına izin verir.

  • XProtect.bundle/Contents/Resources/XProtect.meta.plist: BundleID ve TeamID aracılığıyla yüklenmesine izin verilmeyen eklentilerin ve eklentilerin listesi veya bir minimum sürümü belirtir.

  • 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ı.

XProtect ile ilgili /Library/Apple/System/Library/CoreServices/XProtect.app konumunda başka bir Uygulama olduğunu unutmayın ve bu Uygulama Gatekeeper işlemiyle ilgili değildir.

Gatekeeper Değil

Gatekeeper'ın her uygulamayı çalıştırdığını unutmayın, sadece AppleMobileFileIntegrity (AMFI) yalnızca Gatekeeper tarafından zaten çalıştırılmış ve doğrulanmış 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ırmak ve ardından uygulamanın yürütülebilir olmayan dosyalarını değiştirmek (örneğin Electron asar veya NIB dosyaları gibi) mümkündü ve başka korumalar olmadığı sürece uygulama zararlı eklemelerle çalıştırılıyordu.

Ancak şimdi macOS, uygulama paketlerinin içindeki dosyaları değiştirmeyi engeller. Bu nedenle, Dirty NIB saldırısını denerseniz, artık paketi değiştiremeyeceğinizi fark edeceksiniz çünkü Gatekeeper ile önbelleğe almak için uygulamayı çalıştırdıktan sonra paketi değiştiremeyeceksiniz. Örneğin, İçerik dizininin adını NotCon olarak değiştirirseniz (saldırıda belirtildiği gibi) ve ardından uygulamanın ana ikili dosyasını Gatekeeper ile önbelleğe almak için çalıştırırsanız, bir hata alacak ve çalıştırmayacaktır.

Gatekeeper Atlatmaları

Kullanıcının bir şeyi indirmesini ve Gatekeeper'ın bunu engellemesi gereken bir şeyi çalıştırmasını başarmak her zaman macOS'ta bir güvenlik açığı olarak kabul edilir. Geçmişte Gatekeeper'ı atlamayı sağlayan tekniklere atanan bazı CVE'ler şunlardır:

Arşiv Yardımcısı'nın kullanılması durumunda, 886 karakteri aşan yollara sahip dosyaların com.apple.quarantine genişletilmiş özniteliğini almadığı gözlemlendi. Bu durum yanlışlıkla bu dosyaların Gatekeeper'ın güvenlik kontrollerini atlamasına izin verir.

Daha fazla bilgi için orijinal rapora bakın.

Bir uygulama Automator ile oluşturulduğunda, uygulamanın 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 Automator Uygulama Taklidi olarak adlandırılan genel bir Automator ikilisidir.

Bu nedenle, application.app/Contents/MacOS/Automator\ Application\ Stub'ı başka bir sistemdeki başka bir Automator Uygulama Taklidi'ne sembolik bir bağlantı yaparak yaparsanız, document.wflow içinde ne varsa (betiğiniz) Gatekeeper'ı tetiklemeden çalıştırır çünkü gerçek yürütülebilirin karantina xattr'ı yoktur.

Beklenen konum örneği: /System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub

Daha fazla bilgi için orijinal rapora bakın.

Bu atlatmada, 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 dosyalara application.app/Contents uygulandı ancak application.app'e uygulanmadı, Gatekeeper'ın kontrol ettiği dosyalara uygulanmadı, bu nedenle Gatekeeper, application.app tetiklendiğinde karantina özniteliğine sahip olmadığı için atlatıldı.

zip -r test.app/Contents test.zip

Daha fazla bilgi için orijinal rapora bakın.

Bileşenler farklı olsa da, bu zafiyetin sömürülmesi öncekine çok benzer. Bu durumda, application.app/Contents'ten bir Apple Arşivi oluşturacağız, böylece Archive Utility tarafından açıldığında application.app karantina özniteliği almayacak.

aa archive -d test.app/Contents -o test.app.aar

ACL writeextattr kullanılarak bir dosyada bir öznitelik yazılmasını engellemek için kullanılabilir:

touch /tmp/no-attr
chmod +a "everyone deny writeextattr" /tmp/no-attr
xattr -w attrname vale /tmp/no-attr
xattr: [Errno 13] Permission denied: '/tmp/no-attr'

Ayrıca, AppleDouble dosya biçimi, ACE'lerini içeren bir dosyanın kopyasını oluşturur.

Kaynak kodunda görülebileceği gibi, com.apple.acl.text adlı xattr içinde depolanan ACL metin temsili, dekompresyon dosyasında ACL olarak ayarlanacaktır. Dolayısıyla, bir uygulamayı diğer xattr'lerin yazılmasını engelleyen bir ACL ile birlikte AppleDouble dosya biçimine sahip bir zip dosyasına sıkıştırırsanız... karantina xattr'si uygulamaya ayarlanmazdı:

chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test
ditto -c -k test test.zip
python3 -m http.server
# Download the zip from the browser and decompress it, the file should be without a quarantine xattr

Daha fazla bilgi için orijinal raporu kontrol edin.

Bu aynı zamanda AppleArchives ile de sömürülebilir:

mkdir app
touch app/test
chmod +a "everyone deny write,writeattr,writeextattr" app/test
aa archive -d app -o test.aar

Google Chrome'un indirilen dosyalara karantina özniteliği ayarlamadığı keşfedildi çünkü bazı macOS iç sorunlarından dolayı.

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 verilmediği fark edildi.

mkdir test
echo a > test/a
echo b > test/b
echo ._a > test/._a
aa archive -d test/ -o test.aar

# If you downloaded the resulting test.aar and decompress it, the file test/._a won't have a quarantitne attribute

Karantina özniteliği ayarlanmayan bir dosya oluşturabilme yeteneği sayesinde Gatekeeper'ı atlamak mümkündü. Hile, AppleDouble adlandırma kuralını kullanarak (._ ile başlat) bir DMG dosyası uygulaması oluşturmak ve karantina özniteliği olmayan bu gizli dosyaya bir sembolik bağ oluşturmaktı. Dmg dosyası yürütüldüğünde, karantina özniteliğine sahip olmadığı için Gatekeeper'ı atlayacaktır.

# Create an app bundle with the backdoor an call it app.app

echo "[+] creating disk image with app"
hdiutil create -srcfolder app.app app.dmg

echo "[+] creating directory and files"
mkdir
mkdir -p s/app
cp app.dmg s/app/._app.dmg
ln -s ._app.dmg s/app/app.dmg

echo "[+] compressing files"
aa archive -d s/ -o app.aar

uchg (bu sunumdan)

  • Bir uygulama içeren bir dizin oluşturun.

  • Uygulamaya uchg ekleyin.

  • Uygulamayı tar.gz dosyasına sıkıştırın.

  • Tar.gz dosyasını bir kurbanın üzerine gönderin.

  • Kurban tar.gz dosyasını açar ve uygulamayı çalıştırır.

  • Gatekeeper uygulamayı kontrol etmez.

Karantina xattr'yi Önle

Bir ".app" demetinde karantina xattr eklenmediğinde, Gatekeeper tetiklenmeyecek.

Last updated