エグゼクティブサマリー

多く利用されているLinuxのメールサーバーに見つかった脆弱性を突く攻撃が活発的に進行中です。この攻撃は、1週間前に見つかったばかりの脆弱性を利用して、標的マシン上でリモートコマンドの実行権限を取得し、インターネットを検索して感染対象とする他のマシンを見つけようとするほか、暗号通貨発掘プログラム(コインマイナー)を開始します。

  • 現時点で、世界中にある35億台以上のサーバーが危険にさらされています。
  • この攻撃はインターネット経由で、先週発見された脆弱性である「CVE-2019-10149」を見つけ、すでに感染しているサーバーを利用して、できるだけ多くのサーバーへと感染を広げようとします。
  • この攻撃の標的はEximサーバーであり、Eximソフトウェアはインターネットのメールサーバーの約57%で実行されています。
  • この攻撃は、コインマイナー用ペイロードをダウンロードします。これは、以前WannaMineで確認したのと同じように、すべての組織に悪影響を及ぼします。
  • この攻撃から回復するプロセスには多くのコストと時間がかかるため、企業や組織にとって大きな意味を持ちます。
    同様のインシデントに関する詳細を知りたい方は、 WannaMineに関する当社による分析をご覧ください。

セキュリティ上の推奨事項

  • 組織内にあるすべてのEximシステムにパッチを適用し、それらが最新バージョン(本稿執筆時点では4.92)へとアップデートされていることを確認します。
  • お使いのcrontabを調べて、見慣れないcronジョブを見つけ次第、それらを削除します。既存のバックアップを使って正規のcronジョブを復元します。
  • SSH経由のバックドアアクセスに使用される公開鍵を削除します。
  • コインマイナーのプロセスを停止し、コインマイナー自体を削除します。
  • お使いのファイアウォールのログおよびアクセスログの内容を確認し、次のホスト名が含まれていないか調べます。
     ・https://an7kmd2wp4xo7hpr.tor2web.su
     ・https://an7kmd2wp4xo7hpr.tor2web.io
     ・https://an7kmd2wp4xo7hpr.onion.sh
  • 侵入されたサーバーのイメージを作り直します。

はじめに

CVE-2019-10149は6月5日に初めて発見された脆弱性であり、現在、この脆弱性を突くことで、Eximサーバーへの攻撃やインターネットを経由した感染が拡大しています。

この脆弱性は、Qualys研究チームにより初めて発見された際には「WIZardの再来」と呼ばれていました。この脆弱性を上手く突くことで、root権限でのローカルおよびリモートコマンドの実行の両方が可能になります。

当社では、この脆弱性を突いた攻撃の第一波を認識しており、それはFreddie Leemanにより2019年6月9日に記述されています。最初のハッカーグループは、クリアウェブ上に置かれているC2サーバー経由でエクスプロイトを推進し始めました。

異なる攻撃者による攻撃の第2ラウンドは、Nocturnusチームによって分析されました。

注:これは追加のスクリプトをダウンロードし、Linuxサーバー上で多くの設定を変更または追加する非常に長大なスクリプトです。当ブログ記事では、この攻撃に対する簡便なリファレンスガイドを提供するために、当該スクリプトが実行する処理のうち主要な部分だけを取り上げています。

同スクリプトが実行する処理の中には、本ブログ記事では取り上げていないものもあります。同スクリプトのハッシュ値は、本記事の末尾に掲載されているほか、VirusTotalにもアップロードされています。

攻撃

サイバーリーズンチームは、脆弱性のあるバージョンのEximを実行しているLinuxサーバー上にインストールされている暗号通貨発掘プログラムMonero(別名cryptojacking)を発見しました。暗号通貨発掘プログラムとは、システム所有者に知られることもなく、またはシステム所有者の同意を取ることもなしに、システムリソースを利用して、仮想通貨で利益を得ようとするアプリケーションのことです。

感染の連鎖は、悪意あるスクリプトをダウンロードするリモートコマンドの実行から始まります。このスクリプトは、複数のtor2webドメインからコードを取り出した後、ワーム機能を利用して、別の脆弱性のあるシステムへと感染を広げます。

攻撃者は感染したマシンを使ってインターネットをスキャンすることで、別の脆弱性のあるEximサーバーを見つけようとします。そのようなEximサーバーが見つかると、攻撃者は、同サーバーをエクスプロイトすることで、同マシン上のリモートコマンド実行権限を取得した後、tor2webサービスを通じてtorの秘匿サービス経由でスクリプトをダウンロードします。


Eximの子プロセスとしてのbash(Cybereasonプラットフォームによる表示)

当該スクリプトでは、3つのtor2webの「変換」サービスが定義されている


