一、UPnP簡介
通用即插即用(英語:Universal Plug and Play,簡稱UPnP)是由“通用即插即用論壇”(UPnP™ Forum)推廣的一套網絡協議,主要用於設備的智能互聯互通。
UPnP可以當作是一個相對復雜的網絡協議,畢竟它包含了很多其他的網絡協議,如:ip(設備尋址)、tcp、udp(數據打包發送)、http(數據傳遞格式)等。
UPnP可以擴展,也就是說還可以在啟動加入其他的協議,比如:傳遞數據時,http協議再包一層json協議,或者數據傳遞使用xml協議來傳遞等等。
UPnP之所以強大,很大一個原因是基於互聯網,這樣對等設備可以通過互聯網自由交互,也就是說任何可以聯網的設備都可以使用UPnP協議。
二、UPnP用法
(1)尋址——Addressing
因為基於互聯網,需要滿足基本的p2p協議,所以就必須要尋址,尋址的過程就是設備獲取ip地址的過程,這個里面一般都使用DHCP(Dynamic Host Configuration Protocol,動態主機配置協議),即路由動態的分配一個沒有使用的ip地址給設備。
(2)發現——Discovery
UPnP通過SSDP(簡單服務發現協議)完成設備的發現。通過尋址擁有了身份標識IP,加入了互聯網當中。新加入的設備向UPnP專用
的組播地址(239.255.255.250:1900)發送消息宣告自己的存在。
(3)描述——Description
在設備發現的過程中,設備描述文件的URL包含在設備加入網絡
時發送的消息中,也就是LOCATION中的描述url,通過location中的url能獲取一個xml,一般設備的描述都是通過xml來標識的。
(4)控制——Control
UPnP通過SOAP協議控制設備,按照XML描述文件中的信息,以
Device(設備)+Service(設備的服務)+action(動作)+Variable
(值)的形式控制設備。一個控制的過程包含控制地址、控制說明、控制執行、控制響應。
(5)事件——Eventing
事件即設備的狀態量發生了變化,需注冊一個觀察者。當狀態量發生了變化時,設備會提示觀察者狀態量發生變化,並及時處理。
(6)展示——Presentation
展示作為一個控制和事件的補充,實現upnp協議並不強制要求。
關於UPnP協議詳細內容,請參閱:
https://blog.csdn.net/braddoris/article/details/41646789
https://blog.csdn.net/braddoris/article/details/41646809
三、應用場景
1.智能家庭網絡
許多智能家居環境使用了現存的家庭控制網絡,例如家庭網絡來控制和監控整個家居環境,比如燈光,安防和其他家庭設備。這些網絡可以連接PC上,但是除了PC之外,不能被其他的設備存取。使用UPnP設備可以橋接這些網絡成為一個網絡,並提供用戶更多設備存取家庭網絡中的設備。在實現時也無須對家庭網絡中的現有布線和設備進行昂貴的升級,只需要將設備變成UPnP設備並能夠與控制點通訊並接受控制點的控制命令。
2.數字音視頻文件管理
可以在PC和其他設備上播放的數字化音視頻文件在近幾年正在成指數級的增長。一個家庭中,可能有幾台計算機或者其他設備用於保存這些文件。使用UPnP可以使這些分布在不同PC的文件統一管理。這些設備能被發現然后被其他控制點(比如個人電腦、UPnP接收器)控制,播放器可以通過家庭網絡獲得這些音視頻文件並播放它們,用戶可以在電視上欣賞這些音視頻文件。
3.數字圖片庫
許多家庭使用數字相機拍照,或者將已有照片掃描保存,然后將這些照片上載到他們的計算機中保存。在計算機中對其進行分類,或者以幻燈片的形式進行顯示。隨着照片的增加,照片可能保存在多種設備或者多種介質上,比如光盤、硬盤、Flash卡。使用UPnP技術,圖片庫可以自己作為一個設備存在,並自動在網絡上聲明。這使得一個照片庫可能臨時為多個應用程序使用,例如可以進行幻燈片顯示的同時,在電子像框、機頂盒和電視上進行顯示。
四、UPnP利用
MirandaUPNP 是各種各樣的智能設備、無線設備和個人電腦等實現遍布全球的對等網絡連接(P2P)的結構。例如,迅雷軟件就支持UPNP結構,從而加快軟件下載速度。為了提高P2P類程序的網速,很多人都會打開路由器中的UPNP功能。
而Miranda是Kali提供的一款基於Python語言的UPNP客戶端工具,是一個通過UPNP功能來探測主機信息的工具,並不限於探測操作系統。它可以用來發現、查詢和操作UPNP設備,尤其是網關設置。當路由器開啟UPNP功能,存在相應的漏洞,就可以通過Miranda進行滲透和控制。
五、驗證
(1)miranda
通過命令,進入miranda的shell
miranda -v -i eth0 指定打開網卡eth0
(2)msearch
在shell中,執行msearch命令,搜索支持UPnP的主機
路由器的UPNP功能往往需要手動開啟,默認是關閉的
(3)Help
通過help可列出miranda的命令
(4)設備發現
host list:查看發現的設備列表
host get <n>:獲取信息(查詢summary之前需執行)
host info <n>:顯示查詢到的信息
host summary 0:顯示xml文件的摘要信息
(n為設備在列表中的編號)
(5)訪問url
可以查看到設備描述的xml文件
(6)獲取設備列表
host info 1 deviceList
(7)獲取設備支持的命令/服務信息
六、UPnP擴展
CVE-2020-12695
1.命名:CallStranger漏洞
該漏洞允許攻擊者繞過內網的數據防泄露系統(DLP)進行數據逃逸,可導致敏感數據泄露,並且可對設備所在內部網絡進行掃描,甚至能劫持設備進行分布式拒絕服務(DDOS)攻擊。
2.影響設備
CallStranger漏洞存在於協議設計中,因此該漏洞影響幾乎所有支持UPnP的設備,包括Windows 10所有版本、路由器、訪問接入點、打印機、游戲機、門鈴對講機、媒體應用程序和設備、攝像頭、電視機等。根據SHODAN和ZoomEye的搜索結果,至少有數以百萬計的在線設備受到影響。
3.漏洞分析
在關於UPnP的NT與CALLBACK訂閱模塊中,publisher path一般為訂閱的服務,以GENA格式存放在設備的某個XML文件中。
CALLBACK的值一般為回調地址的URL。NT取upnp:event表示訂閱事件。
該協議並沒有對CALLBACK傳入的URL進行限制和規范,也就是說,CALLBACKURL是攻擊者可控的。
4.漏洞危害
CallStranger漏洞所造成的危害可以分三個方面:DDoS攻擊、數據逃逸和端口掃描。其中造成的DDoS攻擊可以分兩種,SYN洪水攻擊和TCP反射放大攻擊。
5.漏洞緩解及修復
可采用如下措施進行漏洞緩解:
(1)檢查可疑設備,如果沒有必要,則關閉UPnP端口。
(2)在網關等設備中審計NOTIFYHTTP數據包。