最近看到很多讨论 log4j 的那个 bug ,修复方案很多,但是基本都要动线上服务,我分享一种思路,大伙帮忙看下: 使用 nginx 来拦截指定关键字,不知道这样可行不

最近看到很多讨论 log4j 的那个 bug ,修复方案很多,但是基本都要动线上服务,我分享一种思路,大伙帮忙看下: 使用 nginx 来拦截指定关键字,不知道这样可行不
1 yanqiyu Dec 13, 2021 类似于 WAF ,应该好使,但是你怎么保证你的关键字拦截包含了所有情况? 比如某个后端程序会对请求里面的 base64 字段解码后写日志,这时候关键字不就不好使了 |
3 liuidetmks Dec 13, 2021 有时候,参数是加密的,或者参数是 base64 之后的 ,不同业务甚至叠加了各种 encode |
4 zeni123 Dec 13, 2021 还是得用 java instrumentation ,因为你不知道 你的包的依赖里面藏了一个 log4j |
5 a398058068 Dec 13, 2021 spring boot + lombok 用 @sl4j2 注解 ,切换上层日志框架 基本 0 成本 |
6 BeautifulSoap Dec 13, 2021 拦截不光要拦截 url 还得拦截 post/put 等的 payload 通过车 websocks 的话也要处理 还有上传的文件内容、文件名之类的 |
7 zeni123 Dec 13, 2021 @BeautifulSoap 两个值加起来的这种已有可能成功吧 ,可以用特殊字符 log.info("value is {} and {}", var1,var2); 可能性太多了 |
8 podel Dec 13, 2021 有很多陈年老服务甚至都不维护了。一丁点配置改动都不敢动。 楼主应该说的这种情况。 |
9 xuanbg Dec 13, 2021 拦截肯定不能完全拦住,那就等于没拦。 pom 文件里面指定一下版本再重新打包发布很难吗? |
10 izoabr Dec 13, 2021 没用,都用 WAF 拦都抗不过一会儿一个变种 payload |
12 ikas Dec 14, 2021 如果你的部署没有禁止 mbean 连接,可以使用 mbean 动态修改配置... 1.打开 jconsole,连接你的 app,然后找到 org.apache.logging.log4j2.. 2.找到 操作>getConfigText ,参数填写 utf-8,然后执行获取当前配置,复制配置,修改好 3.找到 操作>setConfigText,参数填写(配置 text,utf-8),然后执行 |
13 fengjianxinghun Dec 14, 2021 甚至二进制文件里带 jndi 。。。。 ``` https://twitter.com/zhuowei/status/1469176410170437634 Zhuowei Zhang @zhuowei ghidra_10.0.2_PUBLIC $ find . -name "*.jar"|grep log ./Ghidra/Framework/Generic/lib/log4j-core-2.12.1.jar ./Ghidra/Framework/Generic/lib/log4j-api-2.12.1.jar ./Ghidra/Features/GhidraServer/data/yajsw-stable-12.12/lib/core/commons/commons-logging-1.1.jar crap 1:25 PM Dec 10, 2021 https://twitter.com/zhuowei/status/1469186818549719042 Zhuowei Zhang @zhuowei Ghidra's vulnerable to log4j: __attribute__((__section__(".note.${jndi:ldap://127.0.0.1:1234/abc}"))) int a = 1; int main(){} $ gcc hello.c $ nc -l 1234 Load into Ghidra; it connects to 127.0.0.1:1234. Ghidra 10.0.2, macOS OpenJDK Corretto 11.0.4.11.1 2:06 PM Dec 10, 2021 ``` |