한 줄 요약

북한(DPRK) 연계 해커 그룹이 HashiCorp의 Terraform 레지스트리, npm, Go 모듈 등 개발자 패키지 저장소를 통해 Go 기반 악성코드를 배포하고 있습니다. 공격자들은 LinkedIn·Facebook 등에서 가짜 IT 기업 직원으로 위장해 개발자에게 접근한 뒤, 채용 과제 형태로 악성 패키지가 포함된 코드를 실행하도록 유도합니다. 배포된 악성코드는 이더리움 블록체인 스마트 컨트랙트와 Slack을 명령·제어(C2) 채널로 활용해 탐지를 매우 어렵게 만드는 정교한 구조입니다. Terraform 레지스트리는 이번에 처음 악성코드 유포 경로로 악용되었으며, 공격 범위가 npm·PyPI를 넘어 빠르게 확대되고 있습니다. 개발자와 오픈소스 패키지 관리자는 외부 패키지 검증을 강화하고 계정에 다단계 인증(MFA)을 반드시 설정해야 합니다.

사건

북한 연계 위협 행위자(Graphalgo 캠페인)가 HashiCorp Terraform 레지스트리와 npm, Go 모듈을 통해 Go 기반 악성코드를 배포함. 가짜 채용 시나리오와 패키지 관리자 자격증명 탈취 방식을 병행 사용.

영향

감염된 개발자 시스템의 하드웨어·OS 정보 탈취, 원격 코드 실행(Go 및 JavaScript), 공급망 침해 가능성. 악성 npm 패키지 '@dforge-core/dforge-mcp'는 35분 38초간 공개 상태로 노출됨.

원인

가짜 웹3(Web3) 기업으로 위장한 채용 제안으로 개발자를 유인하거나, 패키지 관리자 계정 자격증명 탈취 후 합법적 패키지에 악성 버전 삽입. 블록체인·Slack을 C2로 활용해 분석 회피.

대응

악성 패키지는 레지스트리에서 제거됨. Rust 프로젝트는 MFA 활성화 및 계정 이상 로그인 점검 공식 권고. Aikido·JFrog·CheckMarx·SafeDep·CloudSEK 등 복수 보안 업체가 침해 지표(IoC) 공개.

실무 포인트

Terraform provider, npm, Go module 등 외부 패키지 도입 시 배포자 신원 및 다운로드 이력 검증 필수. 채용 면접·코딩 과제 중 코드 실행 요청에 각별히 주의. 패키지 관리자 계정 MFA 필수 적용 및 비정상 push 활동 모니터링 권장.

본문

사이버보안 연구원들이 두 개의 Go 모듈과 두 개의 Terraform 프로바이더를 통해 배포된 Go 기반 악성코드를 공개했습니다. 위협 행위자가 HashiCorp가 운영하는 중앙 집중식 레지스트리를 악성 페이로드 배포 경로로 활용한 것은 이번이 처음입니다.

Aikido에 따르면, 문제가 된 Terraform 프로바이더 및 Go 모듈 목록은 다음과 같습니다.

  • gocommunity-io/dockerd (다운로드 222회)
  • kreuzwenker/docker (다운로드 1,449회)
  • gocommunity.io/orderedbtree
  • gogets.dev/btreex

이 패키지들을 통해 배포된 악성코드는 Graphalgo 캠페인과 유사점을 보입니다. Graphalgo는 올해 2월 ReversingLabs가 처음 문서화한 캠페인으로, 북한(DPRK) 위협 행위자의 소행으로 귀속된 바 있습니다.

이 공격에서 잠재적 개발자들은 LinkedIn, Facebook 같은 소셜 플랫폼이나 포럼의 채용 공고를 통해 가상의 Web3 기업 직원으로 위장한 공격자로부터 접근을 받고, npm 또는 PyPI에 공개된 악성 의존성을 통해 악성 행위가 삽입된 무해한 GitHub 저장소를 이용해 코딩 과제를 완수하도록 요청받습니다.

주목할 점은, 이번 발견이 이번 주에도 동일 악성코드를 배포하는 새로운 악성 npm 패키지 집합이 식별된 시점과 겹친다는 것입니다. Checkmarx, JFrog, SafeDep이 지목한 패키지 일부는 다음과 같습니다.

  • indexed-btree
  • mathsbase
  • mathmain
  • math-universe
  • modern-events
  • quick-events
  • crypto-hasher
  • events-router
  • sort-btree
  • graphcore-js
  • graphlib-js

이 패키지들을 분석한 결과, 일부의 경우 특정 암호화 연산이 수행될 때만 악성코드 실행이 트리거되어 표적화된 공격의 모든 특징을 나타내는 것으로 확인되었습니다.

