Ícone do site Diego Macêdo

Falhas comuns de aplicações web e métodos de ataques

Vejamos alguns métodos comuns de explorar as vulnerabilidades de uma aplicação ou site hospedado em um servidor web.

Misconfiguration

É muito fácil para o administrador inexperiente, mas bem-intencionado, configurar mal ou simplesmente se perder em uma configuração, que pode ser a opção que permite um ataque.

Para evitar que a configuração incorreta se torne um problema, certifique-se de que a função do servidor está corretamente definida. Planeje e avalie a configuração para garantir que ela irá fornecer a proteção necessária. Certifique-se também de rever as melhores práticas que fornecedores como a Microsoft oferecem sobre as etapas a serem tomadas para proteger um sistema.

Outra opção é usar scanners de vulnerabilidade para verificar possíveis problemas em um site ou aplicação da Web. Os scanners de vulnerabilidade podem fornecer orientação valiosa sobre onde os esforços devem ser concentrados.

Validação de Entrada

Validação de entrada é um mecanismo usado para verificar as informações de como elas são inseridas em uma aplicação. Normalmente, um usuário inserindo dados em um formulário ou site terá poucas ou nenhuma restrição colocadas sobre eles. Quando os dados são aceitos sem restrições, erros tanto intencionais como não intencionais podem ser inseridos no sistema e podem levar a problemas mais tarde. No entanto, com um mecanismo para validar entrada, é possível frustrar esses problemas, que incluem:

A falta de validação de entrada pode permitir ataques avançados como SQL Injection. Também é possível que outros ataques, como o XSS armazenado, possam ser possíveis pela falta de validação de entrada.

Um bom exemplo da falta de validação de entrada é uma caixa em um formulário onde um código postal deve ser inserido, mas na realidade ele aceitará qualquer dado. Em outros casos, aceitar os dados errados significará simplesmente que a informação pode ser inutilizável para o proprietário do site, mas pode causar falha no site ou manipular de forma errada a informação para revelar outras informações na tela.

Felizmente, este problema é relativamente fácil de corrigir uma vez que o desenvolvedor só precisa colocar restrições sobre os tipos de entrada que podem ser aceitos pela aplicação. Por exemplo, o desenvolvedor pode ter certeza de que apenas dados numéricos e certas frases são permitidas.

Cross-Site Scripting

Outro tipo de ataque contra um servidor web é o ataque cross-site scripting (XSS). Ele depende de uma variação do ataque de validação de entrada, mas o alvo é diferente porque o objetivo é ir atrás de um usuário em vez do aplicativo ou dados. Um exemplo de XSS usa métodos de script para executar um cavalo de Tróia com o navegador de um alvo. Isso seria feito possível através do uso de linguagens de script como JavaScript ou VBScript. Através de uma análise cuidadosa, um invasor pode procurar maneiras de injetar código malicioso em páginas da web, a fim de obter informações que vão desde informações de sessão no navegador, acesso privilegiado ao conteúdo no navegador.

Vejamos etapas do XSS em ação:

XSS é um ataque antigo e vários navegadores modernos incluem proteção contra isso. No entanto, a proteção não é infalível, e os ataques podem ser induzidos por má configuração, gambiarras ou mesmo add-ons de terceiros. Isso nem mesmo inclui ataques de script XSS que se originam do próprio servidor.

Redirecionamentos e encaminhamentos não validados

Para que esse tipo de ataque ocorra, a aplicação ou página da Web deve ter validação de entrada fraca ou inexistente.

Para visualizar este tipo de ataque, imagine que um site tem um módulo redirect.php que leva uma URL através de um parâmetro GET. A manipulação deste parâmetro pode criar uma URL no sitealvo.com que redireciona o navegador para sitedohackermaldoso.com. Quando o usuário vê o link, eles vão ver favorito.com/blahblahblah , que o usuário acha que é confiável e seguro clicar. Na realidade, o link irá enviá-los para uma página diferente, que neste caso pode fazer o download de software ou algum outro material malicioso no sistema de uma vítima.

Sistemas de logon inseguros

Muitos aplicativos da Web exigem algum tipo de autenticação ou processo de login antes usar. Devido à importância do processo de logon, é essencial que ele seja manuseado com segurança. Você deve tomar cuidado para que a entrada incorreta ou imprópria de informações não revele dados que um invasor pode usar para obter informações adicionais sobre um sistema.

