Análisis del tráfico de red de una aplicación móvil en iOS. Parte 1 - proxies


Hay situaciones en las que, al desarrollar o probar una aplicación móvil, se hace necesario ver el tráfico de red de la aplicación. ¿Sigue viendo el tráfico de aplicaciones móviles mostrándolo en la consola de su IDE? Hay herramientas más efectivas para esta tarea, por ejemplo, proxies. En este artículo, analizaremos los proxies HTTP (S) más populares, aprenderemos cómo usarlos en el desarrollo de iOS y los compararemos de acuerdo con varios criterios.


Además, hablaremos sobre el uso de proxies en el desarrollo de iOS, pero muchas cosas también son aplicables en el desarrollo de Android.


Precaución, debajo del corte muchas fotos.


Las herramientas para analizar el tráfico de red de una aplicación móvil se pueden dividir en:


  1. No requiere integración en el código fuente de la aplicación bajo prueba - proxy:
  2. Requerir integración en el código fuente de la aplicación bajo prueba. Estos incluyen principalmente marcos de depuración:

Esta es la primera parte del artículo en el que consideraremos el uso de proxies y los compararemos de acuerdo con varios criterios. En la segunda parte del artículo, revisaremos a fondo los marcos para la depuración.


Mitmproxi



Mitmproxy es un proxy HTTP (S) gratuito y de código abierto (~ 12,000 estrellas en github), que consiste en Mitmproxy, una utilidad de consola para el proxy de tráfico, mitmdump, una utilidad de consola adicional que presenta una funcionalidad similar a tcpdump, pero para HTTP (S) tráfico, así como mitmweb, la interfaz web para Mitmproxy.


Puede instalar Mitmproxy usando Homebrew:


brew install mitmproxy


O descargue la versión deseada de la página de lanzamiento del sitio web oficial.


Después de una instalación exitosa, para analizar el tráfico HTTP desde un simulador o dispositivo, debe especificar un proxy en la configuración de la red.


Para el simulador, debe activar los proxies HTTP y HTTPS en la configuración de red de Mac OS (Preferencias del sistema -> Red -> Avanzado -> Proxies):



Una pequeña secuencia de comandos bash para la activación / desactivación rápida de un proxy en la configuración de red para Wi-Fi en una Mac. (Una vez que registramos la IP y el puerto proxy en la configuración y luego usamos el comando proxy off o proxy off desde la consola).


Para interceptar el tráfico de un dispositivo real, debe especificar el proxy en la configuración de la red iOS, mientras que la dirección IP de la computadora que ejecuta Mitmproxy se establece como la dirección IP del proxy y el puerto 8080. (La dirección IP de la computadora se puede ver en Configuración> Red)



En esta etapa, ya podemos interceptar el tráfico HTTP, pero para interceptar el tráfico HTTPS, debe instalar certificados Mitmproxy en el simulador / dispositivo.
Para hacer esto, en el simulador, haga lo siguiente (para un dispositivo real, los pasos son similares):


  • Asegúrese de que Mitmproxy se esté ejecutando y que el proxy esté activado y registrado en la configuración de red (para el simulador - configuración de macOS, para el dispositivo - configuración de iOS), como se describió anteriormente. Ahora vaya al navegador en mitm.it y haga clic en el icono de Apple para descargar el certificado Mitmproxy. Aparecerá una alerta con un mensaje de que este sitio web está intentando abrir la configuración de iOS: haga clic en Permitir.


  • Luego instale el certificado Mitmproxy.


  • Y el último toque: para iOS versión 10.3 y superior, debe habilitar el acceso completo al certificado raíz de Mitmproxy. Para hacer esto, vaya a Configuración> General> Acerca de> Configuración de confianza de certificado y active el acceso completo para el certificado Mitmproxy.


Ahora podemos analizar el tráfico HTTPS desde el simulador. Queda por agregar una pequeña aclaración: el certificado se instala para un simulador específico, es decir, si lo hicimos solo para el simulador de iPhone X, entonces en el simulador de iPhone 8 debemos hacer lo mismo para que el proxy intercepte el tráfico HTTPS. Para interceptar el tráfico HTTPS desde un dispositivo real, todos los pasos son similares, lo principal es que está conectado a la misma red local que una computadora con Mitmproxy.


Después de eso, puede ejecutar mitmproxy desde la consola y sentirse como un hacker o cliente web mitmweb.


El cliente de la consola nos encuentra con una interfaz de tubo (para los amantes de la GUI, incluso hay soporte para el mouse), donde se muestran todas las solicitudes interceptadas.



Puede ver información detallada para cada solicitud (parámetros de solicitud, encabezados, respuesta, etc.)



