Recientemente publicamos la primera parte de esta serie de consejos de seguridad para tener en cuenta al momento de desarrollar aplicaciones para iOS. Para continuar profundizando en el tema, te invitamos a leer la segunda parte con nuevas recomendaciones.
#7 – Ten en cuenta que los WebKits no pueden actualizarse fácilmente
Muchos desarrolladores prefieren apoyarse sobre aplicaciones web antes que sobre la lógica de iOS. Este enfoque tiene diferentes ventajas como la facilidad de implementación, flexibilidad o capacidad de navegabilidad del contenido, y es común en sistemas multiplataforma que buscan abstraer la mayor parte de su código en una aplicación web central a la que se conectan clientes desde diferentes sistemas operativos.
Sin embargo, el uso de componentes como UIWebViews puede asociarse a ciertos riesgos de seguridad. Por ejemplo, las nuevas versiones de WebKit no se actualizan de manera independiente, sino que se despliegan empaquetadas con las nuevas versiones del sistema operativo; debido a esto, cualquier vulnerabilidad descubierta permanecerá en el equipo hasta que se actualice el SO.
Si tienes experiencia en el desarrollo web y estás pensando en centrar la mayor parte de la funcionalidad de tu app en el uso de WebKits, ten en cuenta que la falta de actualización puede dejar a tus usuarios estancados con una aplicación vulnerable.
#8 – Evita API peligrosas
Como mencionamos anteriormente, Objective-C y Cocoa ayudan a prevenir riesgos comunes en C y C++. Sin embargo, algunas API aún son vulnerables a ataques de robo de información o ejecución de códigos maliciosos. Existen muchas verificaciones de seguridad que debiesen llevarse a cabo durante la auditoría del código y es imposible mencionarlas a todas, pero ten en cuenta posibles errores al formatear incorrectamente strings provistas por el usuario (utiliza el especificador %@
) o al manejar la memoria (chequea que el tamaño de las entradas del usuario es la correcta y evita API como strcpy
y strcat
).
#9 – Utiliza Enlaces Universales para evitar URL Scheme Hijacking
En iOS, cuando dos aplicaciones de usuario registran el mismo esquema de URL, el comportamiento resultante es indeterminado; en otras palabras, cualquiera de las dos apps puede acabar procesando esa URL. Con esto en mente, el secuestro del esquema de URL es una técnica mediante la cual una app maliciosa registra en el equipo el mismo esquema que tu aplicación utiliza, pudiendo recibir equivocadamente los datos que a tu aplicación se envíen.
Para prevenir este tipo de comportamientos, Apple introdujo enlaces universales, o universal links, en iOS 9. Estos proveen una forma de integración entre sitios web y aplicaciones móviles, de forma que tu sitio, autenticado por HTTPS, especifica qué URL podrá abrirse en tu app, mientras que se garantiza que esa información no podrá ser enviada a otra app con diferente ID. Además, impide que un malware conozca qué apps hay instaladas en el equipo con el método canUseURL
.
#10 – Provee alternativas de autenticación a Touch ID y Face ID
La huella dactilar es un recurso muy útil para la verificación de identidades, pero tiene la desventaja de que dejamos copias de ella dondequiera que vamos. Además, puede ser requerida como evidencia física en investigaciones judiciales. Esto quizás fue lo que motivó a Apple a incluir un mecanismo para deshabilitar rápidamente los métodos de autenticación biométricos en iOS 11. Por eso, cuando utilices factores biométricos como método de autenticación, brinda a tus usuarios la posibilidad de usar también la vieja y confiable contraseña.
#11 – Ten cuidado con iBeacon y otras funcionalidades de geolocalización
iBeacon fue desarrollado para determinar la proximidad del usuario a ciertos equipos y, como podrás imaginar, resulta una fuente bastante precisa de información sobre su paradero. Cerciórate de que el usuario conoce que su ubicación está siendo compartida y no almacenes los datos de geolocalización si ya no los utilizarás. Además, siempre que almacenes datos de fecha y ubicación del equipo, hazlo de forma que no puedan ser correlacionados con un usuario específico a lo largo del tiempo.
#12 – Recuerda que no podrás almacenar la misma información para todos los usuarios
Las leyes de protección de la privacidad pueden diferir entre distintos tipos de usuarios y países. Por ejemplo, en Estados Unidos, los niños están sujetos a protecciones específicas bajo la ley COPPA y no podrás guardar ciertos datos si no posees el consentimiento verificado de un mayor. De cualquier manera, incluye siempre una política de privacidad en tu aplicación, estructurada en concordancia con la legislación local.
Además, ten en cuenta que, mientras más información almacenes, más susceptible serás de ser citado ante la justicia si alguno de los usuarios se ve involucrado en investigaciones penales.
En conclusión...
El desarrollo seguro es la mejor manera de asegurar la información de los usuarios que utilizarán nuestras aplicaciones. Siendo cuidadosos a cada paso del camino y procurando no cometer errores que hagan peligrar los datos manipulados, evitaremos recibir malas noticias en un test de penetración y vernos forzados a rediseñar por completo el sistema.
Esperamos que estos consejos te sean útiles y, si deseas que publiquemos algunos más, no olvides escribirnos en la sección de comentarios.