•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.
Encriptar los datos sensibles del usuario que se envían y reciben Detalles La información sensible(datos personales) se tiene que encriptar durante la transmisión o peticion de los mismos Resultado esperado La aplicación encrypta o cifra la información mediante alguno de los algoritmos soportados por el SDK
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] There are cases where it is appropriate for an application to write world readable files, but these should be reviewed carefully to ensure that they contain no private data that is leaked to other applications HardcodedDebugMode [Hardcoded value of android:debuggable in the manifest] AllowBackup [Missing allowBackup attribute]
is world-readable and world‐writable • WRITE_TO_EXTERNAL_STORAGE 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:name="com.example.app.permission.Provider"> </permission> protectionLevel="signature" – Permite limitar el acceso a componentes de aplicaciones firmadas con el mismo certificado
el acceso a ficheros myBrowserSettings.setAllowFileAccess(false); Usar la anotación @JavascriptInterface para aquellos métodos que queramos exponer en javascript
cifrar la base de datos con el algoritmo de encriptación AES 256 bits SQLiteDatabase myPrivateDB = openOrCreateDatabase("Contacts", MODE_PRIVATE, null);
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
PackageManager.getInstalledPackages(int) Comprobar nombres de paquetes,permisos y firmas Comprobar cada vez que se instala una aplicación a través del intent android.intent.action.PACKAGE_ADDED