Buscar

Estouro de Recursos de Arquivos Binários

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Estouro de Recursos de Arquivos Binários
Descrição
A fonte de um excesso do buffer pode ser dados de entrada. Quando se trata do estouro de Recursos de Arquivos Binários, o atacante tem de modificar / preparar o arquivo binário de tal forma que a aplicação, depois de ler este arquivo, tornou-se propensa a um ataque clássico de estouro de buffer. A única diferença entre este e um ataque clássico é a fonte dos dados de entrada. Os exemplos mais comuns são especialmente arquivos MP3, JPEG ou ANI, que causam estouros de buffer trabalhados.
Exemplos
O aplicativo lê os 8 primeiros caracteres do arquivo binário.
rezos@dojo-labs ~/owasp/binary $ cat read_binary_file.c
#include <stdio.h>
#include <string.h>
int main(void)
{
 FILE *f;
 char p[8];
 char b[8];
 f = fopen("file.bin", "r");
 fread(b, sizeof(b), 1, f);
 fclose(f);
 strcpy(p, b);
 printf("%s\n", p);
 return 0;
}
O arquivo trabalhado contém mais de 8 caracteres.
rezos@dojo-labs ~/owasp/binary $ cat file.bin
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Depois de uma tentativa de correr mais uma vez, a aplicação vai acabar com:
rezos@dojo-labs ~/owasp/binary $ ./read_binary_file
Segmentation fault
Fracasso. Seria um estouro de buffer?
rezos@dojo-labs ~/owasp/binary $ gdb -q ./read_binary_file
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) r
Starting program: /home/rezos/owasp/binary/read_binary_file
Program received signal SIGSEGV, Segmentation fault.
0xb7e4b9e3 in strcpy () from /lib/libc.so.6
Sim, isso foi um estouro de buffer em uma função strcpy ().
Por quê?
fread (b, sizeof (b), 1, f); - lê caracteres do fluxo f, sizeof (b) uma vez, para o buffer b. Parece OK. Entretanto, não há espaço para um '\ 0', que termina a string.
Durante a execução strcpy (p, b), onde ambos os buffers são iguais, o transbordamento ocorre. A causa é a ausência do byte null / encerrar personagem em um buffer b []. O strcpy () função irá copiar para o buffer p [] tudo a partir de b [0] e terminando no byte nulo. O atacante realizou com sucesso o ataque de estouro de buffer por elaborar um arquivo especial.
* Use funções equivalentes seguras, que verificam o tamanho do buffer, sempre que possível.
A saber:
* gets() -> fgets()
* strcpy() -> strncpy()
* strcat() -> strncat()
* sprintf() -> snprintf()
* Essas funções que não têm equivalentes seguros devem ser reescritas com verificações de segurança implementadas. Tempo gasto no que vai beneficiar no futuro. Lembre-se que você tem que fazê-lo apenas uma vez.
* Use compiladores, que são capazes de identificar as funções inseguras, erros de lógica e verifique se a memória é substituída quando e onde ele não deveria estar.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais