我已经编写了一个扩展 netsnmp 的自定义 SNMPV2C 代理(agentx 协议),截至目前,我允许对 snmpd.conf 中的所有内容进行查看访问,如下所示
view all included .1
它公开了看起来不错的 mgmt (RFC1213),它还公开了 snmpV2 mib (snmpMIB、snmpFrameworkMIB、VacmMIB 等)。
除了打开我们的企业 oid 树之外,我找不到任何最佳实践文档来详细说明应该公开哪些内容、安全风险是什么等。
什么是安全风险
使用 SNMP v2c,您没有加密,也没有签名。这意味着中间人攻击可以:
此外,查询可以通过 UDP 完成,因此 IP 源地址无需正确路由回源。因此,IP 欺骗可用于绕过 IP ACL 并将 SNMP Set请求从虚假 IP 源发送到目标。
请注意,使用 SNMP v3可以避免所有这些风险。
因此,要么增加另一个网络层(例如 IPsec)来提高安全性,要么只公开带有公共内容的只读OID 。
例如,性能计数器或基本配置参数(如 IP 地址、主机名、计数器)可能会被暴露。也许您应该进行风险分析,以找出真正可以暴露哪些信息。
起初,SNMP v1 根本不安全。因此,SNMP v2 已被提议用于增加安全性以及其他新功能。但这太复杂了,新的安全特性被删除了,其他特性被保留了,协议最终以 SNMP v2c的名称发布。最后,创建 SNMP v3主要是为了提供安全功能,但比使用 SNMP v2 更容易实现。
USM 用户数据库在 MIB 本身 ( usmUserTable
) 中公开,因此:
snmpusm(1)
为旧/新密码短语运行垃圾来完成。)同样,VACM MIB 包含访问策略信息,例如:
vacmContextTable
);vacmSecurityToGroupTable
);vacmAccessTable
和vacmViewTreeFamilyTable
)。我不认为 Net-SNMP 允许对这些 VACM 表进行读写访问(该策略取自/etc/snmp/snmpd.conf
代理并且不被代理修改),但即使是只读访问也可能会泄露太多信息。例如,它可以让攻击者找出哪个 USM 用户可以访问攻击者感兴趣的视图,并对那个特定的 USM 用户发起密码破解攻击。
SNMPv3 USM 和 VACM RFC 本身明确警告您这些表的敏感程度:
11.5 Access to the SNMP-USER-BASED-SM-MIB
The objects in this MIB may be considered sensitive in many
environments. Specifically the objects in the usmUserTable contain
information about users and their authentication and privacy
protocols. It is important to closely control (both read and write)
access to these MIB objects by using appropriately configured Access
Control models (for example the View-based Access Control Model as
specified in [RFC3415]).
和:
7.4. Access to the SNMP-VIEW-BASED-ACM-MIB
The objects in this MIB control the access to all MIB data that is
accessible via the SNMP engine and they may be considered sensitive
in many environments. It is important to closely control (both read
and write) access to these to these MIB objects by using
appropriately configured Access Control models (for example the
View-based Access Control Model as specified in this document).
我建议至少明确排除 USM 和 VACM MIB。例子:
view most included .1
view most excluded .1.3.6.1.6.3.15
view most excluded .1.3.6.1.6.3.16
不添加之前答案中给出的一般建议,我建议用于snmpwalk -v2c -c community localhost .1 | your_pager
浏览您可以看到的所有信息。然后决定您可能不想看到哪些信息。
例如,在 Linux 上,您通常可以看到所有进程及其参数以及已安装的磁盘设备和文件系统。