Ramsay:針對氣隙網絡量身定制的網絡間諜工具包
一個以前未曾報道過的網絡間諜框架,我們將其命名為Ramsay,他是專門用于收集和泄露敏感文檔,并且能夠在對氣隙網絡中運行。
我們最初在VirusTotal中找到了Ramsay的實例。該樣本是從日本上傳的,并導致我們發現了該框架的更多組件和版本,同時還有大量證據表明,該框架正處于發展階段,其交付載體仍在微調中。
當前目標的可見性較低;基于ESET的遙測技術,迄今為止,幾乎沒有發現受害者。我們認為,受害者的這種稀缺性進一步證明了該框架正在不斷發展的假說,盡管受害者的可見性較低,這也可能是由于目標系統在氣隙網絡中的性質所致。
在Retro后門旁邊發現了共享的工件。該惡意軟件與Darkhotel有關,這是一個臭名昭著的APT組織,該組織至少自2004年以來就進行了網絡間諜活動,過去曾以中國和日本的政府機構為目標。
攻擊載體
隨著Ramsay不同實例的發現,我們還發現它們被一系列攻擊媒介利用。它們是:

惡意文件刪除Ramsay version 1
此攻擊媒介包括利用CVE-2017-0199的惡意文檔,目的是刪除較舊版本的Ramsay。
本文檔提供了一個初始的Visual Basic腳本,在下面的屏幕截圖中顯示為OfficeTemporary.sct,它將在文檔正文中提取Ramsay代理,并通過在JPG標頭下使用base64編碼的PE來偽裝成JPG圖像。

表1. oletools看到的Ramsay版本1 RTF文件中包含的OLE對象布局
我們注意到,這些文檔刪除的特定Ramsay實例在實現上具有較低的復雜性,并且缺少后來Ramsay版本所利用的許多更高級的功能。
發現這些相同惡意文檔的多個實例已上載到開源沙盒引擎,并標記為測試工件,例如“ access_test.docx ”或“ Test.docx ”,表示正在對此特定攻擊媒介進行試驗。
基于所提供的Ramsay代理的低復雜性,威脅參與者可能將此特定實例嵌入到這些惡意文檔中以進行評估。
Decoy安裝程序刪除Ramsay version 2.a
我們發現一個實例偽裝成7zip安裝程序上傳到Ramsay的VirusTotal。
我們之所以將該惡意軟件命名為Ramsay,是因為該二進制文件中包含一些字符串,例如:

此版本的Ramsay展示了其規避和持久策略的明顯改進,并引入了諸如Spreader組件和rootkit之類的新功能。
惡意文件刪除Ramsay version 2.b
此攻擊媒介包括傳遞另一個濫用CVE2017-11882的惡意文檔。該文檔將刪除名為lmsch.exe的Ramsay安裝程序,如表2所示。

表2. oletools看到的Ramsay版本2.b RTF文件中包含的OLE對象布局
本文檔使用的Ramsay版本是Ramsay版本2.a的略微修改版本,其主要區別在于未利用擴展器組件。其余組件的功能與Ramsay版本2.a相同。
客戶端執行受感染文件
如前所述,Ramsay版本2.a提供了一個Spreader組件,該組件將充當文件感染者,從而更改可移動和網絡共享驅動器中保存的良性PE可執行文件的結構,以便嵌入在主機文件執行時觸發的惡意Ramsay工件。
Spreader的傳播機制具有極強的攻擊性,駐留在目標驅動器中的任何PE可執行文件都將受到感染。
根據發現的Ramsay各個版本的組件之間的編譯時間戳,我們可以估計此框架的以下開發時間表:

對不同組件發現的不同編譯時間戳的分析表明,該框架自2019年底以來一直在開發中,目前有可能根據不同目標的配置量身定制兩個維護版本。
持久性機制
基于其版本,Ramsay實現了各種具有不同復雜性的持久性機制。其中一些持久性機制如下:
- AppInit DLL注冊表項
Windows操作系統提供的功能允許通過AppInit DLL注冊表項將自定義DLL加載到幾乎所有應用程序進程的地址空間中。這種技術并不是特別復雜;它在Ramsay的早期版本中實現,并在其他惡意軟件系列中也很常見。
- 通過COM API調度任務
計劃任務使管理員能夠在指定時間而不是每次啟動系統或用戶登錄時運行任務或“作業”。可以通過Windows COM API來實現此功能,這是Ramsay的第一個版本定制的。基于與Carberp實施的高度相似性,Ramsay的實施很可能改編自Carberp的公開源代碼。
- Phantom DLL Hijacking
Ramsay的更成熟版本表示其持久性技術的復雜性不斷提高,其中包括有時稱為“ Phantom DLL Hijacking”的一種技術。
Phantom DLL Hijacking濫用了這樣一個事實,即許多Windows應用程序使用的過時的依賴項,而這些依賴項對于應用程序本身的功能不是嚴格必需的,從而允許利用這些依賴項的惡意版本。
為了實施該技術,將以兩個服務為目標。它們是:
- WSearch(Windows搜索)劫持msfte.dll:

