한 줄 요약

이란 연계 해킹 그룹 **Nimbus Manticore**가 LinkedIn 등 구직 플랫폼에서 채용 담당자로 위장해 소프트웨어 개발자에게 코딩 테스트 파일을 보내는 방식으로 악성코드를 심고 있습니다. 이 파일 안에는 정상 npm 패키지처럼 보이지만 실제로는 악성코드가 숨겨진 가짜 패키지가 포함되어 있으며, 피해자가 과제를 실행하는 순간 몰래 RAT(원격 접속 트로이목마)이 설치됩니다. 새롭게 발견된 두 악성코드 NodeRabbit과 PollCat은 Windows, Linux, macOS 모두에서 작동하며, 파일 탈취·명령 실행·지속 감염 등 광범위한 기능을 갖추고 있습니다. 보안 솔루션 설치 여부도 탐지하며, 구글·마이크로소프트·크라우드스트라이크 등 24개 주요 보안 벤더 폴더를 직접 수집합니다. 개발자를 대상으로 한 채용 미끼 공격이 정교해지고 있어, 외부 출처의 코드 과제를 실행할 때 각별한 주의가 필요합니다.

사건

이란 해킹 그룹 Nimbus Manticore가 LinkedIn에서 채용 담당자로 위장해 코딩 테스트 ZIP 파일을 배포, 내부에 숨긴 가짜 npm 패키지(colorized_terminal, pretty-log)를 통해 NodeRabbit과 PollCat RAT를 감염시키는 캠페인이 아프가니스탄·이집트·에티오피아에서 확인됐습니다.

영향

감염 시 원격 명령 실행, 파일 탈취·업로드, 지속 감염(레지스트리·크론·런치에이전트), Outlook 계정 수집, 가짜 VS Code 확장 및 Git 훅 삽입 등이 가능하며, Windows/Linux/macOS 전 플랫폼에 영향을 미칩니다. 보안 벤더 24곳의 설치 폴더도 자동 수집됩니다.

원인

피해자가 과제 지시에 따라 server.js 수정을 금지당한 채 프로젝트를 실행하면, 해당 파일이 가져오는 트로이목마 npm 패키지가 백그라운드에서 악성 임플란트를 자동 실행합니다.

대응

카스퍼스키(Kaspersky)가 분석·공개하였으며, Azure 기반 C2 도메인 3개(plugplay, rgbteller, wslwebui.azurewebsites[.]net)가 식별됐습니다. 현재까지 공개된 패치나 탐지 업데이트를 보안 솔루션에 적용해야 합니다.

실무 포인트

외부(LinkedIn 등)에서 받은 코딩 과제 프로젝트는 실행 전 반드시 node_modules 내 패키지 출처와 서버 파일 코드를 직접 검토해야 합니다. npm 레지스트리에 등록되지 않은 로컬 번들 패키지는 즉각 의심해야 하며, 샌드박스 환경에서 실행하는 것을 권장합니다.

본문

이란 연계 Nimbus Manticore 해킹 그룹이 기존에 알려지지 않았던 두 가지 악성코드 패밀리와 연루된 것으로 밝혀졌습니다. 이번 발견은 해당 그룹의 공격 도구가 계속 진화하고 있음을 보여주며, Node.js와 JavaScript로 개발된 크로스플랫폼 RAT(원격 접속 트로이목마)를 이용해 Linux와 Apple macOS 시스템까지 감염 범위를 넓히고 있습니다.

러시아 사이버보안 업체 카스퍼스키(Kaspersky)는 해당 악성코드를 각각 NodeRabbit과 PollCat으로 추적 중입니다. NodeRabbit의 첫 번째 샘플은 아프가니스탄 내 시스템에서 발견됐으며, 이후 이집트와 에티오피아에 있는 두 대의 별개 장치에서도 확인됐습니다.

"공격자들은 LinkedIn과 기타 구직 플랫폼에서 스피어 피싱(spear-phishing) 메시지를 통해 [NodeRabbit을] 배포하며, 메시지에는 악성코드가 삽입된 코딩 테스트 압축 파일이 포함되어 있습니다"라고 카스퍼스키 보안 연구원 오마르 아민(Omar Amin)은 밝혔습니다. "PollCat 역시 NodeRabbit과 마찬가지로 크로스플랫폼 RAT이지만, 난독화된 JavaScript로 작성되어 있으며 마찬가지로 악성 코딩 테스트 압축 파일을 통해 배포됩니다."