JFrog는 다음과 같이 밝혔습니다. "페이로드는 피해자가 특정 행렬로 선형 연립방정식을 풀었을 때만 복호화되고, Ethereum Sepolia 테스트넷의 스마트 컨트랙트에서 명령을 수신하며, Slack을 통해 두 번째 명령 채널을 유지하고, GitHub Actions 워커 팜에서 만들어낸 가짜 다운로드 수로 위장합니다."

공격 체인은 비대칭 암호화로 암호화되어 있어 정확한 기능이 아직 파악되지 않은 암호화 페이로드로 이어집니다. 이 임플란트는 Slack 채널에 접속하도록 설계되어 있으며, 10초마다 "conversations.history" 엔드포인트를 폴링하여 패킷 유형에 따라 다음 동작을 수행합니다.

  • Start 패킷: 파일 전송 시작
  • Chunk 패킷: 파일 내용 전달
  • End 패킷: 청크 조합

SafeDep는 다음과 같이 밝혔습니다. "블록체인 경로는 원격 데이터를 복호화하고, subwatcher를 기록한 뒤 Node.js로 실행시킵니다. 이 경로들을 통해 공격자는 필요한 설정이 성공한 호스트에서 실행할 코드를 전달할 수 있습니다. 저희는 임플란트는 확보했지만, 이 채널을 통해 이후 전달되는 코드는 확보하지 못했습니다. 따라서 공격자가 피해자 시스템에서 어떤 작업을 실행했는지 단정할 수 없습니다."

Aikido는 Terraform 프로바이더 및 Go 모듈을 통해 배포된 악성코드가 npm 버전과 블록체인 및 Slack 인프라를 공유하는 Go 포트(port)라고 밝혔습니다. 이 악성코드는 블록체인 데드 드롭(dead drop)과 Slack 봇 토큰을 이용한 이중 명령·제어(C2) 채널을 갖추고 있습니다.

초기 단계에서 악성코드는 하드웨어 속성, 운영체제, 호스트명, 감염 시스템의 노드 가용 여부 등 시스템 정보를 수집합니다. 수집된 데이터는 API를 통해 공격자가 제어하는 Slack 채널로 전송됩니다.

보안 연구원 Oliver Smith는 다음과 같이 설명했습니다. "체크인 호출 이후 악성코드는 임시 공개-개인 키 쌍을 생성합니다. 악성코드는 임시 키를 위협 행위자의 두 공개 키와 결합하여 공유 키를 생성합니다. 이 공유 키를 통해 악성코드는 C2 통신을 노출하거나 감염 호스트 간 메시지를 누출하지 않고 공유 채널에서 감염 클라이언트들과 통신할 수 있습니다."

블록체인 기반 C2는 하드코딩된 컨트랙트 주소를 사용하여 Arbitrum Sepolia 테스트넷의 이더리움 스마트 컨트랙트에서 데이터를 가져오며, 3초마다 암호화된 명령을 폴링합니다. 수신된 명령은 Go 또는 JavaScript 코드로 실행됩니다.

Smith는 "이 C2 메커니즘은 해당 악성코드가 표적화된 작전의 일부임을 더욱 뒷받침합니다. 모든 클라이언트가 모든 메시지를 수신하되, 자신에게 의도되지 않은 메시지 복호화에 실패하면 아무런 동작도 하지 않기 때문에, 공격자의 명령 발신 능력에 병목이 생깁니다."라고 말했습니다.

또한 "이는 정보 누출이나 방해 위험을 최소화하면서 양방향 통신을 통합한 블록체인 데드 드롭의 주목할 만큼 정교한 구현입니다."라고 덧붙였습니다.

Socket의 보안 연구원 Karlo Zanki는 The Hacker News에 Graphalgo가 동일한 작전 플레이북을 계속 따르고 있으며, 가짜 채용 면접을 주요 초기 침투 벡터로 사용하고 있을 가능성이 높다고 밝혔습니다.

Zanki는 "실행은 프런트엔드 컴포넌트가 제공하는 데이터에 대한 기본적인 검사로 제어됩니다. 이 동작은 좁은 범위의 표적화 활동을 시사할 수 있지만, 연구자들이 백엔드 페이로드를 대응하는 프런트엔드 없이 발견했을 때 분석을 방해하려는 의도일 가능성이 더 높습니다. 원래의 Graphalgo 작전도 동일한 특성을 보였습니다."라고 말했습니다.

Terraform 레지스트리, 새로운 공급망 공격 벡터인가?

Aikido는 Terraform 프로바이더의 등장이 새로운 전술이긴 하지만, 핵심 프로덕션 자격증명으로의 보다 직접적인 경로를 제공할 수 있다는 점에서 전혀 놀랍지 않을 수 있다고 덧붙였습니다. 이는 또한 위협 행위자가 npm과 PyPI를 넘어 캠페인의 범위를 확장하고 있음을 보여줍니다.

