5. 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
6. 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
7. 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.
8. 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
9. 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
16. 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]
17. Agnitio tool
http://sourceforge.net/ projects/agnitiotool
Análisis estático
Decompilar APK
Buscar llamadas a funciones
que pueden suponer un
riesgo
Recomendaciones +
checklist
18. 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...
37. Permisos en runtime v6
Normal permissionsSe proporcionan de forma
automática
Dangerous permissionsEl usuario decide si darle
permiso o no
38. 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”/>
39. 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
40. Almacenamiento
en ficheros
• MODE_WORLD_READABLE
• MODE_WORLD_WRITABLE
• MODE_PRIVATE
/mnt/sdcard is world-
readable and world‐writable
• WRITE_TO_EXTERNAL_STO
RAGE 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
41. 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
42. 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
43. 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
46. 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);
49. 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
54. Detectar Root
Permisos lectura /escritura sobre la carpeta system
Comprobar acceso a los ficheros de las aplicaciones dentro
de /data/data/<package_name>
61. 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