コンテンツに移動

“Eye” spy: Cyclops Blink が機能強化され、再び登場

Cisco Firewall Management Center (FMC) デバイスに対する攻撃で、機能強化されたモジュール型マルウェアが確認されました

2026 年 8 月、Counter Threat Unit™ (CTU) の研究チームは、侵害を受けた複数の Cisco Firewall Management Center (FMC) デバイス上で発見された、悪意のある 64 ビット Linux 実行ファイル「timezone_check」を分析しました。この高度なモジュール型インプラントは、侵害を受けた Linux システムへの永続的なリモートアクセスを可能にします。CTU™ の分析によると、これは 2022 年に英国の国家サイバーセキュリティセンター (NCSC) が分析した Cyclops Blink マルウェアの亜種であり、ロシアを拠点とする脅威グループ IRON VIKING (別名: Sandworm、Seashell Blizzard) と関連している可能性が高いとされています。Cisco が 9 月 9 日にこのキャンペーンに関する詳細を公開したことを受け、CTU の研究チームは分析結果を公開しました。2022 年に報告された WatchGuard を標的としたサンプルとは異なり、2026 年の亜種は x86-64 Linux 上で動作し、ベンダー固有のファームウェア改ざんではなく、汎用性のある System V (SysV) の永続化手法を採用しています。この変更により、潜在的に互換性のあるネットワークエッジアプライアンスの範囲が広がりました。このインプラントの拡張された機能には、ネットワークとサービスのアクティブな探索、プログラム可能なパケット監視、ファイル転送、ペイロード実行が含まれており、侵入されたデバイスが内部偵察、情報収集、後続攻撃のためのプラットフォームとして機能するようになります。

マルウェアの概要

Cyclops Blink は、親コントローラーと 5 つの子プロセスワーカーモジュールで構成されたモジュール型ボットネットおよびマルウェアフレームワークです。親コントローラーは、各モジュール専用のプロセス間通信 (IPC) チャネルを作成し、モジュール識別子に基づいてインバウンドコマンドをルーティングし、モジュールの出力を収集し、暗号による保護を適用した上で、その結果生成されたレコードをコマンドアンドコントロール (C2) インフラストラクチャに送信します。別々のプロセスを使用することで、モジュールの障害を隔離し、複数のタスクを並行して実行することが可能になります。図 1 に、コントローラーとワーカーモジュールの関係を示します。

Diagram of Cyclops Blink architecture showing parent controller and worker modules

図 1: Cyclops Blink のアーキテクチャ

コントローラーは [kworker/0:1] という名前のプロセスに偽装し、Linux のプロセス一覧に溶け込むことで、発見される確率を下げます (図 2 を参照)。本物の kworker スレッドはバックグラウンドでカーネル処理を実行するものであり、Linux システムでは一般的です。

Cyclops Blink pseudo-code that references the kworker process

図 2: Cyclops Blink コントローラーの疑似コード

コントローラーは、登録されたすべてのワーカーモジュールに配布される固定サイズの構造体を保持しています。この構造体には、アクティブな C2 IPv4 アドレス一覧、セッション関連の値、定期的なビーコン間隔、次のビーコンまでの残り時間、送信されるキュー情報、コントローラーのプロセス ID、およびインストールされている各ワーカーのモジュール ID とプロセス ID が含まれています。コントローラーは、初期化時、C2 通信の前、および認識されたコントローラーコマンドの処理後に、この構造体を再構築してブロードキャストします。この仕組みにより、独立して実行されるワーカープロセスは、共有設定やコントローラーの状態の変化と同期を保つことができます。表 1 に、実装されている制御コードの一覧を示します。

 

