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

Seguridad en Android

Seguridad en Android

Seguridad en Android a nivel de aplicaciones y de dispostivos

jmortegac

April 26, 2015
Tweet

More Decks by jmortegac

Other Decks in Technology

Transcript

  1. DALVIK / ART/ APK / PERMISOS MALWARE TOOLS SEGURIDAD EN

    COMPONENTES ANÁLISIS ESTÁTICO ECLIPSE /ANDROID STUDIO ENCRIPTACIÓN / OFUSCACIÓN INGENIERÍA INVERSA ANALIZADORES APK / FORENSICS
  2. Dalvik vs ART(4.4) DALVIK ART Compilación Just-In-Time (JIT) Compilación Ahead-Of-Time

    (AOT) Cache se construye a medida que se ejecutan las aplicaciones Cache se construye al arrancar el dispositivo Apps se compilan cuando se ejecutan Almacena las aplicaciones compiladas Mayor consumo espacio interno  Settings>Developer options>Select runtime
  3. Obtener APK  Google Play  Markets alternativos (BlackMart, Fdroid,

    Aptoide)  Apk extractor  http://apps.evozi.com/apk-downloader
  4.  Detectar Root private boolean isDeviceRooted(){ try{ Runtime.getRuntime().exec("su"); return true;

    }catch(IOExeception ex){ return false; } } public static boolean() isDeviceRooted(){ File f= new File("/system/sbin/su"); return f.exits(); }
  5. Permisos  Instalar algún tipo de aplicación que compruebe los

    permisos.  Deshabilitar actualizaciones automáticas.
  6. Recomendaciones en permisos  Minimizar el número de permisos que

    se piden  33% aplicaciones piden más permisos de los necesarios  ¿Es necesario android.permission.CAMERA? ContentValues contentValues = new ContentValues(); contentValues.put(MediaStore.Images.Media.DESCRIPTION, "Image capture"); contentValues.put(MediaStore.Images.Media.TITLE, "new image"); Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); startActivityForResult(intent, 1);
  7. Permissions in apps  <uses-permission android:name="android.permission.CAMERA" />  ¿Donde está

    el permiso?  En la aplicación Google Camera  GoogleCamera.apk
  8. Malware • Instalar de orígenes conocidos • Comprobar los permisos

    antes de instalar/actualizar • Revisar comentarios de los usuarios • Deshabilitar conexión automática a redes Wifi y evitar conectarnos a redes Free. Recomendaciones para evitar malware
  9. Malware detection in Google play Bluebox Security Scanner SRT AppScanner

    Lookout Mobile Security Advanced Mobile Care Malwarebytes Anti-Malware CM Security
  10. Firmar aplicaciones  Java keytool $ keytool -genkey -v -keystore

    <keystore filename> -alias <alias for key> -keyalg RSA -keysize 2048 -validity 10000
  11. Android Studio  Tool included in Android SDK for apk

    compress and optimizing $ zipalign -f 4 app-signed.apk final-app.apk  Build > Generate Signed APK
  12. Shared preferences  Fichero xml almacenado en /data/data/com.your.package/shared_prefs/preferences .xml 

    No es recomendable almacenar información sensible relativa a nombres de usuario y contraseñas  Librería para securizar este fichero  https://github.com/scottyab/secure-preferences ROOT
  13. Webview best practices Tener cuidado con librerías de terceros No

    guardar passwords No guardar datos de formularios Limpiar Caché webSettings.setSavePassword(false); webSettings.setSaveFormData(false); @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); view.clearCache(true); //delete local files in the browser }
  14. SQLite SQLiteDatabase db = dbHelper.getWriteableDatabase(); String userQuery = "SELECT lastName

    FROM useraccounts WHERE userID = ?"; SQLiteStatement prepStatement =db.compileStatement(userQuery); prepStatement.bindString(1, "userID"); prepStatement.simpleQueryForString(); Sentencias preparadas para evitar sql injection rawQuery compileStatement
  15. LINT ECLIPSE /ANDROID STUDIO  Integrado en el the SDK

     Permite detectar errores comunes de programación
  16. Encriptación en el teléfono  Soportado desde Android 3.0 

    Lleva 1h encriptar los datos  Implica una reducción del rendimiento
  17. Ofuscación en proyectos android Proguard Integrado en el SDK 

    http://developer.android.com/tools/help/proguard.html Habilitar Proguard en eclipse proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard- project.txt
  18. Ofuscación en proyectos android Habilitar Proguard en android STUDIO build.gradle

    android { buildTypes { release { runProguard true proguardFile getDefaultProguardFile('proguard-android.txt') , 'proguard-rules.pro' } }
  19. Proguard.config -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -keep

    public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class com.android.vending.licensing.ILicensingService -keepclasseswithmembernames class * { native <methods>; } -keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; }
  20. Renombrar .apk to .zip Extraer zip que contiene el .dex

    Ejecutar dex2jar Abrir el .jar con java decompiler
  21. Apk Tool  Convierte un fichero .apk file a un

    projecto android $ apktool d target.apk output_directory
  22. Dex2jar  http://code.google.com/p/dex2jar  Convierte ejecutable Dalvik en fichero jar.

    $ unzip target.apk $ d2jdex2jar.sh classes.dex -o target.jar
  23. Androwarn python androwarn.py -i my_apk.apk -r html -v 3 https://github.com/maaaaz/androwarn

    Telephony identifiers exfiltration: IMEI, IMSI, MCC, MNC, LAC, CID, operator's name... Device settings exfiltration: software version, usage statistics, system settings, logs... Geolocation information leakage: GPS/WiFi geolocation... Connection interfaces information exfiltration: WiFi credentials, Bluetooth MAC adress... Telephony services abuse: premium SMS sending, phone call composition... Audio/video flow interception: call recording, video capture... Remote connection establishment: socket open call, Bluetooth pairing, APN settings edit... PIM data leakage: contacts, calendar, SMS, mails... External memory operations: file access on SD card... PIM data modification: add/delete contacts, calendar events... Arbitrary code execution: native code using JNI, UNIX command, privilege escalation... Denial of Service: event notification deactivation, file deletion, process killing, virtual keyboard disable, terminal shutdown/reboot...
  24. References  http://code.google.com/p/dex2jar/  https://code.google.com/p/android-apktool  http://ashishb.net/security/android-security-related-tools  http://androidcracking.blogspot.com.es 

    http://developer.android.com/guide/topics/security/permissions.html  http://source.android.com/devices/tech/security/#android- application-security  http://siis.cse.psu.edu/android_sec_tutorial.html