** 本記事は、Don’t get Mad, get wise の翻訳です。最新の情報は英語記事をご覧ください。**
Sophos X-Ops のインシデント対応チームは以前から、「Mad Liberator」と呼ばれるランサムウェアグループの手口を調査しています。このグループが初めて出現したのは、2024 年 7 月中旬のことです。本記事では、人気のリモートアクセスアプリケーション Anydesk を使用する、このグループ特有の手法に焦点を当てます。そして、このグループが使用している興味深いソーシャルエンジニアリングの手口を解説し、被害者になるリスクを最小限に抑える方法と、調査担当者向けて、このグループによる活動を特定する方法についてガイダンスを提供します。
その前に、攻撃者が悪用している Anydesk が正規のソフトウェアであることに注意する必要があります。攻撃者は、以下に示す方法で Anydesk を悪用していますが、おそらくどのリモートアクセスプログラムであっても代用できるはずです。また、SophosLabs はこのバイナリに対して Troj/FakeUpd-K という検出機能を備えていることをお伝えしておきます。
Mad Liberator とは?
Sophos X-Ops がこれまでに観測した活動から、Mad Liberator はデータの窃取に重点を置いていることがわかります。これまでのところ、Mad Liberator が原因であることを確認できるデータ暗号化インシデントは確認されていません。とはいえ、watchguard.com の情報によると、このグループは時折暗号化を使用しており、二重の恐喝 (データを盗んだ後、被害者のシステムを暗号化し、金を支払わなければ盗んだデータを公開すると脅すこと) も行っているようです。
データ窃取を行う攻撃者の多くがそうであるように、Mad Liberator もリークサイトを運営しており、被害者に関する情報を公開して金銭の支払いを迫ります。当該のサイトは、ファイルを 「無料で」ダウンロードできると主張しています。
図 1: Mad Liberator の情報公開サイト
興味深いことに、Mad Liberator は、エンドポイントやサーバーにインストールされたリモートアクセスツールを使用している被害者を狙い、ソーシャルエンジニアリングのテクニックを使って環境にアクセスしています。たとえば、Anydesk は主に、IT チームが自社環境を管理するために (特にリモートユーザーやリモートデバイスに対応する場合に) 使用されます。
攻撃の仕組み
Anydesk は、インストール先の各デバイスに一意の ID (この場合は 10 桁のアドレス) を割り当てることで動作するようになります。 Anydesk がデバイスにインストールされると、ユーザーは ID を入力することでリモートデバイスにアクセスして制御することを要求したり、リモートセッションを介して他のユーザーにデバイスをコントロールしてもらったりすることができます。
図 2: 10 桁のアドレスが目立つように表示されている Anydesk セッション
現時点では、攻撃者がどのような方法で特定の Anydesk ID を標的にしているか、あるいはそもそも標的にしているかどうかは不明です。理論上は、誰かが接続要求を受け入れるまでアドレスを試すことは可能ですが、10 桁の数字は 100億パターンあるため、この方法は非効率的です。インシデント対応チームが調査したある事例では、被害者が攻撃者からの Anydesk 接続要求を受信する前に、Mad Liberator と被害者が接触した形跡はありませんでした。このユーザーは、著名なスタッフでも公的に目につくスタッフでもなく、特に標的にされるような識別可能な理由もありませんでした。
Anydesk 接続要求を受信したユーザーには、図 3 のようなポップアップ画面が表示されます。接続が完全に確立されるためには、ユーザーが接続を承認する必要があります。
図 3: 「ユーザー」からの Anydesk 経由での接続要求。Anydesk をセットアップする際には任意のユーザー名を選択できるため、攻撃者は「Tech Support (テクニカルサポート)」などと名乗ることも可能
ソフォスのインシデント対応チームが扱ったケースでは、被害者は Anydesk が自社の IT 部門で使用されていることを知っていました。そのため、接続要求を受信しても IT 部門による通常のメンテナンスであると思い込み、[Accept] をクリックしてしまいました。
接続が確立されると、攻撃者はバイナリを被害者のデバイスに転送し、実行しました。 ソフォスの調査では、このファイルの名前は「Microsoft Windows Update」となっており、SHA256 ハッシュは次のようになっていました。
f4b9207ab2ea98774819892f11b412cb63f4e7fb4008ca9f9a59abc2440056fe
このバイナリは、Windows Update 画面を模倣したスプラッシュ画面を表示する、非常に単純なプログラムでした。画面はアニメーションで、システムが更新されているように見せていました (図 4 参照)。
図 4: ごく平凡な Windows Update 画面に似せた画面
このプログラムは他の活動を行わなかったため、大半のマルウェア対策ソフトウェアでは悪意のあるプログラムとして即座に検出されません。(ソフォスは、このバイナリを検出する [Troj/FakeUpd-K] を開発し、事態の進展を注視し続けています。)
攻撃者はここで、この手法が検出され阻止されるのを防ぐために、もうひと手間かけました。この単純なプログラムは、ユーザーが 「Esc 」キーを押すと終了してしまうため、攻撃者は Anydesk の機能を利用してユーザーのキーボードとマウスからの入力を無効にしました。
これによって被害者はキーボードを使用できなくなったため、また、上記画面は Windows ユーザーにとっては何の変哲もないものに見えるため、攻撃者がバックグラウンドで行っている活動に気付きませんでした (たとえ不審に思っても、簡単には止められなかったでしょう)。
攻撃者は、デバイスにリンクされていた被害者の OneDrive アカウントと、中央サーバーに保存され、ネットワーク共有を介してアクセス可能だったファイルにアクセスしました。 そして、Anydesk FileTransfer 機能を使用して、会社のファイルを盗み出しました。 その後、Advanced IP Scanner を使用して、同じサブネット内に悪用可能な他のデバイスがあるかどうかを確認しました。(結局、他のデバイスに侵入することはありませんでした。)
盗んだファイルを制御下に置いた攻撃者は、次に別のプログラムを実行して、多数のランサムノート (身代金要求文書)を作成しました。興味深いのは、ランサムノートが被害者のデバイス上ではなく、デバイスにマッピングされた共有ネットワーク上の複数の場所に作成された点です。 これらのランサムノートには、データが盗まれたことと、盗まれたファイルの公開を防ぐために身代金を支払う方法の詳細が記載されていました。(多くのランサムウェアグループが用いるプレッシャー戦術については、その調査結果を先日の記事で報告しています。)
偽の Windows Update 画面によって、攻撃者のアクションは被害者に見えないようになっていました。この攻撃はほぼ 4 時間続きました。攻撃者は最後に、偽のアップデート画面を閉じ、Anydesk のセッションを終了させ、デバイスのコントロールを被害者に戻しました。バイナリは攻撃者が手動でトリガーしたものであり、攻撃者が去った後に再度実行されるように設定されたタスクはありませんでした。また、ファイルは感染したシステム上に残されていました。
教訓と対策
この攻撃は、Anydesk の要求が日常業務の一環であると認識していた被害者につけ込んだ単純なものでした。ソフォスの調査チームの分析では、ソーシャルエンジニアリング的な働きかけ (電子メールによる接触、フィッシングの試みなど) は一切ありませんでした。そのため、継続的かつ最新のスタッフトレーニングの重要性が浮き彫りになりました。 また、IT 部門がどのように従業員に連絡し、リモートセッションを手配するかについて、明確なポリシーを設定し、周知させる必要があることも示唆しています。
この種の攻撃リスクを最小化するためには、ユーザー教育を施すだけでなく、特定のデバイスからの接続のみを許可する Anydesk アクセスコントロールリストを導入することを強くお勧めします。AnyDesk は、追加のセキュリティ対策に加え、アクセスコントロールリストを導入するための非常に有用なガイダンスと方法を提供しています (次のリンクを参照)。
その他のアドバイスについては、以下をご覧ください。
- https://blog.anydesk.com/the-ultimate-guide-to-anydesks-security-features/
- https://anydesk.com/en/security
調査担当者向けの手順については、記事の最後に記載しています。
結論
ランサムウェアグループには浮き沈みがあり、この Mad Liberator が今後存在感を増す可能性もあれば、単なる一過性のもので終わる可能性もあります。しかし、上記のケースで Mad Liberator が使用したソーシャルエンジニアリング手法は注目には値しますが、決して特殊なものではありません。攻撃者は常に、人的要素と技術的セキュリティレイヤーの両方を悪用するための戦術を開発し、採用し続けています。
環境内にツールを導入する際、セキュリティとユーザビリティのバランスを取るのは難しい作業です。特に、ビジネスクリティカルなシステムの管理担当者にとって、そのツールのおかげでリモートアクセスが容易になる場合はなおさらです。 しかし、ネットワーク上にアプリケーションを導入する場合、中でもデバイスへのリモートアクセスに利用可能なアプリケーションを導入する場合には、ベンダーからの推奨事項を注意深く確認することをお勧めします。これらの推奨事項に従わない場合は、その選択をリスク管理プロセスの一環として文書化し、レビューできるようにしておくか、または、組織のリスク選好度の範囲内に収まるように他の緩和策を講じられるようにしておく必要があります。
付録: Mad Liberator の調査
攻撃者による Anydesk の悪用が疑われるインシデントを調査する場合は、以下のファイルに保存されているイベントおよび接続データを探します。
- C:\ProgramData\AnyDesk\connection_trace.txt
- C:\ProgramData\AnyDesk\ad_svc.trace
- C:\Users\%\AppData\Roaming\AnyDesk\ad.trace
connection_trace.txt ファイルには最近の接続の Address ID が含まれているだけで、それだけでは有用なデータではないかもしれません。 しかし、少なくとも問題のある ID を絞り込むことはできます。
図 6: 各イベントの結果に関する情報を含む connection_trace.txt
各接続には 4 つの状態が考えられます。
- REJECTED: エンドユーザーが接続要求を拒否した
- User: エンドユーザーが接続要求を受け入れた
- Passwd: リモートシステムがアクセスするために入力したパスワード
- Token: リモートシステムによって「自動的にログイン」オプションがオンになった
ad_svc.trace ファイルと ad.trace ファイルには、かなり詳細な情報が含まれています。これらはメモ帳などのテキストエディタで開いて見ることができます。また、他のイベントとともに接続データも含まれています。 ad_svc.trace ファイルには、リモート接続のソース IP アドレスの詳細が含まれています。
図 7: ad_svc.trace ファイルの内容。疑わしい接続が強調表示されている
ad.trace ファイルには、ファイル転送に関連するログや、ユーザー入力が無効になっているイベントなどが含まれる
図 8: ユーザーの入力オプションが無効になっている
図 9: ファイル転送イベント
ログには、データ窃取の際に転送されたフォルダとファイル数が記録されますが、残念ながら各ファイル名の詳細までは記録されません。
Sophos Intercept X がインストールされていれば、簡単にこのデータを収集できます。次の OSquery は、Sophos Central Dashboard の Live Discover 内で使用できます。
SELECT strftime('%Y-%m-%dT%H:%M:%S', substr(grep.line, instr(grep.line, 'info') + 5, 19)) AS Datetime, grep.path, CASE WHEN grep.pattern = 'Logged in from' THEN 'Login' WHEN grep.pattern = 'Preparing files' THEN 'File Transfer from this Host' WHEN grep.pattern = 'Accepting from' THEN 'Accepted Connection Request' WHEN grep.pattern = 'Incoming session request:' THEN 'Incoming Session Request' WHEN grep.pattern = 'Remote OS:' THEN 'Remote OS' WHEN grep.pattern = 'Disabling user input.' THEN 'Disable Mouse and Keyboard' WHEN grep.pattern = 'Download started' THEN 'File Transfer to this Host' WHEN grep.pattern = 'Received a sysinfo request.' THEN 'System Information Request' WHEN grep.pattern = 'Authenticated with permanent token' THEN 'Authenticated with Token' WHEN grep.pattern = 'Authenticated with correct passphrase' THEN 'Authenticated with Password' WHEN grep.pattern = 'Profile was used:' THEN 'Profile Assigned' END AS 'Operation', grep.line as Data FROM file CROSS JOIN grep ON (grep.path = file.path) WHERE ( file.path LIKE 'C:\ProgramData\AnyDesk\ad_svc.trace' OR file.path LIKE 'C:\Users\%\AppData\Roaming\AnyDesk\ad.trace' ) AND ( --AnyDesk grep.pattern = 'Logged in from' OR grep.pattern = 'Preparing files' OR grep.pattern = 'Accepting from' OR grep.pattern = 'Incoming session request:' OR grep.pattern = 'Remote OS:' OR grep.pattern = 'Disabling user input.' OR grep.pattern = 'Download started' OR grep.pattern = 'Received a sysinfo request.' OR grep.pattern = 'Authenticated with permanent token' OR grep.pattern = 'Authenticated with correct passphrase' OR grep.pattern = 'Profile was used:' ) ORDER BY Datetime DESC
このクエリを使用すると、データを使用可能なテーブルにソートすることもできます (図 10 参照)。
図 10: 上記の OSquery の出力 (表形式)
謝辞
本記事への貢献に対し、Harshal Gosalia、Ollie Jones、Andy French に謝意を表します。