TP-LINK路由器緩衝區溢出0 day 漏洞

導語:IBM安全研究人員發現TP-LINK路由器存在緩衝區溢出漏洞,攻擊者可以利用該漏洞遠程控制路由器。

路由器已經成為我們日常生活的必需品,在家庭和辦公室隨處可見。人們依賴路由器進行通信、銀行交易、網上購物等等。IBM安全研究人員Grzegorz Wypych對消費者使用的最廣泛的互聯網路由器TP-Link WR-940進行了分析,發現其中存在一個0 day緩衝區溢出漏洞,惡意第三方可以利用該漏洞遠程控制路由器設備。

下面對該漏洞進行分析:


TP-LINK路由器緩衝區溢出0 day 漏洞


圖1: TP-Link WR940

認證和控制

2018年9月,美國消費者協會發布報告稱80%以上的路由器存在安全漏洞,因此研究人員對使用最廣泛的路由器進行了安全性分析。

首先,研究人員分析了TP-Link WR940運行的軟件和硬件信息,硬件版本是TL-WR940N hardware version 3和TL-WR941ND hardware version 6,運行的固件版本都是150312。

從該設備的軟件安全性來看,對路由器的控制主要應用在用戶用來配置路由器的web接口上。但是對接口的控制無法保護路由器,而且易被攻擊者利用。比如,在系統工具/測試選項中,用戶可以通過ping發送ICMP echo請求和響應包,即發送包到IPv4地址或主機名。面板的安全控制可能會限制字符的類型和數量,但是不會限制用戶用Burp Suite代理來攔截和修改請求。

Bug by Bug

然後研究人員開始尋找一些通用的應用漏洞。研究人員首先檢查了命令注入,因為ping這樣的操作大多是使用Bash shell的。但是研究人員沒有通過靜態分析發現對系統的引用,然後研究人員檢查了注入攻擊場景。

研究人員發現當用戶發送ping請求後,會在設備的console上限制一個消息,如下圖所示:


TP-LINK路由器緩衝區溢出0 day 漏洞


圖2: Ping請求調用路由器console上的消息

然後研究人員運行了Burp Suite帶來來檢查到ping服務的出GET請求。下圖中可以看到請求的參數,圖2的console消息中也有同樣的參數。


TP-LINK路由器緩衝區溢出0 day 漏洞


圖3: 到ping服務的GET請求

然後,研究人員啟動IDA disassembler來查看字符串引用:


TP-LINK路由器緩衝區溢出0 day 漏洞


圖4: IDA Pro上到ping服務的GET請求

可以直接挑戰到引用的函數的地址:

# DATA XREF: sub_44C610+5E0↑o 

然後可以看到另一個消息塊:


TP-LINK路由器緩衝區溢出0 day 漏洞


圖5: IDA Pro中的消息塊

語法是用Microprocessor without Interlocked Pipeline Stages(MIPS,無互鎖裝置的流水線微處理器)Assembly語言編寫的,MIPS是用來與MIPS微處理器協作的,主要用於網關、路由器這樣的嵌入式系統。

在MIPS中央處理器單元中:

· 函數參數是在寄存器$a0-$a3中傳遞的,如果某個函數的參數多於4個,就會被推進棧中。

· 寄存器$t9常被用作跳轉地址的holder,常用jalr指令來加載內存地址並跳轉到寄存器$t9。

· 調用的函數必須保存$s0-$sX寄存器,X表示$s類型的可用寄存器的最大數量。

· 返回的值保存在$v0 or $v1寄存器中。

經典緩衝區溢出

下面進入下一步分析。

從下圖中可以看出printf函數接收到一個到console記錄中出現過的字符串的指針。這裡的參數被加載到$a0寄存器中。

然後,調用ipAddrDispose函數。它會加載到$a2寄存器,值為564(十進制),它也可以作為函數中的一個參數。下面看一下該函數:


TP-LINK路由器緩衝區溢出0 day 漏洞


圖6: ipAddrDispose函數暴露緩衝區溢出問題

Strcpy函數調用是TP-Link httpd進程控制的開始,也是存在漏洞的二進制文件。這是一個經典的緩衝區溢出問題。

還函數會一個字節一個字節地複製接收到的輸入,並保存到一個大小並不合適的緩衝區中。因此數據的大小會超過緩衝區的邊界。

漏洞是可利用的

研究人員為該漏洞創建了PoC,證明了該漏洞是可以被利用的。

首先分析數據大小超過可用空間後會發生什麼,因此研究人員將ping_addr參數修改為hold number 0x41,超過了緩衝區的大小。下圖是ipAddrDispose函數為棧幀預留的224字節空間。


TP-LINK路由器緩衝區溢出0 day 漏洞


圖7: ipAddrDispose為棧幀預留了224字節內容

因為棧中有224字節數據,因此研究人員發送300字節的A以分析緩衝區溢出的結果。研究人員用Burp Suite攔截了HTTP請求,並修改了ping_addr 參數。


TP-LINK路由器緩衝區溢出0 day 漏洞


圖8: 發送300字節的A

根據console中出現的消息,研究人員猜測可能覆蓋了返回地址$ra,並開始控制程序執行。

TP-LINK路由器緩衝區溢出0 day 漏洞


圖9: 路由器console消息表明地址可能被覆蓋

在編寫漏洞利用之前,還要檢查如果發送了太大的payload,哪些會被覆寫。下面看以下位於/tmp文件夾的複製的核心內存信息:

研究人員想知道如果利用該漏洞的話是否可以控制寄存器,以及可以控制哪個寄存器。因此研究人員下載了複製的核心內存信息:


TP-LINK路由器緩衝區溢出0 day 漏洞


圖10: 分析TP-Link路由器核心內存信息

因為路由器是MIPS架構的,因此下一步是使用gdb-multiarch來打開復制的核心內存信息。


TP-LINK路由器緩衝區溢出0 day 漏洞


圖11: 使用gdb-multiarch打開核心複製的核心內存

然後就可以控制以下三個寄存器了:

· $s0;

·

$s1; and

· $ra.

因為$a0寄存器只引用了棧中的一個地址,因為研究人員只獲得了部分控制權。而且漏洞利用發生在MIPS架構上,這與常見的web應用緩衝區溢出漏洞利用是不同的。

總結

美國消費者協會2018年發佈報告顯示有83%的WiFi路由器存在安全漏洞,其中許多都是開源漏洞,受影響的產品包含多個來自全球的知名品牌。路由器已經不再是一個簡單的中繼設備,路由器擁有自己的操作系統、軟件,同時也有專屬的漏洞。路由器的漏洞是非常常見的,可以歸因於不同的因素,成本因素也是主要考慮因素之一。

路由器被黑會帶來什麼後果呢?路由器漏洞會導致用戶數據被洩露或被攻擊者用於構建殭屍網絡或攻擊其他主機。攻擊者還可以利用路由器漏洞來監視用戶、發送釣魚信息,修改用戶訪問網站的數據。如果路由器感染惡意軟件,就可能會變成殭屍網絡的一部分。

TP-Link也發佈了相應的補丁,研究人員建議用戶儘快更新固件,下載鏈接:

TL-WR940Nv3: https://www.tp-link.com/pl/download/TL-WR940N_V3.html#Firmware

TL-WR941NDv6: https://www.tp-link.com/pl/download/TL-WR941ND.html#Firmware


分享到:


相關文章: