segurança no android (rafael toledo)
TRANSCRIPT
Segurança no AndroidUm dia é da caça, outro do caçador
Rafael Toledo
rafael.toledo<at>
concretesolutions.com.br
Gerente de Engenharia Android@_rafaeltoledo
O que todo mundo quer?
● Muitos usuários
● Usuários que transacionam
● Dados para evoluir e melhorar o produto
Mas...
Oops...
Android
Ao contrário do Backend, não temos controle sobre o ambiente de execução
● Root● Custom Roms● Custom Kernels● . . .
Parte 1
Ataquesno Cliente (APK)
Ataquesno Servidor (API)
OWASP 10 Maiores Riscos Mobile
1. Improper Platform Usage
2. Insecure Data Storage
3. Insecure Communication
4. Insecure Authentication
5. Insufficient Cryptography
OWASP 10 Maiores Riscos Mobile
6. Insecure Authorization
7. Client Code Quality
8. Code Tampering
9. Reverse Engineering
10. Extraneous Functionality
Perigo! Use por sua conta e risco!
Playground
Recomendação: Nexus 4
Android 4.2Android 4.3Android 4.4Android 5.0Android 5.1Android 6.0 (Custom Rom)Android 7.0 / 7.1 (Custom Rom)
Obtendo um APK do device
$ adb shell pm list packages...
$ adb shell pm path com.example.apppackage:/data/app/com.example.app.apk-1/base.apk
$ adb pull /data/app/com.example.app-1/base.apk2285 KB/s (3661800 bytes in 1.564s)
Ferramentas
Drozer
“O Drozer permite assumir o papel de um aplicativo Android e interagir com outros aplicativos, por meio do mecanismo de Comunicação Inter-Processo (IPC) do Android e do sistema operacional subjacente”
https://labs.mwrinfosecurity.com/tools/drozer/
Brincando com o Drozer
$ drozer console connectSelecting 8b4345b... (LGE Nexus 4 6.0.1)...drozer Console (v2.3.4)dz> list...exibe os módulos do drozer…
Analisando um App
dz> run app.package.info -a com.example.appPackage: com.example.app Application Label: App Exemplo Process Name: com.example.app Version: 1.0 Data Directory: /data/data/com.example.app APK Path: /data/app/com.example.app-1/base.apk UID: 10052 GID: [3003]
Analisando um App
Shared Libraries: null Shared User ID: null User Permissions: - android.permission.INTERNET - android.permission.ACCESS_WIFI_STATE ... Defines Permissions: - com.example.app.permission.C2D_MESSAGE
Possibilidades de ataque
dz> run app.package.attacksurface com.example.appAttack Surface: 13 activities exported 7 broadcast receivers exported 0 content providers exported 4 services exported
Listando Activities exportadas
dz> run app.activity.info -a com.example.appPackage: com.example.app com.example.app.SignInActivity com.example.app.HomeActivity
dz> run app.activity.start --component \ com.example.app com.example.app.HomeActivity
QARK
Quick Android Review Kit
Ferramenta simples de usar e capaz de encontrar vulnerabilidades de segurança comuns em aplicativos Android
https://github.com/linkedin/qark
Brincando com o QARK$ python qarkMain.py
Com o QARK
Analisar um APK local ou baixar um do device (incluindo os de sistema)
Procurar por problemas no Android Manifest
Descompilar usando 3 ferramentas diferentes
Com o QARK
Com o QARK
No final do processo, é possível gerar um APK para utilizar como exploit, além de um relatório HTML com comandos de ADB que podem ajudar a exercitar as vulnerabilidades encontradas
Apktool / Dex2Jar / JD-GUI
Ferramentas para descompilação e visualização do código descompilado (JD-GUI)
https://ibotpeaches.github.io/Apktool/
https://github.com/pxb1988/dex2jar
http://jd.benow.ca/
Apktool / Dex2Jar / JD-GUI
Navegação manual nas pastas do projeto nos permite:
- Descobrir frameworks / bibliotecas utilizados
- Obter chaves de SDK / Tokens
- Entender e vasculhar lógicas de negócio
- Descobrir pontos vulneráveis no app
Root
Acesso Root
Permite controle total sobre o dispositivoAcesso a dados de apps, até então protegidos
shell@android:/ $ ls /data/dataopendir failed, Permission deniedshell@android:/ $ suroot@android:/ # ls /data/data:)
Acesso Root
Ler e Modificar facilmente arquivos dos apps (Shared Preferences, Content Providers, SQLite)
Instalar outras ferramentas como o Frida (instrumentação dinâmica de apps)
http://www.frida.re/docs/android/
Analisando Tráfego
Burp Suite
Uma das principais funcionalidades é atuar como um proxy na comunicação do device / emulador
https://portswigger.net/burp/
É possível analisar / modificar requests, conhecido (Man in the Middle)
Parte 2
Comunicação
Utilizar protocolos de criptografia mais recentes - TLS 1.2
SSL Pinning - https://github.com/square/okhttp/wiki/HTTPS
Preocupação com autenticação / autorização - lógica SEMPRE no servidor
{ "authenticated": true } // SQN!
Aplicativo
Procure implementar algum mecanismo anti-tampering
Cuidados com cache e armazenamento interno
Não embarcar certificados!
Ofuscação (pelo menos Proguard)
Cuidado, mas muito cuidado com os logs em produção!
Dexguard
https://www.guardsquare.com/dexguard
Ofuscação pra valer do código-fonte e resources
Utilitários (RootDetector, CertificateChecker, DebugDetector, EmulatorDetector, TamperDetector)
Custa caro, mas dependendo do que seu app faz, é um investimento necessário!
Stay alert...
Recomendações
https://www.crypto101.io/
Livro: Android Security Internals
Livro: Hacking Android
www.concretesolutions.com.br
Rio de Janeiro – Rua São José, 90 – cj. 2121Centro – (21) 2240-2030
São Paulo - Av. Nações Unidas, 11.541 3º andar - Brooklin - (11) 4119-0449
Ajudamos empresas a criar produtos digitais de sucesso