Post on 20-Jul-2015
Segurança no Android
Whoami
Euler Neto@netonightmare
Entusiasta NTI GDG AracajuSegurança (UFS São Cristóvão)
Smartphone
= +
Ataque a smartphones
● Quem?● Como?● Por que?
Ataque a smartphones
● Por que?○ Roubar dinheiro e informações pessoais○ Fama○ Fazer sniff nas conexões○ Usar seu dispostivo (botnet, spamming)○ Para o lulz
Ataque a smartphones
● Como?○ Via sistema
■ Malware■ Vulnerabilidade
○ Via redes■ Wi-fi■ Man in the Middle
Ataque a smartphones
● Quem?○ Veremos a seguir...
Ataque a smartphones
Fonte: http://pplware.sapo.pt/smartphones-tablets/android/99-dos-ataques-sao-direccionados-para-android/
Ataque a smartphones
Ataque a smartphones
Fonte: http://www.hardware.com.br/noticias/2015-01/google-nao-ira-mais-lancar-atualizacoes-de-seguranca-para-as-versoes-anteriores-ao-android-kit-kat.html
Ataque a smartphones
Fonte: https://tecnoblog.net/12108/chefe-de-seguranca-do-android-diz-que-ataques-a-dispositivos-moveis-vao-aumentar/
Arquitetura do Android
Tradicional Android
#USER_ID
#USER_ID_1 #USER_ID_2 #USER_ID_3
Arquitetura do Android
● Modelo de segurança do Linux○ O coração do Android é o Linux (KERNEL!)○ 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 Android
● Modelo de segurança do Linux
Fonte: http://linuxcommand.org/lts0070.php
Arquitetura do Android
● Modelo de segurança do Android○ Cada APK tem seu próprio UID○ Assinatura digital: parte criptografada do software
que prova a identidade do desenvolvedor■ Certificado digital■ Chave privada
○ Certificate Authority (CA)
Arquitetura do Android
● Tipos de assinatura digital○ Debug Mode: gerado automaticamente no momento
da compilaçao○ Release Mode: assinar com seu próprio certificado
Arquitetura do Android
● Processo de assinatura
Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk
Arquitetura do Android
● Processo de assinatura
Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk
Arquitetura do Android
● Processo de assinatura
Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk
Arquitetura do Android
● Processo de assinatura
Fonte: https://www.udacity.com/wiki/ud853/course_resources/creating-a-signed-apk
Arquitetura do Android
● Processo de assinatura
Arquitetura do Android
● Isolamento
Fonte: [2]
Arquitetura do Android
● Isolamento
Fonte: [2]
Arquitetura do Android
● Isolamento○ Activities
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.testapps.test1">...<activity android:name=".Activity1"android:permission="com.example.testapps.test1.permission.START_ACTIVITY1"><intent-filter>...</intent-filter></activity>...</manifest>
Arquitetura do Android
● Isolamento○ Services
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.testapps.test1">...<service android:name=".MailListenerService"android:permission="com.example.testapps.test1.permission.BIND_TO_MAIL_LISTENER"android:enabled="true"android:exported="true"><intent-filter></intent-filter></service>...</manifest>
Arquitetura do Android
● Isolamento○ Content Providers
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.testapps.test1">...<provider android.name="com.example.testapps.test1.MailProvider"android.authorities="com.example.testapps.test1.mailprovider"android.readPermission="com.example.testapps.test1.permission.DB_READ"android.writePermission="com.example.testapps.test1.permission.DB_WRITE"></provider>...</manifest>
Arquitetura do Android
● Isolamento○ Apps podem se comunicar com outros via:
■ Intents■ Services■ Content Providers
○ Mas também podemos usar permissões
Arquitetura do Android
● Permissões
<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>
Arquitetura do Android
● Permissões○ Mais usadas:
Normal Valor padrão. Permissões de baixo risco que não requer aprovação do usuário
Dangerous Permissões de alto risco que autorizam o aplicativo a acessar dados privados do aplicativo, podendo causar impacto no sistema. Requer aprovação do usuário
Arquitetura do Android
● Custom Permissions○ Criar sua própria permissão para acessar outros
apps de modo restrito
Arquitetura do Android
● Custom Permissions○ Exemplo:
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
Arquitetura do Android
● Custom Permissions○ Exemplo:
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
Arquitetura do Android
● Custom Permissions○ Exemplo:
No AndroidManifest.xml:
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
Arquitetura do Android
● Custom Permissions○ Exemplo:
Vamos tentar de novo?
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
Arquitetura do Android
● Custom Permissions○ Exemplo:
Fonte: Programming Mobile Applications for Android Handheld Systems (Coursera)
Arquitetura do Android
● Ataques através de permissões
Fonte: http://www.zdnet.com/article/android-users-give-malware-apps-permission-to-rob-them-express-shock-at-the-results/
Arquitetura do Android
● Armazenamento de dados○ Por padrão, arquivos só podem ser acessados pelo
app que os gerou○ Caminho padrão: /data/data/app_package_name○ Cartões SD não possuem sistema de permissão
Linux (qualquer app pode acessar)
Arquitetura do Android
● Armazenamento de dados
Fonte: https://www.hackread.com/whatsapp-security-flaw-app-read-chats/
Arquitetura do Android
● Resumo dos fundamentos de segurança○ Credibilidade
■ Podemos confiar no autor do app?○ Isolamento e permissões
■ Podemos controlar os limites do app?○ Criptografia
■ Os arquivos de seu app estão seguros?
Comunicação segura
● SSL/TLS
Fonte: https://ssl.trustwave.com/support/support-how-ssl-works.php
Comunicação segura
● Man in the middle○ Se colocar entre o cliente e o servidor○ Interceptar tráfego○ Dois tipos: passivo e ativo
Comunicação segura
● MITM Passivo○ HTTP○ Não há alteração dos dados
Comunicação segura
● MITM Ativo○ HTTPS○ Alteração dos dados
Comunicação segura
● MITM Ativo○ Cuidado com redes Wi-fi desconhecidas!○ Cuidado com mensagens de certificados
desconhecidos!○ Verifique se a conexão é HTTPS!
Comunicação segura
● Ou pior: SSL vulnerável
Fonte: https://www.fireeye.com/blog/threat-research/2014/08/ssl-vulnerabilities-who-listens-when-android-applications-talk.html
Comunicação segura
● Ou pior ainda: ausência de criptografia
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] Android developers: http://developer.android.com [4] Mike Part; Mobile Application Security: Who, How and Why; Trustwave, 2012: https://www.owasp.org/images/c/cf/ASDC12-Mobile_Application_Security_Who_how_and_why.pdf[5] Anatomy of Android: http://anatomyofandroid.com/