Mexals キャンペーンの復活に関する調査
エグゼクティブサマリー
論説と追加のコメント:Tricia Howard
Akamai セキュリティリサーチは、ルーマニア語ベースと思われるクリプトジャックキャンペーン、 Mexalsの復活について追跡し、分析してきました。
このキャンペーンは少なくとも 2020 年から活動しており、過去には 2021 年 7 月に BitDefender によるレポートで取り上げられました。
2022 年 10 月から最新の攻撃とマルウェアの改善が開始されたようです。彼らは現在 Diicotと自称しています。これはルーマニアのテロ・組織犯罪捜査局の名称でもあります。
Akamai のセキュリティ研究者は、Akamai のあるお客様において悪性 DNS が検出されたことを受けて、このキャンペーンの分析を開始しました。 影響を受けた Akamai のすべてのお客様に迅速にこのことが通知され、適切な対策が講じられました。
攻撃者は、長いペイロードチェーンを使用した後に、最終的に Monero のクリプトマイナーをドロップします。
新しい機能として、Secure Shell(SSH)プロトコル・ワーム・モジュールの使用、さらに多くのレポート、改善されたペイロードの難読化、新しい LAN スプレッダーモジュールなどが追加されています。
Akamai は、マイナーのプールを分析することで、攻撃者がおよそ 1 万米ドル相当の XMR コインを採掘したと推定しています。
Akamai は、 緩和戦略、 検出ツール、 セキュリティ侵害インジケーター(IOC)のフルリポジトリを提供します。また、このブログを公開する前に、こうしたツールを使用して被害者に連絡を取りました。
はじめに
Akamai のセキュリティ研究者は進行中のクリプトジャッキングについて調査を進め、これが Bitdefender によって対処されたキャンペーン(2021 年)の復活であると考えています。オリジナルのレポートといくつか相関点があったものの、このマルウェアはそれ以降 レベルアップ しています。
この 2 つのキャンペーンの間に遂げた変化の 1 つに、キャンペーン名があります。以前は Mexals と呼ばれていたグループ(図 1 の Web ページを参照)は、現在 Diicot と自称しており、そのツールの 1 つに同じ名称が付けられています。 Diicot は、 ルーマニアのテロ捜査局の名称でもあります。混乱を避けるために、この脅威グループを Mexals と呼んでいきます。手口、ペイロードチェーン、IOC を分析し、この 2 つのキャンペーンは、名称が変わったにもかかわらず関連していることが明らかになりました。
このキャンペーンには、難読化の改善、より目立ちにくいファイル名、カスタム・マイニング・プール・プロキシ が含まれています。これらは以前のバージョンにはなかったものです。攻撃チェーンは、SSH 認証情報による総当たり攻撃から始まります。その後、難読化されたペイロードの長いチェーンが続き、最終的に XMRig クリプトマイナーをドロップします。ドロップされたペイロードの 1 つは、今回の復活でアクティブになったと思われるワーム可能な(wormable)モジュールです。
攻撃者 自身の攻撃サーバー はオランダベースの VPS にホストされ、被害者は世界中に分散していると Akamai は考えています。攻撃者は 1 万米ドル相当の XMR コインを採掘したと Akamai は推定しています。
一部のハッカーはツールキットを持っています。こうした人々はチェーンを持っているようです
攻撃者の感染チェーンを分析したところ、8 つの実行可能ファイルが見つかりました。これらの実行可能ファイルは、ファイル名、パス、いくつかの 新機能 を除いて、Bitdefender によって発見されたものと大きく異なるようには見えません(図 2)。
ペイロード名 |
用途 |
---|---|
History |
bash スクリプト。 Update が実行中かどうかを確認します。実行中でない場合は実行します。 |
Update |
コンパイルされた bash スクリプト。Discord webhook を介して攻撃者に通知し、SSH が開いているマシンのランダム B クラス IP ネットワーク上でネットワークスキャンを実行します。結果を aliasesに提供します。 |
Chrome/ps |
ネットワークスキャナー。クラス B ネットワーク範囲(255.255.0.0)とポートを受け入れます。そのポートが開いているマシンのネットワーク範囲をスキャンし、結果をファイルに保存します。 |
Golang で書かれた SSH ワームモジュール。 payloadを実行します。 |
|
主な侵害後モジュール。被害者が利用できるリソースに基づいて、バックドア、クリプトマイナー、または LAN SSH ワームをインストールします。 |
|
.diicot |
コンパイルされた bash スクリプト。クリプトマイナーである Operaをダウンロードします。また、新しいユーザーと SSH キーの形式で別のバックドアをインストールします。 |
Opera |
XMRig クリプトマイナー。 |
コンパイルされた bash スクリプト。LAN スプレッダーモジュールの最初に来るものです。内部 LAN の IP 範囲で SSH ポートスキャナーを実行し、次にネットワークを呼び出して、SSH でマシンへのアクセスを試みます。 |
|
Network |
機能の少ない aliases の別のバリアント。ローカル LAN 上で SSH 辞書攻撃を実行し、クラッキングされたマシンの情報(および業務資格情報)をテキストファイルに保存します。 |
図 2:攻撃者が用いるさまざまなペイロードの概要
バイナリの生成と難読化
幸い、私たちは ツール を活用できます。Akamai の研究者である Larry Cashdollar が 以前の SIRT アラートの一部として構築したツールです。 このツールを使用して、UPX ヘッダーを簡単に復元し、ELF 実行可能ファイルを解凍して、その中の bash スクリプトを抽出できました。
すると、完全に取り出され、静的にコンパイルされたバイナリが残ります。マルウェアのコードと glibc のコードはまったく区別できません(図 4)。
glibc のソースコードを使って、エントリーポイントの状態を把握できます。実際の主な機能は、 rdiにロードされる機能です。これを調べると、非常に具体的なエラー文字列、 E: neither argv[0] nor $_ works.が見つかり、これを Web 上で検索できます。このようにして shcにたどり着きます。 残念ながら、簡単に利用できる逆コンパイラーはありません。リバースエンジニアリングによって復号ツールを作成するのは非常に手間がかかるため、その代わりにペイロードをデバッグして 1 秒後に実行を一時停止することができます。復号化されたシェルスクリプトはマルウェアのメモリに格納されるため、それをダンプして分析できます。
感染チェーン
各ペイロードは比較的簡単にチェーンになり、さまざまな方法で次のリンクを設定できます。たとえば、競合他社のマイナープロセスや CPU 負荷の高いプロセスを強制終了したり、bash 履歴を消去したり、永続性をインストールしたりした後に、次のペイロードをダウンロードして実行します(図 5)。
メインペイロードのテクニカル分析
aliases
これは Golang バイナリです。削除されなかったため、このマルウェアのロジックをすべて簡単に確認することができました。このマルウェアは、前の手順で作成された 2 つのファイル、つまり protocols ( Updateによってドロップされたユーザパスワードワードリスト)と bios.txt ( Chromeによって作成された、SSH が開いているマシンのターゲット IP リスト)を読み取ります。その後、各ターゲットに対して辞書攻撃を実行し、認証に成功すると、 payload およびその他のコマンドを実行して、侵害されたシステムをプロファイリングします。
最後に実行されるコマンドが uname -s -v -n -r -mで、その出力が解析されます。具体的には、めぼしいターゲットを示す可能性のある特定の OS 名をその出力内で探します。探している OS 名のほとんどに対しては、何もしませんが、ターゲットマシンが OpenWrtを実行している場合は、それに対して別の bash コマンドを実行し、 107,182,129,219 から別のシェルスクリプトをダウンロードして実行し、こうしていくつかの Mirai の変種をドロップします。重点は OpenWrt に置かれていると Akamai は考えています。OpenWrt は組み込みデバイスにインストールされており、組織のネットワークへの初期アクセスベクトルとして機能する可能性があるためです。 これは、攻撃者がクリプトマイニングキャンペーンだけに関心を持っているのではなく、新しいフィールドを積極的に探していることを示しています。
マルウェアは攻撃を終了させると、Discord Webhook(人気が高まっている攻撃手法)を介して攻撃者に報告します。さまざまな目的に応じて 4 種類の webhooks があります(図 6)。
1 つ目の webhook は、 toDiscordという関数から作成されたもので、ターゲットマシンで実行されるさまざまなプロファイリングコマンドの結果を退けます。次の 2 つは、関数 toAPIlogs と toDiscから呼び出されます。両方とも同じ情報(ターゲットの IP と、ターゲットの IP に対する認証を可能にするユーザー名とパスワード)を退けます。
最後に、被害者が OpenWrtを実行していた場合は、 toMiraiという別の関数が呼び出され、同じ情報を別の webhook に送信します。ここにはいくらかの冗長性があり、攻撃者がさまざまな指標を追跡しやすくするためだと思われます。または、攻撃キャンペーンのさまざまな部分の分離として機能している可能性があります(Mirai がボットネット/IAB である場合と、Mirai をクリプトマイナーとして通常使用する場合)。
payload
これは単なるコンパイルされた bash スクリプトですが、 payload にはコメントや進捗メッセージが含まれていて、マルウェアの演算子の思考プロセスを教えてくれるため、興味深いです。
コメントと進捗メッセージはルーマニア語で書かれており、 攻撃者がルーマニア人であるという推測が強まります (マルウェアのコマンドおよびコントロール/ダウンロードドメインは、文字どおり「ハッカーのアーカイブ」として解釈されます)。
このスクリプトは、他の既知のクリプトマイナーの存在をチェックし、その中でそのプロセスである dhpcd および ksmdxを強制終了します。 これが示しているのは、攻撃者がエコシステムを把握しており、 クリプトマイニングの世界で運試しをしているだけではないということです。
競合他社やその他の CPU 負荷の高いプロセスを強制終了させた後、スクリプトはマシンに搭載されている CPU コアの数を確認します。4 つ未満の場合は、 History および Update と、その cron ジョブをインストールします(この 2 つの実行可能ファイルは aliases ペイロードをダウンロードして、標的のマシンの再起動時に実行するようにスケジュールされています)。4 つ以上のコアがある場合、このスクリプトは、スクリプト XMRig クリプトマイナーをダウンロードして実行するコンパイルされた bash スクリプトである .diicotもダウンロードして実行します。
最後に、8 つ以上の CPU コアがある場合、このスクリプトは、LAN スプレッダーである reteaをダウンロードして実行します。
retea
LAN スプレッダーモジュールは、攻撃者のチェーンに新しい機能を提示します。これもコンパイルされたシェルスクリプトで、システムに設定されているすべてのユーザーを抽出し、.usrsというファイルを作成します。このファイルは SSH 辞書攻撃に使用され、抽出されたユーザーとハードコードされたデフォルトのパスワードリストを使用して入力されます。次に、LAN ネットワーク上でネットワークスキャナーをダウンロードして実行し、SSH ポートが開いているマシンを検出して、出力をファイルに書き込みます。次に Networkをダウンロードして実行します。これは aliasesより下位のバージョンで、機能が少なくなっています。悪性ペイロードをインストールしたり、Discord Webhook に報告したりせずに、侵害されたマシンの出力をファイルに保存するだけで、攻撃者は後でそれを入手できます。
被害者に会いますか?
それとも被害者になりますか?
攻撃者はワーム可能な(wormable)ペイロードを持っているため、脅威センサーで捉えたどの送信元 IP が攻撃者のインフラで、どれが被害者なのかを見分けにくくなっています。このセクションでは、攻撃者のインフラを分析し、実際の被害者を見つけてみたいと思います。
検知した攻撃 IP(50 個の一意の IP アドレス)をすべて取り出して、それを世界中の地理的位置にマッピングしました。攻撃 IP に加えて、Akamai の一部のお客様でも感染の証拠が見つかったため、これも被害者リストに加えました。図 7 に、被害者/インフラの地理的分布が示されています。
ほとんどの場所では活動がごくわずかしか見られませんが、西ヨーロッパにいくつかホットスポットがあります。西ヨーロッパに活動が集中していることから(図 8)、 このホットスポットは実際に攻撃者に制御されているマシンで、残りはワーム可能な(wormable)モジュールに乗っ取られている被害者マシンであるという仮説が成り立ちます。同時に活発になっているマシンは非常に少ないため、ワーム可能な(wormable)モジュールは特に活発ではないようです。それは納得できます。 aliases は、ランダム B クラスで cron ジョブを実行するごとに 1 回だけ実行されるためです。cron は、マシンの再起動時に実行されるようにスケジュールされていますが、被害者マシンの性質上(Linux サーバーがインターネットに接続されているなど)、実行されるのはまれでしょう。
攻撃者のインフラと思われるハニーポットで最も多く登録されている IP アドレスを調べると、ホストが明らかに分散していることが分かります(図 9)。古い IP アドレスは DigitalOcean でホストされていました。(最近の復活による)新しいアドレスは、オランダの VPS および Web ホスティングプロバイダーである Serverion でホストされているようです(ASN は実際にはその親会社である Des Capital B.Vに登録されているため、当初混乱しました)。
攻撃日 |
攻撃件数 |
攻撃者 IP |
ホスティング組織名 |
---|---|---|---|
2023-02-01 |
14 |
185.225.74.231 |
Des Capital B.V. |
2022-10-01 |
72 |
45,139,105,222 |
Des Capital B.V. |
2022-10-01 |
62 |
212.193.30.11 |
Des Capital B.V. |
2022-03-01 |
22 |
195.133.40.157 |
Des Capital B.V. |
2021-12-01 |
43 |
134.209.95.47 |
DigitalOcean、LLC(DO-13) |
2021-12-01 |
37 |
134,209,195,231 |
DigitalOcean、LLC(DO-13) |
2021-12-01 |
34 |
104.248.85.104 |
DigitalOcean、LLC(DO-13) |
2021-12-01 |
27 |
134,209,198,229 |
DigitalOcean、LLC(DO-13) |
2021-12-01 |
27 |
167.71.48.128 |
DigitalOcean、LLC(DO-13) |
2021-12-01 |
74 |
188.166.60.8 |
DigitalOcean、LLC |
図 9:被害者であるだけでなく、攻撃者のインフラと思われる上位の攻撃 IP
このブログ投稿を公開する前に、攻撃に関する情報を持つ、影響を受けた Akamai のお客様と、各攻撃 IP アドレスに登録されている悪用された電子メールに連絡しました。
外でけりをつけてやるよ!どうよ?
攻撃者は、以前のキャンペーン以降にマイニング設定を変更していたようです。以前は、マイナーに supportxmr.com を直接使うように指示していましたが、最近分析したマイナーは、攻撃者の制御下にある可能性のある IP アドレスと通信しています。私たちは、これがプライベートプールであることを恐れていました。プライベートプールであれば支払いを追跡できないからですが、この不安は当たらず、 supportxmr は引き続きウォレットへのマイニングの支払いを追跡していたため、サーバーは supportxmrによってホストされているプールに対するプロキシであると思われます。 これは、プールに直接到達しないことで、DNS のブロックと検知を回避する手段である可能性があります。
このキャンペーンの調査中に発見した XMRig ペイロードから、2 つの異なるウォレットアドレスを抽出することができました。こうしたウォレットアドレスは、Bitdefender に発見されたものとは異なりますが、その支払履歴によると、その期間も活動していたようです。
支払い額は 2021 年 11 月までは非常にばらついていたものの(フル XMR にも 2 回も到達しています)、その後は頻度と一貫性が大幅に上がっています(図 10)。これは、支払いスキームの変更や、より多くのマイナーワーカーの追加のためである可能性があります。そのタイミングは、検知されたマルウェア活動の他のピークと対応しています。
攻撃者は、キャンペーン全体で 1 万米ドル超相当の XMR を採掘し、 その 75% 以上が復活以降に採掘されていると Akamai は試算しています。実際に採掘された額は、おそらく Akamai の試算よりもさらに高くなると思われます。 supportxmrによって報告された固有のワーカー数によって判断すると、XMRig ペイロードと構成のまだ半分しか見ていません(図 11)。
まとめ
攻撃者が用いているペイロードチェーンは非常に優れており、極めて高度な攻撃者であることを示しています。また、通常はそれほど長いペイロードチェーンは見られません。攻撃者がこれほど多くのペイロードを使用することを選択した理由はいくつかあると考えられます。
難読化 - システム内の可変要素が多いほど、分析や追跡が難しくなります。バイナリが難読化されているという事実は、この仮説を裏付けています。
脅威グループの背後には複数の人がいる。キャンペーンの背後には攻撃者に関する実際の情報はありませんが、同じスクリプトの異なるサンプル間でコードの顕著な違いが見られました。これは、それがさまざまな人によって開発されたためであると考えられます。
このマルウェアキャンペーンは、徐々に進化するように構築されている。その証拠は、新しい機能や、追加された難読化だけでなく、今後の使用のための基礎として作成されたコード内の一部の重複部分にも見られます。
以前の運用からの改良と追加
UPX 圧縮と UPX ヘッダーの削除。
自動更新機能がペイロード内から外部スクリプト(History および Update)に移動。
より目立ちにくいファイル名(Chrome、 Opera など、ブラウザーを模したファイル名)
Discord に関する追加のマルウェアレポート
OpenWRT 固有の動作 (おそらく今後も追加)
パブリックプールに代わる カスタム・マイニング・プール・プロキシ の使用
防御者のアーカイブ
境界とネットワークの保護
マルウェアは、自身を配布する斬新な技法や高度な技法を備えていません。SSH に対して辞書攻撃を使用するだけです。そのため、インターネットから SSH にアクセスできるマシンだけが危険にさらされます。ネットワークの境界で SSH をブロックしたり、SSH を VPN の背後に移動させたりすることで、そうした攻撃がもたらすリスクを大幅に軽減できます。
また、デフォルトでない認証情報や複雑なパスワードを使用することで、このマルウェアに用いられるような辞書攻撃のリスクを大幅に軽減できます。また、認証にはパスワードよりもさらに安全な SSH キーを使用することもお勧めします(推測することは不可能で、「秘密」が接続経由で送信されることはありません)。
最後に、LAN スプレッダーモジュールについても検討する必要があります。LAN スプレッダーモジュールは、ラテラルムーブメントにも SSH を使用しているため、 ネットワークをセグメント化する ことで、そうしたリスクを安全に緩和できます。インターネットに接続されているサーバーを非武装地帯(DMZ)として検討する場合、SSH トラフィック(および一般的に RDP、MS-RPC、WinRM などのラテラルムーブメントに使用できるその他のトラフィック)が DMZ からネットワークのその他の部分に行かないようにすることは、理にかなっています。何らかの理由で、そうしたサーバーの 1 つに内部ネットワークへの SSH アクセスを許可する必要がある場合は(たとえば、ジャンプボックスとして機能させるためなど)、DMZ の外部および VPN の下にサーバーを移動させた方がいいでしょう。サーバーをインターネットに公開して攻撃者がそこから内部に飛び込めるようにしてはなりません。爆風半径を縮小し、伝播パスを削減する必要があります。
感染の検知
この悪性のキャンペーンによる感染の検知をサポートするツール用に Github リポジトリ を作成しました。ここに、Akamai Guardicore Segmentation のお客様が使用できる bash スクリプト、IOC および osquery クエリーの完全なリストがあります。この投稿の最後にも、検出スクリプトと IOC のリストの一部 を掲載しています。
こうしたツールに加えて、このような場合に適用される可能性のあるクリプトマイナーを検出する一般的な方法、つまり宛先ポートを調べて、マイニングプールへの発信トラフィックを検出する方法も推奨したいと思います。マイニングプールのデフォルトポートは、かなり独特な場合があるため、注意を払うと有益な可能性があります。例:
TCP ポート 4242 が、この プール実装のデフォルトポート
TCP ポート 3333、5555、7777、9000 が、 nodejs プール実装のデフォルトポート
もちろん、マイナーは HTTP および HTTPS を介してそのプールと通信することもできます。その場合、検出は非常に困難になります。しかし、こうしたポートを探す価値はあります。
検出スクリプト
検出スクリプトは、攻撃キャンペーンが過去に存在した、または現在存在することを示すさまざまな IoC を検索します。crontab 内のアーティファクト、ファイルパス、実行中のプロセス、悪性の SSH キーバックドアも検索します。検出スクリプトを実行するためには、チェックするマシンにダウンロードして、実行します。検出スクリプトは、マシンをスキャンして、以下のようにその判断をプリントします。
セキュリティ侵害インジケーター(IoC)
以下は、IOC のリストの一部です。完全なリストは、 Github リポジトリにあります。
パス
/var/tmp/.update-logs/
/var/tmp/Documents/
/var/tmp/.ladyg0g0/
/dev/shm/.x/
/dev/shm/.magic/
ファイル名
protocols
bios.txt
Update
History
aliases
payload
retea
.usrs
IP
107,182,129,219
45,139,105,222
185.225.74.231
212.193.30.11
ドメインおよび URI
arhivehaceru[.]com
discord[.]com/api/webhoos/954295081765072926/Zu7VU-LpfgRqSmCyFvz3BCkR1Lt7clYOJeyCFzZwtPmZlVn9og_6mPS_BJY-374m5Y3
discord[.]com/api/webhoos/1036206037373571082/9bs01KrT-TrcbSAPI_I-adV1Bhn56A4X4fxzCYEw3zMq95H1mFvlKWb6-KYzvEoVfTnS
discord[.]com/api/webhooks/1036205058456563722/1_saZM0fE7nLgYG668LmDfNmSvrWpD-6Z8nIXljm0qlm6YyMxAyYuZIu4LhN2gHsgSQy
discord[.]com/api/webhooks/965651135102865479/PFdU4u8yZrn0XhzIKShcaxL3_IaBjsstYmFEXlThF2_1XCnwXSAjKos3ptwKYpPyGqvI
discord[.]com/api/webhooks/848592916951203860/WeWBGYSVreTlE0aO_6alVN3Qrj6_aRxnaDpq4_6wD04V2aHlMFvgik2Z2h78Dstg9fZY
discord[.]com/api/webhooks/1036225255049531422/qyOrT3SxHaOC-9yS2NQiPxlSMYmRFFIpU-rMKzmcDv9pQyP4uaZEiZXDXioUtf0DJLUB