Quasar Linux (QLNX):サプライチェーンに足場を築くフルRAT機能
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
Quasar Linux (QLNX)は、ユーザースペースとeBPFルートキットをPAMバックドアと広範な資格情報収集機能と組み合わせた高度なLinuxリモートアクセス型トロイの木馬です。このマルウェアは、ファイルレス実行、プロセス名偽装、および感染したシステム上で隠れ続けるのを助けるためのいくつかの持続化技法をサポートしています。開発者のワークステーションを狙っているため、トークン、SSHキー、クラウド認証情報を盗むことができ、特にサプライチェーンの悪用には危険です。また、このマルウェアは暗号化された通信を使用し、アクセスの維持と回復力を高めるためにピアツーピアのメッシュアーキテクチャをサポートしています。
調査
Trend Microの研究者はQLNXバイナリを取得し、静的および動的解析を行い、ルートキットとPAMバックドアコンポーネントの埋め込まれたソースコードを明らかにしました。彼らの調査は、ターゲットホスト上でコンポーネントを直接コンパイルするマルウェアの能力、その使用する持続化技法の範囲、およびインプラントによってサポートされる完全なコマンドセットを文書化しました。ネットワーク解析もまた、通信で使用されるカスタムTLSベースのプロトコルと特異なマジック識別子を明らかにしました。この作業から、研究者はハンティングと検出をサポートするための妥協の指標を抽出しました。
緩和策
防御者は、ユニークなミューテックスロックファイル、疑わしい LD_PRELOAD エントリ、および不正な共有オブジェクトを生成する gcc コンパイルコマンドを監視することで、QLNXを探すべきです。組織はまた、 quasar-implant と名付けられた不明なバイナリの実行をブロックし、 /etc/ld.so.preloadへの書き込みアクセスを制限するべきです。開発者アカウントには多要素認証を実施し、セキュリティチームは資格情報ストアや機密トークンファイルの流出を試みる動きを厳重に監視するべきです。
対応
QLNXの指標が見つかった場合、影響を受けたシステムを直ちに隔離し、メモリとディスクのイメージを収集し、不正なプロセスを終了させます。 /etc/ld.so.preloadから不正なエントリを削除し、コンパイルされた不正な .so ファイルを削除し、インプラントが使用するロックファイルをクリアします。特にクラウドやパッケージレジストリトークンなど、潜在的に曝露されたすべての資格情報は即座に変更されるべきです。調査者はまた、侵入中にどの供給チェーンシステム、リポジトリ、またはビルド環境が汚染されたか評価するべきです。
攻撃フロー
検出
試みられた可能性のあるIPルックアップドメイン通信(dns経由)
表示
ユーザープロファイルに疑わしい自動起動.desktopがドロップされた(file_event経由)
表示
Linuxホストで隠しファイルが作成された(file_event経由)
表示
検出すべきIOC(HashSha256):Quasar Linux (QLNX) – サプライチェーンにおける静かな足場:ルートキット、PAMバックドア、資格情報収集などを備えたフル機能のLinux RATの内部
表示
検出すべきIOC(HashSha1):Quasar Linux (QLNX) – サプライチェーンにおける静かな足場:ルートキット、PAMバックドア、資格情報収集などを備えたフル機能のLinux RATの内部
表示
検出すべきIOC(HashMd5):Quasar Linux (QLNX) – サプライチェーンにおける静かな足場:ルートキット、PAMバックドア、資格情報収集などを備えたフル機能のLinux RATの内部
表示
QLNXによるファイルレス実行とコード注入の検出[Linuxプロセス作成]
表示
## Simulation Execution
Prerequisite: The Telemetry & Baseline Pre‑flight Check must have passed.
Rationale: This section details the precise execution of the adversary technique (TTP) designed to trigger the detection rule. The commands and narrative MUST directly reflect the TTPs identified and aim to generate the exact telemetry expected by the detection logic.
-
Attack Narrative & Commands:
- Stage 1 – Payload Generation: The attacker writes a minimal C payload that calls
memfd_createto create an anonymous in‑memory executable file, writes a simple shellcode (e.g.,execve("/bin/sh", …)), marks it executable, and then launches it viaexecveat. - Stage 2 – Compile On‑The‑Fly: Using
gcc(the visible indicator in the rule) the attacker compiles the source without touching disk (output directed to/dev/fd/3). - Stage 3 – Execution & Injection: The compiled binary runs, invokes
memfd_create, loads the shellcode, and finally callsexecveatto execute the memory‑resident ELF. Optionalptracemay be used to inject code into a sibling process, which would also satisfy the rule.
- Stage 1 – Payload Generation: The attacker writes a minimal C payload that calls
-
Regression Test Script:
#!/usr/bin/env bash # # QLNX‑like fileless execution simulation # Generates in‑memory ELF via memfd_create and runs it with execveat. # Requires: gcc, libcap2-bin (for execveat demo), and auditd rules from pre‑flight. set -euo pipefail # 1️⃣ Create C source that performs the memfd + execveat dance cat > /tmp/payload.c <<'EOF' #define _GNU_SOURCE #include <sys/mman.h> #include <sys/syscall.h> #include <unistd.h> #include <fcntl.h> #include <string.h> int main(void) { // Create an anonymous file descriptor (memfd) int fd = syscall(SYS_memfd_create, "memfd_payload", MFD_CLOEXEC); if (fd == -1) _exit(1); // Simple ELF binary that just execve /bin/sh const unsigned char elf[] = { 0x7f,0x45,0x4c,0x46,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ... (truncated for brevity – a minimal statically linked /bin/sh ELF) }; write(fd, elf, sizeof(elf)); // Make it executable fchmod(fd, 0755); // Use execveat to run the in‑memory binary syscall(SYS_execveat, fd, "", NULL, NULL, AT_EMPTY_PATH); _exit(0); } EOF # 2️⃣ Compile with gcc (this will be captured by the detection rule) gcc -static -o /tmp/payload /tmp/payload.c # 3️⃣ Execute the malicious binary – this triggers execveat /tmp/payload # 4️⃣ Cleanup rm -f /tmp/payload /tmp/payload.c -
Cleanup Commands:
# Remove residual files and unload potential audit rules (if test environment is disposable) rm -f /tmp/payload /tmp/payload.c sudo auditctl -d -a always,exit -F arch=b64 -S execveat -k qlnx_execveat sudo auditctl -d -a always,exit -F arch=b64 -S memfd_create -k qlnx_memfd sudo auditctl -d -a always,exit -F arch=b64 -S ptrace -k qlnx_ptrace