单漏洞SOP(Log4j漏洞排查、评估、处置、验证)
字数 1973 2025-08-30 06:50:27

Apache Log4j 2远程代码执行漏洞(CVE-2021-44228)全面处置指南

1. 概述与背景

漏洞名称: Log4Shell (CVE-2021-44228)
影响组件: Apache Log4j 2.x (2.0-beta9至2.14.1版本)
漏洞类型: 远程代码执行(RCE)
CVSS评分: 10.0 (最高危)
漏洞原理: 通过JNDI注入实现任意代码执行,攻击者可通过构造特殊日志消息触发漏洞

2. 适用范围

  • 所有使用Java开发且依赖Apache Log4j库的Web应用系统
  • 使用Java的独立服务、批处理程序等
  • 虚拟机、容器、云服务等各种部署环境

3. 前期准备与信息收集

3.1 系统架构了解

  1. 确认应用系统使用Java开发
  2. 识别所有后端服务组件:
    • 中间件(如Tomcat, WebLogic等)
    • API网关
    • 消息队列
  3. 确定部署环境类型:
    • 虚拟机
    • 容器(Docker等)
    • 云服务(AWS, Azure, GCP等)

3.2 文档收集

  1. 依赖管理文件:
    • Maven: pom.xml
    • Gradle: build.gradle
  2. 部署清单和服务器列表
  3. 日志配置文件(log4j2.xml等)

3.3 权限获取

  1. 服务器SSH/远程管理权限
  2. 应用文件目录读权限
  3. 日志文件读权限
  4. WAF和SIEM系统访问权限

4. 漏洞排查流程

4.1 资产发现与版本识别

手动检查方法

  1. 查找Log4j核心JAR包:

    find /path/to/your/application -name "log4j-core-*.jar"
    

    常见位置:

    • lib/
    • WEB-INF/lib/
    • App-INF/lib/
  2. 检查依赖管理文件:

    grep -r "log4j-core" /path/to/your/project/source
    
  3. 容器环境检查:

    • 进入容器内部执行文件搜索
    • 检查Dockerfile中的依赖

版本与漏洞对应关系

Log4j版本 漏洞状态
2.0-beta9至2.14.1 存在RCE漏洞(CVE-2021-44228)
2.15.0 默认配置下缓解RCE,但仍存在DoS漏洞(CVE-2021-45046)
2.16.0 修复DoS漏洞,但仍存在潜在RCE(CVE-2021-44832)
2.17.1+ 安全版本
1.x 不受Log4Shell直接影响,但JMSAppender存在漏洞(CVE-2021-4104)

4.2 漏洞扫描

