linux以及docker挖矿木马应急响应

本文最后更新于:2024年1月7日 晚上

模拟背景:某个服务器被攻击,攻击特征为服务器cpu利用率非常高,服务器很卡,怀疑被挖矿。

linux

  1. 使用top命令查看主机运行状态
1
top

发现某个进程cpu占有率很高,pid为xxxx

  1. 查看进程详细信息
1
2
ps -ef | grep xxxx
ps aux #查看所有进程信息
  1. 查看进程在哪个目录
1
ll /proc/xxxx
  1. 进入进程目录,查看配置信息
1
2
cd [目录路径]
cat config.json

如果是挖矿木马基本上可以在配置文件中发现一个网站,其中包含一个挖矿的地址。可以通过微步情报等平台进行查询。

  1. 查看主机的连接情况
1
netstat -antp

可以看到本地主机连接端口和外部ip以及连接状态。定位恶意ip进程。

  1. 杀死未授权进程
1
kill -9 xxxx
  1. 删除对应文件
1
rm -rf 文件名

及时隔离主机,阻断可以通信。防止受害主机对局域网下的其他主机先进性横向渗透

  1. 清除计划任务。大部分病毒或后门文件都会写入到计划任务中实现持久运行
1
crontab -l #查看计划任务
  1. 清除启动项。除了计划任务,挖矿木马通过添加启动项同样能实现持久化
1
2
systemctl list-unit-files #查看自启动列表
cat /etc/init.d/ #查看开机自启动项目录

​ 过滤出所有的开机启动的项目

1
systemctl list-unit-files |grep enabled

​ 关闭服务

1
systemctl disable 服务名
  1. 异常用户分析与排查
  2. 登录分析 - 筛选异常登录
1
2
cat /etc/passwd
last -i | grep -v 0.0.0.0 #筛选非本地登录
  1. 历史执行命令排查
  2. 异常$PATH排查
  3. Linux后门自动排查
  4. 排查/tmp文件

安全加固:

1、根据相关日志寻找挖矿病毒是如何进入主机的,将漏洞进行修补。

linux系统日志在/var/log目录下

尽量使用less这种不需要读取全部文件的指令,因为在线上执行cat是一件非常危险的事情,这可能导致线上服务器资源不足。

Apache的访问日志目录在其配置文件中已经定义好了,CentOS中apache的配置文件位置为/etc/httpd/conf/httpd.conf,默认的访问日志存放在/var/log/httpd/access_log

2、安装安全软件并升级病毒库,定期全盘扫描,保持实时防护;

3、及时更新 Linux安全补丁,开启防火墙临时关闭端口;

4、及时更新web漏洞补丁,升级web组件。

Docker

当网络流量监控发现某台运行多个docker容器的主机主动连接到一个疑似挖矿矿池的地址时,需要快速响应和排查,以阻止进一步的损害。

  1. 定位容器

在宿主机上通过netstat -an 是看不到容器内的网络连接的,而一台台进入容器查看网络连接,排查效率很慢。宿主机上的容器都是通过dokcer0进行通信的,因此,可以通过tcpdump找到异常网络连接的容器IP地址,然后进一步关联到容器。

tcpdump抓包定位容器ip地址

1
tcpdump -i docker0 dst host xx.xx.xx.xx -v

获取所有容器名称及其ip地址,定位到容器

1
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq) |grep xx.xx.xx.xx

这里xx.xx.xx.xx是与恶意ip建立网络连接的容器

进入容器network namespace进行确认,找到异常的网络连接地址。

1
2
3
4
5
6
#获取容器PID
docker inspect -f '{{.State.Pid}}' <containerId>
#进入容器的network namespace
nsenter -n -t pid
# 验证是否进入容器的network namespace
netstat -an|grep xx.xx.xx.xx

进入容器,找到挖矿程序的进程,恶意脚本路径为xmrig.sh

1
ps aux

我们需要进一步确认的是挖矿程序时在容器运行过程中被植入了,还是镜像文件中已经存在挖矿程序。

使用docker diff命令查看容器内文件状态变化,未找到xmrig.sh

1
docker diff serene_lamport | grep .sh

通过docker inspect 快速定位镜像文件系统在宿主机上对应的目录,从镜像中提取恶意文件进行对比,以确认入侵的源头为恶意镜像。

1
docker inspect --format={{}}

镜像分析

追溯镜像的来源,解析Dockerfile文件是关键步骤。

使用docker history 命令查看指定镜像的创建历史,加上 --no-trunc,就可以看到全部信息。

使用dfimage从镜像中提取 Dockerfile,在这里可以清晰地看到恶意镜像构建的过程,找到恶意挖矿程序的样本

问题处理

(1)查找恶意镜像关联的容器

1
docker ps -a|grep <IMAGE_NAME>

删除相关容器或镜像

1
2
docker rm -f  <containerId>
docker rmi <IMAGE_NAME>

linux以及docker挖矿木马应急响应
https://jsweetcoffee.github.io/posts/226c5eba.html
作者
SCxiaoyun
发布于
2023年9月20日
许可协议