Você está na página 1de 9

Segurana na Camada da Aplicao

Tema: BUFFER OVERFLOW

PROFESSOR: GLADYS MACHADO


DATA DE ENTREGA: 07/06/2014

ALUNOS :

Nome

Matrcula

Bianca da Silva Barreto

201304028666

Luciana Vieira Gama

201304028909

BREVE HISTRIA
A documentao mais antiga de Buffer Overflow tem data de 1988. Foi
uma das muitas vulnerabilidades exploradas pelo Morris worm para se
propagar pela internet. O programa-alvo foi um servio Unix, chamado finger.
Morris Worm ou Internet Worm foi um dos primeiros worms distribudos pela
Internet, ele foi escrito por Robert Tappan Morris.
Utilizou uma falha no finger (uma chamada gets()) para se copiar para
outras mquinas.
Segundo o autor, o worm tinha o objetivo de medir o tamanho da internet,
mas acabou gerando um impacto devastador na poca, atingindo 6000
computadores, aproximadamente 10% da internet da poca.

BUFFER
uma regio de armazenamento de memria utilizada para armazenar
temporariamente os dados enquanto eles esto sendo movidos de um lugar
para outro, ou seja, processados.

BUFFER OVERFLOW
um transbordamento de memria. quando colocamos mais dados em
um buffer do que este buffer est preparado para receber.
Como pode acontecer?
um tipo clssico de erro de programao, o programador sem muita
experincia pode deixar de especificar um tamanho fixo para o buffer ou no
fechar bem o cdigo da aplicao.
O atacante envia uma string malformada que excede o limite do buffer,
sobrescrevendo outras variveis e/ou parte do cdigo da aplicao, com isso
pode levar ao corrompimento de outras reas de memria adjacentes, fazendo
com o programa tenha comportamentos inesperados ou at mesmo venha a
travar.

Com o passar tempo passou a ter um teor de vulnerabilidade, tendo em


vista que ao ser explorado, pode ocasionar desvio do fluxo de cdigo, alterao
de valores em variveis, podendo tambm ocorrer a execuo de cdigo
malicioso, usando os privilgios concedidos ao aplicativo.

ESTRUTURA DE UM PROGRAMA NA MEMRIA


Qualquer programa compilado (e isto inclui interpretadores de linguagens)
possui uma forma estruturada em cdigo de mquina denotando uma
sequncia de instrues que sero executadas pelo processador. Tal
sequncia carregada na memria quando um programa chamado
execuo.
A estrutura de um programa na memria se divide basicamente em 4
partes:


TEXTO: Contm as instrues do

programa propriamente ditas e dados


somente-leitura.

Essa

regio

geralmente somente-leitura, para evitar


cdigos mutveis. Uma tentativa de
escrita nessa rea resulta em uma falha
de segmentao.


DADOS:

Esta

regio

contm

todas as variveis globais e estticas do


programa.


PILHA (STACK): Regio mais

interessante para os fins deste texto.


Trata-se de um bloco de memria onde
so armazenadas informaes vitais
para

subrotinas:

variveis

locais,

parmetros e os valores de retorno.

HEAP: Serve para a alocao dinmica de variveis, atravs de

instrues do tipo malloc().

Ataques baseados em buffer overflow


 Heap-based buffer overflow
Bem mais difcil de explorar, por causa da disciplina de acesso
heap (blocos no contguos, fragmentao interna). Deve-se estourar
o buffer armazenado na rea da heap em direo ao endereo de retorno na
pilha, para direcionar a execuo para o cdigo malicioso que se encontra
no buffer estourado.
 Return-to-libc attack
Altera o fluxo de execuo pelo estouro de algum buffer na pilha ou heap,
para algum trecho de cdigo armazenado no segmento de texto do programa.
Tipicamente este trecho de cdigo alguma chamada de funo comumente
utilizada da biblioteca padro libc, como as chamadas de execuo arbitrria
de comandos (funes da famlia exec(3)). Este tipo de ataque tem sido
bastante utilizado aps a incluso de patches nos sistemas operacionais que
impedem a execuo de cdigo na pilha, heap ou regio de dados.
 Stack-based buffer overflow
