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

Segurança no Android

Segurança no Android

Apresentada na trilha Android o TDC-SP 2017

Rafael Toledo

July 19, 2017
Tweet

More Decks by Rafael Toledo

Other Decks in Programming

Transcript

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

    de encontrar vulnerabilidades de segurança comuns em aplicativos Android github.com/linkedin/qark
  2. QARK Analisar um APK local ou baixar um APK do

    device / emulador conectado via ADB (incluindo os apps do 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) ibotpeaches.github.io/apktool github.com/pxb1988/dex2jar jd.benow.ca
  4. APKTOOL / DEX2JAR / JD-GUI Navegação manual nas pastas do

    projeto nos permite: - Descobrir frameworks / bibliotecas utilizadas - Obter chaves de SDK / Tokens de Acesso - Entender e descobrir lógicas de negócio - Descobrir e explorar vulnerabilidades no cliente e servidor
  5. 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 :)
  6. 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...
  7. 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
  8. $ drozer console connect Selecting 8b4345b... (LGE Nexus 4 6.0.1)

    ... drozer Console (v2.3.4) dz> list ...exibe os módulos do drozer... DROZER analisando um app
  9. DROZER 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]
  10. DROZER 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
  11. DROZER 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
  12. DROZER 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
  13. DETECÇÃO DE AMBIENTE debug public static boolean isDebuggable(Context context) {

    return (context.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; }
  14. DETECÇÃO DE AMBIENTE emulador public static boolean isEmulator() { return

    Build.FINGERPRINT.startsWith("generic") || Build.FINGERPRINT.startsWith("unknown") || Build.MODEL.contains("google_sdk") || Build.MODEL.contains("Emulator") || Build.MODEL.contains("Android SDK built for x86") || Build.MANUFACTURER.contains("Genymotion") || (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) || "google_sdk".equals(Build.PRODUCT) || "goldfish".equals(Build.HARDWARE); }
  15. DETECÇÃO DE AMBIENTE origem da instalação public static boolean verifyInstaller(Context

    context) { final String installer = context.getPackageManager() .getInstallerPackageName(context.getPackageName()); return installer != null && installer.compareTo("com.android.vending") == 0; }
  16. 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
  17. 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 STORAGE Hawk
  18. 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' STORAGE SQLCipher - SQLite
  19. // 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"}); STORAGE SQLCipher - SQLite
  20. Utilizar protocolos de criptografia mais recentes - TLS 1.2 SSL

    Pinning - github.com/square/okhttp/wiki/HTTPS Preocupação com autenticação / autorização - lógica SEMPRE no servidor { "authenticated": true } // SQN! NETWORKING
  21. NETWORKING 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();
  22. NETWORKING OkHttp: Certificate 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();
  23. SAFETYNET API do Play Services SafetyNet Attestation API SafetyNet Safe

    Browsing API SafetyNet reCAPTCHA API (11.x) SafetyNet Verify Apps API (11.x) developer.android.com/training/safetynet/index.html
  24. www.guardsquare.com/en/proguard Otimiza, ofusca classes e remove código não utilizado Parte

    do Toolkit do Android getDefaultProguardFile('proguard-android.txt') OFUSCAÇÃO Proguard
  25. 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') OFUSCAÇÃO Proguard
  26. 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 da criticidade do seu app, é um investimento que se paga! OFUSCAÇÃO Dexguard
  27. # 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 LOGGING
  28. Centro Av. Presidente Wilson, 231 - 29º andar (21) 2240-2030

    Cidade Monções Av. Nações Unidas, 11.541 - 3º andar (11) 4119-0449 Savassi Av. Getúlio Vargas, 671 Sala 800 - 8º andar (31) 3360-8900 www.concrete.com.br speakerdeck.com/rafaeltoledo