17 KiB
macOS Dateien, Ordner, Binaries & Speicher
{{#include ../../../banners/hacktricks-training.md}}
Dateihierarchie
- /Applications: Die installierten Apps sollten hier sein. Alle Benutzer können darauf zugreifen.
- /bin: Befehlszeilen-Binaries
- /cores: Wenn vorhanden, wird es verwendet, um Core-Dumps zu speichern
- /dev: Alles wird als Datei behandelt, sodass Sie hier Hardwaregeräte sehen können.
- /etc: Konfigurationsdateien
- /Library: Viele Unterverzeichnisse und Dateien, die mit Einstellungen, Caches und Protokollen zu tun haben, finden sich hier. Ein Library-Ordner existiert im Root-Verzeichnis und im Verzeichnis jedes Benutzers.
- /private: Nicht dokumentiert, aber viele der genannten Ordner sind symbolische Links zum privaten Verzeichnis.
- /sbin: Essentielle System-Binaries (bezogen auf die Verwaltung)
- /System: Dateien, um OS X auszuführen. Hier sollten hauptsächlich nur Apple-spezifische Dateien zu finden sein (keine Drittanbieter).
- /tmp: Dateien werden nach 3 Tagen gelöscht (es ist ein symbolischer Link zu /private/tmp)
- /Users: Heimatverzeichnis für Benutzer.
- /usr: Konfigurations- und System-Binaries
- /var: Protokolldateien
- /Volumes: Die gemounteten Laufwerke erscheinen hier.
- /.vol: Wenn Sie
stat a.txtausführen, erhalten Sie etwas wie16777223 7545753 -rw-r--r-- 1 username wheel ..., wobei die erste Zahl die ID-Nummer des Volumes ist, auf dem die Datei existiert, und die zweite die Inode-Nummer ist. Sie können den Inhalt dieser Datei über /.vol/ mit diesen Informationen abrufen, indem Siecat /.vol/16777223/7545753ausführen.
Anwendungsordner
- Systemanwendungen befinden sich unter
/System/Applications - Installierte Anwendungen sind normalerweise in
/Applicationsoder in~/Applicationsinstalliert. - Anwendungsdaten finden sich in
/Library/Application Supportfür Anwendungen, die als Root ausgeführt werden, und in~/Library/Application Supportfür Anwendungen, die als Benutzer ausgeführt werden. - Drittanbieteranwendungen Dämonen, die als Root ausgeführt werden müssen, befinden sich normalerweise in
/Library/PrivilegedHelperTools/ - Sandboxed Apps sind im Ordner
~/Library/Containersabgebildet. Jede App hat einen Ordner, der nach der Bundle-ID der Anwendung benannt ist (com.apple.Safari). - Der Kernel befindet sich in
/System/Library/Kernels/kernel - Apples Kernel-Erweiterungen befinden sich in
/System/Library/Extensions - Drittanbieter-Kernel-Erweiterungen werden in
/Library/Extensionsgespeichert.
Dateien mit sensiblen Informationen
MacOS speichert Informationen wie Passwörter an mehreren Orten:
{{#ref}} macos-sensitive-locations.md {{#endref}}
Verwundbare pkg-Installer
{{#ref}} macos-installers-abuse.md {{#endref}}
OS X spezifische Erweiterungen
.dmg: Apple Disk Image-Dateien sind sehr häufig für Installer..kext: Es muss einer bestimmten Struktur folgen und ist die OS X-Version eines Treibers. (es ist ein Bundle).plist: Auch bekannt als Property List, speichert Informationen im XML- oder Binärformat.- Kann XML oder binär sein. Binäre können gelesen werden mit:
defaults read config.plist/usr/libexec/PlistBuddy -c print config.plsitplutil -p ~/Library/Preferences/com.apple.screensaver.plistplutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -.app: Apple-Anwendungen, die der Verzeichnisstruktur folgen (es ist ein Bundle)..dylib: Dynamische Bibliotheken (wie Windows DLL-Dateien).pkg: Sind dasselbe wie xar (eXtensible Archive Format). Der Installer-Befehl kann verwendet werden, um den Inhalt dieser Dateien zu installieren..DS_Store: Diese Datei befindet sich in jedem Verzeichnis, sie speichert die Attribute und Anpassungen des Verzeichnisses..Spotlight-V100: Dieser Ordner erscheint im Root-Verzeichnis jedes Volumes im System..metadata_never_index: Wenn sich diese Datei im Root eines Volumes befindet, wird Spotlight dieses Volume nicht indizieren..noindex: Dateien und Ordner mit dieser Erweiterung werden von Spotlight nicht indiziert..sdef: Dateien innerhalb von Bundles, die angeben, wie mit der Anwendung über ein AppleScript interagiert werden kann.
macOS Bundles
Ein Bundle ist ein Verzeichnis, das wie ein Objekt im Finder aussieht (ein Beispiel für ein Bundle sind *.app-Dateien).
{{#ref}} macos-bundles.md {{#endref}}
Dyld Shared Library Cache (SLC)
Auf macOS (und iOS) sind alle systemweiten Shared Libraries, wie Frameworks und dylibs, in einer einzigen Datei kombiniert, die als dyld shared cache bezeichnet wird. Dies verbessert die Leistung, da der Code schneller geladen werden kann.
Dies befindet sich in macOS unter /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/ und in älteren Versionen finden Sie den shared cache möglicherweise in /System/Library/dyld/.
In iOS finden Sie sie in /System/Library/Caches/com.apple.dyld/.
Ähnlich wie der dyld shared cache sind der Kernel und die Kernel-Erweiterungen ebenfalls in einem Kernel-Cache kompiliert, der beim Booten geladen wird.
Um die Bibliotheken aus der einzelnen Datei des dylib shared cache zu extrahieren, war es möglich, das Binary dyld_shared_cache_util zu verwenden, das möglicherweise heutzutage nicht mehr funktioniert, aber Sie können auch dyldextractor verwenden:
# 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
Beachten Sie, dass selbst wenn das Tool
dyld_shared_cache_utilnicht funktioniert, Sie das gemeinsame dyld-Binärformat an Hopper übergeben können und Hopper in der Lage sein wird, alle Bibliotheken zu identifizieren und Ihnen zu ermöglichen, auszuwählen, welche Sie untersuchen möchten:

Einige Extraktoren funktionieren möglicherweise nicht, da dylibs mit fest codierten Adressen vorverlinkt sind, wodurch sie möglicherweise zu unbekannten Adressen springen.
Tip
Es ist auch möglich, den Shared Library Cache anderer *OS-Geräte in macos herunterzuladen, indem Sie einen Emulator in Xcode verwenden. Sie werden heruntergeladen in: ls
$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/, wie:$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64
Mapping SLC
dyld verwendet den Syscall shared_region_check_np, um zu wissen, ob das SLC gemappt wurde (was die Adresse zurückgibt) und shared_region_map_and_slide_np, um das SLC zu mappen.
Beachten Sie, dass selbst wenn das SLC beim ersten Gebrauch verschoben wird, alle Prozesse die gleiche Kopie verwenden, was den ASLR-Schutz eliminierte, wenn der Angreifer in der Lage war, Prozesse im System auszuführen. Dies wurde in der Vergangenheit tatsächlich ausgenutzt und mit einem Shared Region Pager behoben.
Branch-Pools sind kleine Mach-O dylibs, die kleine Räume zwischen Bildzuordnungen schaffen, wodurch es unmöglich wird, die Funktionen zu interponieren.
Override SLCs
Verwendung der Umgebungsvariablen:
DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1-> Dies ermöglicht das Laden eines neuen Shared Library CacheDYLD_SHARED_CACHE_DIR=avoidund manuelles Ersetzen der Bibliotheken durch Symlinks zum Shared Cache mit den echten (Sie müssen sie extrahieren)
Besondere Dateiberechtigungen
Ordners Berechtigungen
In einem Ordner erlaubt lesen, ihn aufzulisten, schreiben erlaubt das Löschen und Schreiben von Dateien darin, und ausführen erlaubt das Durchqueren des Verzeichnisses. Ein Benutzer mit Lesezugriff auf eine Datei in einem Verzeichnis, in dem er keine Ausführungsberechtigung hat, wird die Datei nicht lesen können.
Flag-Modifikatoren
Es gibt einige Flags, die in den Dateien gesetzt werden können, die das Verhalten der Datei ändern. Sie können die Flags der Dateien in einem Verzeichnis mit ls -lO /path/directory überprüfen.
uchg: Bekannt als uchange-Flag, wird jede Aktion zum Ändern oder Löschen der Datei verhindern. Um es zu setzen, tun Sie:chflags uchg file.txt- Der Root-Benutzer könnte das Flag entfernen und die Datei ändern.
restricted: Dieses Flag schützt die Datei durch SIP (Sie können dieses Flag nicht zu einer Datei hinzufügen).Sticky bit: Wenn ein Verzeichnis mit Sticky Bit, kann nur der Verzeichnisbesitzer oder Root Dateien umbenennen oder löschen. Typischerweise wird dies im /tmp-Verzeichnis gesetzt, um zu verhindern, dass normale Benutzer die Dateien anderer Benutzer löschen oder verschieben.
Alle Flags sind in der Datei sys/stat.h zu finden (finden Sie sie mit mdfind stat.h | grep stat.h) und sind:
UF_SETTABLE0x0000ffff: Maske der vom Eigentümer änderbaren Flags.UF_NODUMP0x00000001: Datei nicht dumpen.UF_IMMUTABLE0x00000002: Datei darf nicht geändert werden.UF_APPEND0x00000004: Schreibvorgänge in die Datei dürfen nur anhängen.UF_OPAQUE0x00000008: Verzeichnis ist undurchsichtig in Bezug auf Union.UF_COMPRESSED0x00000020: Datei ist komprimiert (einige Dateisysteme).UF_TRACKED0x00000040: Keine Benachrichtigungen für Löschungen/Umbenennungen für Dateien mit diesem Set.UF_DATAVAULT0x00000080: Berechtigung erforderlich zum Lesen und Schreiben.UF_HIDDEN0x00008000: Hinweis, dass dieses Element nicht in einer GUI angezeigt werden sollte.SF_SUPPORTED0x009f0000: Maske der vom Superuser unterstützten Flags.SF_SETTABLE0x3fff0000: Maske der vom Superuser änderbaren Flags.SF_SYNTHETIC0xc0000000: Maske der systemeigenen schreibgeschützten synthetischen Flags.SF_ARCHIVED0x00010000: Datei ist archiviert.SF_IMMUTABLE0x00020000: Datei darf nicht geändert werden.SF_APPEND0x00040000: Schreibvorgänge in die Datei dürfen nur anhängen.SF_RESTRICTED0x00080000: Berechtigung erforderlich zum Schreiben.SF_NOUNLINK0x00100000: Element darf nicht entfernt, umbenannt oder gemountet werden.SF_FIRMLINK0x00800000: Datei ist ein Firmlink.SF_DATALESS0x40000000: Datei ist ein dataloses Objekt.
Datei-ACLs
Datei-ACLs enthalten ACE (Access Control Entries), bei denen granularere Berechtigungen verschiedenen Benutzern zugewiesen werden können.
Es ist möglich, einem Verzeichnis diese Berechtigungen zu gewähren: list, search, add_file, add_subdirectory, delete_child, delete_child.
Und für eine Datei: read, write, append, execute.
Wenn die Datei ACLs enthält, werden Sie ein "+" finden, wenn Sie die Berechtigungen auflisten, wie in:
ls -ld Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
Sie können die ACLs der Datei mit folgendem Befehl lesen:
ls -lde Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
0: group:everyone deny delete
Sie können alle Dateien mit ACLs mit (das ist sehr langsam) finden:
ls -RAle / 2>/dev/null | grep -E -B1 "\d: "
Erweiterte Attribute
Erweiterte Attribute haben einen Namen und einen beliebigen gewünschten Wert und können mit ls -@ angezeigt und mit dem Befehl xattr bearbeitet werden. Einige gängige erweiterte Attribute sind:
com.apple.resourceFork: Kompatibilität mit Resource Fork. Auch sichtbar alsfilename/..namedfork/rsrccom.apple.quarantine: MacOS: Gatekeeper-Quarantänemechanismus (III/6)metadata:*: MacOS: verschiedene Metadaten, wie_backup_excludeItemoderkMD*com.apple.lastuseddate(#PS): Letztes Dateinutzungsdatumcom.apple.FinderInfo: MacOS: Finder-Informationen (z.B. Farb-Tags)com.apple.TextEncoding: Gibt die Textkodierung von ASCII-Textdateien ancom.apple.logd.metadata: Wird von logd für Dateien in/var/db/diagnosticsverwendetcom.apple.genstore.*: Generational storage (/.DocumentRevisions-V100im Wurzelverzeichnis des Dateisystems)com.apple.rootless: MacOS: Wird von System Integrity Protection verwendet, um Dateien zu kennzeichnen (III/10)com.apple.uuidb.boot-uuid: logd-Markierungen von Boot-Epochen mit eindeutiger UUIDcom.apple.decmpfs: MacOS: Transparente Dateikompression (II/7)com.apple.cprotect: *OS: Verschlüsselungsdaten pro Datei (III/11)com.apple.installd.*: *OS: Metadaten, die von installd verwendet werden, z.B.installType,uniqueInstallID
Resource Forks | macOS ADS
Dies ist eine Möglichkeit, Alternate Data Streams in MacOS-Maschinen zu erhalten. Sie können Inhalte in einem erweiterten Attribut namens com.apple.ResourceFork innerhalb einer Datei speichern, indem Sie es in file/..namedfork/rsrc speichern.
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
Sie können alle Dateien, die dieses erweiterte Attribut enthalten, mit folgendem Befehl finden:
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
Das erweiterte Attribut com.apple.decmpfs zeigt an, dass die Datei verschlüsselt gespeichert ist, ls -l wird eine Größe von 0 melden und die komprimierten Daten befinden sich in diesem Attribut. Jedes Mal, wenn auf die Datei zugegriffen wird, wird sie im Speicher entschlüsselt.
Dieses Attribut kann mit ls -lO gesehen werden, das als komprimiert angezeigt wird, da komprimierte Dateien auch mit dem Flag UF_COMPRESSED gekennzeichnet sind. Wenn eine komprimierte Datei mit chflags nocompressed </path/to/file> entfernt wird, weiß das System nicht, dass die Datei komprimiert war, und kann daher die Daten nicht dekomprimieren und darauf zugreifen (es wird denken, dass sie tatsächlich leer ist).
Das Tool afscexpand kann verwendet werden, um eine Datei zwangsweise zu dekomprimieren.
Universelle Binaries & Mach-o Format
Mac OS-Binaries werden normalerweise als universelle Binaries kompiliert. Eine universelle Binary kann mehrere Architekturen in derselben Datei unterstützen.
{{#ref}} universal-binaries-and-mach-o-format.md {{#endref}}
macOS Prozessspeicher
macOS Speicher-Dumping
{{#ref}} macos-memory-dumping.md {{#endref}}
Risikokategorie Dateien Mac OS
Das Verzeichnis /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System ist der Ort, an dem Informationen über das Risiko, das mit verschiedenen Dateierweiterungen verbunden ist, gespeichert werden. Dieses Verzeichnis kategorisiert Dateien in verschiedene Risikostufen, die beeinflussen, wie Safari mit diesen Dateien beim Herunterladen umgeht. Die Kategorien sind wie folgt:
- LSRiskCategorySafe: Dateien in dieser Kategorie gelten als vollständig sicher. Safari öffnet diese Dateien automatisch, nachdem sie heruntergeladen wurden.
- LSRiskCategoryNeutral: Diese Dateien kommen ohne Warnungen und werden nicht automatisch von Safari geöffnet.
- LSRiskCategoryUnsafeExecutable: Dateien in dieser Kategorie lösen eine Warnung aus, die darauf hinweist, dass die Datei eine Anwendung ist. Dies dient als Sicherheitsmaßnahme, um den Benutzer zu alarmieren.
- LSRiskCategoryMayContainUnsafeExecutable: Diese Kategorie ist für Dateien, wie Archive, die möglicherweise eine ausführbare Datei enthalten. Safari wird eine Warnung auslösen, es sei denn, es kann bestätigen, dass alle Inhalte sicher oder neutral sind.
Protokolldateien
$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2: Enthält Informationen über heruntergeladene Dateien, wie die URL, von der sie heruntergeladen wurden./var/log/system.log: Hauptprotokoll der OSX-Systeme. com.apple.syslogd.plist ist verantwortlich für die Ausführung des Sysloggings (Sie können überprüfen, ob es deaktiviert ist, indem Sie nach "com.apple.syslogd" inlaunchctl listsuchen)./private/var/log/asl/*.asl: Dies sind die Apple-Systemprotokolle, die interessante Informationen enthalten können.$HOME/Library/Preferences/com.apple.recentitems.plist: Speichert kürzlich aufgerufene Dateien und Anwendungen über "Finder".$HOME/Library/Preferences/com.apple.loginitems.plsit: Speichert Elemente, die beim Systemstart gestartet werden sollen.$HOME/Library/Logs/DiskUtility.log: Protokolldatei für die DiskUtility-App (Informationen über Laufwerke, einschließlich USBs)./Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist: Daten über drahtlose Zugangspunkte./private/var/db/launchd.db/com.apple.launchd/overrides.plist: Liste der deaktivierten Daemons.
{{#include ../../../banners/hacktricks-training.md}}