a tcnica de explorao mais simples e comum, atua pela alterao do
estado da pilha durante a execuo do programa para direcionar a execuo
para o cdigo malicioso contido no buffer estourado.
Exemplo:
As instrues e os dados de um programa em execuo so
armazenados provisoriamente em memria de maneira contgua numa zona
chamada pilha (em ingls stack). Os dados situados aps o tampo contm
assim um endereo de regresso (chamado apontador de instruo) que permite
ao programa continuar a sua execuo. Se a dimenso dos dados for superior
dimenso do tampo, o endereo de regresso ento esmagado e o

programa ler um endereo de memria invlido, o que provoca uma falta de


segmentao (segmentation fault) da aplicao.

Duas estruturas de dados adjacentes:


A (vetor de caracteres de 8 bytes) e B (inteiro de 2 bytes)
Para o computador, cada caractere ocupa 1 byte em memria.

A:

B:

Caso se tente inserir a palavra corromper ('c', 'o', 'r', 'r', 'o', 'm', 'p', 'e',
'r','\0') que necessita 10 caracteres na estrutura A que tem um tamanho fixo de
8 caracteres (bytes), logo, A ser transbordado e os dados excedentes sero
armazenados em uma posio adjacente na memria, neste caso na estrutura
B que foi criada para armazenar inteiros.
O smbolo \0 indica o final da string, que um vetor de caracteres.
Vejamos abaixo como ficar:

\0

Ao falhar em checar o comprimento da string A, a mesma transbordou e


os 2 bytes excedentes foram armazenados em B que estava reservado para
inteiros (nmeros).

Proteger-se de um ataque overflow


Para proteger-se deste tipo de ataque, necessrio desenvolver
aplicaes com a ajuda de linguagens de programao evoludas, assegurando
uma gesto fina da memria atribuda ou com a ajuda de linguagem de baixo
nvel utilizando bibliotecas de funes protegidas como as informadas abaixo:
Funes de alto risco e solues:
Risco : gets(char *s)
Soluo: utilizar fgets(char *s, int size, stdin)
Risco: strcpy(dest, src) / strcat(dest, src)
Soluo: Utilizar strncpy e strncat
Risco: sprintf
Soluo: usar snprintf
Risco: scanf(), sscanf(), fscanf(), vfscanf(),vsprintf(), vscanf(),
vsscanf()
Soluo: Usar especificadores de preciso (ex: %4s)
Funes de risco considervel e solues:
Risco: strtrns(string, old, new, result)
Soluo: calcular o tamanho mximo de result, usando: (strlen
(string)/strlen(old))*strlen(new)) ou calcular manualmente o
tamanho de result.
Risco: getchar(), fgetc(), getc(), read()
Soluo: Lembre-se de checar os limites de seu buffer caso
estiver usando estas funes em um looping.

Boletins de alerta tambm so regularmente publicados, anunciando a


vulnerabilidade de certas aplicaes a ataques por profuso de tampo. Na
sequncia destes boletins de alerta, os editores dos "softwares" tocados pela
vulnerabilidade publicam geralmente correes (patchs) que permitem corrigir a
falha. Qualquer administrador sistema de rede deve estar informado sobre os
alertas de segurana e aplicar o mais depressa possvel as correes.

