macOS Dosyaları, Klasörler, İkili Dosyalar ve Bellek
Reading time: 10 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)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
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 aygıtları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ök dizinde 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
dizininde 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
dizininde bulunabilir. - Üçüncü taraf uygulamaların daemon'ları root olarak çalışması gereken genellikle
/Library/PrivilegedHelperTools/
dizininde bulunur. - Sandboxed uygulamalar
~/Library/Containers
klasörüne haritalanır. Her uygulamanın uygulamanın paket kimliğine göre adlandırılmış bir klasörü vardır (com.apple.Safari
). - Kernel
/System/Library/Kernels/kernel
dizinindedir - Apple'ın kernel uzantıları
/System/Library/Extensions
dizinindedir - Üçüncü taraf kernel uzantıları
/Library/Extensions
dizininde saklanır
Hassas Bilgiler İçeren Dosyalar
MacOS, şifreler gibi bilgileri birkaç yerde saklar:
macOS Sensitive Locations & Interesting Daemons
Zayıf pkg yükleyicileri
OS X Özel 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 özellik listesi 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. Yükleyici komutu bu dosyaların içeriğini yüklemek için 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
: AppleScript ile uygulama ile nasıl etkileşim kurulabileceğini belirten paket içindeki dosyalar.
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'ta (ve iOS'ta) tüm sistem paylaşılan kütüphaneleri, çerçeveler ve dylib'ler, tek bir dosyada birleştirilmiştir, buna dyld paylaşılan önbelleği denir. Bu, performansı artırır, çünkü kod daha hızlı yüklenebilir.
Bu, macOS'ta /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/
dizininde bulunur ve eski sürümlerde paylaşılan önbelleği /System/Library/dyld/
dizininde bulabilirsiniz.
iOS'ta bunları /System/Library/Caches/com.apple.dyld/
dizininde 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 ikili dosyasını 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:
Bazı çıkarıcılar çalışmayabilir çünkü dylib'ler, bilinmeyen adreslere atlama yapabilecek şekilde, sabit kodlanmış adreslerle önceden bağlantılıdı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 shared_region_map_and_slide_np
ile SLC'yi haritalar.
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ğini yüklemeye izin verecektir.DYLD_SHARED_CACHE_DIR=avoid
ve kütüphaneleri gerçek olanlarla paylaşılan önbelleğe sembolik bağlantılarla 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 izni 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 farklı davranmalarını sağlayacak bazı bayraklar ayarlanabilir. Bir dizindeki dosyaların bayraklarını kontrol edebilirsiniz: ls -lO /path/directory
uchg
: uchange bayrağı, dosyanın değiştirilmesini veya silinmesini önler. Ayarlamak için:chflags uchg file.txt
- Root kullanıcısı bayrağı kaldırabilir ve dosyayı değiştirebilir.
restricted
: Bu bayrak dosyayı SIP tarafından korunmuş hale getirir (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 için silme/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 Girdileri) içerir.
Bir dizin için bu izinler verilebilir: 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ş niteliklerin 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şaretlemelericom.apple.decmpfs
: MacOS: Şeffaf dosya sıkıştırması (II/7)com.apple.cprotect
: *OS: Dosya başına şifreleme verisi (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
boyutun 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çekten boş olduğunu düşünecektir).
Afscexpand aracı, 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 dosya içerebilecek arşivler gibi dosyalar içindir. Safari, tüm içeriklerin güvenli veya nötr olduğunu doğrulayamazsa bir uyarı tetikler.
Log 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ı (sürücüler hakkında bilgi, USB'ler dahil)./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)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.