segurança em aplicações asp.net (xss e csrf)
TRANSCRIPT
LUCIANO GERHARDT, SETEMBRO 2014
SEGURANÇA EM APLICAÇÕES
ASP.NET (XSS E CSRF)
HOJE
FALAREMOS
SOBRE1. SEGURANÇA EM APLICAÇÕES ASP.NET
2. ATAQUES CROSS-SITE SCRIPTING
3. MITIGANDO ATAQUES XSS
4. ATAQUES CROSS-SITE REQUEST FORGERY
5. MITIGANDO ATAQUES CSRF
6. FERRAMENTAS DE AUDITORIA
2
SEGURANÇA EM APLICAÇÕES
ASP.NET
INTRODUÇÃO
SEGURANÇA EM
APLICAÇÕES ASP.NET
Esta apresentação tem por finalidade evidenciar elementos a respeito da
segurança de aplicações ASP.NET.
Os tipos de ataque abordados são: XSS e CSRF, que através de exemplos,
são demonstrados códigos e possíveis soluções.
4
ENCODE/DECODE
SEGURANÇA EM
APLICAÇÕES ASP.NET
Primeiramente, devemos saber as diferenças entre um HTML codificado e
decodificado.
Exemplo de código HTML:
<b> Isso é um texto qualquer. </b>
Codificado, ele fica da seguinte maneira;
<b> Isso é um texto qualquer. </b>
No navegador, ele será exibido da seguinte maneira:
<b> Isso é um texto qualquer. </b>
Enquanto que, caso ele seja apresentado em sua forma pura, sem codificar,
será apresentado da seguinte maneira:
Isso é um texto qualquer.
5
ATAQUES CROSS-SITE SCRIPTING
O QUE É?
ATAQUES XSS
Cross Site Scripting é um tipo de brecha de segurança onde o hacker insere
código malicioso (geralmente um script js) em uma página ou banco de dados
sem o conhecimento do usuário.
7
COMO FUNCIONA?
ATAQUES XSS
Existem três tipos de ataque XSS:
• Refletido (reflected): quando o usuário envia código malicioso para o
servidor, e esse código retorna do servidor;
• Persistente (persistent): quando o código malicioso fica armazenado em
algum lugar, como um banco de dados, por exemplo. Dessa forma, pode
ser executado várias vezes, o que se torna mais perigoso que o primeiro;
• Baseado no DOM (DOM based): pode ser utilizado pelos dois tipos de
ataque anteriores. Utiliza dados e manipula elementos DOM da página
onde o código malicioso foi inserido.
8
ATAQUES REFLETIDOS
ATAQUES XSS
Esse tipo de ataque geralmente é feito incluindo script ou HTML na querystring
de um Request do tipo GET, como por exemplo, no parâmetro de uma
mensagem que retorna ao usuário, colocar um form para roubar as credenciais
do usuário, como no exemplo abaixo:
9
ATAQUES REFLETIDOS
ATAQUES XSS
Ou então, utilizar um script para emitir um alerta:
10
ATAQUES PERSISTENTES
ATAQUES XSS
Nesse tipo de ataque, o hacker pode inserir um script malicioso no banco de
dados, através de um campo de comentários, por exemplo. E dessa forma,
toda vez que um usuário entrar na página abrirá um form de login fake, como
no exemplo abaixo:
11
ATAQUES PERSISTENTES
ATAQUES XSS
12
ATAQUES BASEADOS NO DOM
ATAQUES XSS
Nessa categoria de ataques, podem ser utilizadas técnicas tanto persistentes
quanto refletidas. Podem ser exploradas funções vulneráveis do jQuery, como
no exemplo a seguir:
13
ATAQUES BASEADOS NO DOM
ATAQUES XSS
14
ATAQUES BASEADOS NO DOM
ATAQUES XSS
Mesmo com a string codificada, é possível convertê-la novamente para html e
exibir o alert através da função html(htmlString).
Outra forma, é utilizando uma técnica parecida com SQL Injection, como por
exemplo, em situações em que é utilizado um alerta com conteúdo dinâmico
vindo do usuário.
<img onmouseover=alert(user input) />
Então, através desse input, o script é alterado intencionalmente:
<img onmouseover=alert(1) onmouseout=alert(document.cookie) >
Dados sensíveis do cookie podem ser adquiridos dessa maneira.
15
MITIGANDO ATAQUES XSS
ANTIXSS SANITIZER
MITIGANDO ATAQUES XSS
Todo HTML armazenado deve ser codificado, ou seja, limpo de tags HTML e js.
Quando não há interesse em armazenar HTML, e sim apenas texto, é preferível
utilizar alguma biblioteca para “limpar” o HTML e scripts do texto.
Existe uma biblioteca da Microsoft chamada AntiXss, que possui métodos do
tipo GetSafeHtml() e GetSafeHtmlFragment(), que remove scripts de strings
para renderizar na tela de forma segura, mesmo que estejam codificados, como
está na imagem abaixo:
17
FORÇAR CODIFICAÇÃO UTF-8
MITIGANDO ATAQUES XSS
Forçar a codificação da página em UTF-8 no web.config, pois o atacante
poderá utilizar UTF-7, por exemplo, e assim dificultar a codificação do script
pelo encoder.
18
POLÍTICAS DE SEGURANÇA DE CONTEÚDO
MITIGANDO ATAQUES XSS
Aplicar políticas de segurança de conteúdo, para autorizar apenas a execução
de script do próprio host, ou autorizar scripts de determinados hosts. Isso é
feito através de headers para impedir a execução de scripts de terceiros,
porém, o IE ainda não tem suporte para esse recurso.
19
OUTROS MÉTODOS
MITIGANDO ATAQUES XSS
Apenas usar a abordagem de filtros para detectar e retirar as tags <script> e
removê-las ou substituí-las não garante nada, pois existem várias técnicas de
rodar scripts sem a tag <script>, como por exemplo: onload=alert(‘qualquer
coisa’).
Validar os dados! Nunca confie no seu usuário, é essencial garantir que os
dados submetidos sejam exatamente o que a aplicação espera.
Não setar o atributo ValidateRequest para false. Ela lança uma exception
quando há algum erro, previna esse erro usando a codificação adequada antes
de enviar dados ao servidor.
20
OUTROS MÉTODOS
MITIGANDO ATAQUES XSS
Saiba onde os elementos DOM são criados e modificados. Utilize funções do
tipo setAttribute e document.createElement(‘div’) ao invés de document.writein
e $(‘div’).html().
Se for possível, evitar o uso do IE6. Redirecione o usuário para IE6update.com.
Audite todos os lugares onde dados podem ser atribuídos. Utilize text-boxes
com codificação (encode), podem ser utilizada ferramentas de auditoria como
XSS-ME para Firefox e DOM-SNITCH para o Chrome.
Mantenha-se atualizado quanto à técnicas de ataque e vulnerabilidades das
tecnologias utilizadas! OWASP tem um bom cheat-sheet de defesa contra XSS
com atualizações regulares.
21
OUTROS MÉTODOS
MITIGANDO ATAQUES XSS
Conheça as codificações (encoding) do ASP.NET para configurar os arquivos
de configuração (.config) adequadamente.
22
ATAQUES CROSS-SITE REQUEST
FORGERY
O QUE É?
ATAQUES CSRF
Requisições feitas por um site malicioso a outro site no qual o usuário está
autenticado.
24
COMO FUNCIONA?
ATAQUES CSRF
1. Usuário faz o login no banco.com;
2. Servidor autentica usuário e o HTTP Response inclui um cookie de
autenticação;
3. Sem realizar o logout no banco.com, o usuário visita outro site que contém
um form oculto;
4. O site contém um HTML malicioso como o seguinte, que executa um post
no site vulnerável:
5. O usuário clica no botão e o cookie de autenticação é enviado junto pelo
navegador;
6. O request roda no servidor do banco.com no contexto autenticado do
usuário, podendo realizar qualquer coisa que um usuário autenticado pode
fazer.
25
Exemplo de código malicioso:
ATAQUES CSRF
26
MITIGANDO ATAQUES CSRF
AÇÕES PARA MITIGAR ATAQUES CSRF
MITIGANDO ATAQUES CSRF
SSL não previne contra ataques CSRF, pois requisições podem ser feitas
utilizando “https://”.
Ataques CSRF não estão limitados a sites que utilizam cookies para
autenticação.
Basic e Digest authentication também são vulneráveis, pois o browser envia as
credenciais em todas as requisições até a sessão terminar.
Para mitigar esses problemas, no ASP.NET MVC podemos utilizar o helper
HtmlHelper.AntiForgeryToken no Razor. Ou então, o método
AntiForgery.GetTokens(null, out cookieToken, out formToken); encapsulado
numa function para centralizar todas as requisições AJAX.
28
FERRAMENTAS DE AUDITORIA
PLUGINS PARA GOOGLE CHROME
FERRAMENTAS DE
AUDITORIA
https://code.google.com/p/domsnitch/
http://resources.infosecinstitute.com/19-extensions-to-turn-google-chrome-into-
penetration-testing-tool/
http://blog.anantshri.info/chrome-extensions-for-security-professionals/
30
PLUGINS PARA FIREFOX
FERRAMENTAS DE
AUDITORIA
https://addons.mozilla.org/en-US/firefox/addon/xss-me/
http://resources.infosecinstitute.com/use-firefox-browser-as-a-penetration-
testing-tool-with-these-add-ons/
http://labs.securitycompass.com/exploit-me/
31
OUTRAS FERRAMENTAS
FERRAMENTAS DE
AUDITORIA
http://www.acunetix.com/cross-site-scripting/scanner-download
32
Obrigado ;)
LUCIANO GERHARDTANALISTA DE SISTEMAS, FSW POA
+ 55 (51) 2139-5300 RAMAL [email protected]