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

O PaX é um patch para kernel que vem para acrescentar dezenas de melhorias ao sistema operacional no que diz respeito segurança. Veremos quais as principais caracteristicas deste fantástico sistema, como ele atua, suas principais features e mostraremos alguns testes realizados mostrando sua eficácia em proteger o buffer do nosso box Linux. Enjoy!

[ Hits: 65.148 ]

Por: Anderson L Tamborim em 05/06/2004 | Blog: http://y2h4ck.wordpress.com


PaX: prova de fogo



Testando o PaX


Vamos agora testar o nosso PaX para ver se ele realmente consegue nos fornecer uma segurança melhor contra possíveis tentativas de exploração.

Primeiro teste:
Um pequeno script vulnerável a stack overflow, vamos rodar o exploit para tentar obter os privilégios do daemon vulnerável, que esta setado como suid (uid=0).

$ ls -la
-rwsr-xr-x    1 root     root         8424 Mar  9 03:27 vuln*
$ ./exploit
Usage: ./exploit <vuln> <addr_to_buffer>
$ ./vuln
0x5d952570
Segmentation fault

Como podemos ver, o programa vulnerável nos fornece o seu stack point. Agora vamos tentar usar esse addr para explorar o programa e obter o tão cobiçado uid=0:

$ ./exploit ./vuln 0x5d952570
0x5e3ca360
Killed

Bingo, como vemos o script que estava tentando explorar o daemon vulnerável foi "Killado" antes de cumprir o seu objetivo. Pelo visto o PaX realmente cumpriu o seu prometido. Vamos dar uma olhada nos logs que o PaX gerou no momento em que detectou a tentativa de escrita no addr_buffer:

# tail -4 /var/log/messages
Jun 5 08:31:55 unsekurity kernel: PAX: execution attempt in: <NULL>,
00000000-00000000 00000000
Jun 5 08:31:55 unsekurity kernel: PAX: terminating task:
/exploits/lab/vuln-mmap(vuln-mmap):2295, uid/euid: 0/0, PC: 5d952570, SP:
5e3ca3d0
Jun 5 08:31:55 unsekurity kernel: PAX: bytes at PC: 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00

Como vimos acima ele mostra o que o programa tentou fazer:

PAX: execution attempt in: <NULL>,
00000000-00000000 00000000

Mostra onde foi encontrado o erro:

Jun 5 08:31:55 unsekurity kernel: PAX: terminating task:
/exploits/lab/vuln-mmap(vuln-mmap):2295, uid/euid: 0/0, PC: 5d952570, SP:
5e3ca3d0

Como podemos ver ele nos deixa bem informados sobre atividades ilícitas em nosso servidor.

Bom, vamos agora verificar outros tipos de exploração que poderiam ser realizadas em um kernel normal.

Como todos sabem a versão da kernel 2.4.24 está vulnerável a um bug na função do_munmap() do_mrepmap(), que causa elevação de privilégios no sistema vulnerável.

Vamos fazer um teste desse kernel normal:

$ uname -r
2.4.24 $ ./mrpmap_exploit
[+] Kernel 2.4.24 vulnerable: YES exploitable YES
** 0x5e3ca360
** 0x5d952570

# id
uid=0(root); gid=0(root); group=0(root)

Como vimos o kernel foi comprometido e nos deu o que tanto queríamos: privilégios totais no sistema Linux.

Agora faremos o mesmo teste com o mesmo kernel, porém com o PaX agregado a ele e veremos se mesmo com a vulnerabilidade exposta ele vai segurar a tentativa de comprometimento.

$ ./mrpmap_exploit
Killed

Logo de cara ele matou a execução do exploit, porque antes de executar qualquer verificação ele faz um alocamento de memória que o PaX não permite, isso nos da a proteção contra a exploração.

Como podemos ver o uso de ferramentas como PaX nos dá uma certa segurança e nos deixa mais leves para não precisarmos atualizar daemons vulneráveis assim tão prontamente, porque como vimos às explorações tornam-se extremamente difíceis. Estive fazendo testes no kernel com PaX desde a versão 2.4.24 (estou na 2.4.26) e não obtive sucesso em nenhum tipo de exploração dentro do kernel protegido.

Se quiser pode tentar algumas técnicas que você achar interessante, as mais avançadas ele barra tranqüilamente. Outra coisa que chama a atenção é quanto ao user space para usuários sem altos privilégios, ele retira totalmente os buffers em desuso fazendo com que qualquer tentativa de alocação por parte de usuários comuns seja barrada.

Caso você como root queira liberar algum binário para executar que o PaX esteja bloqueando, basta utilizar:

# chpax -sp <binário>

Então ele poderá executar normalmente. Tive alguns problemas com o wine, mas nada que com um pouco de estudo e treino não tivesse resolvido. Caso vocês também tenham tentem ler a documentação oficial do projeto PaX em:
A documentação esta toda em inglês, porém lá existe um txt detalhando cada uma das funções que existem no PaX, desde seu designer, como também sua aplicação interna na kernel space.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Principais características do PaX
   3. Adicionando o PaX ao nosso sistema
   4. PaX: prova de fogo
   5. Utilizando o paxtest
   6. Considerações finais
Outros artigos deste autor

Race condition - vulnerabilidades em suids

Segurança no SSH via plugins da PAM

Seguraça extrema com LIDS

Jails em SSH: Montando sistema de Shell Seguro

Snort avançado: Projetando um perímetro seguro

Leitura recomendada

Instalando Apache, MariaDB e PHP com HTTPS no Arch Linux

Exploração de Falhas em Servidores FTP

Criando VPN com o PFSense

Matriz <-> Filial com o OpenVPN

Incron - supervisionando sistemas de arquivos

  
Comentários
[1] Comentário enviado por cvs em 05/06/2004 - 09:47h

essas ultimas versoes do grsecurity ja estao com o PaX integradas, se bem que o grsecutiry esta com os dias contados por falta de patrocinio.

[2] Comentário enviado por removido em 05/06/2004 - 19:27h

Meus parabens, vc tem um conhecimento sobre GNU/Linux em materia de seguranca impar, e bom ter um
perito como vc no nosso grupo

[3] Comentário enviado por ryu em 05/06/2004 - 22:37h

y2h4ck continue escrevendo mais artigos pq os seus detonam

[4] Comentário enviado por naoexistemais em 06/06/2004 - 20:24h

Caro Anderson,

Continue assim pq os invejos estão doidos..rsrsrsrs

Parabens..

[5] Comentário enviado por fcc em 07/06/2004 - 09:13h

Meus parabens...otimo artigo...continue sempre assim q vc vai longe...


[ ]'s

[6] Comentário enviado por cvs em 07/06/2004 - 09:15h

cara, esse wrochal tem problemas mentais... só pode... que isso... heheheeh

[7] Comentário enviado por agk em 07/06/2004 - 09:41h

Parabéns, muito bom o artigo.

[8] Comentário enviado por andreguerra em 07/06/2004 - 10:21h

Amigo y2h4ck,

Muito bom seu artigo, realmente é o tipo da informação dificil de encontrar, principalmente no nível e com a objetividade que vc escreve.

Parabéns,

André

[9] Comentário enviado por y2h4ck em 07/06/2004 - 18:36h

Bom o Servidor onde o Pax esta hospedado (grsecurity) parece que esta fora do ar por tempo indeterminado.
Todo caso estou disponibilizando uma copia do Patch e do Chpax
que sao necessarios para completar a instalacao:

http://rootsec.ath.cx/~spawn/pax.tar.gz

=]
Enjoy

[]s a todos


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts