2026年8月、Counter Threat Unit™(CTU)の研究者は、複数の侵害されたCisco Firewall Management Center(FMC)デバイス上で発見された、timezone_checkという名前の悪質な64ビットLinux実行ファイルを分析しました。この高度なモジュール型インプラントは、侵害されたLinuxシステムへの永続的なリモートアクセスを提供します。CTU™の分析によると、これは英国国家サイバーセキュリティセンター(NCSC)が2022年に以前分析したCyclops Blinkマルウェアの亜種であり、ロシアを拠点とするIRON VIKING脅威グループ(Sandworm、Seashell Blizzardとしても知られる)と関連している可能性が高いとされています。Ciscoは9月9日にこのキャンペーンに関する詳細を公開したことを受け、CTUの研究者は自らの分析結果を公表しました。
2022年に報告されたWatchGuard向けのサンプルとは異なり、2026年の亜種はx86-64版Linuxで動作し、ベンダー固有のファームウェア改変ではなく、汎用的なSystem V(SysV)による永続化手法を使用します。この変更により、侵害可能なネットワークエッジ機器の範囲が広がりました。このインプラントは、能動的なネットワーク・サービス探索、プログラム可能なパケット監視、ファイル転送、ペイロード実行といった拡張機能を備えており、侵害されたデバイスを内部偵察、情報収集、そして後続作戦の足がかりとして利用できるようにします。
マルウェアの概要
Cyclops Blinkは、親コントローラーと5つの子プロセス型ワーカーモジュールを中心に構成されたモジュール型ボットネット兼マルウェアフレームワークです。親プロセスは各モジュール専用のプロセス間通信(IPC)チャネルを作成し、モジュールIDに基づいて受信コマンドをルーティングし、モジュールの出力を収集して暗号化保護を施した上で、その結果をコマンド&コントロール(C2)インフラに送信します。独立したプロセスを使用することで、モジュール障害の影響を分離しやすくし、複数のタスクを並行して実行できるようにしています。図1は、コントローラーとワーカーモジュールの関係を示しています。

図1:Cyclops Blinkのアーキテクチャ
コントローラーは[kworker/0:1]という名前のプロセスを装い、Linuxのプロセス一覧に紛れ込むことで、偶然発見される可能性を減らしています(図2参照)。本物のkworkerスレッドはバックグラウンドでカーネルの処理を行うもので、Linuxシステム上ではよく見られる存在です。

図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の制御コード
初期化時、コントローラーはLinuxのiptables OUTPUTチェーンに、C2通信で使用する2つのポート、TCP宛先ポート43856と49172へのACCEPTルールを追加します。コントローラーはまず、リンクされたlibiptcインターフェースを通じてfilterテーブルを直接変更しようと試み、失敗した場合はシステムのiptablesユーティリティを呼び出すフォールバック経路を備えています。対応するルールは、コントローラーのシャットダウンまたは再起動時に削除されます。こうした変更は、ローカルのファイアウォールポリシーがインプラントの発信C2接続を許可するようにすることを目的としています。
モジュールの説明
CTUの研究者が分析したインプラントには、ホスト偵察、ファイル転送とペイロード実行、能動的なネットワーク探索、選択的パケットキャプチャ、そして永続化という機能を担う5つのワーカーモジュールが含まれています。
モジュール0x08:ホスト偵察
モジュール0x08は、侵害されたLinuxシステムとその直近のネットワーク環境のプロファイルを作成し、オペレーターにデバイスの構成、権限、運用上の役割、接続状況について詳細な情報を与えます。このモジュールは以下の情報を収集します。
- OS、カーネル、ホスト名、稼働時間の情報
- プロセッサ、メモリ、ファイルシステム、ストレージの詳細
- ローカルユーザー、グループ、プロセス、コマンドライン
- ネットワークインターフェース、アドレス、ARPデータ、リゾルバ構成
侵害されたホスト上でインプラントのインスタンスが十分な権限を持っている場合、このモジュールは/etc/shadowにもアクセスできる可能性があり、オフライン解析用にパスワードハッシュが露出する恐れがあります(図3参照)。

図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リゾルバを使用します。このリゾルバは、GoogleのパブリックDNSである8.8.8.8:443に直接TLS接続を確立し、ハードコードされたUser-Agentを含むHTTP POSTリクエストを/dns-queryに送信してバイナリDNSクエリを送り、返されたDNSレスポンスからIPv4アドレスを抽出します(図4参照)。解決されたアドレスは、その後モジュールのHTTPまたはHTTPS接続処理で利用可能になります。この手法により、インプラントは侵害されたシステムに設定されているDNSサービスとは独立してオペレーター指定の転送先を解決でき、ローカルDNSログにエントリが残るという鑑識上の証拠を回避できます。

