Baixe o app para aproveitar ainda mais
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.
Compartilhar