ナビゲーションをスキップする
BlackBerry ThreatVector ブログ

MountLocker Ransomware-as-a-Service がアフィリエイトに二重の脅迫機能を提供

本ブログ記事は、2020年12月11日に米国で公開されたBlackBerryのブログ記事の抄訳版です。原文はこちらからご覧頂けます。

2020年10月中旬以来、BlackBerry インシデント対応チームは継続的な調査の一環として、MountLocker アフィリエイトキャンペーンを積極的に追跡しています。通常、アフィリエイトは初期侵害、MountLocker ランサムウェアの拡散、および侵害中のクライアントの機密データの抽出を実行する役割を担います。

我々の研究者および調査員は BlackBerry リサーチ&インテリジェンスチームと連携し、MountLocker に関する次のような広範囲にわたるレポートを作成しました。このレポートには、脅威のオペレーター、アフィリエイト、ランサムウェア、デクリプター、および関連する技法、戦術、手順(TTP)が含まれます。

主な調査結果

  • MountLocker は2020年7月以来アクティブな Ransomware-as-a-Service(RaaS)です。
  • MountLocker ランサムウェアは2020年11月上旬、標的とするファイルタイプを広げ、セキュリティソフトウェアを回避するために更新されました。
  • 被害者のファイルは ChaCha20 を使用して暗号化され、ファイルの暗号化鍵は RSA-2048 を使用して暗号化されます。
  • このランサムウェアは堅牢であるように見えます。簡単な鍵の復元やデータの復号を可能にする明白な弱点はありません。ただし、MountLocker は鍵の生成において暗号法論的に不安定な方法を使用しており、これが攻撃される可能性があります。
  • MountLocker のアフィリエイトでは以下の行動が確認されています。
    • CobaltStrike Beacon などの市販のツールを使用して MountLocker ランサムウェアを展開する。
    • 暗号化の前に FTP を介してクライアントの機密データを抽出する。
    • 盗まれたデータを取り戻し、その一般公開を阻止するために高額を支払うことを被害者に強要する、恐喝および脅迫戦術を実行する(オペレーターとともに)。
  • RaaS およびアフィリエイトプログラムの標的は地理的に多様であり、より顕著になっています。

オペレーターとアフィリエイト

MountLocker 関連のアフィリエイトキャンペーンに対する我々の調査は、攻撃者は多くの場合、リモートデスクトップ(RDP)と盗み出した認証情報を使用して被害者の環境へのアクセスを得ていることを示しています。ある例では、組織内に足掛かりを築いたあと、活動が再開されたのは数日後でした。この休止期間中、攻撃者はおそらくアフィリエイトプログラムに参加し、ランサムウェアを入手するために、MountLocker のオペレーターと交渉していたのでしょう。MountLocker ランサムウェアを入手した攻撃者は、CobaltStrike Beacon や Joeware の AdFind などの複数の「公開されている」ツールを使用して活動を再開したことが確認されています。約24時間の間に以下のことが行われました。

  • AdFind を使用してネットワークの偵察を実行する。
  • カスタムバッチファイルを使用し、FTP を介して主要なシステムから機密文書を抽出する。
  • CobaltStrike Beacon を利用して、MountLocker ランサムウェアを水平的に拡散および展開する。

図1:MountLocker のキルチェーン

以下の未加工のバッチスクリプト(機密情報の除去は実施)は、機密データを抽出するために攻撃者により使用されたものです。スクリプトではまず、curl を使用して「desktop.ini」ファイルをサーバーにアップロードし、次にハードコードされたルートディレクトリ(localdir)とすべてのサブディレクトリを列挙します。その際に各ファイルは FTP サーバーにアップロードされます。

図2:MountLocker の FTP 抽出バッチスクリプト

攻撃に成功した MountLocker アフィリエイトは、復号サービスと盗み出したデータの一般公開の阻止に数百万ドルもの支払いを請求することが知られています。MountLocker のオペレーターは現在、ダークウェブ上でサイトをホスティングしており、ここで最近の標的を公表し、漏洩させたデータへのリンクを提供しています。このサイトには現在5件の被害者が掲載されていますが、実際の数はもっと多いと思われます。

図3:標的と漏洩を公表する MountLocker のサイト

図4:MountLocker のフルデータダンプ

ランサムウェア

サイズが100 KB 未満である MountLocker ランサムウェアは、軽量で構造が単純です。通常は32ビットまたは64ビットの Windows ポータブル実行可能(PE)ファイルとして展開されますが、Microsoft インストーラー(MSI)パッケージとして展開されることもあります。

図5:64ビットのMountLocker PE ファイルの構成

特徴

  • 単純で軽量の効率的なランサムウェア
  • 被害者組織ごとのほぼ一意なファイル拡張子
  • ファイルの暗号化に ChaCha20、鍵の暗号化に RSA-2048 を使用
  • GetTickCount を使用した脆弱な鍵生成

動作

実行時、MountLocker はオペレーターにより指定されたコマンドライン引数を処理します。

引数

説明

/log:[C|F]

C = コンソールにログを出力

F = ファイルにログを記録(.log 拡張子)

/scan:[L|N|S]

L = ローカルドライブ

N = ネットワークドライブ

S = ネットワーク共有(現在は未実装)

/marker:[a-zA-Z0-9_-.]{32}

ボリュームの暗号化を開始する前に、各ボリュームのルートディレクトリに指定されたファイル名でマーカーファイルを作成

/nodel

実行後、MountLocker が自身を削除することを阻止(通常は MSI としての起動時に使用)


図6:コマンドライン引数

次に、MountLocker はデバッグロギングを初期化し、1回実行のミューテックスを作成します。このミューテックスは Windows ディレクトリを含むボリュームのシリアル番号に基づいており、32文字の大文字16進文字列を生成します。

図7:1回実行のミューテックス

続いてランサムウェアは、暗号化鍵を初期化し、身代金要求メッセージを作成します。MountLocker には、攻撃者により提供されている2048ビットの RSA 公開鍵が組み込まれています。この鍵がインポートされ、暗号法論的に不安定な GetTickCount API を使用して生成されたランダムなセッション鍵を暗号化するために使用されます。これにより、ランサムウェアの実行時のタイムスタンプカウンター値がわかれば、ブルートフォース攻撃によりセッション鍵を特定するわずかな可能性が生まれます。

暗号化鍵の初期化後、MountLocker はテンプレートから身代金要求メッセージを作成し、ランサムウェアのファイル拡張子をレジストリに追加します。ユーザーが暗号化されたファイルをダブルクリックすると、Explorer で身代金要求メッセージが開きます。ファイル拡張子は16進エンコードされた4バイト(8文字)の「クライアント ID」であり、これは被害者組織ごとに一意です。

図8:暗号化鍵と身代金要求メッセージの設定

図9:MountLocker に組み込まれている攻撃者の RSA 公開鍵

身代金要求メッセージはサンプルごとにわずかに異なる場合があり、AES 暗号化が使用されていると誤って記載されている場合もあります。身代金要求メッセージには、「ダークウェブ」のチャットサービスを使用して MountLocker のオペレーターに連絡し、復号ソフトウェアの価格について話し合うための Tor .onion URL が含まれます。

図10:典型的な MountLocker の身代金要求メッセージ

初期化が完了すると、MountLocker は暗号化の前に、以下のようなセキュリティソフトウェア、オフィスアプリケーション、ブラウザー、およびデータベースに属するさまざまなプロセスの終了を試みます。

  • agntsvc
  • firefox
  • outlook
  • tbirdconfig
  • bengine
  • infopath
  • OWSTIMER
  • thebat
  • benetns
  • isqlplussvc
  • postgres
  • thunderbird
  • beremote
  • msaccess
  • powerpnt
  • veeam
  • beserver
  • mspub
  • pvlsvr
  • visio
  • dbeng50
  • mydesktopservice
  • SAVAdminService
  • VxLockdownServer
  • dbsnmp
  • mydesktopqos
  • SavService
  • winword
  • dfssvc
  • mysql
  • sql
  • wordpad
  • dfsrs
  • ocautoupds
  • sqbcoreservice
  • wsstracing
  • EduLink2SIMS
  • ocomm
  • sophos
  • WSSADMIN
  • encsvc
  • ocssd
  • steam
  • xfssvccon
  • excel
  • onenote
  • swc_service

 

  • fdhost
  • oracle
  • synctime

 


次に、MountLocker は暗号化するファイルを探して、最初にローカルボリューム、続いてリモートボリュームを列挙します。見つけた各ボリュームに対して、以下のステップを実行します。

1.      コマンドラインで(/marker: を使用して)指定されている場合、ボリュームのルートにマーカーファイルを作成します。

2.      すべてのファイル/フォルダーに対して以下を繰り返します。

a.      FindFirstFile 関数により ERROR_ACCESS_DENIED が返される場合、セキュリティ記述子内の所有者と DACL(随意アクセス制御リスト)の値を親プロセスと同じものに設定することにより、ルートディレクトリの権限の変更を試みます。

3.      見つけたファイルごとに以下を実行します。

a.      親フォルダーのパスが以下のいずれかであるか、つまり暗号化から除外されるかどうかをチェックします。

  • System Volume Information
  • WINNT
  • $RECYCLE.BIN
  • NVIDIA
  • Windows
  • SYSTEM.SAV
  • $WINDOWS.~BT
  • PerfLog
  • Windows.old
  •  Intel
  • Program Files
  • Games
  • Program Files (x86)
  • Temp
  • WINNT
  • Tmp


b.       ファイル拡張子が許可されているかどうかをチェックします。MountLocker には、暗号化の標的とする2,600を超えるファイル拡張子の膨大なリストが含まれます。これには、データベース、文書、アーカイブ、画像、会計ソフトウェア、セキュリティソフトウェア、ソースコード、ゲーム、バックアップ、およびさまざまなカスタムデータ形式に対する既知のファイル拡張子が含まれます。実行可能ファイルに対する一般的なファイル拡張子(.exe、.dll、.sys)は標的ではありません。

c.       ファイル名が「RecoveryManual.html」ではないことを確認します。

d.      ファイルをメモリマップします。

e.      暗号法論的に不安定な GetTickCount API を再び使用して、ファイルに対するランダムな暗号化鍵を生成します(Sleep API コールを使用せずに rdtsc によって)。

Figure 11. Create ChaCha20 file key

a.      ChaCha20 を使用してセッション鍵でファイル鍵を暗号化し、暗号化されたファイル鍵(32バイト)と暗号化されたセッション鍵(256バイト)の両方をファイルに書き込みます。

図12:ファイル鍵のセッション鍵での暗号化とファイルヘッダーの書き込み

a.      入力ファイルと ChaCha20 をメモリマップし、ファイル鍵を使用して64 MB のチャンクで暗号化します。

図13:ファイルの内容の暗号化

a.      ファイルを移動し、所有者と DACL を元に戻します。

図14:暗号化後のファイルの移動とオプションでの指定されたセキュリティ情報の設定

暗号化後、MountLocker により暗号化されたファイルの構成は以下のようになります。

  • 赤で示した部分は、ChaCha20 を使用してセッション鍵で暗号化された32バイトの ChaCha20 ファイル鍵です。
  • 緑の部分は、RSA を使用して攻撃者の2048ビットの公開鍵で暗号化された ChaCha20 セッション鍵です。
  • 青で示した部分は、ChaCha20 を使用して、ランダムに生成されたファイル鍵で暗号化された元のファイルの内容です。

図15:MountLocker ファイルの構成

暗号化プロセスが完了すると、暗号化されたファイルの復元を阻止するために、MountLocker はボリュームシャドウコピーを削除します。

図16:ボリュームシャドウコピーの削除

最後に、/nodel コマンドライン引数が指定されていなければ、MountLocker は以下のバッチファイルをドロップして、自身をディスクから削除します。

図17:MountLocker のクリーンアップバッチファイル

図18:クリーンアップバッチファイルの実行

バージョン2

MountLocker バージョン2は、2020年11月上旬のコンパイルタイムスタンプ(11月6日)で、同月下旬に出回り始めました。ファイル拡張子の膨大な「対象」リストが削除されたことにより、以前のバージョンよりも大幅に小さくなっています(約50% 小さく、64ビットビルドで46 KB)。MountLocker バージョン2ではこのプロセスを一新し、暗号化から明示的に除外するファイル拡張子の短いリストを含んでいます。

  • .exe, .dll, .sys, .msi, .mui, .inf, .cat, .bat, .cmd, .ps1, .vbs, .ttf, .fon, .lnk

