$30 off During Our Annual Pro Sale. View Details »

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. Testing Android Security
    José Manuel Ortega Candel | @jmortegac

    View Slide

  2. https://speakerdeck.com/
    jmortega

    View Slide

  3. 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

    View Slide

  4. 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

    View Slide

  5. Security testing

    View Slide

  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.

    View Slide

  7. 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

    View Slide

  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

    View Slide

  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

    View Slide

  10. Android Lint

    View Slide

  11. Android inspect code

    View Slide

  12. Android plugin in Sonar
    https://github.com/SonarCommunity/sonar-android

    View Slide

  13. Android plugin in Sonar
    https://github.com/SonarCommunity/sonar-android

    View Slide

  14. 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]

    View Slide

  15. Agnitio tool
     http://sourceforge.net/
    projects/agnitiotool
     Análisis estático
     Decompilar APK
    Buscar llamadas a funciones
    que pueden suponer un
    riesgo
    Recomendaciones + checklist

    View Slide

  16. 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...

    View Slide

  17. Android
    Application
    Vulnerability
    Scanner tool

    View Slide

  18. Android
    Application
    Vulnerability
    Scanner tool

    View Slide

  19. Ingeniería inversa
    Decompile dalvik to smali / classes.dex in APK
    APKTOOL
    DEX2JAR
    Java Decompiler

    View Slide

  20. APKTOOL / DEX2JAR

    View Slide

  21. Ingeniería inversa
    https://github.com/nkpanda/Android-Testing
    Mobiliz3r
    Script en python

    View Slide

  22. Ingeniería inversa
    DexInspector
    Dalvik bytecode editor
    APK Reverser
    APK Analyzer
    APK Multitool

    View Slide

  23. 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

    View Slide

  24. 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

    View Slide

  25. DroidBox

    View Slide

  26. 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

    View Slide

  27. Drozer
    https://www.mwrinfosecurity.com/products/drozer

    View Slide

  28. Drozer
    app-.package.info

    View Slide

  29. 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

    View Slide

  30. Seguridad en componentes
    •AndroidManifest.xml
    •Activities
    •ContentProviders
    •Services
    •Sqlite
    •Shared Preferences
    •Webview

    View Slide

  31. 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

    View Slide

  32. 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

    View Slide

  33. 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

    View Slide

  34. 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

    View Slide

  35. 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

    View Slide

  36. 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

    View Slide

  37. Custom permissions
    android:authorities="com.example.app.Provider“
    android:export=“true"
    android:permission="com.example.app.permission.Provider" />
    android:name="com.example.app.permission.Provider">

    protectionLevel="signature" – Permite limitar el acceso a componentes
    de aplicaciones firmadas con el mismo certificado

    View Slide

  38. 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

    View Slide

  39. Librerías de terceros
    Analizar posibles vulnerabilidades
    PhoneGap
    Apache Cordova

    View Slide

  40. SQLite / SQLCipher
    Fichero que se guarda en
    /data/data//databases
    Permite cifrar la base de datos con el algoritmo
    de encriptación AES 256 bits
    SQLiteDatabase myPrivateDB =
    openOrCreateDatabase("Contacts", MODE_PRIVATE, null);

    View Slide

  41. SQLite Extension
    Full Database Encryption
    Good Performance
    AES-256 Encryption
    Portable
    Open Source Core

    View Slide

  42. SQLite / SQL injection
    •Construir consultas mediante ?
    •Sentencias preparadas

    View Slide

  43. Secure Preferences
    https://github.com/scottyab/secure-preferences
    Fichero que se guarda en /data/data//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

    View Slide

  44. Secure
    prefefences
    SharedPreferences prefs = SecurePreferences(context);
    Editor edit = prefs.edit();
    edit.putString("key", "value");
    edit.apply();

    View Slide

  45. Ofuscación
    ProGuard / DexGuard /DashO
    API Reflection
    Encrypted Network Communication
    Encrypted Files
    Filtrar información de log y debug

    View Slide

  46. Proguard
    http://proguard.sourceforge.net
    Habilitar en Android Studio
    build.gradle

    View Slide

  47. 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

    View Slide

  48. Proguard

    View Slide

  49. Detectar root
    Permisos lectura /escritura sobre la carpeta
    system
    Comprobar acceso a los ficheros de las
    aplicaciones dentro de
    /data/data/

    View Slide

  50. 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
    }

    View Slide

  51. 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

    View Slide

  52. 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

    View Slide

  53. Mobile Top 10
    Risks-
    OWASP
    (Open Web
    Application Security
    Project)

    View Slide

  54. Mobile Top 10
    Risks

    View Slide

  55. OASAM-
    Open Android
    Security
    Assessment
    Methodology
    http://oasam.org/en

    View Slide

  56. OASAM-
    Open Android
    Security
    Assessment
    Methodology
    http://oasam.org/es

    View Slide

  57. 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

    View Slide

  58. Pentesting

    View Slide

  59. Pentesting
    https://code.google.com/
    p/c-ray
    Permite probar los
    intents de forma manual

    View Slide

  60. Forensics
    https://github.com/viaforensics/android-
    forensics
    https://www.isecpartners.com/tools/mobile-
    security.aspx
    http://andriller.com

    View Slide

  61. Forensics

    View Slide

  62. Mobile secure coding

    View Slide

  63. 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

    View Slide

  64. Resources
    Android libraries security
    • https://android-arsenal.com/tag/87
    Open Source Security Testing Methodology Manual (OSSTMM)
    • http://www.isecom.org/research/osstmm.html,

    View Slide

  65. Books

    View Slide

  66. Books

    View Slide

  67. Books

    View Slide

  68. Thank you!
    José Manuel Ortega Candel | @jmortegac

    View Slide