La técnica SSL Strip no es algo novedoso, ya que lleva entre nosotros más de 5 años desde que Moxie Marlinspike la presentase al mundo en la conferencia de BlackHat 2009 que os dejamos a continuación. Cuando se realiza esta técnica a una víctima que tiene un dispositivo móvil encontramos curiosidades como que es muy difícil apreciar cuando estamos bajo una conexión segura y cuando no, y por eso es una técnica muy explotada en el hacking de dispositivos iPhone. Antes de ponernos manos a la obra con la prueba de concepto vamos a explicar en qué consiste la técnica SSL Strip.
Figura 1: 2009 BlackHat DC Presentation on SSL Stripping de Moxie Marlinspike
El atacante realiza un ataque de de Man in the Middle, por ejemplo ARP Spoofing, estando en la misma red que la víctima, en este caso supongamos un iPhone. El atacante colocará el script en Python de SSL Strip a la escucha en el puerto 10000, el cual es por defecto aunque lo podemos cambiar.
Necesitamos redirigir toda petición de la víctima que vaya al puerto 80 hacia el puerto 10000 para que sea tratada por el script en Python. Por esto cuando la víctima indique que quiere acceder a gmail.com, esto de no indicar el protocolo es un fallo grave, el navegador entiende que quiere acceder a http://gmail.com por lo que se realiza una petición que si no estuviéramos por medio el servidor de Gmail se encargaría de redirigir hacia el puerto 443.
Como nosotros nos encontramos en medio de la comunicación lo que nos llega con destino puerto 80 lo redirigimos al puerto 10000 de nuestra máquina en el que se encuentra el SSL Strip. Como se puede visualizar en la imagen cuano el servidor legítimo indica al cliente que redirija hacia el puerto 443, nosotros nos encargamos de cambiar esas referencias para que la conexión siga siendo por protocolo HTTP y de este modo se encuentre en una conexión no segura.
El atacante realiza un ataque de de Man in the Middle, por ejemplo ARP Spoofing, estando en la misma red que la víctima, en este caso supongamos un iPhone. El atacante colocará el script en Python de SSL Strip a la escucha en el puerto 10000, el cual es por defecto aunque lo podemos cambiar.
Necesitamos redirigir toda petición de la víctima que vaya al puerto 80 hacia el puerto 10000 para que sea tratada por el script en Python. Por esto cuando la víctima indique que quiere acceder a gmail.com, esto de no indicar el protocolo es un fallo grave, el navegador entiende que quiere acceder a http://gmail.com por lo que se realiza una petición que si no estuviéramos por medio el servidor de Gmail se encargaría de redirigir hacia el puerto 443.
Como nosotros nos encontramos en medio de la comunicación lo que nos llega con destino puerto 80 lo redirigimos al puerto 10000 de nuestra máquina en el que se encuentra el SSL Strip. Como se puede visualizar en la imagen cuano el servidor legítimo indica al cliente que redirija hacia el puerto 443, nosotros nos encargamos de cambiar esas referencias para que la conexión siga siendo por protocolo HTTP y de este modo se encuentre en una conexión no segura.
Figura 2: Esquema SSL Strip |
SSL Strip a dispositivos iOS
Dicho esto, nos toca realizar una pequeña prueba de concepto sobre esto. En primer lugar vamos a ver como, accediendo a la web de gmail.com desde un dispositivo móvil, los indicadores de que estamos bajo una conexión segura son pocos, y algunos son escondidos por el propio comportamiento del navegador. Esto lo hemos comentado por aquí desde el primer momento en que vimos como la gestión de HTTPs en iOS tiene muchos riesgos de seguridad.
En la imagen se puede ver que el candado nos indica que estamos bajo una conexión cifrada, y como entendemos que no hay fallo en la validación de la identidad del sitio estamos conectados a Gmail, pero ¿Dónde se encuentra el protocolo? El protocolo es tapado en la barra de direcciones para aprovechar el espacio y que aparezca el dominio o subdominios a los que estamos conectados. Este indicador hace que el SSL Strip pueda ser "colado" más fácilmente.
Figura 3: Conexión cifrada con Gmail |
Como se puede ver en la imagen superior, en la ventana de la izquierda es cuando se accede al sitio de gmail y podemos ver el candado como único símbolo de seguridad. Además, al poco de cargar la web el navegador Safari para iOS, para mejorar la experiencia de usuario y aprovechar la pantalla del dispositivo, hace desaparecer la barra de direcciones con todo lo que ello conlleva en ataques con SSL Strip o los problemas de seguridad que ha tenido con ataques de Phishing en iOS 4, en iOS 5.1
La técnica de SSL Strip no hará que el certificado falle y el navegador nos de un fallo de validación de identidad del sitio que haya que subsanar - tal y como se hace en los ataques de man in the middle con fake CAs -, sino que realmente hará que la víctima vaya por protocolo HTTP constantemente, por lo que si el sitio lo acepta, tendríamos un serio problema, porque como vamos a ver diferenciar esto en un dispositivo móvil es complejo.
En la siguiente parte de esteartículo veremos cómo llevar a cabo un ataque SSLStrip contra un iPhone y veremos cuál es el comportamiento del dispositivo. La diferencia entre la pantalla vista anteriormente y la que obtendremos es que el candado desaparecerá, sin más rastro.
buen trabajo!!!
ResponderEliminar