Upload
euler-neto
View
296
Download
0
Embed Size (px)
Citation preview
Segurança no AndroidEuler Neto
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
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
Arquitetura do Linux
● Modelo de segurança do Linux
Fonte: http://linuxcommand.org/lts0070.php
Arquitetura do Android
Tradicional Android
#USER_ID
#USER_ID_1 #USER_ID_2 #USER_ID_3
Fundamentos da segurança● Isolamento ● Controles de permissão e acesso● Integridade● Criptografia
Isolamento● Sandbox: mecanismo de segurança para separar programas em execução,
normalmente usado para executar códigos não testados ou programas suspeitos.
Isolamento
Isolamento
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
Controle de permissão e acesso● Grupos de permissão:
○ Calendário○ Câmera○ Contatos○ Localização○ Microfone○ Telefone○ Sensores○ SMS○ Armazenamento
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>
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
Controle de permissão e acesso● Permissões personalizadas
○ Exemplo:
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
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)
Controle de permissão e acesso● Permissões personalizadas
○ Exemplo:
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
Controle de permissão e acesso● Permissões personalizadas
○ Exemplo:
Adicionando no AndroidManifest.xml:
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
Controle de permissão e acesso● Permissões personalizadas
○ Exemplo:
Vamos tentar de novo?
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
Controle de permissão e acesso● Permissões personalizadas
○ Exemplo:
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
Controle de permissão e acesso● Permissões são garantidas ao aplicativo:
○ No momento em que é instalado○ Quando for atualizado
● É tudo ou nada!
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/
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/
Integridade● Função unidirecional (hash):
f(x) y
y f(x)
Integridade● Função unidirecional (hash):
Integridade● Caso recente:
Integridade● Caso recente:
Fonte: http://blog.linuxmint.com/?p=2994
Integridade● Caso recente:
Fonte: http://fossforce.com/2016/02/linux-mint-anatomy-of-a-hack/
Integridade● Caso recente:
Criptografia● Chave simétrica
○ A chave usada para criptografar é a mesma que descriptografa
● Chave assimétrica○ Chave pública e chave privada
Criptografia● Chave simétrica
○ A chave usada para criptografar é a mesma que descriptografa
Ek(m) = c
m
Canal inseguro Dk(c) = m
m
c
Criptografia● Chave assimétrica
○ Chave pública para encriptar e chave privada para desencriptar
EB(m1) = c1Da(c2) = m2
Canal inseguro EA(m2) = c2Db(c1) = m1
A → B ←
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
Assinatura de aplicativos● Conceito da central de pacotes do Linux
APT-GET YUM
Assinatura de aplicativos● Assinando pacotes no Debian
1. Cria chave PGP2. Assina o pacote DEB com a chave privada3. Exporta a chave pública com o GPG4. Adiciona à lista de pacotes
Assinatura de aplicativos no Android● Passo 1
Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk
Assinatura de aplicativos no Android● Passo 2
Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk
Assinatura de aplicativos no Android● Passo 3
Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk
Assinatura de aplicativos no Android● Passo 4
Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk
Assinatura de aplicativos no Android● Então...
Comunicação segura● HTTP
○ Comunicação em texto puro○ Sem criptografia
● HTTPS○ Comunicação encriptada○ Protocolo SSL/TLS
Comunicação segura
HTTP
Fonte: https://www.google.com/transparencyreport/saferemail/tls/?hl=pt-BR
Comunicação segura
Fonte: https://www.google.com/transparencyreport/saferemail/tls/?hl=pt-BR
HTTPS
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):
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
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