Duvidas sobre Chroot

Iniciado por pentestbox, 08 de Outubro de 2015, 14:35

tópico anterior - próximo tópico

pentestbox

Gostaria de saber pessoal, como posso tornar o meu sistema linux mais seguro com chroot,  eu andei lendo sobre o chroot que faz enjaulamento mas não entendi muito bem como funciona esse comando, e como fazer para aplicar no meu sistema, para tornar mais seguro gostaria de saber com vcs, alguem que possa esclarecer essa minha duvida.
Desde ja Agradeço.

Felix

Citação de: pentestbox online 08 de Outubro de 2015, 14:35
Gostaria de saber pessoal, como posso tornar o meu sistema linux mais seguro com chroot,  eu andei lendo sobre o chroot que faz enjaulamento mas não entendi muito bem como funciona esse comando, e como fazer para aplicar no meu sistema, para tornar mais seguro gostaria de saber com vcs, alguem que possa esclarecer essa minha duvida.
Desde ja Agradeço.

E qual seria a sua dúvida exatamente?

zekkerj

O chroot cria um processo que acredita piamente que o diretório indicado é a raiz do sistema de arquivos. Essa crença é tão forte que ele fica preso nesse diretório, incapaz de acessar qualquer ponto acima da árvore.

Assim, digamos que vc tenha em sua pasta home dois diretórios chamados "jaula" e "quintal". Daí vc faz um "sudo chroot jaula", e dentro da nova sessão criada, executa um "pwd". O resultado vai ser "/", apesar de, na verdade, você estar em "/home/usuario/jaula".
Além disso, se executar "cd ../quintal", vai receber a informação de que "../quintal" não existe, já que pra ele isso é a mesma coisa que "/quintal". Ou seja, o processo não vai permitir que você acesse qualquer diretório fora do ponto onde fez a operação de "chroot".

Como essa operação "prende" você dentro de um diretório, um processo que está executando assim é dito "enjaulado". A associação é mesmo de duplo sentido, pois isso é usado pra processos que são, assim, tipo "feras" que não podem andar livres pelo sistema. Tipo, servidor DNS, dhcp, ftp, e outros processos que costumam ser explorados por hackers.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

zekkerj

Ah, antes que eu esqueça... dois detalhes essenciais: primeiro, só o root pode criar processos chroot.
Segundo, muito provavelmente você não vai conseguir testar o comando. O motivo é que como o processo fica enjaulado, ele não vai conseguir encontrar arquivos essenciais pra abrir uma sessão de comandos, a menos que você os copie para diretórios predefinidos dentro da "jaula". O primeiro e principal exemplo é o "bash".
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

pentestbox

Citação de: zekkerj online 08 de Outubro de 2015, 17:14
O chroot cria um processo que acredita piamente que o diretório indicado é a raiz do sistema de arquivos. Essa crença é tão forte que ele fica preso nesse diretório, incapaz de acessar qualquer ponto acima da árvore.

Assim, digamos que vc tenha em sua pasta home dois diretórios chamados "jaula" e "quintal". Daí vc faz um "sudo chroot jaula", e dentro da nova sessão criada, executa um "pwd". O resultado vai ser "/", apesar de, na verdade, você estar em "/home/usuario/jaula".
Além disso, se executar "cd ../quintal", vai receber a informação de que "../quintal" não existe, já que pra ele isso é a mesma coisa que "/quintal". Ou seja, o processo não vai permitir que você acesse qualquer diretório fora do ponto onde fez a operação de "chroot".

Como essa operação "prende" você dentro de um diretório, um processo que está executando assim é dito "enjaulado". A associação é mesmo de duplo sentido, pois isso é usado pra processos que são, assim, tipo "feras" que não podem andar livres pelo sistema. Tipo, servidor DNS, dhcp, ftp, e outros processos que costumam ser explorados por hackers.

