場(chǎng)景:
內(nèi)網(wǎng)環(huán)境需要開(kāi)啟多個(gè)DHCP服務(wù)器,分別給不同的設(shè)備進(jìn)行PXE安裝。
存在的問(wèn)題:
多個(gè)DHCP的情況下,設(shè)備在啟動(dòng)時(shí)隨機(jī)從一個(gè)DHCP服務(wù)器獲取ip(哪個(gè)DHCP服務(wù)器先響應(yīng)就從哪個(gè)獲取)并從那個(gè)服務(wù)器讀取配置進(jìn)行引導(dǎo)安裝。
如果提供IP的DHCP服務(wù)器不是期望的那個(gè),就無(wú)法得到正確的配置文件,也就無(wú)法進(jìn)行正常引導(dǎo)安裝。
初步解決方法:
DHCP服務(wù)提供配置可以對(duì)響應(yīng)進(jìn)行限制,僅給某些設(shè)備(設(shè)備的MAC)分配IP,對(duì)其它設(shè)備的請(qǐng)求則不予響應(yīng)。
/etc/dhcpd.conf配置大致如下:
subnet 128.128.0.0 netmask 255.255.0.0 {
......
filename "pxelinux.0";
}
deny unknown-clients;
host <hostname1> { hardware ethernet <XX:XX:XX:XX:XX:XX>;}
host <hostname2> { hardware ethernet <XX:XX:XX:XX:XX:YY>;}
這樣配置以后,DHCP服務(wù)器僅會(huì)對(duì)<XX:XX:XX:XX:XX:XX> <XX:XX:XX:XX:XX:YY>這些MAC進(jìn)行響應(yīng)。
依然存在的問(wèn)題:
如果每個(gè)DHCP服務(wù)器都做了限制,僅給指定MAC分配IP,并且沒(méi)有兩個(gè)DHCP服務(wù)器同時(shí)配置了同一MAC,那么每個(gè)MAC能夠得到響應(yīng)的DHCP服務(wù)器就是唯一確定的。
但不可避免,有些DHCP服務(wù)器并沒(méi)有或者忘記設(shè)置,依然導(dǎo)致DHCP響應(yīng)泛濫,設(shè)備還是可能從不期望的DHCP服務(wù)器獲取響應(yīng)。
進(jìn)一步的解決方法:
要求每個(gè)使用的DHCP服務(wù)器在/etc/dhcpd.conf指定具體的MAC。對(duì)于那些泛濫響應(yīng)的DHCP服務(wù)器,使用Dhcpstarv將其提供的IP(DHCP 響應(yīng))消耗掉。Dhcpstarv的執(zhí)行方式就是不斷偽造一些MAC地址進(jìn)行DHCP請(qǐng)求,把DHCP服務(wù)器能夠響應(yīng)的IP地址都消耗掉。
具體操作:
當(dāng)你想啟動(dòng)DHCP服務(wù),給某臺(tái)設(shè)備進(jìn)行PXE安裝,但是發(fā)現(xiàn)同一網(wǎng)絡(luò)中還存在另一個(gè)DHCP服務(wù)器也在提供DHCP服務(wù),那么就可以使用Dhcpstarv了。
命令使用(ethX就是連接到要消耗的網(wǎng)絡(luò)的網(wǎng)卡,不要指定錯(cuò)了):
# ./dhcpstarv -v -i ethX
類似下面的輸出就說(shuō)明dhcpstarv正在消耗DHCP響應(yīng)
14:54:20 01/10/14: got address 128.128.18.199 for 00:16:36:4c:d7:48 from 128.128.18.5
14:54:20 01/10/14: got address 128.128.18.200 for 00:16:36:06:98:de from 128.128.18.5
等不再有類似的輸出結(jié)果,說(shuō)明DHCP的響應(yīng)被消耗差不多了。讓dhcpstarv程序繼續(xù)運(yùn)行,啟動(dòng)你自己的DHCP服務(wù)器。
恢復(fù)方法:
如果DHCP服務(wù)器未進(jìn)行限制MAC配置,不幸被Dhcpstarv消耗完,可以通過(guò)以下方法恢復(fù)“被攻擊”DHCP服務(wù)器:
1. 修改配置文件/etc/dhcpd.conf,增加限制MAC的配置:
deny unknown-clients;
host <hostname1> { hardware ethernet <XX:XX:XX:XX:XX:XX>;}
host <hostname2> { hardware ethernet <XX:XX:XX:XX:XX:YY>;}
2. 刪除文件 /var/lib/dhcp/db/dhcpd.leases
3. 重啟DHCP服務(wù)
如何定位攻擊來(lái)源:
Dhcpstarv在發(fā)送的DHCP請(qǐng)求包中偽造隨機(jī)的源MAC,其偽造方式是:固定前3個(gè)字節(jié)硬件設(shè)備“制造商”為“001636”,后3個(gè)字節(jié)隨機(jī)生成。源代碼位置:
dhcpstarv-0.2.1/src/main.c:130行
unsigned char vendor_mac_PRefix[] = { 0x00, 0x16, 0x36 };
但是,以太網(wǎng)幀的源MAC還是發(fā)送數(shù)據(jù)幀的網(wǎng)卡的真實(shí)MAC,因此為了定位Dhcpstarv偽造的DHCP請(qǐng)求包的來(lái)源,可以通過(guò)抓包,根據(jù)以太網(wǎng)幀中的源MAC確定Dhcpstarv的位置。
DHCP請(qǐng)求包是封裝在UDP數(shù)據(jù)報(bào),UDP數(shù)據(jù)報(bào)偏移36字節(jié)的位置即是DHCP請(qǐng)求包的源MAC,過(guò)濾UDP數(shù)據(jù)報(bào)的前3個(gè)字節(jié)為“001636”,就可以得到Dhcpstarv偽造的DHCP請(qǐng)求包。命令如下:
# tcpdump -i bond0 -ne src port 68 and udp[36:2]=0x0016 and udp[38]=0x36
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on bond0, link-type EN10MB (Ethernet), capture size 96 bytes
13:51:31.254469 00:18:82:b0:7e:22 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 286: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:16:36:81:30:15, length 244
13:51:32.000714 00:18:82:b0:7e:22 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 304: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:16:36:81:30:15, length 262
新聞熱點(diǎn)
疑難解答
圖片精選