内容简介:作者:郑斯碟@默安科技应急响应中心
作者:郑斯碟@默安科技应急响应中心
2019 年 3 月 1 日,默安科技应急响应中心接到某合作伙伴的求助电话,有主机被病毒感染,经默安科技安全研究员郑斯碟研究分析发现,该病毒为之前的 watchdogs挖矿病毒 的变种,通过 Redis 未授权访问漏洞及 ssh 弱口令进行突破植入,随后释放挖矿木马进行挖矿操作,并对内外网主机进行 redis 漏洞攻击及 ssh 暴力破解攻击。
0x1 病毒特征
要判断是否感染此病毒,可从以下几个方面入手:
1、 查看 root/.ssh/ 中的密钥信息是否被清空。
2、 查看计划任务中是否存在以下任务信息
3、 查看是否有以下进程信息
4、 查看 /usr/sbin 目录下是否有 kthrotlds 文件
5、 查看 /etc/init.d/ 下是否有 netdns 文件
6 、病毒程序执行后会消耗大量的主机 cpu 资源。
请各位系统维护人员检查各自机子是否有以上特征,如果有以上特征,可联系默安科技安全应急响应中心获取病毒清除工具。
以下是对该病毒的分析过程:
0x2 针对kthrotlds的分析:
通过分析发现,该病毒文件还是采用了 upx 壳,只是对其中的魔数进行了修改:
UPX 的魔数是:
该病毒文件的魔数
只要将模数修改一下即可,修改如下:
修复后,使用 upx -d 进行脱壳
可以看到,已经脱壳成功。
下面使用 ida 进行反编译
函数名都是随机字符串,看下字符串,推断程序应该是使用 golang 写的,和之前的差不多。
所以这里还是要使用之前的那个符号还原脚本对程序中的符号进行还原,脚本地址是:
https://rednaga.io/2016/09/21/reversing_go_binaries_like_a_pro
还原后:
下面开始分析 main 函数
这里是将 .lsdpid 文件写到 tmp 下,其主要作用是查看 pid 。
下面是将 kthrotlds 通过 github_com_hippies_LSD_LSDC_CopyFile 函数将 /tmp
/kthrotlds 拷贝到 /usr/sbin/kthrotlds 中
接下来是往 /etc/init.d/ 中写入一个名叫 netdns 的文件,并通过 chkconfig 命令将 netdns 添加为开启启动项。可以发现在 etc/init.d 目录下确实存在 netdns 文件。
通过文本查看 工具 打开这个文件,发现其是一个 bash 脚本,具体如下:
#! /bin/bash
#chkconfig: - 99 01
#description: kthrotlds daemon
#processname: /usr/sbin/kthrotlds
### BEGIN INIT INFO
# Provides: /user/sbin/kthrotlds
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: kthrotlds deamon
# Description: kthrotlds deamon 守护进程
### END INIT INFO
LocalPath="/usr/sbin/kthrotlds"
name='kthrotlds'
pid_file="/tmp/.lsdpid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"
get_pid(){
cat "$pid_file"
}
is_running(){
[ -f "$pid_file" ] &&/usr/sbin/kthrotlds -Pid $(get_pid) > /dev/null 2>&1
}
case "$1" in
start)
if is_running; then
echo "Already started"
else
echo "Starting $name"
$LocalPath >>"$stdout_log" 2>> "$stderr_log" &
echo $! > "$pid_file"
if ! is_running; then
echo "Unable to start, see$stdout_log and $stderr_log"
exit 1
fi
fi
;;
stop)
if is_running; then
echo -n "Stopping$name.."
kill $(get_pid)
for i in {1..10}
do
if ! is_running; then
break
fi
echo -n "."
sleep 1
done
echo
if is_running; then
echo "Not stopped; maystill be shutting down or shutdown may have failed"
exit 1
else
echo "Stopped"
if [ -f "$pid_file"]; then
rm "$pid_file"
fi
fi
else
echo "Not running"
fi
;;
restart)
$0 stop
if is_running; then
echo "Unable to stop, will notattempt to start"
exit 1
fi
$0 start
;;
status)
if is_running; then
echo "Running"
else
echo "Stopped"
exit 1
fi
;;
*)
echo "Usage: $0{start|stop|restart|status}"
exit 1
;;
esac
exit 0
下面回到 kthrolds 源码的分析: 大致的意思是查看进程列表,如果发现进程 kthrotlds 被 kill 掉了,则将其启动。
紧接着是一些清除操作,这里应该是清除之前版本残留的一些文件:
接着进行计划任务的写入操作,释放挖矿木马 ksoftirqds ,及更新操作。
以下是其计划任务中写入的命令:
访问: https://pastebin.com/raw/D8E71JBJ 即可获得病毒执行脚本
通过解密其中的 base64 编码的数据:
发现其和之前的脚本没有太多区别,这里主要将 curl 获取的图片文件重命名为了 kthrotlds (原来是 watchdogs )。
如需对脚本内容进行进行进一步的了解,请参考上一篇分析文章,这里就不做过多分析了:
https://www.anquanke.com/post/id/171692
0x3 横向传播
下面我们看下病毒式如何进行横向传播的:
0x1 Readis 攻击:
遍历内网 ip 及外网 ip 攻击 redis 服务器:
测试机上通过 wireshark 抓取到的 redis 攻击行为
攻击程序调用过程:
Main_main ->main_attack ->github_com_hippies_LSD_LSDA_Ago ->github_com_hippies_LSD_LSDA_Ago_func1 ->github_com_hippies_LSD_LSDA_runtwo ->github_com_hippies_LSD_LSDA_run ->github_com_gomodule_redigo_redis_DiaTimeout ->github_com_gomodule_redigo_redis_Dial ->github_com_gomodule_redigo_redis__conn_Do ->github_com_gomodule_redigo_redis__conn_DoWithTimeout ->github_com_gomodule_redigo_redis__conn_writeCommand
相关代码:
0x2 ssh 爆破
测试机上通过 wireshark 抓取到的 ssh 爆破行为:
攻击程序调用过程
Main_main -> main_attack ->github_com_hippies_LSD_LSDA_Bbgo ->github_com_hippies_LSD_LSDA_bgo_func1 ->github_com_hippies_LSD_LSDA_cmdtwo ->github_com_hippies_LSD_LSDA_cmd ->Golang_org_x_crpyto_ssh_Client_NewSession
相关代码
这里是攻击程序的入口( main_attack )主要有两个攻击模块,一个是 ssh 爆破,另一个式 redis 未授权攻击,与上一个版本一样。
0x3 针对 ksoftirqds 的分析
下面我们来看下 ksoftirqds 这个文件。
通过分析发现其使用的还是 xmr-stak 这个挖矿系统
该项目地址是:
https://github.com/fireice-uk/xmr-stak
通过字符串检索找到其矿池地址,发现矿池已经改变
这里矿池地址为:
sg.minexmr.com:5555
进一步跟入找到其钱包地址
其钱包 id 为:
47eCpELDZBiVoxDT1tBxCX7fFU4kcSTDLTW2FzYTuB1H3yzrKTtXLAVRsBWcsYpfQzfHjHKtQAJshNyTU88LwNY4Q3rHFYA
以下是该钱包账户的收益情况:
0x4 分析总结
1 、相对于之前的 watchdogs, 其加壳方案并没有什么太大的改变,只是对于病毒程序的加固方面进行了一些修改,即将原本的 upx 壳的 magic number 改为了 :4c 53 44 21 。那么相应的应对措施就是,在脱壳之前,将其复原为 55 50 58 21 。
2 、进行 ssh 爆破及 redis 攻击,目的是进行横向病毒传播,扩大挖矿僵尸网络的势力
3 、通过 inotify 监控 /bin 文件目录,发现其并没有删除 netstat 命令,这是与 watchdogs 的区别之一。
4 、 ksofttirqds 程序主要是使用 xmr-stak 挖矿程序挖掘门罗币
5 、通过分析发现,该病毒并没有将 libioset 设置为预加载的动态链接库,相反在这个版本中甚至将 libioset 的路径从 ls.so.preload 中删除。
6 、之前版本是将 watchdog 程序设置为开机启动项,而当前版本是编写了一个名叫 netdns 的脚本将其设置为开机启动项,并作为 kthrotlds 的守护进程。
7 、矿池及钱包地址:
矿池:
sg.minexmr.com:5555
钱包地址:
47eCpELDZBiVoxDT1tBxCX7fFU4kcSTDLTW2FzYTuB1H3yzrKTtXLAVRsBWcsYpfQzfHjHKtQAJshNyTU88LwNY4Q3rHFYA
8 、域名:
http://thyrsi.com ( 未改变 )
https://pastebin.com (未改变)
对应 ip :
104.27.139.223 (未改变)
104.20.209.21 (未改变)
9 、相关 Md5 特征:
da7ee5683fb870bae61e9c4088a661e4
66613e2e4210dce89b562635b769bc21
83e651497c59a14ca8d5abab85565955
4c62c53ae69d8e9290aaccb5ee694716
f1bdc8b12f2ef0279cd265c79bd6fd9e
c7560dd3933774185ce19ddbee5e526c
0x5 加固建议
病毒程序可能是通过利用 redis 未授权漏洞植入,所以请做好 redis 方面的加固。
Redis 未授权漏洞简介: Redis 在默认配置下,会将服务绑定在 0.0.0.0 : 6379 上,即暴露在公网上。如果同时又没有开启相关的认证,就会导致任意用户访问 redis 服务,进行数据库操作,并且通过进一步利用,还可以获得系统权限。
以下是 redis 方面的加固建议:
1. 将修改 redis 配置文件,将服务绑定在本机 127.0.0.1 上。
2. 修改 redis.conf ,设置访问认证,启用密码认证。 3. 在防火墙处指定可访问 redis 服务的 ip 。
4. 修改修改 redis 默认端口。
5. 禁用 config 指令防止恶意操作,这样即使存在未授权访问,也能够给攻击者使用 config 指令加大难度。
6. 使用普通权限运行 redis 服务,这样即使攻击者获得了服务器权限也只是普通用户权限。
0x6 病毒处置办法
1 )默安科技已针对病毒开发自动化清理脚本,脚本地址:
https://github.com/MoreSecLab/DDG_MalWare_Clean_Tool
2)建议使用默安科技哨兵云对全网服务器进行排查 Redis 未授权访问漏洞并进行安全加固,从源头上避免感染病毒。
3)紧急情况下,为避免内网大量传播,可以临时对被感染机器先进行断网隔离处理。
4)不影响业务的情况下,建议临时删除机器上 .ssh/known_hosts 和登录密钥文件。
以上所述就是小编给大家介绍的《kthrotlds挖矿病毒分析报告》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。