análise da segurança de aplicativos na plataforma android através

23
Análise da Segurança de Aplicativos na Plataforma Android Através da Adoção de Patterns Adriana Lopes Pereira Batista 1 , 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], [email protected] Abstract. The continuous increase of variety of resources available on mobile applications and the increasing i ncorporation 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

Upload: dangtu

Post on 14-Feb-2017

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Análise da Segurança de Aplicativos na Plataforma Android Através

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],

[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

Page 2: Análise da Segurança de Aplicativos na Plataforma Android Através

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

Page 3: Análise da Segurança de Aplicativos na Plataforma Android Através

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.

Page 4: Análise da Segurança de Aplicativos na Plataforma Android Através

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

Page 5: Análise da Segurança de Aplicativos na Plataforma Android Através

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

Page 6: Análise da Segurança de Aplicativos na Plataforma Android Através

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,

Page 7: Análise da Segurança de Aplicativos na Plataforma Android Através

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

Page 8: Análise da Segurança de Aplicativos na Plataforma Android Através

é 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.

Page 9: Análise da Segurança de Aplicativos na Plataforma Android Através

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:

Page 10: Análise da Segurança de Aplicativos na Plataforma Android Através

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.

Page 11: Análise da Segurança de Aplicativos na Plataforma Android Através

Figura 5. Análise do pacote “oauth.signpost.signature” do aplicativo

Foursquared

Page 12: Análise da Segurança de Aplicativos na Plataforma Android Através

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.

Page 13: Análise da Segurança de Aplicativos na Plataforma Android Através

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:

Page 14: Análise da Segurança de Aplicativos na Plataforma Android Através

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.

Page 15: Análise da Segurança de Aplicativos na Plataforma Android Através

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

Page 16: Análise da Segurança de Aplicativos na Plataforma Android Através

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)

Page 17: Análise da Segurança de Aplicativos na Plataforma Android Através

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

Page 18: Análise da Segurança de Aplicativos na Plataforma Android Através

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++

Page 19: Análise da Segurança de Aplicativos na Plataforma Android Através

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

Page 20: Análise da Segurança de Aplicativos na Plataforma Android Através

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,

Page 21: Análise da Segurança de Aplicativos na Plataforma Android Através

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.

Page 22: Análise da Segurança de Aplicativos na Plataforma Android Através

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.

Page 23: Análise da Segurança de Aplicativos na Plataforma Android Através

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.