一、情報背景
近日,Google TAG安全部門披露了一起利用推特等社交媒體針對不同公司和組織從事漏洞研究和開發的安全研究人員的社會工程學攻擊事件,經綠盟科技伏影實驗室分析,確認此次事件為Lazarus組織針對網路安全行業的一次針對性網路攻擊,並猜測其可能有更深層次的攻擊意圖和行動。綠盟科技攻擊對抗技術研究團隊M01N Team也針對此次事件展開了全面的分析研判,認定本次事件是一個典型的“明修棧道、暗渡陳倉”社會工程學攻擊事件,也將在本文中揭秘該事件中Lazarus組織使用的一種新型間接命令執行攻擊技術。
Lazarus組織是一支來自朝鮮半島的APT組織。該組織自2007年就開始活躍,長期對韓國、中國、美國、印度等國家進行攻擊活動。據國外安全公司的調查顯示,Lazarus組織與2014年索尼影業遭駭客攻擊事件,2016 年孟加拉國銀行資料洩露事件,2017年美國國防承包商、美國能源部門及英國、韓國等比特幣交易所被攻擊等事件有關。而2017年席捲全球的最臭名昭著的安全事件“Wannacry”勒索病毒也被懷疑是該組織所為。
二、攻擊技術分析
Lazarus組織的攻擊者偽裝成安全研究人員建立了一個研究部落格和多個Twitter賬號,這些偽裝賬號大都打上了Web開發、瀏覽器漏洞挖掘、Windows核心安全甚至CTF選手等一些身份標籤,並會發布一些安全研究動態,同時相互評論轉發來擴大影響力。
另外他們的部落格(https://blog.br0vvnn [.] io)發表了多個已公開披露的漏洞分析文章,還包含一些不知情安全研究人員的來訪評論,以圖在安全研究人員中建立更高的信任度。
在建立了一定的研究影響力後,攻擊者會主動尋找目標安全研究人員進行交流,並表達希望在漏洞研究方面進行更深入合作和交流的想法。此後攻擊者便會向安全研究人員分享了一個Visual Studio的專案工程檔案,該專案檔案明為一些漏洞的POC程式碼,暗則是包含了等待目標研究員編譯執行來觸發的惡意命令和程式碼。
另外我們在梳理本次事件的攻擊技術時,發現了該組織使用的一種新型間接命令執行技術並對其進行了擴充套件研究,以下將對該技術進行詳細分析。
2.1 間接命令執行
首先我們來了解一下什麼是間接命令執行,攻擊者濫用允許執行命令的系統可信程式,繞過限制命令列直譯器使用的安全限制,在無需呼叫cmd.exe的情況下間接完成命令執行的方法被稱為間接命令執行技術(ATT&CK-T1202)。熟悉攻擊技術的藍軍人員也將其歸屬為LOLBAS技術之一,攻擊者可利用該技術進行防禦規避,特別是因組策略等限制使用CMD的環境或規避EDR/EDP等終端安全檢測防護的情況下執行系統命令。常見的方法包括程式相容性助手(pcalua.exe)、適用於Linux的Windows子系統 (WSL)等。而本次曝光的透過Visual Studio工程專案配置檔案在編譯過程中完成命令執行的方法也屬於間接命令執行。
2.2 利用Build Events特性於visual studio工程編譯過程執行惡意命令
2.2.1 攻擊技法揭秘
攻擊者在此次攻擊事件採用了在漏洞POC程式碼工程的.vcxproj專案檔案中插入執行惡意Powershell命令的編譯事件(Build Events)的攻擊方法。
編譯事件(Build Events)是MSBuild編譯引擎在MSBuild專案(包括visual studio專案等)配置檔案中提供的特性。編譯事件共有3種,分別對應編譯過程的不同階段。正常情況下,它的作用是使得使用者能夠自定義在編譯的各個階段執行自定義的額外操作(例如提前對原始碼進行修改等),實現對專案編譯過程的靈活控制。
攻擊者在此次事件中使用的是”PreBuildEvent”事件,Command元素中包含的Powershell命令將會在編譯過程前被執行。經測試“PreLinkEvent”事件和“PostBuildEvent”事件同樣可以觸發完成命令執行。
在Visual Studio的專案屬性頁可以對幾種生成事件進行視覺化的檢視與修改,例如本次攻擊中在專案檔案中出現的攻擊命令在Visual Studio中的展示:
2.2.2 技術改進預測,命令列獨立執行
本次事件中攻擊者透過誘導受害者使用Visual Studio自行編譯被投毒的專案檔案,透過自定義編譯時間實現惡意命令執行,獲取對目標機器的控制。該種方法在釣魚攻擊手法上屬於較為創新性的思路,但此種方法仍需使用者進行比較複雜的互動手段,依賴性依舊比較大,也僅適用於類似此次事件當中的攻擊場景。
在針對該攻擊技術的研究中,本團隊發現該攻擊技術可以脫離對Visual Studio的依賴,而在命令列中利用MSBuild.exe獨立執行,使得該攻擊方法的適用範圍從程式碼投毒釣魚擴充套件到一種普遍適用的利用白名單程式的間接命令執行手法。
Visual Studio在進行專案檔案的編譯的過程中實際利用了MSBuild.exe編譯引擎進行專案的編譯,而.vcxproj專案檔案實際是符合MSBuild編譯引擎規範的XML檔案,因此可以透過命令列呼叫MSBuild.exe實現專案的編譯,進而透過專案檔案中的”PreBuildEvent”編譯事件利用MSBuild.exe程式繞過封鎖實現自定義程式碼的執行。
首先在Visual Studio中為任意的C++專案新增“預先生成事件”
在.vcxproj專案檔案中可以看到新增的”PreBuildEvent”事件:
接下來在編譯過程中便會啟動該程式(注意在編譯輸出中會有PreBuildEvent的提示)
此時的父子程式關係如下,可見Visual Studio主程式下的MSBuild.exe為新建立程式的父程式。由此可見一種檢測思路是檢測Visual Studio主程式下的可疑子程式,但是僅僅檢測該程式是不夠的,因為攻擊者可以利用接下來介紹的方法,繞開對Visual Studio建立可疑程式的監測。
透過命令列直接執行以上步驟中生成的vcxproj檔案可以直接觸發編譯過程,可見之前指定的notepad.exe程式被啟動。
從程式關係來看,新啟動的程式為MSBuild編譯引擎的子程式,全過程未有Visual Studio程式的啟動。
2.3 與代理執行技術的區別
作為藍軍技術研究人員,以往我們是知道MSBuild是一種非常常見的受信任開發者套件代理執行技術(ATT&CK-T1127.001),攻擊者可以濫用MSBuild來代理執行惡意程式碼以達成防禦規避的效果,.Net 4.0版本引入的MSBuild內聯任務功能允許將C#程式碼插入到XML專案檔案中,MSBuild將在執行編譯的過程中執行內聯任務中的惡意程式碼。比如:
MSBuild.exe編譯引擎支援直接以符合格式規範的xml檔案與csproj檔案為引數,編譯檔案中嵌入的內聯C#程式碼,根據程式碼功能的不同,攻擊者可以利用該方法靈活地完成例如AWL Bypass、APC程式注入、Unmanaged PowerShell執行等攻擊手法。
msbuild.exe pshell.xml
msbuild.exe project.csproj
以下為利用MSBuild的”UsingTask”元素建立執行內聯C#程式碼的經典程式碼實現。這段程式碼利用.NET執行時Microsoft.Build.Tasks.Core.dll庫檔案建立任務,諸多的攻擊方法皆是基於此經典結構。
事實上,也可以指定AssemblyFile為自定義的.NET程式檔案,來實現自定義.NET程式檔案的載入執行,但是如此操作便需要另外編譯好的二進位制檔案,不如利用“Microsoft.Build.Tasks.Core.dll”編譯內聯彙編來的便捷與隱蔽。而本次的攻擊技術實現並非執行惡意程式碼而是命令執行,再一次擴充套件了MSBuild的攻擊向量。
三、攻擊檢測
以往基於Sysmon針對MSBuild內聯任務代理執行惡意程式碼攻擊的程式檢測規則同樣適用於本次編譯事件觸發間接命令執行的攻擊檢測。在之前的討論的中我們可以得出結論,針對MSBuild.exe建立可疑子程式的基於父子程式關係檢測依舊是行之有效的。對MSBuild.exe編譯引擎建立Powershell.exe等可能被用於惡意攻擊的程式需要進行重點關注與日誌記錄。同時,針對MSBuild.exe程式建立事件及檔案操作事件,最好能檢測檔案內容,而監測其啟動引數包含proj字串也是一種臨時解決方案,但存在被繞過的可能性。
MSBuild.exe編譯引擎隨.NET執行時在系統中預裝,但具有本篇所介紹及其他的一些安全風險,對於沒有使用需求的非技術人員建議禁用或限制該程式的執行。對於技術開發人員則更加需要提高警惕。
四、總結
回顧整個攻擊事件,Lazarus組織此次的攻擊活動完全是一個極具針對性的釣魚攻擊事件,新穎的社工思路和長週期的攻擊前鋪墊工作讓處於安全研究的頂尖技術人員也難逃其手,所以這也是一個非常好的案例來說明“人是最大的漏洞”,作為安全研究人員更應該從此次事件中汲取教訓,也建議可能的受害者,包括安全研究人員及其所屬公司做好自身的安全檢查和加固。
另外此次事件中新出現的間接命令執行攻擊方法,也呼籲各安全廠商及各單位安全部門對此提高關注度,做好對應的技術防護和應急工作。
關於綠盟科技M01N安全研究團隊
綠盟科技M01N安全研究團隊專注於Red Team、APT等高階攻擊技術、戰術及威脅研究,涉及Web安全、終端安全、AD安全、雲安全等相關領域。透過研判現網攻擊技術發展方向,以攻促防,為風險識別及威脅對抗提供決策支撐,全面提升安全防護能力。戰隊自2019年成立以來,榮獲2020年第三屆車聯網資訊保安技能大賽一等獎、2020數字中國創新大賽虎符網路安全賽道一等獎、2020年第三屆“強網”擬態防禦國際精英挑戰賽一等獎、2020WIDC世界智慧駕駛挑戰賽-資訊保安挑戰賽優勝獎、2020年工業資訊保安技能大賽二等獎、“第五空間”智慧安全大賽二等獎、2020“巔峰極客”網路安全技能挑戰賽二等獎、2019“湖湘杯”網路安全技能大賽一等獎、2019中國國際數字經濟博覽會數字經濟雲安全共測大賽一等獎、2019年工業資訊保安技能大賽一等獎。