Ein chroot-Gefängnis von innen entdecken
Wie kann man erkennen, in ein chroot-Gefängnis ohne root-Rechte? Angenommen, ein standard-BSD-oder Linux-system. Das beste was ich kam mit war die inode-Wert für "/" und zu prüfen, ob es ist Recht niedrig, aber ich würde gerne eine genauere Methode für die Erkennung.
[edit 20080916 142430 EST]
Einfach auf der Suche rund um das Dateisystem ist nicht ausreichend, da es nicht schwer zu duplizieren Dinge wie /boot und /dev zu täuschen inhaftiert Benutzer.
[edit 20080916 142950 EST]
Für Linux-Systeme, die überprüfung für die unerwartete Werte in /proc ist vernünftig, aber was ist mit Systemen, die keine Unterstützung für /proc in den ersten Platz?
ischroot
standardmäßig installiert. Siehe: manpages.debian.org/jessie/debianutils/ischroot.1.en.html InformationsquelleAutor der Frage Topaz | 2008-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den inode für /immer 2, wenn es das root-Verzeichnis des Dateisystems, aber Sie können chroot-Umgebung innerhalb eines vollständigen Dateisystem. Wenn es nur chroot (und nicht eine andere Virtualisierung), man könnte mount und vergleichen Sie die gemounteten Dateisysteme gegen das, was Sie sehen. Stellen Sie sicher, dass alle mount-Punkt hat inode 2.
InformationsquelleAutor der Antwort user10392
Unter Linux mit root-rechten, zu testen, ob das root-Verzeichnis der init-Prozess ist Ihr root-Verzeichnis. Obwohl
/proc/1/root
ist immer ein symbolischer link auf/
nach, er führt zum "master" root-Verzeichnis (unter der Annahme der init-Prozess ist nicht chroot, aber das ist selten). Wenn/proc
ist nicht montiert, können Sie Wette, Sie sind in einer chroot-Umgebung.Dies ist genauer, als suchen Sie unter
/proc/1/exe
denn das könnte auch anders sein, ausserhalb eines chroot-wenninit
aktualisiert wurde seit dem letzten Start oder wenn der chroot-Umgebung ist auf der Haupt-root-Dateisystem undinit
ist schwer verknüpft.Wenn Sie nicht über root-Berechtigungen verfügen, können Sie Blick auf
/proc/1/mountinfo
und/proc/$$/mountinfo
(kurz dokumentiert infilesystems/proc.txt
in die Linux-kernel-Dokumentation). Diese Datei ist world-readable und beinhaltet eine Menge Informationen über die einzelnen mount-Punkt in der Prozess-Ansicht des Dateisystems. Die Pfade in dieser Datei sind eingeschränkt durch die chroot Auswirkungen auf die reader-Prozess, wenn vorhanden. Wenn der Prozess Lesen/proc/1/mountinfo
ist in einer chroot-Dateisystem, das anders als die global root (vorausgesetzt, pid ' s 1-Wurzel ist die global root), dann kein Eintrag für/
erscheint in/proc/1/mountinfo
. Wenn der Prozess Lesen/proc/1/mountinfo
ist chroot ein Verzeichnis auf dem globalen root-Dateisystem, dann einen Eintrag für/
erscheint in/proc/1/mountinfo
, aber mit einem anderen mount id. Übrigens, das root-Feld ($4
) zeigt an, wo die chroot-Umgebung ist in seiner master-Dateisystem. Wieder, dies ist spezifisch für Linux.InformationsquelleAutor der Antwort Gilles
Wenn Sie nicht in einer chroot-Umgebung, die inode für /immer 2. Sie können überprüfen, dass die Verwendung
oder
Interressant, aber lassen Sie uns versuchen zu finden, der Pfad von chroot-Verzeichnis. Fragen zu
stat
auf dem Gerät /befindet sich:Erste byte ist der major von Gerät und damit byte ist gering. Zum Beispiel, 0802, bedeutet major 8, minor-1. Wenn Sie check in /dev, Sie werden sehen, dieses Gerät ist /dev/sda2. Wenn du root bist, kannst du direkt erstellen correspondong Gerät in der chroot-Umgebung:
Nun, lassen Sie uns finden inode verknüpft zu unserer chroot-Umgebung. debugfs erlaubt die Liste Inhalt von Dateien mit inode-Nummern. Für exemple, die
ls -id /
zurückgegeben 923960:Interessante Informationen inode von
..
Eintrag: 915821. Ich kann Fragen, deren Inhalt:Verzeichnis namens
debian-jail
hat inode 923960. Also Letzte Komponente meiner chroot-dir istdebian-jail
. Mal sehen übergeordnete Verzeichnis (inode 2) jetzt:Verzeichnis namens
opt
hat inode 915821 und inode-2 ist die Wurzel des Dateisystems. Also meine chroot-Verzeichnis/opt/debian-jail
. Sicher,/dev/sda1
montiert werden kann auf einem anderen filesystem. Sie müssen prüfen, ob (lsof verwenden oder direkt Kommissionierung Informationen/proc
).InformationsquelleAutor der Antwort Jezz
Verhinderung Sachen wie, dass ist der springende Punkt. Wenn es Ihr code, der laufen soll, in der chroot-Umgebung, müssen Sie ein flag setzen, auf Start. Wenn Sie ' re hacking, hack: überprüfen Sie nach einigen gemeinsamen Dinge an bekannten Orten, zählen die Dateien in /etc, etwas in /dev.
InformationsquelleAutor der Antwort sammyo
Auf BSD-Systemen (überprüfen Sie mit uname -a), proc sollte immer vorhanden sein. Überprüfen Sie, ob die dev/inode-pair von /proc/1/exe-Datei (verwenden Sie stat auf diesem Weg, es wird nicht nach den symlink durch text, sondern durch die zugrunde liegenden Haken) mit /sbin/init.
Überprüfung der root-inode #2 ist auch gut.
Auf den meisten anderen Systemen, ein root-Benutzer können herausfinden, viel schneller, indem Sie versuchen, die fchdir root-breaking trick. Wenn es geht, überall, das Sie sind in ein chroot-Gefängnis.
InformationsquelleAutor der Antwort Joshua
Ich denke, es hängt davon ab, warum Sie vielleicht in einer chroot-Umgebung, und ob jede Anstrengung, die gegangen in die Verkleidung.
Ich würde check /proc, werden diese Dateien automatisch generierte system-Informations-Dateien. Der kernel wird, füllen Sie diese in das root-Dateisystem, aber es ist möglich, dass Sie nicht existieren in der chroot-filesystem.
Wenn das root-Dateisystem /proc gebunden wurde, /proc in das chroot, dann ist es wahrscheinlich, dass es einige Diskrepanzen zwischen Informationen und die chroot-Umgebung. Überprüfen von /proc/mounts zum Beispiel.
Similrarly, check /sys.
InformationsquelleAutor der Antwort SpoonMeiser
Wenn Sie in die chroot-Umgebung mit schroot, dann können Sie überprüfen Sie den Wert von $debian_chroot.
InformationsquelleAutor der Antwort Alex
Wollte ich die gleichen Informationen für ein Gefängnis läuft auf FreeBSD (wie Ansible scheint nicht zu erkennen, diese Szenario).
Auf der FreeNAS-distribution von FreeBSD 11,
/proc
ist nicht montiert auf dem host, aber es ist in der jail. Ob dies stimmt auch für die regulären FreeBSD-ich weiß es nicht sicher, aber procfs: Verschwunden, Aber Nicht Vergessen zu suggerieren scheint, es ist. So oder so, würden Sie wahrscheinlich nicht wollen, um zu versuchen, die Montage, die es nur zu entdecken Gefängnis-status und daher bin ich nicht sicher, es kann verwendet werden, als zuverlässiger Prädiktor, in einem Gefängnis.Ich auch ausgeschlossen mit stat auf
/
da sicherlich auf FreeNAS alle Gefängnisse sind angesichts Ihrer eigenen Datei-system (d.h. ein ZFS-dataset) und daher die/
Knoten auf dem host und in der Gefängnis-beide haben inode-4. Ich erwarte, dass dieser Häufig auf FreeBSD 11 im Allgemeinen.Also der Ansatz ließ ich mich auf war mit procstat auf pid 0.
Ich bin so eine Vermutung, dass hier der pid, 0 wird immer der kernel auf dem host, und es wird keine pid 0, die im Gefängnis.
InformationsquelleAutor der Antwort Samuel Harmer