03 junio 2014

snmpddos: Exploiting SNMP for DDoS

El objetivo de esta entrada es presentar la herramienta snmpddos. Esta herramienta explota servidores SNMP V2c para realizar un ataque de denegación de servicio distribuido basado en reflexión (SNMP reflected attack); Antes de enfocarnos en la práctica de este ataque vamos a  explicar en qué consiste y como funciona.

Recordemos que SNMP es un protocolo de administración, su uso ha sido muy extendido para el monitoreo y supervisión de los dispositivos de red en entornos corporativos, existen tres versiones SNMP V1 (no recomendada), V2c (no recomendada)  y V3 (recomendada), las dos primeras versiones  tienen  autenticación débil (basado en el valor de la comunidad)  y no cifran la información, SNMP utiliza típicamente UDP como protocolo de transporte bajo los puertos bien conocidos UDP/161 y UDP/162 (traps).

Los dos factores determinantes para ejecutar el ataque son los siguientes:

  1. En una comunicación basada en protocolo UDP (no orientada a la conexión)  por motivos de eficiencia, los datos se envían y se reciben sin verificar la conexión con el origen o destino de la misma y se da por hecho la correcta entrega o recepción de datos. Esto nos permite modificar la dirección IP origen dando pie al “IP spoofing”.
  2. Por otra parte el protocolo SNMP permite que se realicen consultas de gran volumen a través del tipo de solicitud llamado  “GetBulkRequest”, esta solicitud en la V2c se caracteriza por que el tamaño de su respuesta (423-1560 Bytes) es mucho más grande que el de la solicitud (0-102 Bytes), esto significa que existe un efecto de amplificación.
De acuerdo a lo explicado, a todas las solicitudes SNMP tipo GetBulkRequest que se hagan a un servidor SNMP modificando la IP origen por la IP de la víctima (IP Spoofing) , el servidor SNMP responderá con respuestas de gran tamaño a IP la víctima. (tal como lo muestra la siguiente imagen).


Si esto mismo lo masificamos obtendremos un ataque de denegación distribuido basado en reflexión SNMP.



SCRIPT snmpddos
Este script se encuentra escrito en Python y hace uso del modulo Scapy, funciona perfectamente en Backtrack 5 R3 y KALI. El código se encuentra en GitHub y se puede descargar desde https://github.com/jevalenciap/snmpddos/blob/master/snmpddos.py

Utilizando la opción  -h podemos ver las opciones


En el siguiente ejemplo enviamos 7 solicitudes SNMP tipo GetBulkRequest al router con IP 10.0.0.1 el cual tiene habilitado SNMP, se hace una suplantación de la IP origen para que todas las respuestas del servidor SNMP sean enviadas a la IP de la víctima es decir a la IP 10.0.0.3. En esta solicitud se utiliza la comunidad SNMP ‘public’, es la que va por defecto si el argumento –c no es especificado, al igual que el puerto del servidor SNMP por defecto es UDP/161, sino se especifica en los argumentos.


En Wireshark podemos ver  que el tamaño de la solicitud es de 97 Bytes.


En la siguiente imagen podemos ver la respuesta amplificada que le envía el servidor  SNMP (10.0.0.1) a la víctima (10.0.0.3) esta tiene un tamaño de 1438 Bytes. 


En este último se envían paquetes constantemente (argumento –s X), y se especifica la comunidad SNMP en “private” (argumento –c private)
 

Cuando se requiera trabajar con  IPs publicas validar que el dispositivo de borde no haga NAT a este tráfico. También no deben existir configuradas ACL en los routers  y demás dispositivos de capa3 del ISP que impidan el  IP spoofing.

Escenarios de ataque 
  • Un atacante que tenga acceso lógico  a una Subred o VLAN de servidores en un entorno corporativo mediano (superior a 100 servidores) donde todos los servidores estén siendo monitoreados a través de SNMP, puede causar alto impacto alto en la disponibilidad de los servicios que ofrece la victima del ataque.
  • Muchos proveedores de servicio de Internet dejan habilitado por defecto SNMP en los enrutadores que instalan nuestras casas para la prestación del servicio, eso quiere decir que tienen configurada la comunidad por defecto llamada “public” y a merced de que sean utilizados para hacerle una denegación de servicio a tu conexión de Internet.

     Mitigacion
  
  • Siempre que se instale una impresora o cualquier dispositivo a la red validar que no tenga habilitado por defecto SNMP.
  • No publicar a Internet el protocolo SNMP, recomendable utilizar VPNs IPsec sitio a sitio para comunicar las consolas de administración (NMS) con dispositivos administrados o en su defecto aplicar políticas de Firewall para filtrar solamente el  trafico SNMP a IPs publicas específicas.
  • Utilizar en los ambientes corporativos VLAN o subredes de administración (SNMP, HTTP, HTTPS, RDP, SSH, TELNET, etc...) y deshabilitar el acceso administrativo a las demás interfaces de red de los servidores o equipos de red.
  • Muchos fabricantes de UTMs y Firewall de nueva generación no permiten IP spoofing por defecto, una buena práctica que evita el IP spoofing  a nivel de Firewall es  siempre especificar el direccionamiento origen en las reglas o políticas que se crean (no dejarlas any).        
  • Existen dispositivos comerciales y servicios en la nube especializados en detener ataques DDoS.
  • No utilizar las comunidades por defecto public y private, recuerden que para las V1 y V2 de SNMP el nombre de la comunidad es lo único que se utiliza para autenticarse al servidor SNMP y poder tener acceso a la información  (lectura/escritura)   por lo tanto el valor de la comunidad se debe escoger siguiendo las mismas buenas practicas que para una  contraseña robusta.
  • Utilizar SNMP V3 cifra los datos y  la autenticación es robusta.
  • Existe una labor muy grande que por parte de los ISP para evitar el IP spoofing en sus dispositivos.
     
        Contribución por Juan Esteban Valencia Pantoja