tor2webの変換サービス

RHOSTは、.onionを除くドメイン用の秘匿サービスのアドレスです。

TOR1、TOR2、およびTOR3は「変換」サービスであり、後で連結されることにより、1つのURLを作成します。これらは、1つの「変換」サービスをラウンドロビン方式で利用します。

本スクリプトは、実行中の暗号通貨発掘プログラム(cryptonight、ddgsKerberods、nicehashなど)が存在するかどうか調べます。そのようなプログラムが見つかった場合、同スクリプトはそれらを停止させます。


HUPシグナルが本スクリプトプロセスに対して送信できないことを確認

続いて、本スクリプトは、HUPシグナルが同スクリプトプロセスに対して送信できないことを確認します。これにより、端末が切断された場合でも、同スクリプトはバックグラウンドで実行を続けることが保証されます。


攻撃ツリー(Cybereasonプラットフォームによる表示)

本スクリプトは、複数のパスの下に作成されるファイルのファイル名として使用されるランダムな文字列を生成します。



ファイル名として使用するためにランダムに生成される文字列

ファイルが作成されると、この「インストール」スクリプトのアップデートされたバージョンを継続的にダウンロードし、それをランダムに生成されたファイル名で保存した後、それを定期的に実行するcronジョブが生成されます。


「インストール」スクリプトの継続的なダウンロード、保存、実行

続いて、既存のcronジョブが削除されます。


既存のcronジョブの削除

本スクリプトは、busyboxによるrm、crond、およびcrontabの実装をダウンロードします。


スクリプトによるrmcrondcrontabのダウンロード

cronジョブが追加された後、本スクリプトは、SSHサーバーに対するRSA SSH認証キーを追加します。


公開鍵 / 秘密鍵認証ファイル内に登録されるSSH認証キー

本スクリプトは、rootログイン、RSA認証、PAMおよびパスワード認証を受け付けるようにSSHサーバーを設定します。



rootログイン、RSA認証、PAMおよびパスワード認証を受け付けるようにSSHサーバーを設定

一時ファイルの削除やパーミッションの変更のようなその他のハウスキーピング処理を行った後、本スクリプトは、同じサーバーから、‘main’という名前の別のスクリプトをダウンロードします。

注:標的となるサーバー上にSSHがインストールされていない場合、本スクリプトは、インストールされているLinuxディストリビューションの種類を特定した上で、適切なパッケージ管理システム(pacman、yum、apt-getなど)を使ってopensshサーバーソフトウェアをインストールします。

mainスクリプト

注:mainスクリプトは、元々の形式ではBase64でエンコードされているため、それを分析するためには復号化する必要があります。

最初に、mainスクリプトは、標的となるマシン上にインストールされているLinuxディストリビューションの種類を特定します。これを行うには、uname -aコマンドを実行した後、同コマンドの出力をローカル変数$ARCHに保存します。同スクリプトは当該出力に文字列“Alpine”が含まれているかどうかを調べ、同文字列が存在する場合、ローカル変数$Prefを上書きします。


“Alpine”が出力に含まれている場合、$Pref を上書きする

$Prefは、後で、ダウンロードするコインマイナーのペイロードを決定する際に使用されます。

本スクリプトは、バックグラウンドで動作している別のコインマイナーや、以前の感染に関連する孤立したプロセスが存在するかどうかを調べ、そのようなプロセスが見つかった場合、それらを終了させます。

本スクリプトは、変数$wdog0を使ってウォッチドッグを作成し、そのようなプロセスが実行されているかどうかをチェックします。そのようなプロセスが実行されていないならば、本スクリプトはmainスクリプトをダウンロードして、それを復号化した後、bashプロセスとして実行します。


スクリプトによるウォッチドッグの作成

本スクリプトには、Base64でエンコードされたインラインのpythonスクリプトを実行する関数e() が含まれています。本スクリプトは復号化されて実行されると、Base64でエンコードされた別のファイルをダウンロードします。このファイルはポートスキャナーおよびエクスプロイターとして動作するpythonスクリプトへと復号化されます。

このスキャナー兼エクスプロイターは、プライベートIPプリフィックスをスキップする際にIPアドレスを生成します。また、このスキャナー兼エクスプロイターは、脆弱性のあるRedisホストに接続することで、RedisWannaMine攻撃と非常に似通った方法で、Redis経由でその暗号通貨発掘プログラムを配布します。

コインマイナーのダウンロード

ここまで、コインマイナーを確立するための操作に関するインフラストラクチャ作業について説明してきました。本節以降では、コインマイナーのダウンロードについて説明します。

本スクリプトがダウンロードする必要のあるコインマイナーのバージョンを決定する際に、変数$Pref が使用されます。

