脅威の調査

「ソフォス」の名前を悪用したランサムウェアを発見

UI や暗号化されたファイルの拡張子に「ソフォス」の名前を使用しているランサムウェアの実行ファイルが、Sophos X-Ops アナリストにより発見されました。

** 本記事は、Sophos Discovers Ransomware Abusing “Sophos” Name の翻訳です。最新の情報は英語記事をご覧ください。**

更新 (7 月 24 日): ランサムウェアが使用する暗号化の手法や、ランサムウェア自体の詳細、および使用されているパスワードが復元されたりブルートフォース (総当り) 攻撃によって流出したりした場合に暗号化されたファイルを復号化するための PoC (概念実証) に関して、情報を追記しました。

攻撃者は、マルウェアにセキュリティ企業の名前を付けることがあります。ソフォスでは VirusTotal を定期的に検索し、興味深いマルウェアや新しいランサムウェアの亜種を調査しています。今週の調査では Sophos X-Ops のアナリストが、ファイルが暗号化されたことを警告するパネルの UI (下図参照) や暗号化されたファイルの拡張子 (「.sophos」) に「ソフォス」の名前を使用している新種のランサムウェアの実行ファイルを発見しました。

SophosLabs チームは直ちに調査を行い、ソフォスのエンドポイントセキュリティ製品に重点を置いた検出ルールの開発に着手しましたが、既存の動作検知ルール (および Sophos CryptoGuard) でのテストでも、ランサムウェアによる被害はブロックされました。この重点的検出ルールは、下記の「検出」の項で示しています。

ランサムウェアの実行ファイル自体は、MinGW を使ってコンパイルされ、リンクされた Rust ライブラリを含んでおり、極めて前時代的な機能を備えています。最新のほとんどのランサムウェアインシデントでは、ランサムウェアを用いる攻撃者は、他の多くの機能を廃し、ファイルの暗号化という目的に特化したツールを作成します。今日私たちが目にするランサムウェアの多くは、他の機能をほとんど、あるいはまったく備えていない、単一の目的を持つ実行ファイルです。

これらのファイルに関する VirusTotal の記録はあらゆる面で、サンプルのうち 1 件がファイルを暗号化するだけでなく、多くの機能を持っていることを示しています。このことはソフォスの分析でも確認されています。今回発見されたランサムウェアはまた、ほとんどのランサムウェアグループで使われなくなった、標的との通信方法 (電子メール、Jabber インスタントメッセンジャープラットフォーム) を主に利用しているようです。

実際、これらのファイルのうち 1 件の機能は、最新のランサムウェア実行ファイルというよりも、ファイルを暗号化し、ランサムノート (身代金要求文書) を生成する機能を持った汎用のリモートアクセス型トロイの木馬 (RAT) に類似しています。これらの機能には、キーストロークを記録するためのキーボードドライバーのフックや、WMI コマンドを使ったシステムのプロファイリングなどが含まれます。一方、他の多くのランサムウェアと同様に、システムの起動を妨げるディレクトリや、暗号化する意味のないファイルを含むディレクトリを攻撃対象から除外します。このランサムウェアはシステムの言語設定もチェックし、ロシア語に設定されている場合には、実行を停止します。

もう 1 件のサンプルには、このような「非ランサムウェア的」機能がほとんど搭載されていません。いずれにせよ、どちらのサンプルもインターネット経由で C2 サーバーのアドレスに接続します。接続時には Tor (.onion) ダーク Web 上のアドレスを参照していますが、ソフォスが分析したランサムウェアのサンプルは実際には Tor 接続を行っていませんでした。

さらに、どちらのサンプルにもハードコードされた IP アドレスが含まれています (このアドレスにサンプルが実際に接続されるのを確認しました) 。このアドレスは、インターネット接続しているコンピューターを暗号通貨マイニングソフトウェアに感染させようとする Cobalt Strike の C2 攻撃および自動化された攻撃に、1 年以上前から用いられています。

過去のデータから、ランサムウェアが以前の攻撃で使用した C2 アドレスが浮かび上がる

コンソールランサムウェアアプリケーション

どちらのサンプルも、Windows のコマンドラインで実行されるように作成されています。Windows のコマンドプロンプトアプリケーションで実行されると、ランサムウェアはユーザー (ここでの「ユーザー」とはコンピューターの所有者ではなく、ランサムウェアを展開している犯罪者を指す) に、その動作と最終的にドロップするランサムノートの内容を規定する文字列を入力するように求めます。

