Las técnicas “Pass-the-hash” y "Pass-the-ticket" se basan en la posibilidad de autenticarse en un sistema protegido con autenticación débil (usuario y contraseña) sin la necesidad de poseer nada más que el hash que se corresponde con una de las claves que da acceso al sistema. De esta manera, se puede conseguir acceso a los recursos de administración sin conocer la contraseña de acceso en texto plano, ni emplear ninguna técnica de “crackeo” sobre el hash obtenido.
Hoy vamos a ver cómo este ataque se puede realizar al software de administración de los dispositivos Honeywell Falcon XL Controller por culpa de un fallo de diseño que se documentó en el año 2014, pero que por desgracia, como muchos otros sistemas de control en entornos industriales e infraestructuras críticas, es fácil de localizar activo, como ya se vio en el artículo "Halcones heridos en Infraestructuras Críticas".
Proceso de autenticación en Honeywell Falcon XL Controller
Para entender el proceso de autenticación en los sistemas Honeywell Falcon XL Controller, lo primero será localizar estos dispositivos haciendo un poco de Hacking con Buscadores:
Una vez seleccionado uno de los dispositivos, capturaremos con ZAP, como explicamos en detalle en el libro de Hacking Web Technologies, la petición que se envía al servidor web del dispositivo por POST:
Capturando y analizando la respuesta devuelta tras la petición HTTP anterior, el proceso de autenticación en los sistemas Honeywell Falcon XL Controller se realiza de la siguiente manera:
De manera esquemática:
Obtención del password en MD5 de un usuario
Para obtener el password en MD5 de un usuario del sistema, basta aplicar lo explicado en el artículo “SCADA: Halcones heridos en tus Infraestructuras Críticas”. Para nuestro dispositivo, el MD5 del password del usuario SystemAdmin es:
Es importante destacar que, aunque tengamos el hash MD5 del password de un usuario, no tenemos el texto claro con el que se ha generado ese resumen. Bien es cierto que podemos buscar en Internet si existe el texto claro que ha generado el resumen, utilizar herramientas como John The Ripper o algún sistema con Rainbows Tables para obtener la clave en texto claro, pero esto no será necesario para “bypasear” el formulario de acceso con un ataque Pass-the-Hash
Obtención del token sSessionID
Para obtener un token de sesión válido, enviamos con ZAP la siguiente petición HTTP por GET:
En la respuesta a esta petición podemos ver un token de sesión válido, en este caso, sSessionID=84rjIsGUpmH.
Con toda esta información lo único que queda es crear la petición POST comentada anteriormente y enviarla al servidor web del dispositivo para saltarse el sistema de login y conseguir el acceso con una técnica Pass-the-hash.
Creación de la petición POST con el Pass-the-Hash
Con los datos anteriores ya estamos en condiciones de generar la petición POST utilizando ZAP y enviarla al servidor web que corre en el dispositivo.
Tras enviar esta petición, conseguiremos acceder al dispositivo sin conocer la password de acceso en texto claro, ya que hemos inyectado directamente el hash de la contraseña.
Como se puede ver, la vulnerabilidad es del año 2014, y aunque es hash sea un MD5 fácil de crackear hoy en día, las técnicas de Pass-the-hash se pueden utilizar en entornos con debilidades similares en aplicaciones web en las que se utilicen hashes más complicados que este de crackear, e incluso personalizados, que algunas veces hemos visto que los creadores de la web han optado por crearse sus propias funciones hash.
Autor: Amador Aparicio de la Fuente (@amadapa)
Escritor del libro "Hacking Web Technologies"
Figura 1: How To... saltarse el login de un Honeywell Falcon XL Web usando "pass-the-hash" |
Hoy vamos a ver cómo este ataque se puede realizar al software de administración de los dispositivos Honeywell Falcon XL Controller por culpa de un fallo de diseño que se documentó en el año 2014, pero que por desgracia, como muchos otros sistemas de control en entornos industriales e infraestructuras críticas, es fácil de localizar activo, como ya se vio en el artículo "Halcones heridos en Infraestructuras Críticas".
Proceso de autenticación en Honeywell Falcon XL Controller
Para entender el proceso de autenticación en los sistemas Honeywell Falcon XL Controller, lo primero será localizar estos dispositivos haciendo un poco de Hacking con Buscadores:
Figura 2: Dispositivos Honeywell Falcon XL Controller descubiertos en Google |
Una vez seleccionado uno de los dispositivos, capturaremos con ZAP, como explicamos en detalle en el libro de Hacking Web Technologies, la petición que se envía al servidor web del dispositivo por POST:
Figura 3: Petición HTTP de autenticación capturada con ZAP enviada al dispositivo |
Capturando y analizando la respuesta devuelta tras la petición HTTP anterior, el proceso de autenticación en los sistemas Honeywell Falcon XL Controller se realiza de la siguiente manera:
• se calcula el resumen MD5 del LoginUserName introducido por el usuario.
• para formar el password, se calcula el resumen MD5 de la cadena formada por la concatenación de un identificador de sesión, el nombre de usuario introducido en texto plano y el resumen MD5 del password.
Figura 4: Respuesta HTTP capturada con ZAP enviada por el dispositivo |
De manera esquemática:
sUserName = MD5(LoginUserName)
sPassword= MD5(sSessionID + LoginUsername + MD5(LoginPassword))Para realizar el bypass, tendremos que completar los parámetros LoginUserNameMD5 y LoginPasswordMD5 en la petición POST de la Figura 3 con los valores:
LoginUserNameMD5= sUserName
LoginPasswordMD5= sPasswordLos parámetros que aún no tenemos son sSessionID, correspondiente al token de sesión que viene en todas las peticiones que se realizan al servidor web del dispositivo, y el hash MD5 del password del usuario que se autentica en el sistema.
Obtención del password en MD5 de un usuario
Para obtener el password en MD5 de un usuario del sistema, basta aplicar lo explicado en el artículo “SCADA: Halcones heridos en tus Infraestructuras Críticas”. Para nuestro dispositivo, el MD5 del password del usuario SystemAdmin es:
Figura 5: Hash MD5 del usuario SystemAdmin |
Es importante destacar que, aunque tengamos el hash MD5 del password de un usuario, no tenemos el texto claro con el que se ha generado ese resumen. Bien es cierto que podemos buscar en Internet si existe el texto claro que ha generado el resumen, utilizar herramientas como John The Ripper o algún sistema con Rainbows Tables para obtener la clave en texto claro, pero esto no será necesario para “bypasear” el formulario de acceso con un ataque Pass-the-Hash
Obtención del token sSessionID
Para obtener un token de sesión válido, enviamos con ZAP la siguiente petición HTTP por GET:
Figura 6: Petición enviada por GET |
En la respuesta a esta petición podemos ver un token de sesión válido, en este caso, sSessionID=84rjIsGUpmH.
Figura 7: Respuesta HTTP con el token de sesión necesario |
Con toda esta información lo único que queda es crear la petición POST comentada anteriormente y enviarla al servidor web del dispositivo para saltarse el sistema de login y conseguir el acceso con una técnica Pass-the-hash.
Creación de la petición POST con el Pass-the-Hash
Con los datos anteriores ya estamos en condiciones de generar la petición POST utilizando ZAP y enviarla al servidor web que corre en el dispositivo.
Figura 8: Petición POST generada con ZAP y enviada al dispositivo |
Tras enviar esta petición, conseguiremos acceder al dispositivo sin conocer la password de acceso en texto claro, ya que hemos inyectado directamente el hash de la contraseña.
Figura 9: Panel de control |
Como se puede ver, la vulnerabilidad es del año 2014, y aunque es hash sea un MD5 fácil de crackear hoy en día, las técnicas de Pass-the-hash se pueden utilizar en entornos con debilidades similares en aplicaciones web en las que se utilicen hashes más complicados que este de crackear, e incluso personalizados, que algunas veces hemos visto que los creadores de la web han optado por crearse sus propias funciones hash.
Autor: Amador Aparicio de la Fuente (@amadapa)
Escritor del libro "Hacking Web Technologies"
Supongo que esta línea:
ResponderEliminarsPassword= MD5(sSessionID + LoginPassword + MD5(LoginPassword))
en realidad debería ser:
sPassword= MD5(sSessionID + LoginUserName + MD5(LoginPassword))
Según lo comentado en:
para formar el password, se calcula el resumen MD5 de la cadena formada por la concatenación de un identificador de sesión, el nombre de usuario introducido en texto plano y el resumen MD5 del password.
fixed.
ResponderEliminarHola mi nombre es Fernando Ventura y esty en una gravisima situacion y necesito ayuda urgentemente por favor esty desesperado necseito ayuda, por error envie un video privado de otra persona a unas personas en facebook y ahora estu a punto de q me demabden e ir a la carcel por favor necesito ayuda Chema Alonso q puedo hacer para borrar esos videos ayudame por favor
ResponderEliminar