全体的には、コードは最初の MountLocker のリリースと約70% 類似しており、以下の点に明らかな変更はありません。

  • 暗号の初期化と身代金要求メッセージの作成
  • クライアント ID の計算
  • ボリュームの列挙
  • DACL の変更
  • ChaCha20/RSA 暗号化

更新内容について、最も明らかな違いはデバッグメッセージの変更です。

図19:MountLocker バージョン2の更新されたデバッグメッセージ

最も大きな変更は、プロセスの終了コードとボリュームシャドウコピーの削除に加えられています。これは、暗号化前に一時ディレクトリに書き込まれ、PowerShell ワンライナーにより実行される PowerShell スクリプトを使用して実施されるようになっています。

図20:MountLocker バージョン2のPowerShell スクリプトのドロップと起動

このスクリプト自体は、別の PowerShell スクリプトを単純に Base64 デコードして gzip 解凍します。そのスクリプトが iex により起動されます。

図21:MountLocker の PowerShell デコーダ

デコードされた下層の PowerShell スクリプトは、ボリュームシャドウコピーを削除してから、Windows ディレクトリ外で実行されているすべてのサービスとプロセスの終了を試みます。このスクリプトは、それ自身、Tor、PowerShell、複数のブラウザー、および多数のセキュリティソフトウェアに属するプロセスは終了しません(被害者が Tor を使用して MountLocker のオペレーターに連絡し、支払いを交渉できるようにするため)。

図22:MountLocker バージョン2のプロセス終了スクリプト

MountLocker は、アラート処理時にプロセスツリー全体を終了するように設定されていないセキュリティソフトウェアを回避しようとします。これを、ボリュームシャドウコピーの削除、および別のプロセス(powershell.exe)でのプロセスの終了により実行します。

最後に、膨大なファイル拡張子リストの削除に加え、MountLocker バージョン2では、ファイルの暗号化から除外されるフォルダーのリストが更新されています。

  • :\\Windows\\
  • :\\ProgramData\\Microsoft\\
  • :\\System Volume Information\\
  • \\Local\\Packages\\
  • :\\$RECYCLE.BIN\\
  • :\\ProgramData\\Packages\\
  • :\\SYSTEM.SAV
  • \\Windows Defender\\
  • :\\WINNT
  • \\microsoft shared\\
  • :\\$WINDOWS.~BT\\
  • \\Google\\Chrome\\
  • :\\Windows.old\\
  • \\Mozilla Firefox\\
  • :\\PerfLog\\
  • \\Mozilla\\Firefox\\
  • \\WindowsApps\\
  • \\Internet Explorer\\
  • \\Microsoft\\Windows\\
  • \\MicrosoftEdge\\
  • \\Roaming\\Microsoft\\
  • \\Tor Browser\\
  • \\Local\\Microsoft\\
  • \\AppData\\Local\\Temp\\
  • \\LocalLow\\Microsoft\\

 

図23:MountLocker バージョン2で更新された除外フォルダー

デクリプター

パブリックドメインで確認できた唯一の MountLocker デクリプターは、最初の32ビット MountLocker ランサムウェアコードベースにほぼ基づいています。1回実行のミューテックス、プロセスの終了、ボリュームの列挙など、元の機能の約70% を共有しています。

復号プロセスでは、プログラムはすべてのローカルおよびネットワークボリュームやマップされた共有を検索して、暗号化されたファイルを探します。暗号化されたファイルとセッション鍵が各ファイルから読み出され、セッション鍵のチェックサムが計算されます。チェックサムがグローバルセッション鍵のチェックサムと一致しなければ、攻撃者の RSA 秘密鍵がインポートされ、セッション鍵の復号に使用されます。この復号されたセッション鍵で、ChaCha20 を使用してファイル鍵が復号されます。

図24:セッション鍵を使用したファイル鍵の読み出しと復号

図25:攻撃者の RSA 秘密鍵の読み込みとセッション鍵の復号

図26:デクリプターに埋め込まれた攻撃者の RSA 秘密鍵

最後に、ファイル鍵を使用して、ファイルが64 MB のチャンクで ChaCha20 復号されます。

図27:ファイルの ChaCha20 復号

結論

MountLocker のオペレーターは明らかにまだウォーミングアップ中です。脅迫およびデータ漏洩の注目度の高さから、身代金の要求はさらに高騰しており、7月の遅めの出だし以降、MountLocker は急速に勢いを増しています。MountLocker のアフィリエイトは一般的に手が早く、わずか数時間で主要な標的から機密文書をすばやく抽出し、暗号化します。

