单漏洞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 系统架构了解
- 确认应用系统使用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包:
find /path/to/your/application -name "log4j-core-*.jar"常见位置:
- lib/
- WEB-INF/lib/
- App-INF/lib/
-
检查依赖管理文件:
grep -r "log4j-core" /path/to/your/project/source -
容器环境检查:
- 进入容器内部执行文件搜索
- 检查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:
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.classLog4j 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包:
find / -name "log4j-core-*.jar" 2>/dev/null -
检查依赖文件:
grep -r "log4j-core" /path/to/project -
移除JndiLookup类:
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class -
设置系统属性(Java启动参数):
-Dlog4j2.formatMsgNoLookups=true -
设置环境变量:
export LOG4J_FORMAT_MSG_NO_LOOKUPS=true