譯者:知道創宇404實驗室翻譯組
原文鏈接:https://unit42.paloaltonetworks.com/manageengine-godzilla-nglite-kdcsponge/

摘要

2021年9月16日,美國網絡安全和基礎設施安全局(CISA)發布了一個警報,警告APT攻擊組織的攻擊者正在積極利用一個漏洞,該漏洞是在自助密碼管理和單點登錄解決方案 ManageEngine ADSelfService Plus 中新發現的。該警告解釋說,我們觀察到惡意攻擊者部署特定的 webshell 和其他技術,以保持受害者環境中的持久性; 然而,在隨后的日子里,我們觀察到第二個不同的攻擊行為,是利用了同一漏洞。

早在9月17日,這位攻擊者就利用美國的租賃基礎設施掃描了互聯網上數百個易受攻擊的組織。隨后,對漏洞的利用在9月22日開始了,可能持續到了10月初。在此期間,這個攻擊者成功地攻擊至少9個全球實體,涉及科技、國防、醫療、能源和教育等行業。

經過初步步驟,一個安裝了 Godzilla webshell有效載荷被上傳到受害者網絡。這種操作對所有受害者中都是一致的; 然而,我們也觀察到一小部分受到危害的組織隨后收到了一個名為 NGLite 的修改版本的新后門。然后,攻擊者使用 webshell 或者 NGLite 有效載荷來運行命令,并橫向移動到網絡上的其他系統,而他們只要網絡服務器上下載,就可以提取利益相關的文件。如果攻擊者們想攻擊一個域控制器,他們就安裝了一個新的竊取證書工具,我們稱之為 KdcSponge。

KdcSponge和 NGLite 都是按照中文說明開發的,可以在 GitHub 上公開下載。我們認為,攻擊者將這些工具結合使用,作為冗余的一種形式,以維護對高利益網絡的訪問。Godzilla 是一個功能豐富的 webshell,它解析入站 HTTP POST 請求,用私密密鑰解密數據,執行解密內容以執行額外的功能,并通過 HTTP 響應返回結果。這使得攻擊者可以將可能被標記為惡意的代碼與目標系統隔開,直到他們準備好動態執行它。

NGLite是一個“基于區塊鏈技術的匿名跨平臺遠程控制程序”它利用新型網絡(NKN)基礎設施進行命令和控制(C2)通信,從理論上講,這會為用戶帶來匿名性。需要注意的是,NKN 是一個合法的網絡服務,它使用區塊鏈技術來支持分散的對等點網絡。使用 NKN 作為 c2通道是非常罕見的。我們已經看到的只有13個樣本與分散的對等點網絡通信——共9個 NGLite 樣本和4個相關的一個合法的開放源碼實用程序(Surge),它使用 NKN 用來文件共享。

最后,KdcSponge 是一種新型的證書竊取工具,用于針對域控制器竊取證書。KdcSponge 將自己注入到本地安全認證子系統服務服務器進程(LSASS)中,并將掛接特定的函數來收集用戶名和密碼,這些用戶名和密碼是從嘗試通過 Kerberos 驗證到域的帳戶中獲得的。惡意代碼將盜取的證書寫入文件,但依賴于其他功能進行提取。

初始訪問

從9月17日開始一直到10月初,我們觀察到,ManageEngine ADSelfService Plus服務器被掃描。通過全球遙測,我們認為攻擊者僅在美國就瞄準了至少370臺Zoho ManageEngine服務器。鑒于規模,我們評估這些掃描基本上是完全隨機的,因為目標范圍從教育到國防部實體。 在獲得掃描結果后,攻擊者于9月22日轉變了攻擊企圖。這些攻擊集中于CVE-2021-40539,CVE-2021-40539允許REST API身份驗證繞過,從而在受攻擊的設備中執行遠程代碼。為了實現這一結果,攻擊者向REST API LicenseMgr交付了精心編制的POST語句。

雖然我們尚不了解此次活動中被侵害的組織總數,但我們認為,在全球范圍內,技術、國防、醫療保健、能源和教育行業至少有九家實體受到了損害。成功利用該漏洞后,攻擊者上傳了一個有效負載,該負載部署了一個Godzilla webshell,從而能夠額外訪問受害者網絡。我們觀察到美國的以下租用IP地址與受損服務器交互:

24.64.36[.]238
45.63.62[.]109
45.76.173[.]103
45.77.121[.]232
66.42.98[.]156
140.82.17[.]161
149.28.93[.]184
149.248.11[.]205
199.188.59[.]192

在部署了webshell之后,我們還發現了在一個受損網絡子集中部署的額外工具的使用。具體來說,攻擊者部署了一個名為NGLite的自定義開源后門變體和一個我們跟蹤的憑證收集工具KdcSponge。下面幾節將詳細分析這些工具。

惡意軟件

利用階段,兩個不同的可執行文件被保存到受感染的服務器:ME_ADManager.exeME_ADAudit.exeME_ADManager.exe文件作為一個dropper木馬,不僅保存了一個Godzilla的webshell到系統,而且還安裝和運行保存到系統的其他可執行文件,特別是ME_ADAudit.exeME_ADAudit.exe可執行文是基于NGLite,威脅攻擊者將其用作在系統上運行命令的有效負載。

ME_ADManager.dropper

初始利用完成后,dropper病毒保存到以下路徑:

c:\Users\[username]\AppData\Roaming\ADManager\ME_ADManager.exe

對該文件的分析顯示,該有效負載的作者在構建樣本時沒有刪除調試符號。因此,在樣本中存在以下調試路徑,并建議使用用戶名pwn創建此有效負載:

c:\Users\pwn\documents\visual studio 2015\Projects\payloaddll\Release\cmd.pdb

在執行時,該示例首先創建以下通用互斥鎖,這些互斥鎖在網上的許多代碼示例中都可以找到,這是為了避免運行多個droper案例:

cplusplus_me

然后,dropper嘗試編寫一個硬編碼的Godzilla webshell到下列位置,我們將在稍后的報告中提供詳細的分析,

../webapps/adssp/help/admin-guide/reports.jsp
c:/ManageEngine/ADSelfService Plus/webapps/adssp/help/admin-guide/reports.jsp
../webapps/adssp/selfservice/assets/fonts/lato/lato-regular.jsp
c:/ManageEngine/ADSelfService Plus/webapps/adssp/selfservice/assets/fonts/lato/lato-regular.jsp

然后,dropper創建文件夾%APPDATA%\ADManager,然后創建以下注冊表項,以在重啟后持續運行,并將自己復制到%APPDATA%\ADManager\ME_ADManager.exe

Software\Microsoft\Windows\CurrentVersion\Run\ME_ADManager.exe : %APPDATA%\ADManager\ME_ADManager.exe
Software\Microsoft\Windows\CurrentVersion\Run\ME_ADAudit.exe : %SYSTEM32%\ME_ADAudit.exe

然后,dropper將ADAudit.exe從當前目錄復制到以下路徑,并使用WinExec運行該文件:

%SYSTEM32%\ME_ADAudit.exe

Dropper不會將ME_ADAudit.exe文件寫入磁盤,這意味著攻擊者必須在dropper執行之前將該文件上傳到服務器,這可能是cve - 201 -40539漏洞的一部分。在我們對多個事件的分析中,我們發現ME_ADAudit.exe樣本保持了一致的SHA256哈希值805b92787ca7833eef5e61e2df1310e4b6544955e812e60b5f834f904623fd9f,因此表明攻擊者針對多個目標部署了相同的定制版本的NGLite后門。

Godzilla webshell

如前所述,最初的拖dropper含一個硬編碼的Java Server Page (JSP) webshell。通過對webshell的分析,確定為中文版哥斯拉webshell V3.00+。Godzilla webshell是由用戶BeichenDream開發的,他說他們創建這個webshell是因為當時可用的webshell在紅隊比賽時經常被安全產品檢測到。因此,作者宣稱它將通過利用AES對其網絡流量加密來避免檢測,并且在安全廠商產品保持非常低的靜態檢測率。

VirusTotal對Godzilla webshell的檢測

區域威脅組織入侵時,采用Godzilla webshell并不奇怪,因為它提供了比相同組織使用的其他webshell(如ChinaChopper)更多的功能和網絡逃避。

就功能而言,JSP webshell本身相當簡單,并保持了輕量級的內存占用。它的主要功能是解析HTTP POST,使用秘密密鑰解密內容,然后執行有效負載。這使得攻擊者可以將可能被標記為惡意的代碼隔離在目標系統之外,直到他們準備好動態執行它。

下圖顯示了默認JSP webshell的初始部分以及解密函數。

默認Godzilla JSP webshell的頭部

值得注意的是變量xcpass在代碼的第一行和第二行。這些是每次操作符生成新的webshell時都會更改的主要組件,這些變量表示在該webshell中用于AES解密的秘密密鑰。

當您手動生成webshell時,您需要指定明文傳遞和密鑰。默認情況下,它們是passkey

為了弄清楚這些是如何在webshell本身中呈現的,我們可以看看Godzilla JAR文件。

下面,您可以看到代碼在/shells/cryptions/JavaAES/GenerateShellLoder函數下替換了其中一個嵌入式webshell模板中的字符串。

Generate.class文件中的GenerateShellLoder函數

因此,我們知道webshell中的xc變量將是AES密鑰,如模板中所示。

String xc="{secretKey}"; String pass="{pass}"; String md5=md5(pass+xc)

我們觀察到xc值似乎是一個散列,存在/core/shell/ShellEntity.class文件下,我們可以看到代碼使用MD5散列的前16個字符作為明文密鑰。

public String getSecretKeyX()
{

return functions.md5(getSecretKey()).substring(0, 16);

}

這樣,我們就知道3c6e0b8a9c15224axc值是單詞key的MD5散列的前16個字符。

鑒于此,xcpass變量是兩個主要字段,可用于跟蹤和嘗試跨事件映射活動。在本博客中,我們生成了一個Godzilla webshell,其中包含用于分析的默認選項;其中,默認選項與攻擊中觀察到的值之間的唯一區別是xcpass值不同。

此webshell的一個重要特征是,作者稱它缺乏靜態檢測,通過避免關鍵字或安全產品簽名可能識別的常見結構,使此文件不太顯眼。一種特別有趣的靜態規避技術是使用Java三元條件運算符來指示解密。

這里的條件是m?1:2–m是傳遞給該函數的布爾值,如下圖所示,如果m為真,則使用第一個表達式常量(1)。否則,第二(2)項通過。參考Java文檔,1是加密模式,而2是解密模式。

當webshell執行此函數x時,它不會設置m的值,因此會強制m為False并將其設置為解密。

