ゴサールとSADBRIDGEの下で:クエーサーはGolangの書き直しを取得します

Elastic Security Labsは、中国語を話す被害者を標的としたキャンペーンで使用されたマルウェア、SADBRIDGEローダーとGOSARバックドアの詳細を共有します。

30分で読めますマルウェア分析
GOSARとSADBRIDGEの下で:Golangで書き直されるQUASAR

はじめに

Elasticセキュリティラボは最近、中国語圏を標的とした新たな侵入セットを観測し、REF3864として追跡されました。これらの組織的なキャンペーンは、Webブラウザやソーシャルメディアメッセージングサービスなどの正当なソフトウェアになりすまして被害者を標的にしています。これらのキャンペーンの背後にある脅威グループは、Linux、Windows、Androidなどの複数のプラットフォームにマルウェアを配信する際に、中程度の汎用性を示しています。この調査中に、私たちのチームは、SADBRIDGEと呼ばれるカスタムローダーを使用した独自のWindows感染チェーンを発見しました。このローダーは、GOSARと呼ばれるQUASARのGolangベースの再実装をデプロイします。私たちのチームがGolangプログラミング言語でQUASARの書き直しを観察するのはこれが初めてです。

重要なポイント

  • 中国語を話す人を標的としたキャンペーンが進行中で、TelegramやOperaウェブブラウザなどの正規のソフトウェアを装った悪意のあるインストーラーが登場
  • 感染チェーンは、カスタムローダー(SADBRIDGE)を使用したインジェクションとDLLサイドローディングを採用しています
  • SADBRIDGEは、Golang(GOSAR)で書かれたQUASARバックドアの新たに発見された亜種をデプロイします
  • GOSARは、活発に開発されている多機能バックドアであり、不完全な機能と改善された機能の反復が時間の経過とともに観察されます
  • Elasticセキュリティは、この攻撃チェーンに対する包括的な防止および検出機能を提供します

REF3864キャンペーン概要

11月、Elastic Security Labsチームは、VirusTotalにアップロードされたいくつかの異なるサンプルを爆発させる際に、ユニークな感染チェーンを観測しました。これらの異なるサンプルは、TelegramやOpera GXブラウザなどの正規のソフトウェアを装ったランディングページを介してホストされていました。

この調査では、同様の手法が関与する複数の感染チェーンが明らかになりました。

  • トロイの木馬化されたMSIインストーラーで検出率が低い
  • 悪意のあるDLLにバンドルされた正規のソフトウェアを使用したなりすまし
  • カスタムSADBRIDGEローダーのデプロイ
  • 最終ステージ GOSAR 搭載

これらのキャンペーンは、複数の抽象化レベルにより、目立たないところを飛んでいたと考えています。通常、最初のフェーズでは、MSI インストーラーを含むアーカイブ ファイル (ZIP) を開きます。Windows x64dbg.exe デバッグ アプリケーションなどの正規のソフトウェアは、悪意のあるパッチが適用された DLL (x64bridge.dll) をロードするためにバックグラウンドで使用されます。このDLLは、新しい正当なプログラム(MonitoringHost.exe)を開始し、別の悪意のあるDLL(HealthServiceRuntime.dll)をサイドロードし、最終的にインジェクションを実行し、インジェクションを介してメモリにGOSARインプラントをロードします。

マルウェアの研究者は、敵対者が指定したキャンペーンの日付を明らかにし、同様のTTPによる運用が少なくとも2023年12月から進行中であることを示すSADBRIDGE構成を抽出しました。GOSARのC2(C2)インフラストラクチャは、信頼できるサービスやソフトウェアを装い、無害に見え、ソフトウェアインストーラーに対する被害者の期待に沿うことがよくあります。実行チェーン全体を通じて、 360tray.exeなどの中国の AV 製品を列挙することと、ファイアウォール ルールの名前と説明を中国語で列挙することに重点が置かれています。これらのカスタマイズにより、この脅威は中国語を話す人々を標的にしていると考えています。さらに、中国語のロギングが広く使用されていることから、攻撃者は中国語を話す人でもあることが分かります。

QUASARは、 2017 年以降、中国と関係のある APT10 など、国家が支援するスパイ活動、非国家的なハクティビズム、および犯罪的な金銭的動機による攻撃に使用されてきました(Qualys、 Evolution of Quasar RAT など)。Golangの書き直しは、この期間に得られた制度的知識を活用し、以前に効果的だったTTPの広範な再訓練なしに追加の機能を可能にするかもしれない。

GOSARは、QUASARを拡張し、情報収集機能の追加、マルチOSのサポート、アンチウイルス製品やマルウェア分類器に対する回避能力の向上などを備えています。しかし、一般的なおとり捜査のウェブサイトや、追加のターゲティング情報や目標に対する行動が不足しているため、攻撃者の動機を特定するための証拠は不十分です。

SADBRIDGEの紹介

