FortiGuard Labs 脅威リサーチ

フィッシングキャンペーンによる最新のRemcos RATの動向

投稿者 Xiaopeng Zhang | 2022年5月31日

Remcos RAT(リモートアクセス型トロイの木馬)は、本来はコンピュータをリモート制御するための専門的ツールとして設計されました。Remcos RATは2016年7月21日に最初のバージョンが公開されて以来、被害者のデバイスを密かに制御するためハッカーによって悪用されていることから、マルウェアファミリーに分類されています。Remcos RATはオンラインで販売されている商用ソフトウェアです。

影響を受けるプラットフォーム: Microsoft Windows
影響を受けるユーザー:     Microsoft Windowsユーザー
影響:             デバイスを制御して、機密情報を収集
深刻度:            クリティカル

図1:オンラインで販売されているRemcos RATの例

このWebページには、プロフェッショナルエディション(全機能を搭載)とフリーエディション(一部の機能のみ搭載)の2つのバージョンが掲載されています。

このブログでは、フィッシング攻撃によって拡散され、ハッカーが被害者のデバイスを制御するために使用しているRemcos RATについて分析しています。この攻撃は、先日、フォーティネットのFortiGuard Labsによって発見されたものです。

この分析によって以下のことを明らかにしていきます。

  • フィッシング攻撃が被害者のデバイスにRemcos RATを拡散する方法
  • 被害者のデバイスでRemcosがどのように実行されるか
  • Remcosが被害者から窃取する機密情報
  • RemcosとC2サーバーの接続方法
  • Remcosが被害者のデバイスを制御するために使用するコマンド

フィッシングメール

図2:フィッシングメールのスクリーンショット

図2のEメールの内容からわかるように、ハッカーはこのフィッシングメールを信頼できる銀行からの支払い通知に偽装し、パスワードで保護された添付のExcelファイルを開くよう受信者に要求しています。

VBSとPowerShellを介してRemcosをダウンロードさせるExcelファイル

添付されたExcel文書を開くと、この文書を表示するためのパスワードを求められます。このパスワードは事前にEメールに記載されています。Excelプログラムで図3のような文書が表示されます。このファイルにはマクロコードが含まれているため、被害者に危険を知らせる黄色いセキュリティ警告バーが表示されます。

図3:ExcelプログラムでExcel文書を開いたときの画面

ファイルのメッセージは、[コンテンツを有効にする] ボタンをクリックするよう被害者を誘導します。これは警告を回避し、悪意のあるマクロコードを実行するためです。

このマクロには「Workbook_Activate()」という関数が含まれており、文書を開くと自動的に呼び出されます。その目的は、セルから「%AppData%\HobYQ.vbs」ファイルにVBSコードを抽出し、それを実行することです。

Remcosペイロードファイルを保護するために、Remcosは極めて巧妙な方法でダウンロードされます。こうしてVBSとPowerShellの両方のスクリプトコードが実行されます。

「HobYQ.vbs」は動的にスプライスされたPowerShellコードを実行し、攻撃者のサーバーからもう一つのVBSファイル(「flip.vbs」)をダウンロードして実行します。続いて「flip.vbs」は、サーバーから「mem.txt」という名前のファイルをダウンロードします。このファイルはエンコードされたVBSコードです。この後、「flip.vbs」で「mem.txt」が実行され、同じサーバーから「faze.jpg」という最後のファイルがダウンロードされます。図4は、ダウンロードされた3つのファイル、「flip.vbs」、「mem.txt」、「faze.jpg」についてキャプチャされたトラフィックを示しています。

図4:3つのファイルをダウンロードするための「HobYQ.vbs」

図4の下部は、「faze.jpg」の応答パケットの一部を示しています。もちろんこれは画像ファイルではなく、難読化されたPowerShellコードファイルです。3つの配列変数に3つのエンコードデータが定義されています。それを単純化したものが図5の赤線で囲まれた部分です。「faze.jpg」に格納して運ばれたPowerShellコードは、「flip.vbs」によって実行されます。

図5:単純化した「faze.jpg」のPowerShellコード

ここからは、PowerShellコードがどのように動作するかを説明します。

2つの変数、$MNBと$IRjRの値は、どちらもエンコードされたGZIP圧縮ペイロードで、「1F 8B…」で始まっています。圧縮解除された$MNBは.Net Framework Dllファイル、$IRjRはRemcosペイロードファイルです。

