【翻译】如何反制Empire C2攻击
字数 1819 2025-08-23 18:31:34

Empire C2 攻击反制技术详解

0X00 前言

Empire C2 Framework (<5.9.3版本)存在多个安全漏洞,攻击者可利用这些漏洞获取C2服务器的root权限。本文详细分析这些漏洞的利用方式,并为攻防团队提供防御建议。

0X01 Empire漏洞概述

Empire框架存在目录遍历漏洞的历史根源可追溯到@zeroSteiner发现的Skywalker漏洞。虽然后续版本修复了这些问题,但由于基础架构变更,路径遍历漏洞在后续版本中重新出现。

0X02 Stagers载荷分析

Empire提供的预生成启动器包含两个关键信息:

  1. 分发密钥:用于代理认证
  2. C2服务器URL

任何拥有分发密钥的实体都可以伪装成合法代理注册到监听器。

0X03 Stagers载荷分发流程

Empire启动器通过三个阶段引导代理:

STAGE0

  • 目的:减小启动器体积
  • 功能:加载第二阶段必需的数据包处理、加密和引导类
  • 对攻击者:此阶段不必要

STAGE1

  • 功能:请求第二阶段并建立新会话密钥
  • 关键点:攻击者可在此阶段指定任意8字节长的会话ID

STAGE2

  • 功能:发送系统信息并获取主代理类
  • 关键点:代理收集用户和操作系统信息并用新会话密钥加密

0X04 Empire任务分配机制

Empire的任务类型包括:

  • TASK_SYSINFO:更新代理宿主信息
  • TASK_SHELL:执行shell命令
  • TASK_UPLOAD:上传文件到受害者系统
  • TASK_DOWNLOAD:从受害者系统下载文件

重要发现:服务器处理响应不要求存在任务分配,攻击者可通过发送未经请求的"响应"强制服务器处理任务数据。

0X05 目录穿越漏洞(方式一)

漏洞位置

TASK_DOWNLOAD任务处理路径

利用条件

  1. 攻击者可控制会话ID(STAGE1阶段指定)
  2. 服务器未对会话ID进行清洗

利用方法

将会话ID设置为./../../,服务器会将其追加到下载目录路径:
/<安装路径>/empire/server/downloads/

影响

可覆盖downloads目录上方一级或两级的文件,如:

  • empire/server/server.py:可被后门覆盖
  • empire/server/config.yml:可修改下载目录为root

限制

需要服务器重启才能使修改生效

0X06 Skywalker检测绕过技术

原始检测逻辑

safe_path = download_dir.absolute()
if not str(save_file.absolute()).startswith(str(safe_path)):
    # 检测到Skywalker利用

绕过原理

  1. absolute()方法不规范化路径,仅解析相对路径
  2. 路径不以/开头时,路径遍历仍能满足startswith()条件

0X07 目录穿越漏洞(方式二)

漏洞位置

save_module_file()函数,由以下任务类型调用:

  • TASK_CMD_WAIT_SAVE
  • TASK_CMD_JOB_SAVE