SADBRIDGEマルウェアローダーは、配信用のMSI実行可能ファイルとしてパッケージ化されており、さまざまなインジェクション手法でDLLサイドローディングを使用して悪意のあるペイロードを実行します。SADBRIDGEは、 x64dbg.exeMonitoringHost.exe などの正当なアプリケーションを悪用して、 x64bridge.dllHealthServiceRuntime.dllなどの悪意のあるDLLをロードし、後続のステージとシェルコードにつながります。

永続性は、サービスの作成とレジストリの変更によって実現されます。管理者への権限昇格は、ICMLuaUtil COM インターフェイスを悪用する UAC バイパス手法を使用してサイレントに行われます。さらに、SADBRIDGEには、Windowsタスクスケジューラを介した 権限昇格バイパス が組み込まれており、SYSTEMレベルの権限でメインペイロードを実行します。

SADBRIDGE 構成は、構成ストリングの各バイトで 0x1 を単純に減算して暗号化されます。暗号化されたステージはすべて .log 拡張子で追加され、実行時に XOR と LZNT1 解凍アルゴリズムを使用して復号化されます。

SADBRIDGEは、プロセスインジェクションに PoolParty、APCキュー、およびトークン操作技術を採用しています。サンドボックス分析を回避するために、長い Sleep API 呼び出しを使用します。別の防御回避手法には、マルウェア対策スキャンインターフェイス(AMSI)やWindowsイベントトレーシング(ETW)などのWindowsセキュリティメカニズムを無効にするAPIパッチの適用が含まれます。

次の詳細では、実行チェーンを探索するように構成されており、分析されたサンプルの構成に基づいて、重要なファイルとステージの機能と機能を段階的に説明します。この分析は、各コンポーネントと最終ペイロードに到達する際のそれらの役割との間の相互作用を強調することを目的としています。

SADBRIDGEコード解析

MSI分析

初期ファイルは Advanced Installerを使用してMSIにパッケージ化され、関心のある主なファイルは x64dbg.exe ファイルと x64bridge.dllです。

MSI ツール (lessmsi) を使用すると、aicustact.dllLaunchApp エントリポイントが AI_APP_FILE プロパティで指定されたファイル パスを実行するように構成されていることがわかります。

この AI_APP_FILE プロパティに移動すると、この構成に関連付けられているファイルが x64dbg.exeであることがわかります。これは、インストールが完了した後に実行されるファイルを表し、正当な NetFxRepairTool.exe は実行されません。

x64bridge.dll サイドローディング

x64dbg.exeが実行されると、x64bridge.dllから BridgeInit エクスポートが呼び出されます。BridgeInitBridgeStart 関数のラッパーです。

BLISTERで観察される手法と同様に、SADBRIDGEは正当なDLLのエクスポートにパッチを適用します。

マルウェアの初期化ルーチン中に、SADBRIDGEはホスト名とマジックシード 0x4E67C6A7を使用してハッシュを生成することから始めます。このハッシュは、暗号化された設定ファイルを保存するためのディレクトリ名として使用されます。暗号化された設定は C:\Users\Public\Documents\<hostname_hash>\edbtmp.logに書き込まれます。このファイルには、通常のディレクトリ リストから自身を隠すための属性 (FILE_ATTRIBUTE_SYSTEM、FILE_ATTRIBUTE_READONLY、FILE_ATTRIBUTE_HIDDEN) が含まれています。

構成の復号化は簡単で、暗号化されたチャンクはヌルバイトで区切られます。暗号化されたチャンク内のバイトごとに、それらを 0x1ずつインクリメントできます。

構成は、次のもので構成されます。

  • キャンペーン実施予定日
  • サービスの作成に使用する文字列
  • MonitoringHost.exeの新しい名前(DevQueryBroker.exe)
  • MonitoringHost.exeによってサイドロードされる DLL の DLL 名 (HealthServiceRuntime.dll)
  • 追加ステージの絶対パス (.log ファイル)
  • GOSARをホストするための主要な注入ターゲット(svchost.exe)

DevQueryBrokerディレクトリ(C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker\)には、実行時に復号化されるすべての暗号化されたステージ(.logファイル)が含まれています。このファイル (DevQueryBroker.exe) は、Microsoft の正規アプリケーション (MonitoringHost.exe) の名前を変更したコピーです。

最後に、同じフォルダ内の悪意のあるHealthServiceRuntime.dllをサイドロードするDevQueryBroker.exeを実行するプロセスを作成します。

HealthServiceRuntime.dll

このモジュールは、暗号化されたシェルコードと部分的に復号化されたシェルコードの両方をユーザーの %TEMP% ディレクトリにドロップします。シェルコードのファイル名は、 log<random_string>.tmpの形式に従います。部分的に復号化されたシェルコードの各バイトは、完全に復号化するために 0x10 ずつデクリメントされます。シェルコードは、同じプロセスの新しいスレッドで実行されます。

このマルウェアは、SonicWallが発表した 研究 と同じアルゴリズムを使用してAPIハッシュを利用しており、ハッシュアルゴリズムは付録 セクションに記載されています。シェルコードは DevQueryBroker.log をPEファイルに復号化し、ファイルの最初の3分の1に1バイト(0x42) で単純なXOR演算を実行し、LZNT1アルゴリズムを使用して結果を解凍します。

