2. Agenda
● Arquitetura do Linux
● Arquitetura do Android
● Fundamentos da segurança da informação
● Assinatura de aplicativos
● Assinatura de aplicativos no Android
● Comunicação segura
3. Arquitetura do Linux
● Modelo de segurança do Linux
○ Cada usuário possui um User ID (UID)
○ Cada grupo possui um Group ID (GID)
○ Três grupos de permissão: owner, group e world
○ As permissões podem ser Read, Write ou eXecutable
4. Arquitetura do Linux
● Modelo de segurança do Linux
Fonte: http://linuxcommand.org/lts0070.php
7. Isolamento
● Sandbox: mecanismo de segurança para separar programas em execução,
normalmente usado para executar códigos não testados ou programas
suspeitos.
10. Isolamento
● Apps podem se comunicar com outros por meio de:
○ Intents
○ Binding Services
○ Content Provider
● Para “escapar” da Sandbox são necessárias permissões
11. Controle de permissão e acesso
● Grupos de permissão:
○ Calendário
○ Câmera
○ Contatos
○ Localização
○ Microfone
○ Telefone
○ Sensores
○ SMS
○ Armazenamento
12. Controle de permissão e acesso
● Adicionar permissão no AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.app.myapp" >
<uses-permission android:name="android.permission.(nome da permissão)" />
...
</manifest>
13. Controle de permissão e acesso
● Permissões personalizadas
○ Criar sua própria permissão para acessar outros apps de modo restrito
○ Alternativa pra “escapar” da Sandbox
○ Exemplo: PermissionExampleBoom e PermissionExampleBoomUser
14. Controle de permissão e acesso
● Permissões personalizadas
○ Exemplo:
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
15. Controle de permissão e acesso
● Permissões personalizadas
○ Exemplo:
Vamos tentar acessar o outro aplicativo?
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
16. Controle de permissão e acesso
● Permissões personalizadas
○ Exemplo:
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
17. Controle de permissão e acesso
● Permissões personalizadas
○ Exemplo:
Adicionando no AndroidManifest.xml:
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
18. Controle de permissão e acesso
● Permissões personalizadas
○ Exemplo:
Vamos tentar de novo?
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
19. Controle de permissão e acesso
● Permissões personalizadas
○ Exemplo:
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
20. Controle de permissão e acesso
● Permissões são garantidas ao aplicativo:
○ No momento em que é instalado
○ Quando for atualizado
● É tudo ou nada!
21. Controle de permissão e acesso
Fonte: http://www.zdnet.com/article/android-users-give-malware-apps-permission-to-rob-them-express-shock-at-the-results/
22. Controle de permissão e acesso
● Novo sistema de permissão (Android 6):
○ Cada permissão pode ser dada a qualquer momento
○ Não é mais tudo ou nada!
Fonte: Adaptado de http://www.howtogeek.
com/230683/how-to-manage-app-permissions-on-android-
6.0/
29. Criptografia
● Chave simétrica
○ A chave usada para criptografar é a mesma que descriptografa
● Chave assimétrica
○ Chave pública e chave privada
30. Criptografia
● Chave simétrica
○ A chave usada para criptografar é a mesma que descriptografa
Ek(m) = c
m
Canal inseguro Dk(c) = m
m
c
31. Criptografia
● Chave assimétrica
○ Chave pública para encriptar e chave privada para desencriptar
EB(m1) = c1
Da(c2) = m2
Canal inseguro EA(m2) = c2
Db(c1) = m1
A →
B ←
32. Criptografia
● Chave PGP
○ Pretty Good Privacy
○ Criada com o software GPG (GnuPG), nativo do Linux
○ Usado para garantir confiabilidade de aplicativos
○ Também usado para criptografar mensagens de e-mail
○ Assinatura digital
○ Garante tanto autenticação quanto integridade
34. Assinatura de aplicativos
● Assinando pacotes no Debian
1. Cria chave PGP
2. Assina o pacote DEB com a chave privada
3. Exporta a chave pública com o GPG
4. Adiciona à lista de pacotes
35. Assinatura de aplicativos no Android
● Passo 1
Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk
36. Assinatura de aplicativos no Android
● Passo 2
Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk
37. Assinatura de aplicativos no Android
● Passo 3
Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk
38. Assinatura de aplicativos no Android
● Passo 4
Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk
43. Comunicação segura
● Esse túnel é o TLS
● Adquirido através de um CA (Certificate Authority)
● Cria uma comunicação criptografa entre o usuário e o servidor
● Sem criptografia a conexão fica vulnerável a ataques Man-In-The-Middle
MITM Passivo (HTTP): MITM Ativo (HTTPS):
44. Comunicação segura
● Certifique-se que todo o conteúdo está sendo transmitido via HTTPS
● Caso real:
Fonte: http://thehackernews.com/2014/04/whatsapp-flaw-leaves-user-location.html
45. Referências
[1] Jeff Six; Application Security for the Android Platform, Processes, Permissions, and Other Safeguards;
O’Reilly Media, 2011, 114 páginas
[2] Marakana, Inc. ; Deep Dive Into Android Security: http://pt.slideshare.net/marakana/deep-dive-into-
android-security-10123665?related=1
[3] https://developer.android.com/guide/topics/security/permissions.html
[4] http://www.pgpi.org/doc/pgpintro