Segurança no Android

Post on 20-Jul-2015

35 views 2 download

Transcript of Segurança no Android

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/