Responsive image

O nosso projeto de iniciação científica foi desenvolvido entre no período de Agosto de 2019 e Julho de 2020. Ele tem com tema segurança da informação, principalmente programação segura, que vem ganhando destaque nos últimos anos em consequência do grande número de aplicações Web identificadas com falhas de segurança, colocando em risco informações tanto de usuários finais quanto de empresas e organizações. Nesta seção, descrevemos os resultados de nossa pesquisa e os materiais produzidos para auxiliar no entendimento das vulnerabilidades e desenvolvimento de aplicações seguras em relação às vulnerabilidades estudadas.

Com base na pesquisa da OWASP (Open Web Application Security Project) (OWASP, 2017), identificamos a importância das vulnerabilidades do tipo SQL Injection (JUNJIN, 2009), que permitem realizar ataques ao banco de dados do sistema por meio de cláusulas SQL inseridas pelo usuário mal-intencionado na interface da aplicação Web. Também identificamos a importância das vulnerabilidades do tipo XSS (Cross Site Scripting) (GUPTA; GOVIL; SINGH, 2014), que consiste na inserção de scripts maliciosos em campos de entrada de usuário, podendo viabilizar envio de malwares (um software nocivo com o intuito de roubar dados) ou até roubo de sessões de usuário.

Além da OWASP, para identificarmos soluções científicas para nossa pesquisa, buscamos dados em bases online de artigos científicos verificadas e reconhecidas no meio acadêmico, como IEEE Xplore Digital Library, ACM Digital Library e Science Direct. Deste modo, foi necessário aprendermos sobre a organização das bases cientificas e analisar muitos artigos científicos, inclusive em inglês, permitindo compreender e discernir sobre o tema de segurança da informação e, principalmente, sobre formas de ataque e prevenção das vulnerabilidades citadas.

Demonstração de Vulnerabilidades e Ataques

Com base em nossa pesquisa sobre SQL Injection, desenvolvemos uma aplicação Web (Figura 1) que simula um sistema de cadastro e login de usuários vulnerável. O objetivo é podermos verificar como ocorre um ataque de SQL Injection em um sistema vulnerável. Também implementamos um outro caso de uso, onde o login é protegido contra a vulnerabilidade de SQL Injection, permitindo testar técnicas de prevenção contra a vulnerabilidade. Detalhes sobre vulnerabilidade SQL injection e o funcionamento da aplicação estão em nossa página

Responsive image

Figura 1. Imagens da aplicação Web para testar SQL Injection.

Outra vulnerabilidade abordada no nosso projeto foi do tipo Cross-site scripting (XSS). Também desenvolvemos uma aplicação vulnerável (Figura 2), com campos de entrada do usuário, buscando testar formas possíveis de ataques por meio da inserção de scripts maliciosos, onde podemos validar diferentes casos de ocorrência da falha XSS. Detalhes sobre vulnerabilidade XSS e o funcionamento da aplicação estão em nossa página.

Responsive image

Figura 2. Imagens da aplicação Web para testar XSS.

Ambas as aplicações foram desenvolvidas utilizando a linguagem de programação PHP e técnicas de sanitização de dados foram aplicadas para corrigir as vulnerabilidades introduzidas no código (para mais detalhes sobre essas técnicas de sanitização acesse nossa página que descreve detalhadamente as vulnerabilidades). Além de auxiliar no nosso entendimento sobre ataques e programação segura, essas aplicações também têm como objetivo divulgar o conhecimento para a população de maneira didática, a fim de auxiliar na conscientização do usuário de aplicações Web sobre a importância da segurança de suas informações pessoais, sujeitas à divulgação não autorizada quando manipuladas por aplicações vulneráveis.

Interação com a comunidade

Durante nosso projeto, participamos dos eventos COTIL de Portas Abertas e Feira de Profissões, em 2019, nos quais apresentamos nossa pesquisa sobre segurança da informação, expusemos as demonstrações de SQL Injection (Figura 1) e XSS (Figura 2) criadas como exemplos de aplicações vulneráveis e discutimos resultados do nosso projeto. Com isso, presenciamos a reação positiva do público, muitos relataram experiências próprias com dados furtados, levantaram questionamentos sobre segurança da informação e procuraram conhecer melhor o projeto, demonstrando interesse sobre o tema debatido e entendendo melhor a relevância dos aspectos de segurança em aplicações Web.

