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.
Parte 4: 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;
}
/* 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 dumpedComo 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.
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...