Share
Embed
Transcript
48 slides
-
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 -
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 • 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 • 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 • 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 • 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 ◦ Cuidado com redes Wi-fi
desconhecidas! ◦ Cuidado com mensagens de certificados desconhecidos! ◦ Verifique se a conexão é HTTPS! -
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/