IronWorm 악성코드, 샤이‑훌루드와 유사한 특성으로 위협을 ‘다음 단계’로 끌어올려.
출처: DevOps.com
오픈소스 소프트웨어 개발자들은 계속해서 공격의 표적이 되고 있습니다. 최신 위협은 악명 높은 Shai‑Hulud 자체 전파 웜과 많은 속성을 공유하지만, 방어자가 탐지하고 역공학하기 더 어렵게 만드는 기능을 갖춘 맞춤형 악성코드입니다.
‘IronWorm’이라 명명된 이 정보 탈취형 악성코드는 Rust 프로그래밍 언어로 작성되었으며, JFrog Security 연구원에 따르면 악성 npm 패키지를 통해 개발자—소프트웨어 개발자뿐 아니라 암호화폐·Web3 개발자까지—를 표적으로 삼습니다. 이 악성코드는 자격 증명을 탈취하고 GitHub 커밋을 업로드함으로써 소프트웨어 공급망 전반에 스스로 복제하며, 이후 자동으로 새로운 패키지를 npm 레지스트리에 게시합니다.
“침해된 계정에 속한 모든 npm 패키지가 악성 버전으로 재게시된 점은, 악성코드가 피해자를 대신해 자동으로 패키지를 게시하는 방법을 가지고 있음을 강력히 시사합니다,” 라고 연구원들은 보고서에 적었습니다. “코드가 이를 확인했습니다.”
이 악성코드는 클라우드 자격 증명, npm 퍼블리싱 토큰, API·SSH 키 등 개발자 비밀을 광범위하게 탈취합니다. 클라우드 제공업체·오브젝트 스토리지부터 데이터베이스, CI/CD 시스템, Kubernetes, 메신저 플랫폼에 이르기까지 개발자가 사용하는 거의 모든 주요 플랫폼에서 이를 탐색합니다. 또한 OpenAI, Google Gemini, Anthropic, Mistral, Groq 등 AI·머신러닝 API 키도 표적에 포함됩니다.
두 가지 페이로드
IronWorm은 Tor 기반 명령·제어(C2) 구조를 사용하며, 저장소 구조에 따라 두 가지 페이로드를 제공합니다. 각 페이로드는 서로 다른 정체성을 사용해 섞여 들어갑니다.
“저장소가 npm, PyPI, Cargo, Conan, vcpkg(C++) 등 패키지를 배포한다면, 악성코드는 보다 직접적인 경로를 택합니다: 바이너리를 프로젝트에 삽입하고 빌드 시스템을 수정해 실행하도록 만든 것이죠,” 라고 연구원들은 야생에서 관찰한 사례를 언급하며 적었습니다. “반면 저장소에 이미 GitHub Actions 워크플로가 존재한다면, 악성코드는 두 번째, 더 악랄한 옵션을 사용합니다: 새 파일을 추가하는 대신 기존 파일을 교체해, 실제 워크플로를 비밀 탈취 작업으로 바꾸는 것입니다.”
그들은 또한 악성코드가 eBPF 커널 루트킷 뒤에 숨겨져 있다는 점을 ‘뛰어난 특징’이라고 강조했습니다.
eBPF, 선과 악을 가르다
“현대 Linux 시스템에서 eBPF는 시스템 활동에 대한 매우 깊은 가시성을 제공하며, 악용될 경우 은신처가 되기도 합니다,” 라고 연구원들은 적었습니다. “관측 및 보안 도구에 사용되는 동일한 기술이 이벤트를 가로채고, 모니터링 도구가 보는 것을 조작하며, 악성코드 자체의 동작을 방어자로부터 숨기는 데 악용될 수 있습니다.”
연구팀은 특정 GitHub 조직과 연결된 계정이 게시한 npm 패키지를 검토하던 중 IronWorm을 발견했습니다. 관심을 끈 점은 해당 계정의 모든 패키지가 좁은 시간 창 안에서 재게시되었고, 각 새 버전마다 설치 훅에서 실행되는 네이티브 바이너리를 포함하고 있었다는 점이었습니다.
“그것만으로도 우리는 더 자세히 살펴볼 수밖에 없었습니다,” 라고 그들은 적었으며, “패키지들은 거의 동일했습니다.” 라고 덧붙였습니다.
비슷하지만 다른 점
위협 그룹 TeamPCP는 몇 달 동안 Shai‑Hulud를 이용해 개발자와 소프트웨어 공급망을 겨냥한 캠페인을 진행해 왔습니다. 지난 달, 이들은 웜의 소스 코드를 GitHub 저장소에 공개해 악성 행위자들이 자체 변종을 만들 수 있게 했으며, Datadog 분석가에 따르면 Miasma 악성코드와 같은 여러 복제본이 야생에서 발견되었습니다.
JFrog 연구원들은 IronWorm이 그런 복제본이라고 명시하지는 않았지만, Shai‑Hulud와 몇 가지 유사점이 있다고 언급했습니다. 다만 그들은 “자체 인프라와 조용히 운영할 인내심을 가진, 맞춤형·정교하게 구축된 임플란트”라고 평가했습니다.
Shai‑Hulud와 마찬가지로 IronWorm도 개발자를 침해하고, 자격 증명을 탈취하며, 신뢰받는 공급망 워크플로를 이용해 확산합니다. 또한 Shai‑Hulud와 동일한 커밋 이름을 사용합니다.
“하지만 이 개념을 한 단계 끌어올렸습니다,” 라고 그들은 덧붙였습니다. “여러 면에서 방어자의 작업을 동시에 더 어렵게 만들죠: 역공학이 힘든 Rust 코드, 호출 지점마다 고유 키를 사용하는 문자열 암호화·난독화, 수정된 UPX 패커, Tor 기반 C2, eBPF 루트킷 등.”
진행 중인 작업
연구팀은 악성코드 컴파일러가 소스 코드를 남겨두었다는 점을 발견했으며, 9개 조직에 걸쳐 57개의 과거 시점 악성 커밋을 찾았고, 운영자가 자신의 암호화폐 지갑 복구 구문을 악성코드에 하드코딩해 자신에게서도 탈취하도록 만든 사실을 확인했습니다.
Ox Security 연구원들은 IronWorm이 36개의 고유 패키지를 감염시켰으며, 영향을 받은 패키지들의 월간 다운로드 합계는 32,177건에 달했지만, 감염이 널리 퍼지기 전에 차단되었다고 밝혔습니다.
JFrog 연구원들은 “IronWorm은 아직 진행 중인 작업처럼 보입니다. 일부는 정교하게 설계됐지만, 다른 부분은 놀라울 정도로 부주의합니다. BPF 객체에는 여전히 디버그 메타데이터와 복구 가능한 소스 라인이 포함돼 있으며, 운영자는 악성코드의 스킵 리스트에 지갑 복구 구문을 하드코딩했습니다. 이러한 실수 덕분에 우리는 임플란트가 어떻게 동작하는지 드물게 엿볼 수 있었습니다. 즉, 이것이 캠페인의 최종 형태가 아닐 수도 있고, 단지 리허설일 수도 있습니다.” 라고 결론지었습니다.