análise da segurança de aplicativos na plataforma android através
TRANSCRIPT
Análise da Segurança de Aplicativos na Plataforma
Android Através da Adoção de Patterns
Adriana Lopes Pereira Batista1, Bruna Laís Dellaquila
1, Glauber da Rocha
Balthazar 1
1 FATEC - Faculdade de Tecnologia de Carapicuíba - Avenida Francisco Pignatari, 650
- Vila Gustavo Correia CEP 06310-390. São Paulo – Brasil.
[email protected], [email protected],
Abstract. The continuous increase of variety of resources available on mobile
applications and the increasing incorporation of these tools in the daily life’s
population makes necessary the application of information security techniques
for creating more secure applications. It follows from the fact that these
devices have become the target of attacks by high risks, especially Android,
motivated both by the recent increase in market share occupied by the
platform compared to the other as the opening of your code. Thus, it is
necessary to address the problems resulting from poor coding applications
and also the solutions that could be implemented to minimize them. One of the
difficulties encountered by developers concerns the understanding of risks,
threats associated with the platform and the lack of documentation covering
these aspects for the development of applications. The purpose of this paper is
to present security practices through patterns in order to gather methods that
can be adopted by developers to create more secure applications. The use of
patterns allows the sharing of information and experiences among developers,
as well as being important piece to the development of more complex projects,
avoiding rework and facilitating communication and better use of
alternatives.
Resumo. O aumento contínuo da variedade de recursos disponíveis em
aplicativos para dispositivos móveis, e a crescente incorporação de tais
ferramentas no cotidiano da população, torna necessária a aplicação das
técnicas de segurança da informação para a criação de aplicativos mais
seguros. Isso decorre do fato de que estes dispositivos têm se tornado alvo de
ataques de riscos elevados, em especial o Android, motivado tanto pelo
recente aumento da fatia de mercado ocupado pela plataforma comparado as
outras quanto pela abertura do seu código. Desta forma, faz-se necessária a
abordagem dos problemas resultantes da má codificação de aplicativos e
também das soluções que poderão ser implementadas para minimizá-los. Uma
das dificuldades encontradas por desenvolvedores diz respeito ao
entendimento dos riscos, das ameaças associados a plataforma e a escassez
de documentação que abranja estes aspectos para o desenvolvimento de
aplicações. A finalidade deste trabalho é apresentar práticas de segurança
através de patterns, visando reunir métodos que possam ser adotados por
desenvolvedores para a criação de aplicativos mais seguros. O uso de
patterns permite o compartilhamento de informações e experiências entre
desenvolvedores, além de constituir peça importante para a elaboração de
projetos mais complexos, evitando o retrabalho e facilitando a comunicação e
uma melhor exploração de alternativas.
1. Introdução
Devido à evolução tecnológica, atualmente é possível acessar dados em praticamente
qualquer lugar do mundo e a qualquer instante. Essa realidade é possível, devida à
inserção dos dispositivos móveis no cotidiano das pessoas ao longo dos anos e também
pela disponibilidade contínua de novos aplicativos no mercado (TONIN, 2012).
O grande poder de conectividade e processamento oferecido pelos dispositivos
móveis em ambientes públicos e privados representam uma espécie de revolução da
Tecnologia da Informação e Comunicação que, agregada à ampla difusão dos
dispositivos e o aumento da variedade de serviços e aplicativos, foram colocados em
evidência como alvos de ataques de risco, em particular o Android, que vem
conquistando grande parte do mercado atual (BRAGA et al., 2012).
Em vista disto, o estudo de novas técnicas de segurança torna-se necessário. E,
como tentativa de contenção a invasões e mau uso de aplicativos, é adotado no discorrer
deste trabalho métodos de segurança no desenvolvimento de aplicações Android através
de patterns. Tais práticas já existem e fazem parte de estudos publicados em livros e
artigos ou por empresas, conforme citado nas referências bibliográficas.
A estrutura de patterns é escolhida para facilitar o acesso às técnicas de
segurança, uma vez que permitem a abordagem de cada assunto em diferentes
contextos. Estes podem ser usados em um grande número de aplicações e contribuem
na definição e documentação de um framework. Além disso, são formados por um
vocabulário comum que permite uma melhor comunicação entre os desenvolvedores e
constituem uma base de experiências reutilizáveis para a construção de software, pois
funcionam como peças na elaboração de projetos mais complexos e possibilitam a
apresentação de uma estrutura formal a ser aplicada na resolução de problemas
(conjunto de "forças" - objetivos e limitações) encontrados em situações que se repetem
(JUNQUEIRA; COSTA; LIRA, 1998).
Ainda, relaciona-se também neste trabalho, informações sobre o sistema
operacional Android, seus recursos e as propriedades de segurança, pois a abordagem
destes dados contribui para a contextualização da importância em utilizar as técnicas de
segurança apresentadas pelos patterns nos aplicativos das plataformas móveis.
1.1. Objetivo
O objetivo deste trabalho é disponibilizar uma abordagem simplificada de práticas de
segurança no desenvolvimento de aplicativos mobile para a plataforma Android, através
de patterns que visam proporcionar ao desenvolvedor conhecimento e ciência da
importância da aplicação de segurança em seus aplicativos.
Desta forma, tem-se como meta esclarecer ao desenvolvedor a importância em
aplicar segurança da informação na elaboração de seus aplicativos, através do exercício
inicial de diagnosticar possíveis vulnerabilidades. Assim, baseado nestas
vulnerabilidades, é posto uma oportunidade de solução através dos patterns escolhidos
e abordados no discorrer deste trabalho. Para finalmente, expor os resultados obtidos
através da análise prática, possibilitando assim uma conclusão sobre o nível de
segurança adquirido ao usufruir da hipótese aqui proposta.
1.2. Justificativa
A proposta de utilização de práticas de segurança da informação no desenvolvimento de
aplicativos demonstra formas de proteger o acesso à informações privilegiadas, sejam
dos aplicativos ou de seus respectivos usuários. Isso é feito através de análise em
aplicativos para demonstrar exemplos de possíveis vulnerabilidades presentes nos
aplicativos que podem ser mitigadas utilizando-se patterns como método de apoio aos
desenvolvedores, uma vez que estes exercem o papel de “facilitador”.
Desta forma, esta abordagem tem o intuito de promover, para trabalhos futuros,
maior abrangência dos problemas existentes nos aplicativos para dispositivos móveis, o
que certamente contribuirá para a disseminação de práticas de segurança e incorporação
destas em todo o ciclo de desenvolvimento realizado.
2. Metodologia
Este trabalho baseia-se na hipótese de que a adoção de técnicas de programação segura
no desenvolvimento de aplicativos Android exerce papel fundamental na redução de
ataques de risco relacionados às informações dos usuários da plataforma. De acordo
com o OWASP (Open Web Application Secure Project - Guia de Melhores Práticas de
Programação Segura), programação segura é um método que visa prevenir, ou mesmo
reduzir, as ocorrências de vulnerabilidades mais comuns em softwares, com objetivo de
manter a confidencialidade, integridade e disponibilidade dos recursos de informação
por meio de codificação de dados, práticas de criptografia, validação de dados de
entrada, entre outros.
Para tanto, neste trabalho uma pesquisa qualitativa é empregada para levantar e
reunir as principais vulnerabilidades encontradas em aplicações e as técnicas para
mitigá-las através da análise de documentos já publicados neste âmbito. O uso da
análise qualitativa vai de encontro ao objetivo do trabalho, que é descrever um
problema, expô-lo em categorias que facilitem a compreensão e apresentar
contribuições propostas para uma possível solução resultante da pesquisa documental
empregada. “Documentos” devem ser compreendidos de forma ampla, incluindo os
materiais escritos, (obras científicas e técnicas, relatórios, revistas, entre outros), as
estatísticas e os elementos iconográficos (como, por exemplo, imagens e grafismos),
considerando que, a escolha dos documentos não é realizada de modo aleatório, mas em
função de alguns propósitos, ideias ou hipóteses. Considerando que a abordagem
qualitativa não se trata de uma proposta rigidamente estruturada, ela permite aos
investigadores utilizarem a imaginação e criatividade para propor trabalhos que
explorem novos enfoques.
Assim, a estrutura empregada para a análise qualitativa é resultado da adaptação
do modelo descrito por Godoy no artigo “Pesquisa Qualitativa: Tipos Fundamentais”.
Como consequência, neste trabalho o modelo adaptado propõe a divisão da análise de
conteúdo em três fases, como mostrado na Figura 1.
Figura 1. Modelo de análise de conteúdo (GODOY, 1995)
Ainda, de acordo com a Figura 1, as três fases são explicadas e detalhadas a
seguir: a pré-análise é considerada a fase da organização, pois nela é estabelecido o
esquema de trabalho, onde são examinados os documentos e definidos os mais
promissores. Nesta fase, a escolha bibliográfica é reunida levando em conta a
relevância do conteúdo apresentado com o objetivo da pesquisa; na segunda fase, de
exploração do material, são classificados os problemas relacionados às vulnerabilidades
apresentadas nos aplicativos e categorizadas as técnicas de tratamento; por fim, na
terceira fase, os problemas de vulnerabilidades à ataques enfrentados pelos aplicativos
são apresentados através de padrões (patterns).
3. Organização do Trabalho
Como resultado das três etapas descritas na metodologia, no discorrer dos capítulos
deste trabalho encontra-se inicialmente uma breve fundamentação teórica que
possibilita o conhecimento de aspectos relacionados à tecnologia Android e definições
de segurança, a identificação de possíveis vulnerabilidades segmentadas por serviços
que possam conter em aplicações e hipóteses de patterns para a mitigação dos riscos
que uma aplicação possa apresentar ao utilizar os serviços escolhidos. Em seguida,
apresenta-se a teoria das técnicas de analises utilizadas que permitem a identificação de
estruturas de códigos com a implementação das hipóteses citadas e uma analise de
entidades open sources disponíveis ao alcance de usuários. Por fim os resultados são
apresentados.
4. Referencial Teórico
Os subcapítulos a seguir apresentam uma breve introdução nos conceitos teóricos e
bibliográficos utilizados como referência para o trabalho.
4.1. O Sistema Operacional Android
O Android é a plataforma mais popular do mundo móvel e está instalada em 75% do
mercado de smartphones. Segundo definições encontradas no site oficial do produto
trata-se de um software open-source criado para telefones celulares e outros
dispositivos móveis, que possibilita uma integridade com mais de 600.000 aplicativos e
jogos disponíveis no Google Play, sua loja virtual (ANDROID, 2013; OLHAR
DIGITAL, 2013).
A escolha da plataforma Android para este trabalho é realizada não apenas por
se tratar de uma plataforma de código aberto que tem se tornado alvo de ataques
maliciosos, mas também por sua popularidade. Assim, a proposta de inserção de
técnicas de segurança no desenvolvimento de aplicativos e a criação de patterns para
auxílio no desenvolvimento de aplicativos abrange uma quantidade significativa de
desenvolvedores e também de usuários (que, consequentemente serão beneficiados) das
aplicações (BRAGA et al., 2012).
4.2. Segurança da Informação
A segurança da informação está associada a atributos que pretendem preservar dados,
sistemas, ou quaisquer outros recursos que tenham algum valor para o indivíduo. De
forma ampla, a segurança da informação envolve requisitos direcionados à garantia de
origem, uso e trânsito da informação, com o objetivo de assegurar todas as etapas que
compõe seu ciclo de vida. Desta forma, no desenvolvimento de um aplicativo, a
segurança não deverá ser tratada como um processo, e sim como parte de todo o seu
desenvolvimento. Praticar segurança se resume em fornecer confidencialidade,
integridade, disponibilidade e, de acordo com algumas literaturas, autenticidade e
irretratabilidade (MARCIANO, 2006).
À medida que aumenta a quantidade de aplicativos no mercado, cresce também
a preocupação com as vulnerabilidades e a ocorrência de ataques maliciosos. Deste
modo, torna-se motivadora a implementação de técnicas que visam assegurar as
informações e a qualidade dos serviços oferecidos pelos aplicativos, bem como auxiliar
os desenvolvedores a incorporarem tais práticas de segurança, são estas: autenticidade,
confidencialidade, integridade, disponibilidade e irrevogabilidade (RORH, 2013;
CALDAS, 2009).
4.3. Patterns (utilizados no trabalho)
Patterns constituem soluções para problemas que normalmente se repetem em um
determinado contexto, e que podem ser aplicadas em situações similares durante o
desenvolvimento de um sistema. Devido à escassez da documentação de problemas e de
suas respectivas soluções, esforços adicionais são gerados para a implementação de
soluções para problemas que muitas vezes se repetem, desta forma, o uso de patterns
torna-se viável, pois visa facilitar o compartilhamento de informações entre
desenvolvedores, tornando mais eficiente o entendimento de um determinado problema,
servindo como peça na construção de softwares mais complexos, uma vez que permite a
criação de uma documentação mais completa e uma melhor exploração das alternativas
de um projeto. Além disso, o foco principal do uso de patterns não é apenas
tecnológico, mas também o de apoiar desenvolvedores por meio da catalogação de
experiências e soluções (JUNQUEIRA; COSTA; LIRA, 1998).
Neste trabalho, são abordados quatro temas através de patterns que envolvem a
aplicação de medidas de segurança para o desenvolvimento de aplicativos. Estes
patterns são descritos a seguir
4.3.1 Transmissão Segura de Dados
Critérios fundamentais de segurança devem ser considerados no processo de
gerenciamento dos riscos de aplicativos que realizam troca de dados por meio de
interações com o servidor. Isto porque a troca de dados através de um aplicativo móvel
codificado de forma inadequada pode permitir que dados sensíveis estejam vulneráveis
a ataques durante o tráfego em canais inseguros.
Atendendo aos princípios de segurança, o critério de autenticidade deverá ser
aplicado, ou seja, os aplicativos devem ser capazes de verificar se as entidades com
quem estão se comunicando são quem alegam ser, caso contrário, informações
confidenciais podem ser expostas a entidades que não deveriam ter acesso a elas. Neste
contexto, a opção do usuário de poder escolher fazer downloads apenas de fontes
confiáveis e, para que este e os demais requisitos de segurança sejam cumpridos,
técnicas devem ser implementadas no desenvolvimento dos aplicativos. Outro critério
de segurança que deverá ser considerado é o de confidencialidade, uma vez que
terceiros não devem ter acesso a informações se não estiverem autorizados (SIX, 2012).
4.3.2 Ofuscação de Código
Situações que envolvem o uso inadequado de informações pessoais captadas por
softwares mal intencionados são comumente divulgado nos canais de comunicação. O
que torna o desenvolvedor cada vez mais responsável por adotar técnicas de
programação segura em dispositivos móveis a fim de evitar ameaças e ataques. A
ofuscação de código é uma técnica que visa proteger o conteúdo do mesmo, e dificulta
o acesso ao código-fonte da aplicação por meio de engenharia reversa (DEVELOPERS,
2012).
O uso da técnica de engenharia reversa permite a análise de permissões, na
plataforma Android, contidas no arquivo AndroidManifest.xml, onde constam de
acordo com as permissões, bibliotecas e recursos utilizados no desenvolvimento do
aplicativo pelo APK (Android Applications Package), desta forma, possibilita que o
atacante consiga entender o funcionamento do aplicativo (MARTINS, 2009).
4.3.3 Criptografia de dados
Informações divulgadas através de uma pesquisa realizada pela empresa Trend Micro
para avaliar a proteção contra códigos maliciosos em sistemas operacionais, relata que
25% dos 2 milhões de aplicativos disponíveis para a plataforma Android são malwares
e que 10% dos oferecidos pela Google Play tratam-se de aplicativos maliciosos. Desta
forma, ainda que a plataforma Android segregue os aplicativos armazenados em um
dispositivo através da atribuição de um UID (user-id), o que garante certo nível de
proteção no compartilhamento de dados e permissões de acessos, é necessária a
utilização de técnicas que acrescentem maiores níveis de segurança (RIBEIRO, 2012).
O modelo básico de acesso do Android pode não ser suficiente para proteger o
risco de segurança e confiabilidade, devido à possibilidade de um usuário possuir um
UID de superusuário (modo root) que lhe possibilita total manipulação do sistema ou
caso dados sejam armazenados em uma mídia externa, como cartões SD, situação em
que as informações poderão estar acessíveis por qualquer outro dispositivo que
consigam acessar essa mídia, isso ocorre pelo fato desse recurso de armazenamento ser
formatado com sistemas de arquivos que não suportam a permissão nativa imposta pelo
kernel Linux. Com o objetivo de proteger dados armazenados por um aplicativo em um
dispositivo, devem-se empregar práticas de segurança em diferentes camadas,
referência da prática Defesa em Profundidade (Defense in Depth – DiD), o que inclui a
criptografia de dados (SIX, 2012).
4.3.4 Permissão de aplicativos
O Android é baseado em Linux e assim possui seu modelo de segurança nativa de
usuários e grupos. Neste modelo cada usuário recebe um ID (user ID – UID) e caso haja
a necessidade um ID de grupo (group ID – GID). Posteriormente permissões sobre
acessos a dados são atribuídas a cada recurso, neste cenário cada aplicativo é um
usuário/recurso e o sistema Linux possui o poder de impedir que aplicativos com
números de usuários diferentes troquem informações, conceito conhecido como
separação de preocupações. Com a plataforma Android também encontra-se um sistema
complementar e completo de permissões para serviços fornecidos por aplicativos
através de requisições ao usuário no momento de sua instalação (SIX, 2012).
Pode-se relacionar dois métodos de atribuir permissões entre aplicativos: uma
que solicita algum consentimento através de APIs e serviços disponibilizados pelo
sistema e outra que oferece serviços personalizados. Permissões de APIs são permissões
oferecidas pelo sistema e permissões personalizadas são definidas por um aplicativo
com a indicação de uma API ou métodos que consistem em permissões dos recursos
envolvidos. Cabe ao desenvolvedor à responsabilidade de especificar todas as
permissões que seu aplicativo precisará e estruturá-las corretamente (SIX, 2012;
BRAGA et al., 2012).
5. TÉCNICAS DE ANÁLISE
Neste capítulo abordam-se os métodos de como um aplicativo pode possuir ou ser
avaliado diante dos Patterns propostos anteriormente, ou seja, explica-se como as
hipóteses de solução para transmissão segura de dados, ofuscação de código,
criptografia de dados e permissões entre aplicativos são encontradas em uma aplicação
através de seu código fonte.
5.1. Transmissão segura de dados
As técnicas de transmissão segura de dados abordadas no pattern citam “autenticação
de entidades”, “encriptação de dados”, “verificação de servidor” e “validação de
entradas”. O nível de proteção a ser incluído no aplicativo dependerá de uma análise de
riscos dos dados que estão sendo transferidos. Deste modo, neste trabalho são utilizados
os códigos com o intuito de contribuir com a identificação de tais métodos de segurança
nos aplicativos Android que realizam transmissão de dados (SIX, 2012).
5.2. Ofuscação de Código
Existem várias ferramentas que realizam tal técnica, inclusive uma delas, o ProGuard, é
integrada ao sistema de construção do Android. Por conta desta facilidade, o ProGuard
é utilizado neste trabalho para demonstrar a ofuscação de códigos no desenvolvimento
de um aplicativo.
Ao criar um projeto Android, um arquivo chamado “proguard.cfg” é gerado
automaticamente no diretório raiz do projeto. Neste arquivo estão definidos os métodos
de como serão ofuscados e otimizados os códigos do aplicativo a ser construído, porém
é aconselhável que o desenvolvedor modifique-o a fim de personalizá-lo conforme suas
necessidades, uma vez que o arquivo de configuração padrão abrange apenas casos
gerais. Em seguida, ao ser executado, o ProGuard gera quatro arquivos. São eles, o
“dump.txt”, que descreve a estrutura das classes do arquivo “.apk”; o “mapping.txt”,
que lista o mapeamento da classe original e ofuscada, os métodos e nomes dos campos;
o “seeds.txt”, que lista as classes e membros não ofuscados e, por último, o “usage.txt”,
que lista os códigos retirados do arquivo “.apk” durante o processo de ofuscação.
(LAFORTUNE, 2012-2013)
O arquivo “mapping.txt” é importante quando é necessário gerar uma nova
versão do aplicativo, pois ao invés de manipular o código ofuscado, é possível realizar
rastreamento de pilha para voltar o código ofuscado para o original. Um código
ofuscado contém caracteres sem sentido no lugar das classes, campos e métodos, o que
possibilita a identificação visual da técnica quando utilizada em algum aplicativo.
(LAFORTUNE, 2012-2013)
Apesar do ProGuard permitir que o desenvolvedor consiga obter o mapeamento
de seu código após realizado o processo de ofuscação, esta técnica dificulta a
visualização do código caso um terceiro consiga ter acesso ao arquivo “.apk” de um
aplicativo. Isto porque, mesmo que o indivíduo realize engenharia reversa, o código
resultante fornecerá dados ilegíveis.
5.3. Criptografia de dados
Com o pattern de criptografia de dados é proposto que um desenvolvedor, após fazer
uma análise minuciosa dos dados que seu aplicativo realmente deseja guardar, possa
realizar a escolha de métodos ou algoritmos de criptografia existentes e conhecidos.
Na linguagem Java, um dos pacotes que oferecem as classes e interface para
aplicações criptográficas no Android é o “javax.cripto”. Pode-se utilizar algoritmos
simétricos, assimétricos e cifras por blocos para implementação de criptografia.
Encontra-se também dentre os pacotes de APIs oferecidos pelo Android o
“javax.crypto.interfaces” que fornece as interfaces para a implementação do algoritmo
do criptografia assimétrica Diffie-Hellman, que consiste no compartilhamento de
chaves entre usuários em um canal inseguro. Essa troca é baseada em logaritmos
discretos (fundamentado em uma raiz primitiva) e faz necessário o requerimento de
autenticação. Por último, relaciona-se o pacote “javax.crypto.spec” que especifica quais
chaves e parâmetros de criptografia são suportados. (DEVELOPERS, 2013; SAMPAIO,
2008)
5.4. Permissões de Aplicativos
De acordo com o pattern de permissões entre aplicativos a lista de permissões
envolvidas por aplicativo encontram-se no arquivo “AndroidManifest.xml” e devem ser
identificadas pelo desenvolvedor como APIs e suas quatro classificações ou como
permissões especiais. Assim, espera-se identificar esses parâmetros no código fonte de
cada aplicativo que será analisado futuramente neste trabalho. Também pode-se
comparar a lista de permissões encontradas no arquivo “AndroidManifest.xml” com as
relacionadas ao usuário pelo identificador na loja da Google Play.
A fim de exemplificar uma correta avaliação do relacionamento de permissões
entre aplicativos, são exemplificados a seguir dois códigos-fonte, um com permissão
sobre a API de INTERNET e outro com uma permissão personalizada, como mostrado
na Figura 2 (SIX, 2012).
Figura 2. Reprodução parte 4 - Código para geração de uma chave, encriptação
e desencriptação de dados, derivação de chave informada pelo usuário (SIX,
2012)
A permissão de INTERNET, conforme já citada é uma das bibliotecas padrão
do Android é relacionada quando há a utilização de rede pelo aplicativo. O nome
qualificado “android.permission.” é a forma do sistema identificar qual a permissão
atribuída, no caso da imagem acima “android.permission.INTERNET” (SIX, 2012).
6. Análise dos Aplicativos
Neste capítulo são analisados aplicativos open-source para identificar o uso das técnicas
de segurança abordadas pelos patterns. Para esta análise são utilizadas as técnicas
apresentadas anteriormente divididos em três etapas, como mostrado na metodologia,
que correspondem às análises realizadas.
6.1. Transmissão segura de dados
No pattern de transmissão segura de dados é citado que, para a proteção de tráfego de
redes, é necessária a utilização de protocolos como encriptação de dados, autenticação
de usuários e entidades, uso de certificados e validação de entrada. Desta forma, é
escolhido um aplicativo que realiza o serviço de tráfego de dados para análise de
identificação do uso técnicas de segurança. Assim, seguindo a metodologia aplicada
neste trabalho, a análise do aplicativo está dividida em três etapas. Na primeira são
apresentados os aplicativos avaliados. Em seguida, as técnicas identificadas são
demonstradas através das imagens de seus códigos e, por último, a avaliação realizada é
apresentada em uma tabela (SIX, 2012).
1º Etapa:
O aplicativo escolhido para análise trata-se do Foursquared. O aplicativo é open-source
e oferece o serviço de transmissão de dados, permitindo que o usuário faça integração
com a rede de check-ins Foursquare, na qual é possível marcar onde você está através
de redes sociais (GOOGLE PROJECT HOSTING, 2013).
2º Etapa:
Nesta etapa são subdivididas as técnicas de segurança relacionadas no pattern para
facilitar a visualização da análise realizada no aplicativo, conforme a seguir:
a) Autenticação de Entidades: para identificar o uso de SSL/TLS no aplicativo
Foursquared é analisada a classe “HttpURLConnection”, localizada no pacote
“oauth.signpost.basic”. De acordo com as imagens das Figuras 3 e 4 é possível verificar
que o protocolo HTTPS não foi especificado para uso no código.
Figura 3. Análise do pacote “oauth.signpost.basic” do aplicativo Foursquared
Figura 4. Análise do pacote “oauth.signpost.basic” do aplicativo Foursquared
No pacote “oauth.signpost.signature", mostrado nas figuras 5 e 6, é verificado o
uso de token para autenticação do usuário.
Figura 5. Análise do pacote “oauth.signpost.signature” do aplicativo
Foursquared
Figura 6. Análise do pacote “oauth.signpost.signature” do aplicativo
Foursquared
b) Verificação de Servidor: no pacote “googlecode.dumpcatcher.logging” é
identificado o uso da classe “StrictHostnameVerifier”, que verifica o primeiro nome da
autoridade certificadora habilitada contida no certificado do servidor, conforme Figura
7.
Figura 7. Análise do pacote “oauth.signpost.signature” do aplicativo
Foursquared
c) Validação de Entrada: na etapa de análise do aplicativo não foi identificado
comandos para a realização de validação de entrada.
3º Etapa:
A tabela 1 apresenta a identificação das técnicas de segurança apresentadas no pattern
de transmissão segura de dados presentes nos código dos aplicativos analisados.
Tabela 1. Uso de Transmissão Segura de Dados nos aplicativos
Nome do
aplicativo
SSL/TLS Token Verificação de
Servidor
Validação de
Entrada
Foursquared Não Sim Sim Não
6.2. Ofuscação de código
Para a análise do uso da ofuscação de código nos aplicativos Android são escolhidos
dois aplicativos open-source disponíveis na web, inclusive no próprio site da Google.
Neste trabalho não são aplicadas técnicas de como tentar reverter a ofuscação de código
(LAFORTUNE, 2013).
A técnica de análise está dividida em três etapas para facilitar a compreensão do
método utilizado. Na primeira etapa são apresentados os aplicativos escolhidos, na
segunda, são demonstradas imagens de parte de seus códigos e, na terceira, uma tabela
apresenta a avaliação realizada, conforme a seguir:
1º Etapa:
São escolhidos dois aplicativos diferentes sem considerar o tipo de serviço oferecido
por eles, uma vez que não influenciam nos resultados da análise, sendo: o primeiro,
Stand up timer, trata-se de um cronômetro simples que oferece diversos tipos de uso de
timers; e o segundo, Foursquared (GITHUB, 2013).
2º Etapa:
Para identificar a técnica de ofuscação, os dois aplicativos são visualizados através do
Eclipse, ambiente de desenvolvimento dos aplicativos Android. Assim é possível
visualizar claramente seu conteúdo, bem como estrutura e classes utilizadas como
mostrado na Figura 8.
Figura 8. Imagem do arquivo “AndroidManifest.xml” do aplicativo Stand up
Timer pelo Eclipse
Diferente do primeiro, o segundo aplicativo é ilegível. Contém caracteres
especiais misturados a letras e pontuações que impedem a análise e o entendimento do
código, como mostrado na Figura 9. Isso ocorre, pois através da ofuscação o conteúdo
do aplicativo é codificado para impedir sua leitura.
Figura 9. Imagem do arquivo “AndroidManifest.xml” do aplicativo Foursquared
pelo Eclipse
3º Etapa:
A tabela 2 apresenta a identificação do uso de ofuscação de código nos aplicativos
analisados.
Tabela 2. Uso de ofuscação de código nos aplicativos
Nome do aplicativo Ofuscação de código
Stand up timer Não
Foursquared Sim
6.3. Criptografia de dados
A análise do uso de criptografia de dados é também realizada sobre o código fonte do
aplicativo Foursquared e divida em três partes, sendo: identificação da geração de uma
chave de criptografia, identificação de dados encriptados e desencriptados e uma tabela
com o diagnóstico da avaliação.
1º Etapa:
A primeira etapa identifica a referência aos pacotes “javax.cypto.Mac” e
“javax.crypto.spec.SecretyKeySpec” no arquivo “HmacSha1MessageSinger.java”.
Neste caso, o primeiro pacote identificado faz referência a classe de API pública para
algoritmos MAC, algoritmos autenticadores de mensagens e por último a classe
“javax.crypto.spec.SecretyKeySpec” que específica uma chave secreta dependente do
provedor e que pode ser identificada por bytes como mostrado na Figura 10.
(DEVELOPERS, 2013)
Figura 10. Imagem do arquivo “HmacSha1MessageSinger.java”.” do aplicativo
Foursquared pelo Notepad++ - Pacotes “javax.cypto.Mac” e
“javax.crypto.spec.SecretyKeySpec”
Ainda nesta etapa, identifica-se a criação da chave secreta gerada
“arrayOfByte1” e o algoritmo utilizado para a geração da mesma “HmacSHA1”,
utilizado para a autenticação de mensagem (HMAC – Hash-based Message
Authentication Code) através do cálculo de uma função de hash criptográfica
combinada então com a própria chave de segredo, como mostrado na Figura 11.
(MICROSOFT, 2013)
Figura 11. Imagem do arquivo “HmacSha1MessageSinger.java”.” do aplicativo
Foursquared pelo Notepad++ - Chave secreta
2º Etapa:
Nesta etapa de análise do aplicativo, dados encriptados e desencriptados não foram
identificados comandos para a realização desta prática.
3º Etapa:
A tabela 3 apresenta a identificação do uso de criptografia de dados no aplicativo
analisado.
Tabela 3. Uso de criptografia de dados no aplicativo
Nome do aplicativo Geração de chave Encriptação e desencriptação de dados
Foursquared Sim Não
6.4. Permissões de Aplicativos
A fim de analisar as permissões existentes em dois aplicativos, já mencionados o
Foursquared, que se trata de um projeto realizado pela Foursquare e o aplicativo Stand
Up timer. Assim, neste tópico divide-se análise de permissões em três etapas: a primeira
verifica as permissões listadas pelos aplicativos na loja da Google Play para a avaliação
do usuário no momento de instalar a entidade em seu dispositivo; a segunda analisa as
permissões existentes nos códigos fonte, ou seja, no arquivo
“android.Manifest.permission” desses aplicativos; e por último, a terceira ilustra uma
tabela que menciona os critérios de analise e o resultado macro obtido.
1º Etapa:
Primeiramente analisam-se quais as permissões o usuário encontrará no site da Google
Play no momento que solicitará a adesão do aplicativo. De acordo com as informações
disponibilizadas pela “Foursquare” empresa desenvolvedora do aplicativo que recebe o
mesmo nome, no site da Google Play (2013), são relacionadas as permissões existentes
para a versão “2013.06.10” e o código fonte utilizado para analise trata-se da versão
“2009.12.23”, fator que impede a real relação desses critérios (descrição Google Play e
permissões contidas no Android.Manifest.permission). O aplicativo Stand Up Timer não
foi localizado na loja da Google Play, portanto o usuário não possui acesso a uma lista
de permissões na loja oficial de aplicativos Android para conhecimento das permissões
envolvidas neste aplicativo.
2º Etapa:
Para identificar as permissões contidas nos aplicativos, os dois aplicativos são
visualizados através do editor de texto Notepad++. No primeiro aplicativo,
Foursquared, verifica-se as permissões listadas na imagem a seguir, sendo estas,
“android.permission.ACCESS_COARSE_LOCATION” (permissão para identificação
aproximada de localização), “android.permission.ACCESS_FINE_LOCATION”
(permissão para identificação precisa de localização),
“android.permission.CALL_PHONE” (permissão para iniciar uma chamada telefônica),
“android.permission.INTERNET” (permissão para uso de sockets de internet) e
“android.permission.WRITE_EXTERNAL_STORAGE” (permissão para escrita em uma
memória externa), como mostrado na figura 12.
Figura 12. Imagem do arquivo “Android.Manifest.permission” (convertido por
engenharia reversa) do aplicativo Foursquared pelo Notepad++
No código fonte do aplicativo Stand up Timer, encontra-se somente a permissão
“android.permission.WAKE_LOCK” (permissão para escurecimento de tela ou
“descanso” do processador), como mostrado na figura 13.
Figura 13. Imagem do arquivo “Android.Manifest.permission” do aplicativo
Stand up Timer, pelo Notepad++
3º Etapa:
A tabela 4 apresenta a identificação das permissões existentes nos aplicativos
analisados.
Tabela 4. Relacionamento de permissões nos aplicativos analisados
Nome do aplicativo Lista de permissões
na Google Play
Permissões de APIs Permissões especiais
Stand up timer Não Sim Não
Foursquared Não Sim Não
7. Resultados Encontrados
A análise realizada no capítulo anterior apresenta a identificação das técnicas de
segurança propostas nos patterns nos aplicativos analisados. A partir desta verificação
são gerados os resultados apresentados nos subcapítulos a seguir.
7.1. Transmissão segura de dados
No aplicativo Foursquared está identificado o uso de token para autenticação do
usuário com o servidor com o qual o serviço oferecido pelo aplicativo interage. O uso
de SSL/TLS não está identificado no código do aplicativo, uma vez que é necessário
declarar o HTTPS para a URL que se pretende realizar a comunicação. A verificação de
Servidor é realizada através da classe StrictHostnameVerifier, na qual o primeiro nome
da autoridade certificadora habilitada contida no certificado do servidor é identificada,
desta forma, se o hostname da URL não for compatível com o do certificado
apresentado pelo servidor, a conexão irá falhar. Através da análise do aplicativo não é
possível identificar o uso de classes para a realização de validação de entradas, que
impede entradas maliciosas que possam executar injeção de comandos e ataques de
scripts (SIX, 2012).
7.2. Ofuscação de código
Dois aplicativos são avaliados para identificação da técnica de ofuscação de código, o
que impede a leitura e distribuição indevida do código-fonte, além de dificultar a
realização de engenharia reversa. No aplicativo Stand up timer é identificado que a
técnica de ofuscação de código não foi realizada, diferente do aplicativo Foursquared,
que se apresenta codificado durante a tentativa de leitura na ferramenta Eclipse.
7.3. Criptografia de dados
O aplicativo Foursquared, apresenta a geração de uma chave secreta para a
autenticação do usuário toda vez que o mesmo desejar se credenciar ao mesmo.
Contudo não são identificadas práticas de encriptação e desencriptação de dados,
prática aconselhada quando há o armazenamento de informações, ainda mais se
tratando de dados sensíveis (como login ou integração de dados em redes sociais) (SIX,
2012).
7.4. Permissões de aplicativos
O resultado obtido sob a análise de permissões dos aplicativos escolhidos é que ambos
não possuem um relacionamento sobre as mesmas na loja oficial da Google Play, o que
deveria ocorrer para que o usuário soubesse quais consentimentos atribuirá ao baixar os
aplicativos Stand up Timer e Foursquared (SIX, 2012). Os códigos analisados foram
adquiridos no site de códigos da Google e na web. Também é constatado que nenhum
dos aplicativos relacionava em seu arquivo “Android.Manifest.permission” permissões
especiais, sendo que todas as permissões encontradas foram permissões de APIs.
(GOOGLE CODE, 2013; GITHUB, 2013)
8. Perspectivas futuras
De acordo com a hipótese apresentada neste trabalho conclui-se inicialmente que
utilizando práticas de segurança da informação evita-se que aplicativos estejam
vulneráveis a situações que envolvam seu uso inadequado. Desta forma, o aumento
crescente de aplicativos da plataforma Android, além de atrair grande quantidade de
usuários, o torna também alvo de ataques maliciosos e, neste contexto, procurou-se
mostrar que o papel do desenvolvedor, no que diz respeito ao mantimento da segurança
das informações dos usuários de seus aplicativos, é fundamental.
Assim, neste trabalho é apresentado, no decorrer de seus capítulos, alguns dos
problemas de segurança encontrados em aplicativos através do uso de patterns,
permitindo que cada problema fosse tratado em sete contextos (pseudônimo, motivação,
problemas, forças, soluções, consequências e utilizações conhecidas) a fim de facilitar o
entendimento da abordagem realizada e incentivar a inclusão de segurança como
método de desenvolvimento de aplicativos embasados nas principais propriedades de
segurança, usadas para contextualizar o trabalho.
Nos resultados encontrados, observa-se que os aplicativos não apresentam todas
as técnicas sugeridas nos patterns, o que sugere vulnerabilidade às informações. Além
disso, nota-se que a utilização dos patterns também contribuiu para a análise realizada
nos aplicativos apresentados, pois as técnicas de segurança propostas serviram de
parâmetros para a avaliação feita. Também é observado que, através da aplicação de
engenharia reversa, o código-fonte dos aplicativos se apresentou acessível para a
análise, inclusive o Foursquared, que apresenta código ofuscado. Porém a possível
ausência de personalização da técnica de ofuscação torna o método ineficaz.
É importante ressaltar que esta pesquisa não aborda todas as técnicas de
segurança que podem ser implementadas para garantir a programação segura de
aplicativos, pois tal tema é de muita abrangência e foge aos limites desta pesquisa, além
disso, segurança não é apenas um processo, ela é parte de todo o ciclo de vida de
desenvolvimento de um aplicativo, desta forma não se pode aprender como escrever
códigos melhores, aplicar e depois esquecer. A partir deste conceito, considera-se viável
o uso de patterns, pois eles têm a finalidade de apoiar desenvolvedores no registro de
experiências, de soluções e no compartilhamento destas, impedindo esforços adicionais
para resolução de problemas que muitas vezes se repetem. Logo se recomenda que, para
outros estudos sejam incluídas outras técnicas e que sejam aprofundados os métodos
citados para a possível criação de um framework aplicado à segurança no
desenvolvimento de aplicativos. Isso pelo fato de que levando em consideração que o
tema segurança em dispositivos móveis é um assunto relativamente novo, e materiais à
respeito ainda são escassos, pode-se concluir sendo esta uma das dificuldades
encontradas para a realização deste trabalho. Quanto aos objetivos deste trabalho,
conclui-se que foram todos atingidos, pois está esclarecida a importância do uso de
segurança da informação no desenvolvimento de aplicativos, pelo fato de o trabalho
relatar a abordagem de patterns como proposta de técnica para a análise dos aplicativos
em Android.
Sendo assim, almejam-se oportunidades para o desenvolvimento de novas
pesquisas sobre segurança em aplicativos móveis, sejam elas voltadas também para
outras plataformas, e não apenas o Android. Pesquisas essas que virão a contribuir com
a disseminação e incorporação das práticas de segurança da informação para
desenvolvimento de aplicativos em geral, como por exemplo, aplicativos do ramo
empresarial, open-source, entre outros.
Referências
TONIN, Graziela Simone. Tendências em computação móvel. 3 p. Universidade de São
Paulo – USP. São Paulo, 2012. Disponível em: <
grenoble.ime.usp.br/~gold/cursos/2012/movel/mono-1st/2305-1_Graziela.pdf>.
Acesso em: 20 mar. 2013.
SIX, Jeff. Segurança de aplicativos Android: Processos, permissões e outras
salvaguardas. Novatec Editora, São Paulo; Sebastopol, CA: O’Reilly, 2012.
FIGUEIREDO, Thiago Henrique de Paula. MultiMAD: Uma ferramenta multimodelo
de desenvolvimento de aplicações para dispositivos móveis. 2005. 120f. Dissertação
(Mestrado em Ciência da Computação) – Curso de Pós-graduação em Ciência da
Computação, Universidade Federal de Minas Gerais, Belo Horizonte.
BRAGA, A. et al. Introdução à Segurança de Dispositivos Móveis Modernos - Um
Estudo de Caso em Android. In: Simpósio em Segurança da Informação e de
Sistemas Computacionais. Sociedade Brasileira de Computação – SBC. 12., 2012.
Curitiba, 2012. Disponível em:
<http://dainf.ct.utfpr.edu.br/~maziero/lib/exe/fetch.php/ceseg:2012-sbseg-mc2.pdf>.
Acesso em: 12 fev. 2013.
GODOY, Arilda Schimidt. Introdução à pesquisa qualitativa e suas possibilidades. RAE
- Revista de Administração de Empresas, São Paulo. v. 35, n. 2, p. 57-63, 1995.
ANDROID. Welcome to Android and About. Disponível em:
<http://source.android.com>. Acesso em: 23 jan. 2013.
OLHAR DIGITAL. Retrospectiva Android: Relembre a história do sistema operacional
do Google. 2013. Disponível em: <
http://olhardigital.uol.com.br/produtos/central_de_videos/retrospectiva-android-
relembre-a-historia-do-sistema-operacional-do-google>. Acesso em: 22 jan. 2013.
RORH, Altieres. Google confirma verificação de aplicativos maliciosos no Android 4.2.
G1 - Tecnologia e Games. 6 nov. 2012. Disponível em:
<http://g1.globo.com/tecnologia/noticia/2012/11/google-confirma-verificacao-de-
apps-maliciosos-no-android-42.html>. Acesso em: 24 jan. 2013.
CALDAS, Reginaldo Araújo. Segurança da Informação. jun. 2009. Curso de
Engenharia de Telecomunicações. Faculdade do Noroeste de Minas – FINOM.
Minas Gerais.
JUNQUEIRA, A. R. B.; COSTA, A. F.; LIRA, E. C. Design Patterns: Conceitos e
Aplicações. Projeto de Sistemas de Informática do curso de Informática da
Universidade Federal do Rio de Janeiro - UFRJ. 1998. Disponível em:
<http://www.dcc.ufrj.br/~schneide/PSI_981/gp_6/design_patterns.html#O_que_eh>.
Acesso em: 05 abril 2012.
DEVELOPERS. javax.crypto. 2013. Disponível em:
<http://developer.android.com/reference/javax/crypto/package-summary.html>.
Acesso em: 18 jun.2013.
MARCIANO, João Luiz Pereira. Segurança da Informação: uma abordagem social.
Brasília, 2006. Universidade de Brasília –UNB. Disponível em:
<http://www.enancib.ppgci.ufba.br/premio/UnB_Marciano.pdf>. Acesso em: 01 set.
2013.
MARTINS, Rafael J. Werneck de A. Desenvolvimento de Aplicativo para Smartphone
com a Plataforma Android Projeto. Rio de Janeiro, dez. 2009. 43p. Pontifícia
Universidade Católica do Rio de Janeiro – PUC RJ. Disponível em:
<http://www.icad.puc-rio.br/~projetos/android/files/monografia.pdf>. Acesso em: 15
fev. 2013.
RIBEIRO, Daniel. Um em cada dez apps na Google Play Store é malware, alerta
pesquisa. 2013. Disponível em: <
http://www.techtudo.com.br/noticias/noticia/2013/03/um-em-cada-dez-apps-na-
google-play-store-e-malware-alerta-pesquisa.html>. Acesso em 04 abril de 2013.
LAFORTUNE, Eric. ProGuard Manual. (2012-2013). Disponível em:
<http://proguard.sourceforge.net/index.html#manual/introduction.html>. Acesso em:
19 mar. 2013.
SAMPAIO, Edson. Criptografia e Protocolo Diffie-Hellman. Disponível em:
<www.devmedia.com.br/criptografia-e-protocolo-diffie-hellman/10717> Acesso em:
01 jun.2013.
GOOGLE PROJECT HOSTING. Foursquared. Disponível em:
<http://code.google.com/p/foursquared/>. Acesso em: 01 jun. 2013.