次に、シェルコードは NtUnmapViewOfSectionを使用して PE ファイルの優先ベースアドレスにある既存のマッピングをアンマップし、 VirtualAlloc の呼び出しによって優先ベースアドレスから始まるメモリが割り当てられます。最後に、復号化されたPEファイルをこの割り当てられたメモリにマップし、実行をそのエントリポイントに転送します。SADBRIDGEによって識別および実行されるすべてのシェルコードは、復号化と実行のために参照する特定の .log ファイルのみが異なる、同一のコード構造を共有します。

DevQueryBroker.log

このマルウェアは、 amsi.dll を動的にロードして、Windowsの重要なセキュリティメカニズムを無効にします。これは、戻り値を 0x80070057に変更する命令を挿入することでamsi.dllAmsiScanBufferパッチを適用し、標準化された Microsoft エラー コードE_INVALIDARG無効な引数を示し、早期に返すことで、スキャン ロジックを効果的にバイパスします。同様に、常に同じエラーコードを返すようにAmsiOpenSessionE_INVALIDARGパッチを適用します。さらに、ntdll.dllEtwEventWriteにパッチを適用し、最初の命令を Event Tracing for Windows (ETW) を無効にするret命令に置き換えて、悪意のあるアクティビティのログ記録を抑制します。

パッチ適用後、暗号化されたシェルコードがパス (C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker\temp.ini) の temp.ini に書き込まれます。
マルウェアは、現在のプロセストークンのグループメンバーシップをチェックして、その特権レベルを判断します。プロセスが LocalSystem アカウントに属しているかどうかを確認するには、 SECURITY_LOCAL_SYSTEM_RID で SID を初期化し、 CheckTokenMembershipを呼び出します。そうでない場合は、 SECURITY_BUILTIN_DOMAIN_RIDDOMAIN_ALIAS_RID_ADMINS を使用して SID を作成し、同様のトークン メンバーシップ チェックを実行して、Administrators グループのメンバーシップを確認しようとします。

現在のプロセスに LocalSystem または Administrator 特権がない場合、特権は最初に ICMLuaUtil COM インターフェイスを利用して UAC バイパス メカニズムを通じて Administrator に昇格されます。モニカー文字列 "Elevation:Administrator!new:{3E5FC7F9-9A51-4367-9063-A120244FBEC7}" を作成して、管理者特権を持つ CMSTPLUA オブジェクトのインスタンスを作成します。オブジェクトが作成され、 ICMLuaUtil インターフェイスが取得されると、マルウェアはインターフェイスの公開された ShellExec メソッドを使用して DevQueryBroker.exeを実行します。

タスクまたはサービスが DevQueryBroker.exe を定期的に実行するように作成されていない場合、マルウェアはアンチウイルスプロセス 360tray.exe が実行されているかどうかを確認します。実行されていない場合は、権限昇格のためのサービスが SYSTEM に作成され、次のプロパティが使用されます。

  • サービス名: DevQueryBrokerService
    バイナリ パス名: "C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker\DevQueryBroker.exe -svc"
  • 表示名: DevQuery Background Discovery Broker Service
  • 説明: アプリがバックグラウンド タスクを使用してデバイスを検出できるようにします。
  • スタートタイプ: システム起動時に自動的に
  • 特権: LocalSystem

360tray.exeの実行が検出された場合、マルウェアは暗号化されたPEファイルをDevQueryBrokerService.logに書き込み、次の段階のPEファイル(ステージ1)を現在のプロセスメモリにマッピングし、実行を転送します。

DevQueryBroker.exeがSYSTEMレベルの権限で再トリガーされ、チェーンのこの部分に到達すると、マルウェアはWindowsのバージョンをチェックします。Vista 以降 (Windows 7 を除く) を実行しているシステムでは、別の次のステージ (ステージ 2) をメモリにマップし、そこで実行を転送します。

ただし、Windows 7 では、シェルコードが実行され、 DevQueryBrokerPre.log ファイルが復号化されて実行されます。

ステージ 1 インジェクション(explorer.exe)

SADBRIDGEは、 PoolParty Variant 7 を使用して、スレッドプールのI/O完了キューをターゲットにしてシェルコードを explorer.exe に挿入します。最初に、ターゲット プロセスの I/O 完了キューへのハンドルを複製します。次に、シェルコードを格納するために explorer.exe 内にメモリを割り当てます。細工された TP_DIRECT 構造体を格納するために追加のメモリが割り当てられ、これにはシェルコードのベースアドレスがコールバックアドレスとして含まれています。最後に、 ZwSetIoCompletionを呼び出し、 TP_DIRECT 構造体へのポインタを渡して、ターゲット プロセスのワーカー ファクトリ (ワーカー スレッド マネージャー) の I/O 完了キューにパケットをキューイングし、挿入されたシェルコードの実行を効果的にトリガーします。

