Vulnerabilidades na WWW

Projecto de Aplicações e Algoritmos de Segurança

Motivação:

Actualmente praticamente todas as páginas desenvolvidas no âmbito da World Wide Web possuem campos para interpretação de dados introduzidos pelo utilizador, quer sejam contas de serviços que requerem autenticação (e-Banking p.e.) ou simplesmente livros de visita de páginas pessoais. A necessidade de gestão de variados utilizadores e das suas informações confidenciais no domínio público da Internet requer boas práticas e um conhecimento elevado das linguagens usadas na programação das páginas de interacção com o utilizador. Sendo o "input" do utilizador fonte de maliciosas combinações, uma má gestão no tratamento de dados do mesmo pode levar a ataques perigosos que comprometem a segurança e confidencialidade no acesso a bens e ou serviços.

O objectivo deste projecto consiste em simular e identificar situações passíveis de introdução de dados mal intencionada a diversos níveis de programação de páginas na Internet (HTML, Javascript, PHP, SQL, etc...) e indentificar técnicas de boa programação para a prevenção e resolução desse tipo de problemas.


1. Cross-Site Scripting

Introdução:

Cross-Site Scripting (XSS; não confundir com CSS que se refere a folhas de estilo) é um tipo de exploração que surge quando um atacante utiliza um website para enviar código malicioso, normalmente escrito sobre a forma de scripts, para outros utilizadores. Quando um website transfere informacao de um utilizador para outro sem a validar então esse website é vulnerável a ataques de XSS. Um utilizador mal intencionado pode inserir código perigoso no input e usar o website para o encaminhar para outros utilizadores. Estes ataques exploram a confiança que os utilizadores atacados têm no site para executar tarefas que normalmente não seriam permitidas. As mensagens de ataque são muitas vezes disfarçadas para se tornarem menos suspeitas. Os utilizadores são enganados a seguir uma hiperligação ou a submeter informação em formulários, o que provoca a injecção do código malicioso no website vulnerável. O website reflecte depois esse código para o browser do cliente que o executa de maneira oculta por ter sido enviado por um servidor de confiança.

Os ataques de XSS podem ser categorizados em dois tipos, dependendo de como o código malicioso foi introduzido no servidor:

Demonstração de ataques:

Situação Natureza Tipo
Autenticação HTML com CGI Reflected Lição 1
Apresentação de dados HTML com CGI Reflected Lição 2
Post de notícias PHP Stored Lição 3
Envio de e-mail Java e JSP Reflected Lição 4

Obs.: Os dados de autenticação em todos os exemplos são : [ Username: aas , Password: 1234 ]

Prevenção:


2. SQL Injection

Introdução:

SQL Injection é uma técnica para exploração de Web Applications que usem informação introduzida pelo utilizador em queries de SQL sem validarem o seu conteúdo. Consiste no aproveitamento dessa fragilidade para gerar queries de SQL que normalmente não seriam aceitáveis ou seguras e que permitem o acesso e manipulação de dados ou serviços restritos. Apesar de ser relativamente simples proteger um sistema contra este tipo de ataques, existe uma grande quantidade de aplicações ligadas à Internet que são vulneráveis a eles.

Demonstração de ataques:

Situação Natureza
Autenticação Java, JSP e SQL Lição 5

Obs.: Os dados de autenticação em todos os exemplos são : [ Username: aas , Password: 1234 ]

Prevenção:


Referências:


"Vulnerabilidades na WWW"
Projecto de Algoritmos e Aplicações de Segurança, LEIC - 4º ano, 2004-2005
Luis Miguel Silva Costa, Mail, Homepage
Nuno Alexandre Costa Fresta dos Santos, Mail, Homepage