【漏洞分析】StringBleed攻击:浅析SNMP协议远程代码执行漏洞

阅读量243411

|

发布时间 : 2017-04-27 14:55:49

x
译文声明

本文是翻译文章,文章来源:stringbleed.github.io

原文地址:https://stringbleed.github.io/

译文仅供参考,具体内容表达以及含义原文为准。

http://p4.qhimg.com/t014867d237a3c53e31.png

翻译:WisFree

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


写在前面的话

在去年举办于美国拉斯维加斯的第二十四届DEFCON黑客大会上,我跟大家讨论了有关物联网设备SNMP写权限的安全问题。我们通过研究发现,警察巡逻车、救护车、以及其他用于执行关键任务的车辆其安全性都会受到这个问题的影响。

在2016年12月,我和另外一名来自阿根廷的同事Ezequiel Fernandez决定重新对SNMP协议(简单网络管理协议)进行一次模糊测试,但这一次我们打算使用“community string”的各种组合来进行测试。比如说,如果我们可以将类似“root”、“admin”或者“user”这样比较常用的凭证作为SNMP随机值来测试网络中哪一个节点可以响应我们的请求。


SNMP协议

但是在开始之前,我觉得有必要给大家简单回顾以下有关SNMP协议的基本内容。SNMP是基于TCP/IP协议族的网络管理标准,是一种在IP网络中管理网络节点(如服务器、工作站、路由器、交换机等)的标准协议。SNMP能够使网络管理员提高网络管理效能,及时发现并解决网络问题以及规划网络的增长。除此之外,网络管理员还可以通过SNMP接收网络节点的通知消息以及告警事件报告等来获知网络出现的问题。

首先,我们知道目前有三种方法可以对客户端的身份进行验证,并向远程SNMP设备发送请求。SNMP v1和v2使用了人类可读的字符串数据值(即Community String-社区字符串),而在SNMP v3版本中,用户可以自行选择用户名、密码以及身份验证的方式。除此之外,像对象标识符(OIDs)和陷阱入口(traps)这样的信息将会保存在管理信息库(MIB)之中。

注:Community String在交换机与路由器配置里 意为"社区字符串"。它是一个用在基于简单网络管理协议(SNMP)的管理系统的概念,是一个起着密码作用的文本串,其被用来鉴别在管理站点和一个包含SNMP信息的代理的路由器之间的信息发送。并将被发送到在管理器和代理之间的每个数据包。

http://p0.qhimg.com/t0113531584f7b5ca8a.png


漏洞分析

我们编写了一个简单的Python脚本,这个脚本可以使用套接字(socket)来构建“snmpget”请求。在请求内容中,我们需要使用sysDescr OID,如果我们所测试的字符串值(例如admin或root)正好与SNMP代理所保存的身份验证值相同,那么我们就可以成功获取到sysDescr OID信息了,整个过程与暴力破解攻击十分相似。在经过了几天的扫描之后,我们发现了一个非常奇怪的现象:无论我们发送的是什么值,有些设备/指纹总是会给我们返回响应信息。那么这到底是怎么回事呢???

正如我之前所提到的那样,SNMP v1和v2版本所使用的身份验证机制只能接受保存在SNMP代理验证机制中的数据值,但是根据我们的研究结果来看,这种行为似乎与规范文档中所定义的机制有很大出入。

简而言之,我们发现了如下几个可疑点:你可以使用任意字符串或整数来完成某些特定设备中SNMP代理所要求的身份验证,但更糟糕的地方就在于,你甚至可以利用任意字符串或整数值来获取到目标设备完整的远程读写(read/write)权限。

这就是SNMP协议中所存在的远程代码执行漏洞CVE-2017-5135,漏洞类型:不正确的访问控制。

接下来为了验证我们的发现,我们需要选择一台设备来进行测试。经过分析之后,我们决定选择思科DPC3928SL,而这款设备也是受此问题影响最为严重的设备型号之一。但思科方面表示,公司已经停止对这款型号的网关设备提供技术服务支持了,并推荐了Technicolor路由器,于是我们便开始对Technicolor路由器进行深入分析,看看我们到底能发现什么。在进行了一系列测试之后,我们已经识别出了相应的安全问题并进行了上报,但他们给出的回应是一个我们所不能接受的解决方案。

