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