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