最新消息:图 床

機器學習在 Windows RDP 版本和後門檢測上的應用

COOL IAM 206浏览 0评论

原文來自安全客,作者:imbeee、iswin@360觀星實驗室
原文鏈接:https://www.anquanke.com/post/id/157175?from=groupmessage&isappinstalled=0

簡介

機器學習目前已經在安全領域有很多的應用,例如Threat Hunting、攻防對抗、UEBA以及金融反欺詐等方面,本文將以Windows RDP服務為例子,詳細闡述機器學習在後門檢測、精準的服務版本檢測等方面的應用,本文所涉及的相關檢測思路和方法已經應用在觀星實驗室內部的自動化滲透測試平台(Gatling)以及互聯網資產發現平台中,當然在年底我們實驗室發布的國內首款針對域安全分析的工具—觀域中也有很多機器學習的應用,後續的文章我們會詳細給大家介紹。

背景

本文中所提到的幾個問題其實是來自於我們日常工作中實際面臨的問題以及實驗室內部的幾次討論。在一次給客戶(某部委)做互聯網資產發現的時候,我們發現一個奇怪的端口,最後經過驗證發現這個是RDP的端口,當時Nmap顯示的服務器版本是Windows 2008,但是當我們登錄進去之後發現是Windows 2003,這是我們面臨的第一個問題:如何提高Windows RDP版本識別的準確率?

然後實驗室其它小夥伴習慣性的按了5下shift 突然冒出一個黑框,經分析發現是一個shift後門。當時我們遇到的另一個問題就是:如何檢測shift後門?

由於我們的客戶數量非常多,互聯網側的資產更是不在少數,一台一台登錄去檢測顯然是不可能的,所以第三個問題就是如何自動化的批量檢測互聯網的shift後門?

基於上面的三個問題,我們進行了一些研究,發現機器學習在自動化RDP版本和shift後門檢測方面有一定的應用場景,能幫助我們解決一些實際問題。

實現思路

針對上面提出的3個問題,我們從實現上做了一些摸索,也大膽的設想了一下,下面就這兩個問題進行分別討論。

當前RDP版本識別存在的問題

我們無法直接從RDP協議中取得系統版本,雖然特定版本的Windows系統默認會使用某個版本的RDP協議,比如Windows 7默認使用RDP 7協議,但是也可以通過安裝補丁升級到RDP 8.1或者更高版本。所以通過RDP協議版本推斷系統版本也不是很準確。

如何高效自動化的檢測RDP後門(不止shift後門)?

自動化檢測RDP後門,關鍵在於觸發相關程序,如按5次shift鍵觸發sethc.exe,或者win+u觸發放大鏡等,這部分操作在RDP協議里都是簡單鍵盤事件,並沒有使用特定的報文。而對於不同版本的Windows系統,在登錄界面觸發輔助程序的按鍵序列也不一樣,所以需要先判斷Windows版本,使用對應的按鍵序列來觸發粘滯鍵等程序,然後截圖供後續檢測。

經過我們調研發現Github上有個Python實現的RDP客戶端項目rdpy,這個項目解決了基礎的截圖問題,在後面RDP後門的檢測中,也遇到一些坑,比如穩定截圖問題,這個會在後面具體提。

所以我們的整體解決方案就是使用rdpy來實現截圖邏輯,版本識別使用機器學習技術,用原始圖片樣本固定位置截圖進行訓練,RDP後門檢測則基於版本識別的結果(不同版本服務器shift後門彈框位置不一樣)訓練樣本進行識別,關鍵信息提取直接用原始圖片進行關鍵位置的文字識別即可。

Windows RDP截圖

在截圖的實現中,為了避免重複造輪子,我們直接使用了上面提到的rdpy庫,其支持Classic RDP Protocol、SSL和CredSSP全部三種安全層協議,同時實現了不同圖片格式(即RDP遠程會話的顏色深度)的處理方法,基本滿足我們的需求。

RDP穩定截圖的難點在於我們無法從協議上得到“停止”反饋。由於RDP協議是將畫面切割後分塊傳輸的,且只傳輸畫面變動的部分,所以在整個會話過程中,我們無法確定在哪張圖片之後畫面已經繪製完畢。

剛開始我們嘗試了一些比較髒的方法,包括rdpy自己的截圖腳本rdpy-rdpscreenshot.py裡面也用到的一個方法,那就是設定一個時間閾值,從建立RDP鏈接開始,等待一段時間后截圖然後關閉鏈接。這個方法的缺點很明顯,那就是受網絡質量影響,導致效率低下。對於鏈接質量好的目標,可能很短時間就完成了登錄界面的傳輸與繪製,但是卻浪費了大量時間在等待截圖;而對於鏈接質量差的目標,可能在時間結束時還沒有繪製完成,造成截圖失敗。

通過嘗試,最後我們確定了一個比較合理的截圖邏輯:建立鏈接后,每接收一張圖片並繪製后,將當前時間記錄為最後繪製時間,並且使用一個獨立的線程每隔一定時間檢查最後繪製時間與當前時間的時間差,如果時間差超過某個值,則認為當前畫面已經穩定,可以進行下一步操作(如截圖、發送按鍵觸發後續事件),如果需要觸發事件后截圖,則使用相同的邏輯判斷畫面是否穩定,然後再次截圖。這樣的截圖流程符合實際操作邏輯,後續可以通過其他手段判斷鏈接質量,並動態調整等待時間,最終獲得比較穩定的截圖效果。

Windows版本檢測

Windows Server的主流版本大致分為這麼5個版本,Windows 7、Windows Server 2003、Windows Server 2008 R[1|2]、Windows Server 2012 R2、Windows 10,從我們在shodan的採樣數據數據來看,除了Windows 10非常少之外,開3389的基本上就4個主流版本,所以本文將重點以這4個版本為主。

我們先來幾張RDP登錄界面的圖片

转载请注明:IAMCOOL » 機器學習在 Windows RDP 版本和後門檢測上的應用

0 0 vote
Article Rating
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x