O comando chroot cria um ambiente isolado no Linux alterando o diretório raiz de todos os processos em execução.
Você está procurando executar aplicativos ou serviços em um espaço isolado no Linux? Ou talvez você queira testar e depurar um aplicativo sem que ele interfira no restante do sistema? Nesse caso, você vai querer aprender sobre o chroot, um poderoso mecanismo embutido no Linux que permite criar um ambiente separado dentro do seu sistema.
Vamos explorar o chroot em detalhes, aprender sobre seus benefícios, casos de uso, como configurá-lo em um sistema Linux e, se necessário, como escapar dele.
O que é chroot no Linux?
chroot ou change-root é indiscutivelmente uma das formas mais fáceis e antigas de software de conteinerização que permite ao usuário colocar aplicativos e serviços em sandbox com segurança. Sandboxing, em termos de computação, é o processo de isolar um programa em um espaço confinado com recursos predefinidos.
Se você está familiarizado com Docker e como funciona, você pode pensar no chroot como uma versão bastante simplificada dele. O chroot funciona alterando o diretório raiz de um programa, restringindo o acesso e a visibilidade e, assim, fornecendo uma camada adicional de isolamento e segurança.
Essencialmente, você cria um diretório separado, copia todas as dependências do programa para o novo diretório e, em seguida, executa o comando chroot. Isso permite que o programa funcione corretamente sem ter acesso ao sistema de arquivos base.
Fazer o chroot de um programa é uma ótima maneira de testar sua confiabilidade em um espaço seguro sem alterar os arquivos do sistema real. Além disso, você também pode reduzir o risco de segurança causado por um pacote comprometido, pois em um ambiente chroot, o pacote comprometido não poderá acessar e modificar arquivos confidenciais do sistema.
O programa só poderá acessar e visualizar arquivos importados para o diretório chroot, também conhecido como "chroot jail". Isso evita que o programa e seus subprocessos interfiram no sistema básico.
O que é uma prisão chroot?
Uma prisão chroot é um ambiente isolado onde os programas chroot residem e são executados. O termo chroot jail é derivado do conceito de que o processo e seus subprocessos dentro do ambiente chroot não têm acesso ou visibilidade ao sistema de arquivos base e estão presos dentro dos limites do chroot com predeterminados recursos.
Agora que o conceito de chroot está claro para você, vamos colocar a mão na massa e aprender como você pode criar uma jaula chroot e gerar processos nela.
Como criar um Jail chroot e executar programas nele
Uma prisão chroot é essencialmente um diretório que contém todos os recursos necessários, arquivos, binários e outras dependências que um programa precisaria para funcionar corretamente.
No entanto, ao contrário de um ambiente Linux normal, o ambiente do chroot jail é altamente restrito e o programa não pode acessar arquivos externos ou adicionais e recursos do sistema.
Por exemplo, para executar o shell Bash em uma prisão chroot, você precisaria copiar o binário Bash e todas as suas dependências para o diretório chroot.
Aqui estão as etapas para criar uma prisão chroot e gerar um shell Bash:
- Para que um programa seja executado com sucesso, você precisa copiar todas as suas dependências para o diretório chrooted. Vamos encontrar o binário, neste caso, Bash, e a localização de todas as suas dependências usando os comandos which e ldd:
qual bash
ldd /usr/bin/bash - Agora que você conhece os locais do binário e suas dependências, copie-os para o diretório que deseja transformar em uma cadeia chroot. Usando o comando mkdir crie os diretórios necessários e usando o comando cp, copie todos os arquivos nos diretórios correspondentes:
mkdir bin lib lib64 && cp -r /lib/ * ./lib && cp -r /lib64/* /lib64/ && cp /bin/bash /bin/
- Por fim, com o programa e suas dependências copiadas, você pode executar o comando chroot com privilégios elevados usando o prefixo sudo para gerar o ambiente chroot no diretório escolhido. Por padrão, ele gerará um shell Bash. Aqui está o comando para digitar:
sudo chroot nome_do_diretório
Essas são todas as etapas para gerar uma prisão chroot e executar um programa dentro dela.
Como sair de uma prisão chroot
Embora as prisões chroot sejam boas para testar software instável, elas também são úteis ao lidar com conexões SSH, pois o chroot de usuários conectados é um dos muitos maneiras de proteger seu servidor SSH.
Por outro lado, se você é um testador de penetração e se conectou ao servidor SSH de seu alvo, descobrir que é um ambiente chroot pode ser frustrante e parecer um beco sem saída.
No entanto, existem várias maneiras de escapar de uma prisão chroot mal configurada, algumas exigindo habilidades de programação C, enquanto outras podem ser automatizadas com ferramentas. Algumas maneiras fáceis de escapar do chroot são:
- Chamadas chroot aninhadas
- Chamadas chroot aninhadas com descritor de arquivo salvo
- Montar método raiz
- fuga procfs
- fuga ptrace
Observe que, para executar o escape chroot usando qualquer um desses métodos, você precisará ter privilégios escalados no sistema. Saiba mais sobre essas metodologias de fuga acessando repositório GitHub do chw00t, uma ferramenta de automação de escape chroot.
Agora você sabe tudo sobre o chroot no Linux
Agora que você sabe o que é o chroot, como ele funciona e como implementá-lo, você deve ser capaz de criar sandbox de aplicativos sem esforço a partir do terminal. Lembre-se de que, como você sabe, existem várias maneiras de sair de um ambiente chroot.
Isso mostra que o chroot não foi projetado para ser implementado como um recurso de segurança. Portanto, você deve usar o chroot com muito cuidado, pois uma configuração inadequada pode acabar saindo pela culatra e comprometer a segurança do seu sistema.
É melhor se ater a soluções de sandbox dedicadas, como software de conteinerização ou máquinas virtuais. Ambos estão centrados em sandbox e segurança, então, a menos que haja um novo dia zero na cidade, você não precisa se preocupar com a segurança e a integridade do seu sistema.
Se você não tiver certeza de qual escolher entre o software de conteinerização e de virtualização, experimente os dois e veja por si mesmo qual é o melhor.