このシェルコードは、 DevQueryBrokerService.log ファイルを復号化し、優先ベースアドレスを占有するメモリ領域のマッピングを解除し、PEファイルをそのアドレスにマッピングしてから、そのエントリポイントを実行します。この動作は、以前に観察されたシェルコードを反映しています。

ステージ 2 インジェクション(spoolsv.exe/lsass.exe)

ステージ 2 では、SADBRIDGE は、ステージ 1 と同じインジェクション手法を使用して、シェルコードを spoolsv.exeに注入するか、spoolsv.exeが利用できない場合は lsass.exe に注入します。シェルコードは、 DevQueryBrokerPre.log をPEファイルに復号化し、優先ベースアドレスを占める領域のマッピングを解除し、PEファイルをマッピングし、実行をエントリポイントに転送するという、前の段階と同様の動作を示します。

DevQueryBrokerService.log

前のセクションで述べたように、 DevQueryBrokerService.log から復号化されたシェルコードは、Windowsタスクスケジューラを使用した権限昇格手法を活用しています。SADBRIDGE は、IElevatedFactorySever COM オブジェクトを使用してパブリック UAC バイパス技術を統合し、スケジュールされたタスクを間接的に作成します。このタスクは DevQueryBroker.exe 、タスク名 DevQueryBrokerService.

その痕跡を隠すために、マルウェアはプロセス環境ブロック(PEB)を直接変更することにより、イメージパスとコマンドラインをスプーフィングします。これは、COMサービスが explorer.exeから来ているように偽装する試みです。

DevQueryBrokerPre.log

SADBRIDGE は、以下の属性を持つレジストリー・サブキー SYSTEM\CurrentControlSet\Services\DevQueryBrokerServiceSvc の下に DevQueryBrokerServiceSvc という名前のサービスを作成します。

  • 説明: アプリがバックグラウンド タスクを使用してデバイスを検出できるようにします。
  • DisplayName: DevQuery バックグラウンド検出ブローカー サービス
  • ErrorControl: 1
  • ImagePath: %systemRoot%\system32\svchost.exe -k netsvcs
  • オブジェクト名: LocalSystem
  • 開始: 2 (自動開始)
  • タイプ:16。
  • 失敗アクション:
    • 失敗カウントを 24 時間ごとにリセットします。
    • 3 回の再起動試行を実行します (1 回目は 20 ミリ秒、2 回目と 3 回目は 1 分)。

サービス・パラメーターは、 C:\Program Files (x86)\Common Files\Microsoft Shared\Stationery\<hostname_hash>\DevQueryBrokerService.dllにあるServiceDllを指定します。DLLファイルが存在しない場合は、直後にディスクにドロップされます。

DevQueryBrokerService.dll は、実行チェーンの初期の段階で見られる HealthServiceRuntime.dllと同様のコード構造を持っています。DevQueryBroker.logの復号化と実行を担当します。ServiceDllは、サービスの開始時にsvchost.exeによって読み込まれて実行されます。

さらに、SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost\netsvcs キーを変更して、新しく作成されたサービスをnetsvcs サービス ホスト グループによって管理されるサービスのグループに統合するための DevQueryBrokerServiceSvc のエントリを含めます。

次に、SADBRIDGE は、レジストリー・サブキー SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Schedule\\TaskCache\\Tree\\DevQueryBrokerServiceSYSTEM\\CurrentControlSet\\Services\\DevQueryBrokerServiceを削除することによって、以前に作成したスケジュールされたタスクとサービスを削除します。

最後に、新しい永続化メカニズムが導入されているため、C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBrokerフォルダ内のDevQueryBroker.exeファイルとHealthServiceRuntime.dllファイルが削除されます。

GOSARインジェクション

コードの後半では、SADBRIDGE は WTSEnumerateSessionsA API を使用して、ローカル・マシン上のすべてのアクティブ・セッションを列挙します。

セッションが見つかった場合は、各セッションを反復処理します。

  • セッションごとに、WTSQuerySessionInformationAを使用してユーザー名(WTSUserName)の取得を試みます。クエリが失敗すると、次のセッションに移動します。
  • WTSUserName が空でない場合、コードは svchost.exeをターゲットとし、そのパス、セッション ID、およびローダ設定の内容を、最終ステージを挿入するサブルーチンに渡します。
  • WTSUserName が空で、セッションのWinStationName"Services" (サービス セッションを示す) 場合、代わりに dllhost.exe を対象とし、同じパラメーターを最終ステージのインジェクション サブルーチンに渡します。

セッションが見つからない場合は、無限ループに入り、セッションを繰り返し列挙し、最終ステージを注入するためのサブルーチンを呼び出しながら、冗長な注入を回避するためのチェックを実行します。

ログイン セッションは svchost.exeを対象とし、サービス セッションまたはログイン ユーザーがいないセッションは dllhost.exeを対象とします。

セッション ID が使用可能な場合、コードはそのセッションのユーザー・トークンを複製し、重複したトークンの整合性レベルを S-1-16-12288 (システム整合性) に昇格しようとします。次に、昇格したトークンを使用して、 CreateProcessAsUserAを介して子プロセス(svchost.exe または dllhost.exe)を作成します。

