Cómo rastrear el tráfico HTTPS de un dispositivo iOS



Hola, me llamo Andrey Batutin, soy desarrollador sénior de iOS en DataArt y hoy detectaremos el tráfico HTTPS de tu iPhone.

FoodSniffer y con qué se come


Tomemos, por ejemplo, la muy simple aplicación de iOS FoodSniffer . Según la hora del día, muestra al usuario qué comer.



La aplicación recibe del servidor JSON del formulario:

[ { "name" : "soup", "consumePeriod" : "morning" }, … ] 

El servidor en este caso es Dropbox, y JSON se puede ver aquí .

Problema número 1


Se produjo un error que, en lugar de dos elementos en la lista de alimentos permitidos en la mañana, la aplicación muestra solo uno.

Una forma de verificar qué salió mal es ver el JSON que el servidor le devuelve.

¿Cómo oler el tráfico?


Suponga que su computadora MacOS y su dispositivo iOS están en la misma red local, que se parece a esto:



El tráfico pasa de un dispositivo iOS a través de un enrutador a un servidor, independientemente del tráfico de la computadora.

Para leer el tráfico de un dispositivo iOS, necesitamos que pase por nuestra Mac. Algo como esto:



Además, necesitaremos un servidor proxy HTTP / S, con el que veremos / modificaremos el tráfico que pasa del dispositivo iOS.

Otra tarea muy importante es poder detectar el tráfico HTTPS . El problema es que el protocolo HTTPS se creó de modo que, a excepción del cliente y el servidor, nadie podía leer lo que se transmite en las solicitudes HTTPS. Por lo tanto, el proxy HTTPS también debe entregar un certificado SSL , que es necesario para trabajar con el tráfico HTTPS.

En otras palabras, necesitamos implementar el ataque M an-in-the-Middle en nuestra propia red.



Aplicación de proxy de depuración web de Charles


Como puede ver, rastrear el tráfico HTTPS es una tarea de varias etapas, por lo tanto, para simplificar mi vida tanto como sea posible, uso Charles Proxy .

Comencemos con los contras:

  • Se paga, pero la única limitación que se encuentra en la versión de prueba es que Charles no trabaja más de 30 minutos, luego debe reiniciarse. Todavía hay retrasos de cinco segundos en el inicio. Es molesto, pero puedes vivir.
  • Si necesita una herramienta de hacker genuina para trabajar en un servidor remoto 24/7, e incluso con una CLI normal, Charles no es para usted.
  • Si está trabajando en Windows, es mejor que tome Fiddler , que también es gratuito.
  • Si necesita un servidor proxy para una gran cantidad de dispositivos (más de dos o tres), Charles no es para usted.
  • Si necesita trabajar con paquetes TCP / IP en forma pura, tome Wireshark .

Ahora los pros:

  • Interfaz de usuario amigable. Charles no requiere ningún conocimiento especial para instalar, configurar o usar. Aplicación de ventana normal de MacOs.
  • HTTPS para iOS: Charles tiene un conjunto de herramientas que hacen que HTTPS detecte desde su dispositivo iOS lo más simple posible.
  • Funcionalidad: Charles puede oler, modificar el tráfico que lo atraviesa, simular una Internet lenta, recopilar estadísticas, importar / exportar tráfico en varios formatos.
  • Disponible para Windows y Linux.

Para mí, esta es la mejor solución para la relación de funcionalidad y facilidad de uso cuando se trabaja con dispositivos iOS.

Configuración de dispositivos Charles e iOS


A continuación se describe el procedimiento de configuración inicial para que un dispositivo iOS funcione con Charles Proxy.

1. Inicie Charles en la computadora:



2. Instale Charles Root Certificate en su dispositivo iOS:

En el menú, seleccione Ayuda -> Proxing SSL -> Instalar certificado Charles Root en dispositivo móvil o navegador remoto.



Aparecerá la siguiente ventana:



3. En la configuración de red del dispositivo iOS, especifique la IP y el puerto de Charles Proxy:



Dependiendo de la arquitectura de su red, la dirección IP que Charles está ejecutando puede variar.

4. Abra el navegador en el dispositivo iOS y siga el enlace: http://chls.pro/ssl .



5. Instale el certificado SSL de Charles en el dispositivo:



6. Indicamos en la configuración del dispositivo que confiamos plenamente en este certificado:



La sexta etapa es necesaria para dispositivos con iOS 10 y superior.