그러나 북한 공격자들이 Terraform 프로바이더를 악성코드 배포에 악용한 것이 이번이 처음은 아닙니다. 지난주 발표된 SentinelOne의 보고서는 TraderTraitor라는 코드명의 위협 활동 클러스터가 무기화된 Terraform 잠금 파일을 활용해 공격자가 제어하는 커스텀 Terraform 프로바이더 레지스트리에서 Rust 기반 백도어를 배포했다고 상세히 기술했습니다.

Zanki는 "DPRK 연계 위협 행위자들이 Terraform 레지스트리를 새로운 배포 전술로 사용하고 있다고 확신 있게 결론 내리기는 아직 이릅니다. 그럼에도 이 운영자들과 연관된 두 개의 별개 캠페인에서 최근 Terraform 레지스트리가 등장한 것은 우연의 일치일 가능성을 낮춥니다. 이 위협 행위자들은 새로운 감염 기법을 도입하고 성공적인 방법을 여러 캠페인에 적용해 온 전력이 있습니다."라고 밝혔습니다.

"DPRK 연계 위협 행위자들은 매우 적응력이 강하며, 광범위한 표적에 도달할 수 있는 기법으로 도구 세트를 지속적으로 확장하고 있습니다. Terraform 레지스트리는 이들이 대규모로 채택할 다음 배포 채널이 될 수 있습니다."

악성 npm 패키지, PolinRider와의 연관성

이번 사태는 CloudSEK가 합법적인 npm 패키지 "@dforge-core/dforge-mcp"의 침해 이후 배포된 GHAPPIER라는 이름의 기존에 보고되지 않은 JavaScript 로더를 공개한 것과 맞물려 있습니다. 공격자가 관리자 계정에 어떻게 접근했는지는 아직 밝혀지지 않았으나, 개발자 기기가 악성 확장 프로그램이나 패키지에 감염되었을 가능성이 있습니다.

이 로더의 주요 목적은 공격자가 제어하는 서버에서 코드를 가져와 실행하는 것으로, 위협 행위자가 런타임에 페이로드를 동적으로 변경할 수 있게 합니다.

악성 버전(0.2.21)은 2026년 9월 9일 npm에 35분 38초간 노출되었다가 원래 관리자가 변경 사항을 되돌리고 정상 버전(0.2.22)을 배포한 것으로 전해집니다. 동일한 로더는 22개의 서로 다른 계정에 속한 65개의 공개 저장소에서도 발견되었습니다.

CloudSEK 연구원 Vikas Kundu는 "모든 경우에서 동일한 방식으로 침투했습니다. 공격자가 개발자의 저장된 자격증명을 탈취한 뒤, 해당 자격증명을 이용해 그 개발자가 푸시할 수 있는 모든 저장소에 악성 코드를 주입했습니다."라고 밝혔습니다.

npm 패키지에서 가져온 로더 사본과 두 번째 피해자의 저장소에서 확보한 사본을 비교한 결과, 공격 체인이 동일한 스테이징 호스트와 Vercel 도메인 요청을 사용하지만 캠페인 태그("ghappier" 대 "g0115")가 다른 것으로 나타났습니다.

흥미롭게도, 두 번째 페이로드는 NullReceiver 기법을 사용해 공격자 지갑에서 C2 주소("193.247.144[.]38")를 획득하고, "68656c6c6f6970626f742121"로 인코딩된 동일한 후행 바이트 시퀀스를 포함하고 있는데, 이는 "helloipbot!!" 문자열로 디코딩됩니다. 이 활동은 PolinRider라고 알려진 북한 연계 장기 캠페인과 겹칩니다.

Rust, 악성 페이로드를 동반한 채용 면접 경고

이 발견들은 Rust 프로젝트가 rust-lang 멤버 및 인기 있는 크레이트(crate) 소유자들을 표적으로 삼아 악성코드 배포를 위해 기기와 계정을 침해하려는 지속적인 캠페인에 대해 경고를 발표한 것과도 맞닿아 있습니다.

Rust Foundation의 소프트웨어 개발자 Adam Harvey는 다음과 같이 말했습니다. "일자리, 프로젝트, 계약 기회 등 긍정적인 명목으로 화상 통화가 설정되고, 이를 이용해 표적이 자신의 컴퓨터에 무언가를 설치하도록 유도하거나(예: 오디오 코덱이 없다는 명목) 또 다른 명령을 실행하도록 합니다(예: 클립보드에 명령어를 넣어두는 방식)."

"이 공격자들은 표면적인 검색을 통과할 수 있도록, 그럴듯한 LinkedIn 프로필을 포함한 새롭지만 합법적으로 보이는 기업 프로필을 만들고 있습니다."

Rust 프로젝트는 이 수법이 북한과 연계된 Contagious Interview 캠페인과 겹친다고 밝히며, 기여자 및 크레이트 소유자들에게 주의를 기울이고, 다단계 인증(MFA)을 활성화하며, 계정의 예상치 못한 로그인을 확인하도록 촉구했습니다.

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

분야별 뉴스

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

TORUN SECURITY

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

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