查看linux中哪个文件启动了某个进程

查看linux中哪个文件启动了某个进程

我的一台服务器开始大量发送垃圾邮件。该服务器使用的是 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 5101lsof -p 5102查看该进程实际打开了哪些文件。您还可以通过运行cat /proc/5101/environ和获取更多信息cat /proc/5102/environ。查找 SCRIPT_FILENAME 变量,这将显示您的位置。我见过很多次它cat /proc/PID/environ不会返回任何输出 - 这是因为攻击者伪造了环境。所以,可以肯定地说,这lsof -p PID是找到位置的最安全选择。找到脚本的位置后,在删除它之前,您应该运行stat script.pl或任何名称来查看脚本何时放置在您的服务器上。该时间戳将有助于在日志中找到条目以确切了解它是如何发生的。

相关内容