トークンの操作に失敗した場合、またはセッション ID が使用できない場合 (システム プロセスのセッション ID は 0 でもかまいません)、 CreateProcessAを使用してトークンのないプロセスの作成にフォールバックします。

暗号化されたシェルコード C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker\temp.ini は、以前に .log ファイルを復号化するために見たのと同じXORおよびLZNT1解凍技術を使用して復号化され、APCインジェクションを使用して、新しく作成されたプロセスのスレッドで実行するシェルコードをキューに入れることができます。

最後に、挿入されたシェルコードは DevQueryBrokerCore.log をGOSARに復号化し、新しく作成されたプロセスのメモリで実行します。

GOSARの紹介

GOSARは、WindowsおよびLinuxシステムを標的とする多機能リモートアクセス型トロイの木馬です。このバックドアには、システム情報の取得、スクリーンショットの撮影、コマンドの実行、キーロギングなどの機能が含まれています。GOSARバックドアは、QUASARのコア機能と動作の多くを保持しながら、元のバージョンと区別するいくつかの変更を組み込んでいます。

Goのような最新の言語でマルウェアを書き換えることで、多くのアンチウイルスソリューションやマルウェア分類子がこれらの新しいプログラミング構造の下で悪意のある文字列/特性を特定するのに苦労するため、検出率が低下する可能性があります。以下は、アップロード時に 5 個の検出のみを受け取る解凍された GOSAR の良い例です。

特に、この亜種は、Linuxシステム用のELFバイナリやWindows用の従来のPEファイルなど、複数のプラットフォームをサポートしています。このクロスプラットフォーム機能は、Goの適応性と一致しており、元の.NET ベースの QUASAR。次のセクションでは、オープンソースバージョン(QUASAR)と比較したGOSARのコード構造、新機能、および追加機能に焦点を当てます。

GOSAR コード解析の概要

GOSARのコード構造

バイナリはすべてのシンボルを保持していたため、バージョンのサンプルから抽出されたソースコード構造を再構築することができました 0.12.01

  • vibrant/config: マルウェアの設定ファイルが含まれています。
  • vibrant/proto: すべての Google Protocol Buffers (proto) 宣言を格納します。
  • vibrant/network: メイン接続ループ、プロキシ処理、ファイアウォールの設定やリスナーの設定のためのスレッドなど、ネットワーキングに関連する機能が含まれています
  • vibrant/msgs/resolvers: マルウェアが処理するコマンドを定義します。これらのコマンドは、 vibrant_msgs_init* 関数内のオブジェクトに割り当てられます。
  • vibrant/msgs/services: キーロガー、クリップボードロガーなどのサービスの実行など、新機能を導入し、これらのサービスは vibrant_network._ptr_Connection.Start 機能で開始されます。
  • vibrant/logs: マルウェアの実行をログに記録する責任があります。ログは、設定に保存されているAESキーで暗号化されます。マルウェアは、AESを使用してログをチャンクで復号化します。
  • vibrant/pkg/helpers: さまざまなマルウェアコマンドやサービスで使用されるヘルパー関数が含まれています。
  • vibrant/pkg/screenshot: 感染したシステムのスクリーンショットキャプチャ機能を処理します。
  • vibrant/pkg/utils: ランダムな値を生成するようなユーティリティ関数を含んでいます。
  • vibrant/pkg/native: Windows API (WINAPI) 関数を呼び出すための関数を提供します。

GOSARに新たに追加されました

コミュニケーションと情報収集

この新しい亜種は、 TCP TLSに基づく元の通信方法と同じ通信方法を引き続き使用します。接続すると、まずシステム情報を C2 に送信し、 4 つの新しいフィールドが追加されます。

  • IPアドレス
  • ウイルス 対策
  • クリップボード設定
  • 財布

アンチウイルスとデジタルウォレットのリストは、ファンクション vibrant_pkg_helpers_init で初期化されており、このドキュメントの下部にあります。

サービス

このマルウェアは、クライアントがC2に最初に接続したときに開始された 3 サービスを処理します。

  • vibrant_services_KeyLogger
  • vibrant_services_ClipboardLogger
  • vibrant_services_TickWriteFile

KeyLogger

GOSAR のキーロギング機能は、 vibrant_services_KeyLogger 関数に実装されています。この機能は、Windows API に依存して、低レベルのキーボード イベントを監視するパラメーター ID を持つ SetWindowsHookEx でグローバル Windows フックを設定することにより、感染したシステムでのキーストロークをインターセプトWH_KEYBOARD_LL記録します。フック関数の名前は vibrant_services_KeyLogger_func1です。

ClipboardLogger

クリップボードのログ記録機能は単純で、Windows API に依存しています。まずIsClipboardFormatAvailable を使用してクリップボード データの可用性を確認し、次に GetClipboardData API を使用してデータを取得します。

ティックライトファイル