Mitmproxy tiene un poderoso sistema de filtrado de consultas con soporte para expresiones regulares. Puede filtrar solicitudes por código, cuerpo de solicitud / respuesta, encabezados, dominio, etc. Llame a ayuda sobre accesos directos disponibles y expresiones de filtro haciendo clic ? . Por ejemplo, para borrar la lista de consultas para la sesión actual, simplemente puede presionar z , y para filtrar la lista de consultas por URL en la que está la palabra "manzana", debe presionar f y escribir una expresión de filtro por URL ~u apple , que toma una expresión regular.



Los fanáticos de Vim también estarán encantados con el soporte de hjkl. Casi nos olvidamos de un atajo muy importante q : funciona como un botón "atrás" cuando se mueve entre pantallas, y en la pantalla principal con una lista de consultas cuando hace clic en este atajo, Mitmproxy le ofrecerá salir del programa.
A pesar de la interfaz de la consola, usar Mitmproxy es un placer gracias a atajos convenientes y controles intuitivos simples. A continuación se muestra una pequeña tabla con los principales atajos.


AtajoDescripción
?Ayuda
zBorrar la lista de la sesión actual
fFiltrado de sesión
qAtrás (salir en la pantalla principal)
dEliminar solicitud de la lista de sesiones
rRepetir solicitud
eGuardar solicitud para archivar
gLista de sesiones principales
GAl final de la lista de sesiones.

Si todavía eres un ardiente oponente de la consola y reconoces solo las aplicaciones GUI, mitmweb tiene prisa por ayudarnos, por el momento lo lanzaremos también desde la consola, luego podremos hacer un acceso directo al escritorio.



El cliente web todavía está en pruebas beta y contiene solo la funcionalidad mitmproxy básica (suficiente para el 95% de las tareas), que se complementa gradualmente con nuevas características con cada nueva versión, pero a pesar de esto, ahora se puede usar y es muy conveniente. Algunos accesos directos de la versión de consola también funcionan aquí, por ejemplo, para borrar la lista de solicitudes para la sesión actual, simplemente presione z . También puede filtrar las solicitudes interceptadas a través del campo "Buscar", como lo hicimos en la aplicación de consola cuando aplicamos el filtro de ~u apple .



Mitmproxy afirma que admite el estándar Websocket, pero desafortunadamente la visualización de los marcos Websocket en la interfaz de usuario aún no se ha implementado y, según los desarrolladores, la funcionalidad de Websocket solo está disponible para la utilidad mitmdump.


Carlos



Charles es quizás el proxy HTTP (S) más popular para MacOS, su único inconveniente es que se paga, al momento de escribir, la licencia cuesta $ 50. Sin embargo, hay una versión de prueba: funciona durante 30 minutos, luego la aplicación debe reiniciarse y se pierde todo el historial de consultas. También hay retrasos de inicio de cinco segundos.


Después de la instalación y el primer inicio, Charles le pedirá que otorgue acceso para configurar automáticamente el proxy del sistema, seleccione "Conceder privilegios" o cambie la configuración del proxy del sistema cada vez de forma manual. Por lo tanto, el propio Charles cambiará y activará la configuración del proxy del sistema cuando se esté ejecutando; esto es conveniente al depurar en el simulador, pero en un dispositivo real tendrá que establecer manualmente la configuración del servidor proxy para la red, ya que el servidor proxy especifica la dirección IP de la computadora en ejecución Charles, como puerto - 8888.


En esta etapa, solo podemos ver el tráfico HTTP, para analizar el tráfico HTTPS desde un simulador o un dispositivo real, necesitamos instalar un certificado Charles en él, el procedimiento es similar a la instalación de un certificado Mitmproxy. Asegúrese de que el proxy esté ejecutándose y activado en la configuración de red de iOS (para un dispositivo real) o en la configuración de red de macOS (para un simulador). Luego iremos al simulador / dispositivo en el navegador en chls.pro/ssl , aparecerá una alerta con un mensaje de que este sitio web está intentando abrir la configuración de iOS: seleccione Permitir. Luego, seleccione Instalar para instalar el certificado. Después de instalar el certificado para iOS versión 10.3 y superior, debe habilitar el acceso completo al certificado raíz de Charles. Para hacer esto, vaya a Configuración> General> Acerca de> Configuración de confianza de certificado y active el acceso completo para el certificado de Charles.



Por último, debe configurar el proxy SSL en Charles, por defecto no descifra el tráfico HTTPS, incluso si ha instalado todos los certificados necesarios. Para activar el proxy SSL, vaya a Proxy> Ajustes de proxy SSL y active el proxy SSL, si está deshabilitado, entonces tenemos dos opciones: habilitar el proxy SSL para todos los dominios o solo para dominios específicos. Para habilitar el proxy SSL para todos los dominios, debe agregar una ubicación comodín: haga clic en el botón Agregar y especifique * en todos los campos, para que la configuración de SSL se vea así.



