La mayoría de los ataques cibernéticos se basan en credenciales robadas, obtenidas engañando a los empleados y usuarios finales para que las compartan o recolectando credenciales de dominio almacenadas en caché en estaciones de trabajo y otros sistemas en la red. Estas credenciales robadas brindan a los atacantes la capacidad de moverse lateralmente dentro del entorno a medida que pasan de una máquina a otra, tanto en las instalaciones como en la nube, hasta que alcanzan los activos críticos para el negocio.

En la vulneración de Uber en septiembre, los atacantes encontraron credenciales en un script específico de PowerShell. Pero hay muchas formas menos llamativas, pero igual de dañinas, en las que los atacantes pueden encontrar credenciales que les permitirían acceder al entorno. Estos incluyen credenciales locales comunes, usuarios locales con contraseñas similares y credenciales almacenadas en archivos en recursos compartidos de red.

Según indican los investigadores, “nos enfrentamos a la pregunta de qué tipo de información se puede extraer de una máquina comprometida, sin explotar ninguna vulnerabilidad, para moverse lateralmente o extraer información confidencial. Todas las herramientas que usamos aquí están disponibles en nuestro repositorio de GitHub.

Las organizaciones confían en varias herramientas para autenticarse en servidores y bases de datos mediante los protocolos SSH, FTP, Telnet o RDP, y muchas de estas herramientas guardan las credenciales para acelerar la autenticación. Analizamos tres de estas herramientas (WinSCP, Robomongo y MobaXterm) para mostrar cómo un atacante podría extraer credenciales que no son de texto claro.”

WinSCP: credenciales ofuscadas

Cuando un controlador de dominio no está disponible, un usuario puede acceder a los recursos del sistema utilizando las credenciales almacenadas en caché que se guardaron localmente después de un inicio de sesión de dominio exitoso. Debido a que el usuario estaba autorizado previamente, el usuario puede iniciar sesión en la máquina utilizando la cuenta de dominio a través de las credenciales almacenadas en caché, incluso si el controlador de dominio que autenticó al usuario en el pasado no está disponible.

WinSCP ofrece la opción de guardar los detalles de las credenciales utilizadas para conectarse a máquinas remotas a través de SSH. Si bien las credenciales se ofuscan cuando se guardan en el registro de Windows (Computadora\HKEY_CURRENT_USER\SOFTWARE\Martin Prikryl\WinSCP 2\Sessions), no están encriptadas en absoluto. Cualquiera que conozca el algoritmo utilizado para ofuscar puede obtener acceso a las credenciales.

Dado que el código fuente de WinSCP está disponible en GitHub, lograron encontrar el algoritmo de ofuscación. Usamos una herramienta que implementó el mismo algoritmo para desofuscar las credenciales y obtuvieron acceso a las credenciales en texto sin cifrar.

La implementación de un algoritmo de ofuscación para proteger las credenciales almacenadas no es una buena práctica, ya que puede revertirse fácilmente y provocar el robo de credenciales.

Robomongo: No es una clave secreta

Robomongo (ahora Robo 3T) es un cliente de MongoDB que se utiliza para conectarse a los servidores de bases de datos de Mongo. Cuando guarda sus credenciales, se cifran y guardan en un archivo JSON robo3t.json. La clave secreta utilizada para cifrar las credenciales también se guarda localmente, en texto sin cifrar, en un archivo robo3t.key.

Eso significa que un atacante que obtiene acceso a una máquina puede usar la clave guardada en texto sin cifrar para descifrar las credenciales.

Los investigadores observaron el código fuente de Robomongo en GitHub para comprender cómo se usa la clave para cifrar la contraseña y aprendieron que usa la biblioteca SimpleCrypt de Qt. Si bien Robomongo utiliza el cifrado para almacenar de forma segura las credenciales, el hecho de que la clave secreta se guarde en texto no cifrado no es una buena práctica. Los atacantes podrían leerlo potencialmente porque cualquier usuario con acceso a la estación de trabajo puede descifrar las credenciales. Incluso si la información está codificada de una manera que los humanos no pueden leer, ciertas técnicas podrían determinar qué codificación se está utilizando y luego decodificar la información.

MobaXterm: Descifrando la Contraseña

MobaXterm es una poderosa herramienta para conectarse a máquinas remotas utilizando varios protocolos, como SSH, Telnet, RDP, FTP, etc. A un usuario que quiera guardar sus credenciales dentro de MobaXterm se le pedirá que cree una contraseña maestra para proteger sus datos confidenciales. De forma predeterminada, MobaXterm solicita la contraseña maestra solo en una computadora nueva.

Eso significa que la contraseña maestra se guarda en algún lugar y MobaXterm la recuperará para acceder a las credenciales cifradas. Usamos Procmon de Sysinternals Suite para mapear todas las claves de registro y los archivos a los que accede MobaXterm, y encontraron la contraseña maestra guardada en el registro de Windows (Computer\HKEY_CURRENT_USER\SOFTWARE\Mobatek\MobaXterm\M). Las credenciales y contraseñas se guardan en las claves de registro C y P, respectivamente.

Inicialmente, no lograron descifrar la contraseña maestra, que se cifró mediante DPAPI. Eventualmente descubrimos que los primeros 20 bytes DPAPI, que siempre son los mismos cuando se usa DPAPI, se habían eliminado. Cuando agregaron los primeros 20 bytes, lograron descifrar el cifrado DPAPI para obtener el hash SHA512 de la contraseña maestra. Este hash se utiliza para cifrar y descifrar credenciales.

Aquí, la clave de cifrado utilizada para almacenar de forma segura las credenciales se guarda mediante DPAPI. Eso significa que solo el usuario que guardó las credenciales puede acceder a ellas. Sin embargo, un usuario con acceso de administrador o un atacante que obtenga acceso a la sesión de la víctima también puede descifrar las credenciales almacenadas en la máquina.

Conozca los riesgos

Los desarrolladores, DevOps y TI usan varias herramientas para conectarse a máquinas remotas y administrar estos detalles de acceso. Los proveedores deben almacenar esta información confidencial de la manera más segura. Sin embargo, el cifrado siempre está del lado del cliente y un atacante puede replicar el comportamiento de la herramienta para descifrar las credenciales.

Como siempre, no existe una solución mágica que pueda resolver todos los problemas que hemos discutido aquí. Sin embargo, las organizaciones podrían comenzar examinando los servicios que están usando ahora. Pueden construir una matriz de riesgo precisa y estar mejor preparados para las vulneraciones de datos al tener una comprensión más sólida de los tipos de datos confidenciales y credenciales que están almacenando.

Fuente: darkreading.com