公网中的Winbox

iso60001  1844天前

22.png

Winbox是一个小型实用程序,允许使用快速简单的GUI管理MikroTik RouterOS。

我曾经写过关于MikroTik路由器的文章,详细描述了其中的漏洞,如何利用,以及Winbox使用的通信协议,相关开放的端口(8291)等:

Make It Rain with MikroTik

MikroTik Firewall & NAT Bypass

RouterOS Post Exploitation

Rooting RouterOS with a USB Drive

RouterOS: Chain to Root

我花了很多时间来逆向和研究这些系统,所以一旦有人对我的成果产生质疑,那就不得不回应了。

33.png

有人表示全球互联网上没有多少路由器打开了8291端口,而这一结果是通过Shodan和Censys得出来的。

44.png

如果我的研究成果只影响了全球十几台设备,那确实没啥用,只是浪费了读者的时间,我需要证明事实并非如此。

于是我编写了扫描脚本,它会连接到全球IP的8291端口,在不进行身份验证的情况下,尝试获取路由器的RouterOS版本。我扫描了一堆地址,得到了我需要的答案。

扫描结果

对8291端口的扫描从2019年11月30日持续到2019年12月2日,共发现578456个MikroTik路由器,结果放在GitHub上。

请注意,我并没有扫描全球所有的IP,只是借助了@PACKET_TEL的某个扫描IP名单,以及从Shodan查询(FTPSNMPHTTPHTTP代理TelnetPPTP)中收集的IP。

不过,这次扫描得到的578456个结果正好让我对全球RouterOS版本以及漏洞修复率有了一个大概的认识。

补丁

在扫描期间,最新的MikroTik RouterOS版本是6.45.7(Stable)和6.44.6(Long-term),均于2019年10月28日发布。在我开始扫描之前,全球管理员有一个多月的时间来进行升级,而RouterOS版本的扫描结果如下。

55.png

是的,只有15%的设备使用了最新版本的RouterOS,这可是一个月之后了。

6.44.6和6.45.7解决了我先前披露的无需身份验证的严重漏洞,而这些漏洞的攻击手段正是利用开放8291端口的Winbox。我也观察到所部署的Winbox蜜罐受到CVE-2019-3978的攻击。下图是37.49.231.122对DNS缓存的mikrotik.comupgrade.mikrotik.com,以及大约180个加密货币相关的地址进行中毒。

66.png

当然,10月份的漏洞并不是我今年公布的唯一一个和8291端口有关的无需身份验证的漏洞。今年2月,MikroTik修复了CVE-2019-3924,我发现的防火墙绕过问题。然而,至今只有不到50%的路由器修补了它。

77.png

这种绕过方法确实有一些限制,但仍然是有用的。正如我在文章中描述的那样,它可以用来向局域网发起攻击。而在漏洞信息公开10个月后,仍有数十万路由器存在该问题。

不过大部分机器都已打上了CVE-2018-14847的补丁,这可能是由于威胁确实太大,以及某些义务警察的帮助。

88.png

这并不是说我们的蜜罐没有被CVE-2018-14847攻击,我们每天都会观察到好几次。但有趣的是,攻击者似乎都只使用了Exploit-DB的脚本

99.png

通过Winbox端口完全控制设备是很有可能的,但攻击者只是抓取了我蜜罐的管理凭证,也许这只是阶段攻击的第一阶段。

全球MikroTik路由器的种类实在很多,而专业路由器和家用路由器很不一样,往往需要专职人员的维护。基于这一点,我试图找出实际扫描到的是哪种类型的MikroTik设备。

硬件信息

不幸的是,不进行身份验证,Winbox接口就不会共享平台硬件信息,但是Shodan上有很多相关信息(从SNMP接口入手)。

100.png

我将Shodan结果下载了下来,与我的端口扫描结果的IP相匹配,结果不是很好。只有大约10%的扫描数据可以与Shodan结果相匹配。你也可以从GitHub获取原始数据。

也许10%是一个糟糕的数字,但我认为这还是有代表性的,统计图表如下:

110.png

RB951Ui-2Hnd是小型家用路由器(RB951Ui-2Hnd)。其他都是虚拟化(x86)或机架式平台。前两大平台CCR1036-8G-2S+CCR1036-12-4S各有36个核心,分别支持28 Gbps和16 Gbps的吞吐量。这些设备都不是放在你的客厅里的,应该是位于在某个ISP中,有专业人员维护。

不要忽略局域网

一个漏洞不一定是通过互联网攻击才会被认为是严重的。内网机器往往更容易受到攻击。

120.png

我们还能做些什么?

说实话,15%的补丁率相当糟糕,我不确定还有什么可以做的。MikroTik很早就在他们的安全博客和论坛中公布了漏洞信息和修复补丁

其他

我知道两种从8291端口提取版本号的方法。

第一种对于RouterOS 2.0到当前的6.0都有效。主要利用RouterOS代码库中的旧逻辑。

由于MikroTik将许多特性分解成单独的包,所以Winbox客户端需要询问路由器应该下载哪个.dll。为此,客户端会向路由器的mproxy二进制文件发送一个请求,指示客户端想要读取“索引”文件。有趣的是,请求的是路由器不再使用的二进制格式。

130.png

索引文件实际上是/home/web/winbox/中的一个文件。你可以更改请求以读取该目录或/home/web/webfig/中的其他文件。这也是Nessus获取路由器版本的方法。我们的蜜罐也捕捉到类似请求。

另一种方法更常见,只适用于RouterOS 6.0版本,需要发送四个数据包:

1.客户端请求读取列表文件。

2.服务端回复:好的,这是会话ID和文件大小。

3.客户端回复:我想读取会话y的x字节。

4.服务端发送数据。

140.png

如果想查看我的所有代码,可以在GitHub上找到。

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/tenable-techblog/winbox-in-the-wild-9a2ee4946add

最新评论

niufox  :  搜索 port="8291" ** 3,531,870 条匹配结果 (独立**数为 3,467,822 条), 用时 120 毫秒,**: extended。默认只显示一年内的数据,点击 all 链接查看所有。
1842天前 回复
昵称
邮箱
提交评论