変数「$qgRf」に設定されたバイナリ値は、tMCfkSD()という動的メソッドであり、圧縮解除に使用されます。

tMCfkSD()が呼び出されると、$MNBから$byUsWxeに.Net Dllが圧縮解除されます。最後に「Load」を呼び出して、現在のPowerShell実行環境に.Net Dllが読み込まれ、「RegAsm.exe」と圧縮されたRemcosペイロード($IRjR)を指定して「toooyou」クラスから「Black()」関数が呼び出されます。

.Net Framework Dllファイルによるプロセスハロウイング

図6:.Net Dll toooyou.Black()の分解図

図6に示すように、この.Net DllにはGC.dllという名前が付けられています。渡された2つのパラメータが「Locals」に表示されています。このコードは難読化されています。私が分析したところでは、まずリソースセクションから、lime.dllという別のDllが動的に抽出されます。次に、Remcosペイロードが圧縮解除され、lime.dllから関数「k780er0sdfffff.o70sdaf45gfg(System.String, Byte[])」が呼び出されると、この関数にRemcosペイロードが渡されます。つまり、このDllを使用してプロセスハロウイングが実行され、新しく作成された「RegAsm.exe」プロセスにRemcosペイロードが注入されます。関数(k78er0sdfffff.o70sdaf45gfg())が呼び出されると、被害者のデバイス上で以下の場所から「RegAsm.exe」が検索されます。このファイルが見つからない場合は、Remcosを実行せずにPowerShellが終了します。

ハードコードされたロケーションのリスト

array[<Module>.C1790263187] = "C:\\WINDOWS\\syswow64\\";
array[
<Module>.C2710025604] = "C:\\WINDOWS\\system32\\";
array[
<Module>.C3326009313] = "C:\\WINDOWS\\";
array[
<Module>.C931285936] = "C:\\WINDOWS\\syswow64\\WindowsPowerShell\\v1.0\\";
array[
<Module>.const_4] = "C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\";
array[
<Module>.C3873335087] = "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\";

私のテスト環境では、このファイルは「C:\Windows\\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe」に配置されています。

ご承知のとおり、プロセスハロウイングを終了するには複数のAPI、すなわちCreateProcess()(CREATE_SUSPENDEDフラグを指定)、WriteProcessMemory()、GetThreadContext()、SetThreadContext()などを呼び出す必要があります。図7は、CreateProcessA() APIを呼び出して、Lime.dllからサスペンド状態のRegAsm.exeプロセスを作成しているところです。

図7:CREATE_SUSPENDEDフラグを使用したCreateProcessA()の呼び出し

RegAsm.exeにRemcosペイロードが注入されて展開されると、被害者のデバイスでRemcos RATを再開するために、ResumeThread() APIが呼び出されます。

Remcosペイロードの内容

私の解析では、Remcosはテンプレートを使用してC++言語で書かれていました。我々がキャプチャしたRemcosは最新バージョンの3.4.0 Proで、2022年2月10日に公開されています。被害者のデバイスをどのように制御するかを解明するために、このセクションのRemcosペイロードファイルを詳しく調べました。

過去数年における旧バージョンの分析によると、RemcosはRC4暗号化を使用して、ローカルデータとトラフィック(RemcosとC2サーバー間)データの両方を暗号化 / 復号していました。3.0.0 Pro以降では、トラフィックデータの暗号化 / 復号に用いる暗号化アルゴリズムがAES-128 bitに変更されました。したがって、現在このRemcos亜種では2種類の暗号化アルゴリズム、すなわちローカルデータにはRC4、トラフィックデータにはAESが使用されています。

図8:「SETTINGS」リソース内の暗号化されたRemcosコンフィギュレーションブロック

図8に示すように、すべてのRemcosは「SETTINGS」という名前のPEリソースセクションに、RC4で暗号化されたコンフィギュレーションブロックを格納しています。先頭バイトの「B1」は、それに続くRC4キー(赤線で囲まれた部分)のサイズ、残りのデータは暗号化されたRemcosコンフィギュレーションブロックです。