Os aplicativos podem rastrear informações relacionadas a logons incorretos ou logins de usuários, se assim estiverem ativados. Normalmente, esta informação vem em forma de log, com lista de itens como estes:

Os aplicativos devem ser projetados para retornar informações genéricas que não revelem informações como nomes de usuários corretos. Os aplicativos da Web que retornam uma mensagem como “nome de usuário inválido” ou “senha inválida” podem dar a um invasor um alvo para se concentrar – como uma senha correta.

Erros de script

Aplicativos da Web, programas e código, como Common Gateway Interface (CGI), ASP.NET e JavaServer Pages (JSP) são comumente usados ??em aplicativos da Web e apresentam seus próprios problemas. Vulnerabilidades como a falta de scripts de validação de entrada podem ser um problema. Um atacante experiente pode usar uma série de métodos para causar tristeza ao administrador de um aplicativo da Web, incluindo o seguinte:

Problemas de gerenciamento de sessão

Uma sessão representa a conexão que um cliente tem com o aplicativo do servidor. A informação da sessão que é mantida entre o cliente e o servidor é importante e pode dar a um invasor acesso a informações confidenciais, caso seja comprometida.

De forma ideal, uma sessão terá um identificador exclusivo, criptografia e outros parâmetros atribuídos sempre que uma nova conexão entre um cliente e um servidor for criada. Depois que a sessão for encerrada, fechada ou não for necessária, a informação será descartada e não será usada novamente (ou pelo menos não será usada por um período prolongado), mas isso nem sempre é o caso. Algumas vulnerabilidades desse tipo incluem o seguinte:

Protegendo Cookies

Como os cookies são parte integrante de aplicativos da Web, é importante compreender os métodos que podem ser usados ??para protegê-los adequadamente. Enquanto o desenvolvedor de um aplicativo é, em última instância, a única pessoa que pode fazer alterações para proteger os cookies na maioria dos casos, é importante entender o que eles podem fazer.

Já discutimos o que são os cookies e falamos um pouco sobre o que eles são usados ??e como eles podem ser comprometidos. Agora vamos falar sobre a definição de atributos que podem proteger os cookies e torná-los mais seguros.

A seguir está uma lista dos atributos que podem ser definidos em uma base por cookie, o que os torna mais seguros para usar:

Fraquezas na criptografia

Em aplicações web, criptografia desempenha um papel vital porque informações confidenciais são frequentemente trocadas entre o cliente e servidor na forma de logons ou outros tipos de informações.

Ao proteger aplicativos da Web, você deve considerar a segurança da informação em duas etapas: quando ela é armazenada e quando é transmitida. Ambas as etapas são áreas potenciais para o ataque. Ao considerar a criptografia e seu impacto na aplicação, concentre-se nesses áreas:

Algumas ferramentas e recursos estão disponíveis para ajudar na avaliação da segurança de aplicativos da Web e suas estratégias de criptografia associadas:

Ataque Directory Traversal

Este ataque também é conhecido como Path Traversal, ou traduzido ao pé da letra como ataque de passagem de diretório. Ele permite que um invasor se mova para fora do diretório do servidor web e para outras partes do host. Uma vez fora deste diretório, o invasor pode então ser capaz de ignorar permissões e outros controles de segurança e executar comandos no sistema.

Para executar este ataque, um intruso tira proveito de erros ou fraquezas em uma das duas áreas:

Para realizar um ataque de passagem de diretório, é surpreendentemente necessário pouco conhecimento e um navegador da Web. Com essas ferramentas e paciência, é possível encontrar cegamente arquivos e diretórios padrões em um sistema.

O sucesso do ataque depende em grande parte da configuração do site e do servidor, mas existem alguns tópicos comuns. Normalmente, os atacantes dependem de assumir ou falsificar-se como usuários e obter acesso a tudo o que os usuários têm acesso.

Nos aplicativos da Web com páginas dinâmicas (como PHP, ASP ou ASP.NET), a entrada é normalmente recebida dos navegadores por meio dos métodos de solicitação GET ou POST. Aqui está um exemplo de um URL de solicitação GET HTTP:

http://subdominio.nomedositealvo.com/pagina.asp?ver=conteudo.html

