本文經(jīng)由過程演示在RDP會話期間劫持的按鍵發(fā)送信息,向讀者演示了為甚么用戶忽視那些基于SSL的RDP連接的證書警告可能導(dǎo)致中間人(MiTM)報復(fù)打擊,并總結(jié)了一些關(guān)于若何避免成為這類報復(fù)打擊的受害者的建議。
RDP連接的類型
在開端之前,起首明白本文會商了三種類型的RDP連接,包含:
- RDP安然層(RDPSecurity Layer)
- SSL(TLS 1.0)
- CredSSP (SSL with NLA)
本文要演示的是中間的阿誰類型,即SSL(TLS 1.0)。在終端辦事器上,SSL一般會以下建設(shè)(不選中肆意NLA復(fù)選框):

RDP利用的建設(shè)
假定辦事器被設(shè)置“Negotiate”,某些連接可能包含比較等閑遭到報復(fù)打擊,因為其安然層可能利用SSL。
SSL證書警告
假定有效戶在每次連接經(jīng)常常不正視類型以下的警告提示,本文剛好就是針對這些用戶的:

常常被習(xí)慣性忽視的SSL警告
報復(fù)打擊簡介
在較高的層面,報復(fù)打擊與其它的SSL中間人報復(fù)打擊近似:
1. 想編制使受害者連接到我們系統(tǒng)上的PoC東西(rdp-ssl-mitm.py),而不是其要連接的RDP辦事器。
2. 該東西利用RDP和談,經(jīng)由過程協(xié)商使其在交互過程中利用SSL。
3. 一旦連接被協(xié)商利用SSL,我們的東西就會用其本身(不成信的)SSL證書與RDP客戶端協(xié)商一次SSL連接。如許就使棍騙東西有機緣拜候RDP客戶端發(fā)送的信息明文。
4. 該東西也需要與正常的RDP辦事器成立SSL連接,將RDP客戶端的數(shù)據(jù)發(fā)送到該辦事器。
這類報復(fù)打擊的獨一錯誤謬誤是在成立所需的SSL連接之前,我們的棍騙東西必需經(jīng)由過程RDP和談與客戶端有一個簡短的交互。
1、使受害者連接到我們這里
在真實的報復(fù)打擊過程中,我們需要使RDP客戶端連接到我們的系統(tǒng),而不是其方針辦事器。是以會用到ARP棍騙、DNS棍騙或一些其它編制,為精練起見,本文不再演示這些細節(jié),假定已成功棍騙受害者的RDP客戶端使其連接報復(fù)打擊者的系統(tǒng)。
在我們的報復(fù)打擊系統(tǒng)上(192.168.190.170),啟動PoC東西,奉告它與正常的RDP辦事器192.168.2.96連接:
$ ./rdp-ssl-mitm.py -r192.168.2.96:3389
[+] Listening forconnections on 0.0.0.0:3389
這里我們只需要簡單地將報復(fù)打擊系統(tǒng)的IP地址輸進到RDP客戶端(客戶端從192.168.190.1連接):

直接輸進報復(fù)打擊者的IP,略過ARP棍騙步調(diào)
2、與RDP客戶端交互協(xié)商利用SSL
SSL的協(xié)商在RDP和談內(nèi)很是短:
Message #1: Client >MiTM >Server
03 00 00 13 0e e0 00 00 00 00 00 01 00 0800 *03*
00 00 00
這段動靜是靜態(tài)不變的,我們的棍騙東西直接將其傳遞給辦事器,不做點竄。*03*暗示客戶端撐持RDP安然層、SSL與CredSSP。
Message #2: Server >MiTM >Client
03 00 00 13 0e d0 00 00 12 34 00 02 00 0800 *01*
00 00 00
接下來的動靜暗示辦事器選擇利用的和談,*01*暗示辦事器已選擇利用SSL(*02*暗示CredSSP)。我們也將這條動靜不加點竄地傳遞給客戶端。
寄望假定辦事器假定選擇了CredSSP(*02*),本次演示會掉敗,因為這里只是報復(fù)打擊SSL,不是CredSSP。
3、與RDP客戶端成立SSL連接
Message #3: Client >MiTM
第三條動靜用來開端成立一條SSL連接。這里SSL客戶端的動靜從*16 0301*開端(03 01暗示SSL利用的版本:SSL 3.1AKA TLS 1.0)
*16 03 01* 00 5a 01 00 00 56 03 01 52 21 acbe 63
20 ce de 4b a5 90 18 f0 66 97 ee 9d 54 14e3 1c
... snip ...
棍騙東西不會將這些數(shù)據(jù)直接發(fā)給辦事器,而是直接向辦事器發(fā)送成立連接的要求,同時與客戶端完成SSL連接的成立。
這里我們利用的SSL證書會被RDP客戶端覺得不法,并在mstsc中向用戶顯示SSL警告:

因PoC東西利用的證書產(chǎn)生的安然警告
假定用戶細心查抄就會發(fā)現(xiàn),這里利用的SSL證書與正常證書是存在辨別的。要改進報復(fù)打擊的質(zhì)量,我們需要不斷改進證書使其無限接近真實的證書,但我們永久沒法獲得與正常證書不異的簽名,是以總會有些不合。
4、與RDP辦事器成立SSL連接
同時,我們的東西也向RDP辦事器倡議成立連接的動靜,并與其成立第二條SSL連接。
顯示按鍵信息
至些,我們的棍騙東西便可以明文顯示RDP客戶端發(fā)給辦事器所有按鍵把持了。很等閑肯定發(fā)送的是哪一種類型的動靜,以下兩個4字節(jié)的動靜就是按‘p’鍵時發(fā)送的。
44 04 00 19
44 04 01 19
第三個字節(jié)暗示按鍵的標(biāo)的目標(biāo)(00暗示鍵被按下,01暗示鍵彈起)。第四個字節(jié)是鍵的掃描碼(scancode),經(jīng)由過程查詢可以發(fā)現(xiàn)0×19剛好對應(yīng)字母“p”鍵。
凡是環(huán)境下,與字符對應(yīng)的掃描碼取決于所利用的鍵盤。我所利用的PoC東西中,已實現(xiàn)了對QWERTY鍵盤的映照,所以假定讀者利用的是UK/US鍵盤,該東西可以直接將大年夜部門掃描碼轉(zhuǎn)換成對應(yīng)的字符。寄望我們沒法知道字符是大年夜寫的仍是小寫的,需要按照CAPSLock鍵和SHIFT鍵的狀況的狀況肯定。
話不多說,直接上例子。以下是PoC東西的一些輸出,顯示了記實的按鍵,同時也記實下了登錄的用戶名為Administrator,暗碼為Password:
$ ./rdp-ssl-mitm.py -r 192.168.2.96:3389
[+] Listening for connections on0.0.0.0:3389
[+] Incoming connection from192.168.190.1:60370
[+] New outgoing request to192.168.2.96:3389 (SSL: 0)
[+] Connected
[+] Detected incoming SSL connection.Turning self into SSL socket
[+] Incoming connection from192.168.190.1:60374
[+] New outgoing request to192.168.2.96:3389 (SSL: 0)
[+] Connected
[+] Detected incoming SSL connection.Turning self into SSL socket
總結(jié)
習(xí)慣性忽視RDP連接中的SSL認(rèn)證警告提示可能造成與忽視HTTPS網(wǎng)站的證書一樣的后果:用戶可以垂手可得遭到中間人報復(fù)打擊。這類報復(fù)打擊可以截獲到用戶的用戶名、暗碼、按鍵信息及其它敏感信息。
利用RDP客戶端可托的、由認(rèn)證授權(quán)機構(gòu)簽名的SSL證書,正常環(huán)境下是沒有警告提示的,是以本文也強烈保舉用戶寄望這一點。
假定辦事器授權(quán)了NLA,這類報復(fù)打擊也會掉效,所以我們也強烈保舉利用NLA。
不外需要知道的是,這其實不是RDP客戶端或辦事器軟件的縫隙,這類操縱編制也不是新發(fā)現(xiàn)。這只是RDP利用過程中的一些脆弱特點,在用戶忽視安然警告時可能產(chǎn)生,在手藝層面只是一個通俗的SSL中間人報復(fù)打擊。
這類報復(fù)打擊中一個比較有趣的擴大就是可以記實屏幕畫面,也有機緣報復(fù)打擊肆意RDP客戶端映照的驅(qū)動器,更多細節(jié)可以參考《Attacking the RDP Clients》,不外這類報復(fù)打擊需要報復(fù)打擊有必然的編碼根本。