Seguridad en aplicaciones Android: Asegurar componentes
Estrenamos nueva serie de tutoriales de Android, donde en este caso os mostraremos cómo proteger de posibles vulnerabilidades a los que se puede exponer nuestras aplicaciones.
Con los plazos de entrega tan ajustados que tenemos que cumplir y la cantidad de especificaciones que tenemos que realizar a la hora de desarrollar nuestras aplicaciones, solemos ir con bastantes prisas, lo que nos lleva en muchos casos a tener aplicaciones bastante inseguras, exponiéndolas no solo a ser hackeadas y redistribuidas por otros sino a la extracción de información sensible que en muchos casos puede ser un punto muy negativo para nuestra empresa.
Muchos los consejos y las recomendaciones de esta serie de tutoriales están recopiladas en un libro en el cual he contribuido y he aprendido siendo Reviewer oficial, el cual además de enseñar como proteger también nos enseña como violar la seguridad de aplicaciones Android. Android Security Cookbook.
Uno de los principales errores cuando desarrollamos nuestras aplicaciones, es que dejamos expuestas los componentes de nuestras aplicaciones (Activities, Servicios, Receivers...). El primer paso que vamos a ver para hacer de nuestras aplicaciones más seguras, es prevenir el acceso a estos componentes por otras aplicaciones.
Antes que nada debemos entender que necesidades tiene nuestro componente, por qué protegerlo y cuales son los riesgos a los que se enfrenta el usuario cuando "nos la intentan colar" con intents en nuestra app para acceder a la información sensible. Una vez que tenemos claro que peculiaridades tiene cada componente de nuestra aplicación, entonces podremos configurar el AndroidManifest.xml.
El secreto de esto reside en utilizar la etiqueta android:exported para evitar que terceras aplicaciones accedan a la nuestra o para proteger explicitamente nuestro componente del resto del sistema.
< [component name] android:exported="false" > < / [component name]>
Donde [component name] puede ser una actividad, un servicio o un receiver.
Importante: Si hacéis uso de este parámetro, deberéis utilizarlo para todo los componentes de ese mismo grupo, puesto que si solo lo aplicas en uno de ellos, también sobrescribirá este valor para todo los del mismo grupo.