- 劫持oracle依賴項的MSDTC(Microsoft分布式事務處理協調器)服務在下面顯示為oci.dll:

這種持久性技術具有很高的通用性,它使以DLL形式提供的Ramsay代理能夠將其邏輯分為多個單獨的部分,從而實現了將要加載代理的主題進程量身定制的不同功能。此外,由于將這些DLL加載到它們各自的進程/服務中并不一定會觸發警報,因此使用此技術會使檢測更加困難。
功能
Ramsay的體系結構通過日志記錄機制提供了一系列功能,旨在通過提供可執行的情報來執行滲透,控制和橫向移動操作,并提供每個受感染系統的整體行為和系統統計信息,從而協助操作員。由于具有以下功能,因此可以實現這些操作:
該框架的主要目標是收集目標文件系統中的所有現有Microsoft Word文檔。整個收集階段如圖6所示:

Word文檔將首先被收集并存儲在初步收集目錄中。該目錄的位置可能因Ramsay版本而異。我們觀察到的用于此目的的兩個目錄是%APPDATA%\ Microsoft \ UserSetting和%APPDATA%\ Microsoft \ UserSetting \ MediaCache 。
根據Ramsay版本的不同,文件收集將不僅限于本地系統驅動器,還會搜索其他驅動器,例如網絡驅動器或可移動驅動器:


使用RC4流密碼算法對收集的文檔進行加密。
用于加密每個文件的RC4密鑰將是隨機生成的16字節序列的計算得出的MD5哈希值,并在惡意軟件樣本中加上16字節的硬編碼。將保存加密文件的緩沖區的前16個字節將對應于實際使用的RC4密鑰:

初步收集目錄下的收集文件將使用Ramsay Installer刪除的WinRAR實例進行壓縮。該壓縮檔案將保存在初步收集目錄中,然后生成Ramsay容器工件:

如前面的屏幕截圖所示,這些Ramsay容器在文件的開頭包含一個值,以及一個表示受害者機器標識符的硬件配置文件GUID。附加的基于XOR的加密層將應用于生成的壓縮檔案。下圖顯示了這些工件的結構:

Ramsay通過使用應用于兩個Windows API函數(WriteFile和CloseHandle)的內聯掛鉤,實現了在受害者的文件系統中存儲這些工件的分散方式。
掛鉤的WriteFile過程的主要目的是保存要寫入的主題文件的文件句柄,并在CloseHandle API函數中編寫和安裝另一個掛鉤。然后,CloseHandle掛鉤過程將檢查主題文件名是否具有.doc擴展名;如果是這種情況,它將在主題文檔的末尾附加Ramsay容器工件,后跟一個1024字節的流,表示Microsoft Word文檔頁腳。
這樣做是為了規避措施,目的是提供一種方法,以隱藏在主題文件內的偽像,使其不被肉眼看到:

將對附加在Word文檔上的Ramsay容器進行標記,以避免多余的工件被附加到已經受影響的文檔中,并且將清除初步存儲目錄,以便定期生成一個全新的Ramsay工件。
即使受影響的文檔將被修改,也不會影響其完整性;進行工件附加后,每個受影響的Word文檔將保持完全正常運行。
這些工件的擴散是通過我們無法檢索的外部組件完成的。但是,基于Ramsay實現的用于存儲收集的文物的分散方法,我們認為該組件將掃描受害人的文件系統,以搜索Ramsay容器的魔術值,從而確定要滲出的工件的位置。
與大多數傳統惡意軟件不同,Ramsay沒有基于網絡的C&C通信協議,也沒有為通信目的而嘗試連接到遠程主機。Ramsay的控制協議遵循為收集的工件存儲實現的相同分散原理。
Ramsay將掃描所有網絡共享和可移動驅動器(不包括通常為軟盤保留的A:和B:驅動器)以查找潛在的控制文件。首先,Ramsay尋找Word文檔,并在較新的版本中尋找PDF和ZIP存檔:

