Cisco Japan Blog

Watchbog とパッチ適用の重要性

1 min read



概要

Cisco Incident Response(CSIRS)は最近、Watchbog クリプトマイニングpopup_icon ボットネットに関するインシデントに対応しました。問題の攻撃では、標的のシステムで CVE-2018-1000861popup_icon をエクスプロイトすることにより、Watchbogpopup_icon マルウェアをインストールする手口が使われています。

Watchbog は Linux ベースのマルウェアで、コマンド アンド コントロール(C2)に Pastebin を多用し、公然と攻撃を仕掛けていました。CSIRS では多様な Pastebin の亜種を分析することで、あるお客様のネットワークが受けた攻撃の目的と能力を正確に把握できました。調査では、侵害されたホストに残されたアーティファクトから複数の「ペースト」(Pastebin に保存されたテキスト データ)を特定し、解読できています。

base64 エンコーディング URL や Pastebin などの難読化手法も使われていましたが、特段強力な隠匿手口が使われていなかったこともあり、攻撃は比較的簡単に発見されました。

Watchbog の攻撃者は、「本物のハッカーからの攻撃を受ける前に脆弱性を探してエクスプロイトすることで組織を支援する」サービスを提供していると主張しています。しかし調査中に、Watchbog アクティビティとちょうど重なるタイミングでホストが別のボットネットの一部になる兆候が見られました。この点から、攻撃者が善意のサービスを実際に提供しているかは甚だ疑問だと言えます。以下は、侵害されたシステムで攻撃者により残されたメッセージです。

Watchbog の動作

Watchbog ボットネットは、攻撃者の利益のために暗号通貨「Monero」をマイニングします。Watchbog の亜種の調査では、Watchbog に関する分析情報を提供する Alibaba クラウド セキュリティの記事popup_iconを見つけました。この記事の内容は、次のアクティビティを実行するインストール スクリプトを検出したときの調査結果と一致する内容でした。

インストール スクリプトは最初に、他の暗号通貨マイナーが実行中でないかプロセスを検査します。システムで他の暗号通貨マイナーがすでに実行されている場合、kill コマンドを使用してそれらのプロセスを終了させます。

 

次に、ファイル システムの各ディレクトリに書き込めるか、touch コマンドを使用して判断します。 

システムのアーキテクチャをチェックして、実行している OS が 32 ビットか 64 ビットかを判断します。次に wget または curl コマンドを使用して「kerberodspopup_icon」ドロッパーのダウンロードとインストールを 3 回試します。

権限に応じて、kerberods ドロッパーが次のいずれかのディレクトリに保存されます。

  • 現在の作業ディレクトリ
  • /usr/bin
  • /usr/libexec
  • /usr/local/bin
  • /tmp
  • /usr/sbin

このスクリプトでは、Monero ウォレット ID とマイニング情報が含まれる Pastebin URL からテキスト情報も取得します。CSIRS がこのウォレット ID を確認したところ、Alibaba クラウドの記事が指摘する攻撃者が使用していたものと同じであることが判明しました。

上のスクリーンショットの Pastebin URL にはもはやアクセスできませんが、感染プロセスの次のステップは暗号通貨マイナーをダウンロードすることです。GitHub にアクセスして XMR-Stakpopup_icon Monero マイナーをインストールするために、「kerberods」で実行された可能性のあるスクリプトを突き止めました。

スクリプトの中心機能は、「watchbog」と呼ばれるプロセスが実行されているかどうかを確認することです。

「watchbog」プロセスが検出されない場合は、「testa」または「download」関数が呼び出され、ホスト OS およびアーキテクチャと互換性のあるマイナーがインストールされます。その後、マイナーが実行されてマイニング プロセスが開始されます。

「testa」関数

前述したように、感染プロセスを強化するために「testa」関数が呼び出される場合があります。以下はこの関数に関連付けられているコードです。このコードは、マイニング ソフトウェアで使用されているさまざまな設定データを書き込みます。この関数は 3 つの変数を宣言し、base64 でエンコードされたデータをそれぞれの変数に割り当てます。

base64 でエンコードされたデータは復号され、さまざまなファイルに書き込まれます。

base64 でエンコードされた値には次の役割があります。

 

  • St_64:この変数には、XMR-Stak マイニング クライアントをホストする Github リポジトリの URL が含まれます。
  • hXXps://github[.]com/fireice-uk/xmr-stak/releases/download/2.10.3/xmr-stak-linux-2.10.3-cpu.tar.xz

 

  • con_url:この変数には、マイニング クライアントの設定ファイルをホストするために使用される Pastebin URL が含まれます。
  • hXXps://pastebin[.]com/raw/YJH8sWr

 

  • Cpu_url:この変数には追加の Pastebin URL が含まれます。調査中に Pastebin URL にアクセスできなくなりました。この URL には、マイニング クライアントが使用する追加の設定ファイルが含まれていた可能性があります。
  • hXXps://pastebin[.]com/raw/irzk5mSh

 

  • poo_url:この変数には追加の Pastebin URL が含まれます。調査中に Pastebin URL にアクセスできなくなりました。この URL には、マイニング クライアントが使用する追加の設定ファイルが含まれていた可能性があります。
  • hXXps://pastebin[.]com/raw/aJkbTx6Y