Nimbus Manticore는 그동안 C, C++, Go로 작성된 악성코드를 주로 사용하고, DLL 검색 순서 하이재킹(DLL search-order hijacking) 기법으로 이를 배포해왔습니다. 그러나 최근 발견된 사례는 해당 위협 행위자가 목적 달성을 위해 크로스플랫폼 도구로 영역을 확장하고 있음을 보여줍니다.

이번 발견은 최근 수개월간 해당 그룹의 악성코드 무기고가 빠르게 확장되는 가운데 나온 것으로, 새롭게 추가된 도구에는 다음이 포함됩니다:

  • NightLedger라는 Windows 백도어
  • BridgeHead와 ArcBridge라는 두 개의 커스텀 WebSocket 터널러
  • 역방향 SSH 터널링 도구
  • TWOSTROKE와 유사한 백도어

아프가니스탄 시스템에서 관찰된 의심스러운 활동의 시작점은 AWS에 호스팅된 ZIP 파일("Front-Technical-Challenge.zip")로, 엔지니어링 직군 채용 기회의 일환으로 전달된 것으로 추정됩니다. 위협 행위자는 대형 기술 회사의 인재 채용 담당자로 위장해 소프트웨어 엔지니어에게 접근한 뒤 기술 과제를 완료하도록 유도한 것으로 알려졌습니다.

주목할 점은 Nimbus Manticore가 채용 테마의 미끼를 사용해 잠재적 표적을 속여 스스로 컴퓨터를 감염시키도록 유도하는 수법으로 Iranian Dream Job이라는 이름으로도 추적된다는 것입니다. 이는 북한 연계 Lazarus Group이 오래전부터 써온 전술이기도 합니다.

압축 파일에는 Taskflow라는 프로젝트 관리 도구의 소스 코드가 포함되어 있으며, 지원자에게 3시간 이내에 AI 보조 도구 없이 "프론트엔드 코드의 모든 버그를 찾아 수정"하도록 지시합니다.

지시 사항에는 애플리케이션의 서버 컴포넌트("server.js")를 수정하지 말라고 명시되어 있으며, "버그가 없고 정상적으로 동작한다"고 설명합니다. 그러나 바로 이 파일 안에 악성 코드가 숨겨져 있습니다.

"server.js의 첫 번째 줄에서 colorized_terminal 버전 2.1.0이라는 트로이목마 npm 패키지를 가져왔습니다"라고 카스퍼스키는 밝혔습니다. "공격자들은 이 패키지를 npm 레지스트리에 게시하지 않고 코딩 과제 압축 파일의 node_modules 디렉터리에 직접 번들로 포함시켰습니다. 가져오기가 실행되면 패키지는 node_modules/.cache/.320697f1/index.js에 있는 임플란트를 분리된 백그라운드 프로세스로 조용히 실행합니다."

해당 임플란트는 NodeRabbit으로, Azure에 호스팅된 세 개의 C2(명령·제어) 주소("plugplay.azurewebsites[.]net", "rgbteller.azurewebsites[.]net", "wslwebui.azurewebsites[.]net")와 세 가지 API 엔드포인트를 통해 통신합니다:

  • /api/rabbit/checkin — 에이전트 및 호스트 정보 등록
  • /api/rabbit/task — 명령 폴링
  • /api/rabbit/result — 작업 결과 전송

이 악성코드는 11가지 명령을 지원하며, 호스트 상세 정보 수집, 실행 중인 프로세스 목록 조회, 임의 셸 명령 실행, 디렉터리 열거, 파일을 청크 단위로 읽어 Base64 인코딩된 데이터 반환, Base64 인코딩된 텍스트를 디코딩해 특정 파일 오프셋에 쓰기, 파일 또는 디렉터리 재귀 삭제, 재귀 디렉터리 생성, 어댑터·MAC 주소·IP 주소·DNS 설정 열거, 비콘 간격 변경 등이 가능합니다.

