Académique Documents
Professionnel Documents
Culture Documents
SO CAETANO DO SUL/SP
NOVEMBRO/2011
Trabalho
de
Concluso
de
Curso
apresentado Faculdade de Tecnologia de
So Caetano do Sul, sob a orientao do
Professor
Msc. Allan Carvalho, como
requisito parcial para a obteno do diploma
de Graduao no Curso de Tecnlogo em
Segurana da Informao.
Aprovado em:
Banca Examinadora
Prof. Dr. ou MSc. _____________________Instituio: ________________________
Julgamento: _________________________Assinatura: ________________________
Prof. Dr. ou MSc. _____________________Instituio: ________________________
Julgamento: _________________________Assinatura: ________________________
Prof. Dr. ou MSc. _____________________Instituio: ________________________
Julgamento: _________________________Assinatura: ________________________
Dedicatria
Agradecimentos
Ao meu orientador Prof. Msc. Alan Henrique Pardo de Carvalho, pela confiana, incentivo,
pacincia e disponibilidade infinita eterno mestre cujos ensinamentos foram muito alm
do mbito deste trabalho, tornando-se inestimveis oportunidades de crescimento
intelectual.
Ao Prof. Msc Leandro Ramos da Silva pelas sugestes iluminadas na Banca de
qualificao e pelo acolhimento sincero.
Professora Raquel Silva pelas sugestes iluminadoras, pela pacincia e apoio e
principalmente pela disponibilidade sempre.
minha querida esposa Ingrid e filha Joana Gabriele por terem tantas vezes seu tempo
subtrado em consequncia da minha dedicao a este trabalho.
Resumo
Desenvolver software livre de vulnerabilidades um desafio para as equipes de
desenvolvimento. As aplicaes web, devido sua natureza, so mais suscetveis a todo
tipo de explorao. Poucos analistas se preocupam com a segurana da informao
relativa ao software e os clientes apenas se preocupam quando elas j foram exploradas.
Esse o cenrio que inspirou o presente trabalho: aprofundar-se nas dez maiores
vulnerabilidades apontadas pela projeto Top 10 (edio 2010) da entidade no
governamental OWASP e propor solues para tais vulnerabilidades. O escopo desse
trabalho focalizou a linguagem de programao PHP sob a arquitetura LAMP dada a
notria e ampla utilizao como plataforma de desenvolvimento e produes em
aplicaes web. Alm de explorar as Top 10 vulnerabilidades e apontar solues, o
trabalho
prope
cenrios
para
continuidade
da
pesquisa
em
segurana
desenvolvimento de aplicaes.
Palavras chaves: Top 10; OWASP, PHP, Aplicaes Web, Segurana da Informao.
MICHELETTI, Flvio Alexandre. Anlise das principais vulnerabilidades de Aplicaes Web tendo como
base a arquitetura LAMP e as Top 10 Vulnerabilidades da Owasp. 75 folhas.
Trabalho de Concluso de Curso Faculdade de Tecnologia de So Caetano do Sul, So
Caetano, 2011.
no
Abstract
Developing software without vulnerability is a challenge for development teams. The
web applications, by their nature, are more susceptible to all kinds of exploitation. Few
analysts are concerned about the security of information on the software and customers
only worry when they have been explored. This is the scenario that inspired this work:
delve into the top ten vulnerabilities identified by the project Top 10 (2010 edition) of nongovernmental entity OWASP and propose solutions to those vulnerabilities. The scope of
this work focused on the programming language PHP in LAMP architecture given the
notorious and widespread use as a development platform and production in web
applications. In addition to exploring the Top 10 vulnerabilities and point solutions, the
paper proposes scenarios for continuing research in the development of security
applications.
Palavras chaves: Top 10; OWASP, PHP, Web Applications, Information Security.
MICHELETTI, Flvio Alexandre. Anlise das principais vulnerabilidades de Aplicaes Web tendo como
base a arquitetura LAMP e as Top 10 Vulnerabilidades da Owasp. 75 folhas.
Trabalho de Concluso de Curso Faculdade de Tecnologia de So Caetano do Sul, So
Caetano, 2011.
Listas de tabelas
Lista de ilustraes
Cdigo 4.5 Aplicao corrigida contra a vulnerabilidade Referncias Inseguras Diretas a Objetos........49
Cdigo 5.1 Formulrio web vulnervel a CSRF.......................................................................................51
Cdigo 5.2 Script transferirFundos.php de forma vulnervel...................................................................51
Cdigo 5.3 URL que acionar a operao de transferncia....................................................................52
Cdigo 5.4 URL adulterada camuflada em uma imagem de byte zero....................................................52
Cdigo 5.5 Criando um token para umc ampo hidden.............................................................................53
Cdigo 5.6 Criando um token para uma URL..........................................................................................53
Cdigo 5.7 Script transferirFundos.php corrigido.....................................................................................53
Cdigo 6.1 Expondo erros de forma indevida.......................................................................................... 56
Cdigo 6.2 Expondo erros de forma indevida, dados do servidor...........................................................56
Cdigo 6.3 Configurao register_globals............................................................................................... 57
Cdigo 6.4 Exemplo de ataque aproveitando-se da diretiva allow_url_open..........................................58
Cdigo 7.1 Gerando Hash....................................................................................................................... 61
Cdigo 7.2 Listando os algortimos para gerao do hash......................................................................62
Cdigo 8.1 Exemplo de reas restritas que necessitam de autenticao................................................64
Cdigo 8.2 reas restritas muito comuns e por essa razo bastante vulnerveis...................................64
Cdigo 8.3 Exemplo de ataque path transversal...................................................................................65
Cdigo 8.4 Requisio de HTTP forjada.................................................................................................65
Cdigo 8.5 Expondo o arquivo /etc/passwd............................................................................................. 65
Cdigo 8.6 Exemplo de controle de acesso............................................................................................66
Cdigo 8.7 Protegendo diretrio com arquivos .htaccess........................................................................67
Cdigo 9.1 Ativando a opo secure na criao de cookies.................................................................70
Cdigo 10.1 Exemplo de aplicao vulnervel........................................................................................ 72
Cdigo10.2 URL maliciosa utilizada no redirecionamento invlido..........................................................72
Cdigo 10.3 Prevenindo redirecionamentos e encaminhamentos invlidos............................................72
Lista de siglas
Sumrio
Introduo....................................................................................................................................................... 15
1 Alguns conceitos prvios.......................................................................................................................... 21
1.1 - Aplicao web (web applicattion) e tecnologias correlatas................................................................21
1.2 - Arquitetura......................................................................................................................................... 22
1.3 OWASP (Open Web Application Security Projetc)...........................................................................23
2 -A1 Injeo(Injection)................................................................................................................................... 26
2.1 Conceitos Bsicos............................................................................................................................ 26
2.2 - Exemplo de aplicao vulnervel...................................................................................................... 26
2.3 - Preveno......................................................................................................................................... 28
3 - A2 XSS(Cross Site Scripting).................................................................................................................... 33
3.1 Conceitos Bsicos............................................................................................................................ 33
3.2 Exemplo de aplicao vulnervel..................................................................................................... 34
3.3 Preveno......................................................................................................................................... 36
4 - A3 Quebra de Autenticao e da Gesto de Sesso................................................................................42
4.1 Conceitos Bsicos............................................................................................................................ 42
4.2 Exemplo de aplicao vulnervel..................................................................................................... 43
4.3 Preveno......................................................................................................................................... 44
5 A4 Referncias Inseguras Diretas a Objetos............................................................................................ 46
5.1 Conceitos Bsicos............................................................................................................................ 46
5.2 Exemplo de aplicao vulnervel..................................................................................................... 46
5.3 Preveno......................................................................................................................................... 48
6 A5 CSRF(Cross Site Request Forgery).................................................................................................... 51
6.1 Conceitos Bsicos............................................................................................................................ 51
6.2 Exemplo de aplicao vulnervel..................................................................................................... 51
6.3 Preveno......................................................................................................................................... 53
7 A6 Configurao Incorreta de Segurana................................................................................................. 56
7.1 Conceitos Bsicos............................................................................................................................ 56
7.2 Exemplo de aplicao vulnervel..................................................................................................... 56
7.3 - Preveno......................................................................................................................................... 57
8 A7 Armazenamento Criptogrfico Inseguro..............................................................................................61
8.1 Conceitos Bsicos............................................................................................................................ 61
8.2 Exemplo de aplicao vulnervel..................................................................................................... 61
8.3 Preveno......................................................................................................................................... 62
9 A8 Falha na restrio de acesso a URL................................................................................................... 64
9.1 Conceitos Bsicos............................................................................................................................ 64
9.2 Exemplo de sistema aplicao vulnervel........................................................................................65
9.3 Preveno......................................................................................................................................... 67
10 A9 Insuficiente Proteo da Camada de Trasporte................................................................................69
10.1 Conceitos Bsicos.......................................................................................................................... 69
10.2 Exemplo de aplicao vulnervel................................................................................................... 70
10.3 Preveno....................................................................................................................................... 71
11 A10 Redirecionamento e Encaminhamentos Invlidos...........................................................................72
11.1 Conceitos Bsicos.......................................................................................................................... 72
11.2 Exemplo de aplicao vulnervel................................................................................................... 73
11.3 Preveno....................................................................................................................................... 73
12 - Consideraes finais............................................................................................................................... 74
Referncias..................................................................................................................................................... 75
Introduo
Atualmente no mais possvel imaginarmos uma organizao sem que a
mesma no utilize a Tecnologia da Informao (TI) de forma estratgica e
competitiva. Muitas vezes a TI utilizada como ferramenta bsica e de provento
para a existncia da organizao. Por exemplo, como seria possvel a existncia de
uma rede social como o Facebook sem o uso da TI? E uma empresa de vendas por
varejo on-line como a Amazon? A TI no s faz parte da estratgia da empresa
como um diferencial, mas tambm pode ser o principal combustvel por trs de uma
organizao. A procura pela TI tambm se faz por pessoas comuns; o uso de e-mail
est disseminado, muitos possuem uma pgina em uma rede de relacionamento,
compras e troca de mercadorias so realizadas pela internet, livros so lidos on-line.
A Internet sem dvida foi a fora propulsora para alavancar esse incrvel movimento
cultural.
Naturalmente, com a crescente demanda pela TI por parte das empresas e,
tambm, por parte das pessoas fsicas, os problemas no tardaram em surgir . O
prejuzo contabilizado por pessoas fsicas e jurdicas. Pginas na Internet so
fraudadas e falsificadas, imagens de empresas so comprometidas, dados
confidenciais das pessoas so expostos devido a um ataque e etc... A lista
bastante extensa.
Em 10/11/2010 o jornal eletrnico G1 publicou que nos EUA 7 pessoas,
sendo 6 estonianos, desviaram US$14 milhes em fraude de anncios on-line. Eles
atuaram livremente durante um perodo de 5 anos. Os suspeitos criaram seus
prprios servidores falsos para redirecionar o trfego da internet para sites onde eles
tinham uma fatia da receita de publicidade. O problema apenas foi identificado
quando eles infectaram 130 computadores da NASA. 1
Em 25/05/2009 o departamento jornalstico do portal Softpedia publicou que
um Gray-hat (hacker de chapu cinza que est entre um hacker de chapu branco e
o hacker de chapu preto, sendo um bem intencionado e outro mal intencionado
1 - G1. Criminosos roubam US$ 14 milhes em fraudes de ancios on-line. Disponvel em:
http://g1.globo.com/tecnologia/noticia/2011/11/criminosos-roubam-us-14-milhoes-em-fraude-deanuncios-line.html. Acesso em 25/11/2011
14
ter seu prprio captulo no qual sero discutidos conceitos bsicos a respeito da
vulnerabilidade, cdigo fonte de exemplo ser construdo e, por fim, como aplicar a
devida preveno. Apesar do presente estudo fechar o escopo em torno da
arquitetura LAMP (Linux, Apache, MySql e PHP) ele pode servir como base de
compreenso dos fundamentos expostos pelo projeto Top 10 sendo facilmente
traduzido para outra arquitetura.
Para atingir tais objetivos, utilizou-se uma abordagem qualitativa no
desenvolvimento desta pesquisa, uma vez que nesta o intuito compreender mais
profundamente os fenmenos estudados e interpret-los de acordo com uma
determinada perspectiva sem a preocupao com representatividade numrica ou
mesmo relaes de causa e efeito. (TERENCE; ESCRIVO FILHO, 2006).
No que se refere ao mtodo de abordagem utilizado, buscou-se adotar o
raciocnio hipottico-dedutivo pois buscou-se construir e testar possveis respostas
ou solues para problemas decorrentes de fatos ou conhecimentos tericos, algo
diretamente relacionado com a experimentao, como mostra Marques et al (2006,
p. 43-44).
Quanto aos objetivos da pesquisa, a mesma pode ser classificada como
analtica pois, como mostram Marques et al (2006, p. 52), trata-se de um "tipo de
estudo que visa (...) analisar uma dada situao (objeto de estudo), mediante
procedimentos de decomposio do todo estudado, visando no apenas conhecer
seus elementos constituintes, mas sobretudo como eles se articulam entre si.". No
caso, o objeto de estudo so as aplicaes Web.
Em relao participao do pesquisador, esta pode ser classificada como
pesquisa-ao, j que nela o pesquisador desenvolve aes para resolver os
problemas
fundamentais
identificados,
desempenhando
"papel
ativo
no
indivduos,
profisses,
condies,
instituies,
grupos
ou
19
20
1.2 - Arquitetura
A arquitetura utilizada para a elaborao, aplicao e testes de cdigos fontes
do tipo cliente-servidor. Do lado do servidor roda o servidor web Apache2 instalado
com o mdulo interpretador PHP compatvel com a verso 5 ou superior . Como
SGBD foi utilizado o MySql compatvel com a verso 5 ou superior A figura 01 ilustra
a organizao da arquitetura:
Figura 01 Arquitetura cliente-servidor e tecnologias utilizada
se de uma entidade sem fins lucrativos livre de presses comerciais o que garante
fornecimento de informao de forma imparcial. A OWASP mantm dezenas de
projetos no qual destacamos:
Top 10 Ranking com as 10 maiores vulnerabilidades web. A verso do Top 10 que este
trabalho se apoia a atualizao de 2010. O Top Ten foi lanado em 2003 e sofreram
pequenas atualizaes em 2004 e 2007 e mais recentemente em 2010. O projeto Top 10
referenciado por muitas normas, livros ferramentas e organizaes, incluindo MITRE, PCI
DSS, DISA, FTC e muitas outras. O objetivo do projeto Top 10 aumentar a sensibilizao
sobre a segurana das aplicaes atravs da identificao de alguns dos riscos mais crticos
e comuns que as organizaes enfrentam. Ainda como objetivo principal o Top 10 visa
educar programadores, designers, arquitetos e organizaes acerca das consequncias das
mais importantes deficincias de segurana em aplicaes Web.
ESAPI (The OWASP Enterprise Security API) biblioteca de cdigo fonte free e open source
escrita originalmente em Java. Prov uma interface de programao segura para ser
acoplado ao sistema web.
Agente de
Ameaa
Vector de
Ataque
Threat Agent
Attack Vector
Weakness
Prevalence
Fcil
Mdio
Difcil
Generalizada
Comum
Pouco comum
Facilidade de
Deteco da
Vulnerabilidade
Weakness
Detectability
Fcil
Mdio
Difcil
Impacto
Tcnico
Impacto
de Negcio
Technical Impact
Business Impact
Severo
Moderado
Menor
24
2 -A1 Injeo(Injection)
2.1 Conceitos Bsicos
A Injeo caracteriza-se quando o atacante, incluindo utilizadores internos e
administradores, podem enviar dados no confiveis ao sistema, ou seja, sem
tratamento adequado. Esses dados (na verdade trata-se de strings que formam uma
consulta, queries) chegam at o sistema e atingem um interpretador de comandos. A
injeo pode ocorrer como consultas SQL, LDAP ou Xpath.
...este mtodo
Vector de
Ataque
Explorao
Fcil
Vulnerabilidade de Segurana
Prevalncia
Deteco
Comum
Mdio
Impacto
Tcnico
Impacto
de Negcio
Severo
lembrar que o atacante pode ser externo (provavelmente atacando a tela de login) e
interno (usurio do sistema mal intencionado). O atacante tentar, atravs de vrias
tentativas, descobrir a estrutura do banco de dados, por isso importante que os
nomes de campos dos formulrios no lembrem os nomes dos campos do banco de
dados. conforme relata Pessoa (2007, p. 108)
necessrio que o atacante realize tentativas de acesso para
conhecer a estrutura do banco de dados. Essa tarefa se torna
mais fcil quando os nomes das variveis usadas em
formulrio HTML so usados na estrutura do banco de dados,
afinal o cdigo HTML legvel aos usurios da web.
26
Cdigo 1.2 Cdigo em PHP que recebe e processa os dados de um formulrio web
2.3 - Preveno
Segundo Wichers e Manico (2011) a vulnerabilidade de Injeo pode ser
prevenida de trs formas distintas: a) utilizando-se de consultas parametrizadas, b)
utilizando-se de procedimentos armazenados (stored procedures) e c) codificando
27
caracteres de entrada
A primeira forma (consultas parametrizadas) utilizam-se de recursos internos
do SGBD para preparar a declarao SQL. Essa abordagem no cria a declarao
SQL dinamicamente, garantindo assim, que a declarao no seja alterada
indevidamente.
No PHP possvel contar com a extenso PDO para utilizar-se de consultas
parametrizadas. Essa extenso define uma interface consistente para acesso a
banco de dados em PHP. Ela facilita a manuteno do cdigo fonte e auxilia a troca
de banco de dados utilizado na codificao. (GILMORE, 2008 p.631)
O cdigo 1.3 faz uso da extenso PDO, entre as linhas 2 e 10 ocorre a
conexo com o banco de dados, na linha 8 instanciada a classe PDO. As linhas 12
e 13 recebem os dados do formulrio. A linha 15 utiliza o mtodo prepare() do objeto
instanciado para preparar o comando SQL, repare que no passado os
parmetros diretamente na declarao SQL, em seu lugar esto apenas as
referncias :login e :senha. A funo principal a bindParam() que liga-se um
parmetro para o nome da varivel especificada (Manual Oficial do PHP, 2011)
ela quem faz todo o trabalho de sanitizao. A linha 19 executa o comando e, entre
as linhas 21 e 26, checado o resultado da consulta.
28
31
Vector de
Ataque
Vulnerabilidade de Segurana
Explorao
Prevalncia
Deteco
Mdia
Generalizada
Fcil
Impacto
Tcnico
Impacto
de Negcio
Moderado
34
3.3 Preveno
Segundo Williams e Manico (2011) existem 8 regras (numeradas de 0 a 7)
para evitar este tipo de vulnerabilidade: Regra 0(zero) - Nunca insira dados no
confiveis, exceto em locais permitidos, Regra 1 - Codificar cdigo HTML antes de
inserir dados no confiveis em contedo de elementos HTML, Regra 2 - Codificar
atributos antes de inserir dados no confiveis em atributos HTML comuns, Regra 3
- Codificar cdigo Javascript antes de inserir dados no confiveis em valores HTML
de Javascript, Regra 4 - Codificar CSS antes de inserir dados no confiveis em
valores de propriedades de estilos de HTML, Regra 5 - Codificar URL antes de
inserir dados no confiveis em parmetros de URL, Regra 6 Utilizar API para
limpar e validar qualquer tipo de sada e Regra 7 Evitar XSS baseado em DOM.
A regra de numerao zero (Nunca insira dados no confiveis, exceto em
locais permitidos) nos diz para no colocarmos nenhum tipo de dados em nosso
HTML principalmente se estiverem entre tag's <script>, entre comentrios HTML,
como um atributo de uma tag <div> e quando o sistema escreve o nome da tag. A
regra especificada pelo trecho de cdigo HTML 2.4.
Cdigo 2.4 Preveno de XSS, regra 0(zero).
35
&
&
<
<
>
>
"
"
'
'
/
' no recomendado
possvel ainda fazer uso da ESAPI com mdulo HTML entity escaping and
unescaping conforme ilustrado no cdigo 2.5.
Cdigo 2.5 Prevenindo XSS com uso da funo encodeForHTML(ESAPI)
possvel ainda fazer uso da ESAPI com mdulo HTML entity escaping and
unescaping conforme de mosntrado no cdigo 2.7(repare que o mtodo chamado
difere do mtodo chamado na utilizao da ESAPI para a Regra 1).
Cdigo 2.7 Prevenindo XSS utilizando-se a funo encode ForHTMLAttributes(ESAPI)
Esta regra ainda salienta que prefervel utilizar os atributos com as aspas
duplas do que com sem as aspas uma vez que atributos sem aspas podem ser
facilmente quebrados por caracteres como
(espao), % (porcentagem), *
possvel fazer uso da ESAPI com mdulo HTML entity escaping and
37
possvel fazer uso da ESAPI com mdulo HTML entity escaping and
unescaping conforme demonstrado no cdigo 2.11.
Cdigo 2.11 Prevenindo XSS utilizando-se a funo encode ForHTMLCSS(ESAPI)
Para esta regra poder ser feito o uso da ESAPI com mdulo HTML entity
escaping and unescaping conforme demonstrado pelo cdigo 2.13.
Cdigo 2.13 Prevenindo XSS utilizando-se a funo encode ForURL(ESAPI)
A regra ainda recomenda que para ser completo o tratamento da URL deve
passar por uma validao antes conforme demostrado no cdigo 2.14:
Cdigo 2.14 Validao que completa a regra 5
Fonte: Manico(2010)
de
uma
tag
HTML
ser
preciso
ento
utilizar-se
do
mtodo
Fonte: Manico(2010)
40
Vector de
Ataque
Vulnerabilidade de Segurana
Explorao
Prevalncia
Deteco
Mdia
Comum
Mdia
Impacto
Tcnico
Impacto
de Negcio
Severo
41
42
4.3 Preveno
O objetivo da preveno verificar se o aplicativo autentica corretamente os
usurios e protege as identidades das credenciais. A recomendao primria do
OWASP Top 10 (2010) :
a) Tornar disponvel para os programadores um conjunto nico de controles
de autenticao forte e de gesto de sesses. Este controles devem ser capazes de
atender a todos os requisitos para autenticao e gesto de sesses definidos no
documento Application Security Verification Standar(ASVS) em particular as
sees V2(Autenticao) e V3 (Gesto de Sesses) e tambm, ter uma interface
simples para os programadores. (considere o autenticador da ESAPI).
b) Grandes esforos devem ser igualmente realizados para evitar a
ocorrncia da falhas XSS que podem ser utilizadas para furto de identificadores de
sesso (Veja A2).
Enquanto que no OWASP Top 10 (2007) preciso considerar ainda as
seguintes recomendaes:3
1. Use somente mecanismos padro para gerenciamento de sesso. No escreva ou use
gerenciadores secundrios de sesso em qualquer situao.
2. No aceite novos identificadores de sesso, pr configurados ou invlidos na URL ou em
requisies. Isto conhecido como ataque de sesso fixada (session fixation attack ).
3. Limite ou limpe seu cdigo de cookies personalizados com propsito de autenticao de
gerenciamento de sesso, como funes lembrar meu usurio ou funes domsticas de
autenticao centralizadas como o Single Sign-On(SSO). Isto no se aplica s solues de
autenticao federadas robustas ou SSO reconhecidas
4. Use um mecanismo nico de autenticao com dimenso e nmeros de fatores apropriados.
Certifique-se que este mecanismo no estar facilmente sujeito ataques ou fraudes. No
faa esse mecanismo complicado demais, pois ele pode se tornar alvo de seu prprio ataque.
5. No permita que o processo de login comece de uma pgina no encriptada. Sempre inicie o
processo de login de uma segunda pgina encriptada ou de um novo cdigo de sesso, para
prevenir o roubo de credenciais ou da sesso, phishing e ataques de fixao de sesso.
6. Considere gerar uma nova sesso aps uma autenticao que obteve sucesso ou mudana
do nvel de privilgio.
7. Assegure-se que todas as pginas tenham um link de logout. O logout deve destruir todas as
sesses e cookies de sesso. Considere os fatores humanos: no pergunte por confirmao,
3 Vale reinterar que os itens de 1 a 13 foram retirados do projeto Top 10 edio 2007.
43
pois usurios acabaro fechando a aba ou janela ao invs de sair com sucesso.
8. Use perodos de expirao de prazo que fazem automaticamente logout em sesses inativas,
bem como o contedo das informaes que esto sendo protegidas.
9. Use somente funes de proteo secundrias eficientes (perguntas e respostas, reset de
senha), pois estas credenciais so como senhas, nomes de usurios e tokens. Aplique oneway hasf nas respostas para prevenir ataques nos quais a informao possa ser descoberta.
10. No exponha nenhum identificador de sesso ou qualquer parte vlida das credenciais em
URLs e logs (no regrave ou armazene informaes de senhas de usurios em logs).
11. Verifique a senha antiga do usurio quando ele desejar mudar a senha.
12. No confie em credenciais falsificveis como forma de autenticao, como endereos de IP
ou mscaras de rede, endereo de DNS ou verificao reversa de DNS, cabealhos da
origem ou similares.
13. Atente para quando enviar segredos para endereos de e-mail como um mecanismo de reset
de passsword. Use nmeros randmicos limited-time-only para resetar acesso e envie um email de retorno assim que a senha for reconfigurada. Cuide para quando permitir que usrios
registrados mudem seus endereos de e-mail envie uma mensagem para o e-mail anterior
antes de efetuar a mudana.
44
Vector de
Ataque
Vulnerabilidade de Segurana
Explorao
Prevalncia
Deteco
Fcil
Comum
Fcil
Impacto
Tcnico
Impacto
de Negcio
Moderado
recupera o cliente da base de dados est sendo enviado via mtodo post e chamase id_cliente. A chave de registro da tabela clientes do tipo numrica e
sequencial, logo, o atacante percebe que se mudar o parmetro de 1015 para 1014
o sistema retorna o registro do cliente de chave nmero 1014. O atacante continua
testando outros valores, os que coincidirem com os da tabela clientes a aplicao
mostrar os registro, indevidamente. O cdigo 4.1 ilustra a aplicao vulnervel. Ele
apenas um trecho de cdigo, as demais partes foram suprimidas para
simplificao do entendimento. A linha 02 recebe os dados, no caso a chave de
cada registro de cliente. As linhas 4, 5 e 6 montam executam a instruo SQL.
Repare que mesmo a aplicao estando protegida contra Injeo(vide A1- Injeo)
ele no est, necessariamente, protegida contra Referncias Inseguras Diretas a
Objetos.
46
Cdigo 4.2 Exemplo de formulrio HTML ilustrando a vulnerabilidade Referncias Inseguras Diretas
a Objetos
5.3 Preveno
Segundo o OWASP Top 10 (2010) h duas formas bsicas de evitar esta
vulnerabilidade: a) usar referncias indiretas a objetos e b) verificar o acesso ao
objeto, j o OWASP Top 10 (2007) nos diz que a proteo mais eficaz a esta
vulnerabilidade seria evitar a exposio direta de referncias a objetos a usurios
usando um ndice, mapa de referncia indireta ou outro mtodo indireto que seja
fcil validar. Ainda como preveno o OWASP Top 10 (2007) reitera que,
necessrio considerar as recomendaes como observamos abaixo:
Sempre que possvel, evitar a exposio de referncias de objetos privados a usurios, como
chaves primrias e nomes de arquivos.
Atravs da abordagem aceite o reconhecido como bom(whit list) validar cada referncia
47
privada a objetos.
Cdigo 4.4 Aplicao corrigida contra a vulnerabilidade Referncias Inseguras Diretas a Objetos
O cdigo 4.5 corrige o cdigo 4.3. A linha 2 cria um array com dois ndices e
armazena em $array_idiomas, trata-se do mapeamento ao objeto. A linha 4 recebe o
dado via mtodo post ou get e armazena em $ idioma_suspeito. A linha 5 apenas
inicializa a varivel $idioma_seguro. A Linha 7 utiliza-se expresso regular para
checar, atravs do mtodo white list o parmetro recebido. A linha 8 checa o
parmetro recebido com o mapa construdo na linha 2 e em caso positivo
concatena o valor de $idioma_suspeito com a string .php(linha 9). A linha 11
executa o cdigo normalmente.
48
Cdigo 4.5 Aplicao corrigida contra a vulnerabilidade Referncias Inseguras Diretas a Objetos
49
Vector de
Ataque
Vulnerabilidade de Segurana
Explorao
Prevalncia
Deteco
Mdia
Generalizada
Fcil
Impacto
Tcnico
Impacto
de Negcio
Moderado
Esse
script
est
armazenado
no
seguinte
local:
50
6.3 Preveno
A primeira forma de se prevenir contra XRSF atravs de Tokens de
validao, trata-se da incluso de um token que no seja transmitido via
URL(mtodo get) de modo que este no seja adivinhado pelo atacante nem
registrado pelo navegador. Ele pode ser inserido em um campo hidden, como
demonstra o cdigo 5.5. A linha 2 utiliza-se da funo getCSFRToken para gerar o
token que armazenado na varivel $token. A linha 3 atribui o valor de $token em
uma session denominada csrfToken. Essa session ser utilizada pelo script
seguinte. Entre a linha 5 e linha 16 renderizado o formulrio como visto no cdigo
5.3 com o acrscimo da linha 13. Um campo do tipo hidden (invisvel apenas no
layout da pgina HTML)armazenar o valor do token que por sua vez ser
submetido com os demais dados do formulrio.
52
Caso a submisso dos dados tenha qe ser feita via mtodo get possvel
utilizar-se, ento, de funo ESAPI.httpUtilities().addCSRFToken() da seguinte
forma:
Cdigo 5.6 Criando um token para uma URL.
No utilizar o mesmo navegador para acessar aplicao sensveis (como acesso a banco
online) e navegao livre
54
Vector de
Ataque
Vulnerabilidade de Segurana
Explorao
Prevalncia
Deteco
Fcil
Comum
Fcil
Impacto
Tcnico
Impacto
de Negcio
Moderado
servidor.
Mais um exemplo seria quando a listagem dos diretrios no fora desativada.
Um atacante, percebendo essa vulnerabilidade, poder listar os diretrios da
aplicao e encontrar outras vulnerabilidades.
Ainda como exemplo, a configurao e/ou codificao de uma aplicao
expe, indevidamente, os erros ou outras informaes sobre o sistema ou o
servidor. O atacante utilizar essa informao para encontrar e explorar
vulnerabilidades potenciais. O cdigo 6.1 ilustra a exposio desnecessria de erros.
Na linha 02 feita a tentativa de conexo com o banco de dados e o resultado
armazena na varivel $link. A linha 03 testa a varivel $link, caso o valor seja false
o script executa a linha 04 que, por sua vez, interrompe a execuo do script atravs
da funo die(). Esta funo aceita um parmetro do tipo string e exibe esse valor no
navegador. No exemplo ser enviado ao navegador o resultado da funo
mysql_error().
7.3 - Preveno
Para garantir a preveno da aplicao web contra esta vulnerabilidades preciso
entender e compreender as configuraes do mdulo PHP. O captulo de configuraes do
projeto Guia de Desenvolvimento da OWASP traz recomendaes especficas para cada
56
57
58
59
Vector de
Ataque
Explorao
Difcil
Vulnerabilidade de Segurana
Prevalncia
Deteco
Pouco Comum
Difcil
Impacto
Tcnico
Impacto
de Negcio
Severo
8.3 Preveno
Todos os perigos do uso inseguro da criptografia esto alm do mbito do
escopo deste trabalho e, portanto, a preveno se far parcialmente, atravs do uso
correto das funes de encriptao do PHP e com as recomendaes mnimas do
OWASP Top 10 (2010):
No use algoritmos fracos como MD5/SHA-1. Utilize algoritmos mais seguros como SHA-256
ou superiores.
Crie chaves offline e armazene chaves privadas com extremo cuidado. Nunca transmita
chaves privadas em canais inseguros.
61
A tabela 10 ilustra todos os algortimos que podem ser usados juntos com a
funo hash(). Sero listados os algoritmos que foram instalados.
Md2
md4
md5
sha1
sha224
sha256
sha384
sha512
ripemd128
ripemd160
ripemd256
ripemd320
whirlpool
tiger128,3
tiger160,3
tiger192,3
tiger128,4
tiger160,4
tiger192,4
snefru
snefru256
gost
adler32
crc32
crc32b
salsa10
salsa20
haval128,3
haval160,3
haval192,3
haval224,3
haval256,3
haval128,4
haval160,4
haval192,4
haval224,4
haval256,4
haval128,5
haval160,5
haval192,5
haval224,5
haval256,5
62
Vector de
Ataque
Vulnerabilidade de Segurana
Explorao
Fcil
Prevalncia
Deteco
Pouco comum
Mdio
Impacto
Tcnico
Impacto
de Negcio
Moderado
Este tipo de ataque tambm conhecido como path transversal, ele ataca
as pastas do sistema operacional atravs do sistema web vulnervel. O cdigo 8.3
exemplifica um sistema vulnervel. A linha 02 armazena na varivel $template o
valor referente ao templete padro blue.php. A linha 03 e 04 recebe os dados do
cookie 'template', parmetro este, acessvel ao usurio e que pode ser manipulado
pelo atacante. A linha 05 expressa a vulnerabilidade, ela concatena o valor do
parmetro(malicioso) e busca o arquivo no disco rgido.
64
65
9.3 Preveno
A preveno contra esta vulnerabilidade requer a seleo de uma abordagem
que permita solicitar a autenticao adequada em cada pgina do sistema. O
OWASP Top 10 (2010) sugere as seguintes recomendaes:
A aplicao, por defeito, deve negar todos os acessos e requerer atribuies explicitas e
adequadas para acessar qualquer pgina do sistema.
Observar arquivos de includes/bibliotecas, eles devem ser mantidos, sempre que possvel,
66
Bloquear acesso a todos os tipos de arquivos que no sejam do tipo executvel(.php). Este
filtro deve seguir a abordagem accept know good . Arquivos com extenses .xml, .ini, .txt,
arquivos de log e outros no devem ser executados diretamente. Essa proteo se faz
atravs da utilizao do arquivo .htaccess. O cdigo 8.7 exemplifica uma restrio aos tipos
de arquivos citados.
67
Vector de
Ataque
Explorao
Difcil
Vulnerabilidade de Segurana
Prevalncia
Deteco
Comum
Fcil
Impacto
Tcnico
Impacto
de Negcio
Moderado
69
10.3 Preveno
A preveno primaria referente a camada de transporte poder ser feita
atravs das recomendaes do OWASP Top 10 (2010):
Solicitar SSL para todas as pginas sensveis. Pedidos no-SSL para estas pginas devero
ser redirecionados para a pgina SSL.
Colocar a opo secure em todos os cookies sensveis. A funo setcookie criar um cookie
caso nenhuma sada tenha sido enviada para o navegador. O quinto parmetro da funo
aceita um valor booleano e por padro false. Quando o valor desse parmetro for true, a
opo secure ser ativada, isto , o cookie s poder ser transimitido sob uma conexo
segura HTTPS do cliente. O cdigo 9.1 ilustra a utilizao da opo secure.
70
que
um
malware
seja
instalado
no
computador
da
vtima.
Vector de
Ataque
Vulnerabilidade de Segurana
Explorao
Prevalncia
Deteco
Mdio
Pouco comum
Fcil
Impacto
Tcnico
Impacto
de Negcio
Moderado
Para fazer com que a vtima acesse a URL maliciosa o atacante utiliza-se de
engenharia social. Ele escolhe a empresa com um sistema web que contm a
vulnerabilidade, reproduz um e-mail que ser enviado para vrias endereos
eletrnico com a URL maliciosa. A mensagem deste e-mail ilude a vtima pedindo,
por exemplo, que ela acesse o link para liberar novo mdulo de segurana para
acesso a conta corrente. Costumam ser mensagens que induzem a vtima a uma
ao imediata, fazendo-a agir primeiro e pensar depois.
Esta vulnerabilidade tambm pode ser explorada com o objetivo de burlar um
possvel sistema de Controle de Acesso existente na aplicao e acessar reas
restritas do sistema. Uma vez que a aplicao utiliza-se de parmetros para indicar
onde o utilizador deve ser encaminhado se determinada operao for executada
com sucesso, o atacante poder criar uma URL que ir passar pela verificao de
controle de acesso e, em seguida, encaminh-lo para uma rea restrita como, por
exemplo, uma rea com funes administrativas a qual ele normalmente no teria
acesso.
71
11.3 Preveno
O OWASP Top 10 (2010) sugere como preveno: a) Evitar o uso de
redirecionamentos
encaminhamentos,
b)
Se
usar
redirecionamentos
72
12 - Consideraes finais
Atualmente as aplicaes web so uma realidade para muitas empresas, seja
como um novo desenvolvimento de software ou at mesmo a migrao de uma
antiga aplicao para o paradigma das aplicaes web. preciso que a segurana
seja um requisito to importante como um requisito de funcionalidade, pois
desenvolver software (mesmo que no seja uma aplicao web) sem se preocupar
com sua segurana pode trazer prejuzos incalculveis para os envolvidos (clientes,
usurios, stackholders e etc...). Ter a conscincia de que necessrio desenvolver
aplicaes com segurana adequada um bom comeo, mas imprescindvel
conhecer e dominar os aspectos de segurana que envolve uma aplicao.
Pode-se dizer que este trabalho seja uma contribuio relevante para equipes
de desenvolvimento e projetistas de software que buscam como objetivo criar e
manter um sistema web seguro construdo sob a arquitetura LAMP. Este trabalho
traduziu e esmiuou o projeto OWASP Top 10(2010) para a realidade de um
desenvolvimento de aplicativo web baseado na linguagem PHP, de forma a
contribuir com o aprendizado e devido uso e implementao dessa linguagem.
Importante destacar que os 10 riscos indicados pelo Top 10 no suprem todos
os problemas relacionados segurana da aplicao. importante ir alm, a prpria
OWASP recomenda que as organizaes estabeleam uma base slida de
formao, normas e ferramentas que tornem a programao segura um objetivo
possvel. H centenas de questes que podem afetar, de forma geral, a segurana
de uma aplicao web.
A ttulo de continuidade desta pesquisa, pode-se sugerir um estudo mais
aprofundado da vulnerabilidade XSS baseada no DOM e dos projetos ASVS
(Application Security Verification Standard) e Development Guide, ambos da
OWASP.
Outras possibilidades podem ser exploradas com uma visita e leitura atenta
do contedo do site da OWASP, uma vez que a busca pela segurana um moto
perptuo.
73
Referncias
ALBUQUERQUE, Ricardo; RIBEIRO, Bruno. Segurana no Desenvolvimento de Software.
Rio de Janeiro: Campus, 2002.
GILMORE, W. Jason. Dominando PHP e MySql do iniciante ao profissional. Rio de Janeiro:
Alta Books, 2008.
G1. Criminosos roubam US$ 14 milhes em fraudes de anncios on-line. Disponvel em:
http://g1.globo.com/tecnologia/noticia/2011/11/criminosos-roubam-us-14-milhoes-em-fraudede-anuncios-line.html. Acesso em: 25/11/2011
MANUAL OFICIAL DO MySql. Disponvel em http://dev.mysql.com/doc/. Acesso em 01 ago.
2011.
MANICO, Jim. ; et. al. DOM based XSS Prevention Cheat Sheet. Disponvel em:
https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet . Acesso em:
01/08/2011.
MANUAL OFICIAL DO PHP. Disponvel em: http://www.php.net/manual/pt_BR/. Acesso em:
01/08/2011.
MARQUES, Heitor Romero et al. Metodologia da Pesquisa e do Trabalho Cientfico. 2.ed.
Campo Grande: Editora UCDB, 2006.
MORIMOTO, Carlos Eduardo. Servidores Linux, guia prtico. Porto Alegre: Sul Editores,
2008.
MITRE - Common Weakness Enumeration Vulnerability Trends. Disponvel em:
http://cwe.mitre.org/documents/vuln-trends.html. Acesso em: 01/08/2011
OWASP. Disponvel em: https://www.owasp.org/. Acesso em: 01/08/2011.
OWASP Application Security Verification Standard (ASVS) Project . Disponvel em:
https://www.owasp.org/index.php/ASVS#tab=Home . Acesso em: 01/08/2011.
OWASP Development Guide: Chapter on Configuration. Disponvel em:
https://www.owasp.org/index.php/Configuration. Acesso em: 01/08/2011
OWASP Enterprise Security API (ESAPI) Project. Disponvel em:
http://www.owasp.org/index.php/ESAPI. Acesso em: 01/08/2011.
OWASP Guide Project. Disponvel em:
https://www.owasp.org/index.php/Category:OWASP_Guide_Project. Acesso em: 01/08/2011
OWASP TOP 10 2007, The Ten Most Critical Web Application Security Vulnerabilities.
Disponvel em: https://www.owasp.org/index.php/Top_10_2007/. Acesso em 01 ago. 2011.
OWASP TOP 10 2010, The Ten Most Critical Web application Security Risks. Disponvel
em: https://www.owasp.org/index.php/Top_10_2010/>. Acesso em: 01/08/2011.
PETEFISH, Paul; SHERIDAN, Eric; WICHERS, Dave. Cross-Site Request Forgery (CSRF)
74
75