レムコス・オン・ザ・ワイヤーネットワークアーティファクトとC2コマンド構造の分析

概要

Remcosは、2016年7月にドイツのBreaking Security社によって初めて紹介されたリモートアクセストロージャン(RAT)です。当初はWindowsシステムのリモート管理のための合法的なツールとして販売されていましたが、その後、サイバー犯罪者によって悪意のある目的で広く採用されています。このマルウェアは通常、マクロが埋め込まれたMicrosoft Office文書や正規のコンテンツを装ったZIPファイルなど、悪意のある添付ファイルを含むフィッシングメールを通じて配布されます。これらの添付ファイルを実行すると、被害者のシステム上にRemcosが展開されます。場合によっては、攻撃者は既知の脆弱性を悪用して感染プロセスを促進します。

Remcosは、キーロギング、画面キャプチャ、音声および動画の記録、リモートコマンドの実行など、広範な機能を攻撃者に提供します。また、システム情報の収集、認証情報の窃取、さらに悪意のあるペイロードのダウンロードも可能です。このマルウェアは、モジュール式のアーキテクチャを採用しているため、新たな機能を追加することが可能で、さまざまな悪意のあるキャンペーンに対応することができます。

最近のRemcosのサンプル(バージョン6.1.1 pro)は、悪意のある7Zアーカイブを添付したスパムメールを通じて拡散していることが確認されています。このアーカイブには、検出を回避するために設計された、高度に難読化されたバッチファイルが含まれています。バッチファイル内には、暗号化され圧縮された2つのデータストリーム(具体的には、AES暗号化とGZIP圧縮)が含まれており、実行中にこれらのデータストリームが復号化および解凍されます。このプロセスにより、最終的にRemcosペイロードが被害者のマシン上に展開されます。

技術詳細

悪意のあるバッチ ファイルは高度に難読化されており、Base64 エンコードされた PowerShell コードが埋め込まれています。検出を回避するため、攻撃者はスクリプト全体にジャンクコードを挿入しています。たとえば、1行目の文字列「ywg」を置き換えると、echoコマンドが表示され、隠された機能が存在することがわかります。

難読化バッチファイル

図 1 – 難読化されたバッチファイル

実行すると、バッチファイルは埋め込まれたPowerShellスクリプトを実行し、ユーザーのプロファイルディレクトリに「dwm.bat」ファイルが存在するかどうかをチェックします。ファイルが存在する場合、その内容を1行ずつ読み、マーカー ::: を含む行を検索し、それに続くコンテンツを抽出します。この内容はBase64エンコードされたPowerShellコードであり、その後デコードされ実行されます。「dwn.bat」ファイルが存在しない場合、スクリプトは単に終了します。

組み込みPowerShellスクリプト

図2 – 組み込みPowerShellスクリプト

AMSIとETWのバイパス

解読されたPowerShellスクリプトは、Invoke-SysRoutineと呼ばれる関数を定義し、Antimalware Scan Interface(AMSI)とEvent Tracing for Windows(ETW)の両方をバイパスする技術を実装しています。これは、実行時にシステムAPIアドレスを動的に解決し、.NETの相互運用性とWindowsのネイティブAPIコールを使用してターゲット関数のメモリを変更することで、セキュリティの遠隔測定を無効にし、検出を回避することで実現します。

このスクリプトは、GetProcAddress や GetModuleHandle などの重要なシステム関数を、実行時にその名前をデコードすることで動的に解決するため、静的解析が困難になります。このスクリプトは、管理されていないコードを呼び出すカスタムデリゲートを作成し、VirtualProtectを使用してメモリ保護を変更し、AMSIのAmsiInitialize関数を修正します。

AMSIバイパス

図3 – AMSIバイパス

さらに、メモリ内の複数の AMSI プロバイダをスキャンしてパッチを適用し、完全に無効化します。DisableSvcフラグが使用されている場合、ntdll.dllのEtwEventWrite関数も対象となり、セキュリティイベントのロギングが効果的に抑制されます。システムの安定性を維持するため、パッチ適用後にメモリ保護が復元されます。

 ETWパッチ

図4 ETWパッチ

復号と解凍

