[C#] .NET 10 RDP Honeypot:記錄來源 IP、帳號與登入資訊

  • 24
  • 0

之前有寫過一篇:使用 C# 做一個假裝自己是 RDP Server
那時候主要就是用 C# 做一個假的 RDP Server,讓外面的 Scanner 連過來時,會認為這台機器真的有開 RDP


不過做完之後我一直想知道一件事:

這些一直掃 RDP 的 Bot,到底拿什麼帳號密碼在試,或是你自己密碼有沒有真的被偷走

所以最近把它補完,弄成一個新的專案 FakeRDP

GitHub:
https://github.com/donma/FakeRDP 

這次 FakeRDP 不只是回應 RDP Connection,它可以繼續處理 Standard RDP、TLS、NLA / CredSSP,然後把來源 IP、帳號、密碼、Domain 跟時間記錄下來,我真正想看的其實很單純,就是誰一直掃我的 RDP,還有他到底拿什麼帳號密碼來試,尤其 Password 我自己滿有興趣...

因為現在很多 Password List 都是以前網站外洩之後一直被重複使用,如果哪一天真的在 FakeRDP 裡面看到自己用過的帳號或密碼,那至少可以知道這組 Credential 很可能早就在外面流傳了。

當然這東西就是 Honeypot,我自己是放在有授權的環境測試,不是真的拿去攔別人的登入

這次也讓 Scanner 真的掃得到

這邊另外有一個我覺得滿重要的地方,如果只是開一個 TCP Port 在那邊,其實 Scanner 不一定會把它當成 RDP

所以 FakeRDP 不是單純 Listen Port 而已,前面的 RDP Protocol Negotiation 也有處理,像我自己拿 Nmap -sV 測,目前可以正常辨識成 ms-wbt-server

這樣才比較接近我原本想做的 Honeypot
因為外面的 Scanner 掃到這台機器時,它會真的認為這邊有一個 RDP Service,而不是一個隨便開著的 TCP Port

而且我這次也有支援多個 Port,可以一次模擬多個 RDP Target

這個對我來說反而是 FakeRDP 比上一篇完整的地方,上一篇比較像 "可以接 RDP Client"
這次則是連 Scanner 怎麼辨識這個 Service 都一起補進去了

跟其他 RDP Honeypot 有什麼不同

網路上其實本來就有不少 RDP Honeypot,有些會準備真的 Windows VM,讓攻擊者登入之後繼續觀察他後面做什麼

FakeRDP 沒有做到那麼後面,我的目的比較單純,就是模擬 RDP 前面的 Protocol,讓 Scanner 跟 RDP Client 可以正常跟它溝通,然後把我需要的 Connection 跟 Credential 資訊留下來,並且日後你要補一些騷操作都可以..

它沒有真的 Desktop,也沒有真的 Windows Session
所以如果你的目的是想觀察 Hacker 登入 Windows 之後會下什麼 Command、丟什麼 Malware,那這套就不是做這件事情
所以這也可以安裝在自己 server 上面當作被佯攻的紀錄...

這份 Code 也可以拿來當 RDP 開發參考,其實做到後來我覺得這個 Repository 不一定只能拿來當 Honeypot

因為裡面已經把不少 RDP 前面的流程拆開了,像是 X.224、MCS、Standard Security、TLS、CredSSP / NTLM 等處理都有獨立的 Code

所以如果你自己想用 C# 開發一些跟 RDP 有關的 Tool、Scanner、Protocol Analyzer 或其他 Security 套件,其實也可以拿這份 Code 當參考

我以前要找這類資料時,常常都是直接翻 Microsoft Protocol Document,文件當然很完整,不過真的要開始寫 Code 時還是會花不少時間。
 

當然現在你也不用自己懂這麼多可以請 AI 完成,你也可請 AI 基於我這繼續開發,這樣 AI 比較不會 一一歪歪 

 

寫這個最麻煩的反而是 AI

一開始我有拿 GPT、Sonnet 之類的模型協助處理 RDP / CredSSP,但只要需求開始碰到 Username、Password、Authentication、Credential 這些東西,很快就被擋掉

後來試到 KIMI K3,我把用途重新解釋清楚,說這是我放在自己 Server 上面的自動防禦工具 / Honeypot,用途是收集掃描來源跟觀察攻擊行為,不是拿來偷別人的 Credential,講清楚之後它才願意繼續幫我處理,這邊算是新的分享..

 

另外一套 IPBan

做到一半朋友也介紹我這套:
https://github.com/DigitalRuby/IPBan

這套我看了一下也不錯,不過它跟 FakeRDP 做的事情不太一樣

IPBan 比較偏正式 Server 的自動防禦,它會去讀 Login Failed 相關 Event / Log,達到條件之後把 IP Ban 掉,而且 Windows 跟 Linux 都可以用

所以如果需求只是「有人一直撞我的 RDP,超過幾次就封掉」,其實直接用 IPBan 就很適合

FakeRDP 則是我自己想多看一點前面的東西,例如 Scanner 怎麼辨識 RDP、來源 IP、使用的 Account / Credential,順便也拿來研究 RDP Protocol

最後

這次算是把之前 Mock RDP Server 那篇留下來的東西補得比較完整

除了可以讓 RDP Client 連之外,現在 Scanner 也真的可以掃到它是一個 RDP Service,然後再把後面的 Connection 資訊留下來

另外整份 Code 我也盡量拆開,如果有人自己想研究 RDP Protocol,或是想開發 Scanner、Protocol Tool、Security 套件,也可以直接拿來參考

後面有空我應該還會拿收到的 IP 去接一些自動封鎖或 Threat Intelligence

目前先這樣,筆記一下..
 

---

The bug existed in all possible states.
Until I ran the code.