BlackCat に新たな戦術: VM と Alpine Linux の採用でセキュリティ対策を回避

A pictorial representation of the BlackCat ransomware gang. A hand offers money to another hand holding keys. In the background is a computer screen with the biohazard symbol on it.

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

概要

ランサムウェア攻撃グループ BlackCat のオペレーターは最近、同グループのツール更新についてアナウンスしました。このなかには、BlackCat のペイロードをリモート マシンや被害組織のネットワーク共有に拡散させるのに使える Munchkin というユーティリティが含まれていました。ここ 2 年ほど、BlackCat のオペレーターは、「サービスとしてのランサムウェア (RaaS)」ビジネス モデルの一部としてツールを継続的に進化させてきました。

同グループを調査をしていていたさい、Unit 42 のリサーチャーは、「カスタマイズされた Alpine 仮想マシン (VM) にロードされる」という点でユニークな Munchkin のインスタンスを取得しました。カスタマイズされた VM を使ってマルウェアを展開するこの新たな戦術はここ数カ月勢いを増しており、ランサムウェア脅威アクターらは VM を使うことでマルウェア ペイロードの展開時にセキュリティ ソリューションを回避できるようになっています。

本稿ではこの新たなユーティリティがどのように機能しているのかを詳しく説明し、BlackCat 脅威アクターが継続利用している戦術にさらに光を当てていきます。本稿が情報セキュリティ業界の皆さんのいっそうの取り組みを促し、この進化する脅威に対する防御強化の一助となれば幸いです。

パロアルトネットワークス製品をご利用のお客様は、本稿で取り上げたこの特定の脅威の指標を「悪意のあるもの」として適切に識別することによる保護を受けています。

関連する Unit 42 のトピック BlackCat Ransomware, Cybercrime

目次

BlackCat の概要
Alpine Linux を採用
結論
IoC
/app/controller - Munchkin バイナリー
/app/payload - BlackCat スタブ
/scripts/smb_common.py - Python の SMB クラス
/scripts/smb_copy_and_exec.py - Python の SMB コピー/実行 スクリプト
/app/payload - BlackCat スタブ
YARA ルール
追加リソース

BlackCat の概要

BlackCat ランサムウェア脅威が初めて公けになったのは、2021 年 11 月にその存在が表面化したときでした。同グループはマルウェア内部の洗練度合いや Rust プログラミング言語の使用などの独自アプローチで悪名を馳せました。

BlackCat はほかのランサムウェア脅威アクターと同じ RaaS ビジネス モデルを採用しています。RaaS ビジネス モデルでは、アフィリエイトがアクター提供のツールを活用するかわりに、利益の一部をオペレーターに還元することができます。過去の報告に基づくと、アフィリエイトは身代金支払い額のおよそ 80 ~ 90% を保持し、残りをオペレーターに送金します。

BlackCat 攻撃グループはそのアフィリエイトも含め、歴史的に米国国内の被害者を重点的にターゲットにしてきました。ただしその人気の高まりと時間の経過につれ、被害対象は大きく広がり、最近では BlackCat が世界中のさまざまな業界や業種をまたがる被害者をターゲットにしているようすが観測されています。

BlackCat のツール セットは長年進化を続けています。オリジナル バージョンでは、難読化や暗号化のされていない埋め込みの JSON 構成が提供されていました。

時間経過とともにこの脅威オペレーターはこのマルウェア ファミリーを更新し、この基盤の構成も難読化されるようになりました。またマルウェア実行には、ユニークなコマンドライン パラメーターを要求するようになりました。そうすることで BlackCat は、コマンドライン パラメーターを知らないセキュリティ コミュニティの人々が基盤のペイロードについての洞察を得られないようにしています。

このマルウェア ファミリーは進化し続けており、脅威オペレーターはさらに機能と難読化メカニズムを拡充しています。ここ数カ月、BlackCat は「Munchkin」という名前の新しいツールをリリースしました。

このツールは、Sphynx (最新の BlackCat 亜種) を実行する Linux ベースのオペレーティング システム (OS) を提供します。脅威オペレーターはこのユーティリティを使い、リモート マシン上で BlackCat を実行したり、リモートにある SMB (Server Message Block) ファイル共有や CIFS (Common Internet File System) ファイル共有に BlackCat を展開して暗号化することができます。

画像 1 は、Munchkin ユーティリティがどのように機能するかを示す図です。Virtualbox は被害ホストにインストールされていて、これがカスタム ISO/仮想マシンをロードします。この時点から、リモートの SMB ファイル共有が暗号化され、BlackCat ランサムウェアのコピーがリモートのマシンにプッシュされます。
図 1. Munchkin ツールのプロセス図

