07 mayo, 2018

Nmap DHCP Discover: Conocer los servidores DHCP de una red

El protocolo de red DHCP (Dynamic Host Configuration Protocol) permite la asignación de configuración IP, como mínimo la dirección IP y máscara de red, en una arquitectura cliente/servidor. Si un equipo cliente tiene una configuración en su interface de red en modo automático, el cliente solicita una configuración IP de red si existe un servidor DHCP en la misma red este ofrece asignando un configuración de direccionamiento IP en el cliente que realizó la solicitud.

Figura 1: Esquema DHCP.

El protocolo BOOTP (Bootstrap Protocol) es utilizado por lo clientes para obtener una dirección IP automáticamente. Los puertos por defecto utilizados por BOOTP son: 67/udp (servidor) y 68/udp (cliente).

Proceso de funcionamiento DHCP en cliente/servidor
  1. El cliente solicita una IP difundiendo una mensaje DHCP DISCOVER á la subred local.
  2. Los servidores ofrecen una dirección IP (DHCP OFFER) y el resto de parámetros de configuraciones locales para el cliente (DNS, nombre de dominio, puerta de enlace, etc.), si esta está configurada para ser entregada en las opciones de configuración del servidor DHCP. Si ningún servidor DHCP responde al cliente, este envia un DHCP DISCOVER cada 0, 4, 8, 16 y 32 segundos y luego un intervalo aleatorio hasta un minuto. Si pasado 1 minuto no se recibe respuesta:
    • Si el cliente usa APIPA (Automatic Private IP addressing), el cliente se autoconfigurará con una IP (en el caso de Microsoft usará una IP de la red 169.254.0.0/24).
    • La interface del cliente no se inicia (IP 0.0.0.0/0).
  3. El cliente al recibir el DHCP OFFER indica a uno de los oferentes que acepta la IP recibida (DHCP REQUEST).
  4. El servidor envía una configuración DHCP ACK al cliente indicándole los términos de arrendamiento. A partir de ahora el cliente ya puede usar una IP asignada.
  5. El cliente solicita una renovación de la IP cuando pase la mitad del tiempo de conesión.
  6. El servidor le concede la renovación.
  7. El cliente libera la IP.

Figura 2: Esquema de funcionamiento DHCP cliente/servidor.

En la figura 3 se puede ver un ejemplo de captura de tráfico pcap de la solicitud cliente-servidor de un asignamiento automático de una dirección IP. Vemos los datagramas DHCP Discover, Offer, Request y finalmente ACK.

Figura 3: Captura pcap Wireshark del funcionamiento DHCP.


Conocer el servidor/es DHCP de una misma red en un cliente Linux

El fichero /var/lib/dhcp/dhclient.leases alamacena, entre otras cosas, las concesiones de direcciones que ofrecen al cliente los servidores DHCP.

Para descubrir los servidores DHCP, si la interface de red está en modo de asignación automática. Podemos liberar la dirección IP actual y volver a asignar una nueva configuración IP con la utilidad dhclient.
$ sudo dhclient -r eth0
$ sudo dhclient eth0
En la imagen de la figura 4 se puede ver como se crea el fichero dhclient.leases después de liberar (parámetro -r de dhclient) y volver a solicitar una nueva dirección IP (simplemente dhclient) a los posibles servidores DHCP de la misma red. En este caso el servidor DHCP es el mismo que la puerta de enlace.

Figura 4: Asignación de direción IP en un cliente Ubuntu.

En el log del sistema /var/log/syslog vemos la comunicación que fue realizada entre el cliente y el servidor DHCP.

Figura 5: Encontrando servidor DHCP en /var/log/syslog.


Conocer el servidor/es DHCP de una misma red en un cliente Windows

Un equipo cliente Windows poderemos liberar su configuración IP actual con el parámetro /release de la utilidad ipconfig y volver a solicitar una nueva configuración IP al servidor DHCP de esa red con el parámetro /renew.
ipconfig /release
ipconfig /renew
Figura 6: Liberación y asignación de nueva IP a un cliente Windows.

Con ipconfig /all se puede ver la configuración completa en las interfaces de red, al contrario que en sistemas Linux, Windows ya nos muestra el servidor DHCP que le ofreció la concesión de dirección IP.

Figura 7: Conocer servidor DHCP en cliente Windows.


Conocer el servidor/es DHCP con Nmap DHCP Discover

Si estamos en una red en la que sabemos que pueden exister múltiples servidores DHCP e incluso servidores DHCP Relay, existe una utilidad-script dentro de la utilidad Nmap que nos permitirá descubrir los servidores DHCP disponibles de la red.

Con -sU escaneamos UDP y -p escaneamos un puerto, que en este caso sería el 67 (67/udp). Pasamos el script "dhcp-discover" y a continuación el target que sería la dirección de red con su notación CIDR.
nmap -sU -p 67 --script=dhcp-discover <target>
En la imagen vemos el servidor DHCP marcado como el server identifier. 

Figura 8: DHCP Discover con nmap.

Estos scripts están ubicados en el directorio scripts/ de Nmap con formato propietario .nse (Nmap Scripting Engine) editables. Otra opción sería utilizar el script "broadcast-dhcp-discover".

En la website oficial de Nmap se detallan las diferencias entre los scripts .nse:

Saludos!
Entradas Relacionadas