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.
Libsafe é uma biblioteca que protege os processos
contra explorações de buffer overflow. Libsafe funciona
com qualquer executável pré-compilado e pode ser usado de maneira transparente de acordo com sua função de ser uma biblioteca.
Libsafe intercepta qualquer e toda chamada feita a funções conhecidas por serem vulneráveis a ataques de buffer overflow. Uma função equivalente as originais é implementada com a funcionalidade original, porém barrando as tentativas de buffer overflow no stack corrente da função que está sendo substituída.
Libsafe foi criado com o intuito de proteger o sistema de todos os tipos de vulnerabilidades conhecidas utilizando transbordamento de buffer e também com intuito de tentar barrar ataques desconhecidos. Pesquisas utilizando tentativas de burlar a libsafe se mostraram insignificantes.
Abaixo vamos ver uma lista contendo as funções mais conhecidas por serem alvos constantes de ataques de stack smashing:
strcpy(char *dest, const char *src)
strcpy(char *dest, const char *src)
strpcpy(char *dest, const char *src)
wcscpy(wchar_t *dest, const wchar_t *src)
wcpcpy(wchar_t *dest, const wchar_t *src)
Pode causar um overflow no buffer de destino.
strcat(char *dest, const char *src)
wcscpy(wchar_t *dest, const wchar_t *src)
getwd(char *buf)
gets(char *s)
[vf]scanf(const char *format, ...)
Pode causar overflow em seus argumentos.
realpath(char *path, char resolved_path[])
Pode causar overflow no path do buffer.
[v]sprintf(char *str, const char *format, ...)
Pode causar overflow no str buffer.
Pode exploitar "%n" (format bugs).
Onde posso baixar o Libsafe?
O código fonte do libsafe pode ser encontrado aqui:
[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)
[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