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