如果終端伺服器(terminal servers)配置不正确,那麼rdp(remote desktop protocal,遠端桌面協定)連接配接就可能會面臨降級攻擊的危險。在這篇文章中,我們會使用一個名為rdp-downgrade.py的poc工具來示範降級攻擊。
rdp安全層
在讨論降級攻擊之前,我們需要明白,所謂的降級究竟從什麼級别降到什麼級别。
在rdp協定中有下面三個可用的安全層。都可以在terminal server終端伺服器上進行配置。
classic rdp protocol–在tscc.msc配置工具中,它又叫“rdp security layer”,協定說明(見pdf的40頁)則将之稱為protocol_rdp。
ssl–gui界面中就被稱作“ssl”或“ssl(tls 1.0)”,協定說明裡面則稱之為protocol_ssl。
credssp–當選中“network layer authentication”(網絡層認證)選項時,也就有了響應的功能。它也使用了ssl,在協定規格中描述為protocol_hybrid。
這裡面第一個選項是不安全的。如果協商後使用這個協定,連接配接就比較容易遭受中間人攻擊。實施這一攻擊的人可以看到用戶端和伺服器之間傳遞的所有輸入資訊和資料。我們的目标就是要降級到這個協定之上。
剩下的兩個選項都使用了ssl封裝,就安全多了。我們就是從這兩個協定降級。
怎麼才能知道連接配接使用了哪個安全層
可以利用終端服務用戶端mstsc.exe的警告資訊來識别使用了什麼協定。
classic rdp
提示不能認證伺服器的警告資訊,在上面還提到了中間人攻擊。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauUDN2YDM4QjMwgDM3AjNxAjMvwFOwcDMvwlNxAjMvwVZslmZkF2bsBXdvwVbvNmL0VmbxQmL3d3dvw1LcpDc0RHaiojIsJye.jpg)
classic rdp連接配接的警告
ssl
如果你沒有配置主機信任rdp伺服器的ssl證書,你會看到下面的證書警告:
(non-credssp)ssl連接配接的警告
credssp(nla + ssl)
你會收到一個輸入使用者名和密碼的彈出視窗。而classic rdp和ssl都通過完整的windows桌面來輸入密碼。
nla連接配接的對話框
有漏洞的配置
如果把terminal servers配置成“negotiate”協商安全層,就有降級攻擊的可行性。下面就是windows 2003伺服器的配置,在更新版本的windows上也有。
降級攻擊
我們要連接配接至一台windows 2003 rdp伺服器,這台伺服器配置為協商安全層(negotiate)。我們連接配接所用的系統自然就是支援classic rdp、ssl和nla的windows系統。這台伺服器則隻支援classic rdp和ssl。可以預見,兩者一般情況下應該會協商出雙方都支援的最安全的協定:ssl。
在攻擊的時候,我們對流量進行篡改,讓伺服器認為用戶端隻支援classic rdp。至于流量攔截,我們可以用arp欺騙或者dns欺騙或者其它方法實作。
在連上tcp 3389端口之後,用戶端(mstsc)會發送類似于下面的資料(十六進制顯示):
03 00 00 13 0e e0 00 00 00 00 00 01 00 08 00 *03* 00 00 00
其中的03就表示用戶端支援的協定,這個位置的值分别對應下面這些含義:
00 –隻支援classic rdp
01 –支援classic rdp和ssl
03 –除上面兩個之外,還支援credssp
這在協定規範的37頁有描述。
我們的poc就是簡單的把03換成00,讓用戶端和伺服器最終協商出classic rdp,而不是ssl。
用我們的工具在192.168.190.170上監聽tcp 3389端口。并讓它把流量轉發到192.168.2.96。
$ python rdp-downgrade.py 192.168.2.96
[proxy] listening for connections on 0.0.0.0:3389
這個例子中,我們沒有做真實的arp欺騙攻擊,直接連向了中間人。
輸入了攻擊者的ip位址
在我們的poc工具裡,看到了來自于rdp用戶端(192.168.190.1)的連接配接,并且代理向目标伺服器發起了連接配接。
[proxy] incoming connection from 192.168.190.1:58715
[proxy] new outgoing request to 192.168.2.96:3389
[proxy] connected
接下來,我們看到用戶端發送了19個位元組,注意靠近資料末尾的03,poc工具将其識别了出來,并提示資訊告訴我們,已經将03改成00。
[from 192.168.190.1] received 19 bytes
0000 03 00 00 13 0e e0 00 00 00 00 00 01 00 08 00 03 ................
0010 00 00 00 ...
[from 192.168.190.1] modified data to downgrade connection
接着,我們不做任何更改就可以自由地檢視流量了:
[from 192.168.2.96] received 19 bytes
0000 03 00 00 13 0e d0 00 00 12 34 00 02 00 08 00 00 .........4......
...snip...
mstsc會顯示classic rdp連接配接的警告框,這就表明降級攻擊成功了。這個警告對話框,我們在前面提到classic rdp的時候就已經見過了。
classic rdp連接配接的警告資訊
結論
通過上面的攻擊過程,我們當然建議不要将終端伺服器的安全層配置成“negotiate”協商,而是配置成使用ssl,這理論上就能有效阻止上面這樣的降級攻擊了。
====================================分割線================================
本文轉自d1net(轉載)