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

Testing Android Security

jmortegac
April 26, 2015

Testing Android Security

Testing Android Security

jmortegac

April 26, 2015
Tweet

More Decks by jmortegac

Other Decks in Business

Transcript

  1. 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
  2. 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
  3. 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.
  4. Security test cases Test cases Example Título/grado Encriptación /critical Descripción

    Encriptar los datos sensibles del usuario que se envían y reciben Detalles La información sensible(datos personales) se tiene que encriptar durante la transmisión o peticion de los mismos Resultado esperado La aplicación encrypta o cifra la información mediante alguno de los algoritmos soportados por el SDK
  5. 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
  6. 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
  7. Android plugin in Sonar > Rules https://github.com/SonarCommunity/sonar-android 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] There are cases where it is appropriate for an application to write world readable files, but these should be reviewed carefully to ensure that they contain no private data that is leaked to other applications HardcodedDebugMode [Hardcoded value of android:debuggable in the manifest] AllowBackup [Missing allowBackup attribute]
  8. Agnitio tool  http://sourceforge.net/ projects/agnitiotool  Análisis estático  Decompilar

    APK Buscar llamadas a funciones que pueden suponer un riesgo Recomendaciones + checklist
  9. 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...
  10. 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
  11. DroidBox 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
  12. Drozer 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
  13. TraceDroid 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 Está orientada a detección de malware
  14. 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”/>
  15. 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
  16. Almacenamiento en ficheros • MODE_WORLD_READABLE • MODE_WORLD_WRITABLE • MODE_PRIVATE /mnt/sdcard

    is world-readable and world‐writable • WRITE_TO_EXTERNAL_STORAGE 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
  17. 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
  18. 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
  19. 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
  20. Custom permissions <provider android:name="SampleContentProvider" android:authorities="com.example.app.Provider“ android:export=“true" android:permission="com.example.app.permission.Provider" /> <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
  21. Webview Deshabilitar JavaScript para evitar ataques cross-site scripting(XSS) myBrowserSettings.setJavaScriptEnabled(false); Deshabilitar

    el acceso a ficheros myBrowserSettings.setAllowFileAccess(false); Usar la anotación @JavascriptInterface para aquellos métodos que queramos exponer en javascript
  22. 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);
  23. 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
  24. 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
  25. Detectar root Permisos lectura /escritura sobre la carpeta system Comprobar

    acceso a los ficheros de las aplicaciones dentro de /data/data/<package_name>
  26. Detectar root https://code.google.com/p/roottools if (RootTools.isRootAvailable()) { // su exists, do

    something } if (RootTools.isAccessGiven()) { // your app has been granted root access }
  27. Anti-malware Escanear aplicaciones y paquetes con la información obtenida de

    PackageManager.getInstalledPackages(int) Comprobar nombres de paquetes,permisos y firmas Comprobar cada vez que se instala una aplicación a través del intent android.intent.action.PACKAGE_ADDED
  28. 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
  29. 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
  30. Resources Android libraries security • https://android-arsenal.com/tag/87 Open Source Security Testing

    Methodology Manual (OSSTMM) • http://www.isecom.org/research/osstmm.html,