This post is also available in: English (英語)
概要
テイクダウンや起訴が行われつど、ある商用マルウェアはべつの商用マルウェアにとってかわられ、サイバー犯罪者に力を貸していくことになるようです。商用マルウェアの作成者は自身のマルウェアの正当性について不誠実な喧伝をすることが多いですが、その戦略はいざ裁判になるとほぼ勝ち目がないようです。
ところがこのWeStealという新しく登場した商用暗号通貨(仮想通貨)スティーラーの作者は自身のマルウェアの意図を隠そうとしていません。この売り手はこれを「the leading way to make money in 2021(2021年にお金を稼ぐための優れた方法」(図1)と謳っています。
本稿ではこのWeStealを分析し、永続化とオペレーションのために行われている難読化とその手法について詳しく取り上げ、同マルウェアの顧客についても調査します。また、同名のオペレーションとWebサイトを持つアクターWeSupplyと、このマルウェアの共謀者であり実際の作成者であるイタリアのマルウェアコーダーComplexCodesについても見ていきます。
なお本稿公開直前、このアクターがWeStealに複数の新機能を追加し、「WeControl」と呼ばれる新しい商用リモートアクセスツール(RAT)で補完したことを私たちは発見しました。本稿の最後でこれらの新たに判明した内容について文書化します。
パロアルトネットワークスのお客様は、WildFireと脅威防御セキュリティサブスクリプションを有効化した次世代ファイアウォール、Cortex XDR、AutoFocusによって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)。
ComplexCodesは、Discordベースの商用分散型サービス拒否(DDoS)オファリングである「SiteKillah」でも、やはりその意図を隠そうとはしていません(図3)。
WeStealの意図
マルウェア作成者に対する訴訟では、通常は検察官が作成者のマルウェアに対する意図を立証する必要があります。マルウェア作成者の多くは「エンドユーザーはマルウェアを不正な目的で使用してはならない」という無意味な利用規約を盾に取ります。そして多くの場合、マルウェアの潜在的に「正当な」使用法を説明しようとして、逆にマルウェア対策ツール回避機能や、インストールやオペレーションのステルス性能、暗号通貨のマイニング機能、パスワード窃取やウェブカメラのライト消灯機能などについて説明する結果になっています。
ところがComplexCodesは、WeStealについて、いっさいそうした言い訳をしていません。そもそもマルウェアの名前じたいが「WeSteal(私たちは盗む)」ですし、共謀者が所有するWebサイト「WeSupply」も「私たちが提供しあなたたちが儲ける」と誇らしげに述べています(図4)。
マルウェアをWeSteal(私たちは盗む)と呼び、「Crypto Stealer(暗号通貨スティーラー)」の機能を宣伝するだけでなく、フォーラムへのWeSupplyの投稿では、ゼロデイのエクスプロイトや「ウイルス対策の回避」サポートについても説明しています(図5)。
図6は、あるサンプルについて、ウイルス対策では検出されないことを主張しているスクリーンショットです。WeStealには「感染」を追跡する「被害者トラッカーパネル」が用意されており、そのコンテキストについて疑いの余地はありません。
もちろんComplexCodesはWeStealの販売で、月額20ユーロ、3ヶ月50ユーロ、年間で125ユーロを請求することで利益を得ています(図7)。
暗号通貨の取引窃取用に設計されたソフトウェアに正当性を主張する余地は残されていません。
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インタープリタに送信して実行するものです。
1 2 3 |
from pytransform import pyarmor_runtime pyarmor_runtime() _pyarmor(name, __file_, b'PYARMOR\x00\x00\x03\t\x00a\r\r\n\x06[以下省略] |
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はユーザーがログインするたびに実行される次のバッチスクリプトをスタートアップフォルダに作成します。
1 |
c:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\appdata.bat |
バッチスクリプトには、次のコマンドが含まれています。
1 |
start %localappdata% |
上記のコマンドは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)。
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つの暗号通貨の監視・窃取機能しか持たせていないのだろう?」と疑問に思いました。たしかにそれらはいちばん人気のある暗号通貨ではありますが、他の暗号通貨のウォレットの正規表現をコーディングするのも、たいして難しくはないからです。
そこで当然のなりゆきとして、この作者が窃取対象リストに3つ暗号通貨を追加したことがわかりました。
- Bitcoin: BTC
- Ethereum: ETH
- Litecoin: LTC
- Bitcoin Cash: BCH
- Monero: XMR
WeControlのRAT
残念ながら、アクターのサイトで新しい商用RATが発見されたタイミング上の問題で、本稿にはWeControl RATの完全な分析は含められませんでした。
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のアクティビティを追跡できます: WeSteal、WeControl
パロアルトネットワークスは本稿で見つかったファイルサンプルや侵害の兆候などをふくむ調査結果を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 英語版の更新を反映しました。