奇安信 XLab 本周披露了一个针对 Control Web Panel(CWP,一套免费的 Linux 主机管理面板)的后门,命名 cwpdoor。这个后门不是插件、不是模块,而是把 CWP 自带的 Web 服务器 cwpsrv 整个文件重新编译后替换掉:平时它和正常程序没有区别,只有当请求里带上以 X-Ngx-Integrity 开头的自定义头、且时间戳与签名校验通过时,才会执行请求里携带的命令。而这类请求不会出现在访问日志里。
对用 CWP 管服务器的站长来说,这条要当「可能已经被 root」来对待,而不是「可能中了木马」。
事件概述
XLab 在 6 月 29 日捕获到安装脚本,一个伪装成版本更新的 shell 脚本,只处理两个版本的 cwpsrv:1.15.10 与 1.24.0。安装这个后门需要 root 权限,也就是说攻击者此前已经拿到了服务器最高权限,至于怎么拿到的,研究者目前还不清楚。
9 月 30 日,一个包含该后门的压缩包从巴西被上传到 VirusTotal。XLab 据此判断「真实受害者已经存在」,但没有给出感染数量。同一个压缩包里还有 Ebury 恶意软件——一个至少从 2009 年活跃至今的 OpenSSH 后门与凭据窃取器。两者是否同源,研究者表示无法确认,也存在不同攻击者把东西放进同一台服务器的可能。
技术细节
后门的隐蔽性主要靠三层设计。
行为隐蔽。cwpsrv 是被重新编译的二进制,正常请求照常处理,只有命中特殊头的请求会进入命令执行分支。命令通过 Web 请求下发,执行完不写访问日志,常规的日志巡检看不到痕迹。
文件隐蔽。安装脚本替换 cwpsrv 之后,会把文件的时间戳改回原值,用 ls 和 stat 看与安装前完全一致。研究者检查时,该文件在 VirusTotal 上 63 个引擎全部零检出。
通道隐蔽。后门通过一个 Unix socket 通信,socket 名字暴露了它的存在:ngx_http_integrity_helper。在研究者给出的案例里,一台开放端口列表完全正常的服务器,正是靠这条 socket 才被发现。
三条自查命令,建议直接在服务器上跑:
ss -axp | grep integrity
ps aux | grep cwpsrv
strings /usr/local/cwpsrv/bin/cwpsrv | grep X-Ngx-Integrity
第一条有结果就基本可以定性;第二条看有没有 cwpsrv 拉起的、你不认识的辅助进程;第三条是在二进制里直接找后门的请求头名字。
已公布的 IOC:
- MD5
e505d4ffa21cf494a5dc2d7c8f4f1236(安装脚本 cwpsrv_update.sh) - MD5
965aea67fb40de1bab5169ada993349f(被植入后门的 cwpsrv 1.15.10) - MD5
d3f4e95113d49ab3991b45e457bda75b(被植入后门的 cwpsrv 1.24.0) - IP
136.0.141[.]71,下载地址https://136.0.141[.]71/static/cwpsrv_update.sh
影响评估
后门能力等价于 root。CWP 的 Web 服务器本身以高权限运行,能够下发任意命令就意味着攻击者可以随时读文件、改配置、植入持久化、横向到同一台机器上托管的所有站点与数据库。
暴露面比想象的大。CWP 在国内外的廉价 VPS、共享主机、小型 IDC 里用得很多,一台机器往往挂着几十个客户站点。一旦这类机器被控,受影响的不是一个站,而是一整批站——对做站群、做多站点托管的团队,这是直接的业务风险:站点被植入博彩跳转、被挂马、被搜索引擎拉黑,通常不会在第一时间被发现,等发现时收录和排名已经掉完。
另外要纠正一个常见误判:端口正常不等于没有后门。cwpdoor 走的是本地 Unix socket,不监听新端口,靠外部端口扫描完全看不到。
修复建议
已确认感染的,按「整机失陷」处理,不要只删文件。
- 先从安装脚本留下的备份恢复原始 cwpsrv:备份位于
/usr/local/cwpsrv/bin,文件名以cwpsrv.prev-开头、以日期时间结尾。但研究者描述的安装流程会在替换成功后删除临时文件与备份,所以这份备份很可能已经不在,恢复路径要提前想好。 - 升级到最新版本,然后重跑
ss -axp | grep integrity,确认没有输出。 - 更换面板的全部凭据。后门能执行任意命令,面板密码、数据库密码、站点 FTP/SFTP 账号、SSH 密钥都应当视为已泄露。
- 排查同机其他威胁:
/etc/ld.so.preload、authorized_keys、cron 与 systemd 单元、近期被改动时间戳正常的二进制、以及出网连接。Ebury 也出现在同一批样本里,值得专门查 OpenSSH 相关文件是否被替换。
没感染的,两件事值得现在就做:一是核对 cwpsrv 的版本与来源,只从官方渠道更新,别信服务器上突然出现的「更新脚本」;二是给面板加一层网络层限制——面板端口只允许固定 IP 访问,或挂到 WAF/堡垒机后面。CWP 这类面板的漏洞历史上出得不少,能少暴露一个入口就少一个。