具体的には、「暗号化されたパスワード (32 文字)」に続いて、「トークン」(電子メールアドレス、Jabber インスタントメッセージアカウントアドレス) を入力するよう求められます。ユーザーがこれらの情報を入力すると、プログラムは (1) ハードディスクドライブ上のすべてのファイルを暗号化する、(2) 特定のドライブレターのファイルを暗号化する、(3) プログラムを終了する、という動作のうち 1 つを選択するようにユーザーに促します。

さらに、ランサムウェアのコンソールアプリケーションは、攻撃者に連絡先情報の追加を求める

ユーザーが (1) または (2) を選択した場合、ランサムウェアはファイルの暗号化を完了すると、変更されたファイル名に含まれる「token」の値を使用して、暗号化されたファイルの名前を変更します。入力された電子メールアドレスと Jabber アドレスはランサムノートに追加され、暗号化が実行されたディレクトリに HTML アプリケーション (.hta) としてドロップされます。

.hta ファイルは、攻撃者が攻撃開始時に提供した電子メールアドレスやその他の情報を用いてカスタマイズされたランサムノートを表示するだけのものです。

.hta ファイルには、入力された電子メール/Jabber ID の情報が含まれます。

このランサムウェアは、暗号化するすべてのファイルに一意のマシン識別子、設定時に入力された電子メールアドレス、そして接尾辞「.sophos」を付加します。

ランサムウェアによって名前を変更されたファイルには、.sophos という接尾辞が付加される

暗号化プロセスが完了する前に停止した場合、ランサムウェアがランサムノートを残したり、壁紙画像を公開画像サーバーから取得したものに変更することはありません。

ランサムウェアはまた、公開画像ライブラリの Web サイトから画像を取得し、この画像を使って Windows のデスクトップの壁紙を「Sophos」と書かれた画面に変更します。注目に値するのは、ソフォスのロゴや色、ブランディングを真似るのではなく、緑色の南京錠のロゴを表示し、ランサムノートをどのように見つけて攻撃者に連絡すればよいのかを標的に指示している点です。

このランサムウェアのファイルアイコンは、本記事冒頭の壁紙に使われている南京錠のアイコンと類似しています。

コンソールで実行すると、ランサムウェアはデバッグログのような長いリストを出力し、発見した各ファイルを暗号化するのに要した時間をミリ秒単位で報告します。

ランサムウェアは実行中、コンソールにデバッグログを出力する。Sophos Intercept X がファイルの暗号化を阻止している場合でも、「SUCCESS (成功)」と記録される。

このランサムウェアをテストしたところ、インターネット接続しているコンピューターで実行されると、ランサムウェアを実行するユーザーの権限を確認しようとすることも判明しました。今回のテストでは、このランサムウェアはインターネットに接続されていないコンピューター上で実行された場合にも暗号化タスクを実行しました。

自らの有効性を確認するランサムウェア

ランサムウェアの実行ファイルの「プロパティ」画面から、それぞれのファイルがバージョン 0.0.8 および 0.0.9 であることが確認できます。どちらの実行ファイルも署名されておらず、実行すると UAC 経由で権限昇格を求めるプロンプトが表示されます。

ランサムウェアは、コンピューター上で小規模なシステムプロファイリングを行い、標的のネットワークの公開 IP アドレスを取得し、ポート 21119/tcp で IP アドレス 179.43.154.137 に HTTP POST リクエストを行い、トークンとコンピューターのプロファイリング情報を送信します。セッションは暗号化されていません。

ランサムウェアの「トークン」確認中の HTTP POST セッション情報

「トークン」の値がサーバーで受付できない場合、アプリケーションはコンソールに「Your token is not valid! (トークンが有効ではありません!)」とエラーメッセージを出力した後、終了します。しかし、インターネットから隔離されたオフラインのコンピューター上で実行されると、ランサムウェアは「プログラムのローカル使用」と表示し、ユーザーに 32 バイトのパスワードや、ランサムノートに埋め込まれて各ファイル名に付加される連絡先情報を入力させた上で、暗号化を開始します。

実際の暗号化コード

マルウェアの最新バージョン (0.0.9) を分析したところ、Rust AES 暗号化ライブラリ (libaes) を組み込んでおり、サイファーブロックチェーン (CBC) モードで AES-256 を使用していることが判明しました。初期化手順はマルウェアのバイナリにハードコードされています (以下のスクリーンショットでは黄色でハイライトされています) 。

Screen shot of decompiled code, showing initialization vector for encryption
マルウェアが使用する暗号化のためのハードコードされた初期化手順を示す、逆コンパイルされたコードのスクリーンショット

