Black Hat USA 2003 - Brute Forcing Terminal Server Logons with TSGrinder
三句話摘要
TS Grinder:一個用於暴力測試 Windows Terminal Services 遠端桌面連線安全性的滲透測試工具開發紀實。 TS Grinder 透過發掘 RDP 客戶端隱藏 API 與精心設計的日誌迴避策略成為高效的 Terminal Services 暴力測試工具,但防禦方可藉由帳號鎖定政策、帳號重命名與埠號修改等多層措施有效阻止此類攻擊。 技術突破:發現 Microsoft 在 mstsc.exe 中隱藏的未公開命令列參數,可透過注入回調 DLL 直接攔截 RDP 連線過程。這讓開發者能編寫自訂 S Connect 函式,完全繞過原始 SM Client 工具的六次嘗試硬限制,同時複用其他已實現功能。
重點整理
重點- 1
技術突破:發現 Microsoft 在 mstsc.exe 中隱藏的未公開命令列參數,可透過注入回調 DLL 直接攔截 RDP 連線過程。這讓開發者能編寫自訂 S Connect 函式,完全繞過原始 SM Client 工具的六次嘗試硬限制,同時複用其他已實現功能。
- 2
隱蔽化設計:Windows Terminal Services 在第六次失敗登入時才觸發事件日誌。工具因此設計成每連線嘗試 5 次密碼後立即斷開,隨後重新建立新連線繼續嘗試,藉此完全避免留下日誌記錄。多執行緒並行可加速破解,但需在不超過系統最大並行連線限制下運作。
- 3
協議層監控:工具監控 RDP 協議的文字流而非圖形輸出,能精準識別登入提示、域名欄位、登入橫幅等文字元素。TSClient.dll 以 Debug 模式編譯,導致工具代碼也必須以相同模式編譯才能正常運作。
- 4
防禦對策:Windows 2003 記錄攻擊來源 IP(惟從 RDP 堆棧而非網路堆棧讀取),Windows 2000 僅記錄主機名稱。實務防禦應啟用帳號鎖定策略(如 3 次嘗試後鎖定 30 分鐘),並在公開發佈的 Terminal Server 上重命名 Administrator 帳號以避免目標列舉。
實用技巧與重點
乾貨- 工具與元件
- TS Grinder(主工具)、mstsc.exe(Microsoft 終端伺服器客戶端)
- TSClient.dll、clxt.dll(回調 DLL)、SM Client(Windows 2000 Server Resource Kit)
- RDP 協議隱藏 API:clx.dll、clx 命令列參數、TSNonscriptable 介面
- 命令列參數與功能
- -n(執行緒數量)、-u(使用者名稱)、-d(域名)
- 字典檔案路徑、Leet 轉換旗標、登入橫幅支援旗標、除錯級別
- 效能指標
- 每視窗平均 1.5 秒完成 5 個密碼嘗試
- Windows XP 最多支援 2 個並行無日誌連線;3 個以上會觸發日誌
- 第六次登入嘗試觸發事件日誌
- Mark Brunette 字典:4-5MB、常見密碼按頻率排序(zato.net)
- 安全配置建議
- 帳號鎖定策略:3 次嘗試後鎖定 30 分鐘
- 重命名 Administrator 帳號(於公開 Terminal Server)
- 修改預設埠 3389
- 啟用群組原則帳號鎖定
- 已知限制與未來方向
- Leet 轉換功能略不穩定
- 尚未支援自訂連線埠
- 不支援智慧卡驗證
- 計畫新增多語言登入橫幅支援、埠號自訂功能
結論
結論“TS Grinder 透過發掘 RDP 客戶端隱藏 API 與精心設計的日誌迴避策略成為高效的 Terminal Services 暴力測試工具,但防禦方可藉由帳號鎖定政策、帳號重命名與埠號修改等多層措施有效阻止此類攻擊。”
完整解析
詳細這場黑帽大會演講由 Tim 與 Ryan 介紹 TS Grinder 的開發歷程與技術實作。在此之前,講者曾嘗試過利用 Terminal Server ActiveX 控制項進行暴力破解,但發現此方法在 Windows 的預設安裝上並不可行,最終被迫放棄。真正的轉機來自 Mark Brunette 的建議——他指出 Microsoft 為負載測試目的提供的 SM Client 工具可以進行腳本化控制。
經過探索,講者發現了一個關鍵的技術線索:Microsoft 在 mstsc.exe 中隱藏了未公開的命令列參數,允許透過注入回調 DLL 來攔截連線過程。這個發現徹底改變了工具的開發方向。儘管 TSClient.dll 中的原始 S Connect 函式在設計上被硬限制為六次嘗試,講者團隊最終決定編寫自己的 S Connect 函式,同時複用 TSClient.dll 中所有已實現的其他功能。由於 TSClient.dll 以 Debug 模式編譯,工具代碼也必須採用相同編譯模式才能避免崩潰。
核心的隱蔽設計源於對 Windows Terminal Services 日誌機制的理解:系統在第六次失敗登入時才會寫入事件日誌。工具因此採用的策略是在每個連線中嘗試五次密碼,然後立即斷開並建立新連線繼續嘗試。這樣即便進行數百次嘗試,日誌記錄也會保持在最低水平。為了進一步加速破解,工具支援多執行緒並行連線,每個執行緒獨立追蹤在字典檔案中的位置。實驗表明,Windows XP 最多能支援 2-3 個並行無額外日誌的連線;超過此限制會導致額外的日誌記錄,從而暴露攻擊行為。
在實作細節上,工具透過監控 RDP 協議的文字流(而非圖形輸出)來識別各種登入提示狀態,包括域名欄位、使用者名稱提示、登入橫幅等。這種文字層面的監控比圖形分析更為精確且高效。演講中的實際演示展示了工具如何依照字典順序逐一嘗試密碼,同時支援 Leet 翻譯功能(如將英文字母轉換為數字或符號以應對使用者常見的密碼變異方式)。
防禦建議方面,講者強調了作業系統版本間的差異:Windows 2003 會記錄攻擊來源的 IP 位址,而 Windows 2000 僅記錄主機名稱。但更關鍵的防禦層面是實施帳號鎖定策略(如 3 次失敗後鎖定 30 分鐘),以及在公開發佈的 Terminal Server 上重命名 Administrator 帳號——因為外部攻擊者無法透過 NetBios 列舉來發現重命名後的帳號名稱。修改預設連線埠 3389 也能在一定程度上減少掃描風險。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

