segurança no android (2016)

45
Segurança no Android Euler Neto

Upload: euler-neto

Post on 16-Apr-2017

296 views

Category:

Mobile


0 download

TRANSCRIPT

Page 1: Segurança no Android (2016)

Segurança no AndroidEuler Neto

Page 2: Segurança no Android (2016)

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

Page 3: Segurança no Android (2016)

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

Page 4: Segurança no Android (2016)

Arquitetura do Linux

● Modelo de segurança do Linux

Fonte: http://linuxcommand.org/lts0070.php

Page 5: Segurança no Android (2016)

Arquitetura do Android

Tradicional Android

#USER_ID

#USER_ID_1 #USER_ID_2 #USER_ID_3

Page 6: Segurança no Android (2016)

Fundamentos da segurança● Isolamento ● Controles de permissão e acesso● Integridade● Criptografia

Page 7: Segurança no Android (2016)

Isolamento● Sandbox: mecanismo de segurança para separar programas em execução,

normalmente usado para executar códigos não testados ou programas suspeitos.

Page 8: Segurança no Android (2016)

Isolamento

Page 9: Segurança no Android (2016)

Isolamento

Page 10: Segurança no Android (2016)

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

Page 11: Segurança no Android (2016)

Controle de permissão e acesso● Grupos de permissão:

○ Calendário○ Câmera○ Contatos○ Localização○ Microfone○ Telefone○ Sensores○ SMS○ Armazenamento

Page 12: Segurança no Android (2016)

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>

Page 13: Segurança no Android (2016)

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

Page 14: Segurança no Android (2016)

Controle de permissão e acesso● Permissões personalizadas

○ Exemplo:

Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)

Page 15: Segurança no Android (2016)

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)

Page 16: Segurança no Android (2016)

Controle de permissão e acesso● Permissões personalizadas

○ Exemplo:

Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)

Page 17: Segurança no Android (2016)

Controle de permissão e acesso● Permissões personalizadas

○ Exemplo:

Adicionando no AndroidManifest.xml:

Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)

Page 18: Segurança no Android (2016)

Controle de permissão e acesso● Permissões personalizadas

○ Exemplo:

Vamos tentar de novo?

Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)

Page 19: Segurança no Android (2016)

Controle de permissão e acesso● Permissões personalizadas

○ Exemplo:

Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)

Page 20: Segurança no Android (2016)

Controle de permissão e acesso● Permissões são garantidas ao aplicativo:

○ No momento em que é instalado○ Quando for atualizado

● É tudo ou nada!

Page 21: Segurança no Android (2016)

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/

Page 22: Segurança no Android (2016)

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/

Page 23: Segurança no Android (2016)

Integridade● Função unidirecional (hash):

f(x) y

y f(x)

Page 24: Segurança no Android (2016)

Integridade● Função unidirecional (hash):

Page 25: Segurança no Android (2016)

Integridade● Caso recente:

Page 26: Segurança no Android (2016)

Integridade● Caso recente:

Fonte: http://blog.linuxmint.com/?p=2994

Page 27: Segurança no Android (2016)

Integridade● Caso recente:

Fonte: http://fossforce.com/2016/02/linux-mint-anatomy-of-a-hack/

Page 28: Segurança no Android (2016)

Integridade● Caso recente:

Page 29: Segurança no Android (2016)

Criptografia● Chave simétrica

○ A chave usada para criptografar é a mesma que descriptografa

● Chave assimétrica○ Chave pública e chave privada

Page 30: Segurança no Android (2016)

Criptografia● Chave simétrica

○ A chave usada para criptografar é a mesma que descriptografa

Ek(m) = c

m

Canal inseguro Dk(c) = m

m

c

Page 31: Segurança no Android (2016)

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 ←

Page 32: Segurança no Android (2016)

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

Page 33: Segurança no Android (2016)

Assinatura de aplicativos● Conceito da central de pacotes do Linux

APT-GET YUM

Page 34: Segurança no Android (2016)

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

Page 35: Segurança no Android (2016)

Assinatura de aplicativos no Android● Passo 1

Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk

Page 36: Segurança no Android (2016)

Assinatura de aplicativos no Android● Passo 2

Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk

Page 37: Segurança no Android (2016)

Assinatura de aplicativos no Android● Passo 3

Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk

Page 38: Segurança no Android (2016)

Assinatura de aplicativos no Android● Passo 4

Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk

Page 39: Segurança no Android (2016)

Assinatura de aplicativos no Android● Então...

Page 40: Segurança no Android (2016)

Comunicação segura● HTTP

○ Comunicação em texto puro○ Sem criptografia

● HTTPS○ Comunicação encriptada○ Protocolo SSL/TLS

Page 41: Segurança no Android (2016)

Comunicação segura

HTTP

Fonte: https://www.google.com/transparencyreport/saferemail/tls/?hl=pt-BR

Page 42: Segurança no Android (2016)

Comunicação segura

Fonte: https://www.google.com/transparencyreport/saferemail/tls/?hl=pt-BR

HTTPS

Page 43: Segurança no Android (2016)

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):

Page 44: Segurança no Android (2016)

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

Page 45: Segurança no Android (2016)

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