macOS FS Tricks
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Berechtigungen in einem Verzeichnis:
lesen - Sie können die Einträge im Verzeichnis auflisten.
schreiben - Sie können Dateien im Verzeichnis löschen/schreiben und Sie können leere Ordner löschen.
Aber Sie können keine nicht-leeren Ordner löschen/ändern, es sei denn, Sie haben Schreibberechtigungen dafür.
Sie können den Namen eines Ordners nicht ändern, es sei denn, Sie besitzen ihn.
ausführen - Sie sind berechtigt, das Verzeichnis zu durchqueren - wenn Sie dieses Recht nicht haben, können Sie auf keine Dateien darin oder in Unterverzeichnissen zugreifen.
Wie man eine Datei/einen Ordner, der root gehört, überschreibt, aber:
Ein übergeordneter Verzeichnisbesitzer im Pfad ist der Benutzer
Ein übergeordneter Verzeichnisbesitzer im Pfad ist eine Benutzergruppe mit Schreibzugriff
Eine Benutzer-Gruppe hat Schreibzugriff auf die Datei
Mit einer der vorherigen Kombinationen könnte ein Angreifer einen sym/hard link in den erwarteten Pfad einspeisen, um einen privilegierten beliebigen Schreibzugriff zu erhalten.
Wenn es Dateien in einem Verzeichnis gibt, in dem nur root R+X-Zugriff hat, sind diese für niemanden sonst zugänglich. Eine Schwachstelle, die es ermöglicht, eine von einem Benutzer lesbare Datei, die aufgrund dieser Einschränkung nicht gelesen werden kann, von diesem Ordner in einen anderen zu verschieben, könnte ausgenutzt werden, um diese Dateien zu lesen.
Beispiel in: https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions
Wenn ein privilegierter Prozess Daten in eine Datei schreibt, die von einem weniger privilegierten Benutzer kontrolliert werden könnte oder die zuvor von einem weniger privilegierten Benutzer erstellt worden sein könnte. Der Benutzer könnte einfach auf eine andere Datei über einen symbolischen oder harten Link verweisen, und der privilegierte Prozess wird in diese Datei schreiben.
Überprüfen Sie in den anderen Abschnitten, wo ein Angreifer einen beliebigen Schreibzugriff ausnutzen könnte, um Privilegien zu eskalieren.
Dateien mit der .fileloc
-Erweiterung können auf andere Anwendungen oder Binärdateien verweisen, sodass beim Öffnen die Anwendung/Binärdatei ausgeführt wird.
Beispiel:
Wenn Sie einen Prozess dazu bringen können, eine Datei oder einen Ordner mit hohen Rechten zu öffnen, können Sie crontab
missbrauchen, um eine Datei in /etc/sudoers.d
mit EDITOR=exploit.py
zu öffnen, sodass exploit.py
den FD zur Datei in /etc/sudoers
erhält und diesen ausnutzt.
Zum Beispiel: https://youtu.be/f1HA5QhLQ7Y?t=21098
Wenn eine Datei/ein Ordner dieses unveränderliche Attribut hat, ist es nicht möglich, ein xattr darauf zu setzen.
Ein devfs-Mount unterstützt keine xattr, weitere Informationen in CVE-2023-32364
Diese ACL verhindert das Hinzufügen von xattrs
zur Datei.
AppleDouble Dateiformat kopiert eine Datei einschließlich ihrer ACEs.
Im Quellcode ist zu sehen, dass die ACL-Textdarstellung, die im xattr mit dem Namen com.apple.acl.text
gespeichert ist, als ACL in der dekomprimierten Datei gesetzt wird. Wenn Sie also eine Anwendung in eine Zip-Datei im AppleDouble Dateiformat mit einer ACL komprimiert haben, die das Schreiben anderer xattrs verhindert... wurde das Quarantäne-xattr nicht in die Anwendung gesetzt:
Überprüfen Sie den ursprünglichen Bericht für weitere Informationen.
Um dies zu replizieren, müssen wir zuerst den richtigen acl-String erhalten:
(Note that even if this works the sandbox write the quarantine xattr before)
Nicht wirklich notwendig, aber ich lasse es hier, nur für den Fall:
macOS xattr-acls extra stuffBundles enthalten die Datei _CodeSignature/CodeResources
, die den Hash jeder einzelnen Datei im Bundle enthält. Beachten Sie, dass der Hash von CodeResources auch in der ausführbaren Datei eingebettet ist, sodass wir damit auch nicht herumspielen können.
Es gibt jedoch einige Dateien, deren Signatur nicht überprüft wird; diese haben den Schlüssel omit in der plist, wie:
Es ist möglich, die Signatur einer Ressource über die CLI zu berechnen mit:
Ein Benutzer kann ein benutzerdefiniertes DMG einbinden, das sogar über einige vorhandene Ordner erstellt wurde. So könnten Sie ein benutzerdefiniertes DMG-Paket mit benutzerdefiniertem Inhalt erstellen:
Normalerweise mountet macOS Festplatten, indem es mit dem com.apple.DiskArbitrarion.diskarbitrariond
Mach-Dienst kommuniziert (bereitgestellt von /usr/libexec/diskarbitrationd
). Wenn man den Parameter -d
zur LaunchDaemons plist-Datei hinzufügt und neu startet, werden die Protokolle in /var/log/diskarbitrationd.log
gespeichert.
Es ist jedoch möglich, Tools wie hdik
und hdiutil
zu verwenden, um direkt mit dem com.apple.driver.DiskImages
kext zu kommunizieren.
Wenn Ihr Skript als Shell-Skript interpretiert werden könnte, könnten Sie das /etc/periodic/daily/999.local
Shell-Skript überschreiben, das jeden Tag ausgelöst wird.
Sie können die Ausführung dieses Skripts fälschen mit: sudo periodic daily
Schreiben Sie einen beliebigen LaunchDaemon wie /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
mit einer plist, die ein beliebiges Skript ausführt wie:
Just generate the script /Applications/Scripts/privesc.sh
mit den Befehlen, die Sie als root ausführen möchten.
Wenn Sie willkürlichen Schreibzugriff haben, könnten Sie eine Datei im Ordner /etc/sudoers.d/
erstellen, die Ihnen sudo-Rechte gewährt.
Die Datei /etc/paths
ist einer der Hauptorte, die die PATH-Umgebungsvariable befüllen. Sie müssen root sein, um sie zu überschreiben, aber wenn ein Skript von einem privilegierten Prozess einen Befehl ohne den vollständigen Pfad ausführt, könnten Sie in der Lage sein, es zu übernehmen, indem Sie diese Datei ändern.
Sie können auch Dateien in /etc/paths.d
schreiben, um neue Ordner in die PATH
-Umgebungsvariable zu laden.
Dies wird eine Datei erzeugen, die root gehört und von mir beschreibbar ist (Code von hier). Dies könnte auch als privesc funktionieren:
POSIX Shared Memory ermöglicht es Prozessen in POSIX-konformen Betriebssystemen, auf einen gemeinsamen Speicherbereich zuzugreifen, was eine schnellere Kommunikation im Vergleich zu anderen Methoden der interprozessualen Kommunikation ermöglicht. Es beinhaltet das Erstellen oder Öffnen eines Shared-Memory-Objekts mit shm_open()
, das Festlegen seiner Größe mit ftruncate()
und das Mappen in den Adressraum des Prozesses mit mmap()
. Prozesse können dann direkt aus diesem Speicherbereich lesen und in ihn schreiben. Um den gleichzeitigen Zugriff zu verwalten und Datenkorruption zu verhindern, werden häufig Synchronisationsmechanismen wie Mutexes oder Semaphoren verwendet. Schließlich entmappen und schließen Prozesse den Shared Memory mit munmap()
und close()
, und entfernen optional das Speicherobjekt mit shm_unlink()
. Dieses System ist besonders effektiv für effiziente, schnelle IPC in Umgebungen, in denen mehrere Prozesse schnell auf gemeinsame Daten zugreifen müssen.
macOS geschützte Deskriptoren sind eine Sicherheitsfunktion, die in macOS eingeführt wurde, um die Sicherheit und Zuverlässigkeit von Dateideskriptoroperationen in Benutzeranwendungen zu verbessern. Diese geschützten Deskriptoren bieten eine Möglichkeit, spezifische Einschränkungen oder "Wächter" mit Dateideskriptoren zu verknüpfen, die vom Kernel durchgesetzt werden.
Diese Funktion ist besonders nützlich, um bestimmte Klassen von Sicherheitsanfälligkeiten wie unbefugten Dateizugriff oder Rennbedingungen zu verhindern. Diese Anfälligkeiten treten auf, wenn beispielsweise ein Thread auf eine Dateibeschreibung zugreift und einem anderen anfälligen Thread Zugriff darauf gewährt oder wenn ein Dateideskriptor von einem anfälligen Kindprozess vererbt wird. Einige Funktionen, die mit dieser Funktionalität zusammenhängen, sind:
guarded_open_np
: Öffnet einen FD mit einem Wächter
guarded_close_np
: Schließt ihn
change_fdguard_np
: Ändert die Wächterflags auf einem Deskriptor (sogar das Entfernen des Wächter-Schutzes)
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)