ADSelfService Plus是一個基于Web的自助服務(wù)應(yīng)用程序,允許最終用戶執(zhí)行密碼重置,,帳戶解鎖和配置文件信息更新等任務(wù),,而不依賴于幫助臺,。ADSelfService Plus提供密碼自助重置/解鎖,,密碼到期提醒,,自助服務(wù)目錄更新程序,,多平臺密碼同步器以及云應(yīng)用程序的單點(diǎn)登錄,。使用ADSelfService Plus Android和iPhone移動應(yīng)用程序,隨時隨地為最終用戶提供自助服務(wù),。ADSelfService Plus通過減少密碼重置票證和最終用戶免受計(jì)算機(jī)停機(jī)造成的挫敗感來支持IT服務(wù)臺,。
2021 年 9 月 16 日,美國網(wǎng)絡(luò)安全和基礎(chǔ)設(shè)施安全局 (CISA) 發(fā)布警報警告,,高級持續(xù)攻擊 (APT) 攻擊者正在積極利用名為ManageEngine ADSelfService Plus的自助密碼管理和單點(diǎn)登錄解決方案中新發(fā)現(xiàn)的漏洞,。警報解釋說,觀察到攻擊者部署了一個特定的webshell和其他技術(shù),,以保持在受害者環(huán)境中的持久性,;然而,在接下來的幾天里,,研究人員觀察到第二個不相關(guān)的活動成功地對同一個漏洞進(jìn)行了攻擊,。
早在 9 月 17 日,攻擊者就利用在美國租用的基礎(chǔ)設(shè)施掃描互聯(lián)網(wǎng)上數(shù)百個易受攻擊的組織,。隨后,,利用嘗試于 9 月 22 日開始,并可能持續(xù)到 10 月初,。在那期間,,攻擊者成功地?fù)p害了至少9個全球性實(shí)體,涉及技術(shù),、國防,、醫(yī)療保健、能源和教育行業(yè),。
漏洞被利用之后,,一個有效載荷被上傳到安裝了Godzilla webshell的受害者網(wǎng)絡(luò)。這項(xiàng)活動在所有受害者中都是一致的,,然而,,研究人員還觀察到一小部分被攻擊組織,他們隨后收到了一個名為 NGLite 的新后門的修改版本,。然后,,攻擊者使用 webshell或 NGLite 載荷來運(yùn)行命令并橫向移動到網(wǎng)絡(luò)上的其他系統(tǒng),同時他們只需從 Web 服務(wù)器下載感興趣的文件即可竊取它們,。一旦攻擊者轉(zhuǎn)向域控制器,他們就會安裝一個新的憑據(jù)竊取工具,研究人員將其作為 KdcSponge 進(jìn)行跟蹤,。
Godzilla 和 NGLite 都是用中文說明開發(fā)的,,可以在 GitHub 上公開下載。研究人員認(rèn)為,,攻擊者將這些工具以一種冗余形式結(jié)合起來部署,,以維持對目標(biāo)網(wǎng)絡(luò)的訪問。Godzilla 是一個函數(shù)豐富的 webshell,,它解析入站 HTTP POST 請求,、使用密鑰解密數(shù)據(jù)、執(zhí)行解密內(nèi)容以執(zhí)行附加函數(shù)并通過 HTTP 響應(yīng)返回結(jié)果,。這允許攻擊者將可能被標(biāo)記為惡意的代碼保留在目標(biāo)系統(tǒng)之外,,直到他們準(zhǔn)備好動態(tài)執(zhí)行它。
NGLite 被其開發(fā)者描述為“基于區(qū)塊鏈技術(shù)的匿名跨平臺遠(yuǎn)程控制程序”,。它利用新型網(wǎng)絡(luò) (NKN) 基礎(chǔ)設(shè)施進(jìn)行命令和控制 (C2) 通信,,這在理論上會導(dǎo)致用戶匿名。需要注意的是,,NKN 是一種合法的網(wǎng)絡(luò)服務(wù),,它使用區(qū)塊鏈技術(shù)來支持去中心化的對等網(wǎng)絡(luò)。將 NKN 用作 C2 通道非常罕見,。研究人員總共只看到 13 個示例與 NKN 通信,,其中9 個 NGLite 示例和 4 個與名為 Surge 的合法開源實(shí)用程序相關(guān),該實(shí)用程序使用 NKN 進(jìn)行文件共享,。
由于KdcSponge 是一種新穎的憑據(jù)竊取工具,,可針對域控制器進(jìn)行部署以竊取憑據(jù)。KdcSponge 將自身注入本地安全授權(quán)子系統(tǒng)服務(wù) (LSASS) 進(jìn)程,,并將掛鉤特定函數(shù)以從嘗試通過 Kerberos 對域進(jìn)行身份驗(yàn)證的帳戶中收集用戶名和密碼,。惡意代碼將竊取的憑據(jù)寫入文件,但依賴其他函數(shù)進(jìn)行滲漏,。
Palo Alto Networks的用戶可以通過以下措施緩解此活動的影響:
Cortex XDR 本地分析阻止了 NGLite 后門,;
所有已知示例(Dropper、NGLite,、KdcSponge)在 WildFire 中都被歸類為惡意軟件,;
Cortex Xpanse能夠準(zhǔn)確識別跨客戶網(wǎng)絡(luò)的Zoho ManageEngine ADSelfServicePlus、ManageEngine Desktop Central或ManageEngine ServiceDeskPlus服務(wù)器,;
初始訪問
從 9 月 17 日開始一直持續(xù)到 10 月初,,研究人員觀察到針對 ManageEngine ADSelfService Plus 服務(wù)器的掃描。通過跟蹤分析,,研究人員認(rèn)為攻擊者僅在美國就針對至少 370 個 Zoho ManageEngine 服務(wù)器,。獲得掃描結(jié)果后,,攻擊者于 9 月 22 開始利用嘗試。這些嘗試主要針對 CVE-2021-40539,,它允許繞過 REST API 身份驗(yàn)證,,從而在易受攻擊的設(shè)備中遠(yuǎn)程執(zhí)行代碼。為了實(shí)現(xiàn)這一結(jié)果,,攻擊者向 REST API LicenseMgr 提供了精心制作的 POST 語句,。
雖然研究人員缺乏對在這次活動中被利用的組織的總體情況的了解,但研究人員認(rèn)為,,在全球范圍內(nèi),,技術(shù)、國防,、醫(yī)療保健,、能源和教育行業(yè)中至少有九個實(shí)體受到了攻擊。在成功利用之后,,攻擊者上傳了一個部署了Godzilla webshell 的有效載荷,,從而能夠額外訪問受害網(wǎng)絡(luò)。研究人員觀察到以下在美國租用的 IP 地址與被攻擊的服務(wù)器進(jìn)行交互:
在部署 webshell 之后,,在所有受害者中似乎都一致,,研究人員還確定了在被攻擊網(wǎng)絡(luò)子集中部署的其他工具的使用。具體來說,,攻擊者部署了一個名為 NGLite 的開源后門的自定義變體和一個 KdcSponge 的憑證收集工具,。下面幾節(jié)將詳細(xì)分析這些工具。
惡意軟件分析
在利用時,,兩個不同的可執(zhí)行文件被保存到被攻擊的服務(wù)器:ME_ADManager.exe 和 ME_ADAudit.exe,。ME_ADManager.exe 文件充當(dāng)投放木馬,不僅將Godzilla webshell 保存到系統(tǒng),,還會安裝和運(yùn)行保存到系統(tǒng)的其他可執(zhí)行文件,,特別是 ME_ADAudit.exe。ME_ADAudit.exe 可執(zhí)行文件基于 NGLite,,攻擊者將其用作在系統(tǒng)上運(yùn)行命令的有效載荷,。
ME_ADManager.exe dropper
利用后,dropper被保存到以下路徑:
c:\Users\[username]\AppData\Roaming\ADManager\ME_ADManager.exe
對該文件的分析表明,,此有效載荷的開發(fā)者在構(gòu)建示例時并未刪除調(diào)試符號,。因此,示例中存在以下調(diào)試路徑,,并建議使用用戶名 pwn 來創(chuàng)建此載荷:
c:\Users\pwn\documents\visual studio 2015\Projects\payloaddll\Release\cmd.pdb
在執(zhí)行時,,該示例首先創(chuàng)建以下通用互斥鎖,這些互斥鎖在互聯(lián)網(wǎng)上免費(fèi)提供的許多代碼示例中都可以找到,,這是為了避免運(yùn)行多個dropper實(shí)例:
cplusplus_me
然后,,dropper嘗試將硬編碼的 Godzilla webshell 編寫到以下位置,,研究人員將在本報告的后面部分提供詳細(xì)分析:
然后,dropper 創(chuàng)建文件夾 %APPDATA%\ADManager 并將其自身復(fù)制到 %APPDATA%\ADManager\ME_ADManager.exe,,然后創(chuàng)建以下注冊表項(xiàng)以在重新啟動后持續(xù)運(yùn)行:
dropper 不會將 ME_ADAudit.exe 文件寫入磁盤,,這意味著攻擊者必須在執(zhí)行 dropper 之前將此文件上傳到服務(wù)器,這可能是最初利用 CVE-2021-40539 漏洞的一部分,。在對多起事件的分析中,研究人員發(fā)現(xiàn) ME_ADAudit.exe 示例保持了一致的 SHA256 哈希值 805b92787ca7833eef5e61e2df1310e4b6544955e812e60b5f834f904623fd9,,這表明攻擊者針對多個目標(biāo)部署了相同的定制版本的NGLite后門,。
Godzilla Webshell
如前所述,初始 dropper 包含一個硬編碼的 Java Server Page (JSP) webshell,。通過對webshell進(jìn)行分析,,確定為中文Godzilla webshell V3.00+版。Godzilla webshell 是由用戶BeichenDream開發(fā)的,,他說他們創(chuàng)建這個 webshell 是因?yàn)楫?dāng)時可用的 webshell 經(jīng)常會在攻擊期間被安全產(chǎn)品檢測到,。因此,開發(fā)者宣稱它將通過對其網(wǎng)絡(luò)流量利用 AES 加密來避免檢測,,并且它在安全供應(yīng)商產(chǎn)品中保持非常低的靜態(tài)檢測率,。
VirusTotal 上針對Godzilla webshell 的檢測結(jié)果
Godzilla webshell 在攻擊期間被區(qū)域性攻擊組織采用并不奇怪,因?yàn)樗峁┝吮韧唤M織使用的其他 webshell(例如 ChinaChopper)更多的函數(shù),,比如逃避網(wǎng)絡(luò)檢測,。
就函數(shù)而言,JSP webshell本身相當(dāng)簡單,,并保持了輕量級的內(nèi)存占用,。它的主要函數(shù)是解析HTTP POST,使用密鑰解密內(nèi)容,,然后執(zhí)行有效載荷,。這允許攻擊者將可能被標(biāo)記為惡意的代碼保留在目標(biāo)系統(tǒng)之外,直到他們準(zhǔn)備好動態(tài)執(zhí)行它,。
下圖顯示了默認(rèn) JSP webshell 的初始部分以及解密函數(shù),。
默認(rèn) Godzilla JSP webshell 的標(biāo)題
值得注意的是變量 xc 以及傳入上圖所示代碼的第一行和第二行。這些是每次操作員生成新 webshell 時都會發(fā)生變化的主要組件,,變量表示用于內(nèi)部 AES 解密的密鑰 那個 webshell,。
當(dāng)你手動生成 webshell 時,需要指定明文通行證和密鑰,。默認(rèn)情況下,,這些是 pass 和 key。
Godzilla 默認(rèn) webshell 值
為了弄清楚這些在 webshell 中是如何呈現(xiàn)的,,你可以看看 Godzilla JAR 文件,。
如下所示,,你可以看到代碼在/shells/cryptions/JavaAES/GenerateShellLoder函數(shù)下替換嵌入的webshell模板中的字符串。
Generate.class 文件中的 GenerateShellLoder 函數(shù)
因此,,研究人員知道 webshell 中的 xc 變量將是 AES 密鑰,,如模板中所示。
String xc=“{secretKey}”; String pass=“{pass}”; String md5=md5(pass+xc),;
研究人員觀察到 xc 值似乎是一個哈希值,,在 /core/shell/ShellEntity.class 文件下,研究人員可以看到代碼采用 MD5 哈希值的前 16 個字符作為明文密鑰,。
這樣,,研究人員就知道3c6e0b8a9c15224a的xc值是單詞key的MD5哈希的前16個字符。
鑒于此,,xc 和 pass 變量是兩個主要字段,,可用于跟蹤和嘗試跨事件映射活動。為了方便講解,,研究人員生成了一個帶有默認(rèn)分析選項(xiàng)的 Godzilla webshell,;然而,默認(rèn)值和攻擊中觀察到的值之間的唯一區(qū)別是不同的 xc 和 pass 值,。
這個webshell的一個重要特點(diǎn)是,,缺乏靜態(tài)檢測,并試圖通過避免可能被安全產(chǎn)品簽名識別的關(guān)鍵字或常見結(jié)構(gòu)來隱藏這個文件,。一個特別有趣的靜態(tài)規(guī)避技術(shù)是使用Java三元條件運(yùn)算符來表示解密,。
這里的條件是 m?1:2 ,m 是傳遞給該函數(shù)的布爾值,,如上圖所示,。如果 m 為 True,則使用第一個表達(dá)式常量 (1),。否則,,通過第二個 (2)。參考 Java 文檔,,1 是 ENCRYPT_MODE,,而 2 是 DECRYPT_MODE。
JavaX 加密常量的含義
webshell在執(zhí)行這個函數(shù)x時,,并沒有設(shè)置m的值,,從而強(qiáng)制m為False并設(shè)置為decrypt。
response.getWriter(),。write(base64Encode(x(base64Decode(f.toString()),, true)));
要了解Godzilla 的函數(shù),研究人員可以查看/shells/payloads/java/JavaShell.class,。該類文件包含提供給操作符的所有函數(shù),。下面是getFile函數(shù)的一個示例。
Godzilla 的 getFile 函數(shù)載荷
有效載荷函數(shù):
正如函數(shù)名稱所證明的那樣,,Godzilla webshell 提供了大量有效載荷,,用于導(dǎo)航遠(yuǎn)程系統(tǒng)、傳入和傳出數(shù)據(jù),、遠(yuǎn)程命令執(zhí)行和枚舉,。
這些有效載荷將使用之前描述的密鑰加密,并且操作軟件將向包含數(shù)據(jù)的被攻擊系統(tǒng)發(fā)送 HTTP POST,。
此外,,如果研究人員檢查 core/ui/component/dialog/ShellSetting.class 文件(如下所示),initAddShellValue() 函數(shù)包含遠(yuǎn)程網(wǎng)絡(luò)訪問的默認(rèn)配置設(shè)置,。因此,可以識別靜態(tài) HTTP 標(biāo)頭和 User-Agent 字符串等元素,,以幫助搜索web訪問日志查找潛在的漏洞,。
為了說明這一點(diǎn),下面是web服務(wù)器訪問日志的一個片段,,它顯示了使用Curl應(yīng)用程序的初始攻擊,,并發(fā)送自定義URL有效載荷來觸發(fā)CVE-2021-40539漏洞。然后它顯示了對 Godzilla webshell 的后續(xù)訪問,,它已被初始放置器放置到硬編碼路徑中,。通過查看 User-Agent,研究人員可以確定攻擊者從漏洞利用到初始 webshell 訪問的時間僅超過四分鐘,。