Remcosはまず、コンフィギュレーションブロックを復号します。このコンフィギュレーションブロックはRemcosの存続期間全体を通して参照されます。このブロックにはC2のサーバー情報、攻撃者が被害者を認識できるようRemcosが割り当てた名前、レジストリ内のRemcosサブキー名、被害者のキーロガーやクリップボードデータを記録するためのログファイルの名前、被害者のデバイスでどのように攻撃を開始するかをRemcosに指示する多数のフラグ、C2サーバーとの接続を確立するため認証データなどが含まれます。

Remcosのワークフローは非常にわかりやすく、多数のスレッドを開始して、コンフィギュレーションブロックで定義されたフラグに従って自動起動処理を実行します。これには以下の処理が含まれます。

  • システムレジストリ内の自動実行グループにRemcosを追加する
  • ウォッチドッグプログラム(Remcosのデーモンプログラム)を起動する
  • 入力デバイス(マイク)による被害者の音声入力を記録する
  • 起動時に被害者のスクリーンショットをキャプチャする。
  • 被害者のデバイスでUAC(ユーザーアカウント制御)を無効にする
  • その他

Remcosは、キーボードの入力(キーロガー)、システムクリップボード上のデータ、被害者が最も頻繁に入力するプログラムのタイトルなど、被害者の機密情報をログファイルに随時記録できます(ファイル名はコンフィギュレーションブロックから取得)。そのためには、SetWindowsHookExA() APIを呼び出してキーボードフックを設定し、500マイクロ秒ごとにチェックを実行するスレッドを開始する必要があります。図9はキーボードフックを設定するASMコードスニペットです。

図9:Windowsキーボードフックの設定

「logs.dat」の例を以下に示します。記録日時、最もよく使用されるプログラムのタイトル、被害者のアイドル時間、クリップボードのデータなど、Remcosが私のテスト環境から入手した情報が表示されています。

図10:「logs.dat」に保存された情報の例

Remcosワークフローの次のステップでは、コンフィギュレーションブロックの情報に基づいてC2サーバーとの接続を確立します。

C2サーバーとの通信

RemcosはTLS v1.3プロトコルを使用してC2サーバーと通信します。このプロトコルは、前述のTLSハンドシェイクおよび認証時に、自動的に(Windows APIを使用せずに)実装されます。

Remcosはその後、被害者のシステムから基本的な情報を収集し、最初のパケットに格納してC2サーバーに送信します。最初のパケットのパケット番号は4BHです。AESで暗号化されるパケットを以下に示します。

図11:AES暗号化前の4BHパケットの平文コンテンツ

被害者の基本情報はこのパケットに格納されます。パケットの構造を見てみましょう。

先頭の「24 04 FF 00」は、復号されたコンフィギュレーションブロックから取得するパケットのマジックIDです。これに続くdword「A1 02 00 00」(21AH)は後続データのサイズ、その次のdword「4B 00 00 00」(4BH)はパケット番号です。残りのデータはすべて、被害者のデバイスから収集された基本情報で、以下が含まれますがこれらに限定されません。

  • Remcosが割り当てた名前「Shiesty」(コンフィギュレーションブロックから取得)
  • 被害者のユーザー名とコンピュータ名
  • Windowsのエディション情報とRAMの総バイト数(3757629400)
  • Remcosのバージョン(3.4.0 Pro)
  • 現在のRegAsm.exeの完全パス、現在アクティブな(被害者が使用している)プログラムのタイトル
  • 被害者のアイドル時間
  • システムの稼働時間
  • CPU情報
  • C2サーバーのホスト
  • Remcosペイロードのタイプ(EXEまたはDLL)

上記のすべての値フィールドは、区切り記号「7C 1E 1E 1F 7C」(文字列内の「|…|」)で区切られています。

C2サーバーがこの4BHパケットを受信し続ける限り、図12のように「Connection」サブタブに被害者が表示されます。その後は、このアイテム(赤線で囲まれた部分)を右クリックして必要なコマンドを選択すれば、攻撃者は被害者のデバイスを制御できます。

図12:4BHパケットを受信したC2サーバーの外観

一方Remcosは、C2のコマンドをパースするコールバック関数を登録し、攻撃者のC2サーバーからの次の制御コマンドを待機するため、無限ループ状態になります。

制御コマンド