暗号化キーは、マルウェア実行時にコマンドプロンプトで入力される 32 文字のパスワードです。 マルウェアのコードはパスワードの SHA-256 ハッシュを実行し、暗号化された各ファイルに追加されるデジタル署名の確認用にハッシュを保存します。

The decompiled code for the hashing of the password used to create a digital signature.
デジタル署名を作成するために使用されるパスワードのハッシュを逆コンパイルしたコード

マルウェアはまた、暗号化の際にスキップするフォルダとファイル拡張子のリスト、および終了するプロセスのリストを保持しています。ファルダ名、ファイル拡張子、プロセスリストは、いずれも難読化されていません。

A list of folders and file extensions hard coded into the malware.
マルウェアにハードコードされたフォルダとファイル拡張子のリスト

スキップするフォルダ スキップするファイル拡張子 終了するプロセス
‘Boot’ ‘regtrans-ms’ ‘Oracle.exe’
‘FRST’ ‘tmp’ ‘Ocssd.exe’
‘KVRT_Data’ ‘ps1’ ‘Dbsnmp.exe’
‘KVRT2020_Data’ ‘joker’ ‘Synctime.exe’
‘PerfLogs’ ‘ini’ ‘Agntsvc.exe’
‘AdwCleaner’ ‘dll’ ‘Isqlplussvc.exe’
‘ProgramData’ ‘inf’ ‘Xfssvccon.exe’
スキップするフォルダ スキップするファイル拡張子 終了するプロセス
‘Boot’ ‘regtrans-ms’ ‘Oracle.exe’
‘FRST’ ‘tmp’ ‘Ocssd.exe’
‘KVRT_Data’ ‘ps1’ ‘Dbsnmp.exe’
‘KVRT2020_Data’ ‘joker’ ‘Synctime.exe’
‘PerfLogs’ ‘ini’ ‘Agntsvc.exe’
‘AdwCleaner’ ‘dll’ ‘Isqlplussvc.exe’
‘ProgramData’ ‘inf’ ‘Xfssvccon.exe’
‘$Recycle.Bin’ ‘ico’ ‘Mydesktopservice.exe’
‘$RECYCLE.BIN’ ‘bat’ ‘Ocautoupds.exe’
‘MSOCache’ ‘lnk’ ‘Encsvc.exe’
‘Documents and Settings’ ‘com’ ‘Firefox.exe’
‘Recovery’ ‘ani’ ‘Tbirdconfig.exe’
‘System Volume Information’ ‘adv’ ‘Mydesktopqos.exe’
‘SYSTEM.SAV’ ‘cpl’ ‘Ocomm.exe’
‘$Windows.~WS’ ‘cur’ ‘Dbeng50.exe’
‘$WINDOWS.~WS’ ‘rom’ ‘Sqbcoreservice.exe’
‘Thumbs’ ‘deskthemepack’ ‘Excel.exe’
‘Pagefile’ ‘diagcab’ ‘Infopath.exe’
‘Hyberfil’ ‘diagcfg’ ‘Msaccess.exe’
‘$WinREAgent’ ‘diagpkg’ ‘Mspub.exe’
‘Program Files’ ‘drv’ ‘Onenote.exe’
‘Program Files (x86)’ ‘log’ ‘Outlook.exe’
‘$WINDOWS.~BT’ ‘hlp’ ‘Powerpnt.exe’
‘Thumbs.db’ ‘icl’ ‘Steam.exe’
‘Windows.old’ ‘icns’ ‘Thebat.exe’
‘windows.old’ ‘ics’ ‘Thunderbird.exe’
‘Windows.old.000’ ‘idx’ ‘Visio.exe’
‘windows.old.000’ ‘ldf’ ‘Winword.exe’
‘AppData’ ‘mod’ ‘Wordpad.exe’
‘dev’ ‘mpa’ ‘Notepad.exe’
‘msc’ ‘Utweb.exe’
‘msp’ ‘Ut.exe’
‘theme’ ‘Sql.exe’
‘wpx’
‘lock’
‘mkp’
‘ocx’
‘msu’
‘nls’
‘msstyles’
‘nomedia’
‘prf’
‘rtp’
‘scr’
‘shs’
‘spl’
‘themepack’
‘key’
‘hta’
‘faust’
‘Devos’
‘sophos’
‘sys’

暗号化キーを生成した後、ファイルの暗号化を試みる前に、マルウェアは次のように動作します。

  • ハードコードされたリスト内のすべてのプロセスを終了しようとする。
  • 「cmd /Crd /s /q %systemdrive%\$Recycle.bin」を使ってごみ箱内のデータを削除しようとする。
  • ネットワークドライブを検索する。

