위협 데이터베이스 루트킷 LinkPro 리눅스 루트킷

LinkPro 리눅스 루트킷

최근 아마존 웹 서비스(AWS) 환경이 침해되면서 LinkPro라는 이름으로 추적되는, 이전에 문서화되지 않은 GNU/Linux 루트킷이 발견되었습니다. 이 백도어는 eBPF 모듈을 이중으로 사용하는 것으로 유명합니다. 하나는 아티팩트를 숨기는 모듈이고, 다른 하나는 특수하게 조작된 TCP 패킷이 감지된 후에만 원격 명령 기능을 활성화하는 '노크' 방식의 은밀한 트리거 역할을 합니다. 공격 체인과 루트킷의 메커니즘은 컨테이너 남용, 커널 수준 은닉, 그리고 유연한 네트워크 활성화를 혼합하여 탐지 및 포렌식 상관관계 분석을 무력화하는 정교한 공격자의 모습을 보여줍니다.

감염 벡터 및 초기 배포

침입은 CVE‑2024‑23897(CVSS 9.8)에 취약한 노출된 Jenkins 인스턴스를 악용하면서 시작되었습니다. 공격자는 이를 발판 삼아 악성 Docker 이미지(kvlnt/vv, 이후 Docker Hub에서 삭제됨)를 여러 Kubernetes 클러스터에 푸시했습니다. 이 이미지는 Kali Linux 기반을 사용했으며, 지속성 확보, 원격 접근, 그리고 단계적 백도어 다운로드를 위한 작은 애플리케이션 폴더를 포함하고 있었습니다.

악성 Docker 이미지 내부

이미지의 앱 폴더에는 서로 다른 역할을 하는 세 개의 주요 파일이 포함되어 있습니다.

start.sh — SSH 서비스를 시작하고 다른 두 구성 요소를 실행하는 셸 스크립트입니다.

링크 — VPN/프록시 클라이언트 역할을 하도록 컴파일/패키징된 오픈 소스 프로그램(vnt)으로, vnt.wherewego[.]top:29872로 아웃바운드 연결을 합니다. 이를 통해 공격자는 어디에서든 감염된 호스트에 접근하여 해당 호스트를 통해 다른 공격 대상으로 이동할 수 있습니다.

- S3 버킷에서 암호화된 vShell 페이로드를 가져온 다음 56.155.98[.]37에 있는 명령 및 제어(C2) 서버로 WebSocket 링크를 설정하는 Rust 기반 다운로더(vGet이라고 함)입니다.

Kubernetes 노드에 전달된 추가 페이로드

악성 이미지와 함께, 공격자는 노드에 두 가지 다른 구성 요소를 추가했습니다. 하나는 다른 vShell 백도어를 설치하는 드로퍼이고, 다른 하나는 Golang으로 작성된 루트킷인 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 호출의 반환값을 변경하여 libc 함수의 존재를 노출할 수 있는 아티팩트를 숨깁니다.

루트킷 기능 및 명령 세트

LinkPro는 대화형 및 자동화된 원격 작업을 모두 지원합니다. 구현된 기능은 다음과 같습니다.

  • /bin/bash 가상 터미널을 시작하고 대화형 셸 세션을 실행합니다.
  • 임의의 셸 명령을 실행합니다.
  • 파일과 디렉토리를 열거하고 파일 작업을 수행합니다.
  • 디스크에 파일을 다운로드하고 씁니다.
  • 피벗팅과 자립형 프록시를 위한 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가 포함됩니다)에 대한 면밀한 조사가 필요합니다.

트렌드

가장 많이 본

로드 중...