Seguridad en Android
-
Upload
jose-manuel-ortega-candel -
Category
Software
-
view
208 -
download
0
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