仮想マシンを使うマルウェア実行は、ランサムウェア コミュニティで増加傾向にあります。ほかのランサムウェア組織も同じようにこの新たな戦術を活用していると報告されています

このアプローチの利点として、ウイルス対策ソフトウェアなど、ホストの OS に設定されているセキュリティ対策や保護を回避できることが挙げられます。これらのソリューションは組み込みの仮想 OS に対するイントロスペクションを持たないことが多く、そこにあるチェック機能はマルウェアにバイパスされることが少なくありません。

最近行った調査のなかで、Unit 42 のリサーチャーはこの VM ユーティリティのコピーを入手でき、そのおかげでこれがどのように機能するかに関する洞察を提供できるようになりました。

Alpine Linux を採用

Munchkin ユーティリティは ISO ファイルとして提供され、これが仮想化製品 VirtualBox の新たにインストールされたインスタンスにロードされます。この ISO ファイルは、Alpine OS をカスタマイズした実装となっています。脅威オペレーターはそのフットプリントが小ささからこの OS を選択した可能性があります。オペレーティング システムを実行すると、ブート時に次のコマンドが実行されます。

ここで、このマルウェアは最初に VM の root パスワードを脅威アクターが選んだパスワードに変更しています。次に、組み込みの tmux ユーティリティを介し、新たなターミナル セッションを生成し、このターミナル セッションを controller という名前のマルウェア バイナリーを実行するのに使っています。マルウェアの実行が完了すると VM の電源はオフになります。

この controller というマルウェアは、/app ディレクトリー内にほかの関連ファイルといっしょにホストされます。さらに、ほかの関連ファイルや注目すべきファイルもこの VM OS 内には含まれています (以下表 1 参照)。

ファイル パス 説明
/app/controller Munchkin マルウェア ユーティリティ
/app/config Munchkin が使うシリアルライズされた構成ファイル
/app/payload テンプレートとなる BlackCat マルウェア サンプル。実行時に Munchkin がこれをカスタマイズする
/scripts/smb_common.py SMB 関連の操作用の Python ヘルパー ユーティリティ
/scripts/smb_copy_and_exec.py Python スクリプト。SMB 経由でファイルをコピーして実行するために使う
/scripts/smb_exec.py Python スクリプト。リモート ファイルの実行に使う

表 1. VM OS 内に含まれるファイルのファイル パスとその説明

上記のファイルのほかにも多数の Python スクリプトが /usr/bin ディレクトリーには存在しています。BlackCat オペレーターはこれらのスクリプトをこのあと VM 内で行う更新処理で利用します。

  • DumpNTLMInfo.py
  • Get-GPPPassword.py
  • GetADUsers.py
  • GetNPUsers.py
  • GetUserSPNs.py
  • addcomputer.py
  • atexec.py
  • changepasswd.py
  • dcomexec.py
  • dpapi.py
  • esentutl.py
  • exchanger.py
  • findDelegation.py
  • flask
  • futurize
  • getArch.py
  • getPac.py
  • getST.py
  • getTGT.py
  • goldenPac.py
  • karmaSMB.py
  • keylistattack.py
  • kintercept.py
  • ldapdomaindump
  • ldd2bloodhound
  • ldd2pretty
  • lookupsid.py
  • machine_role.py
  • mimikatz.py
  • mqtt_check.py
  • mssqlclient.py
  • mssqlinstance.py
  • net.py
  • netview.py
  • nmapAnswerMachine.py
  • normalizer
  • ntfs-read.py
  • ntlmrelayx.py
  • pasteurize
  • ping.py
  • ping6.py
  • pip
  • pip3
  • pip3.11
  • psexec.py
  • raiseChild.py
  • rbcd.py
  • rdp_check.py
  • reg.py
  • registry-read.py
  • rpcdump.py
  • rpcmap.py
  • sambaPipe.py
  • samrdump.py
  • secretsdump.py
  • services.py
  • smbclient.py
  • smbexec.py
  • smbpasswd.py
  • smbrelayx.py
  • smbserver.py
  • sniff.py
  • sniffer.py
  • split.py
  • ticketConverter.py
  • ticketer.py
  • tstool.py
  • wmiexec.py
  • wmipersist.py
  • wmiquery.py

攻撃者は、上記の Python スクリプトを多数使い、被害ネットワーク上でのさらなるマルウェア実行、ラテラルムーブ、パスワード ダンプなどを行えます。

この controller というマルウェアは、BlackCat マルウェア ファミリーと非常によく似た方法で Rust プログラミング言語で書かれています。実行すると、controller はまず独自のシングルバイト XOR 演算で多数の文字列を復号します。

画像 2 は、2 つのコードを比較したスクリーンショットです。左のスクリーンショットはオリジナルです。右側のスクリーンショットは復号したランタイム コードです。
図2. ランタイムの文字列の復号