登録されたコールバック関数から、我々はこのRemcos亜種が87個の制御コマンドを使用していることを確認しました。これらのコマンドは以下のように分類されています。

  • System:Screen Capture、File Manager、File Search、Process Managerなど
  • Surveillance:Webcam、Microphone、Keylogger、Screenloggerなど
  • Network:Proxy、Downloader、Open Webpageなど
  • Extra:Dll Loader、Logins Cleaner、Audio Playerなど
  • Remcos:Reconnect、Restart、Show、Update、Close、Uninstallなど
  • ハートビートパケット

C2サーバーは、40秒おきにハートビートパケットをRemcosに送信します。RemcosがC2サーバーに接続すると、このハートビートによってRemcosが動作していることが確認されます。C2のコマンドパケットには同じフォーマットが使用されています。ここでは、次のようなハートビートパケットを例にとります。

24 04 FF 00 0C 00 00 00 01 00 00 00 30 7C 1E 1E 1F 7C 32 30

パケットのマジックID(「24 04 FF 00」)とパケットサイズ((0x0C)の後ろにある「01 00 00 00」は、ハートビートのコマンド番号(0x01)、残りは「7C 1E 1E 1F 7C」で区切られたコマンドデータ、すなわち30(ASCIIの「0」)と32 30(ASCIIの「20」)です。Remcosは現在アクティブなウィンドウのタイトルと時刻値を取得し、パケット番号4CHに格納してC2サーバーに送信します。

制御コマンドのリストを以下に示します。

 

名前

C&C番号

説明

HeartBeat

01H

ハートビートパケット。

Screen Capture

10H

リモートデスクトップで被害者のデバイスを制御します。

File Manager

98H

被害者のデバイスのファイルシステムを管理します。

File Search

8FH

被害者のデバイスにあるファイルを検索します。

Process Manager

06H

実行中のプロセスを管理します。

Service Manager

34H

被害者のシステムサービスを管理します。

Registry Editor

2FH

被害者のシステムレジストリを表示 / 編集します。

Installed Program

03H

インストールされたすべてのソフトウェアを一覧表示します。

Windows Manager

08H

タスクマネージャーなどのインタフェースを開きます。

Clipboard Manager

28H

被害者のシステムクリップボードを表示 /設定 / 空にします。

Command Line

0EH

コマンドを使用してシェル(cmd.exe)を起動します。

Execute Command

0DH

被害者のデバイスでコマンドを実行します(メモ帳など)。

Remote Scripting

2EH

被害者のデバイスでJS / VBS / バッチを実行します。

Set Wallpaper

92H

被害者のデスクトップに絵柄付きの壁紙を設定します。

Power Manager

27H

ログオフ、スリープ、休止、シャットダウン、リスタートを実行します。

Webcam

1BH

被害者のカメラの動作を制御します。

Microphone

1DH

被害者の音声入力デバイス(マイクなど)をオンにします。

Keylogger

13H

キーロガーを起動します。

Screenlogger

10H

スクリーンロガーを起動します。

Browser history

18H

ブラウザの履歴を消去します。

Proxy

32H

被害者のデバイスにプロキシを設定します。

Open Webpage

0FH

被害者のデフォルトブラウザを使用してURLを開きます。

Chat

30H

被害者とチャットするためにチャットボックスをポップアップ表示します。

MessageBox

26H

被害者へのメッセージをポップアップ表示します。

Downloader

B2H

被害者のデバイスでファイルをダウンロードし実行します。

Dll Loader

2CH

被害者のデバイスでDllモジュールを実行します。

Audio Player

A3H

被害者に対する音声を再生します。

Logins Cleaner

18H

ブラウザのログインおよびクッキーを消去します。

Update

24H

Remcosを更新します。

Uninstall

22H

被害者のデバイスからRemcosをアンインストールします。

Close

21H

現在実行中のRemcosを停止します。

Restart

23H

Remcosを再起動します。

Elevate

27H

Remcosの特権を昇格させます。

上記の制御コマンド以外にも、Remcosには多数のサブコマンドがあり、補助接続で制御コマンドをサポートしています。例えばService Managerコマンド(34H)には、サービスを中止する03H、サービスを一時停止する04H、サービスを再開する01Hなどのサブコマンドがあります。

結論

この分析ブログでは、悪意のあるマクロが含まれたExcel文書を、フィッシングメールによって被害者のデバイスに拡散する方法を説明しました。

次に、複数のVBSおよびPowershellスクリプトを実行してRemcosペイロードをダウンロードする方法と、.Net Dllを使用したプロセスハロウイングによって「RegAsm.exe」プロセスにRemcosペイロードを展開する方法を詳しく述べました。

さらには、Remcosのワークフローをそのコードに基づいて分析し、コンフィギュレーションブロックがPEリソースセクションからどのように復号されるかを調べました。RemcosがC2サーバーとの接続を確立する方法についても説明しました。

最後に、平文のコマンド&コントロールパケットの構造と、Remcosが被害者のデバイスの制御に使用するコマンドをいくつか例を挙げながら解説し、制御コマンドのリストも記載しました。

フォーティネットのソリューション

フォーティネットのお客様は、FortiGuardのWebフィルタリング、アンチウイルス、FortiMail、FortiClient、およびFortiEDRサービス、IPSサービス、CDR(コンテンツ無害化)サービスによってRemcosから保護されています。

Remcosに関連するすべてのURLは、FortiGuard Webフィルタリングサービスによって「悪意あるWebサイト」に分類されています。

キャプチャされたExcelサンプルやダウンロードされたRemcosペイロードファイルは、FortiGuardアンチウイルスサービスによって「VBA/Remcos.REM!tr」および「W32/Rescoms.M!tr」として検知されブロックされます。

FortiEDRは、ExcelファイルとRemcosペイロードファイルの両方を、その動作に基づいて悪意のあるものとして検知します。

フォーティネットは、RemcosのC&Cトラフィックを検知 / ブロックしてお客様を保護するために、IPSシグネチャ「Remcos.Botnet」もリリースしています。

FortiGuard CDR(コンテンツ無害化)は、以下のオプション機能によってユーザーをRemcosの攻撃から保護します。

  • Microsoft Office文書内のリンクオブジェクトの削除を有効 / 無効にする

フォーティネットはこれらの保護機能に加えて、ユーザーがフィッシング脅威を理解し検知するトレーニングができるソリューションを複数用意しています。

FortiPhishフィッシングシミュレーションサービスでは、実際の攻撃をシミュレーションして、組織がフィッシング脅威に対するユーザーの認識や警戒をテストするほか、トレーニングでユーザーがフィッシング攻撃の標的にされた場合の適切な対処を学び、強化することができます。

これらの保護に加えて、企業や組織においてはフォーティネットが無償で提供しているNSEトレーニング:NSE 1 – 情報セキュリティ認識をエンドユーザーに受講させることをお勧めします。このトレーニングには、インターネットの脅威に関するモジュールが含まれ、エンドユーザーがさまざまなタイプのフィッシング攻撃を識別して防御する方法を学習できるようになっています。

IOC(Indicators of Compromise:侵害指標)

URL:

hxxp://209[.]127[.]19[.]101/flip.vbs

hxxp://209[.]127[.]19[.]101/mem.txt

hxxp://209[.]127[.]19[.]101/faze.jpg

shiestynerd[.]dvrlists[.]com:10174

mimi44[.]ddns[.]net:2405

harveyautos110[.]ddns[.]net:2404

harveyautos111[.]hopto[.]org:2404

harveyautos112[.]ddns[.]net:2404

harvey205[.]camdvr[.]org:2404

harvey206[.]casacam[.]net:2404

harvey207[.]accesscam[.]org:2404

23[.]226[.]128[.]197:2404

achimumuazi[.]hopto[.]org:2311

xhangzhi[.]duckdns[.]org:2404

攻撃に使用されたサンプルSHA-256:

[Excel文書]

FBB0575DFD7C1CFE48FB3AA895FBE6C8A554F06899A7152D04CFC39D1D4744AD

[キャプチャされたRemcosサンプル]

8F6DD0DB9E799393A61D6C9CF6495C164E1B13CB8E6B153B32359D5F07E793D2
DA609D3211D60D5B11FEAEAA717834CBE86E18103A1ED4FC09C2EE3E1CFF9442
737E11913EFB64ACCF1B88532C7CE8606676684D8364DDD027926F9FFC6ECFFB
B263876EBC01B310A8BFC58477523981184EB7E8F2DC955F0CF8E62124EB679A
2C8B78FC6C4FE463DAC9D39FDE2871F1BB2605453BC0F2D57C7549CF5D07AA86
A1A1395D0602A473FCC81BA7D1D90C3FB154321D1721E0069722B902B1057CB0
6B816D84ACCC3E1EBCE3EF55B64B0C5E0485228790DF903E68466690E58B5009