SNMP… Strings Attached!
Dale Hobbs
在进行内部网络渗透测试时,我几乎总是发现配置了默认社区字符串的简单网络管理协议(SNMP)。
简单网络管理协议(SNMP)是一种广泛使用的协议,用于管理和监控网络设备,如路由器、交换机和服务器。它允许网络管理员管理和监控网络设备的性能,并在出现问题时进行故障排除。
SNMP基于“管理器-代理”模型,其中中央网络管理系统(NMS)充当管理器,并与每个网络设备上的SNMP代理通信。NMS向代理发送请求以获取设备信息,代理则响应请求的数据。这使得NMS能够从网络上的所有设备收集和分析数据。
SNMP依赖于安全字符串(或“社区字符串”),这些字符串授予对设备管理平面的部分访问权限。我们经常看到两种常见的社区字符串——‘public’(主要提供只读访问)和‘private’(通常提供读写访问)。
使用默认SNMP社区字符串的设备可以通过SNMP查询读取其整个配置。此外,当设备使用默认字符串(如‘public’)配置SNMP写访问时,攻击者可以轻松修改设备的配置。
SNMP有3个版本:
- SNMPv1:这是最旧的版本,其身份验证基于社区字符串,该字符串在传输时未加密,因此所有信息也以明文传输。它易于设置,但仅受明文社区字符串保护。
- SNMPv2c:版本2c与版本1几乎相同,只是增加了对64位计数器的支持。这是目前最常用的版本,但与版本1一样,也以明文发送流量,并使用明文社区字符串进行身份验证。即使您使用非默认社区字符串,获得中间人位置也会通过简单的数据包分析导致社区字符串泄露。
- SNMPv3:版本3是SNMP的最新版本,增加了加密和身份验证,可以一起使用或单独使用。它比版本1或2c更复杂,但是一个更安全的选择。
让我们看看可以从设备收集哪些类型的信息。Nmap有一些有用的NSE脚本专门用于SNMP。例如,使用‘snmp-sysdescr’ NSE脚本,我们可以检索服务器类型和操作系统。
使用‘snmp-interfaces’ NSE脚本,我们可以收集有关设备的一些网络信息,例如IP地址、任何其他网络接口,甚至流量统计信息。
虽然这些对网络管理员都很有用,但它们对攻击者也很有用,因为它们可以开始构建系统配置文件并尝试制定攻击计划。
虽然这绝不是您可以使用SNMP做的事情的详尽列表,但它至少应该让您了解我们可以使用SNMP收集什么。如果您想查看更多SNMP脚本,可以咨询https://nmap.org。
现在,我们已经从蓝队角度看到了使用SNMP可以做的几件事,让我们看看作为攻击者,当配置了默认社区字符串时,我们可以使用SNMP做什么。出于本文的目的,我们将攻击一个配置了SNMP的基于Linux的系统,希望获得远程shell。
首先,通过对系统进行简单的Nmap UDP扫描,我们可以看到SNMP确实在系统上运行,并使用默认UDP端口161。
现在我们已经确认系统正在运行SNMP,我们可以使用Metasploit的‘scanner/snmp/snmp_login’模块来查看系统是否正在使用默认社区字符串。
从上面的输出可以看出,系统实际上正在使用‘public’(只读)和‘private’(读写)社区字符串。因为我们使用‘private’字符串具有读写访问权限,我们现在能够通过向‘nsExtendObjects’表添加额外行来在系统上添加或执行额外命令。
‘nsExtendObjects’是Net-SNMP代理的NET-SNMP-EXTEND-MIB扩展的一部分,允许您查询任意shell脚本。深入探讨这一点超出了本文的范围,但如果您想了解更多信息,可以在这里找到详细文章。
使用以下命令,我们可以将命令注入SNMP配置,该命令将创建反向shell回到我们的攻击者系统。
|
|
接下来,我们在攻击者系统上启动一个Netcat监听器。
随着我们的Netcat监听器等待,我们现在使用snmpwalk触发受害者上的命令执行,并启动与攻击者系统上Netcat监听器的连接。
我们可以安全地忽略超时消息,因为我们可以在Netcat监听器中看到来自受害者系统的新连接。更糟糕的是,我们不仅拥有受害者系统的远程shell,还可以看到我们拥有系统的root访问权限。
这种类型的攻击可以扩展到网络基础设施设备,如路由器、交换机和其他设备。想象一下攻击者修改访问控制列表、更改VLAN配置或简单地禁用网络基础设施设备上的端口的后果。读写访问可用于绕过安全控制、在网络上横向移动或导致拒绝服务事件。
现在我们已经看到了SNMP如何被滥用,让我们看看一些保护SNMP的最佳实践。
首先,如果您没有明确使用SNMP,那么您应该尽可能禁用它。如果您有意使用它,那么请确保更改默认社区字符串,并使用除‘public’和‘private’之外的其他内容。使用独特且难以猜测的内容将使攻击者更难访问您网络上的SNMP。
此外,您可以在防火墙或访问控制列表(ACL)处阻止对端口161和162的访问。这将允许您的授权系统仍然访问您的SNMP启用设备,同时防止攻击者访问SNMP。除非他们已经破坏了您的授权系统之一,在这种情况下,您可能有比SNMP更大的问题需要担心,但这是另一天的话题。
最后,考虑使用SNMPv3与AuthNoPriv模式来加密身份验证凭据,并将其配置为使用MD5和SHA以增加安全性。
总之,SNMP是网络管理员的一个宝贵工具,但它也可能被攻击者滥用。通过采取必要的安全措施和监控网络,组织可以保护自己免受SNMP滥用,并确保其网络的完整性和可用性。