Funcionalmente, nada. Literalmente tudo o que a chamada chroot()
faz é atualizar onde o kernel ancora a resolução do caminho para o seu processo. Em particular, a menos que você também deixe cair privilégios de root, você ainda pode acessar /proc
e /sys
(porque você pode fazer as chamadas de sistema mount()
, nenhum binário externo necessário), você ainda pode acessar nós de dispositivo (você pode basta criá-los com a chamada do sistema mknod()
, novamente sem necessidade de binário externo) e realmente fazer praticamente tudo o que você puder imaginar.
Se você eliminar privilégios de root logo após entrar no chroot (como a maioria dos aplicativos bem comportados), você ainda pode fazer qualquer coisa que você possa fazer no contexto do usuário, desde que não precise de programas ou bibliotecas externas. que não estão no ambiente chroot.
Note, entretanto, que, mesmo assim, um chroot é praticamente zero de valor prático de segurança. É realmente realmente fácil de escapar de um chroot através de uma grande variedade de mecanismos (sério, apenas pesquise 'escape do chroot' no seu mecanismo de busca favorito, e você encontrará resultados listando pelo menos meia dúzia de métodos ). Tudo o que é necessário para explorar isso em qualquer aplicativo arbitrário é uma vulnerabilidade ACE. Na verdade, chroot()
não era originalmente destinado à segurança, era (e ainda é) uma ferramenta de desenvolvedores destinada a permitir o teste de novos softwares em um ambiente isolado (entre outras coisas, atualmente é mais usado para fornecer um construir ambiente em sistemas automatizados de construção e CI).