文字列の復号後、基本的なチェックを実行し、期待した構成ファイルやペイロード ファイルが /app ディレクトリー内に存在することを確認します。その後、/app/config ファイルをデシリアライズしてパースします。これらのファイルのいずれかが存在しない場合、またはファイルをパースできない場合、エラー メッセージを表示して終了します。

/app/config ファイルには以下のような情報が豊富に含まれていて、これらの情報を controller マルウェアのサンプルが後で使うことになります。

  • アクセス トークン
  • タスクの識別子
  • 被害者のクレデンシャル (ユーザー名、パスワード、ドメインを含む)
  • BlackCat 被害者の URL
  • ブロックリストに登録されたファイルの種類とパス
  • 暗号化の対象となるホストと共有

構成をパースした後、controller は /payloads/ ディレクトリーを作成してマウントし、これをその後作成する BlackCat インスタンスのホストに使います。controller はカスタマイズした BlackCat サンプルを作成するテンプレートとして前述の /app/payload を使います。このテンプレート ファイル内には、controller がこのファイルの変更時に検索・使用する特定のマーカーがあります。

画像 3 は、2 つの BlackCat サンプルの比較です。左側は BlackCat のテンプレート ファイルです。その行の多くは青で強調表示されています。右は修正後のサンプルです。その行の多くは赤で強調表示されています。
図3. テンプレートと構成をもとに新たな BlackCat サンプルを作成

作成されるファイルは提供された構成をもとにしています。ただし、ファイル名は値をインクリメントして付けられます (以下参照)。

  • /payloads/0
  • /payloads/1

ペイロードを作成し終わると、マルウェアは指定された SMB/CIFS ドライブに感染するため、指定された構成を繰り返し処理します。これらの試みは、標準出力 (STDOUT) に書き込まれるさまざまな出力内容から大まかに掴めます。その例を以下に示します。

(注: 以下の出力では、実際の IP アドレスと共有名を伏せてあります。)

マルウェアの実行が完全に行われた後で VM の電源はオフになり、それ以上のアクションは実行されません。

このマルウェア サンプルには次のメッセージが埋め込まれていることがわかりました。このメッセージは使われてはいませんが、おそらく開発の特定段階で組み込まれ、その後使われなくなったものと思われます。

このメッセージは、BlackCat の作成者からそのアフィリエイトに向け、侵害した環境からこのファイルを削除するように促しているメッセージと思われます。ただ、くだんのアフィリエイトはこのアドバイスに耳を傾けなかったようです。

結論

マルウェア作成者、とくに BlackCat ランサムウェア脅威の背後にいるアクターは、その技術と戦術を繰り返し進化させ続けています。このことは、彼らが開発してアフィリエイトに提供した Munchkin の最近のリリースからも完全に明らかです。

このツールは、VM を活用してホスト上にあるセキュリティ対策を妨害し、この種の脅威に対するセキュリティ コミュニティの防御を出し抜く、というここのところのトレンドに倣うものです。

パロアルトネットワークスのお客様は、以下の製品を通じて、上記の脅威から保護されています。

侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらのフォームからご連絡いただくか、infojapan@paloaltonetworks.comまでメールにてご連絡いただくか、下記の電話番号までお問い合わせください(ご相談は弊社製品のお客様には限定されません)。

  • 北米フリーダイヤル:866.486.4842 (866.4.UNIT42)
  • EMEA: +31.20.299.3130
  • APAC: +65.6983.8730
  • 日本: (+81) 50-1790-0200

パロアルトネットワークスは、ファイル サンプルや IoC (侵害指標) をふくむ調査結果を Cyber Threat Alliance (CTA: サイバー脅威アライアンス) のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使って、お客様に保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害できます。詳細は Cyber Threat Alliance にてご確認ください。

IoC (侵害指標)

/app/controller - Munchkin バイナリー

  • 1a4082c161eafde7e367e0ea2c98543c06dce667b547881455d1984037a90e7d

/app/payload - BlackCat スタブ

  • b4dd6e689b80cfcdd74b0995250d63d76ab789f1315af7fe326122540cddfad2

/scripts/smb_common.py - Python の SMB クラス

  • 41c0b2258c632ee122fb52bf2f644c7fb595a5beaec71527e2ebce7183644db2

/scripts/smb_copy_and_exec.py - Python の SMB コピー/実行 スクリプト

  • 2e808fc1b2bd960909385575fa9227928ca25c8665d3ce5ad986b03679dace90

/app/payload - BlackCat スタブ

  • b4dd6e689b80cfcdd74b0995250d63d76ab789f1315af7fe326122540cddfad2

YARA ルール

追加リソース