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:
- Stored XSS (XSS por Armazenamento), que geralmente se referem a ataques onde o código de ataque é armazenado permanentemente
no servidor (p.e., bases de dados, fóruns de mensagens, ...);
- Reflected XSS (XSS por Reflexão), que são introduzidos via mecanismos alternativos como e-mail, outros servidores, parâmetros
de input, ...
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:
- Não confiar nos dados do utilizador:
- Não permitir tags de HTML;
- Substituir símbolos necessários que possam ser interpretados por HTML pelos seus códigos hexadecimais, ou usar outra
metodologia preventiva (p.e., colocar "\" antes dos caracteres especiais);
- Testar sempre antes de avaliar;
- Avaliar/Apresentar apenas o admitido.
- Validar todos os dados de entrada no sistema, mesmo aqueles que não são directamente introduzidos pelo utilizador;
- Utilizar funções de validação actuais e de confiança (existem várias sobre as diversas linguagens de programação na web);
- Adoptar técnicas de programação defensiva (p.e., evitar input do utilizador).
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:
- Filtragem dos dados, i.e., garantir que o input do utilizador não pode ser usado maliciosamente:
- Proteger caracteres especiais;
- Limitar os caracteres possíveis.
- Construir as queries só depois de validados os dados;
- Delimitar os dados de entrada.
Referências:
- W3Schools HTML Reference, http://www.w3schools.com/html/html_reference.asp
- CGI, http://www.cgi101.com/book/
- CGI Security, http://www.cgisecurity.com/articles/xss-faq.shtml
- WebMonkey: XSS, Trust and Barney, http://webmonkey.wired.com/webmonkey/00/18/index3a.html
- Peej.co.uk - What is Cross-Site Scripting?, http://www.peej.co.uk/articles/cross-site-scripting.html
- Mitigating Cross-Site Scripting with HTTP-only Cookies, http://msdn.microsoft.com/workshop/author/dhtml/httponly_cookies.asp
- Sanctum - Cross-Site Scripting Explained, http://crypto.stanford.edu/cs155/CSS.pdf
- IBM - Prevent a Cross-Site Scripting Attack, http://www-128.ibm.com/developerworks/library/wa-secxss/
- iDefense - The Evolution of Cross-Site Scripting Attacks, http://www.cgisecurity.com/lib/XSS.pdf
- The Anatomy of Cross-Site Scripting, http://www.net-security.org/dl/articles/xss_anatomy.pdf
- Real World XSS, http://www.sandsprite.com/Sleuth/papers/RealWorld_XSS_1.html
- Spy Dinamics Cross-Site Scripting White Paper, http://www.spidynamics.com/whitepapers/SPIcross-sitescripting.pdf
- XML Web Services Security and Web Based Application Security, http://www.giac.org/practical/GSEC/Chris_Kwabi_GSEC.pdf
- Spy Dinamics SQL Injection White Paper, http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf
- Advanced SQL Injection in SQL Server Applications, http://www.nextgenss.com/papers/advanced_sql_injection.pdf
"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