Log4J漏洞的概述及其方法和对策
脆弱性の概要
Log4Jとは、Apacheが開発するJava用のロギングライブラリ。
Log4Jには、lookupという機能が含まれており、ログ出力時にランタイムに情報を出力することができる。
例として、${java:runtime}という文字列は、Javaのバージョン文字列に置換される。
その中でも、今回原因になったのは、Jndi Lookupである。
Jndi Lookupは、ネットワーク上から値を取得し置換するものである。
使用すると、LDAPのようなディレクトリへアクセスするプロトコルを経由して外部ファイルへのアクセスを実行させることが可能である。
そのため、ネットワーク上にJavaクラスファイルを配置したLDAPサーバーを構築し、URLをLookupの文字列に当てはめ送信するとJava Runtimeでそのプログラムが実行される。
CVE:CVE-2021-44228
JNDI Lookupのドキュメント
技巧
搭建LDAP服务器,并将要执行的类文件放置其中。
然后,将URL匹配如下,并使用Log4J进行输出。
(因为Qiita无法粘贴Java,请使用pastebin)
https://pastebin.com/mEtekHPf
目标系统
バージョン2.0から2.14.1までのLog4Jに影響します。
以下の条件が揃っていると、任意のプログラムを実行することができます。
・攻撃者が任意のデータを送信できるプロトコルを備えたリモートアクセス可能なエンドポイント
・攻撃者がエンドポイントに送信した任意のデータをLog4Jを介して記録すること
请对下述内容进行中文本地化的释义,只需提供一种翻译选项:
Minecraft服务器
Minecraft游戏在客户端和服务器双方都使用了Log4J。
因此,当向Minecraft聊天中发送Lookup的字符串时,可能会在服务器端和其他客户端上执行恶意程序。
网络服务器
例として、フォームで入力された文字列をLog4Jを用いて出力するようにされている場合、フォームにLookupの文字列を送信すると、サーバー側で悪意のあるプログラムが実行されると考えられる。
解决方法 ‘àn)
使用更新后的Log4J
由于Log4j 2.15.0已经实施了防护措施,通过进行更新可以防止利用漏洞的行为。
禁用Lookup功能的JVM参数
如果将-Dlog4j2.formatMsgNoLookups=true作为JVM参数进行设置,将会禁用Lookup操作并且程序将不会执行。
需要注意的是,如果类似于Minecraft服务器这样的客户端也在使用Log4J,那么仅仅在服务器端采取措施是无法阻止客户端执行的。
通过禁用Log4J配置文件中的Lookup机制
若将输出模式设置如下,则禁用了查找功能。可以通过替换jar文件内的配置文件或者在运行时通过类似于-Dlog4j.configurationFile=log4j2.xml的标志指定。
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg{nolookups}%n"/>
Log4j 配置文件的文档
出处和参考来源
最终、最后、最后的结论、最终结尾
如果有任何错误,请在评论中指出,谢谢。