公網中的Winbox

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://nosec.org/home/detail/3410.html
來源:https://medium.com/tenable-techblog/winbox-in-the-wild-9a2ee4946add

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章