Aspectos clave de las redes seguras en iOS: seguridad | de Wojciech Reguła | seguridad

Aspectos clave de las redes seguras en iOS seguridad
  • Deja de usar HTTP, usa HTTPS.
  • Las excepciones de App Transport Security no deben establecerse en entornos de producción.
  • Si usa bibliotecas de red de terceros, verifique la conexión segura.
  • Para aplicaciones de alto riesgo, utilice la fijación de certificados.
  • Siga siempre las buenas prácticas de desarrollo de aplicaciones móviles -> vea nuestro Directrices sobre la seguridad de las aplicaciones móviles: edición iOS.

La mayoría de las aplicaciones en nuestros dispositivos móviles se comunican con un backend. Las aplicaciones fuera de línea rara vez se usan e incluso si no es necesario iniciar sesión, generalmente es necesario tener al menos análisis. Desearíamos que no hubiera necesidad de decir eso, porque las redes parecen ser bastante obvias, pero no es raro que las aplicaciones hagan conexiones inseguras. Durante las pruebas de penetración, de vez en cuando observamos aplicaciones que usan comunicación HTTP de texto sin formato para transmitir las credenciales del usuario. Este artículo le mostrará desde el principio cómo implementar redes seguras en iOS y qué se debe evitar.

El uso de HTTP en su aplicación significa que todos los datos que envía no están encriptados. En otras palabras, cualquier atacante en una posición de red privilegiada puede recuperar la información que ha enviado su aplicación. También significa que si el usuario de su aplicación se conecta a un punto de acceso público, cualquier persona podrá rastrear ese tráfico. HTTP está completamente desactualizado, no lo use. A partir de iOS 9, los desarrolladores que deseen utilizar HTTP deben establecer una excepción de seguridad de transporte de aplicaciones adecuada. Leerás más sobre eso más adelante. Para presentarle una prueba de concepto, hemos creado una sencilla aplicación Swift.

Aspectos clave de las redes seguras en iOS seguridad

Esta aplicación envía un nombre de usuario y una contraseña proporcionados a http://asegurar.biz. Echemos un vistazo al siguiente código:

import Foundationlet url = URL(string: "http://www.securing.biz") !func performLogin(login: String, password: String) - > Void 

Utiliza un singleton URLSession.shared estándar y envía una solicitud HTTP. Como mencionamos anteriormente, este código fallará ya que no configuramos las excepciones requeridas. Entonces, abrimos el archivo Info.plist y agregamos el siguiente código XML:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.securing.biz</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>

El código es autodescriptivo. Permite que la aplicación inicie cargas HTTP. Puede leer más sobre las excepciones en el documentos oficiales.

El archivo Info.plist es un buen lugar para verificar si la aplicación cumple con las mejores prácticas. Antes de implementar su aplicación en producción, busque las excepciones de App Transport Security. Volviendo a la aplicación, la compilamos y la instalamos en el dispositivo. Para olfatear el tráfico, teníamos que estar en la posición de red privilegiada. La forma más fácil de hacer esto en macOS es abrir un punto de acceso personal en las opciones para compartir. Así lo hicimos y conectamos el iPhone a nuestro Wi-Fi. Luego, abrimos Wireshark y comenzamos a olfatear la interfaz del punto de acceso. Después de proporcionar el nombre de usuario y la contraseña, hicimos clic en el botón «Iniciar sesión». En el Wireshark observamos el tráfico.

1660558327 384 Aspectos clave de las redes seguras en iOS seguridad

Como puede ver, las credenciales fueron olfateadas. Téngalo en cuenta y olvídese de HTTP en las aplicaciones de producción.

Este protocolo proporciona comunicación encriptada. Hay algunas trampas en la configuración del servidor, pero no las discutiremos en este artículo. Nos centraremos en las aplicaciones de iOS. Los desarrolladores suelen seleccionar bibliotecas de redes de terceros en la comunicación HTTP. Es más conveniente, pero también crea nuevos riesgos. AFNetworking, una biblioteca popular, permitió un ataque Man-In-The-Middle en la versión 2.5.1 cuando la aplicación no usaba la fijación de certificados. Por lo tanto, cuando decida utilizar fuentes de redes externas, verifique los escenarios de ataques de redes para asegurarse de no exponer a sus clientes a riesgos.

