Escolar Documentos
Profissional Documentos
Cultura Documentos
Ribeiro, Wellington Z.
Aplicação de Boas Práticas de Segurança no
desenvolvimento de Sistemas Web. / Wellington Zanelli
Ribeiro ; orientador Breno Lisi Romano ; co-orientador:
Roan Simões da Silva. São João da Boa Vista, 2013.
ajudar com as dúvidas de gramática e por último, mas não menos importante,
ao meu “Guia”, sempre ao meu lado nos momentos mais difíceis, me guiando
pelos desafios da vida, do universo e tudo mais e que mesmo quando toda
resistência parecia inútil seu precioso conselho era o que me fazia seguir em
Due to the increasing of internet users, web systems have been more
present in daily routine of people. With the expansion of these systems,
security problems related to them appeared frequently. This work aims to
provide a guideline of security best practices to be applyied in web systems
development, supporting developers during and after the development process.
It was explored, in this work, the first five vulnerabilities listed in the Top Ten
of 2010 OWASP. Two web systems with the same features were developed,
but only one has been implemented according to the best security practices
suggested in proposed guideline. These systems were analyzed and tested using
some specific tools for each of the vulnerabilities discussed and following an
adaptation of the tests methodology OSSTMM for web systems. The tools used
in the tests properly reached their goal and all vulnerabilities were
demonstrated and treated.
de Hipertexto)
Transferência de Hipertexto)
seguro 1ª Série)
Estruturada)
Universal)
SUMÁRIO
1 INTRODUÇÃO .......................................................................................................... 21
2.3.5 OWASP............................................................................................................................... 30
References) .................................................................................................................................. 36
2.4.5 Falsificação de Solicitação de Site Cruzado (Cross-Site Request
Access) .........................................................................................................................................40
3 METODOLOGIA ....................................................................................................... 53
Escolhida .....................................................................................................................................54
Prático ......................................................................................................................................... 55
References) .................................................................................................................................. 64
4 RESULTADOS........................................................................................................... 67
References) ...................................................................................................................................80
5 CONCLUSÃO ............................................................................................................ 85
REFERÊNCIAS ............................................................................................................... 87
Capítulo
21
1 Introdução
O OWASP (The Open Web Application Security Project) mantém uma lista
chamada Top Ten, apresentada na Tabela 1, que representa um amplo consenso sobre as
falhas de segurança mais críticas das aplicações web.
Tabela 1 - Lista das dez vulnerabilidades web mais críticas, divulgada em 2010 pelo OWASP
Top Ten 2010 - OWASP
1 - Injeção (Injection)
2 - Scripting de Site Cruzado (Cross-Site Scripting - XSS)
3 - Autenticação e Gerenciamento de Sessão Quebrados (Broken Authentication and Session
Management)
4 - Referência de Objeto Direto Insegura (Insecure Direct Object References)
5 - Falsificação de Solicitação de Site Cruzado (Cross-Site Request Forgery - CSRF)
6 - Má Configuração de Segurança (Security Misconfiguration)
7- Armazenamento Inseguro de Criptografia (Insecure Cryptographic Storage)
8 - Falha de Restrição de Acesso à URL (Failure to Restrict URL Access)
9 - Proteção Insuficiente da Camada de Transporte (Insufficient Transport Layer Protection)
10 - Redirecionamentos e Encaminhamentos Não Validados (Unvalidated Redirects and Forwards)
(Adaptado de https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project, acesso em 10/03/2013)
1.1 Motivação
1.2 Objetivos
25
2 Pesquisa Bibliográfica
Mas enquanto a quantidade de vulnerabilidades por site tem caído nos últimos
anos, em contrapartida a quantidade de ataques reportados ao CERT tem aumentado
consideravelmente (vide Figura 1). Partindo deste princípio, torna-se evidente que as
medidas tomadas ainda não são suficientes, pois em muitos casos os programadores
tratam apenas algumas vulnerabilidades, deixando outras de lado. O OWASP, inclusive,
recomenda que os desenvolvedores web não parem no Top Ten, pois ainda há “centenas
de outros problemas que afetam a segurança de um sistema web” (OWASP, 2013).
2.3.1 ISO
A ISO (International Organization for Standardization ou Organização
Internacional para Normatização em tradução livre) é uma organização independente e
não governamental constituída por membros de 163 países. Foi fundada em 1947, em
Genebra, na Suíça e já publicou mais de 19.500 normas de padronização internacionais,
cobrindo praticamente todos os aspectos da tecnologia e negócios. É a maior
desenvolvedora do mundo de Padrões Internacionais. No Brasil é representada pela
ABNT, Associação Brasileira de Normas Técnicas (ISO, 2013).
2.3.2 IEC
A IEC (International Electrotechnical Commission ou Comissão Internacional
Eletrotécnica em tradução livre) é uma organização sem fins lucrativos e não
governamental, fundada em 1906, em Londres.
Atua, juntamente com a ISO, auxiliando e implementando as normatizações
relacionadas à área específica de padrões elétricos e eletrônicos (IEC, 2013).
gestão da segurança da informação” que, em 2007, teve sua numeração atualizada para a
27002.
A norma 27002 provê conselhos e recomendações para gestão da segurança da
informação e tem como público alvo aqueles que são responsáveis pela introdução,
implementação ou manutenção da segurança em suas organizações (ISO/IEC 27002,
2005).
Este trabalho se utilizará, principalmente, das recomendações fornecidas pelo
Capítulo 12 da norma 27002, pois é o capítulo em que ela se aprofunda no
desenvolvimento e manutenção de sistemas de informação, tendo como foco a
segurança destes sistemas.
2.3.4 CERT.br
O CERT.br (Centro de Estudos, Resposta e Tratamento de Incidentes de
Segurança no Brasil) é um grupo que atua como um ponto central para notificações de
incidentes de segurança no Brasil, provendo a coordenação e o apoio no processo de
resposta a incidentes, além de também atuar no trabalho de conscientização sobre os
problemas de segurança, da análise de tendências e correlação entre eventos na Internet
brasileira. É mantido pelo NIC.br (Núcleo de Informação e Coordenação do Ponto BR)
do Comitê Gestor da Internet no Brasil (CERT BR, 2013).
Este grupo, além de fornecer cartilhas de orientação sobre a utilização segura da
internet, mantém estatísticas sobre incidentes de segurança e spams sempre atualizadas.
É válido citar que as notificações enviadas à este grupo são voluntárias, portanto não
correspondem à 100% de todos os incidentes que ocorrem no Brasil.
2.3.5 OWASP
O OWASP (The Open Web Application Security Project) é uma entidade, sem
fins lucrativos e de reconhecimento internacional, que contribui para a melhoria da
segurança de software e aplicativos, reunindo informações importantes que permitem
avaliar riscos de segurança e combater formas de ataques através da internet.
Foi estabelecida em 2001 e sua missão é tornar a segurança de software visível
para que indivíduos e organizações possam tomar decisões conscientes sobre os
verdadeiros riscos do software.
31
Injeção (Injection)
Facilidade de Exploração Fácil
Predomínio Comum
Detecção Média
Impacto Severo
Tabela 3 - Classificação básica da vulnerabilidade Scripting de Site Cruzado (Cross-Site Scripting - XSS)
Estas falhas podem permitir que algumas ou até mesmo todas as contas sejam
atacadas, mas geralmente as contas com maiores privilégios são os alvos preferidos.
Quando este ataque é bem sucedido, é possível ter acesso às mesmas áreas e
funcionalidades que a vítima teria no sistema.
A Tabela 4 apresenta um resumo sobre a classificação de risco desta
vulnerabilidade.
Tabela 5 - Classificação básica da vulnerabilidade Referência Insegura e Direta a Objetos (Insecure Direct Object
References)
ainda afirma que a detecção de falhas de CSRF é razoavelmente fácil de se realizar, por
meio de testes de penetração ou através de análises do código fonte.
As consequências de um ataque CSRF podem variar de acordo com os privilégios
de acesso do sistema que a vítima possui, e tratando-se de uma vulnerabilidade comum os
desenvolvedores devem ter uma atenção e nunca acreditar que qualquer requisição
enviada ao servidor reflete a intenção de um usuário legítimo (CHEN et al., 2011).
A Tabela 6 apresenta um resumo sobre a classificação de risco desta
vulnerabilidade.
Tabela 6 - Classificação básica da vulnerabilidade Falsificação de Solicitação de Site Cruzado (Cross-Site Request
Forgery - CSRF)
Má Configuração de Segurança
(Security Misconfiguration)
Facilidade de Exploração Fácil
Predomínio Comum
Detecção Fácil
Impacto Moderado
Fonte: OWASP (2010)
Tabela 9 - Classificação básica da vulnerabilidade de Falha de Restrição de Acesso à URL (Failure to Restrict
URL Access)
Quando explorada com sucesso, esta falha expõe os dados dos usuários, que
podem originar roubos de contas. Se uma conta administrativa for comprometida, todo o
endereço pode ficar exposto. As más configurações do SSL podem também facilitar
ataques de MITM (Man In The Middle) e phishing (OWASP, 2013).
A Tabela 10 apresenta um resumo sobre a classificação de risco desta
vulnerabilidade.
2.5.1 SqlMap
A SqlMap é uma ferramenta de teste de penetração gratuita e de código aberto que
automatiza o processo de detecção e exploração de falhas de injeção SQL. Conta com um
poderoso mecanismo de detecção, possui diversas configurações para realizar os testes de
penetração, além de possuir recursos de identificação do banco de dados a partir dos
dados recebidos (SQLMAP, 2013).
Dentre suas principais funcionalidades destacam-se:
Suporte completo para todos os SGBDs modernos, incluindo MySQL,
Oracle, PostgreeSQL, SQL Server e SQLite;
44
Ataques XSS: uma lista pré-configurada de ataques XSS que pode ser
configurada para a utilização em um navegador específico, aplicar filtros por
expressão regular, além da possibilidade de inclusão de seus próprios scripts de
ataque;
Codificador e Decodificador de Caracteres: trabalha com as mais diversas
codificações de caracteres, entre elas: URL, Hex, Unicode, Html, Javascript
Escaped, XML Escaped, entre outros. Pode apenas codificar para MD4 (Message-
Digest Algorithm 4th Generation) e SHA1 (Secure Hash Algorithm 1st Serie);
Requisições HTTP: possibilita criar e enviar manualmente solicitações
HTTP para os servidores, além de poder lançar ataques automáticos com mais de
um pedido por vez; e
Respostas HTTP: permite a visualização dos códigos de status da
requisição e todo o seu conteúdo. Separa a resposta em script, formulários e
cookies.
Na Figura 5 pode-se observar a tela da ferramenta de requisições HTTP do
CAL9000.
47
Uma outra ferramenta muito utilizada para a mesma finalidade do ZAP é o Paros
Proxy, que é uma ferramenta open source desenvolvida em Java para realizar auditorias
de segurança em aplicativos web (PAROS, 2013).
Assim como o ZAP, o Paros Proxy permite interceptar requisições HTTP e
HTTPS, além realizar scanners automatizados para XSS e SQL Injection, possui suporte
para realizar spidering e interceptação de cookies (PAROS, 2013), porém esta ferramenta
foi descontinuada e não recebe atualizações desde 2006, motivo este que levou à não
utilização desta ferramenta nos testes deste trabalho.
O projeto w3af tem como objetivo ser o melhor framework open source para
auxiliar na melhoria da segurança das aplicações web, encontrando e explorando todas as
vulnerabilidades de uma aplicação web (W3AF 2013).
O framework que já vem com alguns perfis de teste prontos e permite a criação de
novos perfis, onde serão armazenadas as configurações específicas para um determinado
teste.
Na Figura 7 pode-se observar a tela inicial do w3af, listando os perfis padrão do
aplicativo.
O teste de cada uma das vulnerabilidades será realizado seguindo uma adaptação
dos sete passos descritos no guia OSSTMM (The Open Source Security Testing
Methodology Manual).
O OSSTMM é mantido pelo Institute for Security and Open Methodologies
(ISECOM) e está atualmente na versão 3, publicada em 14 de dezembro de 2010.
OSSTMM foi criado para a definição e realização de testes de segurança e abrange não
somente o ambiente de teste em desktops, servidores ou equipamentos de roteamento,
mas também aborda todos os canais que possam gerar ou contribuir para que ocorra uma
vulnerabilidade à uma aplicação, incluindo o ser humano (OSSTMM, 2010).
50
Contudo, o OSSTMM não abrange o teste em aplicações web, seu foco principal é
em infraestrutura e equipamentos de rede. Para este trabalho serão realizadas algumas
adaptações nesta metodologia, tornando-a aplicável para testar sistemas web.
53
3 Metodologia
3.1 Objetivo
Para atingir o objetivo deste trabalho, apresentando uma aplicação prática que
exemplifique as vulnerabilidades e suas respectivas correções, foi elaborada uma estratégia
constituída por cinco passos:
1. Escolha das vulnerabilidades;
2. Definição das ferramentas de detecção para cada vulnerabilidade;
3. Apresentação de soluções para cada vulnerabilidade;
4. Aplicação de correções em cada vulnerabilidade; e
5. Análise dos resultados obtidos.
A Figura 9 detalha as etapas definidas para atingir o objetivo deste trabalho:
Figura 9 - Estratégia para verificar e corrigir vulnerabilidades de segurança no desenvolvimento de sistemas web em
uma aplicação prática. Fonte: Elaboração do autor
54
1. SqlMap;
2. OWASP WebScarab;
3. OWASP CAL9000;
4. OWASP ZAP;
5. W3AF.
Estas ferramentas foram escolhidas por serem, em sua maioria, fortemente indicadas
pelo guia de testes de software do OWASP, além da facilidade de utilização e vasta
documentação.
Para cada uma das vulnerabilidades, definiram-se algumas destas ferramentas para sua detecção e exploração. Esta
detecção e exploração. Esta estratégia pode ser observada na
Tabela 12.
55
Tabela 12 - Relação das vulnerabilidades e as ferramentas que serão utilizadas para sua detecção e exploração
Vulnerabilidade Ferramentas
Injeção (Injection) SqlMap e W3AF
WebScarab, CAL9000, W3AF
Scripting de Site Cruzado (Cross-Site Scripting - XSS)
e ZAP
Autenticação e Gerenciamento de Sessão Quebradas
W3AF
(Broken Authentication and Session Management)
Referência Insegura e Direta a Objetos (Insecure Direct
Teste manual
Object References)
Falsificação de Solicitação de Site Cruzado (Cross-Site
W3AF
Request Forgery - CSRF)
Os sistemas definidos como estudo de caso foram desenvolvidos pelo próprio autor,
utilizando a linguagem de programação C# (Microsoft, 2013), framework .NET MVC4
(ASP.NET, 2013), o banco de dados SQL Server 2012 (Microsoft, 2013) e o servidor de
aplicação foi o IIS 8.5 (IIS, 2013) para Windows 8.1 (Microsoft, 2013).
A principal motivação para a escolha destas tecnologias foi pelo fato do autor já
trabalhar com as mesmas e ter uma maior afinidade, em comparação à outras tecnologias para
o desenvolvimento de sistemas web.
Os bancos de dados de ambos os sistemas são idênticos e são constituídos por duas
tabelas: Usuário e Contatos. O relacionamento das tabelas é de 1 usuário para N contatos e
esta estrutura pode ser observada, com maiores detalhes, na Figura 11.
A estilização dos sistemas foi feita utilizando o framework CSS Bootstrap do Twitter
(Bootstrap, 2013). Para diferenciação e identificação visual dos sistemas, a cor da barra de
menus foi alterada: na aplicação segura ela é azul e na aplicação vulnerável é preta. Uma
comparação visual dos dois sistemas pode ser observada na Figura 12.
3.3 Testes
Conforme apresentado na seção 2.6 deste trabalho, os testes serão realizados seguindo
uma adaptação dos 7 passos do OSSTMM.
59
2. Protocolo: HTTP;
3. Etapas:
Aplicação segura:
sqlmap –u “http://192.168.0.201/seguro/Home/Login” --data=”login=” --dump
Aplicação vulnerável:
sqlmap –u “http://192.168.0.201/vulneravel/Home/Login” --data=”login=” –-dump
Na aplicação segura, ainda foi utilizado um comando mais avançado que pode ser
observado no Quadro 2. Este comando eleva o risco de detecção da tentativa de injection,
porém é mais eficaz.
Para o teste de injection com o W3AF, foi criado um novo perfil de testes com as
seguintes configurações:
Audit: blindSqli e sqli
Discovery: webSpider
O teste foi realizado nos dois sistemas com este mesmo perfil.
2. Protocolo: HTTP;
3. Etapas:
61
5. Informações a serem extraídas: Fazer com que um código malicioso seja executado na
página vulnerável.
Na tela inicial do ZAP, após inserir a URL do Sistema alvo, o botão “Ataque” foi
acionado para realizar um escaneamento no sistema e descobrir áreas vulneráveis ao XSS
como pode ser observado na Figura 13.
Após clicar na opção Fuzz, na janela de seleção de bibliotecas Fuzz, foi selecionada
a opção “jbrofuzz/XSS” e o “Fuzzer XSS 101”. Esta janela de configuração pode ser
observada com detalhes na Figura 15.
Ao clicar em Fuzz, os testes iniciam-se na URL previamente selecionada.
Para o teste de injection com o W3AF foi criado um novo perfil de testes com as
seguintes configurações:
Audit: xss
Discovery: webSpider
O teste foi realizado nos dois sistemas com este mesmo perfil.
Para realizar o teste com o WebScarab, é necessário alterar o navegador para utilizar o
proxy 127.0.0.1 ou localhost. Com isto, o WebScarab monitora, automaticamente, todas as
requisições realizadas pelo navegador.
Ao clicar na aba XSS/CRLF, é possível visualizar uma lista de URLs que podem ser
vulneráveis à XSS. Ao selecionar a URL listada e clicar em Check, a caixa “Confirmed
64
Figura 16 - Listagem de URLs que podem ser vulneráveis a XSS pelo WebScarab
4. Ferramentas: W3AF;
5. Informações a serem extraídas:
a. Acessar URLs restritas sem efetuar o login nos sistemas;
b. Visualizar dados sensíveis de um usuário autenticado.
Para o teste de CSRF com o W3AF foi criado um novo perfil de testes com as
seguintes configurações:
Audit: xsrf
Discovery: webSpider
O teste foi realizado nos dois sistemas com este mesmo perfil.
67
Capítulo
68
4 Resultados
Neste capítulo, serão apresentados os resultados dos testes obtidos no experimento
prático que foi elaborado no Capítulo 3, assim como a divulgação dos trechos de código das
duas aplicações demonstrando assim a diferença entre a aplicação segura e a vulnerável.
O framework .NET 4.5 utilizado no desenvolvimento dos sistemas possui uma proteção automática contra a
proteção automática contra a vulnerabilidade XSS que verifica todas as requisições do sistema (Figura 23). Com isto,
(Figura 23). Com isto, foi necessário desabilitar esta configuração no sistema vulnerável para que fosse possível
explorar esta vulnerabilidade (
Figura 24).
Figura 24 – Código adicional no arquivo web.config para evitar as validações de requisições automáticas no .NET 4.5
74
Para evitar a vulnerabilidade XSS, deve-se validar toda entrada de dados do sistema. O
recomendado para esta validação é a utilização de uma whitelist. Há uma RFC que trata sobre
o assunto (http://tools.ietf.org/html/rfc3986).
Os caracteres reservados permitidos são:
Segundo Troy Hunt (2011), o tratamento para esta vulnerabilidade nunca resultará em
práticas facilmente aplicadas, pois “a autenticação é um assunto muito amplo, com inúmeras
armadilhas e é muito fácil de errar, ou pelo menos não deixá-la tão segura como poderia”.
Ele resume as boas práticas para esta vulnerabilidade, com duas premissas básicas:
Atendendo à primeira premissa, ele refere-se a dados sensíveis como sendo, por
exemplo, login e senha do usuário. Na Figura 36, pode-se observar, na aplicação vulnerável,
um exemplo de dados sensíveis armazenados no lado cliente.
80
Já na Figura 37, pode-se observar uma outra postura com relação a estes dados na
aplicação segura: estes dados não são armazenados no lado do cliente. No lado cliente, apenas
é armazenado um identificador de sessão único e criptografado do usuário. Com esta
abordagem, mesmo que os cookies da aplicação fossem sequestrados, nenhum dado sensível
seria exposto apenas por este fato.
De acordo com Troy Hunt (2011), esta vulnerabilidade, assim como a vulnerabilidade
de Autenticação e Gerenciamento de Sessão quebrado, é um outro bom exemplo de como a
proteção dos sistemas web não é algo simples de ser feito.
Na aplicação vulnerável, esta vulnerabilidade foi explorada na página de listagem de
contatos. Esta página obtém o valor ID do cookie de autenticação e com isso traz todos os
contatos destes usuário.
Se o valor do cookie é alterado para outro número sequencial, pode-se visualizar os
contatos de outro usuário do sistema.
83
O tratamento para esta vulnerabilidade pode ser feito utilizando uma técnica chamada
Anti-Forgery Token (Símbolo Anti-Falsificação). Esta técnica consiste em armazenar um
cookie de valor único no lado cliente e armazenar este mesmo valor em um campo oculto do
formulário a ser enviado. Quando a página é enviada, caso o valor do cookie não corresponda
com valor do formulário, um erro é gerado e a requisição é interrompida.
O ASP.NET fornece um Anti-Forgery Token já pronto para a utilização, tendo em
vista a complexidade de implementação deste mecanismo. Sua utilização consiste em
adicionar um campo no formulário, utilizando a sintaxe exibida no Quadro 3.
@Html.AntiForgeryToken()
No controller que irá receber este formulário deve-se inserir uma anotação antes do
método que receberá a requisição, como pode ser visto na linha 128 da
Figura 41.
84
87
5 Conclusão
Este trabalho teve como objetivo principal ser um guia de boas práticas de segurança
no desenvolvimento de sistemas web, auxiliando desenvolvedores durante e após o
desenvolvimento.
Para atingir este objetivo, foi realizado um levantamento bibliográfico sobre as
principais vulnerabilidades que os sistemas web atuais sofrem, assim como o tratamento para
cada uma destas vulnerabilidades.
Como fruto desta pesquisa, foi selecionada a lista Top Ten de 2010 da OWASP para
ser utilizada como um guia, ditando quais vulnerabilidades deveriam ser citadas no trabalho.
Pela limitação de tempo para este trabalho, decidiu-se aprofundar somente nas cinco
primeiras vulnerabilidades desta lista, sendo estas as que foram o foco deste guia de boas
práticas, assim como o passo a passo de como testar cada uma destas vulnerabilidades.
Durante a pesquisa, sentiu-se a necessidade de apresentar também algumas
ferramentas que facilitam os testes de vulnerabilidades nestas aplicações. Com isso, os
objetivos específicos foram atualizados e passaram a incluir um guia de utilização destas
ferramentas para analisar as aplicações web em busca de vulnerabilidades.
Também para cumprir o objetivo proposto, foi definida uma estratégia (Figura 9) em
cinco passos, que foram concluídos com sucesso.
A demonstração das cinco vulnerabilidades foi realizada com sucesso, assim como
suas respectivas correções.
As ferramentas adotadas para os testes atingiram devidamente o objetivo proposto
para cada uma das vulnerabilidades que foi proposta a sua utilização.
Porém, durante os testes, foi sentida uma necessidade de uma metodologia existente
para realizar devidamente os testes. A metodologia OSSTMM foi adotada pelo autor, porém
ela não era integralmente compatível com os testes voltados aos sistemas web, o que
demandou uma adaptação desta metodologia para seu uso nestes sistema.
Uma das principais dificuldades encontradas neste trabalho foi a configuração de
algumas ferramentas. Em alguns casos, a documentação da ferramenta abordava apenas os
88
testes e deixavam de lado a configuração inicial, como por exemplo, ativar a ferramenta para
interceptação das requisições, como um servidor proxy.
Referências
ASP.NET MVC 4 (2013). The Official Microsoft ASP.NET Site. Disponível em
<http://www.asp.net/mvc/mvc4>. Acesso em: 26 outubro, 2013.
AOKI, Eric Komiyama; CARVALHO, Alan Henrique Pardo de. Práticas de segurança para o
desenvolvimento de sistemas Web. FaSCi-Tech, v. 1, n. 5, 2012.
BOOTSTRAP (2013). Sleek, intuitive, and powerful mobile first front-end framework for
faster and easier web development. Disponível em <http://getbootstrap.com/>. Acesso em: 26
outubro, 2013.
CAMPOS, Fernando; NETO, Nery Signorini; CANTO, Wagner F. Web 2.0 Sob a Perspectiva
da Segurança. Online. Disponível: http://fernandocampos.pro.br/artigos/Web, v. 202.
2010.
CERT.br (2013). Estatísticas total de incidentes reportados ao CERT.br por ano. Disponível
em: <http://www.cert.br/stats/incidentes>. Acesso em: 10 mar, 2013.
CHEN, Boyan et al. A study of the effectiveness of CSRF guard. In: Privacy, security, risk
and trust (passat), 2011 ieee third international conference on and 2011 ieee third
international conference on social computing (socialcom). IEEE, 2011. p. 1269-1272.
FUNG, Adonis PH; CHEUNG, K. W.; WONG, T. Y. FAITH: Scanning of Rich Web
Applications for Parameter Tampering Vulnerabilities. arXiv preprint arXiv:1204.1216,
2012.
HOPE, Paco; WALTHER, Ben. Web security testing cookbook. O'Reilly Media, 2009.
KIEYZUN, Adam et al. Automatic creation of SQL injection and cross-site scripting attacks.
In: Software Engineering, 2009. ICSE 2009. IEEE 31st International Conference on.
IEEE, 2009. p. 199-209.
90
OSSTMM - Open Source Security Testing Methodology Manual. Institute for Security and
Open Methodologies, ISECOM. http://www.isecom.org/osstmm Acesso em: 17 ago, 2013.
OWASP (2013). The Open Web Application Security Project. Disponível em:
<https://www.owasp.org/index.php/Main_Page>. Acesso em: 01 mar, 2013.
SAWAYA, Márcia Regina. Dicionário de informática & Internet. Livraria Nobel Sa, 2002.
– Utilizado para retirar as definições de alguns termos utilizados no trabalho.
WHITEHAT (2013). WhiteHat Security Press Releases: Whitehat Security Reveals New
Trends In Web Vulnerabilities With Annual Website Security Statistics Report. Disponível
em <https://www.whitehatsec.com/news/13pressarchives/PR_050213_statsreport.html>
Acesso em 19 maio, 2013.
WHITEHAT (2013). WhiteHat Security: Press Releases: Website Security Statistics Report
May 2013. Disponível em <https://www.whitehatsec.com/assets/WPstatsReport_052013.pdf>
Acesso em 19 maio, 2013.
1 Injeção (Injection)
1.1 Teste com o SqlMap
O SqlMap foi executado em ambas aplicações com os mesmos comandos, alterando-se
apenas a URL de destino, como pode-se observar no Quadro 1.
Aplicação segura:
sqlmap –u “http://192.168.0.201/seguro/Home/Login” --data=”login=” --dump
Aplicação vulnerável:
sqlmap –u “http://192.168.0.201/vulneravel/Home/Login” --data=”login=” –-dump
Na aplicação segura, ainda foi utilizado um comando mais avançado que pode ser
observado no Quadro 2. Este comando eleva o risco de detecção da tentativa de injection,
porém é mais eficaz.
Figura 47 - Listagem de URLs que podem ser vulneráveis a XSS pelo WebScarab
97
O framework .NET 4.5 utilizado no desenvolvimento dos sistemas possui uma proteção automática contra a
vulnerabilidade XSS que verifica todas as requisições do sistema (Figura 23). Com isto, foi necessário desabilitar esta
configuração no sistema vulnerável para que fosse possível explorar esta vulnerabilidade (
Figura 24).
101
Figura 51 – Código adicional no arquivo web.config para evitar as validações de requisições automáticas no .NET 4.5
Para evitar a vulnerabilidade XSS, deve-se validar toda entrada de dados do sistema. O
recomendado para esta validação é a utilização de uma whitelist. Há uma RFC que trata sobre
o assunto (http://tools.ietf.org/html/rfc3986).
102
Segundo Troy Hunt (2011), o tratamento para esta vulnerabilidade nunca resultará em
práticas facilmente aplicadas, pois “a autenticação é um assunto muito amplo, com inúmeras
armadilhas e é muito fácil de errar, ou pelo menos não deixá-la tão segura como poderia”.
Ele resume as boas práticas para esta vulnerabilidade, com duas premissas básicas:
Atendendo à primeira premissa, ele refere-se a dados sensíveis como sendo, por
exemplo, login e senha do usuário. Na Figura 36, pode-se observar, na aplicação vulnerável,
um exemplo de dados sensíveis armazenados no lado cliente.
103
Já na Figura 37, pode-se observar uma outra postura com relação a estes dados na
aplicação segura: estes dados não são armazenados no lado do cliente. No lado cliente, apenas
é armazenado um identificador de sessão único e criptografado do usuário. Com esta
abordagem, mesmo que os cookies da aplicação fossem sequestrados, nenhum dado sensível
seria exposto apenas por este fato.
O tratamento para esta vulnerabilidade pode ser feito utilizando uma técnica chamada
Anti-Forgery Token (Símbolo Anti-Falsificação). Esta técnica consiste em armazenar um
cookie de valor único no lado cliente e armazenar este mesmo valor em um campo oculto do
formulário a ser enviado. Quando a página é enviada, caso o valor do cookie não corresponda
com valor do formulário, um erro é gerado e a requisição é interrompida.
O ASP.NET fornece um Anti-Forgery Token já pronto para a utilização, tendo em
vista a complexidade de implementação deste mecanismo. Sua utilização consiste em
adicionar um campo no formulário, utilizando a sintaxe exibida no Quadro 3.
@Html.AntiForgeryToken()
No controller que irá receber este formulário deve-se inserir uma anotação antes do
método que receberá a requisição, como pode ser visto na linha 128 da
Figura 41.
105