퀘이사 리눅스 (QLNX): 풀 RAT 기능을 갖춘 공급망 접근 지점
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
Quasar Linux (QLNX)는 사용자 공간 및 eBPF 루트킷과 PAM 백도어 및 광범위한 자격 증명 수집 기능을 결합한 고급 Linux 원격 접근 트로이 목마입니다. 이 멀웨어는 파일리스 실행, 프로세스 이름 가장 및 여러 지속성 기술을 지원하여 감염된 시스템에서 숨겨지도록 합니다. 특히 개발자 워크스테이션을 대상으로 하여 공급망 남용에 특히 위험합니다. 이는 토큰, SSH 키 및 클라우드 자격 증명을 탈취할 수 있습니다. 이 멀웨어는 또한 암호화된 통신을 사용하며 끈기를 높이고 접근을 유지하기 위해 피어 투 피어 메쉬 아키텍처를 지원합니다.
조사
트렌드 마이크로 연구원들은 QLNX 바이너리를 획득하고 정적 및 동적 분석을 통해 루트킷 및 PAM 백도어 구성 요소의 내장 소스 코드를 발견했습니다. 그들의 조사는 목표 호스트에서 직접 구성 요소를 컴파일할 수 있는 멀웨어의 능력, 사용되는 지속성 메커니즘의 범위 및 임플란트가 지원하는 전체 명령 세트를 문서화했습니다. 네트워크 분석을 통해 사용자 정의된 TLS 기반 프로토콜 및 통신에서 사용되는 독특한 매직 식별자가 밝혀졌습니다. 이 작업을 통해 연구자들은 사냥 및 탐지를 지원하기 위한 침해 지표를 추출했습니다.
경감
방어자는 고유한 뮤텍스 잠금 파일, 의심스러운 LD_PRELOAD 항목, 그리고 악성 공유 객체를 생성하는 비정상적인 gcc 컴파일 명령을 모니터링하여 QLNX를 찾아야 합니다. 조직은 또한 quasar-implant 이름이 사용된 알려지지 않은 바이너리 실행을 차단하고 /etc/ld.so.preload에 대한 쓰기 접근을 제한해야 합니다. 개발자 계정에 대해 다중 인증이 적용되어야 하며, 보안 팀은 자격 증명 저장소와 민감한 토큰 파일을 빼내려는 시도를 면밀히 모니터링해야 합니다.
대응
QLNX 지표가 발견되면 즉시 영향을 받은 시스템을 격리하고 메모리 및 디스크 이미지를 수집하며 악성 프로세스를 종료해야 합니다. 비인가 항목을 /etc/ld.so.preload에서 제거하고, 컴파일된 악성 .so 파일을 삭제하고, 임플란트가 사용하는 잠금 파일을 지워야 합니다. 특히 클라우드 및 패키지 레지스트리 토큰과 같은 모든 잠재적으로 노출된 자격 증명은 지체 없이 회전되어야 합니다. 조사자는 또한 공격 중 오염된 공급망 시스템, 저장소 또는 빌드 환경이 있는지 평가해야 합니다.
공격 흐름
탐지
가능한 IP 조회 도메인 통신 시도(dns 통해)
보기
사용자 프로필에 의심스러운 Autostart .desktop이 드롭됨(file_event 통해)
보기
리눅스 호스트에 숨겨진 파일 생성됨(file_event 통해)
보기
탐지할 IOCs(HashSha256): Quasar Linux (QLNX) – 공급망에서의 은밀한 입지: 루트킷, PAM 백도어, 자격 증명 수확 및 기타 기능이 포함된 전체 기능의 Linux RAT
보기
탐지할 IOCs(HashSha1): Quasar Linux (QLNX) – 공급망에서의 은밀한 입지: 루트킷, PAM 백도어, 자격 증명 수확 및 기타 기능이 포함된 전체 기능의 Linux RAT
보기
탐지할 IOCs(HashMd5): Quasar Linux (QLNX) – 공급망에서의 은밀한 입지: 루트킷, PAM 백도어, 자격 증명 수확 및 기타 기능이 포함된 전체 기능의 Linux RAT
보기
파일리스 실행 및 코드 주입 탐지 QLNX [리눅스 프로세스 생성]
보기
## 시뮬레이션 실행
전제 조건: 텔레메트리 & 베이스라인 예비 비행 검사가 통과되어야 합니다.
이유: 이 섹션은 탐지 규칙을 트리거하기 위해 설계된 적 기법(TTP)의 정확한 실행을 자세히 설명합니다. 명령어와 서술은 식별된 TTP를 직접 반영해야 하며 탐지 로직에서 예상하는 정확한 텔레메트리를 생성하는 것을 목표로 합니다.
-
공격 서사 및 명령어:
- 1단계 – 페이로드 생성: 공격자는
memfd_create를 호출하는 최소한의 C 페이로드를 작성하고 익명 인-메모리 실행 파일을 작성하고 간단한 쉘코드(예:execve("/bin/sh", …))를 작성하며, 실행 가능하게 표시하고 그 다음에execveat. - 을 통해 실행합니다 2단계 – 실시간 컴파일:
gcc(규칙에 보이는 지표) 사용하여 공격자는 소스 코드를 디스크에 touch하지 않고 컴파일합니다(출력은/dev/fd/3). - 으로 리디렉션) 3단계 – 실행 및 주입:
memfd_create컴파일된 바이너리는 실행되어execveat을 호출하여 메모리 상주 ELF를 실행합니다. 선택적ptrace가 사용되어 형제 프로세스에 코드를 주입할 수 있으며, 이는 규칙을 만족시킬 것입니다.
- 1단계 – 페이로드 생성: 공격자는
-
회귀 테스트 스크립트:
#!/usr/bin/env bash # # QLNX‑like 파일리스 실행 시뮬레이션 # memfd_create 및 execveat를 통해 인 메모리 ELF 생성 및 실행 # 요구 사항: gcc, libcap2-bin (execveat 데모용), 예비 비행의 auditd 규칙. set -euo pipefail # 1️⃣ memfd + execveat 동작을 수행하는 C 소스 생성 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) { // 익명 파일 디스크립터(memfd) 생성 int fd = syscall(SYS_memfd_create, "memfd_payload", MFD_CLOEXEC); if (fd == -1) _exit(1); // 매우 간단한 ELF 바이너리로 just execve /bin/sh const unsigned char elf[] = { 0x7f,0x45,0x4c,0x46,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ... (간결성을 위해 잘랐습니다 - 정적으로 링크된 근소한 /bin/sh ELF) }; write(fd, elf, sizeof(elf)); // 실행 가능하게 설정 fchmod(fd, 0755); // in-memory 바이너리를 실행하기 위해 execveat 사용 syscall(SYS_execveat, fd, "", NULL, NULL, AT_EMPTY_PATH); _exit(0); } EOF # 2️⃣ gcc로 컴파일(탐지 규칙에 의해 캡처됩니다) gcc -static -o /tmp/payload /tmp/payload.c # 3️⃣ 악성 바이너리 실행 - execveat가 발생함 /tmp/payload # 4️⃣ 정리 rm -f /tmp/payload /tmp/payload.c -
정리 명령어:
# 잔여 파일 제거 및 잠재적 감시 규칙 해제 (테스트 환경이 일회용인 경우) 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