制御コード評価された機能
0x00コントローラーを終了する
0x01次のビーコン時刻を現在時刻に設定し、即時ビーコンをトリガーする
0x02メモリ内のアクティブな C2 IPv4 アドレス一覧を置き換える
0x03指定した遅延の後に次のビーコンをスケジュールする
0x04定期的なビーコン間隔を設定する
0x05ワーカーモジュールをロードするか置き換える
0x06コントローラーを再起動する
0x07コントローラーまたは C2 セッション関連の値を更新し、その値をワーカーモジュールに配信する
0x08分析対象のサンプルでは予約済みまたは未実装
0x09分析対象のサンプルでは予約済みまたは未実装
0x0A分析対象のサンプルでは予約済みまたは未実装
0x0B埋め込みの RSA 公開鍵を、選択したワーカーモジュールに送信する
0x0C埋め込みの RSA 秘密鍵を、選択したワーカーモジュールに送信する
0x0D埋め込みの X.509 証明書を、選択したワーカーモジュールに送信する

表 1: Cyclops Blink の制御コード

 

初期化中、コントローラーは C2 通信に使用される 2 つのポートである TCP 宛先ポート 43856 と 49172 に対し、Linux の iptables OUTPUT チェーンに ACCEPT ルールを追加します。コントローラーはまず、リンクされた libiptc インターフェースを介して filter テーブルを直接変更しようと試み、システムの iptables ユーティリティを呼び出すフォールバックパスも用意しています。コントローラーのシャットダウンまたは再起動時には、対応するルールが削除されます。これらの変更は、ローカルのファイアウォールポリシーがインプラントのアウトバウンド C2 接続を許可するようにすることが目的です。

モジュールの説明

CTU の研究チームが分析したこのインプラントには、ホストの偵察、ファイル転送とペイロード実行、アクティブなネットワーク探索、選択的パケットキャプチャ、および永続化を実行する 5 つのワーカーモジュールが含まれています。

モジュール 0x08: ホストの偵察

モジュール 0x08 は、侵入先の Linux システムとその直近のネットワーク環境をプロファイリングし、オペレーターにデバイスの設定、権限、運用上の役割、接続性に関する詳細な情報を提供します。このモジュールは以下の情報を収集します。

  • オペレーティングシステム、カーネル、ホスト名、稼働時間情報
  • プロセッサ、メモリ、ファイルシステム、ストレージの詳細
  • ローカルユーザー、グループ、プロセス、コマンドライン
  • ネットワークインターフェース、アドレス、ARP データ、リゾルバーの設定

インプラントのインスタンスが侵入先ホストで十分な権限を有している場合、このモジュールは /etc/shadow にもアクセスし、オフライン分析用にパスワードハッシュを漏洩させる可能性もあります (図 3 を参照)。

Cyclops Blink module 0x08 pseudo-code

図 3: モジュール 0x08 の疑似コード (概要)

偵察モジュールは、デフォルトで 10 分ごとに実行されますが、オンデマンドで実行することも可能です。収集された情報はコントローラーへ返され、C2 サーバーに送信されます。Cisco FMC などのネットワークエッジアプライアンスでは、ホストが特権管理ネットワークや複数の内部アドレス範囲へのアクセス権を持っていることがあるため、この偵察によって貴重な情報が得られます。その結果得られるインベントリは、オペレーターが周囲環境を把握し、管理サービスや隣接システムを特定し、利用可能な認証情報を評価し、その後のネットワーク探索やラテラルムーブメントを計画するのに役立ちます。

モジュール 0x0F: ファイル転送とペイロード実行

モジュール 0x0F は、ファイルの転送と追加機能の展開を行うための、インプラントの主要なメカニズムを提供します。このモジュールは、ローカルファイルを C2 インフラストラクチャにアップロードしたり、HTTP/HTTPS 経由でコンテンツをダウンロードしたり、取得したペイロードをオペレーターが指定したパスに保存したり、ダウンロードしたファイルを子プロセスとして実行したりすることができます。C2 サーバーからのコマンドで利用可能な絶対パスが指定されていない場合、このモジュールは URL のベース名を使用して /var/tmp の下にパスを構築します。利用可能なベース名がない場合は、/var/tmp/a.tmp にフォールバックします。

