SóProvas


ID
1782679
Banca
CESPE / CEBRASPE
Órgão
TJ-DFT
Ano
2015
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Em geral, um buffer overflow se caracteriza por permitir a sobrescrita de espaços de memória utilizados por um processo, o que pode ser realizado intencionalmente ou não. A esse respeito, julgue o item que se segue.

Uma vez que o uso de buffer overflow é considerado genérico em segurança da informação, ele é independente da arquitetura do processador.

Alternativas
Comentários
  • É dependente da arquitetura do processador. Por isso a questão está errada.


    Artigos que explicam o buffer overflow:

    http://www.crimesciberneticos.com/2011/02/entendendo-o-buffer-overflow.html

    http://www.crimesciberneticos.com/2011/03/exploiting-buffer-overflow.html


  • Entendendo o Buffer Overflow

    Em programação, buffer é uma variável (também conhecida como array ou vetor), um local na memória que armazena uma quantidade X de bytes.

    Por exemplo um buffer que tenha capacidade de armazenar 10 bytes, só conseguiria guardar uma palavra de 9 caracteres (cada caracter sendo 1 byte) já que o último precisa ser o caracter nulo para o programa saber que a palavra termina ali.

    Então esse código em C estaria correto:

    char buffer[10] = {'S', 'E', 'G', 'U', 'R', 'A', 'N', 'Ç', 'A', '\0'};

    Uma variável denominada buffer que tem 10 bytes de capacidade de armazenamento recebe uma palavra de 9 caracteres finalizando com o ('\0'). Isso está correto.

    Agora o que aconteceria se eu inserisse uma palavra com mais de 9 caracteres?

    Eis o buffer overflow! A variável copia somente os 10 primeiros caracteres e o resto estoura, ou transborda, já que não cabe mais nela.

    E o resto da sequência após o 10º byte não é descartado, ele sobrescreve o que tiver na memória após a varíavel. Vamos ver um programinha que demonstra isso.

    Esse é o código do programa em C:

    #include #include int main(int argc, char *argv[]){ char buffer1[8] = {'B','U','F','F','E','R','1','\0'}; char buffer2[8] = {'B','U','F','F','E','R','2','\0'}; printf("\n[ANTES] Buffer2 contem: %s\n",buffer2); printf("[ANTES] Buffer1 contem: %s\n\n",buffer1); strcpy(buffer2,argv[1]); printf("[DEPOIS] Buffer2 contem: %s\n",buffer2); printf("[DEPOIS] Buffer1 contem: %s\n\n",buffer1); return 0; }

    O programa cria uma variável denominada buffer1 com capacidade de armazenamento de 8 bytes e atribui a ela a palavra “BUFFER1” com o caracter nulo finalizando, o mesmo ocorre com a buffer2. Depois exibe o conteúdo de cada uma com o printf.

    Na sequência copia para a variável buffer2 o que for passando como argumento na execução do programa e exibe novamente o conteúdo de cada uma.

    O programa foi salvo com o nome “overflow.c” e compilado no Linux Debian 3.0 R4 com esse comando:

    gcc -o overflow overflow.c

    FONTE: http://www.crimesciberneticos.com/2011/02/entendendo-o-buffer-overflow.html




  • Cada sistema operacional tem uma forma de segurança diferente a respeito de buffer overflow. Por isso cada um pode ter um resultado diferente
  • Arquiteturas RISC possuem tamanho de instruções fixas e não permitem acessos "desalinhados" à memória. 

  • Buffer de dados (ou, simplesmente, buffer) é uma região de memória utilizada para armazenar temporariamente os dados enquanto eles estão sendo movidos de um lugar para outro. Normalmente, os dados são armazenados em um buffer enquanto eles são recuperados de um dispositivo de entrada ou pouco antes de serem enviados para um dispositivo de saída, também podendo ser utilizado quando os dados são movidos entre os processos dentro de um computador.

    Enquanto o processador manipula o dado localizado no buffer, o dispositivo realiza outra operação de leitura no mesmo instante, ou seja, isso o faz ser dependente da arquitetura do processador. 

    Já o transbordamento de dados ou estouro de buffer (do inglês buffer overflow ou buffer overrun) é uma anomalia onde um programa, ao escrever dados em um buffer, ultrapassa os limites do buffer e sobrescreve a memória adjacente. Esse é um caso especial de violação de segurança de memória.

  • Gabarito:ERRADO!

    Um BUFFER OVERFLOW ( transbordamento de dados) acontece quando um programa informático excede o uso de memória assignado a ele pelo sistema operacional, passando então a escrever no setor de memória contíguo.

    O princípio de um transbordamento de buffer é baseado na arquitetura do processador onde o aplicativo vulnerável é executado, seja ele de 32 ou de 64 bits. Os dados inseridos em um aplicativo são armazenados na memória de acesso aleatório, em um setor conhecida como buffer. Um programa desenhado corretamente deveria estipular um tamanho máximo para dados recebidos e garantir que esses valores não sejam superados.

    https://www.welivesecurity.com/br/2014/11/11/o-que-e-e-como-funciona-o-buffer-overflow/