macOS Dosyaları, Klasörler, İkili Dosyalar ve Bellek
Reading time: 11 minutes
tip
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)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Dosya hiyerarşisi düzeni
- /Applications: Yüklenen uygulamalar burada olmalıdır. Tüm kullanıcılar bunlara erişebilir.
- /bin: Komut satırı ikili dosyaları
- /cores: Varsa, çekirdek dökümlerini saklamak için kullanılır
- /dev: Her şey bir dosya olarak kabul edilir, bu nedenle burada donanım cihazlarını görebilirsiniz.
- /etc: Yapılandırma dosyaları
- /Library: Tercihler, önbellekler ve günlüklerle ilgili birçok alt dizin ve dosya burada bulunabilir. Kökte ve her kullanıcının dizininde bir Library klasörü vardır.
- /private: Belgelendirilmemiştir ancak bahsedilen birçok klasör özel dizine sembolik bağlantılardır.
- /sbin: Temel sistem ikili dosyaları (yönetimle ilgili)
- /System: OS X'in çalışmasını sağlayan dosya. Burada çoğunlukla yalnızca Apple'a özgü dosyalar bulmalısınız (üçüncü taraf değil).
- /tmp: Dosyalar 3 gün sonra silinir (bu, /private/tmp'e yumuşak bir bağlantıdır)
- /Users: Kullanıcılar için ana dizin.
- /usr: Yapılandırma ve sistem ikili dosyaları
- /var: Günlük dosyaları
- /Volumes: Bağlı sürücüler burada görünecektir.
- /.vol:
stat a.txt
komutunu çalıştırdığınızda16777223 7545753 -rw-r--r-- 1 username wheel ...
gibi bir şey elde edersiniz; burada ilk sayı dosyanın bulunduğu hacmin kimlik numarası ve ikincisi inode numarasıdır. Bu bilgiyi kullanarakcat /.vol/16777223/7545753
komutunu çalıştırarak bu dosyanın içeriğine erişebilirsiniz.
Uygulama Klasörleri
- Sistem uygulamaları
/System/Applications
altında bulunur. - Yüklenen uygulamalar genellikle
/Applications
veya~/Applications
içinde yüklenir. - Uygulama verileri, root olarak çalışan uygulamalar için
/Library/Application Support
ve kullanıcı olarak çalışan uygulamalar için~/Library/Application Support
içinde bulunabilir. - Üçüncü taraf uygulamaların daemon'ları root olarak çalışması gereken genellikle
/Library/PrivilegedHelperTools/
içinde bulunur. - Sandboxed uygulamalar
~/Library/Containers
klasörüne haritalanır. Her uygulamanın, uygulamanın paket kimliğine (com.apple.Safari
) göre adlandırılmış bir klasörü vardır. - Kernel
/System/Library/Kernels/kernel
içinde bulunur. - Apple'ın kernel uzantıları
/System/Library/Extensions
içinde bulunur. - Üçüncü taraf kernel uzantıları
/Library/Extensions
içinde saklanır.
Hassas Bilgiler İçeren Dosyalar
MacOS, şifreler gibi bilgileri birkaç yerde saklar:
macOS Sensitive Locations & Interesting Daemons
Savunmasız pkg yükleyicileri
OS X'e Özgü Uzantılar
.dmg
: Apple Disk Image dosyaları yükleyiciler için çok yaygındır..kext
: Belirli bir yapıyı takip etmelidir ve OS X sürümünde bir sürücüdür. (bu bir pakettir).plist
: XML veya ikili formatta bilgi saklayan property list olarak da bilinir.- XML veya ikili olabilir. İkili olanlar şu komutlarla okunabilir:
defaults read config.plist
/usr/libexec/PlistBuddy -c print config.plist
plutil -p ~/Library/Preferences/com.apple.screensaver.plist
plutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -
plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -
.app
: Dizin yapısını takip eden Apple uygulamaları (bu bir pakettir)..dylib
: Dinamik kütüphaneler (Windows DLL dosyaları gibi).pkg
: xar (eXtensible Archive format) ile aynıdır. Bu dosyaların içeriğini yüklemek için yükleyici komutu kullanılabilir..DS_Store
: Bu dosya her dizinde bulunur, dizinin özelliklerini ve özelleştirmelerini kaydeder..Spotlight-V100
: Bu klasör, sistemdeki her hacmin kök dizininde görünür..metadata_never_index
: Bu dosya bir hacmin kökünde bulunuyorsa, Spotlight o hacmi dizinlemez..noindex
: Bu uzantıya sahip dosya ve klasörler Spotlight tarafından dizinlenmez..sdef
: Paketler içindeki dosyalar, bir AppleScript ile uygulama ile nasıl etkileşim kurulabileceğini belirtir.
macOS Paketleri
Bir paket, Finder'da bir nesne gibi görünen bir dizindir (bir Paket örneği *.app
dosyalarıdır).
Dyld Paylaşılan Kütüphane Önbelleği (SLC)
macOS (ve iOS) üzerinde tüm sistem paylaşılan kütüphaneleri, çerçeveler ve dylib'ler, tek bir dosyada birleştirilmiştir, buna dyld paylaşılan önbellek denir. Bu, performansı artırır, çünkü kod daha hızlı yüklenebilir.
Bu, macOS'ta /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/
içinde bulunur ve eski sürümlerde paylaşılan önbelleği /System/Library/dyld/
içinde bulabilirsiniz.
iOS'ta bunları /System/Library/Caches/com.apple.dyld/
içinde bulabilirsiniz.
Dyld paylaşılan önbelleğine benzer şekilde, kernel ve kernel uzantıları da bir kernel önbelleğine derlenir ve bu, önyükleme sırasında yüklenir.
Tek dosya dylib paylaşılan önbelleğinden kütüphaneleri çıkarmak için dyld_shared_cache_util ikilisini kullanmak mümkündü, bu günümüzde çalışmayabilir ama dyldextractor da kullanılabilir:
# dyld_shared_cache_util
dyld_shared_cache_util -extract ~/shared_cache/ /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e
# dyldextractor
dyldex -l [dyld_shared_cache_path] # List libraries
dyldex_all [dyld_shared_cache_path] # Extract all
# More options inside the readme
tip
dyld_shared_cache_util
aracının çalışmaması durumunda, paylaşılan dyld ikilisini Hopper'a iletebileceğinizi ve Hopper'ın tüm kütüphaneleri tanıyıp hangi kütüphaneyi incelemek istediğinizi seçmenize izin vereceğini unutmayın:
.png)
Bazı çıkarıcılar çalışmayabilir çünkü dylib'ler, bilinmeyen adreslere atlama yapabilecekleri için sabit kodlanmış adreslerle önceden bağlanmıştır.
tip
Xcode'da bir emülatör kullanarak macos'ta diğer *OS cihazlarının Paylaşılan Kütüphane Önbelleğini indirmenin de mümkün olduğunu unutmayın. Bunlar şu dizinde indirilecektir: ls $HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/
, örneğin: $HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64
SLC Haritalama
dyld
SLC'nin haritalanıp haritalanmadığını bilmek için shared_region_check_np
sistem çağrısını kullanır (bu adresi döndürür) ve SLC'yi haritalamak için shared_region_map_and_slide_np
kullanır.
SLC ilk kullanımda kaydırılsa bile, tüm işlemler aynı kopyayı kullanır, bu da saldırganın sistemde işlemleri çalıştırabilmesi durumunda ASLR korumasını ortadan kaldırır. Bu geçmişte gerçekten istismar edildi ve paylaşılan bölge sayfası ile düzeltildi.
Branch havuzları, görüntü haritalamaları arasında küçük alanlar oluşturan küçük Mach-O dylib'lerdir ve bu da işlevlerin araya girmesini imkansız hale getirir.
SLC'leri Geçersiz Kılma
Aşağıdaki çevre değişkenlerini kullanarak:
DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1
-> Bu, yeni bir paylaşılan kütüphane önbelleği yüklemeye izin verecektir.DYLD_SHARED_CACHE_DIR=avoid
ve kütüphaneleri gerçek olanlarla paylaşılan önbelleğe simlinklerle manuel olarak değiştirmek (bunları çıkarmanız gerekecek).
Özel Dosya İzinleri
Klasör izinleri
Bir klasörde, okuma onu listelemeye izin verir, yazma dosyaları silme ve yazma işlemlerine izin verir, ve çalıştırma dizinde gezinmeye izin verir. Örneğin, bir kullanıcı bir dizinde çalıştırma iznine sahip olmadığı bir dosya üzerinde okuma iznine sahip olsa bile, dosyayı okuyamaz.
Bayrak değiştiricileri
Dosyalarda ayarlanabilecek bazı bayraklar vardır, bu bayraklar dosyanın farklı davranmasına neden olur. Bir dizindeki dosyaların bayraklarını kontrol edebilirsiniz ls -lO /path/directory
ile.
uchg
: uchange bayrağı olarak bilinir ve dosyanın değiştirilmesini veya silinmesini engeller. Ayarlamak için:chflags uchg file.txt
- Root kullanıcısı bayrağı kaldırabilir ve dosyayı değiştirebilir.
restricted
: Bu bayrak dosyanın SIP tarafından korunmasını sağlar (bu bayrağı bir dosyaya ekleyemezsiniz).Sticky bit
: Eğer bir dizin sticky bit'e sahipse, yalnızca dizin sahibi veya root dosyaları yeniden adlandırabilir veya silebilir. Genellikle bu, sıradan kullanıcıların diğer kullanıcıların dosyalarını silmesini veya taşınmasını önlemek için /tmp dizininde ayarlanır.
Tüm bayraklar sys/stat.h
dosyasında bulunabilir (bunu mdfind stat.h | grep stat.h
kullanarak bulabilirsiniz) ve şunlardır:
UF_SETTABLE
0x0000ffff: Sahip değiştirilebilir bayrakların maskesi.UF_NODUMP
0x00000001: Dosyayı dökme.UF_IMMUTABLE
0x00000002: Dosya değiştirilemez.UF_APPEND
0x00000004: Dosyaya yazma yalnızca ekleme yapabilir.UF_OPAQUE
0x00000008: Dizin, birleşim açısından opaktır.UF_COMPRESSED
0x00000020: Dosya sıkıştırılmıştır (bazı dosya sistemleri).UF_TRACKED
0x00000040: Bu ayar için dosyalar silinme/yeniden adlandırma bildirimleri yoktur.UF_DATAVAULT
0x00000080: Okuma ve yazma için yetki gereklidir.UF_HIDDEN
0x00008000: Bu öğenin bir GUI'de görüntülenmemesi gerektiğini belirten ipucu.SF_SUPPORTED
0x009f0000: Süper kullanıcı destekli bayrakların maskesi.SF_SETTABLE
0x3fff0000: Süper kullanıcı değiştirilebilir bayrakların maskesi.SF_SYNTHETIC
0xc0000000: Sistem salt okunur sentetik bayrakların maskesi.SF_ARCHIVED
0x00010000: Dosya arşivlenmiştir.SF_IMMUTABLE
0x00020000: Dosya değiştirilemez.SF_APPEND
0x00040000: Dosyaya yazma yalnızca ekleme yapabilir.SF_RESTRICTED
0x00080000: Yazma için yetki gereklidir.SF_NOUNLINK
0x00100000: Öğe kaldırılmayabilir, yeniden adlandırılamaz veya bağlanamaz.SF_FIRMLINK
0x00800000: Dosya bir firmlink'tir.SF_DATALESS
0x40000000: Dosya dataless nesnedir.
Dosya ACL'leri
Dosya ACL'leri, farklı kullanıcılara daha ince izinler atamak için ACE (Erişim Kontrol Girişleri) içerir.
Bir dizin için bu izinleri vermek mümkündür: listele
, arama
, dosya_ekle
, alt_dizin_ekle
, çocuk_sil
, çocuk_sil
.
Ve bir dosya için: okuma
, yazma
, ekleme
, çalıştırma
.
Dosya ACL'ler içeriyorsa, izinleri listelediğinizde "+" bulacaksınız:
ls -ld Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
Dosyanın ACL'lerini şu şekilde okuyabilirsiniz:
ls -lde Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
0: group:everyone deny delete
Tüm ACL'lere sahip dosyaları (bu çok yavaş) bulabilirsiniz:
ls -RAle / 2>/dev/null | grep -E -B1 "\d: "
Genişletilmiş Nitelikler
Genişletilmiş nitelikler bir adı ve istenen herhangi bir değeri vardır ve ls -@
kullanılarak görülebilir ve xattr
komutu ile manipüle edilebilir. Bazı yaygın genişletilmiş nitelikler şunlardır:
com.apple.resourceFork
: Kaynak fork uyumluluğu. Ayrıcafilename/..namedfork/rsrc
olarak görünürcom.apple.quarantine
: MacOS: Gatekeeper karantina mekanizması (III/6)metadata:*
: MacOS:_backup_excludeItem
veyakMD*
gibi çeşitli meta verilercom.apple.lastuseddate
(#PS): Son dosya kullanım tarihicom.apple.FinderInfo
: MacOS: Finder bilgisi (örneğin, renk Etiketleri)com.apple.TextEncoding
: ASCII metin dosyalarının metin kodlamasını belirtircom.apple.logd.metadata
:/var/db/diagnostics
içindeki dosyalar için logd tarafından kullanılırcom.apple.genstore.*
: Nesil depolama (/.DocumentRevisions-V100
dosya sisteminin kökünde)com.apple.rootless
: MacOS: Dosyayı etiketlemek için Sistem Bütünlüğü Koruması tarafından kullanılır (III/10)com.apple.uuidb.boot-uuid
: Benzersiz UUID ile önyükleme dönemlerinin logd işaretlericom.apple.decmpfs
: MacOS: Şeffaf dosya sıkıştırması (II/7)com.apple.cprotect
: *OS: Dosya başına şifreleme verileri (III/11)com.apple.installd.*
: *OS: installd tarafından kullanılan meta veriler, örneğin,installType
,uniqueInstallID
Kaynak Forkları | macOS ADS
Bu, MacOS'taki Alternatif Veri Akışlarını elde etmenin bir yoludur. İçeriği, bir dosya içinde com.apple.ResourceFork adlı bir genişletilmiş nitelik içinde kaydederek file/..namedfork/rsrc içinde saklayabilirsiniz.
echo "Hello" > a.txt
echo "Hello Mac ADS" > a.txt/..namedfork/rsrc
xattr -l a.txt #Read extended attributes
com.apple.ResourceFork: Hello Mac ADS
ls -l a.txt #The file length is still q
-rw-r--r--@ 1 username wheel 6 17 Jul 01:15 a.txt
Bu genişletilmiş niteliği içeren tüm dosyaları bulabilirsiniz:
find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.ResourceFork"
decmpfs
Genişletilmiş özellik com.apple.decmpfs
, dosyanın şifreli olarak saklandığını gösterir, ls -l
boyutunun 0 olduğunu bildirecek ve sıkıştırılmış veriler bu özellik içinde yer alacaktır. Dosya her erişildiğinde, bellek içinde şifresi çözülecektir.
Bu özellik ls -lO
ile sıkıştırılmış olarak görülebilir çünkü sıkıştırılmış dosyalar UF_COMPRESSED
bayrağı ile etiketlenir. Eğer bir sıkıştırılmış dosya chflags nocompressed </path/to/file>
ile kaldırılırsa, sistem dosyanın sıkıştırıldığını bilmeyecek ve bu nedenle veriyi açıp erişemeyecektir (gerçekte boş olduğunu düşünecektir).
Alet afscexpand, bir dosyayı zorla açmak için kullanılabilir.
Evrensel ikililer & Mach-o Formatı
Mac OS ikilileri genellikle evrensel ikililer olarak derlenir. Bir evrensel ikili, aynı dosyada birden fazla mimariyi destekleyebilir.
macOS Universal binaries & Mach-O Format
macOS Süreç Belleği
macOS bellek dökümü
Risk Kategorisi Dosyaları Mac OS
/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System
dizini, farklı dosya uzantılarıyla ilişkili risk hakkında bilgilerin saklandığı yerdir. Bu dizin, dosyaları çeşitli risk seviyelerine ayırarak, Safari'nin bu dosyaları indirdikten sonra nasıl işleyeceğini etkiler. Kategoriler şunlardır:
- LSRiskCategorySafe: Bu kategorideki dosyalar tamamen güvenli olarak kabul edilir. Safari, bu dosyaları indirdikten sonra otomatik olarak açacaktır.
- LSRiskCategoryNeutral: Bu dosyalar uyarı içermez ve Safari tarafından otomatik olarak açılmaz.
- LSRiskCategoryUnsafeExecutable: Bu kategori altındaki dosyalar, dosyanın bir uygulama olduğunu belirten bir uyarı tetikler. Bu, kullanıcıyı uyarmak için bir güvenlik önlemidir.
- LSRiskCategoryMayContainUnsafeExecutable: Bu kategori, bir yürütülebilir içerebilecek dosyalar, örneğin arşivler içindir. Safari, tüm içeriklerin güvenli veya nötr olduğunu doğrulayamazsa bir uyarı tetikler.
Günlük dosyaları
$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2
: İndirilen dosyalar hakkında, nereden indirildikleri gibi bilgileri içerir./var/log/system.log
: OSX sistemlerinin ana günlüğü. com.apple.syslogd.plist, syslogging'in yürütülmesinden sorumludur (devre dışı olup olmadığını kontrol etmek içinlaunchctl list
içinde "com.apple.syslogd" arayabilirsiniz)./private/var/log/asl/*.asl
: İlginç bilgiler içerebilecek Apple Sistem Günlükleridir.$HOME/Library/Preferences/com.apple.recentitems.plist
: "Finder" aracılığıyla en son erişilen dosyaları ve uygulamaları saklar.$HOME/Library/Preferences/com.apple.loginitems.plsit
: Sistem başlangıcında başlatılacak öğeleri saklar.$HOME/Library/Logs/DiskUtility.log
: DiskUtility Uygulaması için günlük dosyası (USB'ler dahil sürücüler hakkında bilgi)./Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
: Kablosuz erişim noktaları hakkında veri./private/var/db/launchd.db/com.apple.launchd/overrides.plist
: Devre dışı bırakılan daemonların listesi.
tip
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)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.