Me diga uma coisa amigo, uma vez dentro diretório enjaulado, como eu faria então para sair de dentro dele?
Também gostaria de saber se dentro da jaula, eu conseguiria ou não ir para outros diretórios como o /etc ou /var por exemplo, ou simplesmente ficaria preso no diretório enjaulado, como se só existisse ele no sistema e nada mais?
Esse tipo de enjaulamento poderia ser útil em pastas compartilhadas? Pq penso q se alguém acessar um diretório compartilhado no meu sistema só ficará preso nele com esse enjaulamento e assim em hipótese nenhuma conseguiria ter acesso a outros diretorios.

zekkerj

Citação de: pentestbox online 11 de Outubro de 2015, 22:47
Me diga uma coisa amigo, uma vez dentro diretório enjaulado, como eu faria então para sair de dentro dele?

Quem fica preso na "jaula" é o processo, tipo, o servidor ftp, ou o servidor DNS, não você, não o sistema todo. Esse processo não vai poder fazer absolutamente nada fora da jaula, até porque ele não sabe que ela existe.

Citar
Também gostaria de saber se dentro da jaula, eu conseguiria ou não ir para outros diretórios como o /etc ou /var por exemplo, ou simplesmente ficaria preso no diretório enjaulado, como se só existisse ele no sistema e nada mais?

O processo fica preso, ele não consegue ver nada que não esteja dentro desse diretório. Pra que o processo possa acessar diretórios como /etc ou /var, eles têm que ser criados ou copiados pra dentro do diretório.

Citar
Esse tipo de enjaulamento poderia ser útil em pastas compartilhadas? Pq penso q se alguém acessar um diretório compartilhado no meu sistema só ficará preso nele com esse enjaulamento e assim em hipótese nenhuma conseguiria ter acesso a outros diretorios.

Como eu disse antes, quem fica preso na jaula é o processo. Se esse processo estiver oferecendo algum serviço --- por exemplo, um compartilhamento ---, o usuário que utilizar esse compartilhamento vai ver os arquivos compartilhados que estiverem dentro da jaula.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

pentestbox

Citação de: zekkerj online 12 de Outubro de 2015, 11:47
Citação de: pentestbox online 11 de Outubro de 2015, 22:47
Me diga uma coisa amigo, uma vez dentro diretório enjaulado, como eu faria então para sair de dentro dele?

Quem fica preso na "jaula" é o processo, tipo, o servidor ftp, ou o servidor DNS, não você, não o sistema todo. Esse processo não vai poder fazer absolutamente nada fora da jaula, até porque ele não sabe que ela existe.

Citar
Também gostaria de saber se dentro da jaula, eu conseguiria ou não ir para outros diretórios como o /etc ou /var por exemplo, ou simplesmente ficaria preso no diretório enjaulado, como se só existisse ele no sistema e nada mais?



O processo fica preso, ele não consegue ver nada que não esteja dentro desse diretório. Pra que o processo possa acessar diretórios como /etc ou /var, eles têm que ser criados ou copiados pra dentro do diretório.

Citar
Esse tipo de enjaulamento poderia ser útil em pastas compartilhadas? Pq penso q se alguém acessar um diretório compartilhado no meu sistema só ficará preso nele com esse enjaulamento e assim em hipótese nenhuma conseguiria ter acesso a outros diretorios.

Como eu disse antes, quem fica preso na jaula é o processo. Se esse processo estiver oferecendo algum serviço --- por exemplo, um compartilhamento ---, o usuário que utilizar esse compartilhamento vai ver os arquivos compartilhados que estiverem dentro da jaula.


Entendi, olha aqui eu estou utilizando o comando chroot, mas esta dando erro, eu criei um diretório chamado jaula, que esta dentro do meu diretŕoio /home para fazer o teste com o chroot, estou utilizando o comando abaixo:

$ sudo chroot jaula

me aparece a seguinte mensagem de erro:

chroot: failed to run command '/bin/bash': No such file or directory

saberia me dizer como eu poderia resolver esse problema?
eu ate copiei o arquivo do bash para dentro do meu diretório jaula, mas o problema continua.

zekkerj

