Escolar Documentos
Profissional Documentos
Cultura Documentos
CDD 005.8
AGRADECIMENTOS
A meus pais Rogério e Rita por todo carinho passado ao longo dos 31 anos e por
sempre acreditarem no meu potencial, muitas vezes mais que eu mesmo, sempre me
incentivando a continuar estudando e seguir em frente.
As minhas irmãs Rebeca e Rafaela, também sempre carinhosas, que mesmo distante
ajudaram a moldar meu caráter.
Aos meus avôs Léo e Raquel pelo apoio e carinho que recebo nesta etapa da minha
vida, nesta nova e ainda desconhecida cidade.
Aos mestres e doutores do IFSP, Roan Simões, Luiz Angelo, Rosana Ferrareto, Arthur
Emanuel, Nemésio Freitas, Breno Lisi, David Buzatto, Ederson Borges e Gustavo Prieto,
entre outros, por serem excelentes profissionais e por sempre me ajudarem em cada etapa do
meu aprendizado e crescimento pessoal. Em especial ao Roan Simões por ter me ajudado, e
muito, a concluir esta etapa importante da minha formação.
Aos meus amigos pela paciência e compreensão, em especial ao Diego Marinho,
Rafael Valentim, Kazuo Iha e Thiago Syrto por estarem apoiando e compartilhando
ensinamentos.
Por fim a minha namorada Cristina Santos, fundamental nesta etapa, por compartilhar
comigo todas as minhas conquistas, ajudar a enfrentar os contratempos, por me incentivar
sempre e acreditar no meu futuro, além de ter me ajudado a manter são nessa etapa
conturbada que é o TCC.
“Todo sistema tem falhas, os mais
complexos são os mais vulneráveis, sendo
impossível fugir delas”
__________________________________
Kevin Mitnick
RESUMO
Cada vez mais os dispositivos móveis estão presentes em nossa vida e com mais
funcionalidades, dessa forma a demanda pela criação de aplicações para satisfazerem as
necessidades dos usuários cresce junto. Em paralelo, existem diversas plataformas que devem
ser contempladas, com distintos sistemas operacionais, de forma que se torna necessário uma
programação com linguagens específicas para cada caso. Essa necessidade resulta em códigos
replicados, o que aumenta o tempo de programação e dificulta a manutenção, algo que
impacta de forma negativa nos custos de cada projeto. Visando uma portabilidade do código,
e com isso uma redução nos custos, existem diversas ferramentas consagradas no mercado
que permitem rodar um só projeto web em diversas plataformas móveis de forma nativa.
Apesar de apresentar vantagens, essa prática também acrescenta desvantagens em termos de
segurança, a fim de elucidar as questões de segurança em uma programação hibrida e levantar
uma discussão sobre a segurança da informação, assunto desprezado por muitos
desenvolvedores e empresas, surge a motivação deste trabalho. Nele foram pesquisadas as
principais vulnerabilidades existentes no mercado, criada uma aplicação web móvel para
Android compilada com o uso do PhoneGap e foram exploradas brechas de segurança nessa
aplicação. O que resultou no levantamento de vulnerabilidades conhecidas no mercado,
identificação de pontos importantes a serem abordados pelo desenvolvedor, assim como na
proposta de soluções que procuram minimizar as vulnerabilidades existentes nesse tipo de
aplicação. Dessa forma foi possível ter uma abordagem do desenvolvimento através do
enfoque da segurança da informação.
Increasingly mobile devices are present in our lives and with more functionality, this
way of creating applications to meet as users' needs grows together. In parallel, there are
several platforms that must be contemplated, with different operating systems, in this way
becomes necessary a programming with languages specific to each case. This need results in
duplicate codes, which increases programming time and makes maintenance difficult,
something that negatively impacts the costs of each project. Aiming at portability of the code,
and with this a reduction in costs, there are several tools in the market that allow you to run a
single web project on several mobile platforms natively. Although it presents advantages, this
practice also adds disadvantages in terms of security, in order to elucidate security issues in a
hybrid programming and raise a discussion about information security, subject despised by
many developers and companies, the motivation of this work appears. It was investigated the
main vulnerabilities in the market, was created a mobile web application for Android
compiled with the use of PhoneGap and was exploited security holes in this application. This
resulted in the presentation of known vulnerabilities in the market, the identification of
important points to be addressed by the developer, as well as the proposal of solutions that
seek to minimize the vulnerabilities in this type of application. In this way it was possible to
take a development approach through the information security approach.
2D Two-Dimensional (Bidimensional)
Open Web)
QARK Quick Android Review Kit (Kit de Revisão Rápida para Android)
1 INTRODUÇÃO ........................................................................................................... 23
2.4 Ataque................................................................................................................................... 30
2.6.4 - A4 - Referência Insegura e Direta a Objetos (Insecure Direct Object References) ......... 37
2.6.7 - A7 - Falta de Função para Controle do Nível de Acesso (Missing Function Level
Forwards) .................................................................................................................................... 40
3 METODOLOGIA ....................................................................................................... 49
4 RESULTADOS ............................................................................................................. 61
5 CONCLUSÃO .............................................................................................................. 69
REFERÊNCIAS ................................................................................................................ 71
APÊNDICES ...................................................................................................................... 75
Segundo Cisco (2016), o tráfego de dados móveis cresceu 4.000 vezes ao longo dos
últimos 10 anos e quase 400 milhões de vezes ao longo dos últimos 15 anos, sendo que em
2015 o tráfego global de dados móveis cresceu 74 por cento em relação ao ano anterior.
Em conseqüência ao aumento de utilização de dispositivos móveis, cresce junto a
demanda pela programação para distintos sistemas operacionais móveis. Devido à
incompatibilidade das diferentes plataformas disponíveis, um mesmo projeto tem que ser
replicado em variadas linguagens, criando assim vários projetos por aplicação.
Com o intuito de unificar esses códigos, proporcionando a portabilidade dos
aplicativos, surgiram ferramentas como o PhoneGap1 e o IonicFramework2.
Essas ferramentas são middlewares que rodam códigos criados com o uso de
tecnologias web, HTML5 (Fifth Version Hypertext Markup Language), CSS3 (Cascading
Style Sheets) e JavaScript, nas principais plataformas existentes no mercado. Dessa forma
facilita a vida dos desenvolvedores e reduz os custos no desenvolvimento e manutenção, já
que mesmo com a necessidade de ser executado em plataformas distintas é feito apenas um
código por aplicação.
Apesar de facilitar em termos de portabilidade, ao criar aplicações utilizando
tecnologias voltadas à web, herdamos vulnerabilidades que muitas vezes não existem nas
linguagens nativas. Algumas dessas vulnerabilidades já são muito conhecidas por usuários
mal-intencionados que tem o intuito de explorá-las para ganho próprio ou de forma que cause
algum dano. Com isso, torna-se necessário um cuidado redobrado em sua segurança, o que
muitas vezes não acontece (JIN ET. AL, 2014).
Segundo o relatório das principais vulnerabilidades publicado pelo Common
Vulnerabilities and Exposures Details (CVE Details, 2016), somente entre janeiro e maio de
2016, 2639 novas vulnerabilidades foram catalogadas para os sistemas dos 50 principais
fabricantes de software.
Obviamente essa lista inclui apenas vulnerabilidades oficialmente descobertas e é
composta somente por grandes empresas. O top 10 inclui empresas como Oracle, Adobe,
Google, Microsoft, Apple, Debian, IBM, Cisco, Linux e Novell. Deste modo, trata-se de
1
http://phonegap.com/
2
http://ionicframework.com/
24
Motivação
para verificar se esses middlewares adotam alguma medida para dificultar ações dos usuários
mal-intencionados e propor soluções nos casos não tratados.
Objetivos
Organização do trabalho
Considerações Iniciais
Com o intuito embasar o projeto, este capítulo apresenta uma contextualização com
definições sobre aplicações web e segurança da informação, assim como pesquisas correlatas.
Jin et. al (2014) ressaltam que o aplicativo web não pode ser executado diretamente
nos sistemas móveis pois estes sistemas não suportam HTML5 e JavaScript nativamente.
28
Portanto, para viabilizar a execução é necessária a utilização de um recipiente web, que atua
como interface entre o dispositivo e o aplicativo web, como é o caso do WebView no
Android, o UIWebView no iOS, e o WebBrowser no Windows Phone.
Este recipiente web originalmente foi projetado para permitir que aplicativos nativos
possam processar o conteúdo de exibição da web, sendo basicamente pacotes que contém as
funcionalidades de navegação na Internet em uma classe.
Jin et. al (2014) afirmam também que como esses recipientes são destinados a
hospedar conteúdo web, que potencialmente possui riscos por estar exposto à Internet, os
recipientes assim como os navegadores, implementam um recurso de segurança chamado
caixa de areia, ou como chamado no idioma inglês, sandbox.
Este recurso sandbox tem como objetivo garantir que o funcionamento de alguma
aplicação, como por exemplo o código JavaScript possa ser executado em um ambiente
isolado contendo apenas recursos necessários para esse fim, de modo que não comprometa,
ou seja comprometido por, outras aplicações (PREVELAKIS; SPINELLIS, 2001).
Essa tecnologia é apropriada para conteúdo web, mas é bem restritiva para aplicativos
móveis, não permitindo que sejam acessados diretamente recursos do sistema, como arquivos,
câmeras, etc. O recipiente web permite também que os aplicativos criem uma ponte entre o
código JavaScript e o código nativo, por exemplo em linguagem Java. Esta ponte permite que
o código JavaScript possa invocar o código nativo de fora do container e com isso acessar
recursos do sistema caso o aplicativo tenha as permissões necessárias. Dessa forma os
desenvolvedores podem escrever seu próprio código nativo para trabalhar com o código
dentro do recipiente web, o que reduz a portabilidade do aplicativo. A prática mais comum é a
utilização de um middleware de terceiros para a parte NativeCode, deixando a questão
portabilidade para os desenvolvedores do middleware. (JIN ET. AL, 2014). Na Figura 1 é
exemplificado um recipiente web.
Figura 1 - Recipiente Web
Middleware
PhoneGap
PhoneGap é um middleware de código aberto que permite criar aplicações web móvel
nativamente instaladas, de forma que utiliza o recipiente web do dispositivo móvel para rodar
a aplicação. A ferramenta fornece uma API (Application Programming Interface) que permite
que o desenvolvedor acesse as funcionalidades nativas dos dispositivos através de chamadas
JavaScript. Essa ferramenta permite também a criação de classes nativas personalizadas para
usar como interface do JavaScript dentro do projeto (PHONEGAP, 2012). Na figura 2 pode se
observar essa interação mediada pelo middleware.
Em outras palavras, PhoneGap é uma biblioteca que permite que linguagens web
como HTML, CSS e JavaScript possam se comunicar e acessar características nativas do
30
dispositivo móvel. Agindo como uma interface entre as APIs JavaScript e as APIs nativas,
permitindo que os desenvolvedores possam utilizar recursos, como câmera, Acelerômetro,
Bluetooth, GPS (BAVUUDORJ; TRANCIOVEANU, 2013). Na tabela 3 pode se observar
vantagens e desvantagens do PhoneGap.
Ataque
sistema. Exemplos de ataque ativo muito populares, são os ataques de negação de serviço e a
exploração de vulnerabilidades por meio de exploits (STALLINGS, 2014).
Riscos de Segurança
A OWASP (Open Web Application Security Project) (2013) afirma que os atacantes
podem utilizar caminhos alternativos para causar danos. Alguns desses caminhos são triviais,
fácil de serem encontrados e explorados, porém em alguns casos são extremamente difíceis
assim como o dano causado pode ter nenhuma conseqüência ou pode ser muito prejudicial.
Dessa forma é importante levar em consideração ao considerar o risco, a probabilidade
associada em cada ameaça, vetor de ataque, vulnerabilidade de segurança frente a uma
estimativa dos impactos técnicos e no negócio da sua empresa. Na Figura 3 são demonstrados
os pontos importantes a serem considerados ao calcular os riscos.
Vulnerabilidade
Segundo o Cert.BR (2012) “uma vulnerabilidade é definida como uma condição que,
quando explorada por um atacante, pode resultar em uma violação de segurança”. Muitas
podem ser as causas para a existência de uma vulnerabilidade, como por exemplo, falha na
elaboração do projeto do sistema, problemas na tecnologia utilizada, erros na configuração,
entre outros.
Segundo a Cielo (2012) falhas nas etapas do desenvolvimento do software como
problemas gerados desde o planejamento da aplicação quanto na segmentação da rede, como
a implementação dos ativos de TI e informações que podem comprometer o ambiente,
atualmente são portas de entrada para grande parte dos ataques em aplicações web.
32
Na Tabela 5 está presente a lista da versão 2016 do “Mobile Top Ten” da OWASP.
3
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-7858
4
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-7297
34
Encontrar pontos de acesso Wi-Fi gratuitos, digitalizar códigos de barras 2d, enviar
mensagens SMS e ouvir música são práticas comuns e típicas do uso de um dispositivo
móvel. Porém uma tendência tem ganhado popularidade, tornando essas práticas arriscadas.
Essas atividades e arquivos tem se tornado porta para atacantes injetarem códigos maliciosos,
levando a danos, danos estes que não param no aparelho da vítima podendo se espalhar por
outros aparelhos, muitas vezes se enviando para a lista de contatos da vítima (JIN ET. AL,
2014).
O XSS (Scripting de Site Cruzado) ocorre quando uma aplicação ao receber os dados
não confiáveis reenvia ao navegador sem validação ou filtro o que permite os atacantes
executarem scripts no navegador da vítima podendo roubar dados da sessão do usuário ou
35
redirecionar a algum site malicioso (OWASP, 2013). Na Figura 4 estão presentes os pontos
do XSS conforme os riscos de segurança em aplicações (tópico abordado na seção 2.4).
Figura 4 - XSS
XSS armazenado ocorre quando o sistema salva os dados não confiáveis em seu banco
de dados, podendo ser em fóruns de mensagens, log de visitantes, ou outra forma de
armazenamento confiável. Em um momento posterior os dados não confiáveis são lidos e
integrados no conteúdo dinâmico do sistema.
36
Estes ataques costumam ser direcionados tanto para áreas que possuem uma
quantidade grande de usuários quanto em áreas que possuem poucos usuários com privilégios
maiores, que possuem dados sensíveis valiosos para o atacante. Se um usuário com
privilégios executa um código desses, o atacante pode ser capaz de executar operações
privilegiadas em nome do usuário.
Como exemplo, o atacante pode injetar o XSS em uma mensagem de log que pode não
ter sido tratada adequadamente, sendo executado quando um administrador os acessa (CWE
2015). Na Figura 5 é apresentado um código vulnerável que exibe o nome do funcionário
através de uma busca no banco de dados em JSP, que foi salvo através de um formulário
preenchido pelo usuário.
O código acima recebe o parâmetro pela URL e o exibe sem nenhuma validação. Na
Figura 7 é apresentado um exemplo de ataque XSS refletido, que solicita login e senha de um
usuário e os envia para um servidor que os armazena.
O XSS baseado em DOM (Document Object Model) diferente dos outros tipos de
XSS, que são injetados pelo servidor, o baseado em DOM é injetado diretamente na pagina.
Este tipo de ataque geralmente envolve um script confiável salvo em um servidor que é
enviado para o cliente, tal como um JavaScript, este script é executado pelo navegador
injetando código na página web, como um HTML dinâmico (CWE 2015). Na Figura 8 é
exibida uma injeção da chamada de um script malicioso externo, facilitado pelo uso da
biblioteca jQuery.
A Configuração Incorreta de Segurança ocorre quando não há uma boa definição das
configurações de segurança na aplicação, no banco de dados, no servidor web, etc. Em alguns
casos chega a ser mantida a configuração padrão, que é insegura, é necessário também manter
uma manutenção apropriada da configuração assim como a utilização de um software sempre
atualizado (OWASP, 2013).
39
Access Control)
A Falta de Função para Controle do Nível de Acesso ocorre quando as funções que
verificam os direitos de acesso do usuário são implementadas apenas na interface e não no
servidor, permitindo assim que o atacante consiga forjar essa função e consiga acessar a
funcionalidade sem a permissão adequada (OWASP, 2013).
Known Vulnerabilities)
and Forwards)
A Cielo (2012) ressalta que alguns dados críticos, como senha, usuário e código de
confirmação do cartão de crédito, mesmo que criptografados, não devem ser salvos na
aplicação, e dados como números de cartões que são sensíveis, mas necessários a aplicação
nunca devem ser salvos completos ou devem ser criptografados.
Essa preocupação se deve, pois mesmo que pareça que o usuário não possa acessar
esses dados, os atacantes podem usar brechas na forma de armazenamento dos dados do
dispositivo para conseguir esse acesso ínvido, sendo assim interessante que eles tenham
acesso a menor quantidade de informações críticas possíveis e de forma que dificulte a leitura
desses dados.
Segundo a OWASP (2016) o Armazenamento de Dados Inseguro abrange situações
em que o desenvolvedor assume que malwares ou usuários não tem como acessar o sistema
de arquivos de um dispositivo móvel e as informações confidenciais nos armazenamentos de
dados do dispositivo, deixando facilmente acessível ao atacante dados sensíveis salvos no
aplicativo.
Outro caso que o Armazenamento de Dados Inseguro abrange é o vazamento de dados
não intencional onde ao processar informações sensíveis fornecidas pelo usuário ou no
backend, de forma desconhecida pelo desenvolvedor, a aplicação disponibiliza essa
informação em um local inseguro que pode ser acessado abertamente por outra aplicação.
Este segundo caso, muitas vezes é agravado pelo fato do desenvolvedor não ter um
42
A comunicação insegura existe em qualquer caso que são trocadas informações entre o
aplicativo e o servidor sem qualquer forma de proteção, como a comunicação por texto plano,
configurações incorretas do SSL (Secure Sockets Layer) e protocolos precários (OWASP,
2016).
Stallings (2014) destaca que a principal técnica de segurança utilizada para garantir a
confidencialidade das mensagens trocadas entre qualquer tipo de sistemas é a criptografia.
Sistemas que não fazem uso da criptografia, ou a aplicam de maneira incorreta, estão
sujeitas à interceptação de dados, como por exemplo, através do uso de um analisador de
protocolos (também conhecido como sniffer), permitindo também que os dados sejam
adulterados através de ataques de modificação e fabricação.
Arxan (2014) afirma partir da pesquisa que efetuaram e de relatórios dos principais
especialistas da indústria que aplicações são vulneráveis a engenharia reversa, reengenharia e
republicação tornando com isso armas maliciosas e por isso as empresas devem adotar
medidas preventivas.
A Engenharia Reversa acontece algumas vezes antes dos ataques, onde é feita uma
análise do binário para pesquisar no código fonte, bibliotecas, algoritmos e outros ativos atrás
de informações, como dados do servidor e ou constantes de criptografia, que podem ser
usadas para explorar outras vulnerabilidades. Podem ser usadas ferramentas de inspeção de
binários a facilitar essa inspeção e reverter o código (OWASP, 2016).
45
HP (2013) revelou em pesquisa que 97 por cento das aplicações móveis testadas
possuíam alguma fonte de informação privada em fácil acesso e que 86 por cento não tinham
medidas de segurança para proteger essas informações dos mais comuns exploits.
Arxan (2014) ratifica, em sua pesquisa, os dados apresentados pela HP no ano
anterior, informando que na maioria dos aplicativos móveis avaliados os dados estáticos
estavam com informações sensíveis expostas, como senhas, nomes de usuários,
identificadores de contas e chaves criptográficas, o que pode facilitar a ação de atacantes e
que 25% das aplicações testadas algumas das mais básicas medidas de segurança não eram
tomadas.
Trabalhos Correlatos
5
https://cirt.net/Nikto2
6
https://github.com/linkedin/qark
7
http://www.androbugs.com/
47
Na execução dos testes realizados, Ribeiro utilizou uma adaptação dos sete passos
descritos na 3ª versão do guia OSSTMM (Open Source Security Testing Methodology
Manual), sendo removida uma etapa por não se aplicar aos sistemas web. Dessa forma foram
definidas quais vulnerabilidades proteger, foram utilizados os protocolos de internet HTTP ou
48
HTTPS nas interações e acessos às aplicações, os testes foram divididos em pequenas etapas,
foram escolhidos os scanners de vulnerabilidade a serem utilizados, foram determinadas quais
informações seriam extraídas com os testes e por fim foi assegurado que os testes não
desrespeitassem as leis vigentes uma vez que foram realizados em um ambiente controlado.
Como resultado, o autor conseguiu reproduzir todas as vulnerabilidades propostas e
foram apresentadas formas de tratamento da seguinte forma:
Da mesma forma que os trabalhos aqui apresentados, este trabalho teve como intuito
explorar vulnerabilidades em aplicações de forma manual e através de ferramentas que
automatizam o processo. Porém, ao invés dos testes ocorrerem em sistemas e aplicações
preparados para reproduzir vulnerabilidades, foi criada uma aplicação web móvel, compilada
com o uso do PhoneGap para a plataforma Android, como se fosse ser utilizada
comercialmente, sem a preocupação de reproduzir ou tratar as vulnerabilidades estudadas.
Após sua criação ela foi submetida a testes, de forma que foram coletadas vulnerabilidades e
foram pesquisadas formas de amenizar esses riscos, através de configurações do PhoneGap e
de intervenção do programador no código.
49
Metodologia
Aplicativo de Teste
Durante a execução dos testes foi utilizada uma aplicação web móvel8, compilada com
o PhoneGap para a plataforma Android, criada sem abordar os conceitos de segurança e que
contempla a parte de login, cadastro e edição dos dados do usuário. Etapas as quais estão
presentes na maior parte das aplicações disponíveis no mercado e que podem ser portas de
entrada para a realização de ataques.
Esse cadastro é exibido na própria aplicação e em um sistema web, onde os dados são
sincronizados através de um WebService. Deste modo, os dados permanecem salvos na
aplicação móvel em um banco local, o qual pode ser apagado através do logout, e no servidor
para sua persistência. Assim, os dados podem ser resgatados para a aplicação móvel através
8
https://github.com/ronipaschoal/tcc_1410
50
do login ou serem conferidos através de uma página web em PHP. Na Figura 11 é possível
ver a estrutura dos bancos de dados, presente na aplicação e no servidor.
A aplicação web móvel é uma aplicação single page, onde todas as telas são
renderizadas na mesma página HTML através de funções em JavaScript. Ela foi desenvolvida
com o uso de HTML, CSS, JavaScript (jQuery), um banco local em SQLite e compilada com
o uso do framework PhoneGap. Na Figura 12, exibida abaixo, é possível ver as telas do
aplicativo.
Tela Principal
A Tela Principal é a primeira tela que aparece ao abrir o aplicativo, onde estão
disponíveis dois links, o “logar” que direciona para a Tela de Login e o “cadastrar” que
direciona para a Tela de Cadastro.
Tela de Login
Tela de Cadastro
A Tela de Cadastro possui um formulário onde o usuário pode preencher seus dados.
Após o preenchimento, a solicitação de cadastro é realizada através do botão “Cadastrar”,
gerando um acesso ao WebService para salvar os dados no banco de dados do servidor e ao
mesmo tempo no banco de dados local. O usuário recém cadastrado é logado no sistema e
redirecionado para a Tela Home. Nessa tela possui também o link “Voltar” pelo qual o
aplicativo retorna a Tela Principal.
Tela Home
A Tela Home apresenta os dados do usuário salvos no banco de dados local e dois
links, o “Atualizar” que redireciona para a Tela de Edição; e o “Logout” que apaga os dados
do banco local e retorna à Tela Principal.
52
Tela de Edição
WebService
O WebService não possui uma interface visual e foi construído com o uso de PHP e
um banco de dados no servidor em MySql. As funções presentes nele contemplam o login, o
cadastro e a edição dos dados que seguem descritas abaixo.
Login
Cadastro
Pagina Web
A página web é uma pagina para o uso de um gestor onde são exibidos os dados dos
associados cadastrados. Ela foi construída com o uso de HTML, CSS, PHP e faz acesso ao
banco de dados do servidor. Na Figura 13 é possível ver a única tela disponível na web, onde
são exibidos os dados dos usuários cadastrados.
Testes Manuais
Nesta etapa foram executados alguns testes manuais baseados na lista da OWASP e
nos trabalhos correlatos estudados no capitulo anterior, com o intuito de verificar alguns casos
específicos. Estes testes seguem descritos nos tópicos seguintes.
aplicativo interpreta esse código ao renderizar a página inicial onde são exibidos os dados do
usuário. Na figura 14 é possível visualizar o ataque sendo realizado.
O Scripting de Site Cruzado foi testado de forma parecida com a Injeção de Código,
porém, o código JavaScript inserido durante o cadastro era uma chamada a um código
JavaScript disponibilizado em um subdomínio do servidor onde estavam hospedados os
WebServices. Na figura 15 é possível visualizar o ataque sendo realizado.
Almeida (2013) apresenta em sua pesquisa, citada como um dos trabalhos correlatos,
uma ferramenta que pode ser usada para fazer o Backup dos aplicativos Android. Com o uso
dessa ferramenta o atacante pode ter acesso ao mesmo arquivo .APK usado nessa etapa,
mesmo tendo instalado o aplicativo através do Google Play10.
9
http://www.7-zip.org/
10
https://play.google.com/store?hl=pt_BR
56
QARK
No fim da sua execução o QARK gera um relatório em HTML onde ficam registradas
as vulnerabilidades encontradas e em alguns casos uma breve descrição. Na Figura 19,
apresentada a seguir, é possível visualizar o relatório gerado pela ferramenta.
AndroBugs
O AndroBugs possui uma versão para Windows que deve ser executada pelo prompt
de comando, passando parâmetros, tal como o “-f” e o caminho do aplicativo. Uma lista dos
parâmetros permitidos pode ser encontrada através do -h. Na Figura 20, é possível visualizar
execução da ferramenta através do prompt de comando.
Pesquisa de Soluções
Após a execução dos testes manuais e dos automatizados, foram pesquisadas formas
de tratar ou minimizar algumas vulnerabilidades encontradas. Essas pesquisas foram divididas
em duas etapas, a alteração das configurações do PhoneGap e alterações no código do
aplicativo.
Alterações no Código
Após a verificação das configurações do PhoneGap, foram pesquisadas alterações no
código e o uso de outras ferramentas com o intuito de tratar vulnerabilidades ou dificultar a
ação do atacante.
60
61
Resultados
Testes Manuais
Nos tópicos a seguir seguem descritos os resultados obtidos a partir dos testes
manuais, assim como a forma utilizada em seu tratamento.
Injeção de Código
A Injeção de Código foi reproduzida com sucesso nos testes manuais, de forma que
além de afetar o aplicativo, chegou a afetar o sistema online que exibe os dados dos usuários.
Dessa forma foi possível verificar que, além da aplicação estar vulnerável a esse ataque, ela
também é uma porta de entrada que o atacante pode utilizar para chegar ao sistema web.
Essa vulnerabilidade foi tratada com a remoção das tags HTML nas funções
responsáveis pelo cadastro e alteração dos dados do associado, assim como no recebimento de
qualquer dado enviado ao WebService. Na Figura 23 é possível visualizar a remoção das tags
HTML através da aplicação.
A expressão regular passada na função replace substitui todas as tags HTML por uma
string vazia. Na Figura 24 é possível visualizar a remoção das tags HTML através do
servidor.
O campo access origin é responsável pela configuração dos scripts externos aceitos
pela aplicação e vem definido o valor “*” por padrão, o que permite a execução de qualquer
script externo. Ao alterar este valor para o endereço do WebService contido no servidor, que
está no subdomínio associates, a aplicação passa a aceitar somente o endereço configurado.
63
Na Figura 27 é possível verificar a configuração alterada para informar que o script externo
confiável é apenas o do WebService.
Como cada subdomínio é tratado como um domínio distinto foi possível testar esta
correção utilizando um script malicioso contido no subdomínio attacker, que passou a ser
bloqueado pela aplicação.
Os demais campos, allow-intent, são responsáveis pela permissão de acesso a links
externos através de ancoras a, como a função mailto ou redirecionar a outra pagina web, e
nesse caso não foram alterados para permitir que o aplicativo acesse links externos.
11
http://www.javascriptobfuscator.com/Javascript-Obfuscator.aspx
64
Funcionalidade Estranha
Scanners de Vulnerabilidade
Cada Scanner gerou relatórios bem distintos, que seguem em anexo no apêndice deste
documento. Na Tabela 7 é possível visualizar a quantidade de alertas agrupados por tipo
encontrados pelo QARK.
Além dos alertas, o QARK exibe o AndroidManifest da aplicação que pode ser
visualizado na Figura 29.
12
https://developer.android.com/studio/command-line/logcat.html
67
Conclusão
ADOBE PHONEGAP, Build Amazing Mobile Apps Powered By Open Web Tech. Disponível
em: <http://phonegap.com/>. Acesso em 22 de maio 2016.
CWE, CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site
Scripting'). Disponível em: <http://cwe.mitre.org/data/definitions/79.html>. Acesso em 05
junho 2016.
CIELO (2012). Guia de boas práticas de segurança para e-commerce – Cielo. Disponível em
<https://www.cielo.com.br/wps/wcm/connect/11a69252-599e-4dc9-99e7-4bd53f341c6f/
guia_de_boas_praticas.pdf?MOD=AJPERES&CONVERT_TO=url&CACHEID=11a69252-
599e-4dc9-99e7-4bd53f341c6f/>. Acesso em 22 de outubro 2016.
CISCO, Cisco Visual Networking Index: Global Mobile Data Traffic Forecast Update, 2015-
2020 White Paper. Disponível em: <http://www.cisco.com/c/en/us/solutions/collateral/
72
service-provider/visual-networking-index-vni/mobile-white-paper-c11-520862.html>. Acesso
em 15 de maio 2016.
Gartner, Gartner Says Mobile App Stores Will See Annual Downloads Reach 102 Billion in
2013. Disponível em: <http://www.gartner.com/newsroom/id/2592315>. Acesso em 29 de
maio 2016.
Gawker; Apple's Worst Security Breach: 114,000 iPad Owners Exposed. Disponível em
<http://gawker.com/5559346/apples-worst-security-breach-114000-ipad-owners-exposed/>.
Acesso em 18 de outubro 2016.
JIN, X.; LUO T., et al: Code Injection Attacks on HTML5-based Mobile Apps. arXiv, New
York, out. 2014. Disponível em: <https://arxiv.org/abs/1410.7756>. Acesso em 08 maio 2016.
OWASP; The Free And Open Software Security Community. Disponível em: <https://www.
owasp.org/>. Acesso em 22 de maio 2016.
SINGH, N; TERE, G. Study of Security Threats and Vulnerabilities Associated With Mobile
Device. India, International Journal of Computing Experiments, 2016. Disponível em: <
http://tcsc.org.in/ijce/v01i01/p3.pdf>. Acesso em 23 de Outubro 2016.
STARK, J; JEPSON,B. Building Android Apps with HTML, CSS, and JavaScript. 2ª edição.
Sebastopol: O’Reilly Media, Inc., 2012. 159p.
The H Security: Encryption found insufficient in many Android apps. Disponível em: <http://
www.h-online.com/security/news/item/Encryption-found-insufficient-in-many-Android-apps-
1732847.html>. Acesso em 23 de outubro 2016.
TRICE, A. PhoneGap Explained Visually. In: Adobe PhoneGap. Disponível em: <http://
phonegap.com/blog/2012/05/02/phonegap-explained-visually/>. Acesso em 22 de maio 2016.
Apêndices
76
77
*************************************************************************
** AndroBugs Framework - Android App Security Vulnerability Scanner **
** version: 1.0.0 **
** author: Yu-Cheng Lin (@AndroBugs, http://www.AndroBugs.com) **
** contact: androbugs.framework@gmail.com **
*************************************************************************
Platform: Android
Package Name: br.com.ronipaschoal
Package Version Name: 1.0.0
Package Version Code: 1
Min Sdk: 14
MD5 : 46e046cbd603761d41f4045fba87b67f
SHA1 : 5c09d05c0762781ddbb38da29e431c1e4963df80
SHA256: e9fc544ad208c0dcfd22f3e43521bca361ab6fd9659cd873e35c98d8a335d3e0
SHA512:
e8577304fc1d85953355064ec709260460c06023216c95e1b77767e8e02a12bb2ba84bb5bdde0
515addbb39e55afeb8f287aa9e0628f8bea6a713db79996a1b8
Analyze Signature:
6e3d6ccf7809763750bf0a95176901815eccc9799acb06145f1eeb65ce4c9163780995499a47a9
7b1f7193f92f7474a0901eacb2103503d7d37fd243cd3a4100
------------------------------------------------------------------------------------------------
[Critical] <Debug> Android Debug Mode Checking:
DEBUG mode is ON(android:debuggable="true") in AndroidManifest.xml. This is
very dangerous. The attackers will be able to sniffer
the debug messages by Logcat. Please disable the DEBUG mode if it is a released
application.
[Warning] <SSL_Security> SSL Certificate Verification Checking:
Please make sure this app has the conditions to check the validation of SSL Certificate.
If it's not properly checked, it MAY
allows self-signed, expired or mismatch CN certificates for SSL connection.
This is a critical vulnerability and allows attackers to do MITM attacks without your
knowledge.
If you are transmitting users' username or password, these sensitive information may
be leaking.
Reference:
(1)OWASP Mobile Top 10 doc:
https://www.owasp.org/index.php/Mobile_Top_10_2014-M3
(2)Android Security book: http://goo.gl/BFb65r
(3)https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=134807561
82
This vulnerability is much more severe than Apple's "goto fail" vulnerability:
http://goo.gl/eFlovw
Please do not try to create a "X509Certificate" and override "checkClientTrusted",
"checkServerTrusted", and "getAcceptedIssuers"
functions with blank implementation.
We strongly suggest you use the existing API instead of creating your own
X509Certificate class.
Please modify or remove these vulnerable code:
--------------------------------------------------
[Maybe Vulnerable (Please manually confirm)]
=> Lorg/apache/cordova/filetransfer/FileTransfer$3;
-> used by: Lorg/apache/cordova/filetransfer/FileTransfer;-><clinit>()V
[Notice] AndroidManifest Adb Backup Checking:
ADB Backup is ENABLED for this app (default: ENABLED). ADB Backup is a good
tool for backing up all of your files. If it's open
for this app, people who have your phone can copy all of the sensitive data for this app
in your phone (Prerequisite: 1.Unlock
phone's screen 2.Open the developer mode). The sensitive data may include lifetime
access token, username or password, etc.
Security case related to ADB Backup:
1.http://www.securityfocus.com/archive/1/530288/30/0/threaded
2.http://blog.c22.cc/advisories/cve-2013-5112-evernote-android-insecure-storage-of-
pin-data-bypass-of-pin-protection/
3.http://nelenkov.blogspot.co.uk/2012/06/unpacking-android-backups.html
Reference: http://developer.android.com/guide/topics/manifest/application-
element.html#allowbackup
[Info] <Command> Runtime Command Checking:
This app is not using critical function 'Runtime.getRuntime().exec("...")'.
[Info] <Command> Executing "root" or System Privilege Checking:
Did not find codes checking "root" permission(su) or getting system permission (It's
still possible we did not find out).
[Info] <Database> SQLiteDatabase Transaction Deprecated Checking:
Ignore checking "SQLiteDatabase:beginTransactionNonExclusive" because your set
minSdk >= 11.
[Info] <Database> Android SQLite Databases Encryption (SQLite Encryption Extension
(SEE)):
This app is "NOT" using SQLite Encryption Extension (SEE) on Android
(http://www.sqlite.org/android) to encrypt or decrpyt
databases.
[Info] <Database> Android SQLite Databases Encryption (SQLCipher):
This app is "NOT" using SQLCipher(http://sqlcipher.net/) to encrypt or decrpyt
databases.
[Info] <Database><#CVE-2011-3901#> Android SQLite Databases Vulnerability Checking:
83