Příkaz chroot vytváří izolované prostředí v Linuxu změnou kořenového adresáře pro všechny běžící procesy.
Chcete spouštět aplikace nebo služby v izolovaném prostoru v Linuxu? Nebo možná chcete otestovat a ladit aplikaci, aniž by to zasahovalo do zbytku vašeho systému? Pokud ano, budete se chtít dozvědět o chrootu, mocném mechanismu zabudovaném do Linuxu, který vám umožňuje vytvořit samostatné prostředí ve vašem systému.
Pojďme podrobně prozkoumat chroot, dozvědět se o jeho výhodách, případech použití, jak jej nastavit v systému Linux a v případě potřeby, jak z něj uniknout.
Co je chroot v Linuxu?
chroot nebo change-root je pravděpodobně jednou z nejjednodušších a nejstarších forem kontejnerizačního softwaru, která uživateli umožňuje bezpečně sandboxovat aplikace a služby. Sandboxing, z hlediska výpočetní techniky, je proces izolace programu v omezeném prostoru s předem definovanými prostředky.
Pokud jste obeznámeni s Docker a jak to funguje, můžete si chroot představit jako jeho silně okleštěnou verzi. chroot funguje tak, že mění kořenový adresář programu, omezuje přístup a viditelnost, a tím poskytuje další vrstvu izolace a zabezpečení.
V podstatě vytvoříte samostatný adresář, zkopírujete všechny závislosti programu do nového adresáře a poté spustíte příkaz chroot. To umožňuje programu správně fungovat, aniž by měl přístup k základnímu systému souborů.
chrootování programu je skvělý způsob, jak otestovat jeho spolehlivost v bezpečném prostoru, aniž by došlo ke změně skutečných systémových souborů. Kromě toho můžete také snížit bezpečnostní riziko způsobené kompromitovaným balíčkem, protože v chrootovaném prostředí nebude kompromitovaný balíček schopen přistupovat a upravovat citlivé systémové soubory.
Program bude moci přistupovat a prohlížet pouze soubory importované do chrootovaného adresáře, jinak známého jako "chroot vězení". Tím se zabrání tomu, aby program a jeho podprocesy zasahovaly do základního systému.
Co je chroot vězení?
Chroot vězení je izolované prostředí, kde jsou chroot programy umístěny a jsou spouštěny. Termín chroot jail je odvozen z konceptu, že proces a jeho dílčí procesy uvnitř chrootovaného prostředí nemají žádný přístup nebo viditelnost k základnímu souborovému systému a jsou uvězněni v mezích chrootu s předem určeným zdroje.
Nyní, když je vám koncept chroot jasný, pojďme si to vyzkoušet a naučit se, jak vytvořit chroot jail a spawnovat v něm procesy.
Jak vytvořit chrootovou věznici a spouštět v ní programy
Chroot vězení je v podstatě adresář, který obsahuje všechny požadované prostředky, soubory, binární soubory a další závislosti, které by program potřeboval ke správnému fungování.
Na rozdíl od běžného prostředí Linuxu je však prostředí chroot jail vysoce omezené a program nemůže přistupovat k externím nebo dalším souborům a systémovým prostředkům.
Chcete-li například spustit shell Bash ve vězení chroot, museli byste zkopírovat binární soubor Bash a všechny jeho závislosti do adresáře chroot.
Zde jsou kroky k vytvoření chroot jail a vytvoření Bash shellu:
- Aby program úspěšně běžel, musíte zkopírovat všechny jeho závislosti do chrootovaného adresáře. Pojďme najít binární soubor, v tomto případě Bash, a umístění všech jeho závislostí pomocí příkazů which a ldd:
který bash
ldd /usr/bin/bash - Nyní, když znáte umístění binárního souboru a jeho závislosti, zkopírujte je do adresáře, který chcete změnit na chroot vězení. Pomocí příkazu mkdir vytvořte potřebné adresáře a pomocí příkaz cp, zkopírujte všechny soubory do odpovídajících adresářů:
mkdir bin lib lib64 && cp -r /lib/ * ./lib && cp -r /lib64/* /lib64/ && cp /bin/bash /bin/
- Nakonec, když je program a jeho závislosti zkopírovány, můžete spustit příkaz chroot se zvýšenými oprávněními pomocí předpony sudo, abyste vytvořili prostředí chroot ve zvoleném adresáři. Ve výchozím nastavení vytvoří shell Bash. Zde je příkaz k zadání:
název_adresáře sudo chroot
To jsou všechny kroky k vytvoření chrootového vězení a spuštění programu v něm.
Jak se vymanit z chrootového vězení
Chroot jail jsou sice dobré pro testování nestabilního softwaru, ale jsou také užitečné při práci s připojením SSH, protože chrootování připojených uživatelů je jedním z mnoha způsoby, jak zabezpečit váš server SSH.
Na druhou stranu, pokud jste penetrační tester a přihlásili jste se na server SSH svého cíle, zjištění, že jde o chrootované prostředí, může být frustrující a cítit se jako slepá ulička.
Existuje však mnoho způsobů, jak uniknout z nesprávně nakonfigurovaného chroot vězení, některé vyžadují znalosti programování v jazyce C, zatímco jiné lze automatizovat pomocí nástrojů. Několik jednoduchých způsobů chroot escape je:
- Vnořená chroot volání
- Vnořená chroot volání s uloženým deskriptorem souboru
- Metoda Mount root
- procfs uniknout
- ptrace útěk
Pamatujte, že k provedení chroot escape pomocí kterékoli z těchto metod budete muset mít v systému eskalovaná oprávnění. Další informace o těchto únikových metodách naleznete na adrese úložiště GitHub chw00t, nástroj pro automatizaci chroot escape.
Nyní víte vše o chrootu v Linuxu
Nyní, když víte, co je chroot, jak funguje a jak jej implementovat, měli byste být schopni bez námahy používat sandbox aplikace z terminálu. Mějte na paměti, že, jak víte, existuje několik způsobů, jak se vymanit z chrootovaného prostředí.
To ukazuje, že chroot nebyl v žádném případě navržen tak, aby byl implementován jako bezpečnostní prvek. Chroot byste tedy měli používat s velkou opatrností, protože nesprávná konfigurace se může vymstít a ohrozit bezpečnost vašeho systému.
Nejlepší je držet se specializovaných řešení sandboxingu, jako je kontejnerizační software nebo virtuální stroje. Oba se soustředí na sandboxing a zabezpečení, takže pokud ve městě nenastane nový zero-day, nemusíte se starat o bezpečnost a integritu svého systému.
Pokud si nejste jisti, který zvolit mezi kontejnerizačním a virtualizačním softwarem, měli byste vyzkoušet oba a sami uvidíte, který z nich je lepší.