专业扫描工具

  1. 商业工具:

    • Nessus
    • Qualys
    • OpenVAS
  2. 开源工具:

    • Nuclei
    • Log4j-scan(https://github.com/fullhunt/log4j-scan)

注意: 生产环境使用需谨慎,应在授权和控制环境下进行

4.3 漏洞确认

  1. 版本确认: 低于2.17.1的Log4j 2.x版本均存在风险
  2. 日志分析: 查找攻击尝试痕迹(见附录)
  3. 扫描结果: 专业工具报告的漏洞信息

5. 漏洞处置方案

5.1 即时响应措施

  1. 隔离受影响系统:

    • 从网络隔离受影响服务器
    • 限制出站连接
  2. 临时缓解措施:

    Log4j 2.10至2.14.1:

    • 设置系统属性: log4j2.formatMsgNoLookups=true
    • 或设置环境变量: LOG4J_FORMAT_MSG_NO_LOOKUPS=true

    Log4j 2.0-beta9至2.10.0:

    zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
    

    Log4j 1.x:

    • 禁用或移除JMSAppender
  3. WAF规则更新:

    • 阻止包含jndi:及其变种的请求
    • 更新供应商提供的最新防护规则
    • 添加Spring配置: spring.jndi.ignore=true
  4. 通知相关方:

    • 安全负责人
    • 开发团队
    • 运维团队
    • 业务部门

5.2 长效解决方案

  1. 升级计划:

    • 首选: 升级至Log4j 2.17.1或更高版本
    • 备选: 替换为其他安全日志框架
  2. 修复验证:

    • 重新扫描确认漏洞修复
    • 全面功能测试
  3. 安全强化:

    • 实施最小权限原则
    • 加强安全域管控
    • 持续监控日志和网络流量
    • 定期安全审计和渗透测试
  4. 知识共享:

    • 总结经验教训
    • 开发人员安全培训

6. 附录

附录一: 入侵迹象检查

  1. WAF日志分析:

    • 搜索jndi:ldap, jndi:rmi, jndi:dns等关键字
    • 检查异常User-Agent和HTTP Headers
  2. 应用日志分析:

    • 查找${jndi:ldap:等模式
    • 检查异常外部连接
    • 关注JNDI解析失败错误
  3. 系统日志检查:

    • 异常进程启动(curl, wget等)
    • 异常用户登录或提权行为
  4. 网络流量分析:

    • 异常LDAP/RMI/DNS请求
    • 非预期Shell连接

附录二: 常用命令参考

  1. 查找Log4j JAR包:

    find / -name "log4j-core-*.jar" 2>/dev/null
    
  2. 检查依赖文件:

    grep -r "log4j-core" /path/to/project
    
  3. 移除JndiLookup类:

    zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
    
  4. 设置系统属性(Java启动参数):

    -Dlog4j2.formatMsgNoLookups=true
    
  5. 设置环境变量:

    export LOG4J_FORMAT_MSG_NO_LOOKUPS=true
    
Apache Log4j 2远程代码执行漏洞(CVE-2021-44228)全面处置指南 1. 概述与背景 漏洞名称 : Log4Shell (CVE-2021-44228) 影响组件 : Apache Log4j 2.x (2.0-beta9至2.14.1版本) 漏洞类型 : 远程代码执行(RCE) CVSS评分 : 10.0 (最高危) 漏洞原理 : 通过JNDI注入实现任意代码执行,攻击者可通过构造特殊日志消息触发漏洞 2. 适用范围 所有使用Java开发且依赖Apache Log4j库的Web应用系统 使用Java的独立服务、批处理程序等 虚拟机、容器、云服务等各种部署环境 3. 前期准备与信息收集 3.1 系统架构了解 确认应用系统使用Java开发 识别所有后端服务组件: 中间件(如Tomcat, WebLogic等) API网关 消息队列 确定部署环境类型: 虚拟机 容器(Docker等) 云服务(AWS, Azure, GCP等) 3.2 文档收集 依赖管理文件: Maven: pom.xml Gradle: build.gradle 部署清单和服务器列表 日志配置文件(log4j2.xml等) 3.3 权限获取 服务器SSH/远程管理权限 应用文件目录读权限 日志文件读权限 WAF和SIEM系统访问权限 4. 漏洞排查流程 4.1 资产发现与版本识别 手动检查方法 查找Log4j核心JAR包: 常见位置: lib/ WEB-INF/lib/ App-INF/lib/ 检查依赖管理文件: 容器环境检查: 进入容器内部执行文件搜索 检查Dockerfile中的依赖 版本与漏洞对应关系 | Log4j版本 | 漏洞状态 | |-----------|----------| | 2.0-beta9至2.14.1 | 存在RCE漏洞(CVE-2021-44228) | | 2.15.0 | 默认配置下缓解RCE,但仍存在DoS漏洞(CVE-2021-45046) | | 2.16.0 | 修复DoS漏洞,但仍存在潜在RCE(CVE-2021-44832) | | 2.17.1+ | 安全版本 | | 1.x | 不受Log4Shell直接影响,但JMSAppender存在漏洞(CVE-2021-4104) | 4.2 漏洞扫描 专业扫描工具 商业工具: Nessus Qualys OpenVAS 开源工具: Nuclei Log4j-scan(https://github.com/fullhunt/log4j-scan) 注意 : 生产环境使用需谨慎,应在授权和控制环境下进行 4.3 漏洞确认 版本确认: 低于2.17.1的Log4j 2.x版本均存在风险 日志分析: 查找攻击尝试痕迹(见附录) 扫描结果: 专业工具报告的漏洞信息 5. 漏洞处置方案 5.1 即时响应措施 隔离受影响系统 : 从网络隔离受影响服务器 限制出站连接 临时缓解措施 : Log4j 2.10至2.14.1 : 设置系统属性: log4j2.formatMsgNoLookups=true 或设置环境变量: LOG4J_FORMAT_MSG_NO_LOOKUPS=true Log4j 2.0-beta9至2.10.0 : Log4j 1.x : 禁用或移除JMSAppender WAF规则更新 : 阻止包含 jndi: 及其变种的请求 更新供应商提供的最新防护规则 添加Spring配置: spring.jndi.ignore=true 通知相关方 : 安全负责人 开发团队 运维团队 业务部门 5.2 长效解决方案 升级计划 : 首选: 升级至Log4j 2.17.1或更高版本 备选: 替换为其他安全日志框架 修复验证 : 重新扫描确认漏洞修复 全面功能测试 安全强化 : 实施最小权限原则 加强安全域管控 持续监控日志和网络流量 定期安全审计和渗透测试 知识共享 : 总结经验教训 开发人员安全培训 6. 附录 附录一: 入侵迹象检查 WAF日志分析 : 搜索 jndi:ldap , jndi:rmi , jndi:dns 等关键字 检查异常User-Agent和HTTP Headers 应用日志分析 : 查找 ${jndi:ldap: 等模式 检查异常外部连接 关注JNDI解析失败错误 系统日志检查 : 异常进程启动(curl, wget等) 异常用户登录或提权行为 网络流量分析 : 异常LDAP/RMI/DNS请求 非预期Shell连接 附录二: 常用命令参考 查找Log4j JAR包: 检查依赖文件: 移除JndiLookup类: 设置系统属性(Java启动参数): 设置环境变量: