Tópico 2 - Vulnerabilidades_ameaças_ataques - Parte 2

Propaganda
Auditoria e Segurança da
Informação– GSI536
Prof. Rodrigo Sanches Miani – FACOM/UFU
Vulnerabilidades, ameaças e
ataques
Auditoria e Segurança da Informação (GSI521)
Aula passada
Auditoria e Segurança da Informação (GSI521)
Potenciais atacantes – Classificação
Classificação proposta por Módulo Security Solutions (1999):
Script kiddies – Iniciantes;
Cyberpunks – mais velhos e ainda anti-sociais;
Insiders – empregados insatisfeitos;
Coders – os que escrevem sobre suas “proezas”;
White hat – profissionais contratados;
Black hat – crackers;
Gray hat – entre white hat e black hat;
Novo tipo:
Hacktivists ou Cyberterroristas – Praticam ataques com fins políticos
e sociais.
Pontos explorados
Invasões aos sistemas e redes de comunicação podem
ser executadas de duas maneiras:
1) Invasões técnicas;
2) Engenharia social;
Planejamento de ataques
Primeiro passo para um ataque é a obtenção de
informações sobre o sistema a ser atacado;
Após a obtenção das informações, o hacker pode atacar
o sistema por diversas maneiras:
Monitorando a rede;
Invadindo o sistema;
Inserindo códigos maliciosos ou informações falsas;
Enviando inúmeros pacotes desnecessários.
Tipos de ataques
Tipos de ataques
Ataques de negação de serviços;
Ataques de negação de serviços coordenados;
Ataques no nível de aplicação;
Phishing (Ataque técnico + Engenharia social).
Ataques de negação de serviços (DoS –
Denial of Service)
Exploração de recursos de maneira agressiva,
impossibilitando usuários legítimos de utilizá-los;
Podem ser causados usando técnicas como:
SYN Flooding;
Smurf;
Ataques de negação de serviços (DoS –
Denial of Service)
Alguns dos maiores responsáveis pelos ataques de
negação de serviço são os próprios desenvolvedores de
software;
Falhas na implementação e na concepção de sistemas
abrem “brechas” que podem ser exploradas;
Buffer overflow é um exemplo típico de brecha.
Ataques de negação de serviços – bugs e
condições
Buffer overflow;
Condições inesperadas – manipulação errada e
incompleta de entradas;
Entradas não manipuladas – código que não define o
que fazer com entradas inválidas e estranhas;
Race conditions – quando mais de um processo tenta
acessar os mesmos dados ao mesmo tempo, podendo
causar confusões e inconsistências das informações.
Revisão TCP/IP
O TCP/IP foi desenvolvido em 1969 pelo U.S. Departament of
Defense Advanced Research Projects Agency, como um
recurso para um projeto experimental chamado de ARPANET;
O protocolo deveria ser capaz de identificar e encontrar a
melhor rota possível entre dois sites (locais), além de ser
capaz de procurar rotas alternativas para chegar ao destino,
caso qualquer uma das rotas tivesse sido destruída;
A partir de 1972 o projeto ARPANET começou crescer em
uma comunidade internacional e hoje se transformou no que
conhecemos como Internet.
Revisão TCP/IP
O TCP/IP foi desenvolvido em 1969 pelo U.S. Departament of
Defense Advanced Research Projects Agency, como um
recurso para um projeto experimental chamado de ARPANET;
O protocolo deveria ser capaz de identificar e encontrar a
melhor rota possível entre dois sites (locais), além de ser
capaz de procurar rotas alternativas para chegar ao destino,
caso qualquer uma das rotas tivesse sido destruída;
A partir de 1972 o projeto ARPANET começou crescer em
uma comunidade internacional e hoje se transformou no que
conhecemos como Internet.
Revisão TCP/IP
O modelo ou arquitetura TCP/IP de encapsulamento
busca fornecer abstração aos protocolos e serviços para
diferentes camadas de uma pilha de estruturas de dados
(ou simplesmente pilha);
No caso do modelo inicial do TCP/IP, a pilha possuía
quatro camadas: rede, internet (inter-redes), transporte e
aplicação.
Revisão TCP/IP
Revisão TCP/IP
IP: É um protocolo de endereçamento. O objetivo é
fornecer uma maneira para identificar unicamente cada
máquina da rede (endereço IP) e uma maneira de
encontrar um caminho entre a origem e o destino
(Roteamento).
TCP: É um protocolo de transporte e executa
importantes funções para garantir que os dados sejam
entregues de uma maneira confiável, ou seja, sem que
os dados sejam corrompidos ou alterados.
Revisão TCP/IP
Suponha que o computador A precisa enviar um arquivo
de 10 MB para um computador B:
1.
2.
3.
4.
Encontrar a rota entre A e B – IP
Dividir o arquivo de 10MB em pacotes de tamanhos menores
– TCP
Garantir que os pacotes sejam entregues sem erros e sem
alterações – TCP
Entregar os pacotes na ordem correta – TCP
SYN Flooding – Handshake três vias
O protocolo TCP é orientado a conexão: primeiro cliente e servidor
se conectam e somente após esta etapa é que os dados podem ser
trocados;
A etapa de "discar" no TCP é chamada de handshake de três vias e
os flags TCP são usados para sinalizar qual etapa se está
realizando;
1.
2.
3.
O cliente envia uma solicitação de conexão com o flag SYN ligado e os
demais desligados;
Se o servidor quiser e puder atender, devolve um pacote ao cliente
ainda sem dados, com os flags de SYN e de ACK ligados;
Se o cliente ainda quiser manter a conexão, devolve ao servidor um
terceiro pacote sem dados, apenas com o flag de ACK ligado (SYN
desligado).
SYN Flooding
Explora o handshake de três vias do TCP.
SYN Flooding – Handshake três vias
Ao receber o primeiro pacote (SYN), se ele quiser
atender, precisa antes de responder com o
SYN/ACK, alocar recursos de hardware para
atender esta nova conexão;
Como o TCP é um protocolo confiável, que trata
de desordenamento e perdas de pacotes, estes
recursos não são poucos, pois envolvem buffers
de envio e de recebimento, controle de números
seqüenciais, relógios diversos, enfim, muitos
recursos de memória, principalmente.
SYN Flooding – Handshake três vias
E o que acontece se uma máquina fizer o SYN
(etapa 1), o servidor alocar recursos e responder
com o SYN/ACK (etapa 2) mas o cliente não
completa o handshake e não realiza a última
etapa? Os recursos ficam alocados?
SYN Flooding – Handshake três vias
E o que acontece se uma máquina fizer o SYN
(etapa 1), o servidor alocar recursos e responder
com o SYN/ACK (etapa 2) mas o cliente não
completa o handshake e não realiza a última
etapa? Os recursos ficam alocados?
Resposta: SIM! Essa é a ideia do ataque!
Recursos não ficam alocados para sempre;
O servidor aguarda o ACK do cliente e se o mesmo não chegar
depois de certo tempo, os recursos são desalocados.
SYN Flooding - Ataque
SYN Flood:
1.
2.
3.
O atacante gera quantos SYN's a máquina dele for capaz e não
responde nenhum dele - falsificando o número IP em cada novo SYN (IP
Spoofing);
O servidor vai alocar recursos para cada um, como se fossem
requisições legítimas, só desalocando quando acabar o tempo;
O atacante consegue gerar pacotes de SYN muito mais rapidamente e
facilmente do que o servidor consegue tratá-los!
SYN Flooding
Evitando o SYN Flooding
Comparar as taxas de requisições de novas conexões e
o número de conexões em aberto;
Aumentar o tamanho da fila de pedidos de conexão;
Evitar a falsificação de IP’s (IP Spoofing);
Diminuição do timeout do handshake de três vias;
SYN Cookie.
Evitando o SYN Flooding - Tarefas
1.
Pesquise sobre os métodos de prevenção do SYN
Flooding (inclusive sobre o SYN Cookie) e dê exemplos
de sistemas que ainda são vulneráveis a essa técnica e
sistemas que já fizeram as devidas correções. Data de
entrega: 12/05/2015.
Smurf
Ataque no nível de rede, o qual um grande tráfego de pacotes ping
(ICMP echo) é enviado para o endereço IP de broadcast da rede;
ICMP
ICMP - Internet Control Message Protocol, é um protocolo integrante
do Protocolo IP utilizado para fornecer relatórios de erros à fonte
original;
As mensagens ICMP geralmente são enviadas automaticamente em
uma das seguintes situações:
Um pacote IP não consegue chegar ao seu destino (i.e. Tempo de vida
do pacote expirado)
O Gateway (máquina usada para interligar redes) não consegue
retransmitir os pacotes na freqüência adequada (i.e. Gateway
congestionado)
O roteador indica uma rota melhor para a máquina enviar os pacotes.
Smurf
Ataque no nível de rede, o qual um grande tráfego de pacotes ping
(ICMP echo) é enviado para o endereço IP de broadcast da rede;
A origem do tráfego é o endereço IP da vítima;
Com o broadcast, cada host da rede recebe a requisição de ICMP
echo, passando todos eles a responderem para o endereço de
origem (vítima);
A vítima recebe os pacotes de todos esses hosts, ficando
desabilitada para executar suas funções por um determinado
período de tempo.
Smurf – Como mitigar?
Configurar os computadores e roteadores para não responder
solicitações ICMP em broadcast;
Configurar roteadores para não encaminhar pacotes direcionados ao
endereço de broadcast.
Endereço de Broadcast: endereço de rede que permite que a
informação seja enviada para todos os nós de uma rede, em vez de
um host específico.
Ataques coordenados – (Distributed Denial of
Service - DDos)
Ataques no nível de aplicação
Explora vulnerabilidades em aplicações, serviços e
protocolos que funcionam no nível de aplicação;
Buffer overflow;
Vírus, worms e cavalos de Tróia;
Ataques no nível de aplicação – Buffer
Overflow
Buffer overflow – “estouro de buffer”;
Buffer - uma região temporária da memória onde são
guardados dados para serem transportados de um lugar
para o outro;
Falha bastante conhecida e séria;
Causada pela falta de cuidado do desenvolvedor durante
a implementação do programa.
Ataques no nível de aplicação – Buffer
Overflow
Somente no ano de 2014, já foram catalogadas 630
vulnerabilidades de segurança referente ao buffer
overflow;
Pesquisa feita no dia 20/10 - http://nvd.nist.gov/
Buffer Overflow - Exemplos
CVE-2014-0567
“Heap-based buffer overflow in Adobe Reader and Acrobat 10.x
before 10.1.12 and 11.x before 11.0.09 on Windows and OS X
allows attackers to execute arbitrary code via unspecified vectors,
a different vulnerability than CVE-2014-0561.”
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-20140567
CVE-2014-4404
“Heap-based buffer overflow in IOHIDFamily in Apple iOS before 8
and Apple TV before 7 allows attackers to execute arbitrary code
in a privileged context via an application that provides crafted keymapping properties.”
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0567
Buffer Overflow - Histórico
1988 – Morris Worm usou um buffer overflow no serviço Unix
finger para se propagar pela rede;
1995 – Thomas Lopatic publicou estudos sobre o tema na lista
de emails “Bugtraq”;
1996 – Elias Levy publicou na revista Phrack um artigo com
uma introdução passo a passo para explorar o problema;
2001 – Code Red Worm explorou buffer overflow no IIS
(servidor Web do Windows)
2003 – SQL Slammer explorou buffer overflow no Microsoft
SQL Server 2000.
Exemplo de Buffer
Dados são capturados de um dispositivo de entrada (um
teclado ou mouse, por exemplo) e enviados à um
dispositivo de saída (monitor, impressora);
(extraído de http://www.gris.dcc.ufrj.br/documentos/artigos/buffer-overflow/at_download/file)
Overflow
Overflow ocorre quando o volume de um determinado
objeto ou substância é maior do que a capacidade de
seu compartimento;
Rio raso exposto a chuvas fortes!
O que vai acontecer com o rio?
Buffer Overflow
Um buffer overflow consiste em um processo de
armazenar, em um buffer de tamanho fixo, dados
maiores que o seu tamanho.
Pode resultar em:
Execução errônea de um programa;
Acesso indevido à áreas de memória, terminação do programa
ou uma possível falha de segurança em um sistema.
Buffer Overflow
Considere um programa com duas estruturas de dados
adjacentes na memória do computador:
A - Vetor de caracteres de 8 bytes;
B – Inteiro de 2 bytes.
A -> zeros
B-> 09
(extraído de http://www.gris.dcc.ufrj.br/documentos/artigos/buffer-overflow/at_download/file)
Buffer Overflow
O que aconteceria se o programa solicitasse o
preenchimento do vetor A e tentássemos inserir a
palavra “excessivo”?
Buffer Overflow
O que aconteceria se o programa solicitasse o
preenchimento do vetor A e tentássemos inserir a
palavra “excessivo”?
(extraído de http://www.gris.dcc.ufrj.br/documentos/artigos/buffer-overflow/at_download/file)
Buffer Overflow - Consequências
Inicialmente qual era o valor de B?
Qual é o valor de B agora?
E se B fosse uma variável que armazenasse a idade de
uma pessoa?
Buffer Overflow - Consequências
O programa em questão
reservados na memória;
tem
apenas
10
bytes
Ao tentar escrever uma palavra com mais de 10
caracteres, os excedentes teriam de ser alocados em
área de memória não reservadas ao programa;
Falha de segmentação!
Buffer Overflow - Consequências
Um buffer overflow é resultado do armazenamento em
um buffer de uma quantidade maior de dados do que sua
capacidade;
Apenas linguagens de programação que não efetuam
checagem de limite ou alteração dinâmica do tamanho
do buffer são frágeis a este problema;
C é um exemplo! (funções como strcpy, strncopy, strcat,
strncat, gets, getws, fgets, scanf, printf...)
E o JAVA?
Buffer Overflow - Exemplo
Buffer Overflow – Funções problemáticas em
C
Função
Mitigação
gets
fgets
strcopy, strcat, strcmp
strlcopy
sprintf
snprintf
Printf
Tratar a string!
https://security.web.cern.ch/security/recommendations/en/codetools/c.shtml
Buffer Overflow – Programa na memória
Qualquer programa compilado possui uma forma
estruturada denotando uma seqüência de instruções que
serão executadas pelo processador;
Tal seqüência é carregada na memória quando um
programa é chamado à execução;
A estrutura de um programa na memória se divide em
quatro partes: texto, dados, pilha e heap.
Buffer Overflow – Programa na memória
Texto - contém as instruções do programa propriamente
ditas (somente-leitura);
Dados - variáveis globais e estáticas do programa;
Heap - alocação dinâmica de variáveis;
Pilha - Bloco de memória onde são armazenadas
variáveis locais, parâmetros e valores de retorno.
Buffer Overflow – Programa na memória
Após a execução de um programa, o sistema deve retornar ao
ponto em que se encontrava antes da execução;
Esse artifício é conhecido como endereço de retorno;
1.
2.
3.
Salva-se o endereço de retorno na pilha;
Quando o execução do programa terminar, o sistema irá
saltar para o endereço de retorno e continuar normalmente;
O que acontece se alguém manipulasse esse endereço de
retorno?
Buffer Overflow – Programa na memória
http://back-track-linux.blogspot.com.br/2012/10/prevent-buffer-overflow-attack.html
Buffer Overflow - Consequências
O princípio é estourar o buffer e sobrescrever parte da
pilha, alterando o valor das variáveis locais, valores dos
parâmetros e/ou o endereço de retorno;
Injeção de código diretamente na pilha - modo mais
simples de realizar um buffer overflow (shellcode).
Buffer Overflow - Pergunta
Vimos que a grande parte das linguagens vulneráveis a
buffer overflow são derivadas do C. Contudo, os
sistemas existentes são escritos em diversas linguagens
de programação. Qual é a razão de existir tantos
ataques assim?
Buffer Overflow - Pergunta
Vimos que a grande parte das linguagens vulneráveis a
buffer overflow são derivadas do C. Contudo, os
sistemas existentes são escritos em diversas linguagens
de programação. Qual é a razão de existir tantos
ataques assim?
Muitos programas escritos em
conectam a bibliotecas em C...
linguagens
seguras
se
Ataques no nível de aplicação –Softwares
maliciosos
Software malicioso (malware) é um software
intencionalmente incluído ou inserido em um sistema
para um propósito prejudicial;
Vírus é um software que pode infectar outros programas,
modificando-os;
Um worm é um programa que pode se replicar e enviar
cópias de um computador para o outro através de
conexões de rede.
Ataques no nível de aplicação –Softwares
maliciosos
Porque o nome vírus?
O nome é inspirado nos vírus biológicos, em que
pequenos fragmentos de código genético podem assumir
o controle do mecanismo de uma célula viva e enganá-la
para que faça milhares de réplicas.
Ataques no nível de aplicação –Vírus, worms
e cavalos de tróia
Vírus exige a interação com o usuário;
Worm não exige a interação com o usuário e espalhamse rápido e automaticamente;
Cavalos de tróia (Netbus e Back Orifice) são programas
que aparentam realizar algo útil, mas na verdade
realizam atividades prejudiciais
Ataques no nível de aplicação –Vírus, worms
e cavalos de tróia
Um vírus pode fazer qualquer coisa que outros
programas fazem;
Um vírus típico passa pelas quatro fases a seguir:
Fase latente - vírus inativo;
Fase de propagação - colocas cópias idênticas de si mesmo
em outro programas ou em certas áreas do sistema;
Fase de disparo - Vírus é ativado para realizar a função para a
qual ele foi planejado;
Fase de execução - A função é realizada.
Tipos de vírus
Vírus de setor de boot – modificam setores de boot;
Vírus de arquivos executáveis – contaminam arquivos
executáveis;
Vírus de macro – espalham-se por meio de linguagens
de macro em documentos compatíveis com MS Office;
Vírus de scripts – exploram as linguagens de script (VB
Script, JavaScript) e são executados ao acessar uma
página Web ou e-mail. Pode ser executado
automaticamente.
Ciclo de vida de um vírus
O vírus é escrito e testado em uma rede experimental;
O vírus é lançado, possivelmente, em um alvo
selecionado;
O vírus se espalha, se implementado corretamente;
Alguém percebe atividades estranhas, recolhe arquivos
modificados e os envia à indústrias de anti-vírus;
O vírus é analisado e uma assinatura é criada;
O criador da assinatura compartilha as informações;
A indústria de anti-vírus espalha boletins de segurança e
atualizações;
Contramedidas
Não permitir que um vírus entre no sistema!
Detectar, identificar e remover. Como?
Softwares antivírus.
Contramedidas
Quatro gerações de software antivirus:
1)
2)
3)
4)
Scanner simples – assinatura para identificação do vírus
Scanner heurístico – heurísticas para procurar possíveis infecções
Interceptações de atividades – identificam ações em vez da estrutura
Proteção completa – combinam diversas técnicas
Phishing
“Você tem uma conta no Banco XYZ e tem recebido emails deles. Mas este parece suspeito, especialmente já
que ameaça encerrar sua conta se você não responder
imediatamente.”
“Vídeos ou fotos exclusivas, extremamente tentadoras
são enviadas para o seu email.”
“Banners em sites prometendo dinheiro ou prêmios
aparecem a todo momento”
Quem já foi alvo de phishing?
Phishing
O termo Phishing é relativamente novo (1996), cunhado
por crackers que praticavam roubo de contas da America
Online (AOL);
Etapas do processo:
Planejamento – escolha do alvo;
Preparação – elaboração do material a ser utilizado;
Ataque – email, website, malware...
Coleta dos dados;
Fraude – roubo de dinheiro, informações sensíveis...
Pós-ataque – desligamento de máquinas e destruição de
evidências.
Phishing
Phishers costumam usar marcas de empresas reais e
cópias de mensagens de e-mail legítimos;
Induzem a vítima a tomar uma ação imediata;
Cuidados básicos:
Verifique o remetente do email;
Não baixe, nem execute arquivos não solicitados;
Mantenha o seu navegador atualizado;
Mantenha o seu sistema operacional atualizado;
Mantenha o seu antivírus atualizado
Phishing - Exemplo
http://www.kangaroos.org.uk/areasegura/?0.03405.0.94847.0.92618
Leitura recomendada
William Stallings – “Criptografia e segurança de redes –
Princípios e Práticas”, 4ª Edição, Pearson, 2010;
Capítulo 19 – Software malicioso
Emilio Tissato Nakamura, Paulo Lício de Geus – “Segurança
de Redes em Ambientes Cooperativos”, Editora Novatec;
Capítulo 4.6 – Ataques de negação de serviço
Capítulo 4.8 – Ataques coordenados
Capítulo 4.9 – Ataques no nível da aplicação
http://www.gris.dcc.ufrj.br/documentos/artigos/bufferoverflow/at_download/file
http://www.cic.unb.br/~rezende/trabs/buffer_overflow.htm
Download