Seguridad en Android

Post on 12-Jul-2015

208 views 0 download

Transcript of Seguridad en Android

Seguridaden Android

Diciembre 2014

https://speakerdeck.com/jmortega/

@jmortegac

DALVIK / ART/ APK / PERMISOS

MALWARE

TOOLS

SEGURIDAD EN COMPONENTES

ANÁLISIS ESTÁTICO ECLIPSE /ANDROID STUDIO

ENCRIPTACIÓN / OFUSCACIÓN

INGENIERÍA INVERSA

ANALIZADORES APK / FORENSICS

Dalvik vs ART(4.4)

DALVIK ART

Compilación

Just-In-Time (JIT)

Compilación

Ahead-Of-Time (AOT)

Cache se construye a

medida que se ejecutan

las aplicaciones

Cache se construye al

arrancar el dispositivo

Apps se compilan cuando

se ejecutan

Almacena las aplicaciones

compiladas

Mayor consumo espacio

interno

Settings>Developer options>Select runtime

Generar APK

ZIP + jarsigner+ zipalign

Obtener APK

Google Play

Markets alternativos (BlackMart, Fdroid, Aptoide)

Apk extractor

http://apps.evozi.com/apk-downloader

/data/data ROOT

$ adb shell

Detectar Root

private boolean isDeviceRooted(){

try{

Runtime.getRuntime().exec("su");

return true;

}catch(IOExeception ex){

return false;

}

}

public static boolean() isDeviceRooted(){

File f= new File("/system/sbin/su");

return f.exits();

}

Permisos

Instalar algún tipo de

aplicación que compruebe los

permisos.

Deshabilitar actualizaciones

automáticas.

Limitar permisos

Recomendaciones en permisos

Minimizar el número de permisos que se piden

33% aplicaciones piden más permisos de los

necesarios

¿Es necesario android.permission.CAMERA?

ContentValues contentValues = new ContentValues();

contentValues.put(MediaStore.Images.Media.DESCRIPTION, "Image capture");

contentValues.put(MediaStore.Images.Media.TITLE, "new image");

Uri uri =

getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,

contentValues);

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);

startActivityForResult(intent, 1);

Permissions in apps

<uses-permission android:name="android.permission.CAMERA" />

¿Donde está el permiso?

En la aplicación Google Camera

GoogleCamera.apk

Malware

• Instalar de orígenesconocidos

• Comprobar los permisosantes de instalar/actualizar

• Revisar comentarios de los usuarios

• Deshabilitar conexiónautomática a redes Wifi y evitar conectarnos a redesFree.

Recomendacionespara evitarmalware

Malware detection in Google play

BlueboxSecurity Scanner

SRT AppScanner

LookoutMobile Security

AdvancedMobile Care

MalwarebytesAnti-Malware

CM Security

foresafe.com/scan

mobilesandbox.org

andrototal.org

copperdroid

Firmar aplicaciones

Java keytool

$ keytool -genkey -v -keystore <keystore filename>

-alias <alias for key> -keyalg RSA -keysize 2048

-validity 10000

Android Studio

Tool included in Android SDK for apk compress and optimizing

$ zipalign -f 4 app-signed.apk final-app.apk

Build > Generate Signed APK

Shared preferences

Fichero xml almacenado en

/data/data/com.your.package/shared_prefs/preferences

.xml

No es recomendable almacenar información sensiblerelativa a nombres de usuario y contraseñas

Librería para securizar este fichero

https://github.com/scottyab/secure-preferences

ROOT

Secure Shared preferences ROOT

Webview

Webview best practices

Tener cuidado con librerías de terceros

No guardar passwords

No guardar datos de formularios

Limpiar Caché

webSettings.setSavePassword(false);

webSettings.setSaveFormData(false);

@Override public void onPageFinished(WebView view, String url) {

super.onPageFinished(view, url);

view.clearCache(true); //delete local files in the browser

}

SQLite

SQLiteDatabase db = dbHelper.getWriteableDatabase();

String userQuery = "SELECT lastName FROM useraccounts WHERE

userID = ?";

SQLiteStatement prepStatement =db.compileStatement(userQuery);

prepStatement.bindString(1, "userID");

prepStatement.simpleQueryForString();

Sentencias preparadas para evitar sql injection

rawQuery

compileStatement

OWASP Mobile Top 10 Risks

LINT ECLIPSE /ANDROID STUDIO Integrado en el the SDK

Permite detectar errores comunes de programación

ANDROID STUDIO

SONARQuBE http://www.sonarqube.org/

Encriptación en el teléfono

Soportado desde Android 3.0

Lleva 1h encriptar los datos

Implica una reducción del rendimiento

Ofuscación

Renombra clases, campos y métodos con nombre

cortos (a,b,c,..)

Ofuscación en proyectos androidProguard

Integrado en el SDK

http://developer.android.com/tools/help/proguard.html

Habilitar Proguard en eclipse

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-

project.txt

Ofuscación en proyectos androidHabilitar Proguard en android STUDIO

build.gradle

android {

buildTypes {

release {

runProguard true

proguardFile getDefaultProguardFile('proguard-android.txt') ,

'proguard-rules.pro'

}

}

Proguard.config-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity

-keep public class * extends android.app.Application

-keep public class * extends android.app.Service

-keep public class * extends android.content.BroadcastReceiver

-keep public class * extends android.content.ContentProvider

-keep public class * extends android.app.backup.BackupAgentHelper

-keep public class * extends android.preference.Preference

-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {

native <methods>;

}

-keepclasseswithmembernames class * {

public <init>(android.content.Context, android.util.AttributeSet);

}

-keepclasseswithmembernames class * {

public <init>(android.content.Context, android.util.AttributeSet, int);

}

-keepclassmembers enum * {

public static **[] values();

public static ** valueOf(java.lang.String);

}

-keep class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator *;

}

Renombrar .apk to .zip

Extraer zip que contiene el .dex

Ejecutar dex2jar

Abrir el .jar con java decompiler

Apk Tool

Convierte un fichero .apk file a un projecto android

$ apktool d target.apk output_directory

Dex2jar http://code.google.com/p/dex2jar

Convierte ejecutable Dalvik en fichero jar.

$ unzip target.apk

$ d2jdex2jar.sh classes.dex -o target.jar

Java Decompiler

http://java.decompiler.free.fr

APK to Java Decompiler https://github.com/skylot/jadx

Decompilar directamente desde apk

Virtuous Ten Studio

http://virtuous-ten-studio.com/

Sólo para windows

Virtuous Ten Studio

Virtuous Ten Studio

Androwarn

python androwarn.py -i my_apk.apk -r html -v 3

https://github.com/maaaaz/androwarn

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

Dexter online

https://dexter.bluebox.com

Dexter online

https://github.com/viaforensics/android-forensics

Forensics

Books

References http://code.google.com/p/dex2jar/

https://code.google.com/p/android-apktool

http://ashishb.net/security/android-security-related-tools

http://androidcracking.blogspot.com.es

http://developer.android.com/guide/topics/security/permissions.html

http://source.android.com/devices/tech/security/#android-

application-security

http://siis.cse.psu.edu/android_sec_tutorial.html