Amazon Web Services ブログ
Apache Log4j のためのホットパッチ
※この投稿は、2021年12月12日に公開された Hotpatch for Apache Log4j翻訳したものです。
CVE-2021-44228 により、広く使用されているオープンソースのロギングプラットフォームである Apache Log4j の脆弱性にパッチを適用、もしくは脆弱性の緩和のために忙しい週末を過ごされた方も多いかと思います。
影響を受けるアプリケーションを実行しているお客様は、この脆弱性に対処するために、Log4j をバージョン 2.15 にアップグレードすることをお勧めします。しかし、これは必ずしも迅速に実行できるとは限らないため、Corretto チームのメンバーは、脆弱な log4j デプロイメントをホットパッチするためのツールの構築に取り組みました。このツールは、Log4j 2.0以降を使用している実行中のJVMにホットパッチを適用するように設計されています。このツールはべき等性を考慮しています。つまり、最初の実行結果を変更することなく、同じ JVM で複数回実行できます。また、このツールは実行中のすべての JVM を探し、脆弱性の緩和を試みます。これを使用して、log4j を依存関係として含む共有された jar にパッチを適用したり、クラスパス上の複数の log4j インスタンスにパッチを適用したりすることもできます。
どのように機能しますか?
このツールは、実行中のJVM プロセスにJava エージェントを挿入します。エージェントは、ロードされたすべての org.apache.logging.log4j.core.lookup.JndiLookup
インスタンスの lookup()
メソッドにパッチを適用して、“Patched JndiLookup::lookup()”という文字列を無条件に返すようにします。これは、Java プロセスを再起動せずにLog4j の CVE-2021-44228リモートコード実行の脆弱性に対処するために設計されています。
Java プロセスを再デプロイする可能性がある場合は、Java プロセスを静的なエージェントとして使用することもできます。つまり、サーバーに直接ログインしなくても、このパッチをランタイムに含めることができます。これらの動作モードはいずれもREADMEで説明しています。
どこから入手できますか?
このツールは現在、GitHub で利用可能になっています。
注意事項
すべてのオープンソースソフトウェアと同様に、これは自己責任で使用してください。ホットパッチはLinux 上のJDK8 とJDK11 でテストされていることに注意してください。JDK17 では、静的エージェントモードのみが機能します。注意事項の完全なリストはREADME にあります。
結論
この脆弱性は深刻で、Apache Log4j が広く採用されているため、その影響は大きくなります。この脆弱性を確認し、パッチを適用、または軽減することを強くお勧めします。このツールは、すぐに更新できない場合のリスクを軽減するのに役立ちます。
最後に、このコードを書き、強化し、お客様にお届けするために日夜、週末を過ごしてくれたCorrettoチームに感謝します。
この記事の翻訳は、ソリューションアーキテクトの金森 政雄が担当しました。