Desarrollo seguro en componentes Librerías de encriptado OWASP Mobile Top Risks Security Ofuscación de aplicaciones Herramientas de pentesting /forensics
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
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.
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
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
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]
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
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
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
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
Permite cifrar la base de datos con el algoritmo de encriptación AES 256 bits SQLiteDatabase myPrivateDB = openOrCreateDatabase("Contacts", MODE_PRIVATE, null);
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