Jails em SSH: Montando sistema de Shell Seguro

Neste artigo vamos aprender a criar sistemas de Jail em SSH e assim separar recursos a usuários shell de acordo com suas necessidades, criando um ambiente secundário, o que aumenta a segurança na disponibilização de acessos remotos a terceiros.

[ Hits: 68.015 ]

Por: Anderson L Tamborim em 19/02/2008 | Blog: http://y2h4ck.wordpress.com


Projeto sob fogo: Testando o nosso sistema Jail



Agora que temos nosso Jail pronto, vamos nos autenticar como o usuário bandit e ver o que acontece. :-)

# ssh -l bandit 192.168.106.129
bandit@localhost's password:
Linux mephisto 2.6.18-openvz-686 #1 SMP Tue Apr 10 20:28:40 CEST 2007 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Feb 19 16:01:58 2008 from 192.168.106.1
bandit@mephisto:~$

// Até aqui tudo aparentemente normal. É como se tivéssemos logado em qualquer servidor Debian da vida.

bandit@mephisto:~$ id
bash: id: command not found

// Oops o comando id não existe +_+
// Agora percebemos que realmente estamos limitados :D

bandit@mephisto:~$ uname -a
bash: uname: command not found
bandit@mephisto:~$ pwd
/home/bandit
bandit@mephisto:~$ ps
bash: ps: command not found
bandit@mephisto:~$ netstat -ntpl
bash: netstat: command not found
bandit@mephisto:~$

bandit@mephisto:~$ scp
usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 [...] [[user@]host2:]file2

// Temos a disposição apenas o SCP que adicionamos no momento em que criamos a Jail.

bandit@mephisto:~$ cd /
bandit@mephisto:/$ ls -la
total 36
drwxr-xr-x 9 root root 4096 Feb 19 20:51 .
drwxr-xr-x 9 root root 4096 Feb 19 20:51 ..
drwxr-xr-x 2 root root 4096 Feb 19 20:41 bin
drwxr-xr-x 2 root root 4096 Feb 19 21:04 dev
drwxr-xr-x 5 root root 4096 Feb 19 21:01 etc
drwxr-xr-x 3 root root 4096 Feb 19 20:51 home
drwxr-xr-x 3 root root 4096 Feb 19 20:41 lib
drwxr-xr-x 5 root root 4096 Feb 19 20:41 usr
drwxr-xr-x 3 root root 4096 Feb 19 20:41 var
bandit@mephisto:/$

Como podem ver o usuário enxerga somente o Jail e não o nosso sistema real. Ele vive em um ambiente totalmente separado. Isto ajuda muito pois limitado assim ele não consegue acessar o root do sistema nem executar programas nocivos como exploits.

Como podem ver a versão do kernel que estou utilizando é a 2.6.18 com o patch do openvz para virtualização. Esta versão é vulnerável a falha de escalamento de privilégios em kernel na função vmsplice().

E se nosso usuário estiver mal intencionado e tentar exploitar nosso servidor para virar root e assim sair do Chroot()?

bandit@mephisto:~$ ./vmsplice
-----------------------------------
 Linux vmsplice Local Root Exploit
 By qaaz
-----------------------------------
[+] mmap: 0x0 .. 0x1000
[+] page: 0x0
[+] page: 0x20
[+] mmap: 0x4000 .. 0x5000
[+] page: 0x4000
[+] page: 0x4020
[+] mmap: 0x1000 .. 0x2000
[+] page: 0x1000
[+] mmap: 0xb7de8000 .. 0xb7e1a000
Segmentation fault
bandit@mephisto:~$

Segmentation fault... porque ? Porque o sistema não tem acesso as systemcalls que este exploit precisa para executá-lo. Nossa jail então é algo que vai nos deixar bem confortáveis em relação à algumas explorações.

Para deixar frisado este exploit acima é totalmente funcional e ele executado em um sistema comum, faria o atacante ganhar acesso de root.