NodeRabbit의 또 다른 주목할 만한 기능은 Base64 인코딩된 Node.js 스크립트를 임의로 명명된 ".tmp" 파일에 쓰고 실행한 뒤 삭제하여 악성 활동의 흔적을 지우는 것입니다.

카스퍼스키는 동일한 코드 계보를 공유하는 NodeRabbit의 두 가지 변종을 추가로 식별했으며, 각각 이집트와 에티오피아에서 발견됐습니다:

  • colorized_terminal 대신 pretty-log(버전 2.1.0)라는 다른 트로이목마 npm 패키지를 사용하고, 기업 프록시 지원을 부분적으로 구현하며, 분석 환경에서 실행 중임이 감지되면 종료하는 두 번째 변종
  • 마찬가지로 pretty-log npm 패키지를 통해 실행되지만 동일한 작업을 수행하기 위해 다른 API 엔드포인트 집합을 사용하는 세 번째 변종 — /sdk/v2/ready, /sdk/v2/config, /sdk/v2/events

지속 감염은 운영체제에 따라 다르게 구현됩니다: Windows에서는 Run 레지스트리 키, Linux에서는 cron 항목, macOS에서는 런치 에이전트. 지속성 메커니즘은 Microsoft Edge 브라우저 업데이트(첫 번째 변종) 또는 Intel의 Driver & Support Assistant(두 번째 변종)를 모방합니다.

세 번째 변종은 정상 소프트웨어를 사칭하지 않는 대신, WSL(Windows Subsystem for Linux)을 활용해 "wscript.exe"와 "wsl.exe"를 통해 Visual Basic Script 파일을 실행하는 Windows 작업을 매일 오전 10시에 수행하도록 등록합니다. 또한 12가지 새로운 명령을 포함하며 다음을 수행할 수 있습니다:

  • 접근 가능한 Windows 드라이브 문자 또는 WSL 마운트 드라이브 열거
  • 프로세스 실행
  • PID 또는 이미지 이름으로 프로세스 종료
  • 활성 C2 서버 교체 및 새 설정 유지 시도
  • 현재 C2 서버 반환
  • Outlook OST 및 PST 아티팩트에서 계정 주소 수집
  • "GitHub Copilot Helper"라는 가짜 VS Code 확장 설치 시도 및 추가 지속성을 위한 Windows Run 값 등록
  • VS Code, 예약 작업, Run 키 지속성 지표 확인
  • 가짜 확장 제거
  • 최근 및 일반적인 개발 위치에서 Git 저장소 검색
  • 추가 지속성을 위해 저장소의 Git 훅에 런처 삽입
  • 표시된 Git 훅 런처 제거

Nimbus Manticore는 시간 제한 개발자 평가를 통해 배포된 코딩 과제 미끼("RankChallenge-react-6uJSX3-main.zip")를 활용해 PollCat을 배포하는 것도 관찰됐습니다.

"눈에 보이는 과제는 보안 CTF(보안 경진대회)가 아니지만, 프로젝트 곳곳에 CTF 용어가 사용되고 있습니다"라고 카스퍼스키는 밝혔습니다. "루트 패키지 이름이 ctf-server이고, 백엔드는 CTF server running을 출력하며, 프론트엔드는 여러 ctf-* 저장 키를 사용하고, 튜토리얼은 path/to/ctf를 참조합니다."

"이러한 반복적인 레이블과 실제로 제공된 애플리케이션과 완전히 일치하지 않는 지시 사항은 AI 보조 또는 템플릿 기반으로 생성된 프로젝트와 일치합니다. 공격자가 AI 코딩 보조 도구를 이용해 CTF 스타일의 React 플랫폼을 생성한 뒤 악성 컴포넌트를 삽입했을 가능성이 있습니다."

압축 파일 내 PDF 튜토리얼은 표적에게 "Continue"를 클릭하고 30초마다 갱신되는 공격자가 제공한 6자리 OTP(일회용 비밀번호)를 입력한 뒤 1시간 세션 내에 과제를 완료하도록 유도합니다. 이처럼 짧은 활성화 시간은 거짓 긴박감을 조성해 피해자가 최대한 빨리 프로젝트를 실행하도록 만들어 감염 가능성을 높이려는 시도로 보입니다.

