Seguridad en Android

55
Seguridad en Android Diciembre 2014

Transcript of Seguridad en Android

Page 1: Seguridad en Android

Seguridaden Android

Diciembre 2014

Page 2: Seguridad en Android

https://speakerdeck.com/jmortega/

@jmortegac

Page 3: Seguridad en Android

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

Page 4: Seguridad en Android

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

Page 5: Seguridad en Android

Generar APK

ZIP + jarsigner+ zipalign

Page 6: Seguridad en Android

Obtener APK

Google Play

Markets alternativos (BlackMart, Fdroid, Aptoide)

Apk extractor

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

Page 7: Seguridad en Android

/data/data ROOT

$ adb shell

Page 8: Seguridad en Android

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

}

Page 9: Seguridad en Android
Page 10: Seguridad en Android

Permisos

Instalar algún tipo de

aplicación que compruebe los

permisos.

Deshabilitar actualizaciones

automáticas.

Page 11: Seguridad en Android

Limitar permisos

Page 12: Seguridad en Android

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

Page 13: Seguridad en Android

Permissions in apps

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

¿Donde está el permiso?

En la aplicación Google Camera

GoogleCamera.apk

Page 14: Seguridad en Android
Page 15: Seguridad en Android

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

Page 16: Seguridad en Android

Malware detection in Google play

BlueboxSecurity Scanner

SRT AppScanner

LookoutMobile Security

AdvancedMobile Care

MalwarebytesAnti-Malware

CM Security

Page 17: Seguridad en Android

foresafe.com/scan

mobilesandbox.org

andrototal.org

copperdroid

Page 18: Seguridad en Android
Page 19: Seguridad en Android

Firmar aplicaciones

Java keytool

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

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

-validity 10000

Page 20: Seguridad en Android

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

Page 21: Seguridad en Android
Page 22: Seguridad en Android

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

Page 23: Seguridad en Android

Secure Shared preferences ROOT

Page 24: Seguridad en Android

Webview

Page 25: Seguridad en Android

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

}

Page 26: Seguridad en Android

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

Page 27: Seguridad en Android

OWASP Mobile Top 10 Risks

Page 28: Seguridad en Android
Page 29: Seguridad en Android

LINT ECLIPSE /ANDROID STUDIO Integrado en el the SDK

Permite detectar errores comunes de programación

Page 30: Seguridad en Android

ANDROID STUDIO

Page 31: Seguridad en Android

SONARQuBE http://www.sonarqube.org/

Page 32: Seguridad en Android
Page 33: Seguridad en Android

Encriptación en el teléfono

Soportado desde Android 3.0

Lleva 1h encriptar los datos

Implica una reducción del rendimiento

Page 34: Seguridad en Android
Page 35: Seguridad en Android

Ofuscación

Renombra clases, campos y métodos con nombre

cortos (a,b,c,..)

Page 36: Seguridad en Android

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

Page 37: Seguridad en Android

Ofuscación en proyectos androidHabilitar Proguard en android STUDIO

build.gradle

android {

buildTypes {

release {

runProguard true

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

'proguard-rules.pro'

}

}

Page 38: Seguridad en Android

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

}

Page 39: Seguridad en Android
Page 40: Seguridad en Android

Renombrar .apk to .zip

Extraer zip que contiene el .dex

Ejecutar dex2jar

Abrir el .jar con java decompiler

Page 41: Seguridad en Android

Apk Tool

Convierte un fichero .apk file a un projecto android

$ apktool d target.apk output_directory

Page 42: Seguridad en Android

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

Convierte ejecutable Dalvik en fichero jar.

$ unzip target.apk

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

Page 43: Seguridad en Android

Java Decompiler

http://java.decompiler.free.fr

Page 44: Seguridad en Android

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

Decompilar directamente desde apk

Page 45: Seguridad en Android

Virtuous Ten Studio

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

Sólo para windows

Page 46: Seguridad en Android

Virtuous Ten Studio

Page 47: Seguridad en Android

Virtuous Ten Studio

Page 48: Seguridad en Android

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

Page 49: Seguridad en Android
Page 50: Seguridad en Android

Dexter online

https://dexter.bluebox.com

Page 51: Seguridad en Android

Dexter online

Page 52: Seguridad en Android

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

Forensics

Page 53: Seguridad en Android

Books

Page 54: Seguridad en Android

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

Page 55: Seguridad en Android