O ambiente chroot() mostrou que funciona muito bem. Você pode utilizá-lo em larga escala de acordo com suas necessidades e moldá-lo de forma que consiga implantar com sucesso todos os tipos de aplicativos em diferentes Jails.

Página anterior     Próxima página

Páginas do artigo
   1. Prólogo
   2. Introdução - Jail Chroot e funcionalidades
   3. Iniciando o Projeto: Recursos necessários
   4. Montando a estrutura de Jail
   5. Projeto sob fogo: Testando o nosso sistema Jail
   6. Considerações finais
Outros artigos deste autor

Análise Forense - Aspectos de perícia criminal

PHLAK :: [P]rofessional [H]acker's [L]inux [A]ssault [K]it

Análise Passiva: Analisando seu tráfego de maneira segura

PaX: Solução eficiente para segurança em Linux

Security Hacks: Linux & BSD

Leitura recomendada

Projeto Sharingan

Configurando um servidor de logs simples

Entendendo SQL Injection

Introdução ao Anonimato na Web - Web Anonimity

Protegendo seu Linux de ataques de brute force via ssh

  
Comentários
[1] Comentário enviado por alpkaiser em 20/02/2008 - 11:45h

Muito bom.

Mais uma vez um ótimo artigo que vem ajudar em muito na implementação de segurança em servidores Linux.

Parabéns.

[2] Comentário enviado por capitainkurn em 20/02/2008 - 11:49h

Ótimo artigo! Aliás gosto muito de seus artigos e frequentemente costumo tirar umas colas.
Já está em meus favoritos.

Parabéns!

[3] Comentário enviado por marcaoguitarra em 20/02/2008 - 12:32h

Bonzinho!!!
heheehe
muito bom cara, eu já tinha feito um apache em chroot mas não tão bem configurado assim, gostei desse jaill_kit...

[4] Comentário enviado por kalib em 20/02/2008 - 14:46h

A primeira coisa q me veio a cabeça foi um honey pott... rsrsrs
Parabéns pelo artigo camarada...o conteúdo está excelente, didático...
O conteúdo é bastante interessante...ainda não conhecia essa prática.
Parabéns novamente pelo excelente trabalho. ;]

[5] Comentário enviado por tinti em 21/02/2008 - 09:35h

Vc deitou cara!!! Muito bom!!!

[6] Comentário enviado por maran em 21/02/2008 - 21:12h

Assim eu fiquei pensando aqui né em como fazer um comentário, e cara não precisa dizer nada, simplesmente perfeito...

Abraços.

[7] Comentário enviado por removido em 25/02/2008 - 12:02h

Simplesmente fantástico!! Parabéns, com certeza utilizar Jails e Chroot é mais uma forma de mantermos nossos servicos mais seguros.

Continue postando novos artigos e utilizando a mesma didática.

Abracos.

[8] Comentário enviado por rfmartins em 01/03/2008 - 19:09h

fiz tudo que esta notutorial, mas quando crie o usuario, ele nao aparece no home.
verifiquei o /etc/passwd e o usuario esta da sequinte forma:

bandit:x:1002:1002::/home/bandit:/bin/sh

como posso ressolver isto ??

[9] Comentário enviado por danimontelo em 03/12/2009 - 12:13h

Excelente tutorial! Ajudou-me bastante em tornar mais seguro o acesso remoto aos servidores que administro.

Grata e abraços, Dani

[10] Comentário enviado por carlosparisotto em 25/08/2014 - 09:26h

Primeiramente, muito bom o artigo.
Estou usando essa ferramenta há um tempo já, porém agora estou precisando fazer um SSH sem senha
para um desses usuários enjaulados e não estou conseguindo. Sabe se é possível? Se já conseguiste
fazer, favor passar o procedimento, pois estou fazendo o mesmo procedimento que para um usuário
comum e não está funcionando. Obrigado

[11] Comentário enviado por carlosparisotto em 25/08/2014 - 11:11h

Opa, descobri que o problema na verdade é o meu SELinux, então já entra em outro tópico. Vou verificar. Valeu!


Contribuir com comentário