脅威データベース ルートキット LinkPro Linux ルートキット

LinkPro Linux ルートキット

最近、Amazon Web Services(AWS)環境への侵入により、これまで文書化されていなかったGNU/Linuxルートキット(LinkProとして追跡)が発見されました。このバックドアは、eBPFモジュールを二重に使用している点が特徴的です。1つはアーティファクトを隠蔽するためのもので、もう1つはステルストリガーとして機能するもので、特別に細工されたTCPパケットが確認された場合のみリモートコマンド機能を起動する「ノック」として機能します。この攻撃チェーンとルートキットのメカニズムは、コンテナの悪用、カーネルレベルの隠蔽、そして柔軟なネットワークアクティベーションを巧みに組み合わせて、検出とフォレンジックによる相関分析を困難にする高度な攻撃者の存在を示しています。

感染ベクターと初期展開

侵入は、CVE-2024-23897(CVSS 9.8)の脆弱性を持つ公開されたJenkinsインスタンスの悪用から始まりました。攻撃者はこの攻撃を足掛かりに、悪意のあるDockerイメージ(kvlnt/vv、Docker Hubから削除済み)を複数のKubernetesクラスターにプッシュしました。このイメージはKali Linuxベースで、永続性、リモートアクセス、段階的なバックドアダウンロードを確立することを目的とした小さなアプリケーションフォルダを含んでいました。

悪意のあるDockerイメージの内部

イメージのアプリ フォルダーには、異なる役割を持つ 3 つの主要なファイルが含まれていました。

start.sh — SSH サービスを起動し、他の 2 つのコンポーネントを実行するシェル スクリプト。

link — VPN/プロキシクライアントとして動作するようにコンパイル/パッケージ化されたオープンソースプログラム(vnt)で、vnt.wherewego[.]top:29872へのアウトバウンド接続を行います。これにより、攻撃者はどこからでも侵入先ホストにアクセスし、それを介して他の標的へと移動することができます。

app — Rust ベースのダウンローダー (vGet と呼ばれます)。S3 バケットから暗号化された vShell ペイロードを取得し、56.155.98[.]37 にあるコマンド アンド コントロール (C2) サーバーへの WebSocket リンクを確立します。

Kubernetesノードに配信される追加のペイロード

悪意のあるイメージに加え、攻撃者はノードに別の2つのコンポーネントをドロップしました。1つは別のvShellバックドアをインストールするドロッパー、もう1つはGo言語で書かれたルートキットであるLinkProです。LinkProは、設定に応じてパッシブ(リバース)モードまたはアクティブ(フォワード)モードのいずれかで動作するように設計されています。パッシブモードでは、特殊なネットワークパケットによって起動されるのを待ちます。アクティブモードでは、C2への接続を自ら開始します。フォワードモードでは5つのトランスポートプロトコル(HTTP、WebSocket、UDP、TCP、DNS)がサポートされ、リバースモードでは通信がHTTPに制限されます。

LinkProの持続方法

マルウェアの全体的な実行と持続動作は、明確なシーケンスに従います。

  • Hide eBPFモジュールをインストールします。このモジュールには、LinkProのプロセスとネットワークアクティビティを隠蔽するために使用されるTracepointおよびKretprobe eBPFプログラムが含まれています。
  • Hide eBPF モジュールのインストールに失敗した場合、または無効になっている場合は、/etc/libld.so に共有ライブラリをインストールし、フォールバック非表示メカニズムとしてそのパスを /etc/ld.so.preload に追加します。
  • リバース(パッシブ)操作の場合は、Knock eBPFモジュールをインストールします。KnockにはXDPプログラムとTCプログラムが含まれているため、C2チャネルは特定の「マジックパケット」を受信した場合にのみアクティブになります。
  • systemd サービスを作成して永続性を確立します。
  • C2 から受信したコマンドを実行します。
  • シャットダウン時またはシグナル (SIGHUP、SIGINT、SIGTERM) が送信されたときに、eBPF モジュールをアンインストールし、/etc/libld.so のプリロード変更を削除/復元して、システムを以前の状態に戻します。

マジックパケットとノック作動機構

LinkPro のパッシブアクティベーションは、特定の TCP パケットに依存します。ウィンドウサイズが 54321 である TCP パケットはすべて「マジックパケット」として扱われます。Knock はそのパケットを検出すると、送信元 IP を保存し、1 時間の有効期限を設定します。その送信元からの後続の TCP パケットは監視され、適切なタイミングで Knock がヘッダーを書き換え、オペレータのトラフィックが LinkPro のリスニングポート(2333)にリダイレクトされます。送信パケットは、元のポートをネットワークに返すように調整されます(送信元ポートは 2233 に書き換えられます)。その目的は単純明快ですが効果的です。つまり、攻撃者がフロントエンドファイアウォールが許可する任意のポートから LinkPro に到達できるようにしながら、外部ファイアウォールのログとホストの内部ネットワークアクティビティの関連付けを困難にするのです。

LinkProがどのように自身を隠すのか

LinkPro は 2 段階の隠蔽戦略を採用しています。

カーネル/eBPF の隠蔽:Hide eBPF モジュールは、getdents(ファイル/ディレクトリの隠蔽)や sys_bpf(自身の BPF プログラムの隠蔽)などのシステムコールを傍受する Tracepoint プログラムと Kretprobe プログラムをインストールします。このアプローチには、CONFIG_BPF_KPROBE_OVERRIDE を有効にしてカーネルをビルドする必要があります。

ユーザー空間 LD_PRELOAD フォールバック: カーネルケーパビリティが存在しない場合、LinkPro は共有ライブラリ (libld.so) を書き込み、そのパスを /etc/ld.so.preload に配置します。/etc/ld.so.preload により、指定されたライブラリがすべての動的リンクプロセス (/lib/ld-linux.so および glibc を使用するプロセス) にロードされるため、埋め込まれた libld.so は libc 関数を早期に (glibc 自身の動作よりも前に) フックし、libc 呼び出しからの戻り値を変更することで、その存在が明らかになる可能性のあるアーティファクトを隠蔽します。

ルートキットの機能とコマンドセット

LinkProは、インタラクティブなリモートアクションと自動リモートアクションの両方をサポートしています。実装されている機能には以下が含まれます。

  • /bin/bash 疑似端末を起動し、対話型シェル セッションを実行します。
  • 任意のシェルコマンドを実行します。
  • ファイルとディレクトリを列挙し、ファイル操作を実行します。
  • ファイルをダウンロードしてディスクに書き込みます。
  • ピボットおよび Living Off-The-Land プロキシ用の SOCKS5 プロキシ トンネルを確立します。

ネットワークプロトコルのサポートとC2の動作

アクティブ(フォワード)モードでは、LinkProは柔軟性が高く、HTTP、WebSocket、UDP、TCP、DNSトランスポートを使用して通信できます。パッシブ(リバース)モードでは、通信はHTTPに制限されますが、Knockマジックパケットによって1時間の一時的なコマンドウィンドウが開かれた後にのみリッスンするため、ステルス性が向上します。

クリーンアップとアンインストールの動作

プロセスが終了シグナルを受信した場合、LinkProは痕跡の削除を目的とします。インストール済みのeBPFモジュールをアンインストールし、/etc/libldを削除または復元して以前の状態にグループ化することで、システムに変更が加えられていないように見えます。この意図的なクリーンアップルーチンは、オペレーターが回避策を講じ、長期的なフォレンジック上の痕跡を最小限に抑えようとしていることを示しています。

運用上のコンテキストと帰属

このキャンペーンでは、深刻度の高いJenkinsエクスプロイト、悪意のあるコンテナイメージ、複数のバックドア亜種、そしてカーネルレベルのステルス技術が利用されていました。これらの組み合わせは、意欲的で有能な攻撃者の存在を示唆しています。明確な攻撃者の特定は公表されていませんが、ツールセットと、プロキシや永続的なリモートアクセスにこの脆弱性が利用されているように見えることから、金銭目的の活動(ピボット、追加侵入のためのプロキシ、またはアクセスの転売)が強く示唆されます。

カーネルの依存関係とフォールバック動作

LinkProは、ステルス性の高いカーネルインターセプションを実現するためにBPF kprobeオーバーライド機能に依存しているため、ホストカーネルがCONFIG_BPF_KPROBE_OVERRIDEを公開している場合にのみ、カーネルレベルの隠蔽技術を適用します。このカーネル機能が利用できない場合、LinkProは意図的にLD_PRELOAD共有ライブラリ方式にフォールバックしてユーザー空間に自身を隠蔽し、幅広い環境における隠蔽性を確保します。

終わりに

LinkProは、コンテナの侵害、段階的ローダー、カーネルインストルメンテーション(eBPF)、巧妙なネットワークトリック(マジックパケットのアクティベーションとポート書き換え)を巧妙に組み合わせることで、ステルス性と柔軟性を維持する最新の侵入手法を実証しています。検出と修復には、不正なeBPFプログラム、/etc/ld.so.preload内の予期しないエントリ、異常なsystemdサービス、そして指定されたインフラストラクチャへのネットワーク接続(フォレンジック指標として、IPアドレス56.155.98[.]37、ポート29872、2333、2233、および削除されたDockerイメージ名kvlnt/vvなど)を注意深く検査する必要があります。

トレンド

最も見られました

読み込んでいます...