websocket网络层详解_【技术分享】WebSocket漏洞与防护详解
2017-05-02 14:15:48 閱讀:1889次
預(yù)估稿費(fèi):120RMB
投稿方式:發(fā)送郵件至linwei#360.cn,或登陸網(wǎng)頁(yè)版在線投稿
socket簡(jiǎn)介
一個(gè)socket是一次網(wǎng)絡(luò)通信中的一個(gè)端點(diǎn)。socket總是分為兩部分:一個(gè)IP地址和一個(gè)端口。
例如:當(dāng)您訪問(wèn)www.securelayer7.net時(shí),你的計(jì)算機(jī)和網(wǎng)站的服務(wù)器正在使用socket(端點(diǎn))進(jìn)行通信。網(wǎng)站的端點(diǎn)將是:www.securelayer7.net:80,你的計(jì)算機(jī)的端點(diǎn)將是你的IP地址,后跟任何隨機(jī)端口號(hào),如192.168.0.111:6574
關(guān)于WebSocket
傳統(tǒng)上,HTTP活動(dòng)是由客戶端請(qǐng)求資源而服務(wù)器來(lái)提供服務(wù)。服務(wù)器不能自己與客戶端通話。但這個(gè)限制已經(jīng)被新技術(shù)WebSocket消除了。
WebSockets提供持久連接,也稱為客戶端和服務(wù)器之間的全雙工連接,雙方可以隨時(shí)使用該連接開(kāi)始發(fā)送數(shù)據(jù)。
它是如何工作的?
客戶端,如瀏覽器,加載具有WebSocket功能的網(wǎng)頁(yè)。
頁(yè)面的源代碼負(fù)責(zé)創(chuàng)建WebSocket連接。
該腳本通過(guò)WebSocket握手建立WebSocket連接。此過(guò)程從客戶端向服務(wù)器發(fā)送常規(guī)HTTP請(qǐng)求開(kāi)始。此請(qǐng)求中包含upgrade請(qǐng)求頭,通知服務(wù)器客戶端希望建立WebSocket連接。
請(qǐng)求如下所示:
值得注意的是,WebSocket使用ws作為訪問(wèn)方案而不是http。所以,上面的請(qǐng)求訪問(wèn)了:ws://127.0.0.1:9000 / websocket
如果服務(wù)器支持WebSocket(針對(duì)上述請(qǐng)求),則它將在其響應(yīng)中使用upgrade請(qǐng)求頭進(jìn)行回復(fù)。
響應(yīng)如下所示:
在這個(gè)階段,協(xié)議將從HTTP切換到WS。并且在瀏覽器和服務(wù)器之間建立全雙工連接。
在這個(gè)例子中,我們有一個(gè)WebSocket功能,它回傳客戶端發(fā)送的所有單詞。例如:如果用戶鍵入單詞“Hiii”,那么服務(wù)器也會(huì)用“Hiii”來(lái)回復(fù)。
請(qǐng)求:
響應(yīng):
用戶界面:
WebSockets的安全隱患
A.跨站W(wǎng)ebSocket劫持
注意下面的請(qǐng)求。Origin頭有不同的來(lái)源127.0.0.1:5555。該請(qǐng)求是使用受害者的cookie發(fā)送到WebSocket服務(wù)器。這意味著可以使用WebSocket發(fā)送類似于CSRF的攻擊。
但是,這種攻擊不止像CSRF將POST數(shù)據(jù)發(fā)送到WebSocket服務(wù)器,它還會(huì)讀取服務(wù)器響應(yīng)。這是因?yàn)槟J(rèn)情況下WebSocket服務(wù)器不檢查“Origin”頭,它只是使用cookies檢查經(jīng)過(guò)身份驗(yàn)證的用戶會(huì)話,并將響應(yīng)發(fā)送回請(qǐng)求的“Origin”。
因此,在上述情況下,攻擊者也可以讀取響應(yīng),從而代表受害者控制雙向通信。
防護(hù):
檢查請(qǐng)求的“Origin”頭。既然,這個(gè)標(biāo)題是為了防止跨源攻擊。如果“Origin”不被信任,那么只需拒絕該請(qǐng)求。例如:如果您的網(wǎng)站的域名為www.example.com,請(qǐng)檢查請(qǐng)求是否源自該來(lái)源,如果是,則處理該請(qǐng)求。如果否,則拒絕。
另一個(gè)解決方案是使用基于會(huì)話的個(gè)人隨機(jī)令牌(就像CSRF-Tokens)。生成服務(wù)器端,并將它們放在客戶端的隱藏字段中。并要求驗(yàn)證。
B.網(wǎng)絡(luò)敏感信息泄露
就像HTTP是純文本協(xié)議一樣,WebSockets協(xié)議也稱為純文本。這導(dǎo)致攻擊者捕獲和修改網(wǎng)絡(luò)上的流量。
防護(hù):
建議使用加密(TLS)WebSockets連接。它的URI方案是wss://。默認(rèn)端口為443。
如下演示,請(qǐng)求訪問(wèn)ws://127.0.0.1:900/websocket/。如果它是一個(gè)安全連接,那么請(qǐng)求將訪問(wèn)wss://127.0.0.1:900/websocket/。
C.拒絕服務(wù)
默認(rèn)情況下,WebSockets允許無(wú)限制的連接導(dǎo)致DOS。以下是無(wú)限次連接到WebSocket服務(wù)器的小腳本。
執(zhí)行此腳本后,讓我們看看WebSocket服務(wù)器的日志:
我們可以看到,幾秒鐘內(nèi)就已經(jīng)完成了475個(gè)連接。這將耗盡服務(wù)器資源,最終導(dǎo)致DOS攻擊。
防護(hù):
使用基于IP的速率限制將有助于解決這個(gè)問(wèn)題。
速率限制應(yīng)允許5-10連接自由,即不進(jìn)行任何安全檢查。但在10個(gè)連接之后,如果同一個(gè)IP嘗試連接,那么應(yīng)該向用戶顯示驗(yàn)證碼,以確保自動(dòng)化工具不會(huì)產(chǎn)生惡意請(qǐng)求,同時(shí)合法用戶不會(huì)被拒絕服務(wù)。
結(jié)論
WebSockets非常適合全雙工通信,有許多聊天應(yīng)用程序和社交網(wǎng)站使用。實(shí)現(xiàn)WebSockets使應(yīng)用程序更具可用性和吸引力。但就像任何其他技術(shù)一樣,也需要在考慮安全性的情況下使用。
參考文獻(xiàn)
總結(jié)
以上是生活随笔為你收集整理的websocket网络层详解_【技术分享】WebSocket漏洞与防护详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2018-10-28
- 下一篇: 平滑数据迁移,不影响服务