为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓
- 01 事件背景介绍
- 02 定位挖矿主机
- 03 挖矿主机分析
- 04 入侵路径梳理
- 05 安全加固建议
01 事件背景介绍
某单位被上级单位通报,单位的出口IP和境外IP有异常通信行为,要求进行紧急处置。
02 定位挖矿主机
由于通报的是出口IP,确认究竟是内网哪台主机中招了,是我们下一步的重点。 若内网安全设备完善的情况下,一般可以去安全设备上查看告警日志定位问题主机。就算没有安全设备,也可以尝试在出口服务器或者出口路由器等设备上进行端口镜像和流量抓包定位具体主机。
但进一步了解后发现,单位出口IP下挂了上千台设备,又没有安全设备,这个时候即使是在出口设备人工抓包分析,也是很难准确定位到挖矿主机的。
那在这种情况下,涉事单位租借了安全设备进行挖矿主机的定位,一段时候后通过安全设备了解到内网DNS服务器有触发挖矿病毒告警事件。但目前不能明确判断就是DNS服务器被植入了挖矿病毒。
因为有可能是单位域内的DNS服务器向上级DNS服务器请求恶意的DNS地址,这时候不一定是域内的这台DNS服务器中招了,可能是内部的主机向域内DNS请求的这台中招了,这时候就要通过DNS日志进行定位。
实际情况中,基本DNS服务器是不会开启DNS解析日志的,如果在实际中确实是遇到了它是DNS服务器的情况,又不方便抓包的话,可以去找到路径开启日志记录,去监控一个周期,一天或者几个小时,看看日志里面有没有出现相关的恶意域名信息,然后去找到对应的受害主机。
而后通过DNS日志,明确内网存在数十台主机向DNS服务器请求恶意域名信息。选取其中一台主机进行具体分析。
03 挖矿主机分析
使⽤top等命令查看进程,未发现占⽤CPU过⾼的进程,怀疑攻击者使⽤了进程隐藏技术。
判断攻击者是否使用mount bind:X
我们知道ps、top等工具会读取/proc目录下获取进程信息,如果将进程ID的目录信息覆盖,则原来的进程信息将从ps的输出结果中隐匿。
使用cat /proc/$$/mountinfo 或者cat /proc/mounts 查看是否有利用mount -bind 将其它目录或文件挂载至/proc下的进程目录的情况,发现没有异常情况。
判断攻击者是否替换操作系统命令:X
攻击者可能通过替换系统中常见的进程查看工具(比如ps、top、lsof)的二进制程序,来实现进程隐藏。
使用stat命令查看文件状态并且使用md5sum命令查看文件hash,从干净的系统上拷贝这些工具的备份至当前系统,对比hash后发现一致,排除攻击者替换操作系统命令的可能性。
判断攻击者是否进行动态链接器劫持:✔
检查系统的 LD_PRELOAD 环境变量以及 /etc/ld.so.preload ⽂件,确认是否使⽤了动态链接器劫持的⼿法对进程实现隐藏。发现了异常的动态链接库⽂件"/etc/libsystem.so"
指定LD_PRELOAD取消加载异常的动态链接库⽂件"/etc/libsystem.so"后,使⽤busybox执⾏top命令,成功发现挖矿进程,对应的挖矿程序为“/tmp/kdevtmpfsi”:
查看挖矿程序时间信息,发现明显晚于通报时间,猜测挖矿程序进⾏了⾃更新等
同样使⽤busybox,发现挖矿⽊⻢守护程序 “/etc/kinsing” ,落地时间早于挖矿程序
检查系统的定时任务,包括/etc/cron.d/、/etc/crontab等⽬录以及⽂件,发现 “/var/spool/cron/root” ⽂件存在异常定时任务,⽂件修改时间早于挖矿程序时间
检查cron⽇志,发现执⾏的定期任务发⽣过改变,猜测是挖矿⽊⻢进⾏过版本更新。
再检查挖矿⽊⻢是否采⽤了开机启动的⽅式进⾏持久化,按时间对systemd系统的相关⽬录进⾏时间排序,发现异常⾃启动项bot.service,⽤于启动挖矿⽊⻢守护程序。修改时间为晚于挖矿⽊⻢守护程序落地时间。
查看/var/log/secure日志,发现存在大量某内网主机发起的SSH登录请求,且存在成功登录的记录。查看其余几台挖矿主机,发现相同时间节点前后也存在相关登录爆破日志,爆破时间早于挖矿⽊⻢守护程序落地时间。(下图为网络上类似SSH爆破日志截图)
对⼿头的信息以时间为主线进⾏整理,攻击者在内网进行SSH弱口令扫描,对存在弱口令的主机植入/etc/kinsing程序,挖矿⽊⻢守护程序落地后后,创建了/etc/libsystem.so进行动态链接器劫持,接着挖矿⽊⻢守护程序开启启动⽂件进行后门维持,创建定时任务远程下载挖矿程序,挖矿程序落地后向境外矿池IP发起请求,触发通报。
04 入侵路径梳理
通过上述分析,已明确内网存在某主机向同网段主机发起SSH弱口令扫描,现到该主机上进行入侵痕迹排查,排查发现:
该台主机的80、9999端⼝对公网开放。查看端⼝信息,发现80端⼝对应nginx服务,9999端⼝对应xxl-job执⾏器进程。
进一步查看nginx⽇志,分析发现存在对xxl-job的目录扫描行为。
结合上述端口开放情况以及Nginx日志记录,猜测攻击者有可能使⽤了xxl-job的远程命令执⾏漏洞获取服务器权限,于是进行漏洞验证。
向客户端发送如下数据包,尝试创建success文件:
POST /run HTTP/1.1
Host: xx.xx.xx.xx:9999
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Connection: close
Content-Type: application/json
Content-Length: 365
{
"jobId": 1,
"executorHandler": "demoJobHandler",
"executorParams": "demoJobHandler",
"executorBlockStrategy": "COVER_EARLY",
"executorTimeout": 0,
"logId": 1,
"logDateTime": 1586629003729,
"glueType": "GLUE_SHELL",
"glueSource": "touch /tmp/success",
"glueUpdatetime": 1586699003758,
"broadcastIndex": 0,
"broadcastTotal": 0
}
touch /tmp/success已成功执行,success文件已成功落地服务器
由此可以证实,攻击者确实是直接利⽤xxl-job执⾏器的9999端⼝的未授权远程命令执⾏漏洞植⼊了挖矿⽊⻢。并且上传了弱口令扫描工具对同网段进行SSH弱口令扫描,对存在弱口令的主机扩散挖矿守护进程。
05 安全加固建议
1、配置XXL-JOB executor认证,防止未授权的攻击者通过RESTful API执行任意命令。
2、及时清除病毒程序创建的定时任务、系统启动项,禁用挖矿守护进程以及清理挖矿程序文件。
3、及时修改内网存在的弱口令,确保密码强度符合要求,建议大小写字母+数字+特殊字符+8位以上。