恥を知らぬ新たな商用暗号通貨スティーラーWeStealと商用RAT WeControl

This post is also available in: English (英語)

概要

テイクダウン起訴が行われつど、ある商用マルウェアはべつの商用マルウェアにとってかわられ、サイバー犯罪者に力を貸していくことになるようです。商用マルウェアの作成者は自身のマルウェアの正当性について不誠実な喧伝をすることが多いですが、その戦略はいざ裁判になるとほぼ勝ち目がないようです。

ところがこのWeStealという新しく登場した商用暗号通貨(仮想通貨)スティーラーの作者は自身のマルウェアの意図を隠そうとしていません。この売り手はこれを「the leading way to make money in 2021(2021年にお金を稼ぐための優れた方法」(図1)と謳っています。

WeSupplyは「WeStealは2021年にお金を稼ぐ優れた方法」と書かれた次のような広告でWeStealを販売しています。
図1 WeStealの広告

本稿ではこのWeStealを分析し、永続化とオペレーションのために行われている難読化とその手法について詳しく取り上げ、同マルウェアの顧客についても調査します。また、同名のオペレーションとWebサイトを持つアクターWeSupplyと、このマルウェアの共謀者であり実際の作成者であるイタリアのマルウェアコーダーComplexCodesについても見ていきます。

なお本稿公開直前、このアクターがWeStealに複数の新機能を追加し、「WeControl」と呼ばれる新しい商用リモートアクセスツール(RAT)で補完したことを私たちは発見しました。本稿の最後でこれらの新たに判明した内容について文書化します。

パロアルトネットワークスのお客様は、WildFire脅威防御セキュリティサブスクリプションを有効化した次世代ファイアウォールCortex XDRAutoFocusによってWeStealおよびWeControlから保護されています。

WeStealの起源

2021年2月中旬、「ComplexCodes」と呼ばれるアクターがアンダーグラウンドフォーラムでWeStealの宣伝を開始しました。ただしComplexCodesは2020年5月から「WeSupply Crypto Stealer」なるものを販売しています。以前のWeSupply Crypto StealerのサンプルとこのWeStealとを比較すると、WeStealが単に同プロジェクトの進化形である可能性は高いと思われます。

このイタリアのマルウェアコーダーは、マルウェアを難読化してウイルス対策ツールによる検出を回避するため、以前に「Zodiac Crypto Stealer」と「Spartan Crypter」を作成しています。

このアクターのフォーラムでの署名は、NetflixやDisney+などのサービスアカウントを販売するサイトとのアフィリエイトをうかがわせます(図2)。

このスクリーンショットが示すようにこのアクターのフォーラム署名はNetflixやDisney+などのサービスのアカウントを販売するサイトとのアフィリエイトを示している
図2 アカウントを販売するアンダーグラウンドサイト

ComplexCodesは、Discordベースの商用分散型サービス拒否(DDoS)オファリングである「SiteKillah」でも、やはりその意図を隠そうとはしていません(図3)。

ComplexCodesの名で知られるマルウェア作成者は「Site Killah」というDiscordベースの商用分散型サービス拒否攻撃も実行している。このスクリーンショットはコンピュータに向かうハッカーの漫画的描写で、Site Killahを「あなたのNo.1分散型サービス拒否サービス」と宣伝し、「比類なき価格」、「すばやい攻撃」、「すばらしいサポート」を提供するとしている
図3 DDoSサービスの広告

WeStealの意図

マルウェア作成者に対する訴訟では、通常は検察官が作成者のマルウェアに対する意図を立証する必要があります。マルウェア作成者の多くは「エンドユーザーはマルウェアを不正な目的で使用してはならない」という無意味な利用規約を盾に取ります。そして多くの場合、マルウェアの潜在的に「正当な」使用法を説明しようとして、逆にマルウェア対策ツール回避機能や、インストールやオペレーションのステルス性能、暗号通貨のマイニング機能、パスワード窃取やウェブカメラのライト消灯機能などについて説明する結果になっています。

ところがComplexCodesは、WeStealについて、いっさいそうした言い訳をしていません。そもそもマルウェアの名前じたいが「WeSteal(私たちは盗む)」ですし、共謀者が所有するWebサイト「WeSupply」も「私たちが提供しあなたたちが儲ける」と誇らしげに述べています(図4)。

スクリーンショットに示すようにWeSupplyのWebサイトは「私たちが提供しあなたたちが儲ける」というタグラインで自分自身を宣伝している
図4 WeSupplyの広告

マルウェアをWeSteal(私たちは盗む)と呼び、「Crypto Stealer(暗号通貨スティーラー)」の機能を宣伝するだけでなく、フォーラムへのWeSupplyの投稿では、ゼロデイのエクスプロイトや「ウイルス対策の回避」サポートについても説明しています(図5)。

このスクリーンショットは同マルウェアを「世界で最も先進的な暗号スティーラー」と説明したWeStealの広告を示している。被害者トラッカーパネル、自動起動、ゼロデイエクスプロイト(スマートスクリーンとインストール)、完全にサイレントでスマートな回避機能をもつ高度な起動機能、ウイルス対策の回避などの機能を提供するとある。
図5 WeStealの機能

図6は、あるサンプルについて、ウイルス対策では検出されないことを主張しているスクリーンショットです。WeStealには「感染」を追跡する「被害者トラッカーパネル」が用意されており、そのコンテキストについて疑いの余地はありません。

このスクリーンショットはWeStealのウイルス対策検出ツールを示しています。
図6 WeStealのアンチウイルススキャン結果

もちろんComplexCodesはWeStealの販売で、月額20ユーロ、3ヶ月50ユーロ、年間で125ユーロを請求することで利益を得ています(図7)。

スクリーンショットはECストアSellixのWeSupply広告を示している
図7 ECストアSellixでのWeSteal広告

暗号通貨の取引窃取用に設計されたソフトウェアに正当性を主張する余地は残されていません。

WeStealの機能

被害者から暗号通貨を「盗む」ため、WeStealは正規表現を使用して、クリップボードにコピーされた文字列でBitcoinとEthereumのウォレット識別子のパターンに一致するものを探します。一致した場合、クリップボードにコピーされたウォレットIDがマルウェアによって提供されたウォレットIDに置き換えられます。その後、被害者がトランザクション用に置き換えられたウォレットIDを貼り付けると、その資金が本人のものではないウォレットに送金されます。

RAT(リモート管理ツール)機能には疑問が残る

WeStealは「RATパネル」を備えていると広告しています。ただし私たちの分析では、RAT機能は1つも宣伝ないし観測されていません。ComplexCodesは、単純なホスト型コマンド&コントロール(C2)サービスをさして「被害者トラッカー」や「RATパネル」などと呼ぶなどかなり野心的な説明をしているようです。

サービスとしてのC2

これまで複数のほかの商用マルウェアでも観測されていますが、WeStealは顧客に独自C2を運用させるのではなくホステッドなC2を「サービスとしてのC2(C2aaS)」として提供してオペレーションを行わせます。

WeStealはC2通信に次のURLを使用するよう設定されています。私たちは2つの異なるC2ドメインを確認していますがうち1つはマルウェア販売サイトでもありました。

hxxps://wesupply[.]to/t_api.php
hxxps://wesupply[.]io/t_api.php

「サービス」といえば?

WeSupplyのスタッフは顧客の「成功」に大きく投資しているようです。あるフォーラムのセールススレッドで、まだ経験が浅いと見られる犯罪者候補生が次のように尋ねていました。

how do you use the tool and how does it target someone?(このツールはどう使うのですか? だれをターゲットとして選定するのですか?)」

この質問に対し、親切なマルウェア行商人は以下のように応答しています。

「Open a ticket, will help you with all your questions.(問い合わせチケットをオープンしてもらえればすべてのご質問にお答えします。)」

難読化

WeStealは「westeal.py」という名前のスクリプトで、Pythonベースのトロイの木馬として配布されています。ComplexCodesはPyInstallerを使用してこれを実行可能形式に変換しています。PyInstallerパッケージにPythonインタープリタとしてpython39.dllが含まれていたことから、このトロイの木馬はとくにPython3.9用に作成されたものでした。この開発者はオープンソースのPyArmorも使用していました。PyArmorはソースコードの難読化ツールで、Pythonスクリプトの内容を暗号化して内容を復号してからPythonインタープリタに送信して実行するものです。

PyArmorは_ pytransform.dllライブラリを使ってPythonスクリプトの内容を復号してからpython39.dllインタープリタに送ります。私たちが分析したWeStealのサンプルは、PyArmorの obf_mode という設定を 2 にして難読化されていました。この obf_mode 設定では、WeStealのPythonバイトコードを暗号文としてインクルードし、実行時にPyArmorがそれをAES GCMを使って復号します。

興味深い永続化手法

add_startup 関数はシステムへの永続的なアクセスを確立するもので、これによってWeStealは自分自身を以下の場所にコピーしています。

C:\Users\<ユーザー名>\AppData\Local.exe

次にWeStealはユーザーがログインするたびに実行される次のバッチスクリプトをスタートアップフォルダに作成します。

バッチスクリプトには、次のコマンドが含まれています。

上記のコマンドはWeSteal実行可能ファイルを開始するバッチファイルを斬新な手法で難読化しています。 start コマンドは、環境変数 localappdata を実行しようとします。この環境変数はデフォルトのWindowsシステムではC:\Users\<ユーザー名>\AppData\Localフォルダへのパスです。ただしこのコンテキストでは、この環境変数内の Local がサブフォルダではなくファイルとして解釈され、 start コマンドがC:\Users\<username>\AppData\以下にあるWeStealの実行可能ファイル Local.exe を実行するのです( start コマンドはファイル拡張子 .exe を必要としません)。

強盗(あるいはカッコウの卵?)

get_clipboard 関数と copy_to_clip 関数がWeStealのクリプトジャック機能を実行します。これらの関数は、クリップボードにコピーされたBitcoin(BTC)、Ethereum(ETH)のウォレットをチェックして、それらをアクターのウォレットのものに置き換えます。ユーザーが意図したウォレットのかわりにアクターのウォレットをペーストすることにより、暗号通貨のトランザクションをアクターに有利なようにリダイレクトしてもらうことを期待しています。アクターは、暗号通貨取引が完了するまで被害者がこのすり替えに気付かず、そのまま手遅れになって取り消せなくなれば、と考えています。

WeStealは正規表現を使用してユーザーがクリップボードにコピーしたウォレットを識別します。BitcoinとEthereumウォレットのフォーマットを記述している具体的な正規表現は、復号したWeStealサンプルで識別した定数から確認できます(図8)。

ここに示したようにBitcoinとEthereumウォレットのフォーマットを記述している具体的な正規表現は復号したWeStealサンプルで識別した定数から確認できる
図8 復号したWeStealサンプル内の定数

WeStealの顧客とウォレットと「押収物」

このサンプルにはハードコードされた顧客のハンドル名とそのBTCウォレットやETHウォレットもエンコードされていました。ここから、現在の顧客ベースがどのようなものであるかや、顧客がどの程度成功を収めているのかについてのヒントも得られます。

私たちは短い顧客リストを照合してみました。全体的に、特定されたウォレットのWeStealのリリース以降のトランザクション数はたいしたものではなく、その価値も低いものでした。ただし、少なくとも1つのウォレット(アクター「pepsi」)は、1回のEthereumトランザクションで約800ドルを受け取っていました。もちろんこれらのトランザクションのなかにはマルウェアと無関係なものが含まれている可能性もあります。

ハンドル名 Etheriumウォレット Bitcoinウォレット
Heroin 0xb5F7Bf1B46854f3EDA1201294941Edb13f9661EA 1AB3XSnioEFKKZcDadmSDX8YRcQzgRnG3c
pepsi 0x5f9C7078dFF737BbF872b438151Cd38ECfe0ebee 1NbyaaQTGPAhj8CuqRSRrXbWCCtyhdyv7T
touourien 0x419f92Af57Eeb3f50fbE10298cC4a684aB452011 bc1qg0gr8286k6kemtd3cwch6guzfp6yn9n3smlqt8
Adribusted 0x49c8d0359cAf80FfebD8424128A951264f4f6506 bc1q8pufxrmm8k5n9v4w2auvlaedx9lm23c7sg6mye
King 0x1FdD9e44048F88B04C6DBba897E05ecCA55A61f9 1KVsfk5jT5fUGbUxomxAsKYxVvSZC9joXs
belzedar 0xc7D4E35C3ea831c3Bbf53550621315C79423E95F bc1q30el678lr9dwcydtm8gjztf389zrj6gfs6ezj5
xjoking 0xa4FC40168EF940eD013E1dB6986C5746AAC3b2c3 1APLhq2yC421C3G6X5uhLhTmtZMjSUZ38G
Shakho 0x356d6162ADa9db9bd31b95Eec92Cd3B1D3273623 1CUYk9xCDU9WfTbLZj561M32Q55EZtcyEo
WeZesk 0x269eCD3E97A37C27347E4E87D6f3f1B59A0BE2AB 1BcD15EEpeA1Mfz49oAMfdikeXjhCfiUU6
X0NR8 0x86C19f41004d451dc6dcb4f0AC086EDdA1383b70 bc1qkmg9c0p52xgzqjqswdz6k9gxddwvchr8rt3pm8
wizzz 0xAaD7685A29bE275E9404Ba88260E19dB52644DE3 bc1qx7ha77kanm3nn8fe2ap4ts2uyxjxgmc35llud7
Pepe 0xB97749901245b417060bbdFf3D7d1eC90b584a7c 17SjdBcboW2EPFMyoPwzp64eyjMwTLoBSG

とくに驚くにはあたりませんが、アクターWeSupply自身も(2つめのフォーラムハンドル名「Shakho」として)自分のツールを使っている様子が確認されています。また当然ながらこれらのハンドル名の多くは、WeStealを宣伝していたのと同じフォーラムからも見つかりました。

WeControl RATを含む最近観測された更新

本稿の公開直前、私たちは、WeStealと酷似(Pyarmorで難読化されたコンパイル済みPython)した、他のWeStealサンプルとは異なる新しいサンプルがいくつかあることに気づきました。

このおかげで、フォーラムやアクターのWebサイトについての調査を新たに進めることができました。私たちは、彼らがWeStealの改良を謳って「WeControl」RATと呼ばれる新たなマルウェアを販売していることに気づきました。

WeStealの改良

最初にWeStealを分析したさい、私たちは「なぜこのアクターはBitcoinとEthereumという2つの暗号通貨の監視・窃取機能しか持たせていないのだろう?」と疑問に思いました。たしかにそれらはいちばん人気のある暗号通貨ではありますが、他の暗号通貨のウォレットの正規表現をコーディングするのも、たいして難しくはないからです。

更新されたWeStealのマーケティングでは、Bitcoin、EthereumにくわえてLitecoin、Bitcoin Cash、Moneroなど追加の暗号通貨のサポートが提供されていました。
図9 WeStealがマーケティングを更新

そこで当然のなりゆきとして、この作者が窃取対象リストに3つ暗号通貨を追加したことがわかりました。

  • Bitcoin: BTC
  • Ethereum: ETH
  • Litecoin: LTC
  • Bitcoin Cash: BCH
  • Monero: XMR

WeControlのRAT

残念ながら、アクターのサイトで新しい商用RATが発見されたタイミング上の問題で、本稿にはWeControl RATの完全な分析は含められませんでした。

WeControlは、WeSupplyのWebサイト上で「初登場のRAT/ボットネットハイブリッド」と宣伝されています。
図10 アクターのウェブサイトで宣伝されているWeControl

WeControlは「初登場のRAT/ボットネットハイブリッド」として宣伝されています。この説明はアクターがWeStealの「サービスとしてのC2」モデルをこのRATにも組み込んだことを示しているようです。ただしこれは彼らが主張するような「初登場の」Webベース C2aaSではありません。WebMonitor RATは、すでに2年以上にわたりC2aaSを提供しています。

WeStealで慣れた手法をここでも使用し、WeControlはPyArmorで難読化されたPythonでコンパイルされています。

私たちが最初にWeControlのサンプルを観測したのは2021年4月中旬です。本稿公開時点で収集したWeControlのサンプルはまだ7つだけです。これらのハッシュ値は本稿の最後に記載します。

結論

WeStealは単一の違法機能のみを備えた恥を知らぬ商用マルウェアです。その単純さは暗号通貨窃取における有効性の単純さに一致しています。このマルウェアを購入して展開する稚拙な攻撃者は泥棒であって街角にいるスリと変わりありません。彼らの犯罪はその被害者の存在同様に現実のものです。

手っ取り早くシンプルな現金化プロセス、暗号通貨窃取の匿名性、コストの低さ、オペレーションの容易さ。こうした要因のおかげでスキルの低い泥棒にもこの手のクライムウェアはたしかに魅力的で人気があります。

WeControlも違法なアクティビティためのツールとして設計・販売されており、以前のWeStealと同じくなんの正当性もないツールです。

サービスとしてのC2の検出やブロックは容易で、このイタリアのマルウェア作成者ComplexCodesに対して不利に働きます。このツールの顧客たちが、このマルウェア作成者の潜在的な制御下に「被害者たち」を委ねているというのも驚きです。このマルウェア作成者は、被害者の「ボット」を盗むこともできますし、好きなときに顧客のウォレットをComplexCodesのものとすり替えられるからです。見たところ小さな顧客基盤しかないことからも、はした金にしかならないものに刑事訴追のリスクをかけるこのマルウェア作者も驚きです。

効果的なスパムフィルタリングやシステム管理、最新のWindowsホストを導入している組織については、同脅威への感染リスクはかなり低いでしょう。

パロアルトネットワークスのお客様は、WildFire、脅威防御のセキュリティサブスクリプションを有効化した次世代ファイアウォールとCortex XDRによってWeStealおよびWeControlから保護されています。AutoFocusをお使いのお客様は次のタグを使用してWeStealとWeControlのアクティビティを追跡できます: WeStealWeControl

パロアルトネットワークスは本稿で見つかったファイルサンプルや侵害の兆候などをふくむ調査結果をCyber Threat Alliance(CTA サイバー脅威アライアンス)のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使用して、お客様に保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害することができます。Cyber Threat Allianceの詳細については、次のWebサイトをご覧ください: www.cyberthreatalliance.org

IoC

WeStealサンプル

本稿公開時点で157個ある識別済みのWeStealサンプルのSHA256ハッシュ値リストはGitHubリポジトリから入手できます。

WeControlサンプル
  • 59ffba39fc87eacd7c19498b5bb495d9c86c8bec40f3282e996aa80d77c45fa7
  • ed6875d60a67149c6cee4798a305810c6bcaa9b0b9349ec397ed331d96707e37
  • 2bdc916680402a973afca8407d83c299092515cf5cc78ad0a92a8ce2d72b6f7c
  • 8d37eef0308d5bd03d6c93ab247ca82d2157053822428ad1c787771de8e4332f
  • e2b11c10832991577184abd4f57af7383f30142a52fc8e2b41145f416860acf1
  • 0920763b06f0a90f57910aaeff361d978bf37b025cbb9bc206d290eeb81e6217
  • eac7d579002f5e7f2cbff86b8e233c433f14ae25faf112eabaa1e2dd4f2a9a3d
C2 /販売ドメイン
  • wesupply[.]to
  • wesupply[.]io

更新履歴

  • 2021-04-30 英語版の更新を反映しました。