Mapa Mental

Para a nossa pesquisa, desenvolvemos um mapa mental (Figura 3), ou seja, um diagrama apresentando conceitos e exemplos relacionados à vulnerabilidade do tipo SQL Injection. O mapa foi baseado em artigos científicos e, desse modo, organizamos e classificamos as várias informações pesquisadas com o objetivo de facilitar o entendimento dessa vulnerabilidade de segurança. Os grupos e respectivos elementos do mapa são descritos a seguir.

Responsive image

Figura 3. Mapa Conceitual desenvolvido durante a nossa pesquisa contemplando informações obtidas a partir de artigos científicos.

1. Tipos de Ataque:

Ao encontrar uma vulnerabilidade SQL Injection, o invasor procura conseguir informações sobre o banco de dados alvo. Para isso utiliza ataques do tipo sondagem com o objetivo de retornar informações importantes do sistema que não foram devidamente protegidas. Um exemplo é retornar mensagens de erro SQL que indicam o nome, tabelas, colunas e linhas do banco de dados alvo. Exemplos de ataques de sondagem são: Index (mensagem com o número de indexação dos registros do banco de dados); Null Count (mensagem de erro que retorna nome de colunas do banco de dados), Incorrect Queries (mensagem de erro ao tentar acessar o banco de dados) .

Em posse das informações sobre o banco de dados alvo, o atacante utiliza essas informações para criar uma cláusula SQL para os fins pretendidos, podendo adicionar, excluir, alterar ou retornar qualquer dado contido no sistema. Chamamos isso de ataques de invasão , executados em campos da página que não foram devidamente tratados. São exemplos de ataques de invasão: Tautologia (a cláusula SQL Injection sempre é verdadeira, tal como em 1 = 1), Piggy Backed (tentar criar uma cláusula SQL Injection por tentativa e erro) e Ataque Union (utilizar múltiplos parâmetros SQL, como “UNION SELECT” e “ORDER BY”).

2. Técnicas de Análise:

Procurando analisar o grau de segurança de aplicações Web, foram desenvolvidas ferramentas permitindo identificar vulnerabilidades. Essas ferramentas podem ser classificadas em dois tipos: estáticas e dinâmicas.

Ferramentas Estáticas: conhecidas como “whitebox”, atuam separadas da execução do sistema, executando testes automáticos ou manuais em busca de erro de sintaxe, codificações malfeitas, brechas que ameacem a integridade do sistema (como, por exemplo, não verificar os dados de entrada do usuário ou expor mensagens de erro diretas do banco de dados).

São exemplos de ferramentas estáticas: MUSIC (multi-tool web vulnerability scanner que permite verificar a segurança desde ataques SQL Injection até ataques de redes), SQL UnitGen (um criador de teste automáticos contra SQL Injection) e Vulnerability and Attack Injection (permite criar manualmente testes contra vulnerabilidades e ataques de injeção).

Ferramentas Dinâmicas: denominadas “blackbox”, são executadas simultaneamente com o sistema para avaliar aspectos de segurança e desempenho, principalmente o comportamento da aplicação diante de tentativas de invasão, podendo ser realizado por simulações de invasões ou ferramentas automatizadas . As simulações de invasões consistem em comparar o comportamento do sistema com o resultado esperado, ou seja, caso o usuário insira um dado ou uma informação inesperada no sistema, verificar como ele irá trata-la.

São exemplos de ferramentas dinâmicas: SQLand (ferramenta que detecta possíveis entradas de SQL Injection), AMNESIA (ferramenta que gera querys modificadas e avalia se a invasão foi bem sucedida ou não) e WASP (gera ataques de invasão contra aplicações Web e, a partir do comportamento da aplicação, detecta vulnerabilidades).

3. Técnicas de Prevenção:

Tendo em vista os meios para analisar ataques SQL Injection e sabendo de seu funcionamento, torna-se possível desenvolver técnicas buscando prevenir possíveis casos de SQL Injection. Em consequência, o desenvolvimento de um código mais elaborado, incluindo diferentes técnicas de proteção, garantirá maior segurança para a aplicação.

Salientamos a importância de adotar boas práticas de codificação envolvendo técnicas de sanitização de dados , ou seja, evitar concatenar os dados de entrada do usuário, filtrar os dados impedindo a inserção de caracteres especiais, realizar revisões do código e executar testes em busca de vulnerabilidades. Além do uso de recursos disponíveis em muitas linguagens de programação atuais para proteger aplicações Web, como o uso de parametrized query insertion (a cláusula SQL é criada por passagem de parâmetros, ao invés de concatenar a entrada do usuário) ou SQL DOM (software com a funcionalidade específica de filtrar dados de entrada inseridos na aplicação Web).

Ferramenta de análise de vulnerabilidade SQL Injection

Dada a complexidade de uso das ferramentas estudadas, nós desenvolvemos uma ferramenta para identificar aplicações vulneráveis a ataques SQL Injection (Figura 4). O objetivo é que a ferramenta seja simples e fácil de utilizar. Ela foi desenvolvida na a linguagem de programação PHP, que é utilizada para criar funcionalidades back-end de aplicações Web, como conexões com o banco de dados e manipulação de entradas do usuário. A ferramenta simula um ataque de SQL Injection na página que o usuário deseja verificar a segurança, ou seja, a partir de uma URL ele poderá verificar se a página é vulnerável ou se possui proteções contra ataques do tipo SQL Injection.

Responsive image

Figura 4. Ferramenta para verificar aplicações vulneráveis a ataques SQL Injection.

Para a ferramenta simular um ataque, criamos uma interface que requer a inserção de um arquivo de texto contendo uma ou várias URLs de aplicações Web que o usuário pretenda verificar a segurança. A partir desse arquivo, o código PHP envia requisições simulando tentativas de invasão e registra se essa tentativa foi bem-sucedida ou não.

Responsive image

Figura 5. Código da ferramenta para receber e tratar arquivos.

Na Figura 5, mostramos parte do código PHP usado na ferramenta, onde recebemos o arquivo passado pelo usuário e verificamos as propriedades do arquivo, tais como tamanho e formato. Após isso, criamos uma cópia do arquivo e salvamos a cópia em uma área de transferência para conseguir ler as URLs e criar as requisições.

Responsive image

Figura 6. Linha de código testando caracteres especiais.

Após criadas as requisições e recebido o conteúdo do formulário da página analisada, o código (Figura 6) insere caracteres especiais em campos de entrada de usuário, assim como utilizado em ataques SQL Injection. Depois de reenviada a requisição, podemos determinar se foi bem sucedido o ataque pela resposta do servidor Web, que retornará uma conexão bem-sucedida com o sistema caso o ataque funcione, ou impedirá a conexão com o banco de dados.

É importante salientar que a ferramenta foi desenvolvida para uso didático e ela simplesmente identifica uma aplicação vulnerável, não causando dano nenhum à aplicação analisada. Ela também foi implementada de forma que só funciona em ambiente restrito e os testes só são realizados em aplicações locais, ou seja, aplicações que foram disponibilizadas para esse fim. Também salientamos que a ferramenta ainda está em fase de desenvolvimento e deve ser aperfeiçoada em trabalhos futuros.

Disponibilizamos o link da nossa ferramenta automatizada de testes em um sistema vulnerável (Teste nossa ferramenta. Clique Aqui!).

Referências

GUPTA, M. K.; GOVIL, M.; SINGH, G. Static analysis approaches to detect sql injection and cross site scripting vulnerabilities in web applications: A survey. In: IEEE. International Conference on Recent Advances and Innovations in Engineering (ICRAIE-2014). [S.l.], 2014. p. 1–5.

JUNJIN, M. An approach for sql injection vulnerability detection. In: IEEE. 2009 Sixth International Conference on Information Technology: New Generations. [S.l.], 2009. p.1411–1414.

OWASP, T. Top 10-2017. The Ten Most Critical Web Application Security Risks. OWASP Foundation. The free and open software security community. URL: https://www.owasp.org/index.php/Top_10-2017_Top_10, 2017.