log4j有意思的一些点
针对Log4j漏洞的总结,以及看到一些有意思的点分享一下。
ps:本来计划周五晚上发,实在太累,周六才发。
1、临时缓解方式
周四晚上应急完后,发了个朋友圈。
昨天晚上验证方法未经自己验证,复制的各大产商给的方案。今日验证后,发现有错误,包括今天有产商发的文章依旧是错误的。
- 首先区分版本,2.10以下版本中环境变量方法是无效的。
- 2.10以上版本,系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为true,这个是无效的(不信的朋友自行验证)。LOG4J_FORMAT_MSG_NO_LOOKUPS这个环境变量才是有效的。
同时禁用lookup功能,(1)jvm参数 -Dlog4j2.formatMsgNoLookups=true 是有效的, (2)代码加载log4j2.formatMsgNoLookups=True 也是有效的。
对于研发同学添加缓解措施,使用环境变量方法,然后重启进程是最快速,对业务影响最小的,毕竟都有HA的么。jvm添加启动参数,有些代码是封装的,对于有些不想修改代码的朋友,建议还是使用环境变量。
不担心稳定性的环境中,升级rc1版本、rc2版本也是可行的。
另外说到禁用lookup,那么可以将log4j-core的jar包中相关内容删除掉也是可以的,尤其是jddilookup.其他的lookup也是可以调用的,只是目前没有有效攻击方式。
2、验证环境
centos,jdk1.8我已经验证了。
本地nc -l 1234,启动1234端口,然后java -jar log4j-test-lcamry.jar。
从nc端可以看到数据输入就说明payload攻击成功。
然后可以修改环境变量进行测试了。
log4j-test-lcamry.jar链接: https://pan.baidu.com/s/1rY4H_-ZFJLsmr-HHurB7UQ 提取码: hi67
3、利用waf可被绕过的变形payload
除了禁用lookup方法之外,很多甲方的朋友应该是利用waf进行拦截,那么大部分的还是针对${jndi:写的payload,那么此时可利用
${${abc:-j}${abc:-ndi}:
进行绕过。
需要更新一下waf规则。
正则匹配的请速度更新,注意regddos的问题。此处如果利用语义/机器学习等作为检测,其实是有一定好的效果的。
4、反制逆向工程师
ghidra,一款优秀的逆向工具,同样的利用log4j的模块。如果是某个逆向的文件,里面包含了${jndi:的paylaod,也能引起触发相关的恶意请求。
那么这个东西有什么用,是不是就可以用来对逆向工程师做反制了。不知道后面蜜罐产商们会不会增加这个。当然利用jsonP也是很有效的方式。
5、大量调用log4j的其他工具
下面是个lisi,我没有挨个去研究,复制的别人的(可能有误)
- Apache Struts2
- Apache Solr
- Apache Druid
- Apache Flink
- ElasticSearch
- flume
- dubbo
- Redis
- logstash
- kafka
未来一段时间内,会有调用log4j的中间件/服务都会暴露出利用手段,还是需要持续关注。
6、黑产也在利用该攻击方式
僵尸网络、勒索软件已经开始利用该payload(早上看到360发的一篇文章、还有teapot发的,可以看看很有意思,我这里就不贴了),甚至自动化攻击的恶意软件也不是没有可能,后续危害才刚刚开始.
7,甲方该如何应对
我们从应急的角度上已经基本结束(waf、业务方修复等),那么接下来从检测,防御角度上还是要有更进一步的深入。
例如DNS的恶意利用(dnslog、dns隧道等等)的深入检测以及防御,检测可以有规则OR模型,防御可以有dns污染等。具体的手段私下探讨了。
利用ldap、rmi进行命令执行,随着更多使用log4j的中间件/程序出现,会有更多的cc链使用新增(参考历史上各大反序列化漏洞),那么如何深入的检测也是未来需要做的。
我们经常聊得构建纵深防御体系,那么此时将会发挥重要作用的时候来了。甲方的朋友们可以深入研究起来了。