Para habilitar el proxy SSl solo para dominios específicos, debe agregarlos a la lista y asegurarse de que la ubicación de comodines esté deshabilitada. En este caso, Charles seguirá interceptando todo el tráfico, pero las solicitudes HTTPS para dominios que no estén en la lista no se descifrarán.


Al usar Charles, es conveniente usar filtros de intercepción de tráfico, que se pueden configurar en el menú Proxy> Configuración de grabación: puede especificar el protocolo, URL, puerto.



Ahora tenemos la capacidad de ver el tráfico HTTPS.



Charles también admite el protocolo Websocket y muestra mensajes al estilo de iMessage, parece conveniente.



El primer proxy de su tipo, Charles para iOS, merece una mención especial: la versión móvil de Charles, el precio en la tienda de aplicaciones en el momento de la escritura es de $ 9. La aplicación contiene la funcionalidad básica de la versión de escritorio: proxy del tráfico HTTP (S), visualización del contenido de solicitudes / respuestas y configuración automática conveniente de la configuración de proxy para una red Wi-Fi.



Burp Suite (Edición comunitaria)



Burp Suite es un cuchillo suizo de pentesters y hackers, que contiene una cantidad indecente de herramientas y funcionalidades. Uno de los módulos en Burp Suite es un proxy, que usaremos para analizar el tráfico HTTP (S). Hay dos versiones de la aplicación: Professional y Community Edition. La versión comunitaria es gratuita, no tiene un escáner de vulnerabilidades y hay un límite en el número de solicitudes por unidad de tiempo, pero a pesar de esto, la versión gratuita de la aplicación es una herramienta de prueba completa.


Después de iniciar la aplicación, debe agregar y activar el proxy yendo a Proxy> Opciones.



Luego debe asegurarse de que el interceptor de solicitud de intercepción esté apagado, de lo contrario, interceptará las solicitudes y las retendrá hasta que le diga qué hacer con esta solicitud: cancelarla o reenviarla al servidor. Por lo tanto, apáguelo, ahora no lo necesitamos.



A continuación, debe instalar el certificado Burp Suite en el simulador / dispositivo, este procedimiento ya debería ser muy familiar para nosotros después de instalar los certificados Mitmproxy y Charles. Lanzamos Burp Suite, y no olvidemos activar el proxy en la configuración de red de MacOS para el simulador o en iOS para el dispositivo real (consulte la sección Mitmproxy para saber cómo hacerlo), especifique la dirección IP de la computadora que ejecuta Burp Suite como servidor proxy, como el puerto - 8080. Luego vamos al navegador en el simulador e ingresamos la dirección http: // burp . Luego, haga clic en el botón en el sitio "Certificado CA" y descargue el certificado.



Luego instale el certificado. Después de instalar el certificado para iOS versión 10.3 y superior, debe habilitar el acceso completo al certificado raíz de Burp Suite. Para hacer esto, vaya a Configuración> General> Acerca de> Configuración de confianza de certificado y active el acceso completo para el certificado de Burp Suite.



Al ir a la pestaña Proxy -> Historial de HTTP, puede ver el tráfico HTTP (S) desde una aplicación móvil. Vale la pena señalar que la desventaja aquí es la falta de formato JSON en el cuerpo de la solicitud / respuesta.



El problema con el formato JSON se puede resolver instalando el complemento JSON Beautifier . Para instalar, vaya a la pestaña Extender> BApp Store, busque el JSON Beautifier en la lista de complementos y haga clic en instalar.



Ahora hay una pestaña adicional de JSON Beautifier con un hermoso JSON.



Burp Suite es compatible con el protocolo Websocket. Los mensajes de Websocket se pueden encontrar en la pestaña especial Proxy> Historial de WebSockets.



OWASP ZAP



Owasp ZAP es una creación de la comunidad de ciberseguridad mundialmente famosa Owasp, además, el proxy es de código abierto. Owasp ZAP a menudo se compara con Burp Suite, pero este último es inferior en popularidad. Owasp ZAP es completamente gratuito, no hay versiones PRO en comparación con Burp Suite.


Después de iniciar la aplicación, debe verificar la configuración del proxy Preferencias> Proxies locales, la configuración predeterminada debería tener este aspecto.



Luego vaya a Preferencias> Certificados SSL dinámicos para exportar el certificado SSL. Haga clic en el botón Guardar y guarde el certificado, por ejemplo, en el escritorio.



A continuación, simplemente arrastre el archivo del certificado al simulador y se abrirá una ventana que ofrece instalar el certificado, estamos de acuerdo y lo instalamos. Después de instalar el certificado para iOS versión 10.3 y superior, debe habilitar el acceso completo al certificado raíz OWASP ZAP. Para hacer esto, vaya a Configuración> General> Acerca de> Configuración de confianza de certificado y active el acceso completo para el certificado ZAP de OWASP.



Ahora tenemos la capacidad de ver el tráfico HTTPS. JSON, desafortunadamente, no tiene un formato hermoso aquí y hasta ahora no hemos podido solucionar esta situación, en casos extremos, puede usar un formateador JSON de terceros, por ejemplo, este .



OWASP ZAP es compatible con el protocolo Websocket. Los mensajes de Websocket se pueden encontrar en una pestaña especial WebSockets, también es conveniente seleccionar el "canal" para filtrar por dominio.



Fijación SSL


Si se implementa el anclaje SSL en su aplicación, no verá el tráfico de la aplicación proxy, ya que el proxy utiliza su propio certificado para SSL, en este caso hay 4 opciones:


  1. Deshabilite temporalmente el anclaje SSL mientras depura las solicitudes de red utilizando un proxy.
  2. Agregue un certificado proxy / clave pública a los certificados / claves depurados para las compilaciones de depuración.
  3. Use su certificado de servidor para el proxy en lugar de su propio certificado generado por él.
  4. En lugar de usar un proxy externo, use un marco de depuración (la lista de marcos se indica al comienzo del artículo), que interceptará y mostrará solicitudes y respuestas directamente en la aplicación, pero esto requiere integración en el código fuente de la aplicación existente, más sobre estas herramientas en el siguiente artículo.

Resumen


Comencemos con Charles. Quizás el mejor proxy para aquellos que quieren que todo funcione de la caja y sea lo más fácil de usar posible, aunque Charles puede sorprender al usuario en algunos puntos, la funcionalidad del proxy es muy extensa, también tiene la interfaz más hermosa y nativa para macOS de todo lo descrito en el artículo proxy. Si no le importa gastar $ 50 para tal instrumento, entonces esta es su elección.


Pasemos a Burp Suite. La herramienta más poderosa, de acuerdo con una cierta funcionalidad e incluso la facilidad de uso, en algunos casos le da a Charles posibilidades, además, hay un sistema para expandir la funcionalidad en forma de complementos. Burp Suite se ha establecido durante mucho tiempo como una herramienta muy confiable y precisa en las manos adecuadas. Si carece de la funcionalidad de su proxy actual, le aconsejo que preste atención a esta instancia.


Ahora es el turno de Mitmproxy, un proxy joven y prometedor, que está ganando popularidad activamente, y que está siendo desarrollado por la comunidad Open Source. El más controvertido de los proxies que vimos, pero al mismo tiempo no menos interesante. Mitmproxy se destaca de sus competidores por su interfaz de usuario de consola increíblemente conveniente, simple y funcional. También es posible usar la interfaz web de Mitmweb, pero ahora está en pruebas beta debido a que es posible que sea raro, pero aparecen errores, no hay parte de la funcionalidad avanzada de Mitmproxy (que se está completando gradualmente), y también es ligeramente inferior en conveniencia para más competidores nativos. El soporte para el protocolo Websocket también fue decepcionante, por así decirlo, pero no hay pantalla en la interfaz de usuario o simplemente no aprendimos cómo prepararlo, porque no pudimos hacer que Mitmproxy mostrara mensajes de Websocket, aunque no tuvimos tales problemas con otros servidores proxy.


Y el último en la lista, pero no menos interesante fue Owasp ZAP. De las ventajas, hay un sistema de complemento expandible (subjetivamente, su número es menor que para Burp Suite), pero desafortunadamente no pudimos configurar una hermosa pantalla JSON en el cuerpo de solicitud / respuesta, que es un criterio bastante crítico al elegir un proxy para el desarrollo móvil. Sin embargo, Owasp ZAP tiene un sistema avanzado para probar el tráfico Websocket, así como el gran nombre de los desarrolladores de la comunidad Owasp detrás de mí, por lo que no lo descartaría y lo tenía en mente para casos raros y complejos.


A continuación se muestra una tabla de resumen subjetivo de los proxies que analizamos.


criterio / poderMitmproxiCarlosBurpsuite (CE)Owasp zap
Formato JSON+++-
Edición y repetición de consultas++++
Soporte websocket-+++
Software libre+-++

Terminaremos aquí, esperamos que el artículo sea útil, también estaremos encantados de comentar y si comparte su experiencia en el campo de las pruebas y el monitoreo del tráfico de aplicaciones móviles.

Source: https://habr.com/ru/post/es421493/


All Articles