como darle seguridad a una aplicacion en android


Hoy hablaremos un tema muy importante, como brindarle seguridad a nuestras aplicaciones hechas en android. Empezamos comentando algo básico, usar términos como 100% seguro u 80% son palabras bonitas inventadas para el marketing de un producto, para los que están en las carreras de informática, software y afines entenderán que hablar de seguridad en este contexto es muy efímero y no hay nada seguro, pues lo que es para hoy una solución, con el avance de la tecnología mañana seria inservible. 
El sistema operativo Android tiene un montón de características de seguridad incorporadas, tales como la zona de pruebas de aplicaciones, protección contra ataques de desbordamiento de búfer, y áreas de memoria segregadas para instrucciones de programas y datos. Y si hablamos de simples aplicaciones que no comprometen a los accesos  de archivos u datos del sistema es de por si muy seguro.

Si estás desarrollando una aplicación más compleja, sin embargo, es tu responsabilidad para que sea seguro y proteger la privacidad de tus usuarios. En este artículo, voy a enumerar algunas de las mejores prácticas que puede seguir para construir una aplicación para Android,seguro de que no se filtre datos o permisos, y es, en general, menos vulnerables a las aplicaciones maliciosas que puedan estar instalados en el el dispositivo del usuario.

1. Uso de almacenamiento interno de datos confidenciales
Cada aplicación para Android tiene un directorio de almacenamiento interno asociado a él cuya trayectoria se basa en el nombre del paquete de la aplicación. Archivos dentro de este directorio son muy seguros, ya que utilizan el modo de creación de archivos MODE_PRIVATE por defecto. Esto significa que los archivos no pueden ser accedidos por cualquier otra aplicación en el dispositivo. Por lo tanto, es un mejor lugar para almacenar todos los datos sensibles de su aplicación en el directorio de almacenamiento interno.

Para determinar la ruta absoluta del directorio de almacenamiento interno de su aplicación, se recomienda que utilice el método getFilesDir (). Una vez que conozca su camino, haciendo referencia a los archivos dentro, es tan simple como hacer referencia a archivos dentro de cualquier otro directorio. Por ejemplo, he aquí cómo se podría hacer referencia a un archivo llamado myfile.dat en el directorio de almacenamiento interno de su aplicación:

File myFile = new File(getFilesDir(), “myfile.dat“);

2. Cifrar los datos en almacenamiento externo
La capacidad de almacenamiento interno de un dispositivo Android es a menudo limitada. Por lo tanto, a veces, es posible que no haya más remedio que almacenar datos sensibles en medios de almacenamiento externos, tales como una tarjeta SD extraíble.

Debido a que los datos en medios de almacenamiento externo se puede acceder directamente por los usuarios y otras aplicaciones en el dispositivo, es importante que usted lo almacene en un formato codificado. Uno de los algoritmos de cifrado más populares utilizados por los desarrolladores de hoy en día es AES, siglas de Advanced Encryption Standard, con un tamaño de clave de 256 bits.

Escribir código para cifrar y descifrar datos de la aplicación utilizando el paquete de javax.crypto, que se incluye en el SDK de Android, puede ser confuso. Por lo tanto, la mayoría de los desarrolladores prefieren usar las bibliotecas de terceros, tales como la biblioteca Facebook’s Conceal, que son por lo general mucho más fácil trabajar con ellos.

3. El uso de HTTPS
Este tema ya lo hemos tratado en otros artículos donde hacíamos nuestras conexiones desde la aplicación hacia una web service por medio de Https.
Todas las comunicaciones entre la aplicación y los servidores deben ser a través de una conexión HTTPS, preferentemente utilizando la clase HttpsURLConnection. Si cree que el uso de HTTP para datos está bien, se equivoca.

Muchos usuarios de Android se conectan a varios puntos de acceso Wi-Fi en las zonas comunes abiertas todos los días. Algunos de estos puntos de acceso podrían ser maliciosas. Un punto de acceso malicioso puede modificar fácilmente el contenido de tráfico HTTP para que su aplicación se comporta de una manera inesperada, o, peor aún, inyectar anuncios o explota en ella.

Mediante el uso de HTTPS, siempre y cuando el servidor está configurado con un certificado expedido por una autoridad de certificación de confianza, como DigiCert o GlobalSign, puede estar seguro de que el tráfico de su red es segura tanto contra el espionaje y los ataques man-in-the-middle.

Si su aplicación tiene una gran cantidad de código de red y que tienen miedo de que sin darse cuenta puede ser el envío de algunos datos como texto plano, se debe considerar el uso de nogotofail, una herramienta de código abierto construido por Google para encontrar este tipo de errores.

4. Uso GCM en lugar de SMS
Antes, cuando GCM, abreviatura de Google Cloud Messaging,”Google mensajería en la nube”, no existía, muchos desarrolladores estaban usando SMS para enviar datos de sus servidores para sus aplicaciones. Hoy en día, esta práctica ha desaparecido en gran parte.

Si usted es uno de los desarrolladores que todavía no se ha hecho el cambio de SMS a GCM, usted debe saber que el protocolo SMS no está codificado ni es seguro contra ataques de suplantación. Lo que es más, un SMS puede ser leído por cualquier aplicación en el dispositivo del usuario que tiene el permiso READ_SMS.

GCM es mucho más seguro y es la forma preferida para empujar mensajes a una aplicación, porque todas las comunicaciones GCM están encriptadas . Ellos se autentican utilizando fichas de registro actualiza de forma regular en el lado del cliente y una clave de API única en el lado del servidor.

5. No soliciten datos personales
La privacidad de los usuarios se le da mucha importancia en estos días. De hecho, hay leyes, como la Directiva de Protección de Datos de la Unión Europea y la Ley de Protección de Información Personal y Documentos Electrónicos de Canadá, los cuales exigen la protección de la privacidad de un usuario. Por lo tanto, a menos que tenga una buena razón y una infraestructura muy pero muy segura para recoger, almacenar y transmitir información personal del usuario, se debe evitar pedir directamente en sus aplicaciones.

Un mejor enfoque para la autenticación del usuario y la información de perfil de usuario es a través de la Plataforma de Identidad Google. Identidad de la Plataforma Google permite a los usuarios registrarse de forma rápida en su aplicación a través de su cuenta de Google. Después de una señal de éxito en medio de la plataforma, siempre que sea necesario, su aplicación puede fácilmente buscar varios detalles sobre el usuario, como el nombre del usuario, dirección de correo electrónico, foto de perfil, contactos, y mucho más. Como alternativa, puede utilizar los servicios gratuitos como Firebase que puede administrar la autenticación de usuario para usted.

Si tiene que manejar las credenciales de usuario a sí mismo, se recomienda que almacene y transmitirlas en forma de hash seguras. La forma más sencilla de generar diferentes tipos de hash utilizando el SDK de Android es mediante el uso de la clase MessageDigest.

He aquí un pequeño fragmento de código que muestra cómo crear un hash de la cadena Hello World mediante la función hash SHA-256:

// Initialize MessageDigest to use SHA-256
MessageDigest md = MessageDigest.getInstance(“SHA-256”);

// Convert the string to a hash
byte[] sha256Hash = md.digest(“Hello World”.getBytes());

6. Validar entrada de usuario
En Android, la entrada del usuario no válido no suele dar lugar a problemas de seguridad como desbordamientos de búfer. Sin embargo, si se permite a los usuarios interactuar con una base de datos SQLite o un proveedor de contenidos que utiliza internamente una base de datos SQLite, debe rigurosamente desinfectar la entrada del usuario o hacer uso de consultas con parámetros. De no hacerlo, hace que sus datos sean vulnerables a los ataques de inyección SQL.

En una nota similar, la validación de entrada del usuario y la desinfección también es muy importante si usted está utilizando la entrada del usuario para generar dinámicamente el código para funcionar en un motor de scripting embebido, como Mozilla Rhino.

7.Antes Publicar utilizar ProGuard 
Las medidas de seguridad integradas en una aplicación para Android se pueden comprometer seriamente si los atacantes son capaces de poner sus manos en el código fuente. Antes de publicar su aplicación, se recomienda hacer uso de una herramienta llamada ProGuard, que se incluye en el SDK de Android, para ofuscar y compactar el código fuente.

Android Studio incluye automáticamente ProGuard en el proceso de construcción si el buildtype está listo para lanzar. La configuración por defecto ProGuard disponibles en el archivo Proguard-android.txt del SDK de Android es suficiente para la mayoría de aplicaciones. Si desea agregar reglas personalizadas para la configuración, puede hacerlo dentro de un archivo llamado proguard-rules.pro, que es una parte de cada proyecto Android Studio.

——————————————————————————————————————–
Espero que ahora tengan una mejor comprensión de cómo hacer que sus aplicaciones de Android sean mas seguras. La mayor parte de las mejores prácticas que he mencionado en este artículo sólo son aplicables si está utilizando el SDK de Android para desarrollar sus aplicaciones. Si está utilizando el NDK de Android en su lugar, usted tiene que ser mucho más cuidadoso, ya que la programación en el lenguaje C, se espera gestionar los detalles de la aplicación en  bajo nivel, tales como punteros y asignación de memoria a sí mismo.

Para obtener más información sobre la seguridad en Android, se puede hacer referencia a los documentos de seguridad AOSP.

0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *