A medida que nuestros teléfonos ocupan un rol cada vez más imprescindible en nuestras vidas, liberar aplicaciones seguras se vuelve una necesidad para proteger a los usuarios finales. Así, el rol del pentester cobra relevancia para identificar comportamientos indeseados tales como permitir fugas de datos, ocasionar fallos en otras apps instaladas en el terminal, causar gastos imprevistos o denegar un determinado servicio a quien utiliza el equipo.
En anteriores publicaciones compartimos algunos consejos para desarrollo seguro en iOS. Probablemente te interese leer estos artículos, ya que te ayudarán a encontrar algunos errores que los desarrolladores cometen frecuentemente al crear aplicaciones para iOS. En esta oportunidad y a modo de complemento, compartimos algunos lineamientos que pueden servirte para guiar tu análisis.
1 – Ponte en los zapatos del programador
En la medida de lo posible, intenta conocer quiénes están detrás del desarrollo del código que estás auditando. Averigua cuál es el lenguaje en el que suelen trabajar la mayor parte del tiempo o aquel en el que fueron iniciados. La experiencia del programador suele transparentarse en la arquitectura de su código y, consecuentemente, la naturaleza de sus errores. Conocer al respecto puede indicarte en qué dirección investigar.
Por ejemplo, los programadores con un trasfondo de Java suelen replicar patrones de diseño incansablemente, abstrayendo una y otra vez la funcionalidad. Por otro lado, desarrollos móviles hechos por programadores web depositarán la mayor cantidad posible de funcionalidad en aplicaciones web, apoyándose mucho sobre el uso de WebKit. Ambos tipos de desarrolladores estarán acostumbrados a utilizar API de alto nivel, pero son susceptibles de cometer errores al manipular API de bajo nivel.
2 – Consigue el código fuente
Aunque no representa la posición en la que generalmente se encuentra un atacante, obtener el código fuente te ayudará a identificar la mayor cantidad de fallos en el menor tiempo posible. Los tests de penetración usualmente manejan recursos limitados de tiempo y dinero, por lo que es conveniente sacarles el mayor provecho posible. Tu meta no debiese ser imitar un escenario real de ataque, sino encontrar la mayor cantidad de vulnerabilidades para lograr que la aplicación final sea más segura.
Objective-C se presta muy bien a la ingeniería reversa y es posible obtener una mirada bastante transparente de los mecanismos internos de la aplicación, aun sin partir del código fuente. Un atacante con tiempo ilimitado podrá obtener una mirada aproximada –si no igual– a la que tendrás tú con el código. Mejor ahorra tiempo y dedica tu esfuerzo a encontrar esos fallos de seguridad.
3 – Ten en mente los puntos débiles del lenguaje
Aunque Objetive-C y Cocoa previenen algunos errores frecuentes de seguridad en C y C++, la utilización de API peligrosas como strcpy
y strcat
, o la mala implementación de mecanismos como las categorías o el method swizzling pueden causar comportamientos inesperados que deriven en serias fallas de seguridad. Por eso, asegúrate de investigar cómo estas técnicas impactan en la aplicación.
4 – Identifica posible reutilización de código vulnerable
Muchos programadores han desarrollado la mala costumbre de consultar foros de programación en línea y copiar código sin analizar realmente su funcionamiento, especialmente cuando se trata de funciones auxiliares de bajo nivel, conexiones de red o cifrado. Otros incorporan al código base librerías y desarrollos de terceros sin verificar si presentan fallos de seguridad. Esto puede llevar a encontrar el mismo código vulnerable a través de múltiples aplicaciones.
5 – Consigue dos equipos para testear: uno con jailbreak y otro de fábrica
Tener un dispositivo con el SO de fábrica te ayudará a evaluar cómo se comporta la aplicación en un entorno real de usuario final, con todos los mecanismos de seguridad habilitados y sin problemas para registrar notificaciones push. Por otra parte, podrás utilizar al dispositivo con jailbreak para analizar más detalladamente el sistema de archivos y la operatoria del sistema operativo.
Esperamos que estos consejos te ayuden a encontrar nuevas perspectivas de análisis para esa aplicación con la que estás trabajando.
Quizás te pueda interesar también: