FortiGuard Labs 脅威リサーチ
Remcos RAT(リモートアクセス型トロイの木馬)は、本来はコンピュータをリモート制御するための専門的ツールとして設計されました。Remcos RATは2016年7月21日に最初のバージョンが公開されて以来、被害者のデバイスを密かに制御するためハッカーによって悪用されていることから、マルウェアファミリーに分類されています。Remcos RATはオンラインで販売されている商用ソフトウェアです。
影響を受けるプラットフォーム: Microsoft Windows
影響を受けるユーザー: Microsoft Windowsユーザー
影響: デバイスを制御して、機密情報を収集
深刻度: クリティカル
このWebページには、プロフェッショナルエディション(全機能を搭載)とフリーエディション(一部の機能のみ搭載)の2つのバージョンが掲載されています。
このブログでは、フィッシング攻撃によって拡散され、ハッカーが被害者のデバイスを制御するために使用しているRemcos RATについて分析しています。この攻撃は、先日、フォーティネットのFortiGuard Labsによって発見されたものです。
この分析によって以下のことを明らかにしていきます。
図2のEメールの内容からわかるように、ハッカーはこのフィッシングメールを信頼できる銀行からの支払い通知に偽装し、パスワードで保護された添付のExcelファイルを開くよう受信者に要求しています。
添付されたExcel文書を開くと、この文書を表示するためのパスワードを求められます。このパスワードは事前にEメールに記載されています。Excelプログラムで図3のような文書が表示されます。このファイルにはマクロコードが含まれているため、被害者に危険を知らせる黄色いセキュリティ警告バーが表示されます。
ファイルのメッセージは、[コンテンツを有効にする] ボタンをクリックするよう被害者を誘導します。これは警告を回避し、悪意のあるマクロコードを実行するためです。
このマクロには「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の下部は、「faze.jpg」の応答パケットの一部を示しています。もちろんこれは画像ファイルではなく、難読化されたPowerShellコードファイルです。3つの配列変数に3つのエンコードデータが定義されています。それを単純化したものが図5の赤線で囲まれた部分です。「faze.jpg」に格納して運ばれたPowerShellコードは、「flip.vbs」によって実行されます。
ここからは、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()」関数が呼び出されます。
図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プロセスを作成しているところです。
RegAsm.exeにRemcosペイロードが注入されて展開されると、被害者のデバイスでRemcos RATを再開するために、ResumeThread() APIが呼び出されます。
私の解析では、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に示すように、すべてのRemcosは「SETTINGS」という名前のPEリソースセクションに、RC4で暗号化されたコンフィギュレーションブロックを格納しています。先頭バイトの「B1」は、それに続くRC4キー(赤線で囲まれた部分)のサイズ、残りのデータは暗号化されたRemcosコンフィギュレーションブロックです。
Remcosはまず、コンフィギュレーションブロックを復号します。このコンフィギュレーションブロックはRemcosの存続期間全体を通して参照されます。このブロックにはC2のサーバー情報、攻撃者が被害者を認識できるようRemcosが割り当てた名前、レジストリ内のRemcosサブキー名、被害者のキーロガーやクリップボードデータを記録するためのログファイルの名前、被害者のデバイスでどのように攻撃を開始するかをRemcosに指示する多数のフラグ、C2サーバーとの接続を確立するため認証データなどが含まれます。
Remcosのワークフローは非常にわかりやすく、多数のスレッドを開始して、コンフィギュレーションブロックで定義されたフラグに従って自動起動処理を実行します。これには以下の処理が含まれます。
Remcosは、キーボードの入力(キーロガー)、システムクリップボード上のデータ、被害者が最も頻繁に入力するプログラムのタイトルなど、被害者の機密情報をログファイルに随時記録できます(ファイル名はコンフィギュレーションブロックから取得)。そのためには、SetWindowsHookExA() APIを呼び出してキーボードフックを設定し、500マイクロ秒ごとにチェックを実行するスレッドを開始する必要があります。図9はキーボードフックを設定するASMコードスニペットです。
「logs.dat」の例を以下に示します。記録日時、最もよく使用されるプログラムのタイトル、被害者のアイドル時間、クリップボードのデータなど、Remcosが私のテスト環境から入手した情報が表示されています。
Remcosワークフローの次のステップでは、コンフィギュレーションブロックの情報に基づいてC2サーバーとの接続を確立します。
RemcosはTLS v1.3プロトコルを使用してC2サーバーと通信します。このプロトコルは、前述のTLSハンドシェイクおよび認証時に、自動的に(Windows APIを使用せずに)実装されます。
Remcosはその後、被害者のシステムから基本的な情報を収集し、最初のパケットに格納してC2サーバーに送信します。最初のパケットのパケット番号は4BHです。AESで暗号化されるパケットを以下に示します。
被害者の基本情報はこのパケットに格納されます。パケットの構造を見てみましょう。
先頭の「24 04 FF 00」は、復号されたコンフィギュレーションブロックから取得するパケットのマジックIDです。これに続くdword「A1 02 00 00」(21AH)は後続データのサイズ、その次のdword「4B 00 00 00」(4BH)はパケット番号です。残りのデータはすべて、被害者のデバイスから収集された基本情報で、以下が含まれますがこれらに限定されません。
上記のすべての値フィールドは、区切り記号「7C 1E 1E 1F 7C」(文字列内の「|…|」)で区切られています。
C2サーバーがこの4BHパケットを受信し続ける限り、図12のように「Connection」サブタブに被害者が表示されます。その後は、このアイテム(赤線で囲まれた部分)を右クリックして必要なコマンドを選択すれば、攻撃者は被害者のデバイスを制御できます。
一方Remcosは、C2のコマンドをパースするコールバック関数を登録し、攻撃者のC2サーバーからの次の制御コマンドを待機するため、無限ループ状態になります。
登録されたコールバック関数から、我々はこのRemcos亜種が87個の制御コマンドを使用していることを確認しました。これらのコマンドは以下のように分類されています。
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の攻撃から保護します。
フォーティネットはこれらの保護機能に加えて、ユーザーがフィッシング脅威を理解し検知するトレーニングができるソリューションを複数用意しています。
FortiPhishフィッシングシミュレーションサービスでは、実際の攻撃をシミュレーションして、組織がフィッシング脅威に対するユーザーの認識や警戒をテストするほか、トレーニングでユーザーがフィッシング攻撃の標的にされた場合の適切な対処を学び、強化することができます。
これらの保護に加えて、企業や組織においてはフォーティネットが無償で提供しているNSEトレーニング:NSE 1 – 情報セキュリティ認識をエンドユーザーに受講させることをお勧めします。このトレーニングには、インターネットの脅威に関するモジュールが含まれ、エンドユーザーがさまざまなタイプのフィッシング攻撃を識別して防御する方法を学習できるようになっています。
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
[Excel文書]
FBB0575DFD7C1CFE48FB3AA895FBE6C8A554F06899A7152D04CFC39D1D4744AD
[キャプチャされたRemcosサンプル]
8F6DD0DB9E799393A61D6C9CF6495C164E1B13CB8E6B153B32359D5F07E793D2
DA609D3211D60D5B11FEAEAA717834CBE86E18103A1ED4FC09C2EE3E1CFF9442
737E11913EFB64ACCF1B88532C7CE8606676684D8364DDD027926F9FFC6ECFFB
B263876EBC01B310A8BFC58477523981184EB7E8F2DC955F0CF8E62124EB679A
2C8B78FC6C4FE463DAC9D39FDE2871F1BB2605453BC0F2D57C7549CF5D07AA86
A1A1395D0602A473FCC81BA7D1D90C3FB154321D1721E0069722B902B1057CB0
6B816D84ACCC3E1EBCE3EF55B64B0C5E0485228790DF903E68466690E58B5009