巧妙にコインマイナーを隠す

同スクリプト内には、複数のWindowsアイコン(.ico)ファイルが含まれています。


Windowsアイコンファイル

1. ${Pref}64×75.ico – 64ビット用ペイロード
2. ${Pref}32×75.ico – 32ビット用ペイロード


変数${Pref} の値を確認する

変数${Pref} の値は、当該スクリプトにより検出されたオペレーティングシステムのバージョンに応じて、aか r のどちらかになります。同スクリプトはこの情報を利用してダウンロード対象とするファイルのURLを判定した後、同ファイルを手動でダウンロードします。



.icoファイルのダウンロード

ダウンロードしたファイルは.icoとして識別されます。


ファイルを.icoファイルとして識別

同ファイルには、正しい.icoファイルヘッダである「00 00 01 00」が含まれています。


.icoファイルの16進ダンプ

同ファイルには、GitHubロゴを表す実際のアイコンが含まれています。


.icoファイルのアイコン

これが、この.icoファイルが.icoファイルとして検出される理由です。なお、同.icoファイルのオフセット4028の部分には、別のヘッダが隠されています。


ファイルをzipファイルとして識別

同ファイルにはpkzipヘッダが含まれています。これは、同ファイルがアイコンファイルを装って入るものの、実際にはzipファイルであることを意味しています。このファイルを解凍しようとすると、パスワードの入力を求められます。


このファイルを解凍しようとするとパスワードの入力を求められる

パスワードは当該スクリプト内に埋め込まれています。


zipファイルのパスワードは当該スクリプト内に存在する

都合のよいことに、このパスワードは“no-password”となっています。


zipファイルの内容

同ファイルの文字列を調べると、これがUPXでパックされたファイルであることが分かります。


当該ファイルをUPXでパックされたファイルとして識別


同ファイルのヘッダは、それがUPXでパックされたファイルであることを示している


UPXのアンパック

このUPXをアンパックすると、同ファイルが、シンボル情報を削除された動的にリンクされているx86-64 ELF実行可能ファイルであることが明らかになります。さらに、文字列セクションを調べると、これがxmr(Monero)コインマイナーであることが分かります。


アンパックされたUPXの文字列セクション

コインマイナーは、感染したシステムにインストールされると、ソビエト連邦のトップレベルドメイン(TLD)を利用する新規登録ドメインに対するDNSクエリを実施します。


DNSクエリの対象ドメイン

結論

攻撃者は、自分が新しく作成したワームの目的を隠すためにはどんな苦労も惜しまなかったことが明らかです。攻撃者は、TORネットワーク経由で秘匿サービスを利用することで、ペイロードをダウンロードしたほか、偽装したWindowsアイコンを作成することで、ログを調べる研究者やシステム管理者による検知を逃れようと試みました。

脆弱性のあるEximサーバーが多く利用されている(Shodanによれば世界中で3,683,029台存在する)ことが原因で、攻撃者は、比較的短期間で多くのサーバーに侵入し、暗号通貨の収入源を簡単に生成できるようになります。被害の発生を防ぐために、当社では、先述したセキュリティ上の推奨事項を実施することを強くお勧めします。

自社の防御を強化する方法を知りたい方は、『MITRE ATT&CKを使用した閉ループ型セキュリティプロセスの作成方法』をお読みください

IoC(Indicator of Compromise:痕跡情報)

コインマイナー:

md5: b7d96358d06e3bb12055d2e48c4b9796,
sha1: 0e0d47bf6d025b7936e1ed1308fff1b16ee70239

Ldm(スクリプト):

Md5: b6bb1379b8cb85e14eb71ca8c5ba8a0d
Sha1: 2e89482a14591ade097d252a43d9c1804462ebe6

main(スクリプト):

Md5: 4cec7074f456a0ba7ccc3e5991cce0e3
Sha1: d0a6f47669e07d938317ba8bf6ecb8d4fbdcfe7f

ドメイン – コインマイナー用のC2ドメイン:

timesync[.]su

ドメイン – アップデータースクリプト用のtor2webドメイン:

An7kmd2wp4xo7hpr.tor2web.su
An7kmd2wp4xo7hpr.tor2web.io
an7kmd2wp4xo7hpr.onion.sh

ホワイトペーパー「すべての組織が狙われている」

企業、組織がどんなにセキュリティを強固にしてもハッカーが悪用できる脆弱性は必ず存在します。侵入されることが避けられないことを受け入れ、新たな対策を立てる必要があります。本書で、なぜ避けられないのか、どのように対処するのかをご覧ください。
https://www.cybereason.co.jp/product-documents/input/?post_id=606

ホワイトペーパー「すべての組織が狙われている」