ClipboardLogger サービスと KeyLogger サービスはどちらも、TickWriteFile によって現在の日付のファイル ( 2024-11-27など) の下のディレクトリ (C:\ProgramData\Microsoft\Windows\Start Menu\Programs\diagnostics) に定期的に書き込まれるデータを収集します。
復号化するには、最初に値を減算し、次に CyberChef レシピに示されているように、0x1f0x18 の値で xor します。

ネットワークのセットアップ

サービスを初期化した後、マルウェアはネットワーク設定専用の 3つのスレッド を生成します。

  • vibrant_network_ConfigFirewallRule
  • vibrant_network_ConfigHosts
  • vibrant_network_ConfigAutoListener

ネットワーク設定を処理するスレッド

ConfigFirewallRule (ファイアウォールルールの設定)

マルウェアは、中国語の名前でポート範囲 51756-51776 のインバウンドファイアウォールルールを作成します。これは、説明が次のように設定されているすべてのプログラムとIPアドレスの受信を許可する Distributed Transaction Coordinator (LAN) に変換されますInbound rules for the core transaction manager of the Distributed Transaction Coordinator service are managed remotely through RPC/TCP.

コンフィグホスト

この関数は、次の127.0.0.1 micrornetworks.comc:\Windows\System32\Drivers\etc\hostsエントリを追加します。このエントリを追加した理由は不明ですが、マルウェアの現在の開発段階で機能が欠落しているか、機能が不完全であるためである可能性があります。

ConfigAutoListener

マルウェアのこの機能は、以前はファイアウォールルールで許可されていた 51756-51776の範囲内で最初に使用可能なポートでHTTPサーバーリスナーを実行します。興味深いことに、サーバーはコマンドを処理しないため、マルウェアがまだ開発中であることが証明されています。現在のバージョンでは、URI /security.jsへのGETリクエストのみを処理し、文字列callback();で応答し、その他のリクエストは 404 エラーコードを返します。この最小限の応答は、サーバーがプレースホルダーであるか、開発の初期段階の一部であり、後でより複雑な機能が追加される可能性があることを示している可能性があります

ログ

マルウェアは、ランタイムログをディレクトリに保存します: %APPDATA%\Roaming\Microsoft\Logs ファイル名の下に、 windows-update-log-<YearMonthDay>.logという形式で保存します。
各ログエントリはHMAC-AESアルゴリズムで暗号化されます。キーは vibrant_config 関数にハードコードされており、次に例を示します。

攻撃者は、コマンド ResolveGetRunLogsを発行することで、マルウェアのランタイムログをリモートで取得できます。

Plugins

このマルウェアには、C2からダウンロードされ、XORアルゴリズムで暗号化されたディスクに保存されているPEファイルであるプラグインを実行する機能があります。これらのプラグインは、パス C:\ProgramData\policy-err.logに保存されます。プラグインを実行するには、コマンド ResolveDoExecutePlugin が呼び出され、最初にプラグインが利用可能かどうかを確認します。

次に、 plugins.dll という名前のバイナリに base64 形式で格納されているネイティブ DLL を反射的に読み込み、エクスポート関数 ExecPlugin.

ExecPlugin C:\Windows\System32\msiexec.exe の中断プロセスを引数 に /package /quietで作成します。次に、 非同期プロシージャ コール (APC) をプロセスのメイン スレッドにキューに入れます。スレッドが再開されると、キューに入れられたシェルコードが実行されます。

シェルコードは、 C:\ProgramData\policy-err.logに保存されている暗号化されたプラグインを読み取り、ハードコードされた1バイトのXORキーを使用して復号化し、反射的にロードして実行します。

HVNC

このマルウェアは、既存のソケットを介して非表示のVNC(HVNC)をサポートし、 5 コマンドを公開します

  • リゾルブHVNCCコマンド
  • ResolveGetHVNCScreen
  • リゾルブストップHVNC
  • ResolveDoHVNCKeyboardEvent
  • ResolveDoHVNCMouseEvent

最初に実行されるコマンドは ResolveGetHVNCScreen で、最初に初期化してビューを設定し、base64形式の埋め込みネイティブDLL HiddenDesktop.dll を使用し、DLLはメモリに反射的にロードされて実行されます。

DLLは、HVNCをセットアップするための低レベルのAPIを実行する役割を担い、合計 7 つのエクスポートされた関数があります。

  • エキュミュートコマンド
  • DoMouseスクロール
  • マウス右クリック
  • マウス移動
  • マウス左クリック
  • ドキープレス
  • キャプチャースクリーン

最初に呼び出されるエクスポート関数は、CreateDesktopA API を使用してデスクトップを初期化するためにInitialiseされます。このHVNC実装は、ExcuteCommandエクスポートで見つけることができる合計 17 コマンドを処理しますが、名前にタイプミスがあり、コマンドIDはマルウェアのコマンドResolveHVNCCommandから転送されますExcuteCommand