また、このモジュールは、ダウンロードしたコードを実行可能メモリに直接書き込むこともできるため、ペイロードを通常のファイルとして保存することなく実行できます。取得した Linux ELF 実行ファイルは、追加の Cyclops Blink モジュールとして登録でき、インプラントがアクティブなまま機能を拡張できます。モジュール 0x0F は、C2 サーバーからの個々の転送リクエストを別々の子プロセスで処理するため、コントローラーや他のワーカーモジュールをブロックすることなく、ファイル転送やペイロード実行の操作を行うことができます。

モジュール 0x0F を使うことで、オペレーターは侵入後に自由度の高い操作を行えるようになります。このモジュールは、アクセス可能なデータの収集と外部への持ち出し、補助ツールの取得、後続のマルウェアの実行、インプラントのモジュールセットの更新、追加のアクセスメカニズムの確立を行うことができます。この柔軟性のおかげで、ネットワーク管理アプライアンス上では、侵入先デバイスが情報収集ポイントとして機能すると同時に、その信頼されたネットワーク上の位置から到達可能なシステムに対する攻撃の足掛かりとなるプラットフォームとしても機能するようになります。

このモジュールは、HTTP または HTTPS の転送先に数値の IPv4 アドレスではなくホスト名が含まれている場合、埋め込みの DNS-over-HTTPS リゾルバーを使用します。このリゾルバーは 8.8.8.8:443 の Google パブリック DNS に対して直接 TLS 接続を確立し、ハードコードされた User-Agent を含む HTTP POST リクエストを介して /dns-query にバイナリ DNS クエリを送信し、返された DNS レスポンスから IPv4 アドレスを抽出します (図 4 を参照)。解決されたアドレスはその後、モジュールの HTTP または HTTPS 接続ルーチンで利用可能になります。この手法により、インプラントは侵入先のシステムで設定されている DNS サービスに依存することなく、オペレーターが指定した転送先を解決し、ローカルの DNS ログにエントリが残るというフォレンジック上の証拠を回避することができます。

Cyclops Blink DNS lookup containing distinctive User-Agent

図 4: 特徴的な User-Agent を含む Cyclops Blink の DNS ルックアップ