解析這些文件是否存在特定于控制文件格式的魔術標記。更具體地說,Ramsay尋找兩個給定的已編碼硬件配置文件GUID中的任何一個。這些GUID中的一個進行了硬編碼,如圖14所示,而另一個則是根據受害者的計算機動態生成的。如果找到任何主題標識符,將嘗試解析命令簽名。

對這兩個GUID實例的搜索表明,可以故意將Ramsay的控制文檔設計為“與受害者無關”,能夠通過利用控制文檔中的“全局” GUID在多個受害者中部署相同的控制文檔實例。另一方面,可以通過嵌入專門在單個受害者機器上傳遞的特定GUID來制作控制文檔。Ramsay控制協議實現的指標表明其后端對應項可能在某種程度上是自動化的。
Ramsay控制協議支持三種不同的命令:

檢索到給定的命令簽名后,將在控制文檔的正文中提取要執行的包含工件,然后將其還原,從而在執行命令后將主題控制文檔修改為其原始形式。
在最新版本的Ramsay刪除的不同文件中,我們找到了Spreader組件。該可執行文件將嘗試掃描網絡共享和可移動驅動器,但A:和B:驅動器除外:

需要注意的是,Ramsay用于傳播和控制文檔檢索的目標驅動器之間存在相關性。它評估了Ramsay的傳播能力和控制能力之間的關系,展示了Ramsay的運營商如何利用橫向移動的框架,表明該框架被設計為在氣隙網絡內運行的可能性。
傳播技術主要由文件感染組成,非常類似于prepender文件感染程序,以便針對上述目標驅動器中的每個可訪問PE文件生成結構類似于Ramsay的Decoy安裝程序的可執行文件。下圖說明了感染后應用于目標可執行文件的更改以及這些組件在執行時如何交互:

感染階段涉及的所有不同工件都在傳播器的范圍內,或者先前已由其他Ramsay組件丟棄。將為以下令牌解析一些工件:

給定文件被感染后,將通過在文件末尾寫入特定令牌來對其進行標記,以便為擴展程序提供標識符以防止重復感染。
此外,Ramsay的某些組件已實現了網絡掃描程序,旨在發現受感染主機子網中易受EternalBlue SMBv1漏洞影響的計算機。該信息將包含在Ramsay收集的所有記錄信息中,操作員可以利用這些信息,以便在稍后階段通過不同的通道在網絡上進行進一步的橫向移動。
進一步說明
Ramsay的2.a Spreader組件版本已重用了Darkhotel的Retro Backdoor中以前看到的一系列標記。這些標記如下:


Ramsay使用GetCurrentHwProfile API 序列化受害者,然后為特定受害者的計算機檢索GUID。還可以在Retro中看到這一點。它們都使用相同的默認GUID,以防API調用失敗:

Ramsay和Retro都共享相同的編碼算法來對檢索到的GUID進行編碼。

GetCurrentHwProfile檢索的GUID 特定于系統硬件,而不特定于用戶或PC實例。因此,僅通過利用此GUID,操作員可能會遇到旨在序列化不同受害者的重復項。
此方案的目的是通過使用計算機的以太網適配器地址“salting” GUID來生成不太可能重復的GUID。這意味著Retro和Ramsay共享相同的方案來生成唯一標識符。
我們還發現Ramsay和Retro在保留一些日志文件的方式上有相似之處,共享相似的文件名約定:

重要的是要強調,在Retro記錄的技術中,它利用了msfte.dll,oci.dll和lame_enc.dll的惡意實例,并通過Phantom DLL Hijacking。如前所述,Ramsay在其某些版本中還使用了msfte.dll和oci.dll來使用此技術。
此外,我們還觀察到Ramsay和Retro在其工具集中使用的開源工具方面的相似之處,例如利用UACMe進行權限提升,利用ImprovedReflectiveDLInjection部署它們的一些組件。
最后,我們注意到Ramsay利用惡意文檔中的韓語元數據,表示使用了基于韓語的模板。

結論
根據所發現的框架的不同實例,Ramsay經歷了不同的發展階段,這表明其能力的數量和復雜性都在不斷提高。
負責攻擊載體的開發人員似乎正在嘗試各種方法,,比如從2017年開始利用舊的Word漏洞進行攻擊,以及部署特洛伊木馬應用程序。
我們認為這是因為開發人員事先了解了受害人的環境,并且正在定制攻擊載體,可以成功地侵入目標系統而無需浪費不必要資源。
Ramsay框架的某些階段仍在評估中,這可以解釋當前受害者的可見性低下的原因,同時要記住Ramsay的預期目標可能處于氣隙網絡中,這也會影響受害者的可見性。