コマンド ID説明
0x401この関数は、最初に TaskbarGlomLevel レジストリ キーを 2 under Software\Microsoft\Windows\CurrentVersion\Explorer\Advancedに設定して、タスク バー ボタンのグループ化を無効にします。次に、ABM_SETSTATEコマンドでSHAppBarMessageを使用して、タスクバーが常に表示され、上部に表示されるようにし、状態をABS_ALWAYSONTOPに設定します。
0x402shell32.dllの 61 番目のエクスポート機能を実行して RUN ダイアログ ボックスを生成します。C:\Windows\system32\rundll32.exe shell32.dll,#61
0x403のインスタンスを実行します。 powershell.exe
0x404に保存されているPEファイルを実行します。 C:\\ProgramData\\shell.log
0x405のインスタンスを実行します。 chrome.exe
0x406のインスタンスを実行します。 msedge.exe
0x407のインスタンスを実行します。 firefox.exe
0x408のインスタンスを実行します。 iexplore.exe
0x409のインスタンスを実行します。 360se.exe
0x40A360ChromeX.exeのインスタンスを実行します。
0x40Bのインスタンスを実行します。 SogouExplorer.exe
0x40C現在のウィンドウを閉じる
0x40D指定したウィンドウを最小化します
0x40Eウィンドウをアクティブにし、最大化されたウィンドウとして表示します
0x40Fウィンドウのプロセスを強制終了します
0x410クリップボードを設定します
0x411クリップボードをクリアします

スクリーンショット

マルウェアは、base64形式で埋め込まれた3番目と最後のPE DLLを反射的にロードします Capture.dll、次の 5 エクスポート機能があります。

  • キャプチャファーストスクリーン
  • キャプチャネクストスクリーン
  • GetBitmapInfo
  • GetBitmapInfoSize
  • セット品質

ライブラリは、最初に、CreateCompatibleDCCreateCompatibleBitmapCreateDIBSectionなどの一般的な Windows API を使用して画面キャプチャ構造を設定するDllEntryPointを反射的に読み込み、実行する resolvers_ResolveGetBitmapInfo を呼び出すことによって初期化されます。 2 エクスポート機能CaptureFirstScreenおよびCaptureNextScreenは、被害者のデスクトップのスクリーンショットをJPEG画像としてキャプチャするために使用されます。

観察

興味深いことに、元の .NET QUASAR サーバーは、同じ通信プロトコルを保持しているため、GOSAR サンプルからのビーコンの受信にも使用できます。ただし、運用上の使用には、GOSAR機能をサポートするために大幅な変更が必要になります。

著者がオープンソースの.NET QUASARサーバーを更新または拡張したのか、それともまったく新しいサーバーを開発したのかは不明です。言及する価値があるのは、デフォルトのリスニングポートである1080が、元の実装と一致していることです。

新機能

次の表に、新しく追加されたすべてのコマンドの説明を示します。

新しいコマンド
ResolveDoRoboCopy (ロボコピーの解決)ファイルをコピーするコマンドRoboCopy実行します
リゾルブ・ド・コンプレス・ファイルファイルをzip形式で圧縮する
リゾルブ抽出ファイルzip ファイルを抽出します
リゾルブコピーファイル感染したマシン内のディレクトリまたはファイルをコピーします
ResolveGetRunLogs (英語)利用可能なログを取得する
リゾルブHVNCCコマンドHVNCコマンドの実行
ResolveGetHVNCScreenHVNCの開始
リゾルブストップHVNCHVNCセッションの停止
ResolveDoHVNCKeyboardEventキーボードイベントをHVNCに送信する
ResolveDoHVNCMouseEventマウスイベントをHVNCに送信する
ResolveDoExecutePluginプラグインを実行する
リゾルブGetProcesses実行中のプロセスの一覧を取得する
ResolveDoProcessStartプロセスの開始
リゾルブ・ドゥ・プロセス・エンドプロセスを強制終了する
リゾルブGetBitmapInfo現在の画面の表示設定の BITMAPINFO 構造体を取得します
リゾルブGetMonitorsEnumDisplayMonitors APIによる被害者のディスプレイモニターの列挙
リゾルブゲットデスクトップ画面キャプチャ機能の開始
ResolveStopGetDesktop画面キャプチャ機能の停止
ResolveNewShellExecute生成されたcmd.exeプロセスへのパイプを開き、コマンドを送信します
ResolveGetSchタスクスケジュールされたタスクを取得するには、次のコマンドを実行します schtasks /query /fo list /v
ResolveGetScreenshot被害者のデスクトップのスクリーンショットをキャプチャします
リゾルブGetServicesWMI クエリを使用してサービスの一覧を取得します: select * from Win32_Service
ResolveDoServiceOperationサービスを開始または停止する
ResolveDoDisableMultiLogonキーの下の値 fSingleSessionPerUser を 1 に設定して、ユーザーによる複数のセッションを無効にします HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer
ResolveDoRestoreNLAリモート デスクトップ プロトコル (RDP) のセキュリティ設定を復元し、 ネットワーク レベル認証 (NLA) を有効にし、 SSL/TLS 暗号化を適用して安全な通信を実現します。
ResolveGetRemoteClientInformation有効になっているすべてのローカル ユーザー、RDP プロパティLAN IPおよび OS 固有の情報の一覧を取得します: レジストリ キー HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion から抽出された DisplayVersionSystemRootCurrentBuildNumber
ResolveDoInstallWrapper非表示のリモートデスクトッププロトコル(HRDP)のセットアップ
ResolveDoUninstallWrapperHRDPのアンインストール
ResolveDoRecoverPrivilegesHRDP のインストール中に変更が加えられる前の元の HKEY_LOCAL_MACHINE\\SAM\\SAM レジストリを復元します
ResolveGetRemoteSessionsマシン上の RDP セッションに関する情報を取得します。
ResolveDoLogoffSessionWTSLogoffSessionAPI を使用した RDP セッションのログオフ
リゾルブGetSystemInfoシステム情報を取得する
ResolveGetConnectionsマシン内のすべての接続を取得する
ResolveDoCloseConnection実装されていません

