服务器后门工具选错等于白扫一场,这话在应急群里说过很多次,还是会有人栽。拿到一份「全部通过」的报告,心里那块石头落了地,谁都想赶紧收工交差。可过几天负载莫名起来、陌生 IP 从某个平时空着的端口溜进来,再翻报告才发现,那条路工具压根没看过一眼。扫描器只回答它被设计来回答的问题,剩下的空白,得靠人补。

早些年跟着处理过一台被挂的机器,先跑了两款挺常见的查杀,一个字都没报。当时还以为是误报,后来把 /etc/crontab 打开,里面躺着一行陌生任务,隔段时间从外面拉个脚本下来跑,/etc 下面还多了个不认识的目录,名字起得很像系统自带的。工具本身没毛病,毛病在于它只扫网站目录,系统层的事不归它管,我们也没人去看那一眼。从那之后养成个习惯:开扫之前先问一句,这玩意儿能覆盖到哪。
服务器后门工具选错等于白扫一场,最常见的偏差是把杀毒当排查
特征库杀毒干的是认样本的活儿。已知的恶意文件、常见木马,命中率高,还省事。可 rootkit 这类东西天生反抗侦查,动过手脚的 ps、netstat、ls,报出来的都是它想让你看的东西,样本库里没有它,报告就干净得像新装的。所以杀毒留着跑没坏处,拿它当排查主力,就有点像拿体温计去查骨折。
另外两个偏差也挺常见。一个是只盯网站目录,不看持久化——cron、systemd、authorized_keys、开机启动脚本,这些才是让后门活过重启的地方。另一个是只看结论不看范围,报告首页写着「无威胁」,翻到页脚才发现扫的路径只有 /home,/usr 和 /etc 根本没进去。
后门不是一个东西,得按层配工具
把后门拆开看,至少五层。文件层是 WebShell、被改过的 php 和 js;配置层是 sshd_config、authorized_keys、sudoers;持久化层是 crontab、systemd unit、rc.local;底层是内核模块、LD_PRELOAD、被替换掉的系统二进制;账号层是隐藏 UID 和凭空多出来的 SUID 文件。工具是按层干活的,一款通吃所有层的东西,我到现在没见过。
进程和网络,别只信 ps 的输出
查看谁在监听,ss -antp 配合 lsof -i 基本够用,重点放在那些监听在 0.0.0.0、又不该对外服务的端口上。真怀疑 ps 被换过,绕过去最直接的办法是读 /proc:ls -l /proc/[0-9]*/exe 看它指向哪个真实二进制,/proc/[pid]/cmdline 看启动参数。U 盘里常备一份静态编译的 busybox,出事时用它的 ps 和 netstat,比系统自带的那两个可信。系统二进制有没有被动过,用发行版自带的包校验工具对一遍就行,命令各发行版不一样,以官方文档说明为准。
文件完整性和时间线,最容易被跳过的一层
rpm -Va 或者 debsums,把包管理器管的文件挨个校验,被换过的二进制会现形。但这两样只管安装包里带的东西,你自己上传的程序、站点目录,全在覆盖范围之外。所以还得补一条时间线:find /var/www -mtime -7 -type f 看最近被改过的文件;find / -perm -4000 -type f 看谁被塞了 SUID 位;顺手翻翻 /tmp、/dev/shm、/var/tmp 里带执行权限的东西,这几个目录历来是重灾区。
日志这层,auditd 比多数人想的有用
/var/log/secure、last、lastb 这几样能对上登录行为,前提是没人清过。auditd 的价值在事前挂规则,-w /etc/passwd -p wa、-w /etc/crontab -p wa,谁动过这些文件都留痕。日志最好再往另一台机器送一份,本地那份被删了还有备份。这活儿平时嫌麻烦,真出事那天就是救命。
报告里那句「全部通过」该怎么读
我的读法是当说明书看:扫了哪些路径、用的什么引擎、只比特征库还是有行为检测、有没有查内核。rkhunter、chkrootkit 这类东西各管一摊,盲区不一样,交叉着用比单跑一款强。ClamAV 擅长恶意文件,内核层面的事它不负责,别指望它替你兜底。工具装一柜子不等于查得干净,方向对了,两三款就够。
下次开扫,先把这几件事定下来
范围先定:系统层、站点目录、数据库目录、备份目录都算进来,别只扫 www。层级再定:文件、配置、持久化、进程、账号,一层一层过,跳过哪层心里要有数。证据也要定:动手清理前先打包镜像、把关键文件 md5sum 记下来,别上来就 rm,删完连回溯的机会都没了。最后是出口:清干净不算完,改密码、换密钥、把 authorized_keys 逐行看一遍,然后盯着观察一段时间。
工具就是个放大镜,拿错了,看一整天也是白看。先把敌人藏在哪一层想明白,再决定手上拿什么,顺序反了就是白忙。
【版权声明】:本站内容若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!