Bypass FS protections: read-only / no-exec / Distroless
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)
Wenn du an einer Hacking-Karriere interessiert bist und das Unhackbare hacken möchtest - wir stellen ein! (fließend Polnisch in Wort und Schrift erforderlich).
In den folgenden Videos findest du die auf dieser Seite erwähnten Techniken ausführlicher erklärt:
Es ist immer häufiger, Linux-Maschinen mit schreibgeschütztem (ro) Dateisystemschutz zu finden, insbesondere in Containern. Das liegt daran, dass es so einfach ist, einen Container mit ro Dateisystem zu starten, wie readOnlyRootFilesystem: true
im securitycontext
festzulegen:
Allerdings, selbst wenn das Dateisystem als ro gemountet ist, bleibt /dev/shm
beschreibbar, sodass es falsch ist zu sagen, dass wir nichts auf die Festplatte schreiben können. Diese Ordner werden jedoch mit no-exec-Schutz gemountet, sodass du eine hier heruntergeladene Binärdatei nicht ausführen kannst.
Aus der Perspektive eines Red Teams macht dies das Herunterladen und Ausführen von Binärdateien, die sich nicht bereits im System befinden (wie Backdoors oder Aufzähler wie kubectl
), kompliziert.
Beachte, dass ich von Binärdateien gesprochen habe, du kannst jedes Skript ausführen, solange der Interpreter auf der Maschine vorhanden ist, wie ein Shell-Skript, wenn sh
vorhanden ist, oder ein Python-Skript, wenn Python
installiert ist.
Allerdings reicht das nicht aus, um deine Binär-Backdoor oder andere Binärwerkzeuge, die du möglicherweise ausführen musst, zu starten.
Wenn du eine Binärdatei ausführen möchtest, aber das Dateisystem dies nicht zulässt, ist der beste Weg, dies zu tun, indem du sie aus dem Speicher ausführst, da die Schutzmaßnahmen dort nicht gelten.
Wenn du einige leistungsstarke Skript-Engines auf der Maschine hast, wie Python, Perl oder Ruby, könntest du die Binärdatei herunterladen, um sie aus dem Speicher auszuführen, sie in einem Speicher-Dateideskriptor (create_memfd
syscall) speichern, der nicht durch diese Schutzmaßnahmen geschützt ist, und dann einen exec
syscall aufrufen, der den fd als die auszuführende Datei angibt.
Dafür kannst du leicht das Projekt fileless-elf-exec verwenden. Du kannst ihm eine Binärdatei übergeben, und es wird ein Skript in der angegebenen Sprache mit der komprimierten und b64-kodierten Binärdatei generiert, mit den Anweisungen, um sie in einem fd zu dekodieren und zu dekomprimieren, das durch den Aufruf des create_memfd
syscalls erstellt wird, und einem Aufruf des exec syscalls, um sie auszuführen.
Dies funktioniert nicht in anderen Skriptsprache wie PHP oder Node, da sie keine Standardmethode haben, um rohe Syscalls aus einem Skript aufzurufen, sodass es nicht möglich ist, create_memfd
aufzurufen, um den Speicher fd zu erstellen, um die Binärdatei zu speichern.
Darüber hinaus wird das Erstellen eines regulären fd mit einer Datei in /dev/shm
nicht funktionieren, da du sie nicht ausführen darfst, weil der no-exec-Schutz gilt.
DDexec / EverythingExec ist eine Technik, die es dir ermöglicht, den Speicher deines eigenen Prozesses zu modifizieren, indem du dessen /proc/self/mem
überschreibst.
Daher kannst du durch Kontrolle des Assemblercodes, der vom Prozess ausgeführt wird, einen Shellcode schreiben und den Prozess "mutieren", um beliebigen Code auszuführen.
DDexec / EverythingExec ermöglicht es dir, deinen eigenen Shellcode oder jede Binärdatei aus dem Speicher zu laden und auszuführen.
Für weitere Informationen zu dieser Technik, siehe das Github oder:
DDexec / EverythingExecMemexec ist der natürliche nächste Schritt von DDexec. Es ist ein DDexec Shellcode, der demonisiert wurde, sodass Sie jedes Mal, wenn Sie eine andere Binärdatei ausführen möchten, DDexec nicht neu starten müssen. Sie können einfach den Memexec-Shellcode über die DDexec-Technik ausführen und dann mit diesem Daemon kommunizieren, um neue Binärdateien zu laden und auszuführen.
Ein Beispiel, wie man memexec verwendet, um Binärdateien von einem PHP-Reverse-Shell auszuführen, finden Sie unter https://github.com/arget13/memexec/blob/main/a.php.
Mit einem ähnlichen Zweck wie DDexec ermöglicht die memdlopen Technik eine einfachere Möglichkeit, Binärdateien im Speicher zu laden, um sie später auszuführen. Es könnte sogar ermöglichen, Binärdateien mit Abhängigkeiten zu laden.
Distroless-Container enthalten nur die minimalen Komponenten, die notwendig sind, um eine bestimmte Anwendung oder Dienst auszuführen, wie Bibliotheken und Laufzeitabhängigkeiten, schließen jedoch größere Komponenten wie einen Paketmanager, eine Shell oder Systemdienstprogramme aus.
Das Ziel von Distroless-Containern ist es, die Angriffsfläche von Containern zu reduzieren, indem unnötige Komponenten eliminiert und die Anzahl der ausnutzbaren Schwachstellen minimiert wird.
In einem Distroless-Container finden Sie möglicherweise nicht einmal sh
oder bash
, um eine reguläre Shell zu erhalten. Sie werden auch keine Binärdateien wie ls
, whoami
, id
... finden, alles, was Sie normalerweise in einem System ausführen.
Daher werden Sie nicht in der Lage sein, eine Reverse Shell zu erhalten oder das System wie gewohnt zu enumerieren.
Wenn der kompromittierte Container jedoch beispielsweise eine Flask-Webanwendung ausführt, ist Python installiert, und daher können Sie eine Python-Reverse-Shell erhalten. Wenn es Node ausführt, können Sie eine Node-Reverse-Shell erhalten, und dasselbe gilt für die meisten Skriptsprache.
Mit der Skriptsprache könnten Sie das System enumerieren, indem Sie die Sprachfähigkeiten nutzen.
Wenn es keine read-only/no-exec
-Schutzmaßnahmen gibt, könnten Sie Ihre Reverse Shell missbrauchen, um Ihre Binärdateien im Dateisystem zu schreiben und sie auszuführen.
In dieser Art von Containern werden diese Schutzmaßnahmen jedoch normalerweise existieren, aber Sie könnten die vorherigen Techniken zur Ausführung im Speicher verwenden, um sie zu umgehen.
Sie finden Beispiele, wie man einige RCE-Schwachstellen ausnutzt, um Skriptsprache Reverse Shells zu erhalten und Binärdateien aus dem Speicher auszuführen unter https://github.com/carlospolop/DistrolessRCE.
Wenn Sie an einer Hacking-Karriere interessiert sind und das Unhackbare hacken möchten - wir stellen ein! (fließendes Polnisch in Wort und Schrift erforderlich).
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)