マルウェアと MITRE ATT&CK

Elasticは、 MITRE ATT&CK フレームワークを使用して、脅威がエンタープライズネットワークに対して使用する一般的な戦術、手法、手順を文書化します。

戦術(Tactics)

戦術は、テクニックまたはサブテクニックの理由を表します。 それは敵の戦術的な目標であり、行動を実行する理由です。

手法

手法は、敵対者がアクションを実行することによって戦術的な目標を達成する方法を表します。

軽減REF3864

検知

予防

ヤラ

Elasticセキュリティは、このアクティビティを識別するためのYARAルールを作成しました。

観測

この研究では、次の観測量が議論されました。

すぐれた監視性タイプ名前参考
opera-x[.]網ドメイン名ランディングページ
テレダウン-cn[.]コムドメイン名ランディングページ
15af8c34e25268b79022d3434aa4b823ad9d34f3efc6a8124ecf0276700ecc39SHA-256のNetFxRepairTools.msiMSI
accd651f58dd3f7eaaa06df051e4c09d2edac67bb046a2dcb262aa6db4291de7SHA-256のx64bridge.dllサドブリッジ
7964a9f1732911e9e9b9e05cd7e997b0e4e2e14709490a1b657673011bc54210SHA-256のゴサール
ferp.googledns[.]ioドメイン名GOSAR C2サーバー
hk-dns.secssl[.]comドメイン名GOSAR C2サーバー
hk-dns.winsiked[.]comドメイン名GOSAR C2サーバー
hk-dns.wkossclsaleklddeff[.]isドメイン名GOSAR C2サーバー
hk-dns.wkossclsaleklddeff[.]ioドメイン名GOSAR C2サーバー

参照資料

上記の研究を通じて、以下のことが参照されました。

付記

ハッシュ・アルゴリズム (SADBRIDGE)

def ror(x, n, max_bits=32) -> int:
    """Rotate right within a max bit limit, default 32-bit."""
    n %= max_bits
    return ((x >> n) | (x << (max_bits - n))) & (2**max_bits - 1)

def ror_13(data) -> int:
    data = data.encode('ascii')
    hash_value = 0

    for byte in data:
        hash_value = ror(hash_value, 13)
        
        if byte >= 0x61:
            byte -= 32  # Convert to uppercase
        hash_value = (hash_value + byte) & 0xFFFFFFFF

    return hash_value


def generate_hash(data, dll) -> int:
    dll_hash = ror_13(dll)
    result = (dll_hash + ror_13(data)) & 0xFFFFFFFF
    
    return hex(result)

GOSARで確認したAV製品

360sd.exekswebshield.exe
360tray.exekvmonxp.exe
a2guard.exekxetray.exe
ad-watch.exemcshield.exe
arcatasksservice.exemcshield.exe
ashdisp.exeminer.exe
avcenter.exemongoosagui.exe
avg.exempmon.exe
avgaurd.exemsmpeng.exe
avgwdsvc.exemssecess.exe
avk.exenspupsvc.exe
avp.exentrtscan.exe
avp.exepatray.exe
avwatchservice.exepccntmon.exe
ayagent.ayepsafesystray.exe
baidusdsvc.exeqqpcrtp.exe
bkavservice.exequhlpsvc.EXE
ccapp.exeravmond.exe
ccSetMgr.exeremupd.exe
ccsvchst.exerfwmain.exe
cksoftshiedantivirus4.exertvscan.exe
cleaner8.exesafedog.exe
cmctrayicon.exesavprogress.exe
coranticontrolcenter32.exesbamsvc.exe
cpf.exespidernt.exe
egui.exespywareterminatorshield.exe
f-prot.EXEtmbmsrv.exe
f-prot.exeunthreat.exe
f-secure.exeusysdiag.exe
fortitray.exev3svc.exe
hipstray.exevba32lder.exe
iptray.exevsmon.exe
k7tsecurity.exevsserv.exe
knsdtray.exewsctrl.exe
kpfwtray.exeyunsuo_agent_daemon.exe
ksafe.exeyunsuo_agent_service.exe

この記事を共有する