Como la intención de este artículo era que fuera práctico, trabajaremos en red con una de las bibliotecas de Swift más populares: AFNetworking. Si tiene alguna pregunta sobre la implementación de redes con el uso de la API estándar de Apple, no dude en comunicarse con SecuRing.

Reemplacemos la función performLogin introducida anteriormente por una nueva:

func performLoginWithAlamofire(login: String, password: String) - > Void 

Mientras tanto, abrimos BURP Suite, un proxy HTTP(S) y modificamos la configuración del proxy en nuestro iPhone para señalar la IP y el puerto de BURP. Cuando hicimos clic en el botón «Iniciar sesión», no pasó nada. Sin embargo, el BURP mostró un mensaje de error:

1660558328 461 Aspectos clave de las redes seguras en iOS seguridad

Ahora confirmamos que la aplicación rechazó la conexión a nuestro servidor proxy ya que el servidor no pudo proporcionar un certificado SSL de confianza para el dominio seusing.biz. Pero, ¿qué sucede si una de las autoridades de certificación se ve comprometida y el atacante puede crear un certificado SSL confiable? ¿O qué sucede si el atacante instaló de alguna manera un certificado SSL de confianza en el dispositivo de la víctima? Aquí viene la técnica de «fijación de certificados» para evitar tal escenario.

La fijación de certificados es una técnica que protege contra la conexión a su dominio utilizando certificados SSL que no sean los suyos. El mecanismo se puede implementar de varias maneras. Los más populares son: pinear todo el certificado, la clave pública del servidor o pinear el hash criptográfico del certificado. Puede leer más sobre la fijación de certificados en Documentación OWASP.

El siguiente ejemplo muestra cómo implementamos la fijación de certificados en nuestra aplicación de muestra usando Alamofire:

import Alamofirelet url = URL(string: "https://securing.biz") !class NetworkManager func performLoginWithAlamofireAndCertificatePinning(login: String, password: String) - > Void 

Entonces, implementamos una clase singleton de NetworkManager que especifica la política de asignación de todo el certificado SSL que colocamos en los recursos de la aplicación (formato DER). Alamofire cargará ese certificado automáticamente. Luego, creamos un objeto de sesión de administrador compartido que luego se usa para realizar la conexión HTTP.

Instalamos la aplicación en el dispositivo. Para verificar si la fijación de certificados funciona correctamente, también instalamos un certificado SSL y lo agregamos a las CA de confianza. Después de hacer clic en el botón «Iniciar sesión», la suite BURP volvió a mostrar el error:

1660558328 747 Aspectos clave de las redes seguras en iOS seguridad

Ese comportamiento prueba que la fijación funcionó como se esperaba. Nuestra conexión ahora es inmune a un atacante que no presente nuestro certificado SSL.

La conciencia de las redes seguras crece año tras año. Cada vez más aplicaciones cumplen con las mejores prácticas. Sin embargo, a veces observamos aplicaciones que utilizan HTTP sin cifrar. Apple también intenta evitar este tipo de prácticas inseguras con el mecanismo de seguridad de transporte de aplicaciones. Como mostramos en este artículo, puede ser perjudicial para los usuarios. El HTTP ya no debe usarse en entornos de producción. Usar HTTPS es una forma adecuada, sin embargo, también conlleva el riesgo de confiar en certificados no válidos. Siempre recomendamos probar los escenarios básicos de sustitución de SSL para asegurarse de que una aplicación esté bien escrita. Algunos de ustedes también pueden estar interesados ​​en implementar el mecanismo de fijación de certificados para aplicaciones de alto riesgo. Esperamos que el conocimiento compartido en este artículo lo ayude a crear aplicaciones iOS seguras.

También es importante adherirse a las mejores prácticas durante el proceso de desarrollo de aplicaciones iOS. Hemos preparado una guía que recopila nuestra experiencia de seguridad de iOS en un solo lugar. Puedes acceder a ella a continuación.

Además, siéntete libre de contactarme. Puedes encontrarme en Gorjeo en LinkedIn.

Deja un comentario