1시간 세션 창에도 불구하고, PollCat은 OTP 인증 과정과 독립적으로 실행되며 OTP 검증 성공 여부와 무관합니다. 검증 실패 시 피해자는 보호된 과제 기능에 접근할 수 없지만, 성공적인 OTP 검증은 JWT를 발급하고 추가 PollCat 인스턴스를 실행합니다.

지속성을 위해 악성코드는 Windows, Linux, 또는 macOS에서 매일 실행되는 예약 작업을 생성한 뒤 C2 서버에 연결해 기본 호스트 정보를 전송하고 추가 지시를 기다립니다. 22가지 명령을 지원하며 7개의 API 엔드포인트를 통해 통신합니다:

  • /beacon — 클라이언트 등록 및 socketId 획득
  • /gate/hello — 호스트, 사용자, 도메인, 운영체제 정보 및 현재 권한 수준 전송
  • /gate/fetch?token=<socketId> — 명령 폴링
  • /gate/submit — Base64 인코딩된 명령 결과 구조 제출
  • /vault/<uuid> — 호스팅된 파일을 가져와 피해 장치에 쓰기
  • /vault/push — 로컬 파일 또는 파일 청크를 C2에 업로드
  • /gate/track — 청크 업로드 진행 상황 보고

지원 명령은 일반적인 백도어 기능 전반을 아우르며, 파일 조작, 셸 명령 실행, 파일 업로드/다운로드, JavaScript 실행, DLL 로드, ZIP 파일 생성 또는 추출, 실행 중인 프로세스·드라이브·볼륨·마운트 포인트 열거 등을 수행할 수 있습니다. WS_DOWNLOAD, REQUEST_ELEVATION, PERSIST 세 가지 명령은 현재 구현되어 있지 않습니다.

PollCat은 또한 소프트웨어 및 보안 벤더에 해당하는 24개의 하드코딩된 문자열과 일치하는 폴더를 검색합니다. 대상에는 Google, Microsoft, Palo Alto Networks, Cisco, VMware, Fortinet, Citrix, Check Point, Juniper Networks, LogMeIn, Sophos, Symantec, Trend Micro, McAfee, Kaspersky Lab, ESET, Bitdefender, Avast, CrowdStrike, SentinelOne, Malwarebytes, Brave, Tencent, Naver가 포함됩니다.

일치하는 폴더가 발견되면 악성코드는 해당 폴더의 루트 내용을 목록화하되, 제품 디렉터리를 재귀적으로 스캔하지는 않습니다. 결과는 JSON 형태로 "/api/system-details/result" 엔드포인트로 전송됩니다.

이번 활동과 Nimbus Manticore의 연관성은 PollCat과 해당 그룹에 이전에 귀속된 백도어 MiniFast(MiniFast, 일명 MiniUpdate 또는 Retrograde) 사이의 구조적 유사성, 명령 가져오기 방식, 비콘 타이밍, 명령 집합의 유사점, 그리고 C2를 위한 Azure Websites 및 Cloudflare 지원 도메인 사용에서 비롯됩니다.

"크로스플랫폼 스크립팅으로의 전환은 운영자에게 Windows, Linux, macOS에서 모두 실행되는 단일 코드베이스를 제공하며, 페이로드는 개발자 워크스테이션 환경에 자연스럽게 녹아듭니다"라고 카스퍼스키는 밝혔습니다. "그러나 배포 메커니즘은 Mirage Kitten의 역사적 수법과 일관성을 유지합니다: LinkedIn에서 채용 담당자 페르소나를 활용해 사이버 스파이 목적으로 중동 및 아프리카 전역의 핵심 분야를 표적으로 삼는 방식입니다."

출처
The Hacker News · thehackernews.com
원문 보기

분야별 뉴스

관심 분야의 보안 이슈를 모아 보세요.

TORUN SECURITY

투런이 제공하는 보안 솔루션

공격 표면 관리부터 엔드포인트·내부정보 보호까지, 기업 환경에 맞는 보안 솔루션을 투런이 함께 설계합니다.