次に、スクリプトで Watchbog プロセスを開始し、エンコードされた Pastebins をテキスト ファイルとしてダウンロードして実行権限を付与した後、テキスト ファイルを削除します。次のスクリーンショットは、「testa」関数の con_url 変数によって参照される設定ファイルです。

「download」関数

次のコードは、前述のインストール スクリプトで参照される「download」関数に関連します。「testa」関数と同様に、この関数では、base64 でエンコードされたデータが割り当てられた 3 つの変数が宣言されています。

これらの base64 でエンコードされた文字列には次の役割があります。

  • mi_64:この変数には、XMrig monero マイニング クライアントをホストする Github の URL が含まれます。
  • hXXps://github[.]com/xmrig/xmrig/releases/download/v2.14.1/xmrig-2.14.1-xenial-x64.tar.gz

 

  • mi_32:この変数には Pixeldrain の URL が含まれます。ただし調査中に、この URL にアクセスできなくなりました。
  • hXXps://pixeldrain[.]com/api/file/ZuVWceWG

 

  • der_ke:この変数には Pastebin の URL が含まれます。この URL が参照するファイルには、マイナーが使用する攻撃者の Monero ウォレット ID が含まれていました。このウォレット ID は攻撃者が支払を受け取るためのものです。攻撃者が制御するクライアントでマイニングに成功した Monero はすべて、このファイルで指定されたウォレット ID に転送されます。同じウォレットが、前述の Alibaba クラウドの投稿にも記載されています。
  • hXXps://pastebin[.]com/raw/hURdMBLd

次に、download 関数によって、指定された URL から取得されたファイルがさまざまな場所に書き込まれます。その後、システムのアーキテクチャを判断して適切なマイニング クライアントをインストールし、マイニング クライアントを実行します。

 

次のスクリーンショットは、前述の download 関数の der_ke 変数に関連付けられた Monero ウォレット設定の内容です。ウォレット ID、マイニング プールの URL、および CPU 使用率やロギングなどを制御するためのパラメータを含めた、マイニング クライアントで使用される設定パラメータが指定されています。

SSH を介した水平方向への感染

CSIRS では、感染が SSH を使用して水平方向に拡大していることを確認しました。ローカル ログは取得できませんでしたが、ネットワーク ログを入手し、マルウェアがどのように拡散しているかを把握することはできました。ログには大量の SSH トラフィックが記載されていたため、Watchbog の水平方向への感染手口は容易に判明しました。たとえば StealthWatch Cloud などの NetFlow 監視機能で内部トラフィック フローを監視すれば、簡単に検出できていたでしょう。

水平方向への感染には、次の Bash スクリプトが使用されていました。スクリプトでは、感染したシステムの known_hosts ファイルの内容を取得してから、それらのシステムに SSH で接続を試みます。SSH キーの有無を確認し、それらのキーを利用して known_hosts ファイルに記載されたシステムに対する認証も行います。成功した場合、前述の Pastebin URL の内容を取得し、感染プロセスを開始します。

 

Jenkins と Redis サーバを経由した水平方向への感染

Watchbog 攻撃では、水平方向への感染に SSH を利用するだけでなく、ホストのサブネット上でオープンな Jenkins と Redis ポートをスキャンする Python スクリプトも利用しています。スクリプトで脆弱なサーバが検出されると、curl または wget コマンドで Pastebin からペイロードが取得され、標的でそのコマンドが実行されます。

次の 71 行目の文字列を見ると、CVE-2018-1000861 の脆弱性が狙われています。CVE-2018-1000861 は Staple Web フレームワークにおける脆弱性で、HTTP リクエストを処理する Jenkins バージョン 2.138.1 または 2.145 以前が影響を受けます。攻撃者は細工された URL を介して任意コードをリモート実行できる可能性があります。Orange Tsai 氏の投稿popup_iconには、相互参照オブジェクトを使って ACL ポリシーをバイパスすることでこの脆弱性をエクスプロイトする方法が記載されています。

スクリプトが参照するペーストはアクセスできなくなりましたが、ペイロードは前述した XMR-Stak マイナーのインストール スクリプトであると考えられます。次の Python スクリプトもダウンロードされ、「party」と呼ばれる関数で前述の XMR-Stak マイナー スクリプトから実行されています。