En las etapas 5–6, instalamos un certificado SSL en el dispositivo Charles e indicamos que confiamos en él. Es decir, ahora todo el tráfico HTTPS firmado con este certificado no será bloqueado por ATS .

Cómo ver el tráfico del dispositivo iOS


Abre la aplicación FoodSniffer . Si la configuración del proxy se realizó correctamente, debería ver una pantalla como esta:



En Charles Proxy, vaya a Herramientas -> Sin almacenamiento en caché.

Y apague por completo el almacenamiento en caché en el servidor proxy.



La aplicación implementa Pull-to-refresh, después de actualizar la lista de productos, debería ver https://www.dropbox.com en la lista del lado izquierdo de Charles. Haga clic derecho sobre él y seleccione Habilitar proxy SSL .



Después de eso, actualice la lista de productos en la aplicación nuevamente. Ahora deberías ver algo como esto:



Ahora podemos leer libremente el tráfico HTTPS que proviene de la aplicación en Dropbox para nuestro JSON.

¡Pero eso no es todo!

Dropbox no proporciona JSON directamente desde el host de dropbox.com. En cambio, devuelve 302 respuestas y redirige a otro host desde el que se descargan los datos.

Puede encontrarlo mirando la Respuesta sin formato de la siguiente consulta:



En este caso, es -
uc9c29db95802af8490afc3afda9.dl.dropboxusercontent.com .

Lo más probable es que tenga un host ligeramente diferente.

Luego habilite el proxy SSL: habilitado para ello.

Estamos actualizando FoodSniffer nuevamente.

¡Y ahora finalmente podemos ver el JSON real, que muestra la aplicación!



Vemos que solo tenemos un tipo de comida por la noche: whisky, escríbalo al líder de nuestro equipo e ir a tomar café, el problema no está de nuestro lado.

* El proyecto utiliza JSON ya corregido, con dos tipos de comida para la noche: cerveza y whisky.
* Si no ve el host http://uc9c29db95802af8490afc3afda9.dl.dropboxusercontent.com o similar en la lista del lado izquierdo de la ventana, intente actualizar la lista de productos en la aplicación varias veces.

Problema No. 2, o Cómo cambiar el tráfico HTTPS de un dispositivo iOS


El equipo de backend arregló el menú para la noche, y ahora el JSON está formado correctamente. Pero, ¿qué pasa si es de mañana y no tengo ganas de esperar hasta la noche para comprobar la solución?

Una opción es usar Charles para cambiar el JSON que viene de Dropbox.

En este caso, debemos cambiar el consumo de Período de la tarde a la mañana .

Para hacer esto, seleccione Herramientas -> Reescribir en el menú.

En la ventana Reescribir configuración que aparece, agregue una nueva categoría para sobrescribir: dropbox .



Agregue el host especificando el puerto https en el menú Editar ubicación :



Después de eso, agregamos reglas de reescritura en el menú Rewrite Rule de la siguiente manera:



Es decir, ahora en cada Cuerpo de la respuesta de nuestro servidor, la palabra tarde será reemplazada por la palabra mañana .

Si es necesario, podemos cambiar cualquier parte de la solicitud / respuesta HTTP, además de usar una expresión regular para reemplazar el texto.

Ahora, habiendo actualizado la lista, deberíamos ver cuatro tipos de productos:



Conclusión


Charles es bastante simple, shareware, tiene una rica funcionalidad de proxy HTTPS. Desde mi punto de vista, funciona mejor cuando se trabaja con dispositivos MacOS e iOS.

Esto está lejos de ser la única forma de detectar el tráfico. Para el tráfico HTTP / S, Fiddler también se usa ampliamente. Si necesita profundizar en la pila TCP / IP, hay Wireshark .

Además, hay un problema de fijación de certificados . Si está implementado en su aplicación, debe agregar el certificado Charles SSL a la lista de certificados permitidos, o utilizar herramientas como Frida para deshabilitar la fijación de certificados ya en el nivel de la aplicación. Espero hablar más sobre esto en el próximo artículo.

Me alegraría que comparta su experiencia en el monitoreo del tráfico, incluidos HTTP / S, consejos y opciones de vida.

Nota Utilice esta técnica solo para sus aplicaciones, por favor. ¡Sean hackers de conejos blancos!

Nota 2. Recientemente, la historia sobre esto se publicó en ucraniano , pero en ruso la publico por primera vez.

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


All Articles