User-Agent 文字列は、最新のデスクトップブラウザを意図的に模倣したものですが、Firefox の rv:129.0 および Gecko トークンと Chrome のプロダクトトークンを組み合わせているため、内部的な整合性がありません。これらの要素が同時に見られることは通常ありませんが、オープンソースの User-Agent 生成ツールを使用するスクリプトや自動スクレイピングツールなどでは例外的に見られることがあります。同じ User-Agent 文字列は、Cyclops Blink の HTTP GET リクエストにも見られます (図 5 を参照)。この HTTP GET リクエストもまた、Accept-Language フィールドにカンマではなくセミコロンが含まれていることや、Accept フィールドに本来あるべきメディアタイプおよびサブタイプが欠落していることから (一般的なワイルドカードは Accept: */* となる)、異常なものです。

Cyclops Blink malformed HTTP GET request

図 5: 不正な形式の Cyclops Blink HTTP GET リクエスト

モジュール 0x0F は、以下の手順に従って Cyclops Blink の実行中インスタンスを置き換えることもできます。

  1. /proc/self/exe を介して現在の実行ファイルを特定する。
  2. 現在のイメージの名前をバックアップパスに変更する。
  3. 置換用イメージを元のパスにダウンロードする。
  4. ダウンロードが失敗した場合は、以前のイメージを復元する。
  5. 成功した場合はバックアップを削除する。
  6. 新しいイメージを実行する。

モジュール 0x11: ネットワークおよびサービスのスキャナー

モジュール 0x11 は、内部ネットワークおよびサービスの探索機能を提供します。ローカルに接続された IPv4 ネットワークを列挙し、オペレーターが定義したポート範囲、または標的になりやすいインフラストラクチャや管理サービスに関連付けられた埋め込みポートリストのいずれかを調査します。スキャンタスクは別々の子プロセスで実行されるため、モジュールのコマンドチャネルをブロックすることなく複数の操作を実行できます。

あるスキャンモードでは、生パケットソケットを介して完全なイーサネット、IPv4、および TCP フレームを構築して送信します。ランダム化された送信元ポートとシーケンス関連の値を使用し、一致する SYN-ACK 応答から開いているポートを特定し、最小限の TCP ハンドシェイクを完了させます。開いているサービスについては、このモジュールは応答データを収集できます。TCP ポート 80 ではリクエスト「GET / HTTP/1.1\r\n\r\n」を送信し、ポート 443 は別の TLS プローブルーチンに引き渡されます。この生スキャン機能は軽量なパケット処理のみを行い、完全な TCP ストリーム処理は実装していません。ターゲットアドレス、宛先ポート、オプションのサービス応答データを含むスキャンの成果はコントローラーに返され、インプラントの C2 チャネルを介して、保護された状態で送信されます。

インプラントがネットワークエッジデバイスに展開されている場合、この機能が特に大きな意味を持ちます。その位置から、このモジュールはインターネットから直接アクセスできない内部システムや管理サービスを発見できる可能性があります。その結果、オペレーターは周辺ネットワークの詳細な状況を把握でき、標的の選定、管理インフラの特定、およびその後のラテラルムーブメントに役立てることができます。モジュール 0x08 によるホストの偵察とは異なり、モジュール 0x11 は隣接するシステムと能動的にやり取りするため、検知可能なスキャン、接続、およびサービスをプローブする活動を発生させる可能性があります。このインプラントには、戦略的に価値のある幅広い内部システムを発見するように設計されたと思われるポートリストが埋め込まれています (表 2 を参照)。

 

カテゴリ埋め込まれているリスト内のポート
リモート管理およびターミナルアクセス22, 23
ファイル転送およびファイル共有20, 69, 115, 139, 445
電子メールおよびメッセージング25, 109, 110
名前、ディレクトリ、および探索サービス42, 43, 53, 137, 389
Web サービス80, 443, 1080, 3000, 5000, 8000, 8008, 8080, 8291, 8899
ネットワーク管理および監視161, 162, 829, 10050, 10051
ルーティング、トンネリング、および VPN 関連のサービス179, 1701, 1723, 4500
ストリーミングおよびメディアサービス554, 8554
IRC 関連および一般的に転用される高位ポート6665, 6667, 6668, 6669, 6697
VMware サービス902, 903
その他の候補18, 37, 49, 54, 56, 58, 68, 119, 156, 194, 458, 546, 547, 666, 751, 752, 760, 843, 853, 987, 1167, 1194, 1241, 1540, 6656

表 2: Cyclops Blink によってスキャンされるポート

モジュール 0x12: パケットキャプチャとコンテンツ監視

モジュール 0x12 を使用すると、オペレーターは侵入先デバイスで可視化されているトラフィックを監視し、指定のコンテンツを含むパケットを選択的に保持することができます。このモジュールは、生のイーサネットフレームをキャプチャし、指定された用語がないか IPv4 アプリケーションペイロードを効率的に検索します。次に、入手可能なすべてのトラフィックを収集するのではなく、オペレーターが指定した検索パターンを用いて情報収集に関連するデータを特定することで、C2 サーバーに送信される不要なトラフィックの量を削減します。

このモジュールはプログラム可能なネットワークトラフィック監視を実装し、表 3 に示した 3 つのコマンドをサポートしています。

コマンド機能
0x01パケットキャプチャの開始
0x02アクティブなキャプチャセッションの停止と破棄
0x03キャプチャサブシステムのリセット

表 3: Cyclops Blink モジュール 0x12 のコマンドコード

モジュール 0x12 は、以下のコードを使用して Linux パケットソケットを開きます。これにより、その権限とネットワーク上の位置に応じて、侵入先のホストで可視化されている生のイーサネットフレームをモジュールが受信できるようになります。

socket(
AF_PACKET,
SOCK_RAW,
htons(ETH_P_ALL)
);

オペレーターは、キャプチャする期間、処理モード、アドレスとポートのフィルター、およびコンテンツ検索の動作を設定できます。このインプラントは、指定されたパターンを エイホ–コラシック方式の自動マッチング機能にコンパイルし、複数の値に対する効率的な同時検索を可能にします。キャプチャされた IPv4 パケットは解析され、TCP または UDP アプリケーションのペイロードが特定されます。コンパイルされたマッチング機能を使用してコンテンツが検索され、条件に合致するパケットが保持されます。あるコールバックには、次のバイトが「-AGE」または「-Age」である場合に初期の一致を抑制する特徴的なヒューリスティックが含まれています。これは、ユーザー関連の検索語が HTTP User-Agent 文字列で繰り返し一致するのを防ぐためであると考えられます。条件を満たすパケットは、タイムスタンプ付きの pcap 形式のレコードとして保存されるため、オペレーターは認証情報、トークン、コマンド、またはその他の関心のあるデータを含むトラフィックを選択的に収集できます。

このモジュールを使用することで、オペレーターは以下の要素を収集できる可能性があります。

  • 平文の認証情報
  • セッション Cookie
  • 認証トークン
  • アプリケーションリクエスト
  • 独自プロトコルのトラフィック
  • 管理コマンド
  • その他の機密性の高いネットワークコンテンツで、オペレーターが定義した用語に一致するもの

このモジュールは TCP ストリームを再構築しません。そのため、複数の TCP セグメントに分割された検索語は、個々のパケットの一致を回避する可能性があります。

 

モジュール 0x50: 永続化と自己再配置

モジュール 0x50 は、インプラントをシステムディレクトリに再配置し、再配置された実行ファイルを SysV init サービスとして登録することで永続性を確立します。このモジュールが起動すると、/proc/self/exe を介して実行中ファイルのパスを解決し、その出力を意図したインストール先 (/lib/tz/timezone_check) と比較します。インプラントがすでにこの場所から実行されている場合、このモジュールはファイルのコピーとサービスの登録の手順をスキップします。この手法により、自己再配置が繰り返されたり永続化アーティファクトが重複したりすることが回避されます。

 

別の場所から実行された場合、このモジュールは /lib/tz を作成し (権限を 0755 に設定)、実行中のファイルを /lib/tz/timezone_check にコピーします。コピー操作が成功したことを確認した後、ファイルシステムから元の実行ファイルのリンクを解除します。Linuxでは、実行中のファイルがメモリ内にイメージとしてマッピングされたままファイル自体を削除することが許可されているため、実行中のプロセスには影響がありません。この動作により、元の展開場所にあった痕跡が消され、より説得力のある名前が付けられた永続的なコピーのみが残されます。

このモジュールは次に、組み込みのシェルテンプレートを使用して /etc/init.d/timezone_check に実行可能な初期化スクリプトを作成します (図 6 を参照)。

Template for Cyclops Blink init script

図 6: Cyclops Blink init スクリプトのテンプレート

このモジュールは自動実行を有効にするため、SysV ランレベル 2 から 5 のシンボリックリンクを作成します。各リンクは ../init.d/timezone_check を参照します。

  • /etc/rc2.d/S89timezone_check
  • /etc/rc3.d/S89timezone_check
  • /etc/rc4.d/S89timezone_check
  • /etc/rc5.d/S89timezone_check

プレフィックス「S89」は、このスクリプトが SysV init 起動サービスであることを示し、ブートシーケンス内での実行順序を指定しています。これらの SysV ランレベルディレクトリをサポートするシステムでは、指定されたランレベル状態に応じてスクリプトを自動的に実行するよう初期化システムに指示し、シーケンス番号が小さいサービスがすべて実行された後に timezone_check が開始されるようにします。

サービスをインストールした後、このモジュールはコントローラーに通知し、一時的に停止してから、再配置されたインプラントを起動する子プロセスをフォークします。実行に失敗した場合、インストーラーとその子プロセスの両方が終了します。成功した場合は、新しいプロセスが永続的なパス名から実行を開始します。再配置されたインスタンスは、インストール済みであることを認識し、ファイルシステムの変更を繰り返しません。

インストールパスとサービス名は、Linux タイムゾーン関連の正規のコンポーネントを装っています。永続化コードには権限昇格メカニズムが含まれていません。したがって、インストールが成功した場合は、インプラントが /lib や /etc の下に書き込むのに十分な権限で実行されたことを示しています。エンタープライズ Linux システムまたはネットワークアプライアンスでは、これらのディレクトリへの書き込みアクセスには通常、root または同等の特権を持つ実行コンテキストが必要です。

コマンドアンドコントロール (C2)

Cyclops Blink は、TLS によって保護されているアウトバウンド TCP 接続を介して C2 インフラストラクチャと通信します。CTU の研究チームが分析したサンプルには、ハードコードされた C2 アドレス 89[.]34[.]96[.]56 が含まれており、TCP ポート 43856 または 49172 のいずれかを介して接続を試みます。コントローラーはソケット送信/受信のタイムアウトを 10 秒に設定し、TLS ハンドシェイクが成功するまで異なるアドレスとポートの組み合わせを試します。CTU の分析では、従来の TLS 証明書検証が無効化されており、インプラントが公開証明書信頼システムを介して C2 サーバーを検証することなく、暗号化されたセッションを確立できることが示唆されています。TLS 接続を確立したインプラントは、HTTP を使用するのではなく、独自のネットワークアプリケーションプロトコルを交換します。

このインプラントにはバージョン文字列「OpenSSL 3.5.4 30 Sep 2025」と OpenSSL 3 プロバイダーアーキテクチャと一致する実装コードが含まれていることから、OpenSSL 3.5.4 と静的リンクされている可能性が高いと考えられます。リリース日はビルド時期を推定する上で有用な手がかりとなりますが、埋め込まれたバージョン文字列は変更可能であり、それだけではサンプルのコンパイル日を特定することはできません。

CTU の研究チームが観測したインシデントでは、このインプラントは 1 時間に 1 回 C2 サーバーにビーコンを送信していました。ただし、コントローラーは通信設定のランタイム変更に対応しています。「マルウェアの概要」セクションで述べたように、C2 タスクにより、アクティブな IPv4 アドレスリスト(最大 32 個の代替アドレス) の置換、即時ビーコンのトリガー、オペレーターが定義した遅延の後の接続のスケジュール設定、または定期的なビーコン間隔の変更を行うことが可能です。更新された C2 アドレスとタイミング情報はメモリ内に保持され、固定サイズのコントローラー状態レコードを介して、すべての登録済みワーカーモジュールに配信されます。

暗号オブジェクト

TLS に加え、コントローラーは個々のモジュール出力に個別のアプリケーションレイヤー暗号化保護を適用してから、送信用 C2 データに組み込みます。この手法を取ることで、TLS セッション内にさらなる機密性レイヤーが追加されます。また、ホストの詳細、収集されたファイル、ネットワークスキャンの結果、キャプチャされたパケットなどのデータがネットワーク送信前に暗号化されます。Cyclops Blink バイナリには、次の 3 つの暗号オブジェクトが埋め込まれています。

  • スタンドアロンの RSA-3072 公開鍵
  • RSA-2048 秘密鍵
  • 対応する自己署名 X.509 証明書

スタンドアロンの RSA-3072 公開鍵は、送信される C2 データのアプリケーションレイヤー保護に関連付けられています。独立した RSA-2048 秘密鍵と証明書のペアは、コントローラーのタスク処理を介してワーカーモジュールに提供される可能性があるため、このオブジェクトは未使用のビルドアーティファクトではなく、モジュールレベルの暗号処理や TLS 操作に利用可能であることを示しています。各モジュールによる証明書と秘密鍵の具体的な用途は特定されていません。

CTU の研究チームが分析したサンプルには、異なる RSA-2048 鍵ペアと自己署名証明書が含まれており、これらの要素がすべての Cyclops Blink ビルドで固定されているわけではないことを示しています。このようなばらつきがあることは、ビルドごと、展開ごと、またはその他のオペレーター制御による生成の影響である可能性がありますが、入手可能なデータからは、どの程度の頻度でこのオブジェクトが更新されているかは明らかになっていません。

また、証明書の有効期間を、マルウェアの開発日や展開日として解釈すべきではありません。証明書は自己署名されているため、作成者が有効期間フィールドを制御しており、証明書の実際の作成日より前の「notBefore」の日付を割り当てることが可能です。したがって、埋め込まれた証明書のメタデータは、キャンペーンのタイムラインを設定したり、永続的なネットワーク指標を指定したりするためというよりは、関連するサンプルを相関付けたり、暗号化の差異を特定したりするのに役立ちます。

2022 年の NCSC 報告書との比較

2026 年に展開された Cyclops Blink のサンプルは、親コントローラーのアーキテクチャ、フォークされたワーカーモジュール、パイプベースの IPC、ランダム化された C2 フェイルオーバー、カスタムプロトコル、埋め込まれた暗号オブジェクト、特徴的な 0x08 および 0x0F モジュールなど、2022 年に報告された多くの特徴を持っています。しかし、2026 年のフレームワークは PowerPC ではなく x86-64 を標的としており、WatchGuard 固有のファームウェア改ざんではなく汎用的な SysV 永続化手法を使用し、再構築されたモジュールセットを含み、アクティブなネットワークスキャンとプログラム可能なパケット監視を追加しています。表 4 にこれらの相違点をまとめました。

特徴2022 年の NCSC のサンプル2026 年のサンプル
標的プラットフォームWatchGuard Firebox およびその他の小規模/ホームオフィス (SOHO) 向けネットワークデバイスCisco FMC デバイス上で確認。64 ビット x86-64 Linux ELF ファイルとしてコンパイルされており、他の適切な Linux 環境でも互換性がある可能性がある
アーキテクチャ32 ビット PowerPC、ビッグエンディアン Linux ELFSystem V AMD64 ABI を使用する 64 ビット x86-64 Linux ELF
組み込みモジュールホストの偵察、ファイル転送、C2 アドレスの保存、および WatchGuard に特化した更新および永続化機能をサポートする 4 つのモジュールホストの偵察、ファイルとペイロードの管理、アクティブなネットワークスキャン、パケットキャプチャ、および汎用的な Linux 永続化をサポートする 5 つのモジュール
永続化WatchGuard の起動スクリプトを改ざんし、正規のファームウェアイメージをパッチングすることで、ファームウェアの更新後も感染を残存させるインプラントを /lib/tz/timezone_check にコピーし、ランレベル 2 から 5 までの起動リンクを持つ SysV init サービスを作成する
ホストの偵察モジュール 0x08 がオペレーティングシステム、アカウント、ストレージ、インターフェース、およびネットワーク情報を収集するモジュール 0x08 は同じ目的を保持しつつ、収集対象をパスワードハッシュ、リゾルバー設定、CPU 情報、プロセスのコマンドラインにまで拡大
ネットワークの偵察同等の組み込みモジュールは報告されていないモジュール 0x11 が IPv4 ネットワークを能動的にスキャンし、開いているポートを特定し、サービスバナーを収集し、HTTP および TLS 関連のプローブを実行する
トラフィックの監視同等の組み込みモジュールは報告されていないモジュール 0x12 が生のイーサネットトラフィックをキャプチャし、オペレーターが定義した検索語を含むパケットを選択的に保持する

表 4: Cyclops Blink バージョンの比較

リスクにさらされる可能性のあるネットワークデバイス

2022 年バージョンの Cyclops Blink は、侵害を受けた WatchGuard デバイス上で発見されました。2026 年バージョンは、一元管理、セキュリティ、ルーティング、リモートアクセス、またはトラフィック検査機能を提供する x86-64 Linux ベースのネットワークアプライアンスにとって脅威となる可能性が最も高いと考えられます。このインプラントは、Cisco FMC 上で発見されましたが、特定のベンダープラットフォームに厳密に依存しているわけではありません。その汎用的な Linux 実装、SysV 永続化、モジュール型実行モデル、生ソケットによるネットワーク通信、および標準的な Linux インターフェースへの依存から、攻撃者が十分な権限を取得して実行ファイルを転送すれば、他の互換性のあるアプライアンス上でも動作する可能性があると考えられます。

SD-WAN コントローラー、VPN コンセントレーター、ネットワークオーケストレーター、および同様の管理プラットフォームも、互換性のある x86-64 Linux 環境を使用している場合は攻撃対象となり得ます。これらのシステムは、FMC と以下の点で共通する特徴を有しています。共通の特徴とは、一元化された管理、分散型デバイスへの特権アクセス、複数のネットワークセグメントに対する可視性、そして Web、API、または SSH 管理サービスを介した外部への露出です。

攻撃の帰属

CTU の研究チームは、2026 年の Cyclops Blink の活動がロシアと関連していることについては高い確信度で、また IRON VIKING 脅威グループと関連していることについては中程度の確信度で評価しています。この評価は主に、分析したインプラントと Cyclops Blink の間の実装レベルにおいて著しい継続性が見られることに基づいています。Cyclops Blink については以前、英国および米国の政府機関が、ロシアの GRU と関連のある Sandworm 脅威グループによるものと特定しています。CTU の研究チームは、このグループを IRON VIKING として追跡しています。脅威グループの帰属に対する確信度の低さは、観測された 2026 年の攻撃と IRON VIKING を直接結び付ける決定的な証拠が存在しないことを反映しています。

推奨事項

2026 年の Cyclops Blink のサンプルに見られる汎用的な SysV 永続化機能によって、WatchGuard 固有のファームウェアへの依存が排除されています。一方、能動的なネットワークスキャンと選択的なパケットキャプチャにより、インプラントの情報収集機能は大幅に拡張されています。Cisco FMC デバイスにおけるこの発見は、侵入を受けたネットワーク管理インフラストラクチャがもたらすリスクを浮き彫りにしています。このような状況にあるデバイスは、特権管理ネットワークへのアクセス、複数のネットワークセグメントに関する情報、および偵察や追加ペイロードの展開を行うためのプラットフォームを提供してしまう可能性があります。Linux のアーキテクチャ、永続化メカニズム、ファイルシステムのレイアウト、利用可能なライブラリ、およびセキュリティコントロールは、製品やソフトウェアのバージョンによって異なります。したがって、各組織は、特定された Cisco プラットフォームにとどまらず、脅威ハンティングの範囲を広げて、報告されたファイルシステム、プロセス、ネットワーク、および暗号の指標について、互換性のある Linux ベースのネットワークアプライアンスを調査する必要があります。

対策と指標

この脅威に関連するソフォスの対策は以下の通りです。

  • Linux/Agnt-JG

表 5 に示す脅威インジケーター (指標) を使用することで、この脅威に関連する活動を検知できます。なお、IP アドレスは再割り当てされる可能性がありますので、注意してください。また、この IP アドレスには悪意のあるコンテンツが含まれている可能性があるため、ブラウザで開く際はリスクを十分に考慮してください。

指標タイプコンテキスト
89[.]34[.]96[.]56IP アドレスCyclops Blink の C2 サーバー
/lib/tz/timezone_checkファイルパスCyclops Blink の 2026 年バージョンで使用
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:129.0) Gecko/20100101 Chrome/129.0.0User-Agent

Cyclops Blink の 2026 年バージョンで使用

Chrome/129.0.0  

表 5: この脅威の指標