上のコードを見ればわかりますが、ペイロード変数には base64 でエンコードされた blob が含まれています。この blob は(base64 でエンコードされているため)デコードされ、/tmp ディレクトリに書き込まれて実行されます。blob には Python スクリプトをホストしていた Pastebin URL(hXXps://pastebin[.]com/raw/DzgYb9mu)が含まれています。この Python スクリプトには前述の脆弱性をエクスプロイトし、感染プロセスを開始する目的があります(次のスクリーンショットを参照)。

 

永続化

Watchbog の主な永続化手口は cron ジョブだと考えられます。以下に示すインストール スクリプト「kerberods」の system 関数により、更新情報がないかドロッパーが毎時間、Pastebin への呼び出しを行います。次のスクリーンショットは、Watchdog が永続化を確立するための cron ジョブの構成です。

Morphus Labs の Renato Marinho 氏は自身の記事の中で、kerberods で永続化を実現する興味深い方法について述べています。kerberods は、ルート特権がある場合、Glibc の一部をフックして Glibc の動作を変更するライブラリをダウンロードして OS にロードします。記事の中では、フックによってマイナーを anyone(root 権限を含む)として実行できるだけでなく、マイニング プールへのネットワーク接続の難読化や Redis/Jenkins サーバのスキャンも可能なことが示されています。

証拠の隠滅

これまでの Watchbog の亜種では証拠の隠滅が確認されていますが、Talos が監視する亜種でも同様の動作が確認されました。証拠の削除方法は、ファイルとログを削除または上書するという、わかりやすいものです。証拠の削除コードは通常、数個の Pastebin スクリプトの最後に追加されています。削除されるのは、主に Xmr-stak のダウンロード スクリプトや「SSH Lateral Movement(SSH を介した水平感染)」スクリプトなどです。これらの重要な証拠が削除されたことで分析の難易度は上がりましたが、不可能ではありませんでした。お客様のシステムで、証拠の穴埋めに欠かせないログを一元的に把握できたからです。また、ホストそのものにも証拠が残っていました。最も明白な証拠は、マルウェアの亜種そのものです。

まとめ

既知の CVE(脆弱性)への修正プログラムが適用されていない Web アプリケーションは、攻撃者にとって格好の標的です。これらの脆弱性は、Web サーバや Web サーバが展開されているネットワーク環境への侵入経路となるからです。侵入に成功した攻撃者は C2 に接続し、標的内で永続化を確立して、水平方向への感染を広げます。これはまさに今回のケースです。このような攻撃を阻止する最善策は、すべてのエンタープライズ Web アプリケーションを最新の状態に保つことです。ただし修正プログラムを適用すると、運用上のギャップや遅延が発生する可能性があります。そのため、メンテナンス ウィンドウとテスト環境を設けることも重要です。暗号通貨マイナーのアクティビティは、セキュリティの基本原則に従う限り容易に判別できます。つまり、社内のネットワーク トラフィックで基準を確立し、重大な逸脱があった場合は原因を特定して調査する必要があります。暗号通貨マイナーの一般的なアクティビティ(今回のケースでは Watchbog によって組織の SSH トラフィックが急増)は判明していますが、油断は禁物です。

カバレッジ

SNORT®popup_icon などの侵入防御システムは、各コマンドの末尾にある特定のシグニチャによって、China Chopper のアクティビティを検出するための効果的なツールを提供します。侵入防御システムに加えて、Cisco AMP for Endpointspopup_icon などのエンドポイントの検出および対応ツール(EDR)を使用することをお勧めします。これにより、プロセスの呼び出しを追跡し、プロセスを検査できます。こちらpopup_iconから AMP を無料でお試しいただけます。

これらの脅威を検出してブロックする別の方法を以下に記載します。

Cisco クラウド Web セキュリティ(CWS)または Web セキュリティ アプライアンス(WSA)の Web スキャンは、悪意のある Web サイトへのアクセスを防止し、これらの攻撃で使用されるマルウェアを検出します。

電子メール セキュリティは、攻撃の一環として攻撃者が送りつける不正な電子メールをブロックします。

次世代ファイアウォール(NGFW)、次世代侵入防止システム(NGIPS)、およびMeraki MX などのネットワーク セキュリティ アプライアンスは、この脅威に関連する悪意のあるアクティビティを検出できます。

AMP Threat Grid は、悪意のあるバイナリを特定し、すべてのシスコ セキュリティ製品に保護機能を埋め込みます。

シスコのセキュア インターネット ゲートウェイ(SIG)である Umbrellapopup_icon は、社内ネットワークの内外で悪意のあるドメイン、IP、URL への接続をブロックします。

 

オープン ソースの SNORT サブスクライバ ルール セットをお使いであれば、Snort.orgpopup_icon で購入可能な最新のルール パックをダウンロードすることで、システムを最新状態に維持できます。

侵入の痕跡(IOC)

Watchbog に関して次の IOC が確認されています。

ハッシュ(SHA256):

b383d0fdfa5036ccfa5d9c2b43cbfd814bce8778978873057b86678e5295fc61 0b0567c9b45ea0a3ea4267001f0760ccdf2b8224fceaf8979d32fcceb2d6fb7a

3A6271A90D0F6CC8A2D31D45D931E8401F13F7377932BA07D871DC42F252B9CA

ドメイン:

aziplcr72qjhzvin[.]onion[.]to

その他:

Monero ウォレット(Alibaba Cloud Post と同一)

47k2wdnyyBoMT6N9ho5Y7uQg1J6gPsTboKP6JXfB5msf3jUUvTfEceK5U7KLnWir5VZPKgUVxpkXnJLmijau3VZ8D2zsyL7

本稿は 2019年9月11日に Talos Grouppopup_icon のブログに投稿された「Watchbog and the Importance of Patchingpopup_icon」の抄訳です。

コメントを書く