我的一台服务器开始大量发送垃圾邮件。该服务器使用的是 ISPConfig 3,其中一位网络用户很可能存在安全漏洞。
我已经识别了用户,并且一个文件以某种方式启动了发送垃圾邮件的 perl 脚本。
但是我找不到受影响的文件,因为很可能所有内容都在内存中运行。
显然,该文件以某种方式创建了一个名为“mail”的服务,该服务在服务器上运行并将其自身绑定到主 IP 地址。
由于我不知道如何追踪这个问题,下面我将发布一些有关我的发现的信息。
ps aux | grep mail
web24 5101 1.8 0.3 35580 7944 ? Ss 10:45 6:01 mail
web24 5102 1.6 0.2 34628 5160 ? Ss 10:45 5:28 mail
netstat -nalp | grep :25
tcp 0 1 x.x.x.x:50774 194.54.81.164:25 SYN_SENT 5102/mail
tcp 0 1 x.x.x.x:47849 194.54.81.163:25 SYN_SENT 5101/mail
该脚本很可能是手动触发的,因为它在关闭后会随机启动。
我想知道如何追踪哪个文件启动了该进程(最有可能的是我必须分析内存转储)。
在 PID 上运行 lsof 后,我得到以下结果:
lsof -p 31459
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
perl 31459 web24 cwd DIR 0,34 4096 18735409 /
perl 31459 web24 rtd DIR 0,34 4096 18735409 /
perl 31459 web24 txt REG 0,34 7360 19644668 /usr/bin/perl
perl 31459 web24 mem REG 253,0 19644668 /usr/bin/perl (path dev=0,34)
perl 31459 web24 mem REG 253,0 20621055 /usr/lib/perl/5.10.1/auto/File/Glob/Glob.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 20620896 /usr/lib/perl/5.10.1/auto/POSIX/POSIX.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 20621014 /usr/lib/perl/5.10.1/auto/Fcntl/Fcntl.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 20627464 /usr/lib/perl/5.10.1/auto/Socket/Socket.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 20621012 /usr/lib/perl/5.10.1/auto/IO/IO.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 19628140 /lib/libcrypt-2.11.3.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 19628224 /lib/libc-2.11.3.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 19628216 /lib/libpthread-2.11.3.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 19628144 /lib/libm-2.11.3.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 19628220 /lib/libdl-2.11.3.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 19644608 /usr/lib/libperl.so.5.10.1 (path dev=0,34)
perl 31459 web24 mem REG 253,0 19628132 /lib/ld-2.11.3.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 5857281 /usr/lib/locale/locale-archive (path dev=0,34)
perl 31459 web24 0r CHR 1,3 0t0 19220558 /dev/null
perl 31459 web24 1w CHR 1,3 0t0 19220558 /dev/null
perl 31459 web24 2w CHR 1,3 0t0 19220558 /dev/null
perl 31459 web24 3u IPv4 5906021 0t0 TCP my.hostname.ro:46504->164.81.54.194.static.server.ua:smtp (SYN_SENT)
perl 31459 web24 4w FIFO 0,8 0t0 3061201 pipe
perl 31459 web24 5r FIFO 0,8 0t0 3061202 pipe
perl 31459 web24 6w FIFO 0,8 0t0 3061548 pipe
perl 31459 web24 7r FIFO 0,8 0t0 3061549 pipe
我应该提到没有可疑的 cronjob,并且我确信脚本是手动运行的,因为现在它的名称是“httpd”,而不是我之前提到的“mail”。
我可以很容易地解决这个问题,只需关闭客户的帐户并继续前进,但由于这种安全漏洞是我第一次无法修复,所以我想解决它以供将来参考。
答案1
您可以看看 lsof 显示的内容。
lsof | grep mail
检查进程打开了哪些文件:
lsof -p PID
也许 strace 还可以向你显示一些内容:
strace -p PID
我还会检查 cron 中是否添加了可疑的脚本。
答案2
我同意运行lsof -p 5101
并lsof -p 5102
查看该进程实际打开了哪些文件。您还可以通过运行cat /proc/5101/environ
和获取更多信息cat /proc/5102/environ
。查找 SCRIPT_FILENAME 变量,这将显示您的位置。我见过很多次它cat /proc/PID/environ
不会返回任何输出 - 这是因为攻击者伪造了环境。所以,可以肯定地说,这lsof -p PID
是找到位置的最安全选择。找到脚本的位置后,在删除它之前,您应该运行stat script.pl
或任何名称来查看脚本何时放置在您的服务器上。该时间戳将有助于在日志中找到条目以确切了解它是如何发生的。