Pular para o conteúdo

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.
Anderson L Tamborim y2h4ck
Hits: 68.802 Categoria: Linux Subcategoria: Segurança
  • Indicar
  • Impressora
  • Denunciar

Parte 5: 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.

   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

Análise passiva (parte 2)

OpenVZ: Virtualização para servidores Linux

Segurança no SSH via plugins da PAM

Security Hacks: Linux & BSD

Análise Forense - Aspectos de perícia criminal

Criptografia com Loop-AES

Iptables protege contra SYN FLOOD?

Nessus Portscanner

Metasploit Adobe Exploit

Teste de vulnerabilidades com OpenVAS 3.0

#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

Entre na sua conta para comentar.