Download docx - Estouro de Buffer

Transcript

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 PilhaOs 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 HeapO 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 arraySe 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 FormataoO 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 certifique-se de que os strings no possam ser escrito por usurios indevidos.Divergncias em tamanho de bufferEsse 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.


Recommended