定位恶意 Perl 脚本

定位恶意 Perl 脚本

我一直在尝试找到导致我控制的服务器出现严重问题的 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

我正尝试在这里实现几件事......

  1. 首先我需要停止这些进程的运行。通过禁用出站 SSH 或任何 IP 表规则等...这些脚本已经运行了大约 36 个小时,我主要关心的是停止这些进程的运行和自行重生。

  2. 其次,我需要尝试找到这些脚本的安装位置和方式。如果有人能告诉我在访问日志或其他内容中应该查找什么,我将不胜感激。

答案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。

相关内容