Java向けのログパッケージとして広く利用されているApache Log4j上に存在する脆弱性が発見されました。この脆弱性は、細工したログメッセージを送信することで任意のコード実行が可能になります。すでにCVE-2021-44228として採番され、「Log4Shell」という名前が付けられています。この脆弱性は、2021年11月24日にApache上での存在が非公開で報告され、2021年12月9日にLog4jのバージョン2.15.0において、修正パッチが適用されました。この脆弱性は、Log4jのライブラリを使用する広範囲の製品に影響します。この脆弱性については既に12月11日の記事で第一報をお知らせしていますが、本記事ではこの脆弱性を悪用する手法と攻撃事例について報告します。
■ 脆弱性の悪用方法
Java lookupは、${some_expression}が見つかると、expressionの値を見つけて置き換える仕組みとなっています。Log4jがサポートするlookupの場合、JNDI、SYS、ENV、JAVA、LOWER、UPPPERとなっています。そしてJNDI lookupは、LDAP、RMI、DNS、IIOPなどのプロトコルをサポートしています。以下で説明するように、この脆弱性が悪用されると、攻撃者はログにJNDIのexpression値を注入できます。
例えば、攻撃者は、WebサーバへのHTTPリクエストを介してこの注入を実行することができます。実際、これは現時点でトレンドマイクロが確認している最も一般的な攻撃手法となっています。lookupの手法は、攻撃者が管理するLDAPサーバ上の「malicious.class」をダウンロードして実行する際に用いられます。最も基本的な形としては、以下のようなexpressionをログに仕込むだけで実行が可能となります。
そして以下のようなサイト上にある不正なJavaコードが実行可能となります。
- http://{malicious website}/{malicious.class}
■ 報告された攻撃事例
現在のところ、攻撃者がボットネット「Mirai」の亜種やコインマイナー「Kinsing」を脆弱なサーバに投下する攻撃が確認されています。ネットワークトラフィックは単純なものですが、expressionの難読化を用いてトラフィックを隠ぺいする攻撃も確認されています。これらの事例についてこの記事の最後をご参照ください。
■ 感染フロー
以下は、脆弱性Log4Shellを悪用した攻撃の感染フローの一例です。
図1: 想定される脆弱性Log4Shellの感染フロー
侵入経路
この脆弱性は、log4j 2.xのlookup機能を利用します。特定のアプリケーション上でlogメソッドを呼び出す際、log4j 2.xは、formatメソッドを呼び出し、各ログ上の「${」が示す特定の文字をチェックします。これらの文字が存在する場合、lookup機能が呼び出されて、「${」に続く文字列が見つけられ、実際の値がこの文字列に置き換えられます。利用されるlookup機能の中には、変数を取り出すJNDI(Java Naming Directory Interface)など、さまざまな形式が確認されています。
LDAPやRMIのようなremote lookup機能を可能にするため、複数のJNDI lookupプロトコルがサポートされています。ログが文字列「${jndi:logging/context-name}」を含んでいる場合、lookup機能が文字列「jndi:logging/context-name」 を見つけるために呼び出されます。
なお、攻撃者が管理するLDAPサーバ上に不正なJavaクラスが設定される可能性があります。それまでは、lookup機能により、リモートのLDAPサーバ上で不正なクラス(malicious class)が実行されます。
図2:本脆弱性を悪用した文字列の例
不正活動の実行
脆弱性の悪用に成功すると、lookup機能に含まれるURLの内容に応じて、サーバが文字列を解釈します。その結果、Javaクラス、JavaScript、Unixシェルなど、さまざまな形式の任意のシェルコマンドが実行される可能性があります。
水平移動・内部活動
報告された事例では、コンポーネントCobeaconがダウンロードされていることも確認されました。このコンポーネントは、さまざまなランサムウェア攻撃でも確認されていることから、感染後の水平移動や内部活動に利用され、新たなランサムウェアの感染につながる可能性があります。
機密情報へのアクセス
また、この脆弱性を利用して、機密情報を窃取する機能を備えたマルウェアKirabashなどがダウンロードされる可能性もあります。
図3:Kirabashは「/etc/passwd」や「/etc/shadow」といったファイルを送出することで認証情報を窃取する
被害の影響範囲
現時点で確認されているペイロードは、ボットネットMiraiおよびコインマイナーKinsingによるものです。考えられる被害の影響範囲としては、以下の2点が挙げられます。
- リソースがハイジャックされる被害:コインマイナーは、暗号資産のマイニングのために感染端末のリソースを使います。また、ボットネットMiraiは、感染端末をボットネットの一部として利用し、分散型サービス拒否(DDoS)攻撃やスパム送信などの不正活動を行う可能性があります。
- ネットワークサービス拒否(DoS)攻撃による被害:ボットネットMiraiは、被害を受けたシステムを利用して、DDoS/DoS攻撃を不正活動の一部として行うことがあります。
■ 修正パッチの適用と緩和策
今回確認された攻撃は主にHTTPを介して実行されていますが、ユーザがLog4jを利用して記録した入力データにおけるプロトコルを介して脆弱性が悪用される可能性があります。そのため、Log4j 2.15.0へのアップグレードを強く推奨します。なお、脆弱性のあるインスタンスに修正パッチが適用されるまでの間は、以下の手順で脆弱性悪用のリスクを緩和することができます。
- バージョン2.10以降の場合:システムプロパティ「log4j2.formatMsgNoLookups」をtrueに設定してください。
- バージョン2.10以降の場合:環境変数「LOG4J_FORMAT_MSG_NO_LOOKUPS」の値をtrue に設定してください。
- バージョン2.0-beta9から2.10.0の場合:JndiLookup.classを以下のクラスパスから削除しください。
- zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class.
さらに推奨されるベストプラクティスとして、インターネットへのEgressトラフィックを必要なポートからのみに制限することが挙げられます。
なお、前述の手順は、Log4jが直接使用されている場合に最も適用可能である点に留意してください。Log4jが間接的に使用されているアプリケーションから修正パッチの適用が必要な場合もあります。以下のリストが示すように、複数のソフトウェアベンダーにおいて、この脆弱性の影響を受ける製品が存在しています。
■ 検出方法
ご使用のアプリケーションログを監視し、これらのパターンやその難読化されたバージョンの存在を確認する必要があります。
- ${jndi:ldap:/}
- ${jndi:ldaps:/}
- ${jndi:rmi:/}
- ${jndi:dns:/}
- ${jndi:iiop:/}
■ 脆弱性が存在する製品、アプリケーション、プラグイン
脆弱性が存在するバージョンのLog4jを使用していることが確認されたパッケージの一部は、下記のとおりです。ベンダからの詳細情報とともにご確認ください。その他の製品に関しては各ベンダからの情報を確認してください。
製品/アプリケーション/プラグイン | 詳細 | ベンダからの詳細情報 |
RedHat | すべてのRedHatパッケージに脆弱性があるわけではありませんが、OpenshiftおよびJBossパッケージの一部が影響を受けます。 | こちらのサイトをご確認ください。 |
Jenkins | Jenkins Coreはデフォルトでは影響を受けませんが、Jenkinsにインストールされたプラグインは、脆弱なバージョンのLog4Jを使用している可能性があります。なお、インストールされているプラグインの中にLog4Jを使用しているものがあるか確認する方法もあります。2番目のリンクには、この記事を執筆している時点で見つかっているプラグインの脆弱なバージョンのリストが含まれています。 | 以下の2つのサイトをご確認ください。 Log4j in Jenkins Jenkins Comments |
Apache Solr | Apache Solrの7.4以前のリリースが影響を受けます。 | こちらのサイトをご確認ください。 |
VMWare | 複数の製品が対象となります。 | こちらのサイトをご確認ください。 |
Citrix | 調査保留中となります。 | こちらのサイトをご確認ください。 |
Atlassian | Atlassianにおいてデフォルトの設定が変更された場合、脆弱性の影響に受ける可能性があります。 | こちらのサイトをご確認ください。 |
NetApp | 複数の NetApp 製品で脆弱性の影響を受けます。 | こちらのサイトをご確認ください。 |
■ トレンドマイクロのソリューション
トレンドマイクロ製品による保護及び調査方法についてはこちらの記事をご参照ください。Trend Micro Vision OneとCloud Oneにより、Log4Shellの発見・検知・保護がどのように実現されるかは動画(英語)でもご紹介しています。
■ MITRE ATT&CK Tactics and Techniques
■ 侵入の痕跡(Indicators of Compromise、IoC)
侵入の痕跡のリストはこちらから確認できます。
参考記事:
- 「Patch Now: Apache Log4j Vulnerability Called Log4Shell Actively Exploited」
by Ranga Duraisamy, Ashish Verma, Miguel Carlo Ang
翻訳:与那城 務(Core Technology Marketing, Trend Micro Research)
The post Apache Log4jの脆弱性「Log4Shell」を悪用する攻撃手口を解説 first appeared on トレンドマイクロ セキュリティブログ.