http://p9.qhimg.com/t01c1bf7add39ac678e.png

http://p4.qhimg.com/t013d71c7e72be0f4fb.png

正如你所看到的那样,Technicolor安全团队解释称,这个问题是一个由网络服务提供商(ISP)所导致的“控制配置错误问题”,而错误并不在Technicolor身上!这简直是没谁了,一句话就把责任推得一干二净。但是对于我们研究人员来说,这样苍白无力的解释很明显是没有任何说服力的。不过没关系,Technicolor安全团队也对我们的工作表示了感谢,并且也迅速回复了我们的信息,但我们并不打算因此而终止我们的分析。

现在,你大概已经了解这个问题了,但是你可能会想:好吧,网络上是不是还会有很多其他的设备同样会受到这一问题的影响呢?没错,你说对了!我们通过实验证明,还有很多不同品牌和不同型号的设备同样会受到这个SNMP协议漏洞的影响,而这也从侧面证实了Technicolor的想法完全是大错特错的…

在此,我们打算将这个漏洞命名为“StringBleed”…:D

接下来,我们打算再进行一次扫描,但这一次我们不准备使用人类可读的字符串了,我们决定生成一个随机哈希值,然后将其发送给网络上所有能扫描到的SNMP设备,而实验的结果也着实出乎了我们的意料。这一次,我们检测到了150多种受到StringBleed影响的设备,而且这些设备都是不同的。

事实证明,Technicolor的观点是错误的,这个问题不是网络服务提供商的错误配置所造成的,而问题似乎是出在代码的身上。


概念验证PoC

【攻击向量】:Community String

测试攻击点的IP地址:“192.168.0.1”

http://p1.qhimg.com/t01a7ddc1ab2b6d9c78.png


总结

1. 我们在SNMP协议中发现了一个远程代码执行漏洞,在这个漏洞的帮助下,我们可以利用任意字符串或整数值来绕过SNMP的访问控制。

2. 我们可以在MIB(管理信息库)中写入任意字符串。

3. 我们可以在无需猜测community string的情况下轻而易举地从目标设备中获取到类似用户密码这样的敏感信息。

4. 这个漏洞修复起来并不简单,因为目前有多家厂商的各种型号设备都受到了该问题的影响,而随着扫描时间的延续,受影响设备的名单也在不断增加。

5. Technicolor安全团队的响应缺乏技术分析的支持,而根据我们的研究结果,他们所给出的回复是让人无法接受的。


受漏洞影响的产品型号


5352

BCW700J

BCW710J

BCW710J2

C3000-100NAS

CBV734EW

CBV38Z4EC

CBV38Z4ECNIT

CBW383G4J

CBW38G4J

CBW700N

CG2001-AN22A

CG2001-UDBNA

CG2001-UN2NA

CG2002

CG2200

CGD24G-100NAS

CGD24G-1CHNAS

CM5100

CM5100-511

CM-6300n

DCX-3200

DDW2600

DDW2602

DG950A

DPC2100

DPC2320

DPC2420

DPC3928SL

DVW2108

DVW2110

DVW2117

DWG849

DWG850-4

DWG855

EPC2203

EPC3212

IB-8120-W21

IB-8120-W21E1

MNG2120J

MNG6200

MNG6300

SB5100

SB5101

SB5102

SBG6580

SBG900

SBG901

SBG941

SVG1202

SVG2501

T60C926

TC7110.AR

TC7110.B

TC7110.D

TC7200.d1I

TC7200.TH2v2

THG540

THG541

Tj715x

TM501A

TM502B

TM601A

TM601B

TM602A

TM602B

TM602G

TWG850-4U

TWG870

TWG870U

U10C019

U10C037

VM1700D

WTM552G

WTM652G

DCM-704

DCM-604

DG950S

本文翻译自stringbleed.github.io 原文链接。如若转载请注明出处。
分享到:微信
+10赞
收藏
WisFree
分享到:微信

发表评论

内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66