testing android security

68
Testing Android Security José Manuel Ortega Candel | @jmortegac

Upload: jose-manuel-ortega-candel

Post on 17-Jul-2015

691 views

Category:

Mobile


4 download

TRANSCRIPT

Page 1: Testing Android Security

Testing Android Security

José Manuel Ortega Candel | @jmortegac

Page 3: Testing Android Security

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

Page 4: Testing Android Security

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

Page 5: Testing Android Security

Security testing

Page 6: Testing Android Security

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.

Page 7: Testing Android Security

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

Page 8: Testing Android Security

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

Page 9: Testing Android Security

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

Page 10: Testing Android Security

Android Lint

Page 11: Testing Android Security

Android inspect code

Page 14: Testing Android Security

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]

Page 15: Testing Android Security

Agnitio tool

http://sourceforge.net/ projects/agnitiotool

Análisis estático

Decompilar APK

Buscar llamadas a funciones

que pueden suponer un riesgo

Recomendaciones + checklist

Page 16: Testing Android Security

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

Page 17: Testing Android Security

Android Application Vulnerability Scanner tool

Page 18: Testing Android Security

Android Application Vulnerability Scanner tool

Page 19: Testing Android Security

Ingeniería inversa

Decompile dalvik to smali / classes.dex in APK

APKTOOL

DEX2JAR

Java Decompiler

Page 20: Testing Android Security

APKTOOL / DEX2JAR

Page 22: Testing Android Security

Ingeniería inversa

DexInspector

Dalvik bytecode editor

APK Reverser

APK Analyzer

APK Multitool

Page 23: Testing Android Security

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

Page 24: Testing Android Security

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

Page 25: Testing Android Security

DroidBox

Page 26: Testing Android Security

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

Page 27: Testing Android Security

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

Page 28: Testing Android Security

Drozer

app-.package.info

Page 29: Testing Android Security

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

Page 30: Testing Android Security

Seguridad en componentes

•AndroidManifest.xml •Activities •ContentProviders •Services •Sqlite •Shared Preferences •Webview

Page 31: Testing Android Security

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”/>

Page 32: Testing Android Security

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

Page 33: Testing Android Security

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

Page 34: Testing Android Security

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

Page 35: Testing Android Security

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

Page 36: Testing Android Security

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

Page 37: Testing Android Security

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

Page 38: Testing Android Security

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

Page 39: Testing Android Security

Librerías de terceros

Analizar posibles vulnerabilidades

PhoneGap

Apache Cordova

Page 40: Testing Android Security

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);

Page 41: Testing Android Security

SQLite Extension

Full Database Encryption

Good Performance

AES-256 Encryption

Portable

Open Source Core

Page 42: Testing Android Security

SQLite / SQL injection

•Construir consultas mediante ?

•Sentencias preparadas

Page 43: Testing Android Security

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étricomisma clave para encriptar y desencriptar)

La primera vez que se instancia SecurePreferences,se crea una clave que permite encriptar y desencriptar los valores

Page 44: Testing Android Security

Secure prefefences

SharedPreferences prefs = SecurePreferences(context);

Editor edit = prefs.edit(); edit.putString("key", "value"); edit.apply();

Page 45: Testing Android Security

Ofuscación

ProGuard / DexGuard /DashO

API Reflection

Encrypted Network Communication

Encrypted Files

Filtrar información de log y debug

Page 46: Testing Android Security

Proguard http://proguard.sourceforge.net

Habilitar en Android Studio

build.gradle

Page 47: Testing Android Security

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

Page 48: Testing Android Security

Proguard

Page 49: Testing Android Security

Detectar root

Permisos lectura /escritura sobre la carpeta system

Comprobar acceso a los ficheros de las aplicaciones dentro de /data/data/<package_name>

Page 50: Testing Android Security

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 }

Page 51: Testing Android Security

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

Page 52: Testing Android Security

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

Page 53: Testing Android Security

Mobile Top 10 Risks-

OWASP

(Open Web Application Security Project)

Page 54: Testing Android Security

Mobile Top 10 Risks

Page 55: Testing Android Security

OASAM-

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

Page 56: Testing Android Security

OASAM-

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

Page 57: Testing Android Security

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

Page 58: Testing Android Security

Pentesting

Page 61: Testing Android Security

Forensics

Page 62: Testing Android Security

Mobile secure coding

Page 64: Testing Android Security

Resources

Android libraries security • https://android-arsenal.com/tag/87

Open Source Security Testing Methodology Manual (OSSTMM)

• http://www.isecom.org/research/osstmm.html,

Page 65: Testing Android Security

Books

Page 66: Testing Android Security

Books

Page 67: Testing Android Security

Books

Page 68: Testing Android Security

Thank you! José Manuel Ortega Candel | @jmortegac