Las aplicaciones móviles manejan información muy valiosa de los usuarios que las utilizan: fotos y videos, tarjetas de crédito, sesiones bancarias, documentos personales y empresariales, y mucho más. Para sus desarrolladores, la misión es crear apps que cumplan su cometido sin poner en riesgo a quienes las utilizan. Por ello, a continuación ofrecemos algunos consejos que todo programador de iOS debiese considerar.
#1 – No pierdas tiempo en mecanismos para detectar jailbreaking
En un escenario real, los atacantes no tendrán límites de tiempo para probar diferentes formas de evadir los algoritmos de detección de jailbreaking que hayas puesto y, eventualmente, lograrán saltar estos controles. Puedes incluirlos para añadir algunas horas extras a su trabajo, pero ten la certeza de que un atacante con suficiente experiencia encontrará la solución tarde o temprano –usualmente, dentro de las 48 horas–. Lo mismo aplica para las diferentes técnicas de ofuscación de binarios o DRM.
#2 – Borra los archivos sensibles de manera correcta
Cuando manejes información sensible, ten en cuenta que esta puede quedar remanente en el sistema de diferentes formas. Recuerda eliminar cualquier información que pueda haber sido cacheada. Piensa que si compartes información con otras apps, pierdes control de ella y puede quedar almacenada indefinidamente. Por ejemplo, si tu aplicación necesita abrir un archivo, pero no puede hacerlo ella misma, este se transferirá a una app de terceros y se almacenará en su carpeta Documents/Inbox, donde permanecerá hasta que esa otra aplicación decida borrarlos.
#3 – Trata las advertencias de Xcode como errores
Mientras estés trabajando en tu entorno de desarrollo, eleva la criticidad de las advertencias en las configuraciones del entorno y trátalas como errores. La mayor parte de las advertencias generadas por Clang, el analizador estático de Xcode, pueden evitar grandes dolores de cabeza si se solucionan pronto. No solo permiten reducir la complejidad del código y asegurar una sintaxis correcta, sino que además ayudan a identificar errores que suelen ser difíciles de detectar, como formatos incorrectos o errores de firmado (signed o unsigned), y que pueden derivar en vulnerabilidades de manejo de memoria. Además, es recomendable habilitar todos los chequeos estáticos de Clang para identificar el uso de API peligrosas o el procesamiento inseguro de datos de entrada.
#4 – Confía en Cocoa en vez de parchear
Tanto Objective-C como Cocoa son de alto nivel y previenen muchos de los clásicos errores de seguridad comúnmente encontrados en C. Claro que aún existen formas de introducir fallos en el manejo de memoria o la manipulación de objetos, pero no debiesen producir más que una denegación de servicio. Por ello, utiliza Cocoa siempre que sea posible y evita añadir código en C o C++.
#5 – Saca el mayor provecho de ASLR
ASLR (Address Space Layout Randomization) asegura que la estructura del programa y sus datos sean cargados en memoria en áreas menos predecibles del espacio virtual de direcciones. Esto incluye al ejecutable principal, las librerías, el heap y stack, y cualquier otro archivo que necesite ser mapeado. Este mecanismo dificulta la ejecución de exploits de ejecución de código y está presente desde iOS 4.3.
No obstante, para que esto sea efectivo, debes crear tu aplicación como PIE (Position Independent Executable). Esto indicará al compilador que cree código máquina capaz de ser ejecutado en cualquier parte de la memoria. Para lograrlo, tu Deployment Target debe ser al menos iOS 4.3, y dentro de Build Settings deberás indicar “No” para “Generate Position-Dependent Code” y también para “Don’t Create Position Independent Executable”.
#6 – Audita también el código de terceros
Realizar testeos de penetración del código propio no será suficiente para garantizar que el resultado final esté libre de fallos de seguridad. Cuando incluyas código de terceros en tu proyecto, asegúrate de que este no introduce vulnerabilidades en tu aplicación final. Chequea el manejo de conexiones TLS, la verificación de entradas externas, el almacenamiento de datos sensibles, la utilización de categorías y cualquier otra fuente de fallos que verificarías en tu código base.
Hasta aquí ha llegado esta primera entrega sobre desarrollo seguro en iOS. Recuerda que también puedes consultar las guías de seguridad en iOS de Apple, los foros de desarrolladores o la guía de introducción al desarrollo seguro. Si quieres conocer más sobre el tema, te invitamos a leer la segunda parte de este post que incluye seis recomendaciones más para el desarrollo seguro de apps para iOS.
Te puede interesar también:
10 consejos para el desarrollo seguro de aplicaciones