简单网络管理协议或 SNMP 是最不为人所知的协议之一,但对于网络的成功运行至关重要。如果攻击者能够破坏 SNMP,他们可能能够揭开您加密的 VPN 通信的掩码并查看并可能控制连接到您网络的每台设备。
简单网络管理协议使用 UDP 端口 161 和 162 来管理网络设备。网络设备使用此协议相互通信,管理员可以使用它来管理设备。作为黑客,如果我们能够访问 SNMP 协议,我们就可以在目标网络上获取大量信息资源,甚至可以禁用和更改这些设备上的设置。想象一下,通过更改路由器和交换机的设置可能造成的破坏!
SNMP 背景
简单网络管理协议 (SNMP) 是 Inte.NET 协议套件的一部分,旨在管理计算机和网络设备。思科将其描述为“一种促进网络设备之间信息交换的应用层协议”。简洁正确,但缺少SNMP也提供的管理功能。
SNMP 是一种无状态的、面向数据报的协议。它涉及一台或多台称为管理器的管理计算机。这些管理器监视和管理一组计算机。每台受管计算机都安装了一个与管理器通信的代理。请参见下图了解 SNMP 如何运行的示意图。
受管计算机上的代理向管理计算机提供管理数据。管理者可以承担管理任务,包括修改和应用新配置。
每台受管机器上的代理公开的管理数据存储在称为管理信息库或 MIB的分层数据库中。我们将在这里寻找的正是 MIB 中的这些信息。此 MIB 包含有关网络上每个设备的大量信息,包括用户、安装的软件、操作系统、开放端口等。所有这些信息对于开发针对目标的利用策略都是非常宝贵的。
SNMP 协议在 UDP 端口 161 上进行通信。通信发生在协议数据单元或 PDU 上。这些 PDU 有七 (7) 种类型。
1.获取请求
2.设置请求
3.获取下一个请求
4.获取批量请求
5.回复
6.统计
7.通知请求
SNMP 具有三 (3) 个版本。
版本 1 或 SNMPv1,安全性很差。客户端的身份验证以明文形式进行,默认情况下,使用设置为“ public ”的“community string ”。该字符串的操作类似于密码,并且对网络上的每个节点都有效。经身份验证也是一个管理名称字符串设置为“私人",默认情况下。使用这些管理名称字符串,攻击者可以从 MIB 中收集所有信息(使用公共管理名称字符串),甚至可以在设备上设置配置(使用私有管理名称字符串)。虽然它广为人知并且了解到 SNMPv1 是不安全的,它仍然被广泛使用(我最近在纽约一家主要银行进行了安全评估,他们仍在使用 SNMPv1)。即使网络管理员更改了默认的管理名称字符串,因为通信是明文的,攻击者可以从网络上嗅探身份验证字符串。
SNMPv2 在性能和安全性方面对 SNMPv1 进行了改进,但由于不能向后兼容 SNMPv1,因此没有被广泛采用。SNMPv3 比 SNMPv1 或 v2 安全得多。SNMPv3 增加了加密、消息完整性和身份验证,但仍未在所有网络上使用。
SNMPv1的Wireshark分析
下面我们可以看到Wireshark通过 LAN 捕获的 SNMPv1 通信。
请注意上方窗口中的 Get-Request、Get-Response 和 Get-Next-Request 以及下方窗口中的管理名称字符串。
滥用 SNMP 进行信息收集
现在我们对 SNMP 协议有了一些背景知识,让我们使用它来收集有关目标的信息。打开 Kali 并转到Applications --> Kali linux -->Information Gathering --> SNMP Analysis -->snmpcheck,如下面的屏幕截图所示。
当您这样做时,您将看到如下所示的snmpcheck帮助屏幕。
Snmpcheck是一个 Perl 脚本,用于查询 SNMP MIB 以获取有关目标 IP 的信息。它的语法相当简单;
kali >snmpcheck -t <目标IP>
当然,一些选项可用,例如管理名称字符串(默认使用“public”)、SNMP 版本(默认使用 1 或 2 是另一个选项。注意,它不适用于更安全的 SNMP v3 ) 和其他几个。我们将在此处针对我们网络上的 2003 服务器使用它,以查看 SNMP 可以为我们提供有关目标的哪些信息。
正如您在下面的屏幕截图中看到的,我们运行了snmpcheck,它开始从 MIB 中收集有关目标的信息并将其显示在我们的屏幕上。最初,它提供有关硬件的信息,然后是操作系统和正常运行时间(正常运行时间对于确定系统是否已打补丁非常有用)。
接下来,它显示设备信息。
其次,存储信息。
然后,用户帐户(这在以后尝试破解用户密码时很有用。它消除了猜测用户帐户名称的需要)。
最后,在系统上安装软件。当我们开始开发利用策略时,这可能特别有用,因为利用特定于应用程序及其版本。
破解 SNMP 符串
正如上面所看到的,如果我们可以访问 SNMP,SNMP 可以为我们提供有关目标的大量信息。我们假设管理员将管理名称字符串设置为“public”。如果管理员更加谨慎和安全并更改了管理名称字符串怎么办?我们如何找到管理名称字符串?
Kali 内置了一个名为oneixtyone的优秀工具(大概以 SNMP 运行的默认端口命名)。本质上,它是一个 SNMP 管理名称字符串破解器。像大多数“密码”破解者一样,它依靠字典或词表来尝试对服务进行攻击,直到找到匹配项。
让我们通过转到Applications --> Kali Linux --> Information Gathering -->SNMP Analysis -->onesixtyone打开onesixtyone。它应该会打开一个如下所示的帮助屏幕。
oneixtyone的语法非常简单明了。
kali >oneixtyone [options]
与基于字典的密码破解程序一样,与oneixtyone一起使用的字典至关重要。在oneixtyone的情况下,它有一个内置的字典。它很小,但包含许多 SNMP 常用的字符串。如果您正在为 SNMP 破解创建自己的字典,这是一个很好的起点,但您可能希望使用域名或公司名称的变体来扩展它,因为网络管理员通常不会花太多精力为 SNMP 创建复杂的字符串.. 例如,如果公司是 Microsoft,您可以尝试懒惰的管理员可能使用的字符串,例如microsoft-public、microsoft-private、microsoft-snmp、microsoft-network 等。
让我们通过键入来查看字典文件;
kali>cat/usr/share/doc/onesixtone/dict.txt它包含一个广泛使用的 SMNP 管理名称字符串的简短列表。我们将使用这个简短的字典来查看是否可以在我们的网络上找到该管理名称字符串,然后在snmpcheck中使用它来收集有关目标的所有信息。
在我们的例子中,我们将在与以前相同的系统上使用它,所以我们的命令是;
kali>onesixtyone 192.168.1.102 -c /usr/share/doc/onesixtyone/dict.txt
正如您在上面的屏幕截图中看到的,它能够找到私有管理名称字符串(仍设置为默认的“private”)和公共管理名称字符串(仍设置为默认的“public”)。然后可以将这些管理名称字符串与snmpcheck一起使用,以从 MIB 中获取有关目标系统的信息。
NSA 利用 SNMP 来揭露 VPN 通信
我们知道 NSA 已经利用 SNMP 从 Edward Snowden 发布的文件中揭露 VPN 通信。有关此NSA ExtraBacon 漏洞利用的教程,请单击此处。尽管该漏洞已被 Cisco 修补,但 NSA 很可能还有另一个 SNMP 漏洞利用来查看加密通信。
结论
如果我们可以访问它,SNMP 可以成为目标网络上的丰富信息源。snmpcheck将从 MIB 中提取信息,oneixtyone帮助我们破解 SNMP“密码”。两者对于利用 SNMP 进行侦察都至关重要。