Beruflich Dokumente
Kultur Dokumente
RECIFE
2019
JOÃO LUCAS GOMES DE MIRANDA
RECIFE
2019
3
BANCA EXAMINADORA
________________________________________________
Prof.º Vinicius Cardoso Garcia
(Orientador)
________________________________________________
Prof.ª Kiev Santos da Gama
(Avaliador)
4
AGRADECIMENTOS
Agradeço a minha família pelo incentivo e pelo apoio incondicional. Ao Prof.º
Vinicius Cardoso Garcia pela orientação, paciência e pela ajuda sempre solícita e
rápida durante a elaboração desse projeto. Aos meus amigos do Centro de
Informática com os quais eu pude conversar sobre as dificuldades enfrentadas.
5
RESUMO
ABSTRACT
SUMÁRIO
AGRADECIMENTOS ...............................................................................................................4
RESUMO ..................................................................................................................................5
ABSTRACT ..............................................................................................................................6
SUMÁRIO.................................................................................................................................7
1. INTRODUÇÃO .................................................................................................................8
1.1. CONTEXTUALIZAÇÃO E MOTIVAÇÃO ............................................................................................................... 8
1.2. OBJETIVOS ............................................................................................................................................................ 8
1.3. ESTRUTURA DO DOCUMENTO ........................................................................................................................... 9
2. REFERENCIAL TEÓRICO .............................................................................................10
2.1. A WEB E SUA (IN)SEGURANÇA ...................................................................................................................... 10
2.2. O PROTOCOLO HTTP ..................................................................................................................................... 14
2.3. MAPEANDO APLICAÇÕES ................................................................................................................................ 15
2.4. ATACANDO USUÁRIO(S) ................................................................................................................................. 17
Cross Site Scripting (XSS) ........................................................................................................................................ 18
Phishing ........................................................................................................................................................................... 19
Open Redirect ................................................................................................................................................................ 19
2.5. ATACANDO SERVIDOR(ES) ............................................................................................................................ 20
SQL Injection ................................................................................................................................................................. 20
Remote Code Execution ............................................................................................................................................ 21
2.6. METODOLOGIA HACKER: UM CHECKLIST ..................................................................................................... 22
3. PROGRAMAS DE CAÇA AOS BUGS ..........................................................................24
3.1. DEFINIÇÃO ........................................................................................................................................................ 24
3.2. MANUTENÇÃO DE VULNERABILIDADES ....................................................................................................... 24
3.3. DIVULGAÇÃO DAS VULNERABILIDADES ....................................................................................................... 25
3.4. BENEFÍCIOS ....................................................................................................................................................... 26
3.5. INCENTIVOS ...................................................................................................................................................... 27
4. EXEMPLOS DE PROGRAMAS .....................................................................................29
4.1. HACKER ONE .................................................................................................................................................... 29
4.2. BUG CROWD ...................................................................................................................................................... 29
4.3. FACEBOOK WHITEHAT .................................................................................................................................. 30
4.4. GOOGLE BUG HUNTER PROGRAM ................................................................................................................. 30
5. CONCLUSÃO.................................................................................................................32
5.1. CONTRIBUIÇÕES ............................................................................................................................................... 32
5.2. DIFICULDADES ENCONTRADAS ..................................................................................................................... 32
5.3. TRABALHOS FUTUROS .................................................................................................................................... 32
REFERÊNCIA BIBLIOGRÁFICA...........................................................................................33
8
1. INTRODUÇÃO
Este capítulo fornecerá uma contextualização dos assuntos abordados neste
projeto e a motivação para o trabalho produzido. Também serão apresentados os
principais objetivos deste Trabalho de Graduação, bem como a estrutura do restante
do documento.
1.2. Objetivos
O objetivo deste trabalho é estudar os programas bug bounty: como são
implementados, custos associados, o custo/benefício quando comparado a outras
metodologias (tais como consultoria ou equipe própria de segurança). Além disso, o
9
2. REFERENCIAL TEÓRICO
Nesse capítulo, serão apresentadas definições e conceitos referentes a como
funcionam a WEB, o protocolo HTTP e os mecanismos de segurança presentes nos
mesmos.
A seção 2.1 explica o que é a web e discute o principal fator de (in)segurança
da mesma: o usuário pode inserir dado. A seção 2.2 fala sobre o protocolo HTTP,
protocolo esse mais comumente usado nas aplicações Web (e, assim, o mais
importante de ser estudado por uma analista interessado em programas de caça aos
bugs). Seções 2.3, 2.4 e 2.5 discutem as técnicas mais comuns de ataques a
usuários e servidores. Por fim, a seção 2.6 tenta criar uma lista de itens – uma
espécie de “checklist” inicial – a serem investigados por um analista interessado em
participar de programas de bug bounty.
informações privadas, tendo em vista que a maioria da informação ali já era pública,
sendo essas o próprio conteúdo do site.
A internet de atualmente é realmente muito diferente do que ela era nos seus
primórdios [7]. Hoje, sites são, em sua maioria, aplicações. Temos registro de
contas, autenticação, transações bancárias, conversas privadas etc. O conteúdo
apresentado a cada usuário é, em sua maioria, particular e individual. Naturalmente,
muita dessa informação é altamente sensível, o que resulta em uma (ou, pelo
menos, deveria resutar em) grande preocupação com segurança.
• A versão do HTTP sendo usada. Hoje em dia, a maioria dos browsers usa
versão 1.1 [7]
A outra linha importante é o Host. O Host é o endereço do domínio do servidor
que possui o arquivo que se deseja obter.
Como descrito acima, a comunicação envolve um request e uma response.
Descevemos o primeiro, agora iremos ilustrar como é segundo:
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
Novamente, descrever cada uma dessas linhas foge do escopo desse trabalho.
Devemos apenas nos atentar a primeira linha (que diz a versão do HTTP usada e o
status da comunicação, no exemplo acima indicando que a comunicação foi bem
sucedida). A linha que começa com <html> é o começo do arquivo HTML em si, o
que, como já foi dito em seções anteriores, pode ser interpretado pelo navegador do
usuário.
Todo teste de penetração em aplicações Web envolve analisar a fundo essa
comunicação – a troca de requests e responses. Como modificações nos requests
mudam as respostas dos servidores, o que o servidor se permite receber e
interpretar etc. O apêndice A desse trabalho irá demonstrar o uso de ferramentas
que auxiliam nesse esforço. Como se pode perceber, entender o protocolo HTTP é
extremamente importante para um pesquisador interessado em programas de Bug
Bounty.
http://sitequalquer.com/error.php?msg=”um%20erro%20aconteceu”
Aqui, para fins de ilustração, assume-se, i) o site é vulnerável a XSS e ii) que a
página acima irá renderizar a página com o texto “um erro aconteceu”.
http://sitequalquer.com/error.php?msg=”<script>alert(1)</script>”
Por a página ser vulnerável a XSS, um usuário, ao abrir a página acima, irá ser
surpreendido com a seguinte tela:
comentário numa foto em uma rede social vulnerável. O script seria executado por
todos que fossem visualizar a foto em questão.
Naturalmente, um ataque real envolveria a confecção de scripts mais
complexos, potencialmente acarretando alguma prática danosa – como envio de
informações privilegiadas (cookies de sessão, mensagens particulares etc.), ações
no site sem autorização e controle dos usuários (follow nas contas de redes sociais
do(s) atacante(s), envio de mensagens), mineração de criptomoedas e até worms –
programas que executam uma série de ações e depois replicam-se, enviando si
próprio a outros usuários.
Phishing
Open Redirect
http://sitequalquer.com/redir.php?msg=”http://google.com”
http://sitequalquer.com/redir.php?msg=”http://pagina-falsa.com”
No geral, programas de bug bounty consideram open redirect uma falha de não
muito impacto.
SQL Injection
SQL Injection, como o próprio nome sugere, é um ataque que tenta injetar
comandos SQL no banco de dados do servidor da aplicação. Para que isso seja
possível, um atacante precisa, via mapeamento da aplicação (seção 2.2), identificar
o tipo de banco de dados que é usado na aplicação, para, depois, inserir dados
confeccionados especificamente para tentar identificar a vulnerabilidade.
Imaginemos nosso site fictício sendo vulnerável a SQL Injection. Ele é feito em PHP
e usa PostgreSQL como banco de dados.
Agora pensemos em como é feita a autenticação nesse site. O usuário entra no
site e encontra a página de login. O usuário preenche os campos de autenticação,
estes que são enviados ao servidor no corpo do request HTTP. O servidor recebe as
credenciais e verifica no banco de dados se a senha informada é a que foi
cadastrada para esse usuário. Para fins de simplicidade, vamos assumir que nosso
site fictício armazena as senhas em plain text (o que, diga-se, é uma
vulnerabilidade).
Uma possível query SQL para validar essa autenticação seria:
sistema fictício em questão, um site institucional, feito em ASP, possui uma página
de Relatar Um Problema:
/relatar_problema.asp
1. Mapear a aplicação
23
3.1. Definição
Programas de caça aos bugs (ou programas de recompensas de bugs) são
programas que incentivam pesquisadores de segurança a procurar por falhas de
segurança em sistemas, onde as organizações responsáveis os recompensam
com prêmios e reconhecimento. [16] A partir de tais programas, organizações
conseguem resolver problemas relacionados a segurança antes desses se
tornarem conhecimento público.
Em 2013, um estudante chamado Khalil [17] encontrou uma vulnerabilidade
no Facebook que permitia a um usuário postar no mural de qualquer outro
usuário. Ao reportar a vulnerabilidade e ver esta ignorada, o estudante decidiu
explorar a falha e postou no mural do próprio criador do site, Mark Zuckerberg,
atraindo bastante atenção pra si e para a problemática. A partir daí, o facebook
melhorou bastante seu programa de bug bounty [18]. Mais detalhes sobre esse
programa serão discutidos no capítulo 4.
Desde então, os programas de bug bounty passaram de novidade para ser
usado pela maioria das organizações voltadas para web. O número de empresas
usando programas de bug bounty cresceu de modo a se tornar uma tendência,
ganhando momento nos anos recentes. [16].
deve ser feito no momento que eles encontram uma vulnerabilidade. Mandar por
e-mail pode ser sub-ótimo, uma vez que um funcionário de suporte ao usuário
pode, muitas vezes, não compreender o e-mail e simplesmente ignorá-lo. Quanto
ao que um pesquisador poderá fazer quando encontra uma falha, depende
totalmente de suas motivações – e um programa de bug bounty surge
exatamente para dar motivações.
A imagem a seguir ilustra uma possível interação entre manutenção de
vulnerabildiades e divulgação:
3.4. Benefícios
A tabela a seguir irá comparar o programa de bug bounty com as práticas
comuns adotadas antes da prática se popularizar, como ter um time externo
(ou interno) para realizar testes de penetração.
27
3.5. Incentivos
Os incentivos (ou motivações) para os pesquisadores são, de forma geral:
• Monetário: pesquisadores podem ganhar grandes quantias de dinheiro
por achar vulnerabilidades (quanto mais grave, mais alto o valor
recebido)
• Prêmios: itens físicos que trazem grande reconhecimento e realização
para os pesquisadores. Pode ser camisas, bonés, cartões
personalizados etc.
• Reconhecimento: programas de bug bounty no geral dispõem uma lista
de agradecimentos aos pesquisadores que até o momento
contribuiram com a melhoria da segurança do site. Exemplo:
facebook.com/whitehat/thanks
28
4. EXEMPLOS DE PROGRAMAS
A seção irá mostrar alguns programas populares de bug bounty – algumas
plataformas específicas, como HackerOne e BugCrowd, e também programas
implementados em gigantes como Google e Facebook.
5. CONCLUSÃO
O presente trabalho discutiu, de modo breve, porém conciso e abrangente, como
funcionam os programas de Bug Bounty. O trabalho cobriu uma série de conceitos
básicos relacionados ao que um pesquisador de segurança deve ter conhecimento e
onde há as falhas mais comuns e mais graves.
O trabalho também analisou aspectos como custos, benefícios, incentivos e
comparou como programas de caça aos bugs se comportam em relação aos
tradicionais times dedicados a testes de penetração.
Por fim, o trabalho falou sobre algumas plataformas conhecidas e com boa
reputação da comunidade de pesquisadores de segurança.
5.1. Contribuições
A principal contribuição desse trabalho está no estudo e análise dos bug bounties
– seus benefícios, custos, como são implementados. Adicionalmente, o trabalho traz
um background de vulnerabilidades comuns porém, muitas vezes, negligenciadas,
podendo ser, assim, utilizado como referência para o desenvolvedor de aplicações
que procura criar sistemas mais seguros.
REFERÊNCIA BIBLIOGRÁFICA
[1] "The Hacker-Powered Security Report - Who are Hackers and Why Do They
Hack p. 23" (PDF). HackerOne. 2017. Acessado em Março de 2019.
[3] Erin Winick. "Life as a bug bounty hunter: a struggle every day, just to get paid".
www.technologyreview.com/s/611896/life-as-a-bug-bounty-hunter. Acessado em
Março de 2019.
[4] "The Pentagon Opened up to Hackers - And Fixed Thousands of Bugs". Wired.
10 November 2017. Acessado em Março de 2019.
[5] Julia R. Livingston. "Are Bug Bounty Programs Worth It?". www.pbwt.com/data-
security-law-blog/are-bug-bounty-programs-worth-it. Acessado em Março de 2019.
[7] Dafydd Stuttard; Marcus Pinto. “The Web Application Hackers’ Handbook”. 2nd
Edition. Wiley Publishing, Inc. p. 37. ISBN: 978-1-118-02647-2.
[8] "What is the difference between the Web and the Internet?". W3C Help and FAQ.
W3C. 2009. Archived from the original on 9 July 2015. Acessado em Junho de 2019.
[9] Joseph Adamski; Kathy Finnegan (2007). New Perspectives on Microsoft Office
Access 2007, Comprehensive. Cengage Learning. p. 390. ISBN 978-1-4239-0589-9.
[10] Fielding, Roy T.; Gettys, James; Mogul, Jeffrey C.; Nielsen, Henrik Frystyk;
Masinter, Larry; Leach, Paul J.; Berners-Lee, Tim (June 1999). “Hypertext Transfer
Protocol – HTTP/1.1.” IETF. doi:10.17487/RFC2616. RFC 2616.
[14] Matthew Finifter, Devdatta Akhawe, and David Wagner. “An Empirical Study of
Vulnerability Rewards Programs”.
https://www.usenix.org/system/files/conference/usenixsecurity13/sec13-
paper_finifter.pdf. Acessado em Junho de 2019.
[15] Aron Laszka, Mingyi Zhao, Akash Malbari, Jens Grossklags . “The Rules of
Engagement for Bug Bounty Programs”. https://fc18.ifca.ai/preproceedings/105.pdf.
Acessado em Junho de 2019.
[17] Joshua Gardner. “Computer expert hacks into Mark Zuckerberg's Facebook
page to expose the site's vulnerability after his security warnings were dismissed”.
https://www.dailymail.co.uk/news/article-2396628/Mark-Zuckerbergs-Facebook-
page-hacked-Khalil-Shreateh-expose-site-vulnerability.html. Acessado em Junho de
2019.
[19] “Given enough eyeballs, all bugs are shallow? Revisiting Eric Raymond with bug
bounty programs”. https://arxiv.org/abs/1608.03445. Acessado em Junho de 2019.
[23] Steve Ranger. “Android and Chrome bug bounty: Google reveals how much it
paid out in 2018”. https://www.zdnet.com/article/android-and-chrome-bug-bounty-
google-reveals-how-much-it-paid-out-in-2018/. Acessado em Junho de 2019