什么是snmp-set fuzzer
snmp-set fuzzer是一个用于对目标设备的snmp可写oid节点数据进行Fuzz的小工具。项目的地址是https://github.com/dark-lbp/snmp_fuzzer
为什么要编写snmp-set fuzzer这个工具
- 在对许多工业控制设备进行安全测试时发现大量的设备默认开启了snmp服务并支持snmp写操作,且部分设备使用了默认的snmp community值且无法修改。
- 希望有一个相对灵活且自动化的小工具能够对这些开放了snmp写权限的设备进行检测从而评估设备的安全性。
如何使用snmp-set fuzzer
在对目标设备进行fuzzing之前我们, 我们首先需要对目标设备的可写OID节点进行扫描,snmp-set fuzzer
会使用snmp-get-next
请求来遍历所有的oid节点,通过将获取到的数据使用snmp-get
请求写回目标设备并根据返回值来判断该oid节点是否可写。
下面是对某个设备进行oid节点扫描并将扫描结果进行保存的例子。
1 | from snmp_set_fuzz import * |
snmp-set fuzzer
也同样支持从保存的pcap数据包文件直接获取可写oid节点清单。
1 | from snmp_set_fuzz import * |
在直接扫描或读取以前扫描生成的pcap文件获取到可写oid节点后,就可以使用snmp-set fuzzer
进行fuzzing测试了。下面是执行fuzz的例子,测试过程中将基于各个可写oid节点的数据类型对写入数据进行随机变异后使用snmp-set
请求发送给目标设备并对其反馈进行检测,当目标设备对某个写请求不进行反馈或反馈异常时,会对目标设备的存活进行检测。
1 | from snmp_set_fuzz import * |
工控设备默认开启SNMP的危害
在以往的测试过程中通过snmp-set fuzzer
发现过一些工控设备的漏洞,主要集中在对snmp写操作的数据没有进行有效的校验。例如某设备支持通过snmp写操作来修改设备网卡的mac地址,但是没有对mac地址的长度进行校验,只要传入过长或者过短的mac地址都会造成设备瘫痪。还有些设备的网卡可以通过snmp写操作来开启和禁用,这样直接就会造成设备的网络中断影响业务。此外通常厂商还会有其自定义的私有oid节点,这些节点也很可能会存在一些安全问题,导致设备出现各种预期外的异常。
在使用shodan对开启了snmp服务的控制设备进行了简单的搜索后可以发现,目前网络上还是有不少开启了snmp服务的控制设备直接暴露在互联网中,如果这些设备对snmp写操作没有进行有效控制的话,将会面临极大的安全风险。下面是暴露在互联网上的开启了snmp服务控制设备截图。
SNMP协议在带来方便管理的同时也引入了一些安全性上的问题,这些问题在工业控制领域显得尤为突出,大量的设备默认开启SNMP协议且使用public、private等默认community值进行验证。因此如果在实际生产环境中不需要使用到SNMP服务的话,建议还是关闭SNMP的功能,