利用方法

  1. 通过STAGE2响应控制主机名(无长度限制)
  2. 构造特殊文件名实现路径穿越:
    • 15字节前缀:用于目录穿越
    • 5字节扩展名:用于额外穿越(如/../a

具体步骤

  1. 设置主机名为穿越路径
  2. 创建特殊文件名:_2024-02-09_16-25-32.aaaaa
  3. 利用扩展名进行额外穿越(如设置为/../a
  4. 在同一秒内发送第二个请求绕过目录创建错误

0X08 防御建议

攻击方防护措施

  1. 基础设施隔离

    • 阻止超出范围IP访问监听器
    • 为不同任务搭建独立基础设施
    • 实施安全边界隔离
  2. 密钥管理

    • 每次行动后更换代理/植入物密钥
    • 特别是分发和会话密钥
  3. 监控与响应

    • 实施C2基础设施监控
    • 制定快速隔离受损C2服务器的计划
    • 行动后彻底销毁C2服务器和窃取数据
  4. 日志管理

    • 将日志与C2服务器分开存储
    • 监控关键日志来源:
      • C2服务器(teamserver)日志
      • 认证日志(auth.log)
      • Web服务器或文件服务器日志

防御方检测措施

  1. 文件监控

    • 监控C2框架文件的异常修改
    • 关注服务工作目录中的文件变更
  2. 日志分析

    • 保留并分析Web访问和服务日志
    • 查找路径穿越字符串特征
  3. 服务监控

    • 识别定期运行的脚本和可执行文件
    • 监控这些文件的异常修改

总结

Empire C2框架(<5.9.3)存在严重的目录遍历漏洞,攻击者可利用这些漏洞获取服务器控制权。通过理解这些漏洞的利用机制,攻防双方都能更好地保护自身安全。BC Security已在Empire v5.9.3中修复了这些漏洞,建议所有用户尽快升级。

Empire C2 攻击反制技术详解 0X00 前言 Empire C2 Framework ( <5.9.3版本)存在多个安全漏洞,攻击者可利用这些漏洞获取C2服务器的root权限。本文详细分析这些漏洞的利用方式,并为攻防团队提供防御建议。 0X01 Empire漏洞概述 Empire框架存在目录遍历漏洞的历史根源可追溯到@zeroSteiner发现的Skywalker漏洞。虽然后续版本修复了这些问题,但由于基础架构变更,路径遍历漏洞在后续版本中重新出现。 0X02 Stagers载荷分析 Empire提供的预生成启动器包含两个关键信息: 分发密钥:用于代理认证 C2服务器URL 任何拥有分发密钥的实体都可以伪装成合法代理注册到监听器。 0X03 Stagers载荷分发流程 Empire启动器通过三个阶段引导代理: STAGE0 目的:减小启动器体积 功能:加载第二阶段必需的数据包处理、加密和引导类 对攻击者:此阶段不必要 STAGE1 功能:请求第二阶段并建立新会话密钥 关键点:攻击者可在此阶段指定任意8字节长的会话ID STAGE2 功能:发送系统信息并获取主代理类 关键点:代理收集用户和操作系统信息并用新会话密钥加密 0X04 Empire任务分配机制 Empire的任务类型包括: TASK_ SYSINFO:更新代理宿主信息 TASK_ SHELL:执行shell命令 TASK_ UPLOAD:上传文件到受害者系统 TASK_ DOWNLOAD:从受害者系统下载文件 重要发现 :服务器处理响应不要求存在任务分配,攻击者可通过发送未经请求的"响应"强制服务器处理任务数据。 0X05 目录穿越漏洞(方式一) 漏洞位置 TASK_ DOWNLOAD任务处理路径 利用条件 攻击者可控制会话ID(STAGE1阶段指定) 服务器未对会话ID进行清洗 利用方法 将会话ID设置为 ./../../ ,服务器会将其追加到下载目录路径: /<安装路径>/empire/server/downloads/ 影响 可覆盖downloads目录上方一级或两级的文件,如: empire/server/server.py :可被后门覆盖 empire/server/config.yml :可修改下载目录为root 限制 需要服务器重启才能使修改生效 0X06 Skywalker检测绕过技术 原始检测逻辑 绕过原理 absolute() 方法不规范化路径,仅解析相对路径 路径不以 / 开头时,路径遍历仍能满足 startswith() 条件 0X07 目录穿越漏洞(方式二) 漏洞位置 save_module_file() 函数,由以下任务类型调用: TASK_ CMD_ WAIT_ SAVE TASK_ CMD_ JOB_ SAVE 利用方法 通过STAGE2响应控制主机名(无长度限制) 构造特殊文件名实现路径穿越: 15字节前缀:用于目录穿越 5字节扩展名:用于额外穿越(如 /../a ) 具体步骤 设置主机名为穿越路径 创建特殊文件名: _2024-02-09_16-25-32.aaaaa 利用扩展名进行额外穿越(如设置为 /../a ) 在同一秒内发送第二个请求绕过目录创建错误 0X08 防御建议 攻击方防护措施 基础设施隔离 阻止超出范围IP访问监听器 为不同任务搭建独立基础设施 实施安全边界隔离 密钥管理 每次行动后更换代理/植入物密钥 特别是分发和会话密钥 监控与响应 实施C2基础设施监控 制定快速隔离受损C2服务器的计划 行动后彻底销毁C2服务器和窃取数据 日志管理 将日志与C2服务器分开存储 监控关键日志来源: C2服务器(teamserver)日志 认证日志(auth.log) Web服务器或文件服务器日志 防御方检测措施 文件监控 监控C2框架文件的异常修改 关注服务工作目录中的文件变更 日志分析 保留并分析Web访问和服务日志 查找路径穿越字符串特征 服务监控 识别定期运行的脚本和可执行文件 监控这些文件的异常修改 总结 Empire C2框架( <5.9.3)存在严重的目录遍历漏洞,攻击者可利用这些漏洞获取服务器控制权。通过理解这些漏洞的利用机制,攻防双方都能更好地保护自身安全。BC Security已在Empire v5.9.3中修复了这些漏洞,建议所有用户尽快升级。