Libsafe: Protegendo Linux contra Smashing Overflow

Neste artigo vamos conhecer a libsafe, uma biblioteca que é capaz de interceptar tentativas de ataques baseados em Stack Overflow. Vamos ver alguns resultados e também como é fácil tornar o Linux um pouco mais seguro.

[ Hits: 63.125 ]

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


Projeto sob-fogo: testando libsafe



Vamos realizar alguns testes para verificar se o libsafe está realmente protegendo o nosso sistema de stack overflows. Para isso vamos utilizar um pequeno código vulnerável a esse ataque:

// -----------vuln.c--------------------
/* Programa Bugado para teste Libsafe */

#include <stdio.h>
#include <stdlib.h>

main(int argc, char *argv[]) {
   char buffer[512];
   if(argc < 2){
      printf("Programa Piloto para teste Libsafe \n");
      printf("Funcionamento: %s <valor>\n",argv[0]);
      exit(0);
   }
   strcpy(buffer,argv[1]);
   printf("Valor Apresentado %s!!\n",buffer);
   return 0;
}

$ ./teste-overflow AAAAAAAAAAAAAA
Valor Apresentado AAAAAAAAAAAAAA!!

Como vocês podem ver, é um exemplo típico de programa vulnerável a explorações de stack overflow,primeiro vamos fazer o teste de explorar essa vulnerabilidade em uma máquina normal (sem ter o libsafe instalado):

