Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Testing Android Security

941 views

Published on

Testing Android Security at codemotion 2015

Published in: Technology
  • Be the first to comment

Testing Android Security

  1. 1. José Manuel Ortega Candel | @jmortegac
  2. 2. https://speakerdeck. com/jmortega
  3. 3. https://www.youtube.com/watch?v=hfaAA7ln-kc
  4. 4. INDEX Introducción al ciclo de desarrollo Análisis estático y dinámico Desarrollo seguro en componentes Librerías de encriptado OWASP Mobile Top Risks Security Ofuscación de aplicaciones Herramientas de pentesting /forensics
  5. 5. Ciclo de desarrollo Requerimientos Análisis Diseño Desarollo Testing / QA Security review en cada iteración +Security Requirements Analysis El Testing de seguridad se debería integrar en el ciclo de desarrollo e integración contínua desde las primeras etapas El objetivo es detectar posibles riesgos y minimizar las vulnerabilidades que nuestra aplicación pueda generar
  6. 6. Security testing SQLite • Cifrado • SQL injection Cifrado de datos  HTTPS  Información sensible Almacenamiento • Ficheros • Shared Preferences • BD SQLite • Logs • Cache Enfocadas a verificar que el software está protegido de ataques externos y a certificar que se protege la confidencialidad, integridad y disponibilidad del sistema y sus datos Security testing is a process to determine that an information system protects data and maintains functionality as intended.
  7. 7. Testear seguridad aplicaciones Análisis estático Código fuente • Code Review Binario • Ingeniería inversa Análisis dinámico • Debug en tiempo de ejecución • Capturar logs y tráfico que generan • Llamadas a servicios remotos • Peticiones de red Análisis forense • Permisos en ficheros • Análisis del contenido de ficheros
  8. 8. White box / Black box  Pruebas de caja blanca  Pruebas de caja negra  Análisis estático  Cobertura de código  Control de flujo  Análisis dinámico  Comportamiento en tiempo de ejecución  Performance
  9. 9. Análisis estático  Analizar el código fuente  Android Lint  Android Studio > Inspect code > Security issues  SonarQube > Android Plugin > Rules  Agnitio Tool  Androwarn  Ingeniería inversa
  10. 10. Android Lint
  11. 11. Android Studio inspect code
  12. 12. Android plugin Sonar https://github.com/SonarCommunity/sonar-android
  13. 13. Android plugin Sonar https://github.com/SonarCommunity/sonar-android
  14. 14. Sonar security plugin
  15. 15. Android plugin Sonar > Rules JavascriptInterface [Missing @JavascriptInterface on methods] As of API 17, you must annotate methods in objects registered with the addJavascriptInterface SetJavaScriptEnabled [Using setJavaScriptEnabled in webview] Your code should not invoke setJavaScriptEnabled if you are not sure that your app really requires JavaScript support WorldReadableFiles [openFileOutput() call passing MODE_WORLD_READABLE] HardcodedDebugMode [Hardcoded value of android:debuggable in the manifest] AllowBackup [Missing allowBackup attribute]
  16. 16. Agnitio tool  http://sourceforge.net/ projects/agnitiotool  Análisis estático  Decompilar APK Buscar llamadas a funciones que pueden suponer un riesgo Recomendaciones + checklist
  17. 17. Androwarn https://github.com/maaaaz/androwarn python androwarn.py -i my_apk.apk -r html -v 3 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...
  18. 18. Android Application Vulnerability Scanner tool
  19. 19. Android Application Vulnerability Scanner tool
  20. 20. Ingeniería inversa  Decompile dalvik to smali / classes.dex in APK  APKTOOL  DEX2JAR  Java Decompiler
  21. 21. APKTOOL / DEX2JAR
  22. 22. Ingeniería inversa  https://github.com/nkpanda/Android-Testing  Mobiliz3r  Script en python
  23. 23. Ingeniería inversa  DexInspector  Dalvik bytecode editor  APK Reverser  APK Analyzer APK Multitool
  24. 24. Análisis dinámico  Monitorizar la aplicación  Analizar el tráfico de red(Burp Suite,Wireshark,Fiddler) Inyectar instrucciones para detectar comportamientos anómalos o sospechosos  DroidBox  Drozer  TraceDroid
  25. 25. Wireshark
  26. 26. https://code.google.com/p/droidbox Permite monitorizar: Fugas de información / Operaciones E/S de red y sobre ficheros Operaciones de cryptografía / Llamadas SMS y telefónicas DroidBox
  27. 27. DroidBox
  28. 28. https://www.mwrinfosecurity.com/products/drozer  Analizar vulnerabilidades a través de un agente/proxy  Permite interactuar con activities,servicios,broadcast receivers y content providers Automatizar testing de seguridad Drozer
  29. 29. Drozer
  30. 30. Drozer commands
  31. 31. http://tracedroid.few.vu.nl  Análisis online de peticiones de red,llamadas,sms  También realiza un análisis estático y de cobertura de código
  32. 32. https://github.com/nodoraiz/android-hooker  Análisis dinámico
  33. 33. https://lab.nowsecure.com
  34. 34. Seguridad en componentes AndroidManifest.xml Activities ContentProviders Services Sqlite Shared Preferences Webview
  35. 35. Permisos en runtime v6  Normal permissionsSe proporcionan de forma automática  Dangerous permissionsEl usuario decide si darle permiso o no
  36. 36. Factores de riesgo Permisos en androidManifest.xml Verificar la firma de la aplicación Origen de la aplicación Dispositivo rooteado Depuración habilitada en androidManifest <application android:debuggable=“true”/>
  37. 37. Proteger los datos  set android:allowBackup=false  Crear ficheros en MODE_PRIVATE  Evitar almacenar información sensible en la SD CARD  Filtrar información de log
  38. 38. Almacenamiento en ficheros • MODE_WORLD_READABLE • MODE_WORLD_WRITABLE • MODE_PRIVATE /mnt/sdcard is world- readable and world‐writable • WRITE_TO_EXTERNAL_STO RAGE PERMISSION • Any application can access to sd-card WORLD_READABLE / WORLD_WRITABLE Deprecated API >=17 Otra aplicación podría leer el fichero si conoce la ruta Fichero que contengan información confidencial deberían crearse con el permiso MODE_PRIVATE
  39. 39. Logs Sólo mostrar en modo debug Eliminar logs con proguard public static final boolean SHOW_LOG = BuildConfig.DEBUG; public static void d(final String tag, final String msg) { if (SHOW_LOG) Log.d(tag, msg); } -assumenosideeffects class android.util.Log { public static boolean isLoggable(java.lang.String, int); public static *** d(...); public static *** v(...); public static *** i(...); public static *** e(...); } Proguard configuration
  40. 40. Atributo export  En activity,content providers,broadcast receivers y servicios debería estar a false  Por defecto esta a false a partir de la version 4.2 en content-providers
  41. 41. Limitar acceso desde otras aplicaciones public void onCreate(Bundle bundle) { super.onCreate(bundle); ComponentName v0 = this.getCallingActivity(); if (v0 == null) { this.finish(); } else if (!"package_name".equals(v0.getPackageName())) { this.finish(); } } • Comprobar que quien llama a la activity sea un componente que se encuentre en el mismo paquete/proyecto
  42. 42. Custom permissions <provider android:name="SampleContentProvider" android:authorities="com.example.app.Provider“ android:export=“true" android:permission="com.example.app.permission.Provi der" /> <permission android:protectionLevel="signature" android:name="com.example.app.permission.Provider"> </permission> protectionLevel="signature" – Permite limitar el acceso a componentes de aplicaciones firmadas con el mismo certificado
  43. 43. Librerías de terceros  Analizar posibles vulnerabilidades  PhoneGap  Apache Cordova
  44. 44. SQLite / SQLCipher  Fichero que se guarda en /data/data/<package>/databases  Permite cifrar la base de datos con el algoritmo de encriptación AES 256 bits SQLiteDatabase myPrivateDB = openOrCreateDatabase("Contacts", MODE_PRIVATE, null);
  45. 45. SQLite Extension Full Database Encryption Good Performance AES-256 Encryption Portable Open Source Core
  46. 46. SQLite / SQL injection Construir consultas mediante ? Sentencias preparadas
  47. 47. Secure Preferences https://github.com/scottyab/secure-preferences  Fichero que se guarda en /data/data/<package>/shared_prefs  Librería que permite securizar este fichero  Permite cifrar keys y values  AES Encryption(Simétricomisma clave para encriptar y desencriptar)  La primera vez que se instancia SecurePreferences,se crea una clave que permite encriptar y desencriptar los valores
  48. 48. Secure prefefences SharedPreferences prefs = SecurePreferences(context); Editor edit = prefs.edit(); edit.putString("key", "value"); edit.apply();
  49. 49. Ofuscación / Proguard http://proguard.sourceforge.net Habilitar en Android Studio build.gradle
  50. 50. Proguard Configuration 1. change names of classes, methods, fields 2. modify the control flow 3. code optimization 4. dynamic code loading 5. change instructions with metamorphic technique
  51. 51. Proguard
  52. 52. Detectar Root  Permisos lectura /escritura sobre la carpeta system  Comprobar acceso a los ficheros de las aplicaciones dentro de /data/data/<package_name>
  53. 53. https://code.google.com/p/roottools if (RootTools.isRootAvailable()) { // su exists, do something } if (RootTools.isAccessGiven()) { // your app has been granted root access }
  54. 54. Encriptado import java.security.*; Import javax.crypto.*; AES / RSA Key 256 bits SecureRandom CBC - Cipher Block Chaining AES/CBC/PKCS5Padding cipher algorithm Password-Based Key Derivation Function
  55. 55. Seguridad certificados
  56. 56. OWASP Mobile Top 10 Risks
  57. 57. OASAM- Open Android Security Assessment Methodology http://oasam.org/en
  58. 58. OASAM- Open Android Security Assessment Methodology http://oasam.org/es
  59. 59. Pentesting Distribuciones que tienen integradas la mayorías de aplicaciones de análisis estático y dinámico  Santoku linux https://santoku-linux.com  Mobisec http://sourceforge.net/projects/mobisec
  60. 60. Pentesting https://code.google.com/p/c-ray Permite probar los intents de forma manual
  61. 61. Forensics
  62. 62. Forensics  https://github.com/viaforensics/android-forensics  https://www.isecpartners.com/tools/mobile-security.aspx  http://andriller.com
  63. 63. Mobile secure coding
  64. 64. Resources Developer.android.com  https://developer.android.com/training/articles/security-tips.html  https://source.android.com/devices/tech/security OWASP  https://www.owasp.org/index.php/OWASP_Mobile_Security_Project Open Android Security Assessment Methodology  http://oasam.org/en
  65. 65. Resources Android libraries security  https://android-arsenal.com/tag/87 Open Source Security Testing Methodology Manual (OSSTMM)  http://www.isecom.org/research/osstmm.html,
  66. 66. Books
  67. 67. Books
  68. 68. Books
  69. 69. José Manuel Ortega Candel | @jmortegac

×