図4:特徴的なUser-Agentを含むCyclops BlinkのDNSルックアップ
このUser-Agent文字列は、現代のデスクトップブラウザを意図的に模倣していますが、FirefoxのrvトークンおよびGeckoトークン(rv:129.0)とChromeのプロダクトトークンを組み合わせているため、内部的には矛盾しています。これらの要素が同時に登場することは通常なく、オープンソースのUser-Agent生成ツールを使用するスクリプトや自動スクレイピングツールにおいて見られる程度です。同じUser-Agent文字列は、Cyclops BlinkのHTTP GETリクエストにも登場します(図5参照)。このHTTP GETリクエストは、Accept-Languageフィールドでカンマではなくセミコロンを使用している点、およびAcceptフィールドに本来あるべきメディアタイプとサブタイプが欠けている点(汎用的なワイルドカードであればAccept: */*となるはず)でも異常です。

図5:不正な形式のCyclops Blink HTTP GETリクエスト
モジュール0x0Fは、以下の手順を使って稼働中のCyclops Blinkインスタンスを置き換えることもできます。
- /proc/self/exeを通じて現在の実行ファイルを特定する。
- 現在のイメージをバックアップパスにリネームする。
- 元のパスに置き換え用ファイルをダウンロードする。
- ダウンロードに失敗した場合は以前のイメージを復元する。
- 成功した場合はバックアップを削除する。
- 新しいイメージを実行する。
モジュール0x11:ネットワーク・サービススキャナー
モジュール0x11は、内部ネットワークおよびサービスの探索機能を提供します。ローカルに接続されたIPv4ネットワークを列挙し、オペレーターが定義したポート範囲、または一般的に狙われる基盤・管理サービスに関連付けられた組み込みのポートリストのいずれかを対象にプローブを行います。スキャンタスクは別々の子プロセスで実行されるため、モジュールのコマンドチャネルをブロックすることなく複数の操作を並行して進められます。
あるスキャンモードでは、生パケットソケットを通じて完全なEthernet、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は、オペレーターが侵害されたデバイスから見えるトラフィックを監視し、指定した内容を含むパケットを選択的に保持できるようにします。生のEthernetフレームをキャプチャし、オペレーターが指定した語句をIPv4アプリケーションペイロード内から効率的に検索します。すべての通信を収集するのではなく、オペレーターが提供した検索パターンを用いて情報収集に関連する内容を特定することで、C2サーバーに送信される不要なトラフィック量を削減しています。
このモジュールはプログラム可能なネットワークトラフィック監視機能を実装しており、表3に示す3つのコマンドに対応しています。
| コマンド | 機能 |
| 0x01 | パケットキャプチャを開始する |
| 0x02 | 稼働中のキャプチャセッションを停止・破棄する |
| 0x03 | キャプチャサブシステムをリセットする |
表3:Cyclops Blinkモジュール0x12のコマンドコード
モジュール0x12は、以下のコードを使ってLinuxのパケットソケットを開きます。これにより、権限とネットワーク上の位置に応じて、侵害されたホストから見える生のEthernetフレームを受信できるようになります。
socket( AF_PACKET, SOCK_RAW, htons(ETH_P_ALL) );
オペレーターは、キャプチャ時間、処理モード、アドレス・ポートフィルタ、コンテンツ検索の挙動を設定できます。このインプラントは、指定されたパターンをAho-Corasick方式のマッチングオートマトンにコンパイルし、複数の値を効率的に同時検索できるようにしています。キャプチャされたIPv4パケットは解析され、TCPまたはUDPのアプリケーションペイロードが特定されます。その内容はコンパイル済みのマッチャーを用いて検索され、条件に合致したパケットが保持されます。あるコールバックには特徴的なヒューリスティックが含まれており、後続のバイト列が「-AGE」または「-Age」である場合は最初の一致を抑制します。これは、HTTPのUser-Agent文字列に対してユーザー関連の検索語が繰り返しマッチしてしまうのを防ぐ意図があるとみられます。条件に合致したパケットはタイムスタンプ付きのpcap形式のレコードとして保存され、オペレーターは認証情報、トークン、コマンドなど、関心のある内容を含むトラフィックを選択的に収集できます。
このモジュールにより、オペレーターは以下のような要素を収集できる可能性があります。
- 平文の認証情報
- セッションクッキー
- 認証トークン
- アプリケーションのリクエスト
- 独自プロトコルのトラフィック
- 管理系コマンド
- オペレーターが定義した語句に一致するその他の機微なネットワーク内容
このモジュールはTCPストリームの再構築を行わないため、複数のTCPセグメントに分割された検索語は、個々のパケットでのマッチを免れる可能性があります。
モジュール0x50:永続化と自己再配置
モジュール0x50は、インプラントをシステムディレクトリに再配置し、再配置後の実行ファイルをSysV initサービスとして登録することで永続化を確立します。このモジュールは起動時、/proc/self/exeを通じて実行中の実行ファイルのパスを解決し、意図されたインストール先(分析されたサンプルでは/lib/tz/timezone_check)と比較します。インプラントがすでにこの場所から実行されている場合、このモジュールはファイルコピーとサービス登録の手順をスキップします。この仕組みにより、自己再配置と永続化アーティファクトの重複が繰り返されるのを防いでいます。
別の場所から実行された場合、このモジュールは/lib/tzを作成し(パーミッションを0755に設定)、実行中の実行ファイルを/lib/tz/timezone_checkにコピーします。コピー操作が成功したことを確認した後、ファイルシステムから元の実行ファイルを削除(unlink)します。Linuxでは実行中のファイルを削除してもそのイメージがメモリ上にマッピングされたままであるため、実行中のプロセスには影響がありません。この挙動により、元のデプロイ場所に残る痕跡が減り、より正当な名前を持つ永続化コピーだけが残ることになります。
その後、このモジュールは内蔵のシェルテンプレートを使って/etc/init.d/timezone_checkに実行可能な初期化スクリプトを作成します(図6参照)。

図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またはそれに準じる特権実行環境が必要です。
コマンド&コントロール
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 ELF | System V AMD64 ABIを使用する64ビットx86-64版Linux ELF |
| 組み込みモジュール | ホスト偵察、ファイル転送、C2アドレス格納、WatchGuard固有のアップデート・永続化機能に対応する4つのモジュール | ホスト偵察、ファイル・ペイロード管理、能動的ネットワークスキャン、パケットキャプチャ、汎用Linux永続化に対応する5つのモジュール |
| 永続化 | WatchGuardの起動スクリプトを改変し、正規のファームウェアイメージにパッチを当てることで、ファームウェア更新後も感染が存続する | インプラントを/lib/tz/timezone_checkにコピーし、ランレベル2から5までの起動リンクを持つSysV initサービスを作成する |
| ホスト偵察 | モジュール0x08がOS、アカウント、ストレージ、インターフェース、ネットワークの情報を収集する | モジュール0x08は同じ目的を維持しつつ、パスワードハッシュ、リゾルバ構成、CPU情報、プロセスのコマンドラインまで収集範囲を拡張している |
| ネットワーク偵察 | 対応する組み込みモジュールは報告されていなかった | モジュール0x11がIPv4ネットワークを能動的にスキャンし、開いているポートを特定し、サービスバナーを収集し、HTTPおよびTLS関連のプロービングを行う |
| トラフィック監視 | 対応する組み込みモジュールは報告されていなかった | モジュール0x12が生のEthernetトラフィックをキャプチャし、オペレーターが定義した検索語を含むパケットを選択的に保持する |
表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として追跡しています。脅威グループの特定における確度がやや低いのは、IRON VIKINGを2026年に観測された展開と直接結び付ける決定的な証拠が現時点で存在しないためです。
推奨事項
2026年版Cyclops Blinkのサンプルに見られる汎用的なSysV永続化により、WatchGuard固有のファームウェアへの依存がなくなった一方で、能動的なネットワークスキャンと選択的パケットキャプチャによって、このインプラントの情報収集能力は大幅に拡張されています。Cisco FMCデバイス上での発見は、侵害されたネットワーク管理インフラがもたらすリスクを浮き彫りにしています。このような位置にあるデバイスは、特権管理ネットワークへのアクセス、複数のネットワークセグメントにわたる可視性、そして偵察活動や追加ペイロードの展開を行うための信頼された足場を提供し得ます。Linuxのアーキテクチャ、永続化の仕組み、ファイルシステムの構成、利用可能なライブラリ、セキュリティ制御は、製品やソフトウェアバージョンによって異なります。したがって組織は、確認されたCiscoのプラットフォームにとどまらず脅威ハンティングの対象を広げ、報告されているファイルシステム、プロセス、ネットワーク、暗号関連の指標について、適合するLinuxベースのネットワーク機器を調査すべきです。
対策と侵害指標
以下のSophosの対策がこの脅威に関連しています。
- Linux/Agnt-JG
表5に示す脅威指標は、この脅威に関連する活動の検出に利用できます。なお、IPアドレスは再割り当てされる可能性がある点にご留意ください。また、このIPアドレスには悪意のあるコンテンツが含まれている可能性があるため、ブラウザで開く前にリスクを考慮してください。
| 指標 | 種別 | コンテキスト |
| 89[.]34[.]96[.]56 | IPアドレス | Cyclops BlinkのC2サーバー |
| /lib/tz/timezone_check | ファイルパス | 2026年版Cyclops Blinkで使用 |
| Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:129.0) Gecko/20100101 Chrome/129.0.0 | User-Agent | 2026年版Cyclops Blinkで使用 |
表5:この脅威に関する指標
翻訳元: https://www.sophos.com/ja-jp/blog/-eye-spy-cyclops-blink-returns-with-extended-capabilities