その発足以来、MountLocker グループは拡大し、そのサービスとマルウェアを改良し続けてきました。現在の機能は特に高度ではありませんが、このグループは成長し続け、短期間で台頭すると考えられます。

我々の AI に基づくエンドポイントセキュリティソリューションであるBlackBerry® Protect®は、お客様の環境で複数の MountLocker 攻撃を阻止し、ランサムウェアが展開されることを防ぎました。BlackBerry Protect は機械学習を使用して、単純な脅威と高度な脅威の両方に対する自動化された保護機能を提供します。そのために、シグネチャ、ヒューリスティック、サンドボックス、クラウド接続、または大がかりな人的介入は必要ありません。

付録

侵入の痕跡(IOC)

痕跡

タイプ

説明

4b917b60f4df6d6d08e895d179a22dcb7c38c6a6a6f39c96c3ded10368d86273

SHA256

MountLocker(32ビット)バージョン1

f570d5b17671e6f3e56eae6ad87be3a6bbfac46c677e478618afd9f59bf35963

SHA256

MountLocker(64ビット)バージョン1

964170baffd8f88e6c7fc189d43dfaa32c8dbcee02d7afa573058f9af16dac3b

SHA256

MountLocker(32ビット)バージョン1

30050b3673c720729cd6a61803059b16dd3aa526683e7342aae0261e4c78fa83

SHA256

MountLocker(MSI)バージョン1

31630d16f4564c7a214a206a58f60b7623cd1b3abb823d10ed50aa077ca33585

SHA256

MountLocker(32ビット)バージョン1

0aa8099c5a65062ba4baec8274e1a0650ff36e757a91312e1755fded50a79d47

SHA256

MountLocker(64ビット)バージョン1

5eae13527d4e39059025c3e56dad966cf67476fe7830090e40c14d0a4046adf0

SHA256

MountLocker(64ビット)バージョン1

96056182d93b582b3d56bd82a560bafd5cde413c4ca216f4f62ab446c61c9b6a

SHA256

MountLocker(32ビット)バージョン1

2d2d2e39ccae1ff764e6618b5d7636d41ac6e752ce56d69a9acbb9cb1c8183d0

SHA256

MountLocker(64ビット)バージョン2

c0aa74bc157788d0329b81ff87fc4d4b764d4823159bccd1f538cc0301a625f4

SHA256

3005… および 3163…に対する MountLocker デクリプター

qiludmxlqqotacf62iycexcohbka4ezresf5jmwdoh7iyk3tgguzaaqd.onion

ドメイン

MountLocker 連絡 URL

zsa3wxvbb7gv65wnl7lerslee3c7i27ndqghqm6jt2priva2qcdponad.onion

ドメイン

MountLocker 連絡 URL

br3o5we2252csfnhotfbsfx7ch5csivuuidhdefbhmg2zmbqebs6znad.onion

ドメイン

MountLocker 連絡 URL

55ltvpboyvhg7ezmefe72jgioukb52t6nkdiuis5yishczlbtadmr2qd.onion

ドメイン

MountLocker 連絡 URL

fzl2tjt7hoyf4oeynma57wjk4w5cyi37o7ihzlkvfsjtxmk7elzp7iqd.onion

ドメイン

MountLocker 連絡 URL

6mlzahkc7vejytppbqhqjou4ipftgs3gizof2x4zklblliayhsqb3wad.onion

ドメイン

MountLocker 連絡 URL

.ReadManual.[0-9]{8}$

ファイル名

MountLocker ファイル拡張子

vssadmin.exe delete shadows /all /Quiet

コマンドライン

MountLocker—ボリュームシャドウコピーの削除

HKCU\Software\Classes\.<CLIENT_ID>\shell\Open\command\ @="explorer.exe RecoveryManual.html"

レジストリ値

MountLocker—Explorer で readme を
開くためのファイル拡張子の登録

powershell.exe -windowstyle hidden -c $mypid='%u';[System.IO.File]::ReadAllText('%s')|iex

コマンドライン

MountLocker バージョン2—
プロセス終了スクリプトの実行に使用