$ ./teste-overflow `perl -e 'printf "A" x 530'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Segmention Fault - Core dumped

Como vocês viram, o programa bugado realmente foi explorado e obtivemos um crash passando mais parámetros do que ele realmente suporta em seu buffer.

Essa demonstração é trivial e foi usada apenas como exemplo, não irei demonostrar uma exploração para obtenção de shell porque não vem ao caso.

Agora vamos demonstrar oque acontece em nosso sistema que está sendo protegido pela libsafe?

$ ./teste-overflow `perl -e 'printf "A" x 530'`
Libsafe version 2.0.16
Detected an attempt to write across stack boundary.
Terminating /exploits/lab/teste-overflow.
    uid=0  euid=0  pid=5781
Call stack:  
    0x2ba7c871  /lib/libsafe.so.2.0.16
    0x2ba7c97a  /lib/libsafe.so.2.0.16
    0x80483f6   /exploits/lab/teste-overflow
    0x2baa5d12  /lib/i686/libc.so.6
Overflow caused by strcpy()
Killed

BINGO !!! :)

Viram só como a libsafe deu conta do recado, verificou que estava havendo uma exploração e killou o programa antes da exploração tornar-se realmente bem sucedida.

Vamos ver oque o Libsafe informou ao log:

# tail /var/log/messages Sep 16 17:04:31 RootSec libsafe.so[5781]: Libsafe version 2.0.16
Sep 16 17:04:31 RootSec libsafe.so[5781]: Detected an attempt to write across stack boundary.
Sep 16 17:04:31 RootSec libsafe.so[5781]: Terminating /exploits/lab/teste-overflow.
Sep 16 17:04:31 RootSec libsafe.so[5781]: uid=0 euid=0 pid=5781
Sep 16 17:04:31 RootSec libsafe.so[5781]: Call stack:
Sep 16 17:04:31 RootSec libsafe.so[5781]: 0x2ba7c871 /lib/libsafe.so.2.0.16
Sep 16 17:04:31 RootSec libsafe.so[5781]: 0x2ba7c97a /lib/libsafe.so.2.0.16
Sep 16 17:04:31 RootSec libsafe.so[5781]: 0x80483f6 /exploits/lab/teste-overflow
Sep 16 17:04:31 RootSec libsafe.so[5781]: 0x2baa5d12 /lib/i686/libc.so.6
Sep 16 17:04:31 RootSec libsafe.so[5781]: Overflow caused by strcpy()

Nos informou a hora do acontecimento e nos mostrou qual script ou programa tentou realizar a exploração no sistema.

Dentro da pasta "exploits", que vem junto ao pacote libsafe, vocês encontram vários exploits para vários tipos de explorações para várias funções diferentes. Aqui demonstramos apenas usando a função strcpy(), que é uma das mais vulneráveis.

Página anterior     Próxima página

Páginas do artigo
   1. Prólogo
   2. O que vem a ser libsafe?
   3. Instalação
   4. Projeto sob-fogo: testando libsafe
   5. Considerações finais
   6. APPEND - A (Links)
   7. APPEND B - Marketing ;)
Outros artigos deste autor

Race condition - vulnerabilidades em suids

Análise Forense - Aspectos de perícia criminal

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

Security Hacks: Linux & BSD

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

Leitura recomendada

Segurança Física (Parte 1)

Criptografar arquivos importantes no seu Linux

Protegendo seu servidor de e-mail Postfix

Wireshark - Artigo

Código Aberto já não é uma questão de gosto

  
Comentários
[1] Comentário enviado por reimassupilami em 06/12/2004 - 10:59h

bom dia linuxers...

seguinte, to começando a me aventurar pelo mundo do slackware, e confesso que estou apanhando um pouco... mas faz parte do aprendizado, né?

bem então gostaria que vocês me dessem umas dicas sobre onde baixar pacotes para o slack... pode ser?

no aguardo... falow...

[2] Comentário enviado por reimassupilami em 06/12/2004 - 11:00h

opa, foi mal... postei pergunta no espaço do coment... aiai...

foi malz ae... t+

[3] Comentário enviado por jllucca em 06/12/2004 - 11:20h

Aew,

cara o artigo ta excelente. Ficou muito bom pra só dar uma introdução ao que o libsafe é e os interessados se mexerem depois :p. Dá parte de links, me parece que o PDF é o mais interessante ^^ (so passei os olhos nele)

[]'s

[4] Comentário enviado por removido em 07/12/2004 - 00:31h

Rapaz, A-D-O-R-E-E-E-E-I-I-I...
Esse negócio de melhorar a segurança apenas instalando um programa sem precisar configurar mais nada é um must !!!

[5] Comentário enviado por cvs em 08/12/2004 - 16:49h

Bom, instalei aqui, testei o .c que esta sendo apresentado aqui... o resultado foi o seguinte.

bash-2.05b$ ./vun `perl -e 'printf "A" x 530'`
Libsafe version 2.0.16
Detected an attempt to write across stack boundary.
Terminating /home/thiago/libsafe-2.0-16/exploits/vun.
uid=1000 euid=1000 pid=3269
Call stack:
0xb7fe69c0 /lib/libsafe.so.2.0.16
0xb7fe6ab4 /lib/libsafe.so.2.0.16
0x804844e /home/thiago/libsafe-2.0-16/exploits/vun
0xb7ebc931 /lib/libc-2.3.2.so
Overflow caused by strcpy()
Killed

Certo... Testei de novo com outro xpl que veio com o pacote, o resultado...

bash-2.05b$ ./canary-exploit
This program tries to use printf("%n") to overwrite the
return address on the stack.
If you get a /bin/sh prompt, then the exploit has worked.
Press any key to continue...
sh-2.05b$

Ai, o xpl funcionou... o artigo está otimo e vou usar essa libsafe nos meus servidores, mas nem por isso vou relaxar... é seguro mas não é 100%... to esperando o proximo artigo... :D

[6] Comentário enviado por michelpereira em 15/10/2005 - 11:45h

Alguns programas não se comportam bem com a libsafe, o recomendado é executálos carregando a libsafe antes com o comando "LDPRELOAD=libsafe.so"

[7] Comentário enviado por andrentfs em 16/02/2006 - 12:27h

Realmente, sempre mostrando ser bom no que faz, parabéns, continue assim...

[8] Comentário enviado por todeschini em 02/10/2007 - 10:06h

aki vc encontra o libsafe

http://pubs.research.avayalabs.com/src/libsafe-2.0-16.tgz

[9] Comentário enviado por todeschini em 02/10/2007 - 10:11h

aki tem mais op do projeto
http://www.research.avayalabs.com/default.aspx?CurrentPath=usa/en-us/initiatives/all/nsr.htm&Filter=...


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts