如何查找网络上是否存在恶意DHCP服务器?


92

确定网络中是否有恶意DHCP服务器的最佳方法是什么?

我想知道大多数管理员如何解决这类问题。我通过搜索找到了DHCP探针,并考虑进行尝试。有没有人有经验?(我想在花时间编译和安装之前知道)。

您是否知道寻找恶意DHCP服务器的有用工具或最佳实践?


2
MS工具,使用非常简单!流氓DHCP服务器检测- RogueChecker.zip blogs.technet.com/b/teamdhcp/archive/2009/07/03/...
aa.malta

我在social.technet.microsoft.com/wiki/contents/articles/…上找到了对您的链接aa.malta的正式引用,但是该链接从2016年起似乎不再起作用。它显示了2009年的博客帖子,但我仅请参阅7月6日和6月29日的帖子。您发布的链接URL似乎没有7月3日的帖子。看起来MS出于某种原因将其删除了。
丹尼尔(Daniel)

看起来这个直接链接(我在wordpress网站上找到)可以从Microsoft Server下载文件。链接从2016年1月开始运行。由于URL是Microsoft,因此我认为它可以信任,但我不能保证:blogs.technet.com/cfs-file.ashx/__key/…
Daniel

Answers:


54

一种简单的方法是简单地在计算机上运行诸如tcpdump / wireshark之​​类的嗅探器,然后发出DHCP请求。如果您从实际的DHCP服务器上看到其他任何报价,则说明您有问题。


28
帮助使用以下过滤器:“ bootp.type == 2”(仅用于显示DHCP提供,并查看是否有来自不同/未知来源的响应)
l0c0b0x

4
将类似DHCP-Find(softpedia.com/get/Network-Tools/Network-IP-Scanner/…)的程序与TCPDump / Wireshark结合使用以触发DHCP响应。
2012年

1
您能否提供更具体的解决方案?
tarabyte '16

@tarabyte我不确定应该提供什么解决方案或改进。我认为这个问题在其他十二个好的答案中涵盖的范围很广?这些天,我的转到选项是像Jason Luther建议的那样,仅将交换机配置为阻止DHCP。是否有需要更好地涵盖的特定问题?
Zoredache

2
我期待更多的利用命令序列的tcpdumparp具有明确的参数,这些参数的说明等。
tarabyte '16

22

回顾并添加一些其他答案:

暂时禁用生产DHCP服务器,并查看其他服务器是否响应。

您可以通过ipconfig /all在Windows计算机上运行来获取服务器的IP地址,然后使用来查找该IP地址来获取MAC地址arp -a

在Mac上,运行ipconfig getpacket en0(或en1)。参见http://www.macosxhints.com/article.php?story=20060124152826491

DHCP服务器信息通常在/ var / log / messages中。 sudo grep -i dhcp /var/log/messages*

当然,禁用生产DHCP服务器可能不是一个好选择。

使用专门寻找恶意DHCP服务器的工具

有关工具列表,请参见http://en.wikipedia.org/wiki/Rogue_DHCP(其他响应中列出了许多工具)。

配置交换机以阻止DHCP提供

可以将大多数受管交换机配置为防止流氓DHCP服务器:



15

Wireshark / DHCP资源管理器/ DHCP Probe方法非常适合一次性或定期检查。但是,我建议您对网络上的DHCP侦听支持进行研究。此功能将提供对网络上流氓DHCP服务器的持续保护,许多不同的硬件供应商都支持此功能。

这是Cisco docs中指示的功能集。

•验证从不可信来源收到的DHCP消息并过滤掉无效消息。

•对来自受信任和不受信任来源的DHCP流量进行速率限制。

•构建和维护DHCP侦听绑定数据库,该数据库包含有关具有租用IP地址的不受信任主机的信息。

•利用DHCP侦听绑定数据库来验证来自不受信任主机的后续请求。



10

dhcploc.exe是Windows系统上最快,最方便的方法。它在XP支持工具中可用。支持工具在每个OEM /零售XP磁盘上,但是可能会或可能不会在某些OEM提供的“恢复磁盘”上。您也可以从MS 下载它们。

这是一个简单的命令行工具。您运行dhcploc {yourIPaddress},然后按'd'键进行虚假发现。如果不按任何键即可使其运行,它将显示每个DHCP请求并听到答复。按“ q”退出。


只是将其与杀死单个交换机端口结合使用来跟踪我们正在处理的偷偷摸摸的恶意服务器。好东西!
DHayes 2010年

1
您仍然可以在Windows 7上使用DHCPloc.exe:1.从[此处] [1]下载“ Windows XP Service Pack 2支持工具”。2.右键单击可执行文件,然后选择“属性”->“兼容性”,然后打开“兼容性模式”并将其设置为“ Windows XP(Service Pack 3)”。3.正常安装。在我的Win7 x64安装上,DHCPLoc.exe可以正常工作。[1]:microsoft.com/en-us/download/details.aspx?
id = 18546

1
我刚刚注意到您可以从以下位置下载可执行文件,并且在Win 10 x64下可以正常运行:gallery.technet.microsoft.com/DHCPLOC-Utility-34262d82
PeterJ 2016年

9

Scapy是基于python的数据包制作工具,非常适合这些排序任务。还有就是怎么做的正是这样的例子在这里


2
哇,我发现Scapy在研究了数天后是如此强大。它超越了诸如dhcpfind.exe和dhcploc.exe之类的cr脚工具。Scapy 2.2可以在Linux和Windows上运行-我都尝试过。唯一的障碍是您必须在一定程度上了解Python编程语言以利用其功能。
Jimm Chen

您发布的链接已损坏
Jason S

@JasonS嗨,我已经更新了链接,但更改正在等待同行审阅...等待期间,您可以在这里找到它:bitbucket.org/secdev/scapy/wiki/doc/IdentifyingRogueDHCPServers
Huygens

7

扩展l0c0b0x关于bootp.type == 2用作过滤器的注释。bootp.type过滤器仅在Wireshark / tshark中可用。tcpdump中没有该文件,他的评论的上下文位置使我难以相信。

Tshark为此完美地工作。

我们将网络划分为多个广播域,每个广播域都有自己的基于Linux的探针,并以一种或另一种方式在“本地”广播域和管理子网上存在一个存在点。Tshark与ClusterSSH相结合,使我可以轻松地在网络的其他角落寻找DHCP流量或(与此有关的任何其他内容)。

这将使用Linux查找DHCP答复:

# ifconfig ethX promisc
# tshark -i ethX -n port 68 -R 'bootp.type == 2'

非常有用,我花了很多时间试图弄清楚为什么要得到tcpdump: syntax error。甚至在上面发布了一个问题,您的回答也畅通无阻,谢谢!networkengineering.stackexchange.com/questions/39534/...
利亚琳

1
另外,我认为有了一些改变-R <Read filter>。我懂了tshark: -R without -2 is deprecated. For single-pass filtering use -Y.-Y效果很好。
伊利亚·林恩

6

一旦确定网络上存在恶意dhcp服务器,我发现解决该问题的最快方法是...

向整个公司发送电子邮件,内容是:

“你们中的哪一个在LAN中添加了无线路由器,您已经杀死了其他所有人的互联网”

期望一个令人毛骨悚然的反应,或有冲突的设备很快消失:)


3

禁用主DHCP服务器并(重新)配置连接。

如果您获得了IP地址,那么您就流氓了。

如果您使用Linux,则标准dhcpclient会告诉您DHCP服务器的IP地址(否则,您可以嗅探流量以查看DHCP响应来自何处)。


2
尽管这当然可以工作,但是如果您实际上担心提供服务,则停止生产DHCP服务器可能不是最佳方法……
Massimo 2012年

2
取决于您服务的人数。在大多数情况下,您可以中断服务几分钟,而没人会注意到,尤其是在大多数人已经租用了一天的中途。
Vinko Vrsalovic

3

有几种方法,如果您运行的是小型网络,最简单的方法是关闭/禁用/拔下dhcp服务器,然后在客户端上运行ipconfig / renew或类似的命令,如果您获得IP,则您的计算机上存在一些问题网络。

另一种方法是使用Wireshark数据包捕获器/分析器查看您的网络流量并查找DHCP连接,此处有一个实验室工作表,介绍如何实现此目的

还有许多实用程序可以做到这一点,一个是DHCP资源管理器,另一个是您在原始帖子中提到的DHCP探针。



2

您可以对网络进行ping扫描,然后将其与DHCP服务器分发的DHCP租约数量进行比较。

您需要对静态设备(可能是路由器接口和打印机)的数量有一个大致的了解,但会略微偏斜该数量,但这应该是在多个网络中识别它们的快速而准确的方法。


0

在debian / ubuntu上,也可以选择使用dhcpdump和/或tcpdump借助例如dhclient

使用dhcpdump:

  • 1.a)dhcpdump -i eth0在一个shell / shell中运行(eth0或您的接口名称)
  • 1.b)从dhclient另一个外壳启动(不必成功运行)
  • 1.c)查看的输出以dhcpdump获取信息(它应该是格式精美,内容详实的详细信息列表)

选项2如果您不喜欢使用dhcpdump:

  • 2.a)tcpdump -i eth0 -t -n > /tmp/my_file.txt在一个外壳程序/窗口中运行
    (可选:-t=禁用时间戳// // -n禁用名称解析,仅IP地址,无服务器名称(对于RHEL / centos使用-nn))
  • 2.b)dhclient在另一个外壳中启动(不必成功运行)
  • 2.c)停止运行的tcpdump()
  • 2.d)使用您最喜欢的编辑器检查文件/tmp/my_file.txt并搜索以下内容:“ .53”(默认DNS端口)/“ NX” /“ CNAME” /“ A?” /“ AAAA”-

*旁注:可能必须安装tcpdump和dhcpdump(例如:)sudo apt get install tcpdump dhcpdump;dhcpdump取决于tcpdump


0

我建议启动两个终端,一个用于监视,另一个用于发送请求。Terminal1将显示来自所有现有DHCP服务器的响应,包括MAC地址。此示例在Ubuntu上运行:

Terminal1(用于监视):

sudo tcpdump -nelt udp端口68 | grep -i“启动。*回复”

tcpdump:详细输出被抑制,使用-v或-vv进行完整协议解码,监听enp2s0,链接类型EN10MB(以太网),捕获大小262144字节20:a6:80:f9:12:2f> ff:ff:ff: ff:ff:ff,以太网类型IPv4(0x0800),长度332:192.168.1.1.67> 255.255.255.255.68:BOOTP / DHCP,答复,长度290 00:23:cd:c3:83:8a> ff:ff :ff:ff:ff:ff,以太网类型IPv4(0x0800),长度590:192.168.1.253.67> 255.255.255.255.68:BOOTP / DHCP,答复,长度548

Terminal2(用于发送请求):

sudo nmap --script广播-dhcp-发现-e eth0

从EEST预扫描脚本结果开始于2019-10-13 21:21 启动Nmap 7.01(https://nmap.org):| broadcast-dhcp-discover:| 响应1之1:| | 提供的IP:192.168.1.228 | DHCP消息类型:DHCPOFFER | IP地址租用时间:2h00m00s | 服务器标识符:192.168.1.1 | 子网掩码:255.255.255.0 | 路由器:192.168.1.1 | _域名服务器:8.8.8.8,8.8.4.4警告:未指定目标,因此扫描了0台主机。Nmap完成:在0.94秒内扫描了0个IP地址(0个主机已启动)

只需要该监视终端即可查看所有响应(nmap只能显示第一个响应)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.