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