powershell -nop -w hidden -encodedcommand

コマンドライン

エンコードされた PowerShell の起動に使用 (CobaltStrike Beacon を含む。)

 

MITRE ATT&CK

戦術

ID

名前

説明

初期アクセス

T1078

有効なアカウント

盗み出した認証情報を使用した初期侵害の疑い

T1133

外部リモートサービス

足掛かりを利用するために RDP を使用します。

実行

T1059.001

コマンドとスクリプトのインタープリター:PowerShell

PowerShell でラップされた CobaltStrike Beacon

T1569

システムサービス

PowerShell でラップされた CobaltStrike Beacon

永続化

T1546.001

イベントトリガによる実行:デフォルトのファイル関連付けの変更

MountLocker は自身のファイル拡張子(.ReadManual.[0-9]{8}$)が explorer.exe で開くように関連付けます。

防衛回避

T1222.001

ファイルとディレクトリの権限の変更:Windows のファイルとディレクトリの権限の変更

MountLocker はファイル DACL を変更します。

T1070.004

ホスト上の痕跡の削除:ファイルの削除

MountLocker は実行後に自身を削除します。

探索

T1069.002

権限グループの探索:ドメイングループ

偵察のために AdFind を使用します。

抽出

T1020

自動抽出

FTP により機密文書をアップロードします。

コマンドアンドコントロール

T1071

アプリケーション層プロトコル

CobaltStrike Beacon (SMB/named pipe)

T1071.001

アプリケーション層プロトコル: Web Protocols

CobaltStrike Beacon(SMB/名前付きパイプ)

影響

T1486

影響を与えるためにデータを暗号化

ファイルを暗号化して身代金を要求します。

T1490

システムの復元の阻止

MountLocker は vssadmin.exe を使用してすべてのボリュームシャドウコピーを削除します。

T1489

サービスの停止

MountLocker は暗号化前にさまざまなシステムサービスを停止します。

ソフトウェア

S0154

Cobalt Strike

CobaltStrike Beacon (HTTP/SMB)

 

検知

以下の VirusTotal クエリは、単純なコンテンツ検索を使用して関連するサンプルを探します。

https://www.virustotal.com/gui/search/content%253A%2522Crypt%2520Avg%253A%2522/files

以下の VirusTotal クエリは、動作検索を使用して関連するサンプルを探します。

https://www.virustotal.com/gui/search/behaviour_files%253A%2522.readmanual.%2522/files

YARA

以下の YARA ルールは、PE ファイルの .rdata セクションで、一般的な MountLocker ランサムウェア文字列を探します。

import "pe"

rule Ransomware_MountLocker
{
    meta:
        description = "Rule to detect MountLocker ransomware"
        author = "BlackBerry Research and Intelligence Team"
        date = "2020-11-24"

    strings:
        $a0 = "cid=%CLIENT_ID%"
        $a1 = "<h1>Your ClientId:</h1>"
        $a2 = "<title>RECOVERY MANUAL</title>"
        $a3 = ".ReadManual.%0.8X" wide
        $a4 = "RecoveryManual.html" wide
        $a5 = "Crypt Avg:" wide ascii
        $a6 = "[I] Check double run..."
        $a7 = "[W] SKIP FOLDER BL: %ws"
        $a8 = "[W] SKIP FILE RP(%0.8X): %ws"
        $a9 = "[E] ERROR: malloc(LOCK_CONTEXT)=%u"
        $aA = "[I] SCAN VOLUME: %ws"
        $aB = "[E] ERROR: RSA(MasterKey)=%u"
        $aC = "locker.check.dbl_run" wide
        $aD = "locker.file > crypt" wide


    condition:
        uint16(0) == 0x5a4d and
        filesize < 1MB and
        // Check for unique strings common across known samples in .rdata section
        for any of ($a*) : ( $ in (pe.sections[pe.section_index(".rdata")].raw_data_offset..pe.sections[pe.section_index(".rdata")].raw_data_offset+pe.sections[pe.section_index
(".rdata")].raw_data_size) )
}

The BlackBerry Research and Intelligence Team

About The BlackBerry Research and Intelligence Team

BlackBerry の Research and Intelligence Team は、新たに生じている脅威と持続的な脅威を検証し、セキュリティ担当者とその所属企業のために、インテリジェンス解析を提供しています。