Você está na página 1de 2

Relatrio 2 - Evitando Estouro de Buffer

O estouro de buffer tem se tornando um erro comum, e um problema


conhecido que pode resultar num caos ao sistema. As razes que tornam os
estouros de buffer comum so as praticas ruins de codificao, a falta de
funes em strings seguros, e a fato de que C e C++ do oportunidades de
os programadores usarem muitas funes e maneiras de flexibilidade que o
C fornece com isso acabam no usufruindo das funes e da escrita do
cdigo de forma segura. A seguir, apresentaremos uma breve pesquisa
realizada contendo os erros comuns cometidos e os tipos de Estouro de
Buffer como Estouro de Pilha, Estouro de Heap os erros como indexao de
array, bugs de strings de formatao e as divergncias do tamanho de
buffer.

Estouro de Pilha
Os ataques na pilha redefinem o limite de memoria na pilha, fazendo-a
transborda. Os dados se movem para outros buffers corrompendo ou
sobrescrevendo os dados validos causando cascatas de buffers corrompidos.
Para se livrar deste tipo de ataque, precisa-se de bastantes conhecimentos
de programao, e acesso ao cdigo e pacincia para implementar as
mudanas e se proteger. A entrada no verificada do usurio, passada para
uma funo, no nem a causa maior de erros deste tipo de estouro, mais
sim o endereo de retorno da funo que o invasor escolher.

Estouro de Heap
O estouro de heap mais difcil de ser explorado, o invasor pode gravar as
informaes em locais do seu programa nos quais no teria acesso, muitos
dos programadores no acham que o estouro de heap seja explorvel
tratando assim os buffers com menos cuidado, mesmo possuindo
ferramentas para dificultar a explorao dos estouros.
Muitos sistemas operacionais podem ser configurados como uma pilha no
executvel, mais mesmo assim no ajuda a diminuir os estouros de heap,
porque uma pilha no executvel protege apenas dos ataques baseados em
pilha.

Erros de indexao de array


Se este problema no for examinado profundamente por voc acreditar que
um erro de indexao era permitido apenas escrever em posies de
memorias mais altas do que a base dos array se enganou, um erro de
indexao de array pode ser escrito em posies arbitrarias de memrias.
Quando no informado as verificaes de limites o usurio informa quantos
elementos se espera e que permitem ser acessados aleatoriamente pelo
array. Se desejarmos gravar um valor no array, o valor de retorno que ser

gravado o da pilha. O endereo de um nico elemento no array


determinado pela base do array, o ndice e pelo tamanho. Esse erro comum
pode ser explorado de forma simples se o invasor possuir acesso a um
depurador, este problema relacionado a erro de truncamento para um
sistema de 32 bits.

Bugs de String de Formatao


O problema se d ao fato de que no possuem maneiras de se ter um
funo que receba um nmero varivel de argumentos determinantes de
quantos argumentos foi passada. As nicas funes mais comuns que
recebem um nmero varivel, incluindo funes C de tempo de execuo,
so os printf. O especificador grava o numero de bytes que teria sido
gravado pela string de formatao. Para a correo deste erro, sempre
passar uma string em forma de formatao para a funo printf. Exemplo:
printf (entrada) tenha cuidado se voc apenas armazenou strings de
formatao personalizados para ajudar em diferentes idiomas, e certifiquese de que os strings no possam ser escrito por usurios indevidos.

Divergncias em tamanho de buffer


Esse estouro de divergncias comum em plataformas Windows, se voc
confundir o numero de elementos com o tamanho de bytes de um buffer,
provavelmente este erro ocorrer. Existem duas razes para isso, Windows
NT que suportam strings ANSI e Unicode e as funes Unicode que lida com
tamanhos de buffer em caracteres largos, no com bytes.