Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Segurança no Android

Segurança no Android

Apresentada na Trilha Android do TDC Florianópolis 2017

Rafael Toledo

May 05, 2017
Tweet

More Decks by Rafael Toledo

Other Decks in Programming

Transcript

  1. QARK Quick Android Review Kit Ferramenta simples de usar e

    capaz de encontrar vulnerabilidades de segurança comuns em aplicativos Android github.com/linkedin/qark
  2. 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
  3. 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/
  4. 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
  5. 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” labs.mwrinfosecurity.com/tools/drozer/
  6. Brincando com o Drozer $ drozer console connect Selecting 8b4345b...

    (LGE Nexus 4 6.0.1) ... drozer Console (v2.3.4) dz> list ...exibe os módulos do drozer…
  7. Analisando um App dz> run app.package.info -a com.example.app Package: 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]
  8. 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
  9. Possibilidades de ataque dz> run app.package.attacksurface com.example.app Attack Surface: 13

    activities exported 7 broadcast receivers exported 0 content providers exported 4 services exported
  10. Listando Activities exportadas dz> run app.activity.info -a com.example.app Package: com.example.app

    com.example.app.SignInActivity com.example.app.HomeActivity dz> run app.activity.start --component \ com.example.app com.example.app.HomeActivity
  11. Burp Suite / Charles Proxy É possível analisar o fluxo

    de rede de um app Mapeamento de APIs através de chamada portswigger.net/burp/freedownload/ www.charlesproxy.com/
  12. Acesso Root Permite controle total sobre o dispositivo Acesso a

    dados de apps, até então protegidos shell@android:/ $ ls /data/data opendir failed, Permission denied shell@android:/ $ su root@android:/ # ls /data/data :)
  13. Acesso Root Ler e Modificar facilmente arquivos dos apps (Shared

    Preferences, Content Providers, SQLite) Instalar outras ferramentas como o Frida www.frida.re Frida permite injetar código JavaScript para explorar apps nativos não só Android, como iOS, Windows, Mac, Linux...
  14. Detecção de Ambiente - Root RootBeer Verifica a presença de

    binários, apps e propriedades no device que possam indicar root github.com/scottyab/rootbeer
  15. SQLite - SQLCipher Extensão do SQLite com criptografia AES-256 Possui

    versão para Android - e possui versão comercial www.zetetic.net/sqlcipher/sqlcipher-for-android/ compile 'net.zetetic:android-database-sqlcipher:3.5.7@aar'
  16. SQLite - SQLCipher // Application ou primeira Activity SQLiteDatabase.loadLibs(context); File

    databaseFile = getDatabasePath("demo.db"); databaseFile.mkdirs(); SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase( databaseFile, "test123", null); database.execSQL("create table t1(a, b)"); database.execSQL("insert into t1(a, b) values(?, ?)", new Object[]{"one for the money", "two for the show"});
  17. Shared Preferences - Hawk Storage criptografado no estilo chave-valor Não

    implementa a interface SharedPreference Utiliza a Conceal do Facebook para criptografia github.com/facebook/conceal github.com/orhanobut/hawk
  18. Shared Preferences - Hawk // Application ou primeira Activity compile

    'com.orhanobut:hawk:2.0.1' Hawk.init(context).build(); Hawk.put(key, T); T value = Hawk.get(key);
  19. HTTP 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!
  20. OkHttp - TLS 1.2 ConnectionSpec connectionSpec = new ConnectionSpec.Builder( ConnectionSpec.MODERN_TLS)

    .tlsVersions(TlsVersion.TLS_1_2) // Android 4.1+ .build(); new OkHttpClient.Builder() .connectionSpecs(Collections.singletonList(connectionSpec)) .build();
  21. OkHttp - Pinning CertificatePinner certificatePinner = new CertificatePinner.Builder() .add("api.myproduct.com", "sha256/...")

    .add("api.myproduct.com", "sha256/...") .add("api.myproduct.com", "sha256/...") .build(); new OkHttpClient.Builder() .certificatePinner(certificatePinner) .build();
  22. SafetyNet - Play Services API do Play Services Verifica URLs

    e perfis de Hardware SafetyNet Attestation API SafetyNet Safe Browsing API developer.android.com/training/safetynet/index.html
  23. Ofuscação - Proguard www.guardsquare.com/en/proguard Otimiza, ofusca classes e remove código

    não utilizado Parte do Toolkit do Android getDefaultProguardFile('proguard-android.txt')
  24. Ofuscação - Proguard www.guardsquare.com/en/proguard Otimiza, ofusca classes e remove código

    não utilizado Parte do Toolkit do Android getDefaultProguardFile('proguard-android-optimize.txt')
  25. Dexguard 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 que se paga!
  26. Logs! # Proguard -assumenosideeffects class android.util.Log { public static boolean

    isLoggable(java.lang.String, int); public static int v(...); public static int i(...); public static int w(...); public static int d(...); public static int e(...); } github.com/JakeWharton/timber
  27. www.concretesolutions.com.br Rio de Janeiro – Rua São José, 90 –

    cj. 2121 Centro – (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 Rafael Toledo @_rafaeltoledo github.com/rafaeltoledo/android-security