de.comp.os.unix.linux.misc
Aus einem chroot ausbrechen (was: PC von evangelischen Kanzeln)
[So, jetzt wird mir das sogar f??r desd zu off-topic und ich leite um]
On 2011-10-16 17:26, Joachim Pense <snob_at_pense-mainz.eu> wrote:
> Am 16.10.2011 18:18, schrieb Peter J. Holzer:
>> On 2011-10-16 10:51, Joachim Pense<snob_at_pense-mainz.eu> wrote:
>>> Am 16.10.2011 12:36, schrieb Peter J. Holzer:
>>>> (allerdings ist es f??r root trivial, aus dem Jail auszubrechen).
>>>
>>> Wenn man in einer chroot-Umgebung root ist, wie kann man da ausbrechen?
>>> Den Rest mounten?
>>
>> man chroot(2):
>>
>> | This call does not change the current working directory, so that after
>> | the call '.' can be outside the tree rooted at '/'. In particular, the
>> | superuser can escape from a "chroot jail" by doing:
>> |
>> | mkdir foo; chroot foo; cd ..
>> |
>> | This call does not close open file descriptors, and such file descrip???
>> | tors may allow access to files outside the chroot tree.
>>
>
> Ah, der Superuser muss das also vorher schon au??erhalb des Gef??ngnisses
> vorbereitet haben.
Nein. Vermutlich hat Dich die seltsame Notation verwirrt: Es schaut wie
ein Shellscript aus, w??rde als Shellscript aber nicht funktionieren
(Scriptkiddie-Sicherung?). Das soll(t)en Systemcalls sein.
Nimm an, wir h??tten folgendes Filesystemlayout
inode pfad
2 /
10 /jail
20 /jail/app
25 /jail/app/config
27 /jail/app/data
Unsere Applikation (app) l??uft in einem chroot mit Root-Directory
/jail/app. D.h. der Prozess sieht den Inode 20 als /, die Inodes 25 und
27 als /config und /data, die Inodes 2 und 10 gar nicht. Das Working
Directory sei der Einfachheit halber gleich dem Root-Directory. Da Inode
20 das Root-Directory des Prozesses ist, zeigt ".." ebenfalls auf Inode
20 (und nicht auf 10, wie das physisch der Fall ist).
Jetzt wollen wir aus dem Jail ausbrechen. Wir rufen also
chroot("/data")
auf. Nun ist das neue Root-Directory das mit dem Inode 27. Unser
Working-Directory is nach wie vor das mit dem Inode 20, und das ist
jetzt kein Root-Directory mehr, sondern ein ganz normales Directory,
daher komme ich mit ".." auf Inode 10 und mit "../.." auf Inode 2, das
echte Root-Directory. Und von dort kommen wir dann ??berall hin. Das
wars.
chroot k??nnte auch das Working Directory ??ndern, aber das reicht nicht.
Solange ich noch irgendein Directory au??erhalb des neuen Root-Directorys
offen habe, kann ich mit fchdir dorthin wechseln und bin damit wieder
drau??en. chroot k??nnte alle Filedescriptoren, die auf ein Directory
au??erhalb des neuen Root-Directorys zeigen (zum ??berpr??fen einfach
solange ".." folgen, bis man entweder beim alten oder neuen
Root-Directory ankommt) schlie??en. Da f??llt mir momentan keine Umgehung
ein, aber wahrscheinlich liegt das nur an meiner mangelnden Fantasie.
hp
Written by "Peter J. Holzer"
17/10/2011 22.42.40
Check some pics on this site!
23/05/2012 23.26.15