CASOS FAMOSOS
Em 2000 no Outlook Express, graas uma vulnerabilidade, era possvel
fazer com que um e-mail executasse arquivos apenas por ser aberto! Bastava
anexar um arquivo com certo nmero de caracteres no nome, que ele seria
executado ao ser aberta a mensagem. Naturalmente, a Microsoft se apressou
em lanar um patch e alertar os usurios para o problema. Felizmente, pelo
menos por enquanto, no foi descoberta mais nenhuma vulnerabilidade to
perigosa no Outlook. Semanalmente so descobertas vulnerabilidades de
buffer overflow em vrios programas. Algumas so quase inofensivas,
enquanto outras podem causar problemas srios.
H programas famosos por frequentemente apresentarem a falha, como o
Sendmail, mdulos do Apache, e boa parte dos produtos da Microsoft.
Em 2001, o Code Red Worm explorou um buffer overflow no Internet
Information Services (IIS) 5.0 da Microsoft, o worm podia contaminar servidores
desprotegidos simplesmente enviando o cdigo que explora o bug, sem que
ningum executasse nenhum arquivo.
J em 2003, o worm SQL Slammer colocou em risco maquinas rodando o
Microsoft SQL Server 2000.

Ainda em 2003, buffer overflows em jogos

licenciados para o vdeo-game Xbox da Microsoft foram explorados para


permitir que softwares no licenciados rodassem no console sem a
necessidade de modificaes no hardware, conhecidas por modchips. O PS2
Independence Exploit tambm usou um buffer overflow para conseguir o
mesmo efeito para o video-game Playstation 2 da Sony.

Mesmo software considerado seguro, como o OpenSSH, j apresentou o


problema.

CONCLUSO
Os ataques de estouro de buffer ocorrem quando um invasor consegue
enviar dados alm da capacidade do buffer de tamanho fixo do aplicativo e
esse aplicativo no faz uma verificao para garantir que isso no acontea. Ao
estourar um buffer com um cdigo executvel, um invasor pode fazer com que
um aplicativo execute aes inesperadas e, muitas vezes, maliciosas, usando
os mesmos privilgios concedidos ao aplicativo.

Por que isso acontece?


 Falta de checagem de limites de buffer;
 Checagem incorreta de limites;
 Uso de funes inseguras, como por exemplo o GET.

Como se prevenir?
 No usar funes inseguras;
 Saber usar as funes seguras de maneira certa;
 Perceber e corrigir os erros.

REFERNCIAS BIBLIOGRFICAS:

DIGENES, Y.; MAUSER, D. Cerfifio Security+: Da Prtica Para o Exame


SY0-301. 2ed. Rio de Janeiro: NOVA TERRA, 2013.

MORIMOTO, Carlos E. Revisado 26 de junho de 2005 s 22h03,


http://www.hardware.com.br/termos/buffer-overflow. Acesso em: 29 maio
2014.

PAIVA, R, D.; Buffer Overflow - Uma introduo terica. Disponvel em:


<http://www.gris.dcc.ufrj.br/documentos/apresentacoes/buffer-overflow-umaintroducao-teorica/at_download/file/GRIS-2008-S-002.pdf>. Acesso em: 29
maio 2014.
WEBGRAFIA
http://www.cic.unb.br/~rezende/trabs/buffer_overflow.htm#tecnicas.
em: 29 maio 2014.

Acesso

http://pt.kioskea.net/contents/18-ataques-por-profusao-de-tampao-bufferoverflow. Acesso em: 29 maio 2014.


http://slideplayer.com.br/slide/40506/. Acesso em: 29 maio 2014.
http://slideplayer.com.br/slide/395713/#. Acesso em: 29 maio 2014.
http://macoli.files.wordpress.com/2010/11/buffer-overflow.pdf. Acesso em: 29
maio 2014.
http://www.tecland.com.br/palestras/01/01buffer_overflows_para_iniciantes_por_victor.pAFIdf. Acesso em: 29 maio
2014.
http://slideplayer.com.br/slide/293326/. Acesso em: 29 maio 2014.
http://www.symantec.com/pt/br/security_response/glossary/define.jsp?letter=b&
word=buffer-overflow. Acesso em: 29 maio 2014.
http://pt.wikipedia.org/wiki/Morris_worm. Acesso em: 29 maio 2014.