本ブログ記事は、2022年3月16日に米国で公開されたBlackBerryのブログ記事の抄訳版です。原文はこちらからご覧頂けます。
概要
BlackBerry Threat Intelligence は、新しい RaaS(Ransomware-as-a-Service)のファミリーを特定し、ベータ段階と思われるリリースまで起源をたどることに成功しました。他の多くのランサムウェア株と同様に、LokiLocker もファイルを暗号化して、期限までに身代金を支払わないとマシンを使用できないようにします。しかし、名前の由来となった北欧神ロキのように、この脅威は狡猾な罠を仕掛けてきます。その一つが、脅威アクターとしてイランが疑われるように仕向ける、「偽旗」戦術です。
神話のロキは、あらゆるものに変身できる、トリックスター(巧みないたずらを好む神)として描かれています。怒りっぽい火の神々の一員ではあるものの、他の神々とは敵対関係にあり、しばしば招かれていない祝宴に押しかけては食べ物と酒を要求したといいます。LokiLocker も同じように振る舞います。自分には正当な所有権のないものを執拗に要求するのです。
LokiLocker は英語話者の Windows® PC ユーザーを標的とした比較的新しいランサムウェアファミリーで、最初に発見されたのは 2021 年 8 月半ばでした。2016 年に悪名を馳せた、より古いランサムウェアファミリー Locky や、インフォスティーラの LokiBot と混同しないでください。LokiLocker は LockBit ランサムウェアといくつかの類似点(レジストリ値、身代金要求のファイル名)があるものの、直系の子孫ではないようです。
名前の由来となったロキ神と同じように、LokiLocker は招かれざる客として被害者の生活に入り込み、めぼしい財産がないか探しはじめます。その後、ファイルを暗号化し、再び使用できるようにするための身代金を要求します。このマルウェアは .NET で作成され、KoiVM と呼ばれる追加の仮想プラグインを使用した NETGuard(ConfuserEx の改変版)によって保護されています。KoiVM は、元々 .NET アプリケーション向けにライセンス付きで市販されていた保護機能プラグインでしたが、2018 年ごろからコードがオープンソース化され(または漏洩して)、現在では GitHub で誰でも手に入れることができます。Koi は、ハッキングツールやクラックツールで広く使われていると思われますが、これまでのところ、BlackBerry で確認された他のマルウェアでの使用例は、それほど多くありません。
破壊神ロキ
LokiLocker は、ファイルの暗号化に AES、鍵の保護に RSA という標準的な組み合わせによって、被害者のローカルドライブとネットワーク共有のファイルを暗号化します。次に、身代金の支払い方法に関する指示を受け取るために、攻撃者にメールを送付するよう指示します。
LokiLocker はワイパー機能を備えていると脅すことも忘れません。指定した期限までに身代金を支払わなかった場合、システムファイル以外のすべてのファイルを削除し、マスターブートレコード(MBR)を上書きすることで、被害者のファイルをすべて消去しシステムを使用できなくするというのです。被害者は誰もが一撃で仕留められます。
LokiLocker は、利用を限定された RaaS(Ransomware-as-a-Service)として機能し、慎重に選ばれた比較的少数の「会員」に秘密裏に販売されているものと思われます。各会員は選ばれたユーザー名で識別され、一意のチャット ID 番号を割り当てられます。BlackBerry の研究者が発見した LokiLocker のサンプルからは、現在およそ 30 の異なる「VIP」会員の存在が確認されています。
このランサムウェアの最も早い時期のサンプルの一つは、当初、トロイの木馬化された次のような総当たりチェッカ(ブルートチェッカ)型のハッキングツールに仕込まれて配付されました。
- PayPal BruteChecker
- Spotify BruteChecker
- PiaVPN Brute Checker By ACTEAM
- FPSN Checker by Angeal (MR_Liosion によってクラックされたもの)
ブルートチェッカとは、盗まれたアカウントの認証を自動化し、クレデンシャルスタッフィングと呼ばれる技法で他のアカウントへのアクセス権を得るためのツールです。これらのハッキングツールによって配付された LokiLocker は、会員に広く提供する前の、ある種のベータテスト段階にあるバージョンであった可能性があります。
確認された被害者は世界各地に散らばっているものの(会員ごとに標的を選ぶパターンが異なると思われるため当然予想されることです)、主に東欧とアジアに集中しています。
LokiLocker RaaS の信頼できる正確な起源を特定することはできませんでしたが、埋め込まれていたデバッグ用の文字列はすべて英語であったことは特筆すべき事実と言えるでしょう。ロシアや中国を起源とするマルウェアの大半は英語を使用していません。記述されていた英語には、ほとんど誤りやミススペルがありませんでした。
さらに興味深いのは、LokiLocker のごく初期のサンプルの配付に使われたクラッキングツールの一部が、AccountCrack と呼ばれるイランのクラッキングチームによって開発されたと思われる点です。また、既知の LokiLocker 会員の少なくとも 3 名は、イランのハッキングチャネルに固有のユーザー名を使用しています。これが LokiLocker のイラン起源説を裏付けるのか、あるいは本当の脅威アクターがイランの攻撃者に罪を着せようとしているのかが、完全に明らかになったわけではありません。
LokiLocker の詳細
C# コードを調査するには、まず DNSpy でファイルを開いてデコンパイルする必要があります。図 1 に示すとおり、元のファイル名 "svchost.exe" と、NETGuard/KoiVM v0.2.0-custom への参照を確認できます。
図 1 - KoiVM 難読化機能のバージョン
名前空間を調べると、すぐに 2 つのラベル付きクラス "Koi" と "NETGuard" および難読化された関数名を持つ多数のクラスを突きつけられました。これらの関数名は、いずれも複数文字の "Z" で始まっています(図 2)。これは、他の名前空間にも当てはまることです。
図 2 - Koi、NETGuard、および難読化されたクラス名
その名が示すとおり、KoiVM は仮想マシン(VM)であり、C# の難読化ツール ConfuserEx で動作するよう設計されたものです。仮想化は、難読化の一形態として解析をより困難にします。KoiVM のドキュメントで説明しているように、これは「.NET の opcode を、Koi のマシンだけが理解できる新しいものに変換」することで実現されます。
通常、KoiVM のバニラ実装では、OldRod と呼ばれるツールによる脱仮想化が可能です。このツールは、KoiVM の仮想化を無効にするために専用に開発されたもので、デコンパイルされたコードを人間がより理解しやすいものに変換します。しかし、KoiVM を改変して、OldRod が特定の署名や必要なデータを見つけられなくするのは簡単です。そして、そのような改変に対処できるようツール自体を改良しないかぎり、脱仮想化は失敗するでしょう。
BlackBerry の研究者が解析したサンプルでは OldRod は機能しませんでした。それは COR20 メタデータテーブルのヘッダー内に #Koi ストリームが記述されていなかったためであり、解析は振り出しに戻りました。
興味を引く名前空間がいくつか存在したことは指摘しておく必要があるでしょう。特に図 3 に示したような "Loki" で始まるものです。クラスに含まれるコードを調べる段階で、ある問題に直面します(今のところ)。中身が空であったり、デコンパイルすると DNSpy がエラーをスローしたりするのです。
図 3 - Loki 関数 - 空またはデコンパイル不能
Loki.Pinvoke には、クラス ZZZZX が含まれ(図 4)、クラス自体の中身は、さまざまな Windows API に対するラッパーです。これらのラッパーの 1 つを呼び出すことで、DLL および指定された関数をインポートします。これは、難読化に加え、Windows API の直接呼び出しをすべて排除するというメリットをもたらします。たとえば、Kernel32.dll の FindNextFile に対するすべての呼び出しを、C# 関数 ZZZZZf を呼び出すだけで実現できるのです。
図 4 - WinAPI のラッパー
もう一つの注目すべき点は「会員設定」です。ここには、この後、詳述するいくつかの設定オプションが含まれます。
図 5 - Loki.Config
ここまで、バイナリの主な特徴について、いくつか検討してきました。続いて、より具体的な詳細を掘り下げてみましょう。
展開
OldRod ではバイナリを脱仮想化できませんでしたが、まだ、すべての道が閉ざされたわけではありません。昔ながらの力仕事を少々とデバッグの妙技によって、バイナリを旧来の方法で解析することは可能です。DNSpy ではエントリポイントまたはプロセス生成にブレークポイントを設定できないことが判明しました。しかし最初の名前空間コンストラクタ(.cctor))に移動することで、Koi() 関数の初期呼び出しにブレークポイントを設定し、そこからステップインして図 6 のような状態に到達できることがわかりました。
図 6 – KoiVM で仮想化された関数
Koi() クラス内には、324 回の関数呼び出しがあります。しかし、多くは繰り返しで、おそらく VM 環境を設定しているものと思われます。注目した呼び出しのうち重要なのは、最初の呼び出し、最後から 2 番目の呼び出し、最後の呼び出しの 3 つだけです。
最初の展開関数
最初の関数は、モジュールのベースアドレスをフェッチし、自分自身をメモリ内にデコードする処理へと進みます。それには、一連の畳み込み XOR と変数割り当てが使用されます。この処理が完了すると、PAGE_EXECUTE_READWRITE 権限で VirtualProtect が呼び出されます。
その後、最後のループで、権限が変更された同じ場所に、さらにデータをデコードします。この最初の関数全体としての目的は、後ほど使用するためのデコード関数をいくつかデコードすることにあるようです。
第 2 (最後)の展開関数
最初に大きなバイト配列をグローバル変数内に定義します(図 7)。各バイトは、バイト配列内の位置に対して XOR されます。この演算が完了すると、得られたデータを GZIP で展開します。
図 7 - ByteArray の定義、XOR デコード、GZip 展開
次に、このデータを、以前は空だったか、デコンパイルできなかった関数、つまり最初に確認した図 3 の "Loki.*" クラス内の関数を設定するために使用します。
これでも、まだ最終関数ではない
ここまでで重要な関数はデコードされ解決されたものの、実行を Loki のコアに渡す前に、もう一つだけ実行すべき最後の手順があります。その関数は、スキャンソリューションを無効化するために、いくつかの特徴的な手段を用いて実行可能ファイルを破壊します。
最初の関数と同様に、メモリ内のモジュールへのハンドルを取得します。そこから、いくつかの操作を実行します。たとえば CoreExeMain と Mscoree.dll のインポート記述子テーブルに 2 つの文字列、それぞれ NtContinue と Ntdll.dll を上書きします。これが完了すると、ファイルは PE セクションテーブルヘッダーと COR20 メタデータテーブルヘッダーの権限を変更します。これを行うのは、これらのヘッダーを null バイトで上書きできるようにするためです。参考として、図 8 にこの関数のスニペットを示します。
図 8 - IDT 操作とヘッダーの上書き
この関数が終了すると、バイナリは LokiLocker コアの main 関数の先頭にジャンプします(図 9)。
以上でサンプルの展開は完了です。続いて LokiLocker のコア機能を見てみましょう。
機能性
デバッグロギング
LokiLocker は --log パラメータを付けて実行できます。これによって感染の詳細な verbose ログが "
図 9 - ラベルを付けなおした "main" 関数と実行パラメータ "--log"
コアのサンプルは、依然としてある程度難読化されていますが、中身を十分に説明する、これらのデバッグ文字列の存在により、骨の折れる解析が若干容易になります。
永続性
マルウェアは実行されると、自分自身を "%ProgramData%/winlogon.exe" にコピーし、隠しファイルとシステムファイルの属性を設定し、"LokiLocker" という名前のミューテックスを作成します。
永続性は、いくつかの方法で実現しています。
- ログオンごとにマルウェアのバイナリを実行するスケジュールされたタスクを作成する:
schtasks /CREATE /SC ONLOGON /TN Loki /TR %ProgramData%\winlogon.exe /RU SYSTEM /RL HIGHEST /F |
- HKCU と HKLM の両キーの下の Software\Microsoft\CurrentVersion\Run に次の値を追加する:
“Michael Gillespie” = %ProgramData%\winlogon.exe |
- マルウェアの実行可能ファイルを共通スタートアップフォルダにコピーする
上記の例で引用されている Michael Gillespie 氏は、ランサムウェアと闘う有名な研究者であり、Twitter や Bleeping Computers フォーラムで活発に発言しています。マルウェアの作者が、このようにセキュリティ研究者に「挨拶」する例は初めてではないものの、稀です。同様の例として Maze ランサムウェアがあります。このランサムウェアでは、その「キルスイッチ」ファイル名に、別の有名なランサムウェア対策の研究者の名前が使用されました。
準備
暗号化のプロセスが開始される前に、マルウェアは以下の操作を実行します。
- 構成を読み取る - デフォルトの設定オプションはバイナリの Config クラスにハードコードされていますが、設定ファイルから読み取られた値によって抑止できます。
- loki.txt という名前の設定ファイルが存在する場合、これを %ProgramData%\config.Loki にコピーし、そこから設定値を読み取る
- 偽の Windows Update 画面を表示する(そのように設定されている場合)
- 指定されたプロセスを強制終了する
- 指定されたサービスを停止する
- Windows のタスクマネージャーを無効化して(そのように設定されている場合)、以下の内容を含む wvtymcow.bat ファイルをスタートアップフォルダに投下する
REG add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableTaskMgr /t REG_DWORD /d 1 /fac |
- システムバックアップとシャドーコピーを削除する
- Windows エラーリカバリを無効化する
- 内蔵ファイアウォールを無効化する
- システム復元ポイントを削除する
- Recycle.bin を空にする
- Windows Defender を無効化する
- ユーザーログイン通知を変更する(図 10、11)
図 11 - LokiLocker のユーザーログイン通知
- レジストリ SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation 内の OEM 情報を変更する(図 12)
図 12 – OEM 情報を変更するコード
ネットワーク通信
マルウェアは、コマンドアンドコントロール(C2)サーバーでホストされる index.php スクリプトに対する POST 要求内で、下記の情報を含むビーコンを送信します(図 13)。C2 の URL はバイナリの設定に loki-locker[.]one としてハードコードされます。"user" と "chat-id" フィールドはハードコードされていますが、その他の情報は被害者のシステムプロパティに基づいて生成されます。
- unique-id=<volume_serial_number>
- disk-size=<size_of_main_drive>
- user=<hardcoded_affiliate_username>
- cpu-name=<cpu>
- ram-size=<physical_memory>
- os-name=<name_of_operating_system>
- chat-id=<hardcoded_number>
図 13 - ネットワーク通信コードの一部(index.php への POST)
URL は 91[.]223[.]82[.]6 に解決されます。すべての通信に使用されるユーザーエージェントは Loki/1.0 です。
C2 からの応答としてマルウェアが想定するのは、JSON オブジェクトの形態を取る、難読化された公開鍵です。応答バッファの最大サイズは 0x100000(1048576 バイト)まで可能です。
“message_id” : [int] } |
マルウェアは同じサーバー上の "tg.php" スクリプトとも通信します(図 15)。これは、ボットからのステータス更新を目的とした API エンドポイントと思われます。主に、暗号化プロセスの進捗を C2 に知らせるために使用されます。このスクリプトには、次のパラメータを渡すことができます。
- unique_id
- action
- msg-id
- chat-id
- status
- elapsed-time
最終的な要求は次のようになります。
図 15 - ネットワーク通信コードの一部(tg.php への POST)
暗号化
マルウェアは被害者の RSA-2048 鍵ペアを作成し、それを攻撃者の RSA 公開鍵で暗号化してレジストリに保存します。
レジストリには、キー HKCU\Software\Loki と次の値を作成します。
- Public – XML フォーマットによる被害者の RSA 公開鍵を格納し、その後、XOR 0x11 によって難読化されます。
<RSAKeyValue><Modulus>modulus</Modulus><Exponent>exponent</Exponent></RSAKeyValue> |
- Full – 攻撃者の公開鍵によって暗号化された被害者の完全な鍵ペアを格納します。base64 でエンコードされたコピーが、各ドライブのルートディレクトリおよびユーザーの特殊ディレクトリの "cpriv.Loki" ファイルにも保存されます。
<RSAKeyValue><Modulus>modulus</Modulus><Exponent>public_exponent</Exponent><P>prime_1</P><Q>prime_2</Q><DP>exponent_1</DP><DQ>exponent_2</DQ><InverseQ>coefficient</InverseQ><D>private_exponent</D></RSAKeyValue> |
- Timer – yyyyy,MM,dd,HH,mm,ss のフォーマットで記述され、XOR 0x54 でエンコードされた身代金の支払期限の日時値です。これは、マルウェアがシステムファイル以外のファイルを削除し、MBR を上書きすることでドライブを消去しはじめる厳密な時刻です。デフォルトの日時は、最初にマルウェアが実行されてから 30 日後ですが、設定ファイルで変更できます。
LockBit ランサムウェアのバージョンでも同様のレジストリエントリが使用されています。
マルウェアのバイナリには、5 つの異なる RSA 公開鍵が保存されていますが、攻撃者が C2 を介して別の公開鍵を供給することも可能です。この C2 サーバーはすべての会員に共通していることから、これは RaaS の所有者が、被害者の秘密鍵を確保するために独自の公開鍵を送信するオプションを、自分のために用意していることを示唆しています。つまり RaaS の所有者は、全会員の被害者のファイルを復号できるということです。
マルウェアは、利用できるネットワーク共有がないかネットワークをスキャンします(そのように設定されている場合)。続いてローカルユーザーディレクトリ内の以下の特殊フォルダを皮切りに暗号化プロセスを開始します。
- Favorites
- Recent
- Desktop
- Personal
- MyPictures
- MyVideos
- MyMusic
LokiLocker は次に、ローカルドライブおよびネットワーク共有(または、そのいずれか一方)を暗号化するスレッドを、設定に応じてそれぞれ独立に生成します。
ランダムに生成される鍵により各ファイルを GCM モードの AES-256 で暗号化したうえで、鍵を被害者の RSA 公開鍵によって暗号化します。
暗号化スレッドは、次のような操作も実行します。
- 暗号化したボリュームのラベルをすべて "Locked by Loki" に変更する
- 暗号化した各フォルダに身代金要求を投下する
- "info.Loki" という名前の HTA ファイルを投下する
- %ProgramData% ディレクトリにランダムな名前の HTA ファイルランチャを投下して実行する
- デスクトップ壁紙を図 16 に示したものに変更する
- cmd.exe、taskmgr.exe、regedit.exe のプロセスが起動されると、それらを即座に強制終了するスレッドを生成する
- 暗号化の完了後にシステムをシャットダウンする(そのように設定されている場合)
図 16- LokiLocker の デスクトップ壁紙
ワイパーの機能
マルウェアは、指定した期限内に身代金が支払われないと、システムの消去を試みます(そのように設定されている場合)。図 18 に示したように、被害者のすべてのドライブ上のファイルを、システムファイルを除いてすべて削除します。さらに、システムドライブのマスターブートレコード(MBR)を上書きしてシステムを使用不能にすることも試みます。続いて、リブート後に、攻撃者からの次のようなメッセージを表示します。
図 17 - 消去されたシステムのリブート後に表示される LokiLocker のメッセージ
MBR の上書き後、LokiLocker はブルースクリーンエラー(BSOD)を強制することで、システムクラッシュを試みます。
図 18- LokiLocker のワイパーのコード
設定
LokiLocker には、複数の設定可能なセクションがあります。設定可能な情報のほとんどは、ビルド処理中にクライアントバイナリにハードコードされますが、一部の設定は簡単なテキストファイルによって実行時に変更できます。
会員関連の情報と実行オプションを除き、ビルド処理中の設定が可能と思われるその他のフィールドとして、cmd.exe によって実行されるコマンドのリストと、マルウェアが強制終了を試みるプロセスとサービスのリストがあります。BlackBerry で確認されたサンプルについては、現在までこれらのフィールドには一貫性があります。
会員設定
「会員」の主な設定セクションには、会員の名前、メールアドレス、C2 の URL、readme ファイルの名前と内容、暗号化ファイルに付加する拡張子などの情報が含まれます。攻撃者に連絡してきた被害者の特定に使用されると思われるチャット ID 番号と、マルウェアがシステム消去を試みるまでの期限(日数)の設定もあります。
会員設定は Loki.Config クラスに保存され、クライアントバイナリの生成時にランサムウェアのビルダーによって組み込まれるものと思われます。
設定キー |
設定値 |
メール 1 |
“d4rkw4ve[at]tutanota[.]com” |
メール 2 |
“dark4wave[at]yandex[.]com” |
キャンペーンまたは会員の名前 |
“darkwave” |
チャット ID |
<編集済み> |
拡張子 |
“. Loki” |
Readme ファイルの名前 |
“Restore-My-Files.txt” |
身代金要求文 |
図 21 参照 |
ワイパー期限 |
30 |
C2 URL |
"loki-locker.one" |
実行オプション
Config クラスにはその他の実行オプションのデフォルト値も保存されています。これらのオプションは、ランサムウェアのバイナリと同じフォルダ内に配置する必要がある、簡単なテキストファイルによって変更できます。
設定オプション |
説明 |
デフォルト設定 |
update |
偽の Windows Update 画面を表示する |
false |
nostartup |
ランサムウェアの実行可能ファイルをスタートアップにコピーしない |
true |
nons |
ネットワーク共有をスキャン / 暗号化しない |
false |
nocdrive |
C ドライブを暗号化しない |
true |
justns |
ネットワーク共有のみをスキャン / 暗号化する |
false |
nofuck |
システムと MBR を消去しない |
true |
disabletask |
タスクマネージャーを無効化する |
false |
clast |
C ドライブを最後に暗号化する |
false |
full |
完全な暗号化 |
false |
norun |
プロセスを終了する |
false |
shutdown |
身代金要求文の表示後にシステムをシャットダウンする |
false |
|
カスタムの設定ファイル名 |
“loki.txt” |
|
設定ファイルの保存先 |
“config.Loki” |
実行されるコマンド
netsh firewall set opmode mode=disable netsh advfirewall set currentprofile state off bcdedit /set {default} bootstatuspolicy ignoreallfailures bcdedit /set {default} recoveryenabled no wbadmin DELETE SYSTEMSTATEBACKUP wbadmin delete catalog -quiet vssadmin delete shadows /all /quiet wmic shadowcopy delete schtasks /CREATE /SC ONLOGON /TN Loki /TR %APPDATA%\winlogon.exe /RU SYSTEM /RL HIGHEST /F |
強制終了するプロセスとサービス
強制終了するプロセスとサービス |
||
wxserver wxserverview sqlservr ragui supervise culture rtvscan defwatch winword qbw32 qbdbmgr qbupdate qbcfmonitorservice axlbridge qbidpservice httpd fdlauncher msdtsrvr tomcat6 zhudongfangyu vmware-usbarbitator64 vmware-converter dbsrv12 msftesql sqlagent sqlbrowser sqlwriter oracle ocssd dbsnmp synctime agntsvc |
mydesktopqos isqlplussvc xfssvccon mydesktopservice ocautoupds agntsvc agntsvc agntsvc encsvc firefoxconfig tbirdconfig ocomm mysqld mysqld-nt mysqld-opt dbeng50 sqbcoreservice excel infopath msaccess mspub onenote outlook powerpnt steam thebat thebat64 thunderbird visio winword wordpad |
defwatch ccevtmgr ccsetmgr savroam sqlserv sqlagent sqladhlp culserver rtvscan sqlbrowser sqladhlp qbidpservice quickboooks.fcs qbcfmonitorservice sqlwriter msmdsrv tomcat6 zhundongfangyu vmware-usbarbitator64 vmware-converter dbsrv12 dbeng8 wrapper mssqlserver mssql contoso1 msdtc sqlserveragent vds
|
国のリスト(スキップする国 ?)
マルウェアは文字列配列を定義します。これには、暗号化から除外する国のリストが含まれているものと思われます。これまでに解析したすべてのサンプルで、この一覧に含まれているのは Iran (イラン) 1 つだけでした(図 19)。コード内にこの配列を参照する部分がないため、この機能はまだ実装されていないようです。しかし、イランの攻撃者やハッキングツールに対する示唆と同様に、これも注意を逸らすための偽旗かもしれません。
図 19 文字列 "Iran"
ドロップされるファイル
HTA ファイル
プレーンテキストの readme ファイルの他に、マルウェアは図 20 に示すような HTA ファイルも投下します。このファイルは、被害者のデスクトップに HTML フォーマットの身代金要求文を表示します。
図 20 - HTA ファイルによって表示されるメッセージ
あなたのファイルは、すべて LokiLocker によって暗号化されました ! あなたのすべてのファイルは PC にセキュリティ上の問題があるために暗号化されました。 復元する必要がある場合は、{EMAIL_1} までメールをお送りください。 復号するには、Bitcoin による支払いが必要です。値段は、当方への問い合わせが来るまでの時間に応じて変化します。 支払い後に、当方より復号用のツールをお送りします。 問い合わせの期限は 48 時間後(2 日)です。これより遅れる場合は倍額を支払う必要があります。 24 時間(1 日)以内に返信がない場合は、このアドレス {EMAIL_2} にメールを送信してください。 一意の ID は、次のとおりです。{UNIQUE_ID} ファイルを取り戻すには期限があります。 期限を過ぎても支払いがない場合、すべてのファイルが削除されハードディスクが徹底的に破壊されます。 タイマーの第 2 日目に一部のデータが失われます。 支払いの猶予期間を購入することも可能です。メールを送信してください。 これはイタズラではありません。期限が来るのを待って、ファイルが削除されるのを目の当たりにしたいですか :)
復号の保証はあるのか ? 支払いの前に、テスト用のファイルを最大 3 個送付すれば、無料で復号します。ファイルの総容量は 2Mb 未満(アーカイブされていないもの)とし、重要な情報が含まれていてはなりません。(データベース、バックアップ、大容量の Excel シートなど)
注意 ! テスト用のファイルを復号する前に、料金を支払わないでください。 仲介を申し出る者は一切信用してはなりません。彼らは助けにはならず、詐欺の被害に遭います。とにかく我々にメールしてください。手順はすべて指示します。 他のメールアドレスに返信しないでください。役に立つのは、この 2 つのメールアドレスだけです。 暗号化されたファイルの名前を変更しないでください。 サードパーティソフトウェアによるデータの復号を試みないでください。永久にデータが失われる恐れがあります。 サードパーティの助けを借りて復号すると、料金の割増しが発生する(我々の料金に彼らの料金が上乗せされる)場合や、詐欺の被害に遭う場合があります。 |
図 21 :身代金要求文
HTA コードは図 22 に示す偽の Windows Update ボックスも表示し、その後 "C:\ProgramData\winlogon.exe" から新しいランサムウェアプロセスを実行し、https[:]//picc[.]io/X8GRzsw.gif へのアクセスを試みます。この URL は 3[.]64[.]163[.]50 に解決されますが、執筆時にはもはやそのコンテンツを入手できなくなっていました。
図 22 - HTA コードの一部
HTA コードは、いくつかのメタデータを保存するために、図 23 のように Google Tag Manager(gtag)のデータレイヤーを作成します。
図 23 - HTA コードによる gtag の利用
HTA ランチャー
LokiLocker は、図 24 のコードに含まれるメッセージを表示し、mshta.exe を使用して HTA ファイル "info.Loki" を起動するための小さなバイナリを投下します。このバイナリは、埋め込まれた C# コードから C# コンパイラにより、その場でコンパイルされます。
図 24 - HTA ランチャーのコード
このファイルと、コンピューター上の他のすべてのファイルは、LokiLocker によって暗号化されています。 このファイルと、残りのファイルを復元するには、次のメールアドレスにメッセージを送信してください。 <attackers_email> メッセージの件名に、次の ID を記載してください。<victim_id> 手順はすべて指示します。 24 時間以内に返信がない場合は、次のアドレスにメールを送信してください。<attackers_email_2> |
図 25:メッセージボックスのテキスト
ネットワークスキャナ
LokiLocker では 2 つの形態のネットワークスキャンが使用されることを突き止めました。第 1 の形態は組み込みネットワークスキャナで、マウントして暗号化するためにネットワーク共有を識別します。
LokiLocker を配付する脅威アクターが、被害者の環境に投下した「NS」という名前のネットワークスキャナユーティリティを使用するケースも確認されました。このツールは、マウントおよびアンマウントされているローカルドライブとネットワーク共有のリストを表示する、簡単なコマンドラインスキャナです(図 26)。
図 26 :NS.exe ツール
NS.exe は 2018 年から VirusTotal に掲載され、次のような複数の異なるランサムウェアキャンペーンで見つかっています。Dharma、Phobos、LockBit、Revil、その他多数このツールに関しては十分な情報がありませんが、多くの RaaS ベースの脅威に組み込まれたり、添付されたりしてダークネット上で配付されているようです。
まとめ
LokiLocker は巧妙な方法でユーザーのエンドポイントに大混乱を発生させ、その名前の由来である北欧神のように、(経済的な)供物によって宥めないと報復と破壊をもたらすことが判明しています。.NET アプリケーションを仮想化して保護するために KoiVM を使用するという LokiLocker の手法は、解析を複雑化する方法としては珍しいものです。他の脅威アクターがこの手法を取った例はまだ少ないため、これが新しいトレンドの始まりになるかも知れません。
「イラン」関連のコードが含まれていることも興味深い点です。このスニペットの使用目的が完全には明らかになっていないからです。通常、国のリストは「同盟国」を除外して危害が及ばないようにする目的があります。しかし、このコードは未使用と思われるため、研究者が LokiLocker の作成者としてイランを名指しすることを狙った策略かも知れません。ごく初期に確認された LokiLocker の会員の一部には、イランのハッキングチャネルでしか見られないユーザー名を使用しているという事実もあります。さらに、このランサムウェアの初期サンプルの配付にはイランのクラッキングツールが使用されました。こうした詳細情報が、事態をさらに混乱させます。ペテン師や脅威アクターの手にかかると、意味のある手がかりと偽装工作の区別が難しくなり、このまやかしの「落とし穴」が、どこまで続いているのか誰にもわからない場合もあります。
LokiLocker や類似の RaaS サービスによる感染を防御するための最適のルールは、常にデータ(企業データも含む)のバックアップコピーを作成しておくことです。バックアップはオフラインに保存し、なるべくプラグも抜いておきましょう。バックアップドライブまで LokiLocker に攻撃され暗号化されるという事態を避けるためです。
新しいプログラムやソフトウェアなど、ファイルをダウンロードする場合は、信頼できる公式サイトのみを使用し、サードパーティやピアツーピア(海賊版)サイトは避けます。これらのサイトはしばしば、無害または「クラックされた」ソフトウェアを装った悪意あるファイルの隠れ場所となるからです。メールの添付ファイルも同様です。信頼できる連絡先からの添付ファイルであっても、相応の注意を払って処理する必要があります(可能ならば開く前に最新のアンチウイルスプログラムでスキャンしましょう)。
本稿の執筆時点では、LokiLocker によって暗号化されたファイルを復号する無料のツールは存在しません。LokiLocker ランサムウェアに既に感染したという場合、FBI をはじめとする、ほとんどの公的治安機関は身代金を支払わないことを推奨しています。被害者が身代金を支払うことが、ランサムウェアの世界的な増加を助長しているという事実をおいても、自分が犯罪に巻き込まれているという認識を持つ必要があります。そして、たとえ身代金を支払ってもデータに再びアクセスできるようになる保証は一切ないのです。最後に、データが復元できたとしても、脅威アクターが将来簡単にアクセスできるよう、マシンのどこかにバックドアを仕込んでいないかどうかを知る方法はありません。結局、身代金を支払った被害者は、その後もたびたび支払いに応じる場合が少なくありません。
あらゆる種類のランサムウェアに対する最大の防御策は、複雑で根気のいる作業が伴うとわかっていても、常に脅威アクターの一歩先を行くように、あらゆる努力を惜しまないことです。
ランサムウェアの被害に遭われた方は、次のような対策を講じてください。
- お近くの FBI 地方局に連絡して支援を求めるか、オンラインで通報します。
- FBI のインターネット犯罪苦情センター(IC3)に被害届けを提出します。
- その他にも支援が必要な場合は、BlackBerry のインシデント対応チームまで、ご連絡ください。
付録
侵入の痕跡(IOC)
0684437b17ae4c28129fbb2cfe75b83cc8424ba119b9ca716ad001a284d62ead |
SHA256 |
15d7342be36d20ce615647fac9c2277f46b6d19aa54f3cf3d99e49d6ce0486d0 |
SHA256 |
1a4a3bfb72f3a80e4b499ecebe99f53a2b7785eace7f612b3e219409d1e1ffc7 |
SHA256 |
2a7f01d924a4fc38c9fad586634eccbc28de07d97531c4a02eb6085359093a45 |
SHA256 |
37702b94f9fc14a406312a2a392ad9553cf05c4b6870d94b5cf4781c02c29414 |
SHA256 |
4215b5ce91deb97011cba2dd94d5bac1a745d6d55f6938b86e209eaaf8e655df |
SHA256 |
52c045b57e24585467be13454c5db551987fd23bfa931a7f6ab41e6f11b8a7ec |
SHA256 |
55da12a82c8e0b9fda5dbba6612627c0ee5d13d55e3bcc1df2ca9785c97caf64 |
SHA256 |
5ccee068daf8a672d0e63e334e00985aa7fe56aa26b6c036d562728fdf968237 |
SHA256 |
6205056cd92c75579f56bd0ce7159fae9f360d4c183beb10743330952bf22056 |
SHA256 |
630e24cc1c4c95321965ad967e77e1888c48c4b1f653d800c7df08e879814787 |
SHA256 |
75a5d27c77cf8515cff84d789f0e8f849b37e15b9b5f1c0801bab414061048a6 |
SHA256 |
78a530f35d1cc89fc757b7661cbd57b2e9e46aeed53e2e66247db66c214a2ba0 |
SHA256 |
7f23ea1e5ab087ba2c4e0ea251d680ef5190d49181efcc222702075b276d5990 |
SHA256 |
8630df622ee773c3d9c934fe9d925c019b43232e8f2810ee651dcf5f3ec79893 |
SHA256 |
88acae18f2cf7de7bb76784d45d9612561c8890872ea3629f0608577928745a5 |
SHA256 |
8de5b9332556da8f401c5cbf3cea1dbc1e1ba277c0efa85dce8cd36310c2936c |
SHA256 |
8f78555f0f62b4f280a77109dbaa4aeb5c347d1ea38b521f98c57a7acea8087e |
SHA256 |
8f8cf6b8cd0c789d3f67f6291bb7c0c5416e27320631c852152a63513185941e |
SHA256 |
a1e30ea263ba21d656717f7f7824ecb2dc90896f55eae134afaf7691209979fd |
SHA256 |
ac1b326f23e17726a2b90ce8a9d29c6e44a2cb37b431e2b94734bdd17618ae26 |
SHA256 |
adacbc5402326f87c76cc7737ad924ce5bd7394400ef86a48fa754af9d22da66 |
SHA256 |
b01a96892f3efdaa6682078339b23d8954d571c27ee15a4ce9ef8ad6c415f06d |
SHA256 |
b8996e435ba229837d13f9837f6c0451f50a5767b0d1f1bb715670c802a1d564 |
SHA256 |
c3fe7ee5451108c16d7730d0bf589f70b841f3846908c1761d827a70f3462ef0 |
SHA256 |
c80513aaff11a2a2914d3a674737f63fbc04c6d5de7fda6f8b6e07df580664cf |
SHA256 |
c8e8599e8d86ff7daf02ea9c01d31f4cdcf829314c76b84d1b1b8a982d1299c5 |
SHA256 |
cb17673f3cde6e542db3ff5facee2a01fdec462be275e9274c512038470009d1 |
SHA256 |
da0a82d322502cd6d156649dee1e0a45348df0dce272b6ae2dd81af25f774c62 |
SHA256 |
df24b04f6ff0ac50fbf1c01ee02f809c1c3f9fbe9d14eefc3306b1b586bf943e |
SHA256 |
e28b0a93649010788bbeda883a08254fefe3710700fc2c5a8dea94ec39402ec3 |
SHA256 |
f2da3d1410c5058720a4307acf5fec7fc2b54285be9dd89eae108cce368dcde7 |
SHA256 |
fe930861d5eec95a3ea1239e7a8f4182a2cf5b094ac3a48c4cb2f0ef39facd05 |
SHA256 |
fffcf4be17e732aa3a5387e747290236d0f75ff3a24cb43eca793668d7772ddd |
SHA256 |
4e6471c4574152d0eb2d2c608e540e505f3db41b50997d1f06c47e587a355d80 |
SHA256 |
7c890018d49fe085cd8b78efd1f921cc01936c190284a50e3c2a0b36917c9e10 |
SHA256 |
9ab1694c978f11521c6bca73d40256e4b433f3279792db8ae1fecc5e0ad174c9 |
SHA256 |
ebc955f12b0a2b588efca6de0af144dd00e33ead80185a887bf7c97329b28ec6 |
SHA256 |
1e6ecdb54224eea50476be03d5a48083deae15301f26ba3519e0c0a5eb77b1f4 |
SHA256 |
268c2924d45c0c7be9b67b85f03ddf5df97f2bc8963faefe1bec244e0cb95225 |
SHA256 |
36b5fe49cd81393f8c60c70c941a1e6aaf181775b0614f1c4a142f38c7af1a81 |
SHA256 |
42088f0e3e9c70b7d1d238f7e3b03a3ca177748ba2568adba9104bbed2827734 |
SHA256 |
6d1ecc48069eae14a831af05d29d2d25c0fa9f7c62f1f51c44d0d70fb014a590 |
SHA256 |
84d9ef8cb92d57b178cce655f3f7808c6f5cf42f15c468f741b253f37ffc39fc |
SHA256 |
bb382bbc0756832748b33f0d7f7ec218d570afa031937259e69237df4945d074 |
SHA256 |
ca478cb334360bef31d394438cba1449dfe0b8d751cc8eb679f09e12e5068d1a |
SHA256 |
e9e80fd3fe71d133609f5bc75081b13123e4f9a5ed1920050727955185f3ce52 |
SHA256 |
fe40e5c6244c7e0a256689b6ea0881998fef897cece79a2add3ba8f7a23f4f2b |
SHA256 |
8cb1e9c99ad716a2541697a6d4ada32433b56e11dfe6aa1cb7c4fbc72b4bad2e |
SHA256 |
c1e8c720da2297aa4432364441b341ec85e6f7f571cf6348ffdc51f4ae96418a |
SHA256 |
loki-locker[.]one |
C2 ドメイン |
194.226.139[.]3 |
C2 IP |
91.223.82[.]6 |
C2 IP |
Software\Loki\public |
レジストリ値 |
Software\Loki\full |
レジストリ値 |
Software\Loki\timer |
レジストリ値 |
Software\Microsoft\CurrentVersion\Run\Michael Gillespie |
レジストリ値 |
%ProgramData%\winlogon.exe |
実行可能ファイル |
%ProgramData%\config.Loki |
設定ファイル |
<malware_path>\loki.txt |
設定ファイル |
<malware_path>\logs.txt |
ログファイル |
Restore-My-Files.txt |
Readme ファイル |
Info.Loki |
HTA ファイル |
Cpriv.Loki |
データファイル |
Loki/1.0 |
ユーザーエージェント |
.Loki |
ファイル拡張子 |
.Adair |
ファイル拡張子 |
.Boresh |
ファイル拡張子 |
.Rainman |
ファイル拡張子 |
.Spyro |
ファイル拡張子 |
既知の会員名
AbolSpyro
AdairFile
Ahmad_C4
Darwin
Fardinyps
Fuck3r_life
Helpmezeus
John
Kingbo
LokiBlack
Mindnear
Miracle
Miveh_sabzikosher
Roxlock
Shadow
ShreAzm0
Sirer
darkages
darkkiller
arkwave
ghost
h33shmat
hijack
jhnvjfygbjdhf
mjid4MB
mr_noobx
numbervpss
optimus982
pf9922
qazw
sidewinder
既知のメールアドレス
BlackSpyro[at]mailfence[.]com
BlackSpyro[at]tutanota[.]com
DecNow[at]MsgSafe[.]io
DecNow[at]TutaMail[.]Com
Decoder[at]firemail[.]cc
Decryptfiles[at]goat[.]si
Filemanager[at]mailfence[.]com
Helpingdecode[at]tutanota[.]com
Miiracle11[at]yandex[.]com
Miracle11[at]keemail[.]me
PayForDecrypting[at]gmail[.]com
PayForDecrypting[at]outlook[.]com
Rdpmanager[at]airmail[.]cc
RoxLock[at]keemail[.]me
RoxLock[at]mailfence[.]com
Shadow0[at]mailfence[.]com
Shadow11[at]mailfence[.]com
Skydancerf5[at]cock[.]li
Sapphire01[at]keemail[.]me
Sapphire02[at]mailfence[.]com
Unlockpls.dr01[at]protonmail[.]com
Unlockpls.dr01[at]yahoo[.]com
adairfile[at]mailfence[.]com
adairfile[at]tutanota[.]com
admindec[at]rape[.]lol
anoniran[at]protonmail[.]com
badlamadec[at]msgsafe[.]io
d4rkw4ve[at]tutanota[.]com
dark4wave[at]yandex[.]com
dark.killer[at]mailfence[.]com
darkkiller[at]cock[.]li
decryptyourfiles[at]firemail[.]cc
decsup[at]tuta[.]io
falcon9[at]cyberfear[.]com
filemanager[at]cock[.]li
jesushelp01[at]techmail[.]info
jesushelp02[at]mailfence[.]com
kingbo[at]tutanota[.]com
kingboo[at]mailfence[.]com
kingvps1[at]mailfence[.]com
kingvps[at]mailfence[.]com
lockirswsuppurt[at]mailfence[.]com
lockteam[at]cock[.]li
lockteam[at]keemail[.]me
loki.black[at]mailfence[.]com
loki.black[at]msgsafe[.]io
loki.help[at]bingzone[.]net
loki.help[at]mailfence[.]com
loki.support01[at]techmail[.]info
loki.support02[at]mailfence[.]com
loki01[at]keemail[.]me
loki02[at]mailfence[.]com
lordpdx[at]tutanota[.]com
mrcrypt2[at]mailfence[.]com
mrcrypt[at]msgsafe[.]io
mrrobot13[at]cock[.]li
pf2536[at]protonmail[.]com
pf2536[at]tutanota[.]com
puffcrypt[at]gmail[.]com
rain.man13[at]mailfence[.]com
rain_man13[at]keemail[.]me
skydancerf5[at]tutanota[.]com
tran9ino00[at]protonmail[.]com
wannayourdata[at]gmail[.]com
xmagic22[at]tutanota[.]com
xmaster22[at]tutanota[.]com
・お問い合わせ:https://www.blackberry.com/ja/jp/forms/enterprise/contact-us
・イベント/セミナー情報:https://www.blackberry.com/ja/jp/events/jp-events-tradeshows
・サイバーセキュリティチームによるコンサルティング: https://www.blackberry.com/ja/jp/services/blackberry-cybersecurity-consulting/overview
・BlackBerry Japan:https://www.blackberry.com/ja/jp