visualstudio开始调试不执行_攻击者是如何滥用msvsmon和Windows远程调试器的
在本文中,我們將為讀者詳細介紹攻擊者是如何濫用msvsmon和Windows遠程調試器的。
簡介讓無人值守的msvsmon.exe(遠程調試器監視器)處于“無需身份驗證”模式是一種非常危險的做法。與任何調試器一樣,msvsmon.exe也可以根據來自網絡的請求啟動進程。攻擊者可以利用msvsmon.exe的這個特性展開秘密行動,特別是當msvsmon.exe在具有很高的權限的帳戶下運行時。同時,攻擊者還可以將其用作后門,以便在攻陷機器后維持其訪問權限。也就是說,msvsmon.exe不僅是一個帶有Microsoft簽名的應用程序,同時還能用于啟動和操作進程,因此,攻擊者可以將其用作隱藏惡意活動的方便工具。
除此之外,我們還將在這篇文章中為讀者介紹遠程調試功能及其內部機制,并演示如何將其轉化為紅隊的一個新工具。最后,我們將分享一個工具,用于檢測組織中運行的msvsmon.exe程序的危險實例。
Visual Studio遠程調試器中的msvsmon.exe為了便于調試部署在遠程計算機上的應用程序,Microsoft Windows SDK提供了遠程調試功能。并且,該遠程調試解決方案的組件之一就是msvsmon可執行文件:一個在遠程計算機上運行的應用程序,用于監聽網絡并充當本地調試器。實際上,msvsmon.exe的角色與Linux gdbserver非常相似。msvsmon工具可以從開發人員計算機上運行的Visual Studio實例那里接受命令,處理本地調試事件并與Visual Studio進行交互。
然而,與所有便利性一樣,遠程調試的強大功能也是以安全性為代價的,因為讓遠程調試器監聽網絡會帶來安全隱患。為了防止該功能被攻擊者所利用,Microsoft向該監視器添加了身份驗證(默認情況下是啟用的),并對某些調試核心組件的導出函數名進行了模糊處理:
這些措施雖然有一定的作用,但還是無法做到萬無一失。盡管身份驗證是基于Windows身份驗證的,但仍然會讓事情變得繁瑣。為了讓調試更簡單,開發人員有時會禁用身份驗證。值得一提的是,身份驗證還允許對調試器和調試器之間的網絡流量進行加密。
msvsmon是如何危及系統安全的對于msvsmon.exe的惡意用法,至少有兩種:一是用作橫向移動工具,二是用作后門工具。
對于第一種用途,攻擊者在獲得對網絡中計算機的訪問權限后,可以掃描網絡,尋找正在運行的msvsmon.exe實例。一旦找到,攻擊者就可以利用該實例啟動一個LOLBin進程,以便在網絡中進一步發動攻擊。
對于第二種用途,攻擊者可以把msvsmon用作遠程shell。由于msvsmon是一個可移植的應用程序,因此,攻擊者可以將其植入到被攻陷的計算機上,并且與Mshta、WScript和其他lolbin結合起來,從而提供一種遠程執行命令的方便方法。在這種情況下,惡意腳本的代碼可以作為參數傳遞,從而實現無文件型的命令執行。
在啟動時向應用程序傳遞以下參數有助于對用戶隱藏msvsmon.exe的行蹤:
/noauth, /anyuser, /nosecuritywarn, /nowowwarn /silent, /timeout:2147483646
此外,由于msvsmon是一個調試器,它可以通過網絡操縱debuggee進程,從而讓遠程攻擊者能夠完全控制運行中的進程,包括操縱內存和線程。因此,即使是一個由msvsmon啟動的合法進程,也可能被攻擊者“偷梁換柱(hollowed)”,從而變成攻擊者的幫兇。
SOAP與遠程調試器的重要性我們知道,調試服務器是使用SOAP協議進行通信的。并且這里的服務器是由多個msvsmon.exe實例組成的,其中一個實例提供有SSDP網絡發現功能,使debuggee主機對客戶端可見。另外,還有實例還托管了vsdebugeng.dll庫,其中包含SOAP服務器的實現。同時,vsdebugeng.dll庫也實現了SOAP客戶端并被加載到Visual Studio實例中。
每當開發人員選擇遠程調試選項并按下F10鍵時,Visual Studio就會使用vsdebugeng.dll中的一個名稱已經過混淆處理的函數與調試服務器進行通信,從而觸發被調試進程的執行,并處理來自遠程進程的調試事件。
下面是SOAP網絡交互的示意圖:
在Wireshark視圖中,SOAP請求看起來非常混亂:
幸運的是,我們能夠以更具可讀性的格式記錄和查看SOAP協議。為此,只需在EventViewer中為WebServices啟用分析和調試日志功能,這樣就會生成可直接通過EventViewer查看的XML日志:
為了證明第三方軟件使用調試服務器的可能性,我們對該協議進行了深入的研究,并創建了一個自定義客戶端來指示服務器啟動和恢復進程。這個客戶端首先會觸發mshta.exe的執行,而mshta.exe則會運行作為參數傳遞給它的JScript代碼。因此,這實際上就是一個真正的后門工具,可以用來控制遠程計算機。
當然,這里的調試協議是相當復雜的。它不僅包含了許多數據結構,還實現了大量的SOAP請求。雖然我們確實發現了其中的一些請求,但這些僅僅是遠程調試的冰山一角。首先,該服務器使用了多種類型的SOAP請求,其中最重要的是從服務器發送或查詢信息,并處理來自服務器的請求(回調)。在創建進程的過程中,最值得注意的階段為:初始化、設置配置和啟動階段。當然,每個階段都是由客戶端發起的SOAP請求所觸發的。由于msvsmon是一個調試器,它會在CREATE_SUPANDED標志為on的情況下啟動進程,因此,需要通過Resume請求讓進程繼續運行。
如何防止遠程調試器被濫用考慮到msvsmon遠程調試組件被誤用和濫用的可能性,必須加強開發人員的網絡安全意識。
首先,嚴禁在身份驗證關閉的情況下運行調試服務器。通過將遠程管理用戶的憑據添加到本地憑據存儲器(Windows憑據管理器最初是在Windows Vista版本中引入的),可以創建簡單的身份驗證設置。Windows憑據管理器不僅可以用于存儲網站、應用程序和網絡連接的憑據,同時,它對于遠程調試來說也非常有用。例如,如果目標計算機名為“DEBUGGEE”,管理用戶為“dbg”,那么只需將DEBUGGEE\dbg條目和密碼添加到憑據管理器就行了。有關憑據管理器API的詳細信息,可以在這里找到。
接下來,在Visual Studio中將調試配置的“Connection”屬性設置為“Remote with Windows authentication”,并在目標計算機上運行調試服務器。現在,基于身份驗證的調試設置就準備好了。
如何掃描不安全的調試服務器為了幫助查找網絡中不安全的調試服務器,我們發布了一個相應的掃描程序,它可以向操作系統中的所有適配器廣播SOAP探針請求,并處理運行中的調試服務器的回復。在默認情況下,msvsmon.exe會使用標準WebServices發現UDP:3702端口(有關調試器端口分配的更多信息,請參閱本文)。同時,msvsmon.exe還會使用配置描述符來回復探針請求,因為配置描述符能夠配合其他設置來確定身份驗證級別。該腳本的輸出示例如下所示:
小結遠程調試運行在另一臺機器上的應用程序的功能對于開發人員來說是一個非常有用的特性。但是,正如我們在本文中指出的,Visual Studio的遠程調試器的msvsmon組件存在被濫用的安全隱患,所以,我們一定要引起足夠的注意。我們希望,讀者在閱讀這篇文章后,能夠加強這方面的安全認識;同時,我們還提供了一款免費的掃描攻擊,來幫助大家發現這種潛在的安全隱患。
譯文聲明
譯文僅供參考,具體內容表達以及含義原文為準。
戳“閱讀原文”查看更多內容總結
以上是生活随笔為你收集整理的visualstudio开始调试不执行_攻击者是如何滥用msvsmon和Windows远程调试器的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 滚动后mouseleave失效_发动机上
- 下一篇: 多目标优化算法_【实验室论文】基于多种群