これらの動作の後、マルウェアはファイルの暗号化プロセスを開始します。マルウェアの起動時に入力された 32 文字のパスワードは標的システム上で暗号化されるすべてのファイルの AES キーとして使用されます。ほとんどのランサムウェアのコードは、ファイルの復元をより難しくするため、ファイルごとに新しいセッションキーを作成します。

The encryption subroutine of the malware.
マルウェアの暗号化サブルーチン

暗号化の方法は、暗号化されるファイルのサイズによって異なります。ファイルが 6.4 MB よりも小さい場合、マルウェアは新しいファイルを作成し、暗号化キーの SHA256 値をファイルの先頭に書き込み、0x100000 バイトのデータチャンクごとにファイルを読み込み、暗号化します。CBC モードで AES-256 を使って各チャンクを暗号化し、その結果を新しく作成されたファイルに追加します。暗号化が完了すると、元のファイルは削除されます。

6.4MB よりも大きなファイルに対しては、新しいファイルを作成する代わりに、元のファイルを改変します。暗号化のために 0x320000 バイトのデータチャンク単位でファイルを読み込み、元のコンテンツを置き換えた後、ファイルの末尾に暗号化キーの SHA256 値を付加します。

復号化プロセスのプロトタイプ

暗号化プロセスでは単一のキー (入力されたパスワード) が使用されるため、パスワードが何であるかを知ってさえいれば、ファイルの復号化は容易です。以下は、パスワードがわかっていてファイルを復号化する簡単な Python コードです。

from malduck import aes
import sys
from hashlib import sha256

# arg 1 is password
# arg 2 is filename to decrypt
# arg 3 is outputfile

data = open(sys.argv[2],"rb").read()

key = bytes(sys.argv[1],"utf-8")
#print(key)
IV = b"wA3XnNVGS1NJ72eI"

if len(data) < 6400000:
    print("Small file")
    sig = data[:32]
    data = data[32:]
else:
    print("Big File")
    sig = data[-32:]
    data = data[:-32]

m = sha256()
m.update(key)
if m.digest() == sig:
    print("good key")

out =aes.cbc.decrypt(key,IV,data)

open(sys.argv[3],"wb").write(out)

たとえば、openssh.zip というファイルがこのマルウェアにより、「22222222222222222222222222222222」というパスワードを用いて暗号化されたとします。 上記の (decrypt.py として保存された) Python スクリプトを使用して復号化するには、以下のコマンドラインを実行します。

python decrypt.py 22222222222222222222222222222222 "openssh.zip.[[CLAcwPCc]].[[a@bc.com]].sophos" openssh.zip
An encrypted file; the highlighted text is the SHA256 hash of the password.
暗号化された openssh.zip ファイル。ハイライトされた部分はパスワードの SHA256 ハッシュ
復号化された openssh.zip ファイル
ランサムウェアの保護、発見、検出の時系列

検出

Sophos Intercept X は、以下のシグネチャを使用して、このランサムウェアの実行と悪意のある動作をブロックします。

  • CryptoGuard2017 年 5 月にリリースされたエンジンに基づき、ランサムウェアによる暗号化の試みを実行時にプロアクティブにブロックします。
  • Impact_6a – 2020 年 10 月公開。ランタイム動作検知により、暗号化の実行段階で悪意のある活動をブロックします。
  • Troj/Ransom-GXS – 2023 年 7 月 18 日公開。悪意のあるファイルを実行前マルウェア対策検知によって検出します。
  • Mal/Generic-R – 2023 年 7 月 17 日公開。レピュテーションベースの検出によりマルウェアの実行を防ぎます。
  • C2 IP に対するレピュテーションベースの検出 – 2023 年 7 月 18 日公開。マルウェアに関連する C2 アドレスである 179.43.154.137 へのアクセスをブロックします。

今回分析したサンプルは、マルウェアの公開リポジトリで観測されただけであり、実際の攻撃者による使用は確認されていません。ソフォスは、このランサムウェアが実際に攻撃で使用されていないかどうか、引き続き監視していきます。

ソフォスは、このランサムウェアに対応する Knowledge Base (サポート技術情報) の記事を公開しています。X-Ops は、このマルウェアに関連するセキュリティ侵害の痕跡 (IoC) を SophosLabs Github で公開しています。

謝辞

Sophos X-Ops は、サンプルの特定および分析への貢献に対し、Yusuf Arsan Polat、Anand Ajjan、Steeve Gaudreault、および Ronny Tijink の各氏に謝意を表します。SophosLabs は、この件を通知してくれた @malwrhunterteam にも謝意を表します。