AMSIとETWのバイパスに成功した後、バッチファイル内の埋め込みPowerShellスクリプトは、マーカー::の位置を特定し、それに続くコンテンツを抽出し、区切り記号としてバックスラッシュ(˶)を使用してこのデータを分割します。その結果、base64 エンコードされた値が配列に格納され、さらに処理されます。

PowerShellスクリプト 暗号化された要素の読み取り

図 5: PowerShell スクリプトによる暗号化された要素の読み取り

抽出された配列要素は、CBC(暗号ブロック連鎖)モードで AES を使用する復号化関数に渡されます。この関数は、ハードコードされたキーと初期化ベクトル(IV)を使用してコンテンツを復号します。復号化された出力は、その後、GZIP解凍を処理する別の関数に渡されます。

 AES復号化

図6 – AES復号化

両方の配列要素が解凍されると、スクリプトは2つの実行可能ファイルを取り出します。最初の実行ファイルには空のmain()関数が含まれており、アクティブな目的はありません。

 CyberChefによるAES復号とGZIP解凍

図7 – CyberChefを使用したAES復号化とGZIP解凍

スクリプトは次に、抽出した実行ファイルを、ディスクにバイナリを保存せずにPowerShellプロセス内のメモリから悪意のあるバイナリを直接実行するリフレクションローディングを使用する関数に渡します。この手法により、ペイロードのメモリ内実行が可能になり、検出と分析がより困難になります。

反射ローディング

図8 – 反射荷重

最初の配列要素から抽出された実行可能ファイルには空のメイン関数が含まれており、攻撃者が検知を回避するためのおとりや回避戦術として使用している可能性があることを示しています。

レムコスローダー

2番目の配列要素から抽出された実行可能ファイルは、被害者マシン上でRemcosペイロードをロードするローダとして動作します。実行すると、ローダーは「ntdll.dll」をロードし、「EtwEventWrite」関数のアドレスを取得し、この関数のメモリ保護をPAGE_EXECUTE_READWRITEに変更します。

32ビットシステムでは、関数を即座にリターンさせる命令(0xC2 0x14)を追加し、事実上ETWロギングを無効にします。64ビットシステムでは、スクリプトはEtwEventWrite関数の開始を0xC3命令で置き換えます。この変更により、イベント・ロギングが無効になります。一度変更されると、スクリプトはそれ以上の変更を避けるために元のメモリ保護を復元し、効果的にEtwEventWriteをno-opに変え、マルウェアがセキュリティツールによる検出を回避するのに役立ちます。

ETWEventWrite パッチング

図 9 – ETWEventWrite パッチング

最終段階で、ローダはアセンブリの埋め込みリソースを検索して、「xxxxxxxxxxxxxxxxxxxxxx.exe」という特定のエントリを探します。リソースが存在する場合は、GetManifestResourceStream() を使用してその内容を抽出します。

抽出されたデータはGZIP圧縮され、AES暗号化されます。暗号化されたデータは、事前に定義されたキーと初期化ベクターを使用して復号化されます。復号化されると、Remcosとして識別されるペイロードが実行され、攻撃者は侵害されたシステムをリモートで制御できるようになります。

ネットワークとC&C接続の詳細

実行に成功すると、Remcos RATはgeoplugin.net/json.gpにGETリクエストを送信し、被害者の公開IPアドレスに基づくジオロケーションを取得します。このAPIレスポンスには、国、都市、地域、緯度、経度、タイムゾーンなどの詳細が含まれます。収集されたデータは、攻撃者が被害者をプロファイリングし、地理的位置に基づいて操作を適応させるのに役立ちます。

ジオロケーションの詳細を収集

図 10 – 地理位置情報の収集

被害者のマシンを完全に制御する前に、Remcos RAT はまずシステム情報を収集し、それをコマンド&コントロール(C&C)サーバーに送信して感染したデバイスを登録します。Remcosは、TLSを使用してC&Cサーバとのセキュアな接続を開始し、暗号化通信を行います。各パケットには、以下のように、一意の識別子バイト列、転送されるデータのサイズ、および意図された操作を指定するコマンドIDが含まれます。

被害機器登録用初期パケット

図11- 被害者機器登録用初期パケット

Remcosは、コマンドID 0x4Bを使用して、被害者のマシンから攻撃者のコマンド&コントロール(C2)サーバーに詳細なシステム情報とユーザー情報を流出させます。このデータは、感染したデバイスを登録し、感染したホストの制御を確立するために使用されます。このプロセスでは通常、以下の情報が収集されます:

  • デバイス名とユーザー名
  • 被害者の端末の位置
  • オペレーティングシステム情報
  • メモリの状態
  • レムコスバージョン
  • Remcos Keylogger ローカルファイルパス
  • レムコス フルパス
  • アクティブ・プログラム名
  • ユーザーの特権レベル
  • システム稼働時間
  • アイドルタイム
  • レムコス割り当て名
  • C&CサーバーIP
  • レムコスのファイルタイプ
  • プロセッサー情報

初期登録後、C2サーバはRemcosクライアントにID 0x01のコマンドを送信します。このコマンドは、ハートビートまたは情報ビーコンとして機能し、感染したマシンが攻撃者に定期的なステータス更新を送信するよう促します。

ビーコン・パケット

図12 – ビーコン・パケット

これに応答して、Remcosは0x4Cコマンドとともに、アクティブウィンドウのタイトルやシステムの稼働時間などのランタイムシステムテレメトリを含む情報を送信します。これにより、攻撃者は感染したマシンの活動をリアルタイムで監視し、デバイスを持続的に制御することができます。

ビーコン・リクエストへの対応

図13 – ビーコン・リクエストへの応答

この後、C&Cサーバーは、感染初期段階で収集されたジオロケーション情報を取得するために、コマンドID 0x11を使用して感染マシンにリクエストを発行します。これに応答して、Remcosは同じコマンドID 0x11を使用して、以下のようにジオロケーションの詳細を返送します。

流出ジオロケーションの詳細

図 14 – 流出ジオロケーションの詳細

また、C&C サーバーからファイルをダウンロードする際には、必ずコマンド ID 0x44 が使用されることが確認されています。具体的には、MZヘッダを持つファイルが取得されると、以下のように、コマンド0x44の後にファイルの内容が続く通信が行われます。

追加ペイロードのダウンロード

図15 – ペイロードの追加ダウンロード(出典:malware-traffic-analysis.net)

Unified SASE as a Serviceは、どのようにRemcos感染を軽減するのですか?

統合SASEフレームワークは、ネットワークセキュリティとゼロトラストアクセス制御を統合し、データの流出やリモート操作のためにコマンド&コントロール(C2)チャネルを使用するRemcos RATのような脅威を防御します。SASEは、ネットワークトラフィックを一元的に可視化し、すべての拠点で一貫したセキュリティポリシーを適用します。高度なIDPS、SWG、リアルタイムの脅威インテリジェンスなど、SASEに組み込まれているセキュリティ機能は、特定のコマンドIDや疑わしいHTTPパターンなど、Remcosの活動の指標を検出することができます。アウトバウンドのHTTP通信を検査することで、SASEはジオロケーションデータの流出やリモートコマンドの配信の試みを特定し、許可されていない送信を自動的にブロックし、侵害のリスクを最小限に抑えます。

MITRE ATT&CK マッピング:TTP

  • T1566.001 – フィッシング:スピアフィッシングの添付ファイル
  • T1059.001 – コマンドおよびスクリプト・インタープリタ:PowerShell
  • T1204.002 – ユーザーの実行:悪意のあるファイル
  • T1027 – 難読化されたファイルまたは情報
  • T1055.002 – プロセスインジェクション:ポータブル実行可能インジェクション
  • T1562.001 – 防御の減損:ツールの無効化または変更
  • T1003 – OS クレデンシャルダンプ
  • T1082 – システム情報ディスカバリー
  • T1016 – システム・ネットワーク構成の検出
  • T1071.001 – アプリケーション層プロトコル:ウェブプロトコル
  • T1056.001 – 入力キャプチャ:キーロギング
  • T1113 – 画面キャプチャ
  • T1123 – オーディオ・キャプチャー
  • T1125 – ビデオキャプチャー
  • T1041 – C2チャンネル経由の流出
  • T1020 – 自動浸出

参考


https://www.fortinet.com/blog/threat-research/new-campaign-uses-remcos-rat-to-exploit-victims