Sim, é pra acontecer isso mesmo. Vc copiou o executável, mas não as bibliotecas dele (pra ver quais, use o comando "ldd /bin/bash", veja só o monte de bibliotecas que vc precisa só pra executar um "bash").
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

pentestbox

Citação de: zekkerj online 12 de Outubro de 2015, 20:22
Sim, é pra acontecer isso mesmo. Vc copiou o executável, mas não as bibliotecas dele (pra ver quais, use o comando "ldd /bin/bash", veja só o monte de bibliotecas que vc precisa só pra executar um "bash").

Entendi, eu andei pesquisando mais e encontrei uma ferramenta interessante chamada debootstrap, pelo que parece ela baixa a base de dados do Debian e coloca em uma pasta, e depois eu utilizo o chroot, acho q fazendo isso, ja deve copiar o bash e todos os arquivos ne, so não sei se essa ferramenta so serve para baixar os arquivos do Debian, ou também daria pra baixar os do Ubuntu, eu ainda não testei essa ferramenta, pretendo testar pra ver se funciona e assim consigo fazer o "enjaulamento".

zekkerj

Sim, tem algumas ferramentas pra criar a instalação base de um sistema, e espera-se que elas funcionem em modo chroot pra criar um diretório com a instalação base.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

zekkerj

Talvez haja uma forma mais simples de vc fazer esse teste... há um aplicativo que pega um executável baseado em bibliotecas compartilhadas e faz uma re-ligação dele, gerando um novo executável, mas com todas as bibliotecas estáticas (e  muito, muito maior, por causa disso). Normalmente é esse tipo de executável que vc usa numa instalação chroot mínima, por ser muito mais simples.

Vou pesquisar o nome e dou retorno.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

pentestbox

Blz brother, ve e me diz o nome então, eu agradeço.

zekkerj

Então... achei três aplicativos pra isso, dois eram proprietários, o terceiro ("Statifier") é open source, mas não faz parte dos repositórios do Ubuntu, pelo que eu pude ver.
http://statifier.sourceforge.net/
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

paulinho1971

Me metendo onde não sou chamado:

#!/bin/bash

#Manage Chroot
#
#Authors:
#  Bruno Goncalves Araujo <www.biglinux.com.br>
#
#License: GPLv2 or later
#################################################


#Check permission
if test $(id -u) != 0
then                 
    echo "Need root permission"
    exit 0                     
fi     


case "$1" in

    --mount)
    chroot $2 mount -t proc /proc proc
    chroot $2 mount -t sysfs sys /sys
    chroot $2 mount -t devpts /dev/pts /dev/pts
    ;;

    --umount)
    chroot $2 umount -l /dev/pts
    chroot $2 umount -l /sys
    chroot $2 umount -l /proc
    rm -f $2/usr/bin/bigchrootxephyr
    rm -f $2/usr/bin/bigchrootxephyr2
    ;;

    --xephyr)

    echo "#!/bin/bash

$4" > $2/usr/bin/bigchrootxephyr2

    echo "#!/bin/bash

export DISPLAY=:4
su $3 /usr/bin/bigchrootxephyr2" > $2/usr/bin/bigchrootxephyr
    chmod +x $2/usr/bin/bigchrootxephyr
    chmod +x $2/usr/bin/bigchrootxephyr2
    Xephyr -ac :4 &
    sleep 5
            chroot $2 bigchrootxephyr
    rm -f $2/usr/bin/bigchrootxephyr
    rm -f $2/usr/bin/bigchrootxephyr2
    ;;


    *)
    echo "Manage chroot

--mount Mount core example: --mount /media/hdxy
--umount Umount core example: --umount /media/hdxy
--xephyr Open chrooted with xephyr example: --xephyr /media/hdxy user \"kwin & synaptic\"
"
    ;;

esac


Mais ou menos isso?

Fonte: http://biglinux.googlecode.com/svn/trunk/jaunty/bigchroot/usr/bin/bigchroot

Espero não ter dito bobagens :(

T+

zekkerj

CitarMe metendo onde não sou chamado
E desde quando quem chega pra ajudar chega em hora errada? ;)
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D