response.getWriter().write(base64Encode(x(base64Decode(f.toString()),true));

為了理解Godzilla的功能,我們可以查看/shell/payloads/java/JavaShell.class。該類文件包含提供給操作者的所有函數。下面是getFile函數的一個示例。

有效載荷功能:

getFile
downloadFile
getBasicsInfo
uploadFile
copyFile
deleteFile
newFile
newDir
currentDir
currentUserName
bigFileUpload
bigFileDownload
getFileSize
execCommand
getOsInfo
moveFile
getPayload
fileRemoteDown
setFileAttr

從函數的名稱可以看出,Godzilla webshell為遠程系統導航、與遠程系統之間的數據傳輸、遠程命令執行和枚舉提供了大量有效負載。

這些有效載荷將使用前面描述的密鑰進行加密,操作軟件將向包含數據的受損系統發送HTTP POST。

此外,如果我們檢查core/ui/component/dialog/ShellSetting.class文件(如下所示),initAddShellValue()函數包含遠程網絡訪問的默認配置設置。因此,可以識別諸如靜態HTTP頭和用戶代理字符串之類的元素,以幫助取證搜索web訪問日志,尋找潛在的危害。

private void initAddShellValue() {

this.shellContext = new ShellEntity();

this.urlTextField.setText("http://127.0.0.1/shell.jsp");
this.passwordTextField.setText("pass");
this.secretKeyTextField.setText("key");
this.proxyHostTextField.setText("127.0.0.1");
this.proxyPortTextField.setText("8888");
this.connTimeOutTextField.setText("60000");
this.readTimeOutTextField.setText("60000");
this.remarkTextField.setText("??");
this.headersTextArea.setText("User-Agent: Mozilla/5.0 (Windows NT
10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\nAccept-Language:
zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2\n");

this.leftTextArea.setText("");
this.rightTextArea.setText("");

}

下面是web服務器訪問日志的一個片段,其中顯示了使用Curl應用程序并發送自定義URL負載以觸發CVE-2021-40539漏洞的初始攻擊。然后,它顯示了Godzilla webshell的后續訪問,它已被初始Dropper放入硬編碼路徑中。通過查看用戶代理,我們可以確定威脅攻擊者從利用漏洞攻擊到最初訪問webshell的時間僅四多分鐘。

- /./RestAPI/LicenseMgr "-" X.X.X.X Y.Y.Y.Y POST [00:00:00] - - 200 "curl/7.68.0"
- /help/admin-guide/reports.jsp "-" X.X.X.X Y.Y.Y.Y POST [+00:04:07] - - 200 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0"

定制NGLite

NGLite是一個用Go語言編寫的開源后門(特別是Go版本1.13)。它可以從公共GitHub存儲庫下載。NGLite是一種后門木馬,只能運行通過其C2通道接收的命令。雖然這些功能是后門的標準功能,但NGLite使用了一種新穎的C2通道,該通道利用基于合法NKN的分散網絡在后門和攻擊者之間進行通信。

NKN鼓吹他們的分散網絡使用公共區塊鏈,可以支持數百萬對等方之間的通信,每個對等方都由唯一的NKN地址而不是典型的網絡標識符(如IP地址)標識。因此,NGLite工具在其C2通道中與之通信的即時IP地址只是分散網絡中的對等地址,不太可能代表攻擊者的網絡位置。這種設計使得NGLite C2通信信道的檢測和預防變得困難。

幸運的是,將NKN用作C2通道的情況非常少見。我們總共只看到13個樣本使用NKN通信——9個NGLite樣本,還有4個與一個名為Surge的開源實用程序相關,該實用程序使用NKN進行文件共享。VirusTotal掃描了9個已知NGLite樣本中的8個。四個未被檢測到,三個被一個抗病毒病毒檢測到,其余一個樣本被五個抗病毒檢測到。如此低的檢測率表明NGLite在此次攻擊活動中幾乎沒有防病毒覆蓋。

如前一節所述,dropper創建注冊表項并執行NGLite后門的自定義變量: SHA256:805b92787ca7833eef5e61e2df1310e4b6544955e812e60b5f834f904623fd9f

它保存在以下路徑: C:\Windows\system32\ME\u ADAudit.exe

基于Go語法的后門中的數據結構包含以下路徑,用于在開發人員系統上存儲此自定義NGLite變體的主要源代碼: /mnt/hgfs/CrossC2-2.2/src/ng.com/lprey/main.go

基于這條路徑,有人可能會猜測,攻擊者使用CrossC2構建了一個跨平臺的Cobalt打擊C2有效載荷;然而,我們并不認為該有效載荷實際上是基于CrossC2的,因為該有效載荷是公開可用的NGLite后門的定制版本。

攻擊者可能將CrossC2控制系統串作為誤導方向放入路徑中,希望迷惑威脅分析人員,使他們認為他們正在交付Cobalt Strike有效載荷。我們已經看到以下NGLite樣本使用的源代碼路徑,可以追溯到8月11日,這表明該攻擊者已經使用該工具幾個月了:

3da8d1bfb8192f43cf5d9247035aa4445381d2d26bed981662e3db34824c71fd
5b8c307c424e777972c0fa1322844d4d04e9eb200fe9532644888c4b6386d755
3f868ac52916ebb6f6186ac20b20903f63bc8e9c460e2418f2b032a207d8f21d

此攻擊中使用的自定義NGLite樣本檢查了命令行參數中的ggroup值。如果此開關不存在,有效負載將使用默認字符串7AA7AD1BFA9DA581A7A044896279517EEF9357B81E406E3AEE1A66101FE824,NGLite將其稱為種子標識符。

有效負載將創建一個prey id,該id通過連接系統網絡接口卡(NIC)的MAC地址和IPv4地址生成,并用連字符(-)分隔這兩個地址。該目標標識符將用于C2通信。

NGLite有效載荷將使用NKN分散網絡進行C2通信。請參見下面示例中的NKN客戶端配置:

該樣本首先通過TCP/30003訪問seed.nkn[.]org,具體來說是一個HTTP POST請求,其結構如下:

它還將發送HTTP POST請求,monitor_03作為目標id,如下所示:

seed.nkn[.]org服務器使用JSON中的[prey id(MAC-IPv4)]響應此請求,其結構如下:

{"id":"nkn-sdk-go","jsonrpc":"2.0","result":{"addr":"66.115.12.89:30002","id":"223b4f7f4588af02badaa6a83e402b33dea0ba8908e4cd6008f84c2b98a6a7de","pubkey":"38ce48a2a3cffded7c2031514acaef29851ee39303795e4b3e7fce5a6619e6be","rpcAddr":"66.115.12.89:30003"}}

這表明有效負載將通過TCP/30003在66.115.12.89與對等方通信。然后,seed.nkn[.]org服務器用以下內容響應monitor_03請求,這表明有效負載將通過TCP/30003與54.204.73.156通信:

{"id":"nkn-sdk-go","jsonrpc":"2.0","result":{"addr":"54.204.73.156:30002","id":"517cb8112456e5d378b0de076e85e80afee3c483d18c30187730d15f18392ef9","pubkey":"99bb5d3b9b609a31c75fdeede38563b997136f30cb06933c9b43ab3f719369aa","rpcAddr":"54.204.73.156:30003"}}

seed.nkn[.]org獲得響應后,負載將向JSON中addr字段中提供的IP地址和TCP端口發出HTTP GET請求。這些HTTP請求如下所示,但請記住,這些系統不是由攻擊者控制的;相反,它們只是最終將返回攻擊者內容的對等鏈中的第一個對等:

最終,自定義NGLite客戶端和服務器之間的網絡通信使用AES加密,密鑰如下: WHATswrongwithUu

自定義NGLite樣本將首先向C2發送一個初始信標,該信標包含whoami命令的結果,還有字符串#windows,如下所示: [username]#windows

發送初始信標后,NGLite示例將運行一個名為Preylistener的子函數,該函數創建一個偵聽入站請求的服務器。該樣本還將偵聽入站通信,并嘗試使用默認AES密鑰1234567890987654對其進行解密。它將通過Go方法os/exec.command以命令的形式運行解密的內容。然后使用相同的AES密鑰對結果進行加密并發送回請求者。

攻擊之后

在破壞網絡后,威脅攻擊者迅速從最初的立足點轉移到目標網絡上的其他系統,通過其NGLite負載和Godzilla webshell運行命令。在獲得對初始服務器的訪問權后,攻擊者集中精力從本地域控制器收集和過濾敏感信息,例如Active Directory數據庫文件(ntds.dit)和注冊表中的系統配置單元。不久之后,我們觀察到攻擊者正在安裝KdcSponge憑證竊取程序,這個我們將在下面詳細討論。最終,參與者感興趣的是竊取憑據、維護訪問權限以及從受害者網絡收集敏感文件進行過濾。

憑證獲取和KdcSponge

在分析過程中,Unit42發現了一些日志,這些日志表明攻擊者使用PwDump和內置的comsvc.dll創建了lsass.exe進程的小型轉儲,用于憑證竊取;然而,當攻擊者希望從域控制器竊取憑據時,他們安裝了自定義工具,我們跟蹤該工具為KdcSponge

KdcSponge的目的是從LSASS進程中鉤住API函數,從通過Kerberos服務(“KDC服務”)進行身份驗證的入站嘗試中竊取憑據。KdcSponge會將域名、用戶名和密碼捕獲到系統上的一個文件中,然后攻擊者會通過對服務器的現有訪問手動過濾該文件。

我們知道有兩個KdcSponge樣本,它們都被命名為user64.dll。它們具有以下SHA256哈希:

3C90DF0E02CC9B1CF1A86F9D7E6F777366C5748BD3C4070B49460B48B4D4090
b4162f039172dcb85ca4b85c99dd77beb70743ffd2e6f9e0ba78531945577665

要啟動KdcSponge憑據竊取程序,攻擊者將運行以下命令加載并執行惡意模塊: regsvr32/s user64.dll

在第一次執行時,regsvr32應用程序運行user64.dll導出的DllRegisterServer函數。DllRegisterServer函數解析sfc_os.dll中的SetSfcFileException函數,并嘗試在c:\Windows\system32\kdcsvc.dll文件上禁用Windows文件保護(WFP)。然后,它嘗試通過以下方式將自身注入正在運行的lsass.exe進程:

  1. 使用OpenProcess打開lsass.exe進程。
  2. 使用VirtualAllocEx在遠程進程中分配內存。
  3. 使用WriteProcessMemory將字符串user64.dll寫入分配的內存。
  4. 使用RtlCreateUserThread,在lsass.exe進程內以user64.dll作為參數調用LoadLibraryA

現在user64.dll正在lsass.exe進程中運行,它將首先創建以下注冊表項,以通過系統重新啟動建立持久性:

HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\KDC服務:regsvr32/s user64.dll

從這里開始,樣本將通過嘗試獲取以下模塊之一的句柄來確保系統正在運行Kerberos服務:

kdcsvc.dll
kdccli.dll
Kdcsvs.dll

KdcSponge嘗試使用以下三種方法定位三個未記錄的API函數——特別是KdcVerifyEncryptedTimeStampKerbHashPasswordEx3KerbFreeKey

  1. 標識Kerberos模塊的版本,并使用API函數的硬編碼偏移量進行掛鉤。
  2. 聯系Microsoft的symbol server以查找Kerberos模塊中API函數的偏移量,并通過與硬編碼字節序列進行比較來確認正確的函數。
  3. 在Kerberos模塊中搜索硬編碼字節序列。

KdcSponge定位要掛接的API函數的主要方法是基于可移植可執行文件(PE)的IMAGE_FILE_HEADER部分中TimeDateStamp來確定Kerberos模塊的版本。一旦確定了Kerberos模塊的版本,KdcSponge就具有硬編碼的偏移量,它將使用這些偏移量在該版本的模塊中鉤住適當的函數。KdcSponge查找以下TimeDateStamp值:

2005-12-14 01:24:41
2049-10-09 00:46:34
2021-04-08 07:30:26
2021-03-04 04:59:27
2020-03-13 03:20:15
2020-02-19 07:55:57
2019-12-19 04:15:06
2019-07-09 03:15:04
2019-05-31 06:02:30
2018-10-10 07:46:08
2018-02-12 21:47:29
2017-03-04 06:27:32
2016-10-15 03:52:20
2020-11-26 03:04:23
2020-06-05 16:15:22
2017-10-14 07:22:03
2017-03-30 19:53:59
2013-09-04 05:49:27
2012-07-26 00:01:13

如果KdcSponge無法確定Kerberos模塊的版本,并且域控制器運行的是Windows Server 2016或Server 2019(主版本10),則負載將接觸到Microsoft的符號服務器(msdl.Microsoft.com),試圖找到幾個未記錄的API函數的位置。該樣本將向如下結構的URL發出HTTPS GET請求,URL的GUID部分是PE的IMAGE_DEBUG_TYPE_CODEVIEW部分中RSDS結構的GUID值: /download/symbols/[library name].pdb/[GUID]/[library name].pdb

樣本將結果保存到以下位置的文件中,同樣,文件名的GUID是IMAGE_DEBUG_TYPE_CODEVIEW部分中RSDS結構的GUID值: ALLUSERPROFILE\Microsoft\Windows\Caches\[GUID].db:

如上所述,我們認為代碼訪問symbol服務器的原因是查找三個未記錄的Kerberos相關函數的位置:KdcVerifyEncryptedTimeStampKerbHashPasswordEx3KerbFreeKey。此樣本主要在以下庫中查找這些函數: kdcsvc.KdcVerifyEncryptedTimeStamp kdcsvc.KerbHashPasswordEx3 kdcpw.KerbHashPasswordEx3 kdcsvc.KerbFreeKey kdcpw.KerbFreeKey

如果找到這些函數,樣本將搜索特定的字節序列,如表1所示,以確認函數是否正確,并驗證它們是否未被修改。

Function Hex bytes
kdcsvc.KdcVerifyEncryptedTimeStamp 48 89 5c 24 20 55 56 57 41 54 41 55 41 56 41 57 48 8d 6c 24 f0 48 81 ec 10 01 00 00 48 8b 05 a5
kdcsvc.KerbHashPasswordEx3 48 89 5c 24 08 48 89 74 24 10 48 89 7c 24 18 55 41 56 41 57 48 8b ec 48 83 ec 50 48 8b da 48 8b
kdcpw.KerbHashPasswordEx3 48 89 5c 24 08 48 89 74 24 10 48 89 7c 24 18 55 41 56 41 57 48 8b ec 48 83 ec 50 48 8b da 48 8b
kdcpw.KerbFreeKey 48 89 5c 24 08 57 48 83 ec 20 48 8b d9 33 c0 8b 49 10 48 8b 7b 18 f3 aa 48 8b 4b 18 ff 15 72 19
kdcsvc.KerbFreeKey 48 89 5c 24 08 57 48 83 ec 20 48 8b 79 18 48 8b d9 48 85 ff 0f 85 00 c5 01 00 33 c0 48 89 03 48

如果域控制器運行的是Windows Server 2008或Server 2012(主要版本6),KdcSponge不會接觸到符號服務器,而是會在整個kdcsvc.dll模塊中搜索表2中列出的字節序列以查找API函數。

Function Hex bytes
kdcsvc.KdcVerifyEncryptedTimeStamp 48 89 5C 24 20 55 56 57 41 54 41 55 41 56 41 57 48 8D 6C 24 F9 48 81 EC C0 00 00 00 48 8B
kdcsvc.KerbHashPasswordEx3 48 89 5C 24 08 48 89 74 24 10 48 89 7C 24 18 55 41 56 41 57 48 8B EC 48 83 EC 40 48 8B F1
kdcsvc.KerbFreeKey 40 53 48 83 EC 20 48 8B D9 48 8B 49 10 48 85 C9 0F 85 B4 B9 01 00 33 C0 48 89 03 48 89 43

一旦找到KdcVerifyEncryptedTimeStampKerbHashPasswordEx3KerbFreeKey函數,該樣本將嘗試鉤住這些函數,以監視對它們的所有調用,意圖竊取憑據。當向域控制器發出身份驗證請求時,將調用Kerberos服務(KDC服務)中的這些函數,示例將捕獲入站憑據。然后將憑據寫入以下位置的磁盤: %ALLUSERPROFILE%\Microsoft\Windows\Caches\system.dat

被盜憑證使用單字節異或算法加密,使用0x55作為密鑰,并按以下結構每行寫入system.dat文件: [<timestamp>]<domain><username><cleartextpassword>

歸因

雖然歸因仍在進行中,我們無法確認攻擊行為背后的參與者,但我們確實觀察到了我們分析的案例中使用的戰術和工具與威脅組織3390(TG-3390,Emissary Panda,APT27)之間的一些相關性。

具體而言,正如SecureWorks在一篇關于先前TG-3390操作的文章中所記錄的,我們可以看到TG-3390在利用合法被盜憑證進行橫向移動和攻擊域控制器之前,同樣使用了web攻擊和另一種流行的稱為ChinaChopper的中文webshell作為其初始立足點。雖然WebShell和漏洞利用有所不同,但一旦攻擊者實現了對環境的訪問,我們注意到他們的一些過濾工具中存在重復。

SecureWorks表示,攻擊者正在使用WinRar偽裝為不同的應用程序,將數據拆分為Recycler目錄中的RAR歸檔文件。他們從部署用于執行此工作的批處理文件中提供了以下代碼段:

@echo off
c:\windows\temp\svchost.exe a -k -r -s -m5 -v1024000 -padmin-windows2014 “e:\recycler\REDACTED.rar” “e:\ProgramData\REDACTED\”
Exit

從我們對最近針對ManageEngine ADSelfService Plus的攻擊的分析中,我們發現到了相同的技術——將相同的參數順序和位置傳遞給重命名的WinRar應用程序。

@echo off
dir %~dp0>>%~dp0\log.txt
%~dp0\vmtools.exe a -k -r -s -m5 -v4096000 -pREDACTED "e:\$RECYCLE.BIN\REDACTED.rar" "E:\Programs\REDACTED\REDACTED"

一旦文件被暫存,在這兩種情況下,它們都可以在面向外部的web服務器上訪問。然后,攻擊者將通過直接HTTP GET請求下載它們。

結論

2021年9月,Unit42 觀察到一次攻擊活動,攻擊者利用Zoho的ManageEngine產品ADSelfService Plus中最近修補的漏洞(在CVE-2021-40539中跟蹤)初步訪問目標組織。技術、國防、醫療保健、能源和教育行業中至少有九家實體在這次攻擊活動中受到了損害。

攻擊后,攻擊者迅速在網絡中橫向移動,并部署多個工具來運行命令,以執行攻擊后活動。參與者非常依賴Godzilla webshell,在操作過程中將開放源代碼webshell的幾個變體上傳到受損服務器。

其他一些工具具有新穎的特性,或者在以前的攻擊中沒有公開討論,特別是NGLite后門和KdcSponge stealer。

例如,NGLite后門使用一種新的C2通道,該通道使用稱為NKN的分散網絡,而KdcSponge竊取器鉤住未記錄的函數,從入站Kerberos身份驗證嘗試中獲取憑據到域控制器。

Unit 42認為,攻擊者的主要目的是獲得對網絡的持久訪問,以及從受損組織收集和過濾敏感文檔。攻擊者將敏感文件收集到暫存目錄,并在Recycler文件夾中創建了受密碼保護的多卷RAR存檔。攻擊者通過直接從面向外部的web服務器下載單個RAR檔案來過濾文件。

IoCs

Dropper SHA256

b2a29d99a1657140f4e254221d8666a736160ce960d06557778318e0d1b7423b
5fcc9f3b514b853e8e9077ed4940538aba7b3044edbba28ca92ed37199292058

NGLite SHA256

805b92787ca7833eef5e61e2df1310e4b6544955e812e60b5f834f904623fd9f
3da8d1bfb8192f43cf5d9247035aa4445381d2d26bed981662e3db34824c71fd
5b8c307c424e777972c0fa1322844d4d04e9eb200fe9532644888c4b6386d755
3f868ac52916ebb6f6186ac20b20903f63bc8e9c460e2418f2b032a207d8f21d

Godzilla Webshell SHA256

a44a5e8e65266611d5845d88b43c9e4a9d84fe074fd18f48b50fb837fa6e429d
ce310ab611895db1767877bd1f635ee3c4350d6e17ea28f8d100313f62b87382
75574959bbdad4b4ac7b16906cd8f1fd855d2a7df8e63905ab18540e2d6f1600
5475aec3b9837b514367c89d8362a9d524bfa02e75b85b401025588839a40bcb

KdcSponge SHA256

3c90df0e02cc9b1cf1a86f9d7e6f777366c5748bd3cf4070b49460b48b4d4090
b4162f039172dcb85ca4b85c99dd77beb70743ffd2e6f9e0ba78531945577665

攻擊者IP地址

24.64.36 [.]238 (ZoomEye搜索結果)
45.63.62[.]109(ZoomEye搜索結果)
45.76.173[.]103(ZoomEye搜索結果)
45.77.121[.]232(ZoomEye搜索結果)
66.42.98[.]156(ZoomEye搜索結果)
140.82.17[.]161(ZoomEye搜索結果)
149.28.93[.]184(ZoomEye搜索結果)
149.248.11[.]205(ZoomEye搜索結果)
199.188.59[.]192(ZoomEye搜索結果)

注冊表項

Software\Microsoft\Windows\CurrentVersion\Run\ME_ADManager.exe Software\Microsoft\Windows\CurrentVersion\Run\ME_ADAudit.exe HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\KDC Service

Additional Resources

KdcSponge ATOM Threat actor DEV-0322 exploiting ZOHO ManageEngine ADSelfService Plus


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1756/