Escolar Documentos
Profissional Documentos
Cultura Documentos
com
Introdução dução
Como a maioria das disciplinas, a segurança da informação começou como uma indústria caseira. Ele
cresceu organicamente de passatempo de hobby para uma indústria robusta repleta de títulos
executivos, credibilidade de “pesquisa e desenvolvimento” e o ouvido da academia como uma
indústria onde campos de estudo aparentemente distantes, como teoria dos números, criptografia,
processamento de linguagem natural, gráficos teoria, algoritmos e ciência da computação de nicho
podem ser aplicados com grande impacto na indústria. A segurança da informação está evoluindo
para um campo de testes para alguns desses fascinantes campos de estudo. No entanto, a segurança
da informação (especificamente “pesquisa de vulnerabilidades”) está vinculada ao setor de tecnologia
da informação como um todo e, portanto, segue as mesmas tendências.
Como todos sabemos muito bem de nossas vidas pessoais, a computação móvel é obviamente
uma das áreas de maior crescimento recente na tecnologia da informação. Mais do que nunca, nossas
vidas são acompanhadas por nossos dispositivos móveis, muito mais do que os computadores que
deixamos em nossas mesas no fechamento do expediente ou deixamos fechados em nossas mesas de
café em casa quando entramos em nossos escritórios pela manhã. Ao contrário desses dispositivos,
nossos dispositivos móveis estão sempre ligados, entre esses dois mundos e, portanto, são alvos
muito mais valiosos para agentes mal-intencionados.
Infelizmente, a segurança da informação tem sido mais lenta para seguir o exemplo, com
apenas uma mudança recente em direção ao espaço móvel. Como uma indústria
predominantemente “reacionária”, a segurança da informação tem sido lenta (pelo menos
publicamente) para alcançar a pesquisa e o desenvolvimento de segurança móvel/embutida.
Até certo ponto, a segurança móvel ainda é considerada de ponta, porque os consumidores e
usuários de dispositivos móveis só recentemente começaram a ver e compreender as ameaças
associadas aos nossos dispositivos móveis. Essas ameaças, consequentemente, criaram um
mercado para pesquisa de segurança e produtos de segurança.
xxv
xxvi Introdução
Este livro destina-se a ser legível de capa a capa, mas também serve como referência indexada
para qualquer pessoa que invada o Android ou faça pesquisas de segurança da informação em
um dispositivo baseado no Android. Organizamos o livro em 13 capítulos para cobrir
Introdução xxvii
praticamente tudo o que se precisa saber para abordar o Android pela primeira vez para
pesquisa de segurança. Os capítulos incluem diagramas, fotografias, trechos de código e
desmontagem para explicar o ambiente de software e hardware Android e,
consequentemente, as nuances da exploração de software e engenharia reversa no
Android. O esboço geral deste livro começa com tópicos mais amplos e termina com
informações profundamente técnicas. Os capítulos são cada vez mais específicos e levam
a discussões de tópicos de pesquisa de segurança avançada, como descobrir, analisar e
atacar dispositivos Android. Quando aplicável, este livro se refere a fontes adicionais de
documentação detalhada. Isso permite que o livro se concentre em explicações técnicas e
detalhes relevantes para enraizamento de dispositivos, engenharia reversa, pesquisa de
vulnerabilidades e exploração de software.
- O Capítulo 1 apresenta o ecossistema que envolve os dispositivos móveis Android.
Depois de revisitar fatos históricos sobre o Android, o capítulo examina a
composição geral do software, os dispositivos em circulação pública e os principais
participantes da cadeia de suprimentos. Ele conclui com uma discussão sobre as
dificuldades de alto nível que desafiam o ecossistema e impedem a pesquisa de
segurança do Android.
- O Capítulo 2 examina os fundamentos do sistema operacional Android. Ele começa com
uma introdução aos principais conceitos usados para manter os dispositivos Android
seguros. O resto do capítulo mergulha nas partes internas dos componentes mais
críticos de segurança.
diferentes tipos de código encontrados no Android. Ele conclui com uma análise de um
problema de segurança não corrigido no navegador da Web baseado em WebKit.
Embora alguns dos capítulos sejam acessíveis a um público amplo, a maior parte
deste livro é melhor digerida por alguém com um conhecimento firme em
desenvolvimento e segurança de software de computador. É certo que alguns dos
capítulos mais técnicos são mais adequados para leitores com conhecimento em
tópicos como programação em linguagem assembly e engenharia reversa. No
entanto, leitores menos experientes que têm motivação suficiente podem aprender
muito ao encarar as partes mais desafiadoras do livro.
Este livro por si só será suficiente para você ter uma compreensão básica do
funcionamento interno do sistema operacional Android. No entanto, os leitores que
desejam seguir o código e os fluxos de trabalho apresentados devem se preparar
reunindo alguns itens. Em primeiro lugar, um dispositivo Android é recomendado. Embora
um dispositivo virtual seja suficiente para a maioria das tarefas, será melhor usar um
dispositivo físico da família Google Nexus. Muitos dos capítulos assumem que você usará
uma máquina de desenvolvimento com o Ubuntu 12.04. Por fim, o Android Software
Developers Kit (SDK), o Android Native Development Kit (NDK) e uma verificação completa
do Android Open Source Project (AOSP) são recomendados para acompanhar os capítulos
mais avançados.
O que há no site
Como afirmado anteriormente, este livro pretende ser um recurso único para a pesquisa e
o desenvolvimento atuais de segurança da informação do Android. Enquanto escrevíamos
este livro, desenvolvemos um código que complementa o material. Você pode baixar este
material suplementar do site do livro emwww.wiley.com/
go/androidhackershandbook/.
boa Viagem
Com este livro em mãos, você está pronto para embarcar em uma jornada pela segurança do
Android. Esperamos que a leitura deste livro proporcione um conhecimento mais profundo e
uma melhor compreensão das tecnologias, conceitos, ferramentas, técnicas e vulnerabilidades
dos dispositivos Android. Por meio de sua sabedoria recém-adquirida, você estará no caminho
para melhorar a postura geral de segurança do Android. Junte-se a nós para tornar o Android
mais seguro e não se esqueça de se divertir fazendo isso!
APÓS
CH 1
1
2 Capítulo 1-Olhando para o ecossistema
Histórico da empresa
O Android começou como Android, Inc., uma empresa fundada por Andy Rubin, Chris
White, Nick Sears e Rich Miner em outubro de 2003. Eles se concentraram na criação de
dispositivos móveis capazes de levar em conta informações de localização e preferências
do usuário. Depois de enfrentar com sucesso a demanda do mercado e as dificuldades
financeiras, o Google adquiriu a Android, Inc., em agosto de 2005. Durante o período
seguinte, o Google começou a construir parcerias com empresas de hardware, software e
telecomunicações com a intenção de entrar no mercado móvel.
Em novembro de 2007, foi anunciada a Open Handset Alliance (OHA). Este consórcio de
empresas, que incluiu 34 membros fundadores liderados pelo Google, compartilha um
compromisso com a abertura. Além disso, visa acelerar a inovação da plataforma móvel e
oferecer aos consumidores uma experiência móvel mais rica, mais barata e melhor. Desde
então, a OHA cresceu para 84 membros na época em que este livro foi publicado. Os
membros representam todas as partes do ecossistema móvel, incluindo operadoras
móveis, fabricantes de aparelhos, empresas de semicondutores, empresas de software e
muito mais. Você pode encontrar a lista completa de membros no site da OHA
nowww.openhandsetalliance.com/oha_members.html.
Com a OHA em vigor, o Google anunciou seu primeiro produto móvel, o Android. No
entanto, o Google ainda não trouxe para o mercado nenhum dispositivo rodando Android.
Finalmente, após um total de cinco anos, o Android foi disponibilizado ao público em geral
em outubro de 2008. O lançamento do primeiro telefone Android disponível
publicamente, o HTC G1, marcou o início de uma era.
Histórico de versões
Antes da primeira versão comercial do Android, o sistema operacional tinha versões Alpha
e Beta. Os lançamentos Alpha estavam disponíveis apenas para membros do Google e da
OHA e tinham o codinome de robôs popularesMenino Astro,Dobrador, e R2-D2. O Android
Beta foi lançado em 5 de novembro de 2007, que é a data popularmente considerada o
aniversário do Android.
A primeira versão comercial, a versão 1.0, foi lançada em 23 de setembro de 2008, e a
próxima versão, a versão 1.1, foi lançada em 9 de fevereiro de 2009. Esses foram os dois
únicos lançamentos que não tinham uma convenção de nomenclatura para seu codinome.
A partir do Android 1.5, lançado em 30 de abril de 2009, os codinomes das versões
principais foram ordenados alfabeticamente com os nomes das guloseimas saborosas. A
versão 1.5 foi codinomeBolinho. A Figura 1-1 mostra todas as versões comerciais do
Android, com suas respectivas datas de lançamento e codinomes.
Figura 1-1:versões do Android
4 Capítulo 1-Olhando para o ecossistema
Da mesma forma que as versões do Android são codinomes, as compilações individuais são
identificadas com um código de compilação curto, conforme explicado em Nomes de código, Tags e
Página de números de compilação emhttp://source.android.com/source/build-numbers
. html.Por exemplo, pegue o número de compilação JOP40D. A primeira letra representa o
codinome da versão Android (J é Jelly Bean). A segunda letra identifica a ramificação do
código a partir da qual a compilação foi feita, embora seu significado preciso varie de uma
compilação para outra. A terceira letra e os dois dígitos subsequentes compreendem um
código de data. A letra representa o trimestre, começando em A, que significa o primeiro
trimestre de 2009. No exemplo, P representa o quarto trimestre de 2012. Os dois dígitos
significam dias a partir do início do trimestre. No exemplo, P40 é 10 de novembro de 2012.
A letra final diferencia versões individuais para a mesma data, novamente começando
com A. As primeiras compilações para uma data específica, indicada com A, geralmente
não usam essa letra.
Google Nexus
Samsung, L -2
mostra alguns
Os dispositivos Nexus devem ser a plataforma de referência para novas versões do Android. Assim,
os dispositivos Nexus são atualizados diretamente pelo Google logo após o lançamento de uma nova
versão do Android. Esses dispositivos servem como uma plataforma aberta para desenvolvedores.
Eles têm carregadores de inicialização desbloqueáveis que permitem o flash de compilações
personalizadas do Android e são suportados peloProjeto de código aberto Android(AOSP). O Google
também forneceimagens de fábrica, que são imagens binárias de firmware que podem ser atualizadas
para retornar o dispositivo ao estado original não modificado.
Outro benefício dos dispositivos Nexus é que eles oferecem o que é comumente
chamado deexperiência pura do Google. Isso significa que a interface do usuário não foi
modificada. Em vez disso, esses dispositivos oferecem a interface padrão encontrada no
Android vanilla, compilado do AOSP. Isso também inclui aplicativos proprietários do
Google, como Google Now, Gmail, Google Play, Google Drive, Hangouts e muito mais.
Quota de mercado
de novembro de 2013. Apesar dessas pequenas variações, todas as fontes parecem concordar
que o Android é o sistema operacional móvel dominante.
Liberar Adoção
Nem todos os dispositivos Android executam a mesma versão do Android. O Google publica
regularmente um painel mostrando a porcentagem relativa de dispositivos que executam uma
determinada versão do Android. Essas informações são baseadas em estatísticas coletadas de
visitas ao Google Play, presentes em todos os dispositivos aprovados. A versão mais atualizada
deste painel está disponível emhttp://developer.android.com/about/
painéis
agregação de dados
inclui dados
Como mostrado, as novas versões do Android têm uma taxa de adoção relativamente lenta. Leva
mais de um ano para que uma nova versão seja executada em 90% dos dispositivos. Você pode ler
mais sobre esse problema e outros desafios enfrentados pelo Android na seção “Compreendendo as
complexidades do ecossistema” mais adiante neste capítulo.
Capítulo 1-Olhando para o ecossistema 7
Esta seção explora o propósito e as motivações de cada parte interessada e examina como
as partes interessadas se relacionam entre si.
Cada grupo é de um campo diferente da indústria e serve a um propósito específico no
ecossistema. O Google, tendo dado origem ao Android, desenvolve o sistema operacional
central e gerencia a marca Android. Os fabricantes de hardware fazem os componentes de
hardware e periféricos subjacentes. Os OEMs fazem os dispositivos do usuário final e gerenciam
a integração dos vários componentes que fazem um dispositivo funcionar. As operadoras
fornecem acesso de voz e dados para dispositivos móveis. Um vasto conjunto de
desenvolvedores, incluindo aqueles que são empregados por membros de outros grupos,
trabalham em uma infinidade de projetos que se juntam para formar o Android.
A Figura 1-4 mostra as relações entre os principais grupos de atores do
ecossistema.
Sistema - on-Chip
Kernel, Rádio
Manuf acturers
Sra.
E Todos os níveis
Cariers
Aplicativos, carregador de inicialização
e requisições de rádio
Consumidores
Essas relações indicam quem fala com quem ao criar ou atualizar um dispositivo
Android. Como a figura mostra claramente, o ecossistema Android é muito complexo.
Esses relacionamentos comerciais são difíceis de gerenciar e levam a uma variedade de
complexidades que serão abordadas posteriormente neste capítulo. Antes de entrar
nessas questões, é hora de discutir cada grupo com mais detalhes.
Google
Como a empresa que trouxe o Android ao mercado, o Google tem vários papéis
importantes no ecossistema. Suas responsabilidades incluem administração legal,
Capítulo 1-Olhando para o ecossistema 9
Fornecedores de hardware
Fabricantes de CPU
A MIPS Technologies oferece licenças para sua arquitetura MIPS e projetos de núcleo de
microprocessador. Em 2009, a MIPS Technologies portou o sistema operacional Android do
Google para a arquitetura do processador MIPS. Desde então, vários fabricantes de dispositivos
lançaram dispositivos Android rodando em processadores MIPS. Isso é especialmente
verdadeiro para decodificadores, players de mídia e tablets. A MIPS Technologies oferece
código-fonte para sua porta Android, além de outros recursos de desenvolvimento,
nohttp://www.imgtec.com/mips/developers/mips-android.asp.
Fabricantes de System-on-Chip
Sistema no chip(SoC) é o nome dado a uma única peça de silício que inclui o núcleo da
CPU, juntamente com uma unidade de processamento gráfico (GPU), memória de acesso
aleatório (RAM), lógica de entrada/saída (E/S) e, às vezes, mais. Por exemplo, muitos SoCs
usados em smartphones incluem um processador de banda base. Atualmente, a maioria
dos SoCs usados na indústria móvel inclui mais de um núcleo de CPU. Combinar os
componentes em um único chip reduz os custos de fabricação e diminui o consumo de
energia, resultando em dispositivos menores e mais eficientes.
Conforme mencionado anteriormente, os dispositivos baseados em ARM dominam o pool de
dispositivos Android. Nos dispositivos ARM, existem quatro famílias principais de SoC em uso:
OMAP da Texas Instruments, Tegra da nVidia, Exynos da Samsung e Snapdragon da Qualcomm.
Esses fabricantes de SoC licenciam o design do núcleo da CPU da ARM Holdings. Você pode
encontrar uma lista completa de licenciados no site da ARM emwww.arm.
com/products/processors/licensees.php.Com exceção da Qualcomm,
Os fabricantes de SoC usam os designs da ARM sem modificação. A Qualcomm investe
esforços adicionais para otimizar o menor consumo de energia, maior desempenho e
melhor dissipação de calor.
Cada SoC possui diferentes componentes integrados a ele e, portanto, requer suporte
diferente no kernel do Linux. Como resultado, o desenvolvimento de cada SoC é rastreado
separadamente em um repositório Git específico para esse SoC. Cada árvore inclui código
específico do SoC, incluindo drivers e configurações. Em várias ocasiões, essa separação
levou à introdução de vulnerabilidades em apenas um subconjunto dos repositórios de
origem do kernel específicos do SoC. Essa situação contribui para uma das principais
complexidades do ecossistema Android, que é discutida mais adiante na seção “Agarrando
as complexidades do ecossistema”, mais adiante neste capítulo.
Fabricantes de dispositivos
parceria com um fabricante de SoC para toda uma linha de produtos. A maioria das escolhas
feitas ao criar um novo dispositivo está diretamente relacionada à diferenciação de mercado,
visando um segmento de cliente específico ou à construção de fidelidade à marca.
Ao desenvolver novos produtos, os fabricantes de dispositivos precisam adaptar a
plataforma Android para funcionar bem em seu novo hardware. Essa tarefa inclui adicionar
novos drivers de dispositivo do kernel, bits proprietários e bibliotecas de espaço do usuário.
Além disso, os OEMs geralmente fazem modificações personalizadas no Android, especialmente
no Android Framework. Para cumprir a licença GPLv2 do kernel do Android, os OEMs são
forçados a liberar as fontes do kernel. No entanto, o Android Framework é licenciado sob a
Licença Apache 2.0, que permite que as modificações sejam redistribuídas em formato binário
sem a necessidade de liberar o código-fonte. É aqui que a maioria dos fornecedores tenta
colocar suas inovações para diferenciar seus dispositivos dos demais. Por exemplo, oSensoe
Touchwizas modificações da interface do usuário feitas pela HTC e pela Samsung são
implementadas principalmente no Android Framework. Essas modificações são um ponto de
discórdia porque contribuem para vários problemas complexos relacionados à segurança no
ecossistema. Por exemplo, as personalizações podem apresentar novos problemas de
segurança. Você pode ler mais sobre essas complexidades na seção “Agarrando as
Complexidades do Ecossistema”, mais adiante neste capítulo.
Operadoras
Além de fornecer serviços móveis de voz e dados, as operadoras fecham acordos com fabricantes de
dispositivos para subsidiar telefones a seus clientes. Os telefones obtidos por meio de uma operadora
geralmente têm um software personalizado para a operadora. Essas compilações tendem a ter o
logotipo da operadora na tela de inicialização, configurações de rede pré-configuradas do nome do
ponto de acesso (APN), alterações na página inicial do navegador padrão e nos marcadores do
navegador e muitos aplicativos pré-carregados. Na maioria das vezes, essas alterações são
incorporadas à partição do sistema para que não possam ser removidas facilmente.
Além de adicionar personalização ao firmware do dispositivo, as operadoras também têm
seus próprios procedimentos de teste de garantia de qualidade (QA) implementados. Esses
processos de controle de qualidade são demorados e contribuem para a lenta aceitação das
atualizações de software. É muito comum ver um OEM corrigir uma falha de segurança no
sistema operacional para seu dispositivo sem marca, enquanto o dispositivo com a marca da
operadora permanece vulnerável por muito mais tempo. Não é até que a atualização esteja
pronta para ser distribuída aos dispositivos da operadora que os usuários subsidiados são
atualizados. Depois de estarem disponíveis por algum tempo, geralmente em torno de 12 a 18
meses, os dispositivos são descontinuados. Alguns dispositivos são descontinuados muito mais
rapidamente – em alguns casos, mesmo imediatamente após o lançamento. Após esse ponto,
os usuários que ainda estiverem usando esse dispositivo não receberão mais atualizações,
Capítulo 1-Olhando para o ecossistema 13
Desenvolvedores
Como um sistema operacional de código aberto, o Android é uma plataforma ideal para
os desenvolvedores brincarem. Os engenheiros do Google não são as únicas pessoas que
contribuem com código para a plataforma Android. Existem muitos desenvolvedores e
entidades individuais que contribuem para o AOSP em seu próprio nome. Cada
contribuição para o AOSP (vindo do Google ou de terceiros) deve usar o mesmo estilo de
código e ser processada por meio do sistema de revisão de código-fonte do Google,Gerrit.
Durante o processo de revisão de código, alguém do Google decide se inclui ou exclui as
alterações.
Nem todos os desenvolvedores do ecossistema Android criam componentes para o próprio
sistema operacional. Uma grande parte dos desenvolvedores no ecossistema são desenvolvedores de
aplicativos. Eles usam os kits de desenvolvimento de software (SDKs), estruturas e APIs fornecidos
para criar aplicativos que permitem que os usuários finais atinjam seus objetivos. Sejam esses
objetivos produtividade, entretenimento ou outros, os desenvolvedores de aplicativos visam atender
às necessidades de sua base de usuários.
No final, os desenvolvedores são movidos pela popularidade, reputação e rendimentos.
Mercados de aplicativosno ecossistema Android oferecem incentivos aos desenvolvedores na
forma de compartilhamento de receita. Por exemplo, as redes de publicidade pagam aos
desenvolvedores para colocar anúncios em seus aplicativos. A fim de maximizar seus lucros, os
desenvolvedores de aplicativos tentam se tornar extremamente populares, mantendo uma
excelente reputação. Ter uma boa reputação, por sua vez, aumenta a popularidade.
ROMs personalizadas
Usuários
O Android não seria a comunidade próspera que é hoje sem sua enorme base de
usuários. Embora cada usuário individual tenha necessidades e desejos únicos, eles
podem ser classificados em uma das três categorias. Os três tipos de usuários finais
incluem consumidores em geral, usuários avançados e pesquisadores de segurança.
Consumidores
Usuários avançados
Pesquisadores de segurança
Fragmentação
O ecossistema Android é galopante comfragmentação, devido às diferenças entre as
multidões de vários dispositivos Android. A natureza aberta do Android o torna ideal para
fabricantes de dispositivos móveis criarem seus próprios dispositivos baseados na
plataforma. Como resultado, o pool de dispositivos é composto por vários dispositivos
diferentes de vários fabricantes. Cada dispositivo é composto por uma variedade de
software e hardware, incluindo modificações OEM ou específicas da operadora. Mesmo no
mesmo dispositivo, a versão do próprio Android pode variar de uma operadora ou usuário
para outra. Por causa de todas essas diferenças, consumidores, desenvolvedores e
pesquisadores de segurança lutam com a fragmentação regularmente.
Embora a fragmentação tenha relativamente pouco efeito sobre os consumidores, é um
pouco prejudicial para a marca Android. Os consumidores acostumados a usar dispositivos
Samsung que mudam para um dispositivo da HTC geralmente têm uma experiência chocante.
Como a Samsung e a HTC personalizam altamente a experiência do usuário de seus
dispositivos, os usuários precisam passar algum tempo se familiarizando com o uso de seus
novos dispositivos. O mesmo também vale para usuários de dispositivos Nexus de longa data
que mudam para dispositivos da marca OEM. Com o tempo, os consumidores podem se cansar
desse problema e decidir mudar para uma plataforma mais homogênea. Ainda assim, essa
faceta da fragmentação é relativamente pequena.
Os desenvolvedores de aplicativos são significativamente mais afetados pela
fragmentação do que os consumidores. Os problemas surgem principalmente
quando os desenvolvedores tentam oferecer suporte à variedade de dispositivos no
pool de dispositivos (incluindo o software executado neles). Testar em todos os
dispositivos é muito caro e demorado. Embora o uso do emulador possa ajudar, não
é uma representação verdadeira do que os usuários em dispositivos reais
encontrarão. Os problemas com os quais os desenvolvedores devem lidar incluem
diferentes configurações de hardware, níveis de API, tamanhos de tela e
disponibilidade de periféricos. A Samsung tem mais de 15 tamanhos de tela
diferentes para seus dispositivos Android, variando de 2,6 polegadas a 10,1
polegadas. Além disso, dongles de interface multimídia de alta definição (HDMI) e
dispositivos Google TV que não possuem tela sensível ao toque exigem manipulação
de entrada especializada e design de interface do usuário (IU).
Capítulo 1-Olhando para o ecossistema 17
Compatibilidade