Descubriendo comunidad SNMP con onesixtyone

En nuestra entrada anterior dedicada a SNMP, que puedes leer aquí, y donde explicábamos cómo leer información SNMP con snmpwalk, veíamos que para conseguir extraer información de un servidor SNMP tendríamos que conocer un valor fundamental como es la «community» o nombre de la comunidad por la que publica información.

Ya hemos nombrado en muchas ocasiones el concepto de «misconfiguration» mediante la cual los administradores de sistemas y redes caen en el error de mantener la configuración por defecto del servicio a publicar o al menos los valores de algunos parámetros. Esto supone un riesgo cuando el valor de ese parámetro nos indica que la extracción de información es posible mediante una herramienta como snmpwalk.

En la entrada anterior ya quedó demostrado que Nmap con un descubrimiento de versiones es capaz de detectar si el nombre de la comunidad es la que se asigna por defecto: public. Siendo así, lo siguiente es coser y cantar con snmpwalk. Pero, ¿y si el administrador ha cambiado el nombre de la comunidad?

En este caso, y como ocurre con otros sistemas de autenticación, tendríamos que recurrir a realizar un ataque de diccionario o fuerza bruta. Concretamente para este escenario que se nos plantea vamos a lanzar un ataque de diccionario utilizando la herramienta onesixtyone (es un juego de palabras haciendo referencia al puerto 161 por el que publica SNMP).

Como diccionario de palabras utilizaremos un fichero que contiene los posibles nombres de comunidades basándose en las más utilizadas por los administradores. Podemos crearnos uno manualmente con cualquier editor de textos o podemos usar alguno de los que ya otros han creado y generosamente comparten.

Es el caso de este fichero que podéis utilizar para realizar vuestras pruebas:

https://github.com/rustyrobot/fuzzdb/blob/master/wordlists-misc/wordlist-common-snmp-community-strings.txt

Con wget descargamos el fichero, en formato RAW:

Diccionario nombres de comunidades SNMP

Una vez descargado, mostrando las primeras líneas del fichero observamos que contiene posibles nombres de comunidades SNMP. Obviamente podemos añadir aquí los posibles nombres de comunidades que se nos ocurran y ampliar así nuestro diccionario de comunidades.

Diccionario comunidades SNMPYa sólo nos quedaría lanzar el ataque de diccionario con onesixtyone contra el servidor SNMP que estamos auditando. Para la prueba, tengo una máquina Vyatta (192.168.10.131) preparada con un servicio SNMP que publica en una comunidad distinta a la «public«.

Lanzamos en primer lugar un Nmap con descubrimiento de servicios y comprobamos que ahora Nmap no ha descubierto que la comunidad sea «public». Detecta que el puerto 161/UDP está abierto, pero no descubre el nombre de la comunidad.

Nmap descubriendo servicio SNMPEjecutaremos la herramienta onesixtyone contra el servicio SNMP para que pruebe los distintos nombres e intente descubrir el nombre correcto de la comunidad. Tan sólo tenemos que indicar el nombre del fichero que contiene los posibles nombres de las comunidades y la dirección IP del servidor SNMP. He añadido también el parámetro -d para debug.

Ejecutando onesixtyone - SNMPCuando finalice con todas las pruebas, si ha encontrado la comunidad correcta, lo indicará.

Encontrando comunidad SNMP con onesixtyone

Observamos que ha encontrado correctamente el nombre de la comunidad: pr1v4t3.

Ya sólo nos queda leer la información SNMP, para lo que utilizaremos nuevamente snmpwalk tal y como explicó en la entrada anterior, indicando el nombre de la comunidad que hemos descubierto con onesixtyone.

Snmpwalk y OnesixtyonePerfecto! Ya podemos leer información SNMP de este servidor.

Consejo de hacking ético: Al igual que utilizas contraseñas complejas y que no son susceptibles de aparecer en ningún diccionario de palabras, aplícalo también a los nombres de las comunidades SNMP.

Como siempre, esperamos que os haya gustado y que os resulte de interés!