我一直在尝试找到导致我控制的服务器出现严重问题的 perl 脚本的位置。我还试图找出此脚本在服务器上的具体安装方式 - 我最好的猜测是通过 WordPress 漏洞。
该服务器是一个运行 Ubuntu 9.04、Apache 和 MySQL 的基本 Web 设置。我使用 IPTables 作为防火墙。该网站运行大约 20 个站点,负载从未超过 0.7。
据我所见,该脚本正在与其他服务器建立出站连接(很可能是尝试暴力破解)。
以下是某个进程的顶部转储:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22569 www-data 20 0 22784 3216 780 R 100 0.2 47:00.60 perl
该进程正在运行的命令是/usr/sbin/sshd
。我试图找到一个确切的文件名,但没有找到...我运行了一个lsof -p PID
,下面是输出:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
perl 22569 www-data cwd DIR 8,6 4096 2 /
perl 22569 www-data rtd DIR 8,6 4096 2 /
perl 22569 www-data txt REG 8,6 10336 162220 /usr/bin/perl
perl 22569 www-data mem REG 8,6 26936 170219 /usr/lib/perl/5.10.0/auto/Socket/Socket.so
perl 22569 www-data mem REG 8,6 22808 170214 /usr/lib/perl/5.10.0/auto/IO/IO.so
perl 22569 www-data mem REG 8,6 39112 145112 /lib/libcrypt-2.9.so
perl 22569 www-data mem REG 8,6 1502512 145124 /lib/libc-2.9.so
perl 22569 www-data mem REG 8,6 130151 145113 /lib/libpthread-2.9.so
perl 22569 www-data mem REG 8,6 542928 145122 /lib/libm-2.9.so
perl 22569 www-data mem REG 8,6 14608 145125 /lib/libdl-2.9.so
perl 22569 www-data mem REG 8,6 1503704 162222 /usr/lib/libperl.so.5.10.0
perl 22569 www-data mem REG 8,6 135680 145116 /lib/ld-2.9.so
perl 22569 www-data 0r FIFO 0,6 157216 pipe
perl 22569 www-data 1w FIFO 0,6 197642 pipe
perl 22569 www-data 2w FIFO 0,6 197642 pipe
perl 22569 www-data 3w FIFO 0,6 197642 pipe
perl 22569 www-data 4u IPv4 383991 TCP outsidesoftware.com:56869->server12.34.56.78.live-servers.net:www (ESTABLISHED)
我的直觉是 outsidesoftware.com 也正在遭受攻击?或者可能被用作隧道。
/tmp
我成功地在和中找到了一些恶意文件/var/tmp
,下面是其中一个文件的简要输出:
#!/usr/bin/perl
# this spreader is coded by xdh
# xdh@xxxxxxxxxxx
# only for testing...
my @nickname = ("vn");
my $nick = $nickname[rand scalar @nickname];
my $ircname = $nickname[rand scalar @nickname];
#system("kill -9 `ps ax |grep httpdse |grep -v grep|awk '{print $1;}'`");
my $processo = '/usr/sbin/sshd';
完整的文件内容可以在这里查看:http://pastebin.com/yenFRrGP
我正尝试在这里实现几件事......
首先我需要停止这些进程的运行。通过禁用出站 SSH 或任何 IP 表规则等...这些脚本已经运行了大约 36 个小时,我主要关心的是停止这些进程的运行和自行重生。
其次,我需要尝试找到这些脚本的安装位置和方式。如果有人能告诉我在访问日志或其他内容中应该查找什么,我将不胜感激。
答案1
永远不要允许不受信任的用户可以写入文件的文件系统上的“exec”位!更新您的 /etc/fstab 并重新挂载,或者最好重新启动服务器。
在这里你(终于)意识到防火墙并不是一个花哨的东西,它只是“保护”你免受一些来自外部的愚蠢攻击。你还必须有用于传出流量的防火墙规则!或者至少你应该对传出流量进行一些监控。好的,wordpress 想要通过 http 更新自身(?)但为什么一些 web 应用程序要连接到 ssh、irc 等……?
接下来……啊,它在“www-data”下运行您的所有网站。这很棒。您应该以更好的方式设计它。在自己独立的 uid 下运行每个用户客户端。您可以使用 php-fpm 或类似的东西。这样,您可以更好地查看用户的活动,甚至可以根据用户 ID 通过 iptables 流量进行过滤……用户“foobar”是否需要他的 Web 应用连接到 irc 服务器?那么没有什么比为这个特定用户添加规则更简单了。
还有一点... 小于 1024 的端口只能由 root 用户绑定。那么您应该对大于 1024 的监听端口进行某种监控,这样用户就不会有自己的守护进程在您的服务器上监听。
您还可以考虑 chrooting 网络应用程序......
如果任何不受信任的用户能在服务器上运行其自己的二进制文件、脚本,那么他们就能访问用户服务器,或者将您的资源用于其他用途。
有关保护 PHP 托管的一些有趣信息:Linux:系统管理员的 25 个 PHP 安全最佳实践
答案2
您说“我还想弄清楚这个脚本是如何安装在服务器上的 - 我最好的猜测是通过 WordPress 漏洞。该服务器是一个运行 Ubuntu 9.04 的基本 Web 设置”
Ubuntu 9.04 是一个非长期支持版本,并于 2010 年底停止接收更新:
https://lists.ubuntu.com/archives/ubuntu-security-announce/2010-September/001166.html
所以基本上您的 SSH、Apache 和所有服务都很久没有收到安全更新了!您最好的选择是将此服务器视为“丢失”,不要花时间追踪脚本。您可以在其上安装 rootkit 和所有其他类型的恶意程序。将服务迁移到操作系统上仍有更新的干净机器,例如 CentOS 6 或 Ubuntu 12.04 LTS Server。