本ブログ記事は、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件の被害者が掲載されていますが、実際の数はもっと多いと思われます。
図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」であり、これは被害者組織ごとに一意です。
図9:MountLocker に組み込まれている攻撃者の RSA 公開鍵
身代金要求メッセージはサンプルごとにわずかに異なる場合があり、AES 暗号化が使用されていると誤って記載されている場合もあります。身代金要求メッセージには、「ダークウェブ」のチャットサービスを使用して MountLocker のオペレーターに連絡し、復号ソフトウェアの価格について話し合うための Tor .onion URL が含まれます。
図10:典型的な MountLocker の身代金要求メッセージ
初期化が完了すると、MountLocker は暗号化の前に、以下のようなセキュリティソフトウェア、オフィスアプリケーション、ブラウザー、およびデータベースに属するさまざまなプロセスの終了を試みます。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
次に、MountLocker は暗号化するファイルを探して、最初にローカルボリューム、続いてリモートボリュームを列挙します。見つけた各ボリュームに対して、以下のステップを実行します。
1. コマンドラインで(/marker: を使用して)指定されている場合、ボリュームのルートにマーカーファイルを作成します。
2. すべてのファイル/フォルダーに対して以下を繰り返します。
a. FindFirstFile 関数により ERROR_ACCESS_DENIED が返される場合、セキュリティ記述子内の所有者と DACL(随意アクセス制御リスト)の値を親プロセスと同じものに設定することにより、ルートディレクトリの権限の変更を試みます。
3. 見つけたファイルごとに以下を実行します。
a. 親フォルダーのパスが以下のいずれかであるか、つまり暗号化から除外されるかどうかをチェックします。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 は以下のバッチファイルをドロップして、自身をディスクから削除します。
図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では、ファイルの暗号化から除外されるフォルダーのリストが更新されています。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
図23:MountLocker バージョン2で更新された除外フォルダー
デクリプター
パブリックドメインで確認できた唯一の MountLocker デクリプターは、最初の32ビット MountLocker ランサムウェアコードベースにほぼ基づいています。1回実行のミューテックス、プロセスの終了、ボリュームの列挙など、元の機能の約70% を共有しています。
復号プロセスでは、プログラムはすべてのローカルおよびネットワークボリュームやマップされた共有を検索して、暗号化されたファイルを探します。暗号化されたファイルとセッション鍵が各ファイルから読み出され、セッション鍵のチェックサムが計算されます。チェックサムがグローバルセッション鍵のチェックサムと一致しなければ、攻撃者の RSA 秘密鍵がインポートされ、セッション鍵の復号に使用されます。この復号されたセッション鍵で、ChaCha20 を使用してファイル鍵が復号されます。
図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 |
名前 |
説明 |
初期アクセス |
有効なアカウント |
盗み出した認証情報を使用した初期侵害の疑い |
|
外部リモートサービス |
足掛かりを利用するために RDP を使用します。 |
||
実行 |
コマンドとスクリプトのインタープリター:PowerShell |
PowerShell でラップされた CobaltStrike Beacon |
|
システムサービス |
PowerShell でラップされた CobaltStrike Beacon |
||
永続化 |
イベントトリガによる実行:デフォルトのファイル関連付けの変更 |
MountLocker は自身のファイル拡張子(.ReadManual.[0-9]{8}$)が explorer.exe で開くように関連付けます。 |
|
防衛回避 |
ファイルとディレクトリの権限の変更:Windows のファイルとディレクトリの権限の変更 |
MountLocker はファイル DACL を変更します。 |
|
ホスト上の痕跡の削除:ファイルの削除 |
MountLocker は実行後に自身を削除します。 |
||
探索 |
権限グループの探索:ドメイングループ |
偵察のために AdFind を使用します。 |
|
抽出 |
自動抽出 |
FTP により機密文書をアップロードします。 |
|
コマンドアンドコントロール |
アプリケーション層プロトコル |
CobaltStrike Beacon (SMB/named pipe) |
|
アプリケーション層プロトコル: Web Protocols |
CobaltStrike Beacon(SMB/名前付きパイプ) |
||
影響 |
影響を与えるためにデータを暗号化 |
ファイルを暗号化して身代金を要求します。 |
|
システムの復元の阻止 |
MountLocker は vssadmin.exe を使用してすべてのボリュームシャドウコピーを削除します。 |
||
サービスの停止 |
MountLocker は暗号化前にさまざまなシステムサービスを停止します。 |
||
ソフトウェア |
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 strings:
|