Com essa URL, o navegador solicita a página dinâmica pagina.asp do servidor e com ela também envia a exibição de parâmetros com o valor conteudo.html. Quando esta solicitação é executada no servidor web, pagina.asp recupera o arquivo conteudo.html do sistema de arquivos do servidor e o devolve ao solicitante. Através de algumas análises, um invasor pode assumir que a página pagina.asp pode recuperar arquivos do sistema de arquivos e criar um URL personalizada:

http://subdominio.nomedositealvo.com/pagina.asp?ver=../../../../../Windows/system.ini

Isso fará com que a página dinâmica recupere o arquivo system.ini do sistema de arquivos e exibe-o para o usuário. A expressão ../ instrui o sistema a ir um diretório para cima, que é comumente usado como uma diretiva de sistema operacional. O atacante tem que adivinhar quantos diretórios tem que ir até encontrar a pasta do Windows no sistema, mas isso é feito facilmente por tentativa e erro.

A estrutura do diretório real variará dependendo do próprio servidor, portanto este processo pode exigir uma quantidade considerável de tentativa e erro. Entretanto, considere o fato de que não é incomum que o software seja instalado em pastas e estruturas padrões.

Você não precisa usar o código para atacar o servidor. Você pode usar apenas o navegador sozinho. Um servidor web pode estar completamente aberto a um ataque de diretório de passagem e apenas à espera de um invasor ambicioso para rastrear e usar arquivos de exemplo e scripts contra ele.

Por exemplo, uma solicitação de URL que faz uso do diretório de scripts do IIS para percorrer diretórios e executar um comando pode ter esta aparência:

http://servidoralvoparaserinvadido.com/scripts/..%5c../Windows/System32/cmd.exe?/C+dir+c:\

A solicitação retorna uma lista de todos os arquivos no diretório C:\, executando o arquivo de shell do comando cmd.exe e executando o comando dir c:\ no shell. A expressão %5c que está na solicitação de URL é um código de escape do servidor web usado para representar caractere normal. Nesse caso, %5c representa o caractere \. Em alguns textos e whitepapers, o uso de um sinal % em um URL é conhecido como codificação percentual.

A maioria dos servidores web modernos verifica a presença de códigos e bloqueiam de serem usados. No entanto, com um número tão grande de servidores web de todos os tipos, é mais do que possível que o servidor que você escolher para atacar não irá filtrar esses códigos.

Protegendo-se de ataques Directory Traversal

Alguns métodos pode ser usado para impedir ataques deste tipo, como:

Testando Aplicações Web

Como as aplicações web são complexas, pode ser necessário o uso de software especializado para analisar ou testar um aplicativo. Alguns destes pacotes de software estão aqui.

Burp Suite

O Burp Suite é um aplicativo baseado em Java usado para testar e atacar aplicativos da web. Em uma inspeção mais próxima o software é realmente uma coleção das ferramentas usadas para verificar diversas peças e características de uma aplicação.

O Burp Suite oferece uma combinação robusta de ferramentas que podem ser usadas tanto manual quanto automaticamente para verificar a aplicação. As ferramentas podem enumerar, analisar, verificar, atacar e explorar furos na aplicação web.

O Burp Suite inclui ferramentas que podem executar o seguinte:

Vega Web Application Scanner

Incluído com o Kali Linux 2.0 é um scanner projetado para avaliar uma aplicação web. O Vega é capaz de detectar problemas de injeção de SQL, XSS, divulgação de informações confidenciais e muito mais. Enquanto ele está presente e instalado no Kali Linux, ele está disponível no Windows e OS X também porque é baseado em Java.

Sugestões de livros:

Sou bacharel em Sistemas de Informação pela Estácio de Sá (Alagoas), especialista em Gestão Estratégica da Tecnologia da Informação pela Univ. Gama Filho (UGF) e pós-graduando em Gestão da Segurança da Informação pela Univ. do Sul de Santa Catarina (UNISUL). Certificações que possuo: EC-Council CEH, CompTIA (Security+, CySA+ e Pentest+), EXIN (EHF e ISO 27001), MCSO, MCRM, ITIL v3. Tenho interesse por todas as áreas da informática, mas em especial em Gestão e Governança de TI, Segurança da Informação e Ethical Hacking.

Sair da versão mobile