testing android security

Post on 16-Apr-2017

802 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

José Manuel Ortega Candel | @jmortegac

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

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

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.

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

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

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

Android Lint

Android Studio inspect code

Sonar security plugin

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]

Agnitio tool http://sourceforge.net/ projects/agnitiotool

Análisis estático

Decompilar APK

Buscar llamadas a funciones

que pueden suponer un riesgo

Recomendaciones + checklist

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

Android Application Vulnerability Scanner tool

Android Application Vulnerability Scanner tool

Ingeniería inversa Decompile dalvik to smali / classes.dex in APK

APKTOOL

DEX2JAR

Java Decompiler

APKTOOL / DEX2JAR

Ingeniería inversa DexInspector

Dalvik bytecode editor

APK Reverser

APK Analyzer

APK Multitool

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

Wireshark

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

DroidBox

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

Drozer

Drozer

commands

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

https://lab.nowsecure.com

Seguridad en componentes AndroidManifest.xml

Activities

ContentProviders

Services

Sqlite

Shared Preferences

Webview

Permisos en runtime v6 Normal permissionsSe proporcionan de forma

automática

Dangerous permissionsEl usuario decide si darle permiso o no

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

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

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

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

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

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

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

Librerías de terceros Analizar posibles vulnerabilidades

PhoneGap

Apache Cordova

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

SQLite Extension

Full Database Encryption

Good Performance

AES-256 Encryption

Portable

Open Source Core

SQLite / SQL injection Construir consultas mediante ?

Sentencias preparadas

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

Secure prefefences

SharedPreferences prefs = SecurePreferences(context);

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

Ofuscación / Proguard http://proguard.sourceforge.net

Habilitar en Android Studio

build.gradle

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

Proguard

Detectar Root Permisos lectura /escritura sobre la carpeta system

Comprobar acceso a los ficheros de las aplicaciones dentro

de /data/data/<package_name>

https://code.google.com/p/roottools

if (RootTools.isRootAvailable()) { // su exists, do something }

if (RootTools.isAccessGiven()) { // your app has been granted root access }

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

Seguridad certificados

OWASP

Mobile Top 10 Risks

OASAM-

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

OASAM-

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

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

Pentesting

https://code.google.com/p/c-ray

Permite probar los intents de forma manual

Forensics

Mobile secure coding

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

Open Source Security Testing Methodology Manual (OSSTMM)

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

Books

Books

Books

José Manuel Ortega Candel | @jmortegac

top related