¿Cómo verifica si una aplicación está usando comunicaciones seguras?

8

Cualquier navegador de hoy en día proporciona comentarios al usuario final que confirma si está utilizando o no HTTPS y alguna validación básica del certificado.

Al usar una aplicación móvil, parece que el usuario final no tiene forma de verificar si sus comunicaciones son seguras o no. Aparte de intentar un MiTM utilizando algo como el envenenamiento de caché ARP, ¿hay alguna forma de verificar si una aplicación móvil está utilizando HTTPS?

Si la aplicación usa HTTPS e inyecto un certificado autofirmado con Fiddler, parece que el sistema operativo interviene y me advierte. Al menos en este escenario, si la aplicación está usando HTTPS y alguien intenta un MiTM, se me advierte. Sin embargo, si la aplicación está utilizando HTTP, MiTM puede permanecer allí todo el día y, como usuario final, solo puedo asumir que está bien asegurado y que el certificado está bien o que no está asegurado y esperar lo mejor ...

Al igual que los permisos de la aplicación, que pueden ser verificados por el usuario en el momento de la instalación, podríamos hacerlo con un indicador de "comunicaciones seguras" que indica que el sistema operativo no permitirá que las comunicaciones no seguras salgan de la aplicación. ¿Existe una manera de afirmar este nivel de seguridad dentro de una aplicación móvil que no sea simplemente una afirmación del desarrollador, sino algo que se pueda aplicar o probar?

    
pregunta Scott Helme 09.09.2013 - 12:26
fuente

3 respuestas

1

Solo necesitas montar un ataque MitM si pretendes descifrar el tráfico. Si la aplicación utiliza un protocolo cifrado estándar (SSL / TLS, SSH), puede simplemente grabar la conexión (por ejemplo, utilizando tcpdump) y luego enviar el resultado a un analizador de protocolo de descenso (ig Wireshark) y le dirá si hay un apretón de manos seguro y qué opciones se usaron.

    
respondido por el Stephane 09.09.2013 - 14:27
fuente
0

Responderé con respecto a Android, ya que estoy más familiarizado con él.

La mayoría de las aplicaciones utilizarán las bibliotecas integradas del Cliente HTTP, aunque esto no está garantizado para aplicaciones sofisticadas o de alto rendimiento. Estas bibliotecas de Android no son tan ricas como Java de escritorio, por lo que es unclear si las bibliotecas cargan la configuración de todo el sistema que podría modificar (como usuario root) y si una opción force-https estaría disponible.

En la práctica, necesitaría encontrar o crear un servidor de seguridad o una aplicación de proxy de reenvío que intercepte todo el tráfico saliente de la aplicación e inyecte una instrucción HTTP 301 (o 302) a redirect a HTTPS ; presumiblemente comprobando si existe un socket HTTPS para la dirección del servidor. Y dependiendo de la biblioteca utilizada, es posible que no haya una verificación perfecta del certificado SSL / TLS para una aplicación que no esperaba usar HTTPS.

De forma alternativa, simplemente haga que la herramienta personalizada notifique al usuario cuando una aplicación realiza una solicitud HTTP a un destino que no está incluido en la lista blanca.

Preferiblemente, este tipo de cumplimiento solo con HTTPS debería ser una característica del sistema operativo, o al menos una característica en las ROM populares como CyanogenMod.

Como se mencionó Polynomial , si su teléfono móvil se enruta a través de un puente de red que usted controla; Puede usar WireShark o similar para descubrir qué hace su teléfono móvil a través de WiFi. Tcpdump en el teléfono es posible con las herramientas y los privilegios adecuados, probablemente importado a WireShark para una mejor visualización.

    
respondido por el LateralFractal 09.09.2013 - 14:26
fuente
0

No estoy seguro de otras plataformas móviles, pero el permiso para poder hacer conexiones HTTPS en Android es android.permission.INTERNET , que en realidad es bastante general (puede abrir cualquier conexión).

No lo he intentado, pero si conoce la URI exacta de antemano, es posible que pueda usar Permisos URI . No me queda claro si se aplican exclusivamente a los URI de contenido interno o también a las conexiones realizadas desde URLConnection , lo que podría darle las restricciones que desea.

Tenga en cuenta que esto apenas importa en general, ya que lo que está preguntando no es visible desde el punto de vista del desarrollador. Supongo que su pregunta es sobre la posibilidad de verificar que una aplicación de terceros solo realiza conexiones HTTPS y que no necesariamente confía en sus desarrolladores.

  • Incluso si estos permisos de URI se pueden utilizar para imponer URI de solo HTTPS, esto solo funcionaría si los desarrolladores hubieran tenido esto en cuenta. En su estado actual, los usuarios no tienen la capacidad de anular los permisos que solicita la aplicación (aunque parece haber tal característica en Android 4.3 o si ha rooteado su teléfono y ha instalado una aplicación adicional). En este caso, los permisos aún no serían lo correcto, ya que los desarrolladores se conceden efectivamente estos permisos: un indicador de autoafirmación "solo hago conexiones seguras" parecería inútil, si no es que el sistema operativo también lo impone.

  • Si está en posición de escuchar el tráfico en el nivel del enrutador, al menos podría verificar que la aplicación solo use el tráfico HTTPS en ese momento. No darse cuenta de las conexiones de texto sin formato durante un período de tiempo dado no es garantía de que nunca se realice una conexión de texto sin formato, pero eso debería dar una indicación razonable.

  • El hecho de que pueda ver una aplicación que realiza conexiones HTTPS ciertamente no implica que esté usando HTTPS correctamente . Ser capaz de no hacer que los errores de certificado desaparezcan parece ser un requisito común (por ejemplo, en iOS o en Android . Por alguna razón, las respuestas con soluciones inseguras parecen ser altamente valoradas ...). Si utilizar un certificado autofirmado con Fiddler detectaría aplicaciones que no verifican el certificado en absoluto, también deberá usar un certificado de confianza con un nombre de host diferente para capturar las aplicaciones que se olviden de verificar el nombre del host.

respondido por el Bruno 09.09.2013 - 15:07
fuente

Lea otras preguntas en las etiquetas