macOS Files, Folders, Binaries & Memory
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
/Applications: Die installierten Apps sollten hier sein. Alle Benutzer können darauf zugreifen.
/bin: Befehlszeilen-Binärdateien
/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- und im Verzeichnis jedes Benutzers.
/private: Nicht dokumentiert, aber viele der genannten Ordner sind symbolische Links zum privaten Verzeichnis.
/sbin: Essentielle System-Binärdateien (verwaltungsbezogen)
/System: Dateien, um OS X auszuführen. Hier sollten hauptsächlich nur Apple-spezifische Dateien (keine Drittanbieter) zu finden sein.
/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-Binärdateien
/var: Protokolldateien
/Volumes: Die gemounteten Laufwerke erscheinen hier.
/.vol: Wenn Sie stat a.txt
ausführen, erhalten Sie etwas wie 16777223 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 Sie cat /.vol/16777223/7545753
ausführen.
Systemanwendungen befinden sich unter /System/Applications
Installierte Anwendungen werden normalerweise in /Applications
oder in ~/Applications
installiert.
Anwendungsdaten finden sich in /Library/Application Support
für Anwendungen, die als Root ausgeführt werden, und ~/Library/Application Support
für Anwendungen, die als Benutzer ausgeführt werden.
Daemonen von Drittanbieteranwendungen, die als Root ausgeführt werden müssen, befinden sich normalerweise in /Library/PrivilegedHelperTools/
Sandboxed Apps sind im Ordner ~/Library/Containers
abgebildet. 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
Kernel-Erweiterungen von Drittanbietern werden in /Library/Extensions
gespeichert.
MacOS speichert Informationen wie Passwörter an mehreren Orten:
macOS Sensitive Locations & Interesting Daemons.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.plsit
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
: 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 es möglich ist, mit der Anwendung über ein AppleScript zu interagieren.
Ein Bundle ist ein Verzeichnis, das wie ein Objekt im Finder aussieht (ein Beispiel für ein Bundle sind *.app
-Dateien).
Unter macOS (und iOS) werden alle systemweiten gemeinsam genutzten Bibliotheken, 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 werden 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 Binärprogramm dyld_shared_cache_util zu verwenden, das möglicherweise heutzutage nicht mehr funktioniert, aber Sie können auch dyldextractor verwenden:
Beachten Sie, dass Sie, selbst wenn das Tool dyld_shared_cache_util
nicht funktioniert, das gemeinsame dyld-Binärformat an Hopper übergeben können, und Hopper wird in der Lage sein, 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 und sie daher zu unbekannten Adressen springen könnten.
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
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 Bildzuweisungen schaffen, was es unmöglich macht, die Funktionen zu interponieren.
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 Cache
DYLD_SHARED_CACHE_DIR=avoid
und manuelles Ersetzen der Bibliotheken durch Symlinks zum Shared Cache mit den echten (Sie müssen sie extrahieren)
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.
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 verhindern, die die Datei ändert oder löscht. 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 finden Sie in der Datei sys/stat.h
(finden Sie sie mit mdfind stat.h | grep stat.h
) und sind:
UF_SETTABLE
0x0000ffff: Maske der vom Eigentümer änderbaren Flags.
UF_NODUMP
0x00000001: Datei nicht dumpen.
UF_IMMUTABLE
0x00000002: Datei darf nicht geändert werden.
UF_APPEND
0x00000004: Schreibvorgänge in die Datei dürfen nur anhängen.
UF_OPAQUE
0x00000008: Verzeichnis ist undurchsichtig in Bezug auf Union.
UF_COMPRESSED
0x00000020: Datei ist komprimiert (einige Dateisysteme).
UF_TRACKED
0x00000040: Keine Benachrichtigungen für Löschungen/Umbenennungen für Dateien mit diesem Set.
UF_DATAVAULT
0x00000080: Berechtigung erforderlich zum Lesen und Schreiben.
UF_HIDDEN
0x00008000: Hinweis, dass dieses Element nicht in einer GUI angezeigt werden sollte.
SF_SUPPORTED
0x009f0000: Maske der vom Superuser unterstützten Flags.
SF_SETTABLE
0x3fff0000: Maske der vom Superuser änderbaren Flags.
SF_SYNTHETIC
0xc0000000: Maske der systemeigenen schreibgeschützten synthetischen Flags.
SF_ARCHIVED
0x00010000: Datei ist archiviert.
SF_IMMUTABLE
0x00020000: Datei darf nicht geändert werden.
SF_APPEND
0x00040000: Schreibvorgänge in die Datei dürfen nur anhängen.
SF_RESTRICTED
0x00080000: Berechtigung erforderlich zum Schreiben.
SF_NOUNLINK
0x00100000: Element darf nicht entfernt, umbenannt oder gemountet werden.
SF_FIRMLINK
0x00800000: Datei ist ein Firmlink.
SF_DATALESS
0x40000000: Datei ist ein dataless Objekt.
Datei ACLs enthalten ACE (Access Control Entries), wo detailliertere 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:
Sie können die ACLs der Datei mit folgendem Befehl lesen:
Sie können alle Dateien mit ACLs mit (das ist sehr langsam) finden:
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 als filename/..namedfork/rsrc
com.apple.quarantine
: MacOS: Gatekeeper-Quarantänemechanismus (III/6)
metadata:*
: MacOS: verschiedene Metadaten, wie _backup_excludeItem
oder kMD*
com.apple.lastuseddate
(#PS): Letztes Dateinutzungsdatum
com.apple.FinderInfo
: MacOS: Finder-Informationen (z.B. Farb-Tags)
com.apple.TextEncoding
: Gibt die Textkodierung von ASCII-Textdateien an
com.apple.logd.metadata
: Wird von logd für Dateien in /var/db/diagnostics
verwendet
com.apple.genstore.*
: Generational storage (/.DocumentRevisions-V100
im 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 UUID
com.apple.decmpfs
: MacOS: Transparente Dateikompression (II/7)
com.apple.cprotect
: *OS: Per-Datei-Verschlüsselungsdaten (III/11)
com.apple.installd.*
: *OS: Metadaten, die von installd verwendet werden, z.B. installType
, uniqueInstallID
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.
Sie können alle Dateien finden, die dieses erweiterte Attribut enthalten mit:
Das erweiterte Attribut com.apple.decmpfs
zeigt an, dass die Datei verschlüsselt gespeichert ist, ls -l
wird eine Größe von 0 anzeigen und die komprimierten Daten befinden sich in diesem Attribut. Jedes Mal, wenn 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 entfernt wird, wird dieses Flag mit chflags nocompressed </path/to/file>
, 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.
Mac OS-Binaries werden normalerweise als universelle Binaries kompiliert. Eine universelle Binary kann mehrere Architekturen in derselben Datei unterstützen.
macOS Universal binaries & Mach-O FormatDas 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 sind. 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 überprüfen, dass alle Inhalte sicher oder neutral sind.
$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" in launchctl list
suchen).
/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.
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)