Table Of ContentPODER EXECUTIVO
MINISTÉRIO DA EDUCAÇÃO
UNIVERSIDADE FEDERAL DO AMAZONAS
INSTITUTO DE COMPUTAÇÃO
PROGRAMA DE PÓS-GRADUAÇÃO EM INFORMÁTICA
ALEXANDRE BRAGA DAMASCENO
TAINTJSEC: UM MÉTODO DE ANÁLISE
ESTÁTICA DE MARCAÇÃO EM CÓDIGO
JAVASCRIPT PARA DETECÇÃO DE
VAZAMENTO DE DADOS SENSÍVEIS
Manaus - Amazonas
2017
ALEXANDRE BRAGA DAMASCENO
TAINTJSEC: UM MÉTODO DE ANÁLISE
ESTÁTICA DE MARCAÇÃO EM CÓDIGO
JAVASCRIPT PARA DETECÇÃO DE
VAZAMENTO DE DADOS SENSÍVEIS
Dissertação apresentada ao Programa de
Pós-Graduação em Informática do Instituto
de Computação da Universidade Federal do
Amazonas, como requisito parcial para a
obtenção do grau de Mestre em Informática.
Orientador: Eduardo J. P. Souto
Manaus - Amazonas
2017
© 2017, Alexandre Braga Damasceno.
Todos os direitos reservados.
Damasceno, Alexandre Braga
D155t TaintJSec: Um Método de Análise Estática de
Marcação em Código JavaScript para Detecção de
Vazamento de Dados Sensíveis / Alexandre Braga
Damasceno. — Manaus - Amazonas, 2017
xxi, 129 f. : il. color ; 31cm
Dissertação (mestrado) — Universidade Federal do
Amazonas
Orientador: Eduardo J. P. Souto
1. Vazamento de Informação. 2. Dados Sensíveis.
3. JavaScript. 4. TaintJSec. 5. Análise Estática.
I. Título.
CDU 004
Dedico esta dissertação aos meus pais,
Raimundo Nonato Damasceno e Sandra Maria Braga Damasceno,
que nunca mediram esforços para me dar uma boa educação
e me ensinaram, desde cedo, sobre o quão importante são os estudos em minha vida.
Agradecimentos
Primeiramente agradeço e louvo ao Deus de Abraão, Isaac e Jacó, que também é o meu
Deus, por ter me dado força e coragem para enfrentar as tribulações que surgiram em
minha vida durante o curso, mas não foram suficientes para impedir esta vitória.
Quero agradecer à minha família, meu porto seguro, que sempre me apoiou nos
estudos e nunca me deixou esmorecer perante os desafios.
À minha amada Andressa D. Craveiro, por motivar-me e por ser tão compreensível
nos momentos em que eu estive ausente por dedicação ao curso.
Ao meu orientador Prof. Dr. Eduardo J. P. Souto e ao coorientador Me. Thiago de
Souza Rocha pelo conhecimento, companheirismo, auxílio e paciência que foram de suma
importância durante o desenvolvimento deste trabalho.
Ao Prof. Dr. Eduardo L. Feitosa, presidente do Programa de Pós-Graduação em
Informática (PPGI), por mostrar-se sempre pronto a ajudar o próximo.
Aos professores, Dr. Raimundo S. Barreto e Dr. Arilo C. D. Neto, pela confiança
em mim depositada ao redigirem as cartas de recomendação para o curso.
Agradeço também ao Prof. Dr. David B. F. de Oliveira que durante minha tutoria
mostrouserumapessoadecaráterímpar,preocupadocomoserhumanoantesdequalquer
outra coisa.
Agradeço aos colegas do laboratório ETSS (Emerging Technologies and Systems
Security) pelo clima agradável de harmonia e descontração, onde sempre fui bem recebido
e quase sempre tinha café quente.
Por fim, agradeço a todos aqueles que a seu modo contribuíram e me apoiaram para
a conclusão deste trabalho.
Muito obrigado!
vi
“Se permanecerdes em mim,
e as minhas palavras permanecerem em vós,
pedireis o que desejardes, e vos será concedido.”
(Jesus Cristo)
vii
Resumo
Javascript é uma das linguagens de programação mais utilizadas no mundo e
continua expandindo-se gradativamente. Tal expansão deve-se à grande flexibilidade e
dinamicidade que a linguagem possui, o que facilita bastante a criação de aplicações.
Porém, essa mesma característica que a torna uma linguagem de sucesso é também o
que torna difícil a análise estática do fluxo de execução, processo esse que visa identificar
a presença de códigos maliciosos nas aplicações. Este trabalho apresenta o TaintJSec,
uma nova abordagem que utiliza análise estática de marcação de código JavaScript para
identificar e prevenir o vazamento de informação sensível. O diferencial do TaintJSec em
relação aos outros trabalhos que utilizam análise estática de marcação é que ele consegue
analisar o fluxo de códigos implícitos, acompanha a propagação do taint tag na execução
da função eval e identifica o vazamento de informação em códigos ofuscados. Para validar
a eficácia da abordagem, foram realizados testes de propagação do taint tag, dividos em 13
grupos de testes distintos. Em seguida, foram realizados testes para avaliar a propagação
na execução da função eval. Por fim, a abordagem foi testada em um código malicioso,
ofuscado por cinco ferramentas diferentes, específicas para tal finalidade. Os resultados
obtidos demonstraram que a abordagem é eficaz na detecção do vazamento de informação
e mais eficiente que outros métodos do estado da arte.
Palavras-chave: Vazamento de Informação, Dados Sensíveis, JavaScript.
viii
Abstract
Javascript is one of the most used programming languages in the world and continues
to expand gradually. Such success is due to the great flexibility and dynamicity that
the language has, which greatly facilitates the creation of applications. However, this
same characteristic that makes it a successful language is also what makes it difficult
to analyze static execution flow, which aims to identify the presence of malicious code in
applications. This work presents TaintJSec, a new approach that uses static code marking
analysis to identify and prevent leakage of sensitive information in web applications.
Unlike other works based on static analysis, TaintJSec is able to check the explicit and
implicit code flow, accompanies the propagation of the taint tag in the execution of the
eval function, and is able to identify information leakage in obfuscated codes. To validate
the effectiveness of the approach, taint tag propagation tests were performed in a range
of tests divided into 13 different test groups. Then, tests were performed to evaluate the
propagation of the eval function. Finally, the approach was tested in a malicious code,
obscured by five different tools, specific for that purpose. The results demonstrated that
the approach is effective in detecting information leakage and more efficient than other
methods of the state of the art.
Keywords: Data Leakage, Sensitive Data, JavaScript.
ix
Sumário
Agradecimentos vi
Resumo viii
Abstract ix
Sumário x
Lista de Algoritmos xiii
Lista de Códigos xiv
Lista de Figuras xvi
Lista de Quadros xviii
Lista de Tabelas xix
Lista de Siglas xx
1 Introdução 1
1.1 Motivação e Descrição do Problema . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.1 Objetivo Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.2 Objetivos Específicos . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Contribuições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Estrutura do Documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 JavaScript e Desenvolvimento Web 6
2.1 Linguagem de Programação JavaScript . . . . . . . . . . . . . . . . . . . . 6
2.2 Vazamento de Informação . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Análise de Marcação (Taint Analysis) . . . . . . . . . . . . . . . . . . . . . 12
2.3.1 Análise de Marcação Dinâmica . . . . . . . . . . . . . . . . . . . . 12
x
Description:4.15 Exemplo de AST com os atributos de intervalo de código-fonte e o taint tag atribuído 4.16 Testes de execução da expressão unária +[] no shell do Python, PHP e Node.js. 53 .. trabalho, como as bibliotecas JavaScript e a plataforma Node.js. 3 https://developers.google.com/closure/compile