macOS FS Tricks
POSIX izin kombinasyonları
Bir dizin içindeki izinler:
okuma - dizin girdilerini listeleyebilirsiniz
yazma - dizinde dosyaları silebilir/yazabilirsiniz ve boş klasörleri silebilirsiniz.
Ancak doluluk klasörlerini silemez/değiştiremezsiniz yazma izniniz olmadıkça.
Bir klasörün adını değiştiremezsiniz sahip olmadıkça.
çalıştırma - dizini gezebilmenize izin verilir - bu hakkınız yoksa, içindeki dosyalara veya alt dizinlere erişemezsiniz.
Tehlikeli Kombinasyonlar
Root'a ait bir dosya/dizini nasıl üzerine yazabilirsiniz, ancak:
Yol üzerinde bir ebeveyn dizin sahibi kullanıcıdır
Yol üzerinde bir ebeveyn dizin sahibi bir kullanıcı grubudur ve yazma erişimi vardır
Bir kullanıcı grubu, dosyaya yazma erişimine sahiptir
Önceki kombinasyonlardan herhangi biriyle, bir saldırgan ayrıcalıklı keyfi yazma elde etmek için beklenen yola bir sembolik/sabit bağ enjekte edebilir.
Dizin kökü R+X Özel durum
Eğer bir dizinde yalnızca root'un R+X erişimine sahip olduğu dosyalar varsa, bu dosyalara başka kimse erişemez. Bu nedenle, bir kullanıcının okuyabileceği ancak bu kısıtlama nedeniyle okuyamayacağı bir dosyanın bu dizinden başka bir dizine taşınmasına izin veren bir zafiyet, bu dosyaları okumak için kötüye kullanılabilir.
Sembolik Bağlantı / Sabit Bağlantı
Eğer ayrıcalıklı bir işlem, daha düşük ayrıcalıklı bir kullanıcı tarafından kontrol edilebilecek bir dosyaya yazıyorsa, veya daha önceden daha düşük ayrıcalıklı bir kullanıcı tarafından oluşturulmuşsa. Kullanıcı sadece bir Sembolik veya Sabit bağlantı aracılığıyla onu başka bir dosyaya yönlendirebilir ve ayrıcalıklı işlem o dosyaya yazacaktır.
Saldırganın ayrıcalıkları yükseltmek için keyfi yazmayı kötüye kullanabileceği diğer bölümlere bakın.
.fileloc
.fileloc
uzantılı dosyalar, diğer uygulamalara veya ikili dosyalara işaret edebilir, bu nedenle açıldıklarında uygulama/ikili dosya yürütülecektir.
Örnek:
Keyfi FD
Eğer bir işlemi yüksek ayrıcalıklarla bir dosya veya klasör açmaya zorlayabilirseniz, crontab
'ı kullanarak /etc/sudoers.d
içindeki bir dosyayı EDITOR=exploit.py
ile açabilir ve böylece exploit.py
, /etc/sudoers
içindeki dosyaya FD alacak ve bunu kötüye kullanabilecektir.
Örneğin: https://youtu.be/f1HA5QhLQ7Y?t=21098
Karantina xattrs hilelerinden kaçınma
Kaldırma
uchg / uchange / uimmutable bayrağı
Bir dosya/dizin bu değişmez özelliğe sahipse üzerine xattr eklemek mümkün olmayacaktır.
defvfs bağlama
Bir devfs bağlaması xattr'ı desteklemez, daha fazla bilgi için CVE-2023-32364 bağlantısına bakın.
writeextattr ACL
Bu ACL, dosyaya xattrs
eklenmesini engeller.
com.apple.acl.text xattr + AppleDouble
AppleDouble dosya formatı, dosyayı ACE'leriyle birlikte kopyalar.
Kaynak kodunda 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. Dolayısıyla, bir uygulamayı diğer xattr'lerin yazılmasını engelleyen bir ACL ile AppleDouble dosya formatına sahip bir zip dosyasına sıkıştırırsanız... karantina xattr'ı uygulamaya ayarlanmaz:
Daha fazla bilgi için orijinal rapora bakın.
Bunu çoğaltmak için önce doğru acl dizesini almalıyız:
(Not: Bu çalışsa bile kum havuzu xattr'yi yazmadan önce)
Gerçekten gerekli değil ama her ihtimale karşı orada bırakıyorum:
pagemacOS xattr-acls extra stuffKod İmzalarını Atlatma
Bundles, _CodeSignature/CodeResources
dosyasını içerir ki bu dosya bündle içindeki her dosyanın karmasını içerir. CodeResources'un karması ayrıca yürütülebilir dosyaya gömülüdür, bu yüzden onunla oynayamayız.
Ancak, imzası kontrol edilmeyecek bazı dosyalar vardır, bunlar plist'te omit anahtarına sahiptir, örneğin:
Aşağıdaki komutu kullanarak bir kaynağın imzasını CLI üzerinden hesaplamak mümkündür:
Dmg Dosyalarını Bağlama
Bir kullanıcı, hatta bazı mevcut klasörlerin üstüne bile özel içerik oluşturarak özel bir dmg dosyasını bağlayabilir. Özel içeriğe sahip özel bir dmg paketi nasıl oluşturabileceğinizi aşağıda bulabilirsiniz:
Genellikle macOS, diski com.apple.DiskArbitrarion.diskarbitrariond
Mach hizmetiyle bağlar (/usr/libexec/diskarbitrationd
tarafından sağlanır). Başlangıç Daemons plist dosyasına -d
parametresini ekleyip yeniden başlatırsanız, logları /var/log/diskarbitrationd.log
dosyasında saklar.
Ancak, hdik
ve hdiutil
gibi araçları kullanarak com.apple.driver.DiskImages
kextiyle doğrudan iletişim kurmak mümkündür.
Keyfi Yazma
Periyodik sh betikleri
Eğer betiğiniz bir shell betiği olarak yorumlanabilirse, her gün tetiklenecek olan /etc/periodic/daily/999.local
shell betiğini üzerine yazabilirsiniz.
Bu betiğin sahte bir şekilde çalıştırılmasını sağlayabilirsiniz: sudo periodic daily
Daemonlar
Keyfi bir LaunchDaemon yazın, örneğin /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
adında bir plist dosyası oluşturun ve keyfi bir betiği çalıştıran bir plist ekleyin:
Sudoers Dosyası
Eğer keyfi yazma yetkiniz varsa, kendinize sudo ayrıcalıkları veren bir dosya oluşturabilirsiniz. Bu dosyayı /etc/sudoers.d/
klasörü içine oluşturabilirsiniz.
PATH dosyaları
/etc/paths
dosyası, PATH ortam değişkenini dolduran ana yerlerden biridir. Üzerine yazmak için root olmanız gerekir, ancak bir yetkili işlem tarafından tam yol olmadan komut çalıştırılıyorsa, bu dosyayı değiştirerek onu ele geçirebilirsiniz.
PATH
ortam değişkenine yeni klasörler yüklemek için /etc/paths.d
içine dosyalar da yazabilirsiniz.
Diğer kullanıcılar olarak yazılabilir dosyalar oluşturma
Bu, benim tarafımdan yazılabilir olan ancak root'a ait bir dosya oluşturacaktır (buradan kod). Bu ayrıca bir ayrıcalık yükseltme olarak da çalışabilir.
POSIX Paylaşılan Bellek
POSIX paylaşılan bellek, POSIX uyumlu işletim sistemlerindeki işlemlerin ortak bir bellek alanına erişmesine olanak tanır, diğer işlemler arası iletişim yöntemlerine kıyasla daha hızlı iletişimi kolaylaştırır. Bu, shm_open()
ile bir paylaşılan bellek nesnesi oluşturup veya açarak başlar, ardından ftruncate()
ile boyutunu ayarlar ve mmap()
kullanarak bu belleği işlemin adres alanına eşler. İşlemler daha sonra bu bellek alanından doğrudan okuma ve yazma yapabilir. Eşzamanlı erişimi yönetmek ve veri bozulmasını önlemek için genellikle mutexler veya semaforlar gibi senkronizasyon mekanizmaları kullanılır. Son olarak, işlemler paylaşılan belleği munmap()
ve close()
ile kapatır ve opsiyonel olarak bellek nesnesini shm_unlink()
ile kaldırabilir. Bu sistem, birden fazla işlemin paylaşılan verilere hızlı bir şekilde erişmesi gereken ortamlarda etkili bir şekilde hızlı IPC için özellikle etkilidir.
macOS Korunan Tanımlayıcılar
macOS korunan tanımlayıcılar, macOS'ta tanıtılan bir güvenlik özelliğidir ve kullanıcı uygulamalarındaki dosya tanımlayıcı işlemlerinin güvenliğini ve güvenilirliğini artırmayı amaçlar. Bu korunan tanımlayıcılar, dosya tanımlayıcılarıyla belirli kısıtlamaları veya "korumaları" ilişkilendirmenin bir yolunu sağlar ve bu kısıtlamalar çekirdek tarafından uygulanır.
Bu özellik, özellikle izin verilmeyen dosya erişimi veya yarış koşulları gibi belirli güvenlik açıklarının önlenmesi için oldukça faydalıdır. Bu açıklıklar, örneğin bir iş parçacığının başka bir savunmasız iş parçacığına erişim sağladığında veya bir dosya tanımlayıcısının bir savunmasız çocuk işlem tarafından devralındığında meydana gelir. Bu işlevselliğe ilişkin bazı işlevler şunlardır:
guarded_open_np
: Bir koruma ile FD açarguarded_close_np
: Kapatırchange_fdguard_np
: Bir tanımlayıcı üzerinde koruma bayraklarını değiştirir (koruma korumasını kaldırmak dahil)
Referanslar
Last updated