AXIOS 공급망 해킹. 새벽에 무슨 일이 있었던 걸까
🚨 사건 개요: 새벽 사이 공급망이 뚫린 이유
이번 사건의 핵심은 전 세계적으로 널리 쓰이는 자바스크립트 패키지 ‘엑시오스(axios)’가 공급망 공격의 통로가 되었다는 점입니다. 엑시오스는 웹 애플리케이션이 서버와 데이터를 주고받을 때 자주 사용하는 대표적 오픈소스 패키지로, 주간 다운로드가 1억 건을 넘을 정도로 광범위하게 사용되고 있습니다. 문제는 오픈소스 자체의 구조보다도, 관리자의 계정이 탈취되면서 정상적인 배포처럼 위장된 악성 버전이 배포되었다는 점입니다. 이 사건은 단일 프로그램 해킹이 아니라, 개발 생태계 전반에 연쇄 감염을 일으킬 수 있는 공급망 해킹의 전형적인 사례로 받아들여집니다.
📦 엑시오스와 NPM의 의미: 왜 작은 코드 조각 하나가 큰 위협이 되었는가
엑시오스는 개발자가 웹서버와 통신할 때 반복적으로 필요한 기능을 미리 만들어 둔 ‘코드 조각’, 즉 패키지로 이해할 수 있습니다. 이런 패키지는 개발 편의성을 높이기 위해 수많은 프로젝트에서 재사용되며, NPM은 이런 패키지들이 모여 있는 대표적인 유통 플랫폼입니다. 문제는 현대 소프트웨어가 수십 개, 많게는 수백 개의 외부 패키지에 의존하는 구조라는 점입니다. 따라서 하위 의존성 하나만 오염돼도 그 패키지를 사용하는 상위 프로젝트 전체가 영향을 받을 수 있으며, 실제로 이번 사례는 많은 개발자와 도구들이 일상적으로 사용하는 패키지가 공격의 발판이 될 수 있음을 보여줍니다.
🧪 공격 준비 단계: 해커는 어떻게 ‘독 없는 버전’부터 올렸는가
공격자는 본격적인 악성 코드 유포에 앞서 사전 정찰과 위장 작업부터 진행했습니다. 2026년 3월 20일 오전 5시 57분, ‘플레인 크립토 JS(plain-crypto-js)’라는 이름의 패키지를 먼저 등록했는데, 이는 유명 패키지 ‘크립토JS(crypto-js)’와 혼동을 유도하려는 전략으로 해석됩니다. 특히 첫 등록 버전을 1.0.0이 아니라 원본 크립토JS와 같은 4.2.0으로 맞춰 놓았고, 이 버전에는 악성 코드 없이 정상 코드를 넣어 탐지 여부를 살폈습니다. 이후 같은 날 밤 11시 59분 4.2.1 버전으로 업데이트하면서 비로소 악성 기능을 삽입했는데, 이는 처음부터 악성 패키지를 올리면 곧바로 차단될 수 있다는 점을 감안한 치밀한 우회 방식으로 보입니다.
☠️ 독이 섞인 방식: 악성 패키지가 엑시오스 안으로 들어간 경로
공격자는 엑시오스 관리자의 권한을 이용해 정상 배포처럼 보이도록 악성 버전을 발행했습니다. 문제의 엑시오스 버전은 1.14.1과 0.30.4로, 이들 버전에 악성 의존성인 ‘플레인 크립토 JS 4.2.1’이 포함됐습니다. 겉으로는 정상적인 업데이트처럼 보였고, 실제 발행 계정도 공식 관리자 계정인 제이슨 세이먼(Jason Seimann) 명의로 표시돼 신뢰를 더했습니다. 결과적으로 개발자들은 자신이 평소 쓰던 패키지를 정상적으로 설치하거나 업데이트했다고 생각했지만, 실제로는 악성 코드 유포 통로를 받아들이는 상황이 된 것입니다.
🖥️ 악성 코드의 작동 방식: 설치 순간 운영체제별 백도어가 투하된 구조
악성 패키지는 설치 직후 ‘setup.js’를 실행해 외부 주소에서 실제 악성 페이로드를 내려받는 드로퍼(dropper) 방식으로 작동합니다. 이 코드는 먼저 사용자의 시스템이 윈도우인지, 리눅스인지, 맥인지 확인한 뒤, 각 운영체제에 맞는 전용 악성 코드를 내려보내도록 설계됐습니다. 이는 단순 장난 수준이 아니라 대규모 감염을 염두에 둔 정교한 공격임을 보여주는 대목입니다. 내려받은 악성 코드는 원격 접근형 트로이목마, 즉 RAT 성격의 백도어였으며, 설치 이후에는 자기 자신을 삭제하고 정상적인 미끼 파일로 바꿔치기해 감염 흔적을 숨기도록 구성됐습니다. 이 때문에 사용자는 설치 기록을 살펴보더라도 이상 징후를 발견하기 어렵게 됩니다.
⏱️ 피해 확산 속도: 악성 버전 배포 후 89초 만에 첫 감염이 포착된 이유
악성 버전이 배포된 뒤 첫 감염 사례는 불과 89초 만에 확인됐습니다. 이는 보안업체가 감시하던 환경에서 포착한 기준일 뿐이며, 실제로는 그보다 더 빠른 시점에 누군가 감염됐을 가능성도 제기됩니다. 보안업체들은 고객 시스템에서 정체불명의 프로세스가 갑자기 등장하고 실시간으로 감염 징후가 발생하는 장면을 목격했다고 전해집니다. 배포된 악성 버전이 약 3시간 동안 유통된 것으로 알려졌고, 보안업체 기준으로만 최소 135건의 감염이 추정되면서, 짧은 노출 시간에도 공급망 공격이 얼마나 빠르게 확산될 수 있는지가 드러났습니다.
🧵 커뮤니티의 이상 징후와 초기 혼란: 왜 경고 글이 사라졌는가
엑시오스 커뮤니티에서는 누군가 변조된 버전을 의심하며 확인을 요청하는 글을 올렸지만, 그 글이 몇 분 뒤 삭제되는 일이 발생했습니다. 이 때문에 단순 버그가 아니라 관리자 권한이 이미 공격자에게 넘어간 것 아니냐는 의심이 빠르게 퍼졌습니다. 보안업체들도 분석 결과를 공개하며 관리자 계정 탈취 가능성을 제기했고, 커뮤니티 이용자들은 문제를 지적하는 게시물이 사라지는 현상 자체를 비정상적 징후로 받아들였습니다. 공격자가 단순히 패키지만 올린 것이 아니라, 저장소와 관련 권한까지 장악한 상태였기 때문에 공개적인 경고와 복구 시도도 즉시 통제하거나 되돌릴 수 있었던 것으로 해석됩니다.
🛡️ 디지털브레인JS의 대응: 권한이 낮은 관리자는 왜 즉시 막지 못했는가
초기 대응의 중심에는 ‘디지털브레인JS’라는 또 다른 관리자 계정이 있었습니다. 그는 상황을 해킹 사건으로 인식하고 문제 해결을 시도했지만, 자신은 협업자(collaborator) 권한만 갖고 있었고, 해커가 장악한 제이슨 세이먼 계정보다 권한이 낮았기 때문에 직접 권한을 박탈할 수 없었습니다. 다시 말해 문제를 인지하고도 구조적으로 즉시 차단하지 못한 것입니다. 그는 NPM 관리팀에 조치를 요청하고, 가능한 범위에서 악성 버전 삭제와 정리를 진행했으며, 실제로 그의 노력으로 문제 버전과 악성 코드가 내려가게 됩니다. 초기 몇 시간 동안 사실상 현장을 지킨 인물로 묘사되며, 정식 관리자 본인이 잠든 시간대에 비상 대응을 떠맡았다는 점이 강조됩니다.
🌙 늦게 등장한 관리자와 사고 경위: 2차 인증이 있었는데도 왜 뚫렸는가
뒤늦게 등장한 제이슨 세이먼은 당시 지역 시간으로 새벽 5시 무렵 잠들어 있었고, 연락을 받은 뒤에야 상황을 파악했습니다. 그의 가장 큰 의문은 자신이 NPM과 GitHub 계정 모두에 2차 인증을 적용해 둔 상태였는데도 공격이 성공했다는 점이었습니다. 조사 결과, 문제는 컴퓨터 안에 남아 있던 ‘구형 토큰’에 있었습니다. 토큰은 로그인 이후 시스템이 사용자를 신뢰하기 위해 발급하는 일종의 입장권인데, 오래된 토큰이 여전히 유효했고, 이 토큰은 새 인증 절차 없이도 권한을 행사할 수 있었습니다. 결국 공격자는 최신 2차 인증 체계를 우회한 것이 아니라, 과거에 발급돼 남아 있던 예외적 권한을 악용해 관리자 계정을 탈취한 것입니다.
🎭 사회공학 공격의 핵심: 가짜 회사와 화상회의 설치 유도가 왜 통했는가
공격의 출발점은 기술적 취약점만이 아니라 정교한 사회공학 기법이었습니다. 해커들은 실제 기업처럼 보이는 가짜 회사와 인물 프로필을 꾸며 접근했고, 제이슨 세이먼과 접촉한 뒤 MS 팀즈를 이용한 화상회의를 제안했습니다. 회의 중 ‘오디오가 제대로 들리지 않는다’는 상황을 연출한 뒤, 최신 버전을 설치해야 한다며 링크를 전달했고, 이를 신뢰한 피해자가 설치를 진행하면서 악성 코드가 실행됐습니다. 즉 공격은 ‘계정을 해킹했다’는 단순한 표현보다, 피해자가 신뢰할 만한 비즈니스 상황으로 위장된 환경 속에서 스스로 악성 프로그램을 실행하도록 유도한 사례에 가깝습니다. 이는 기술 방어만으로는 막기 어려운 인간 심리 기반 공격의 전형적 특성을 보여줍니다.
🇰🇵 배후 지목: 왜 북한 해커 조직으로 연결되었는가
이 사건의 배후로는 북한 연계 해킹 그룹 UNC1069가 지목됐습니다. 구글은 이미 올해 초부터 이 그룹이 암호화폐 업계를 상대로 활발히 활동하고 있다고 경고한 바 있으며, 다른 분류 체계에서는 라자루스 계열 또는 ‘천리마’ 계열 명칭으로도 연결됩니다. 배후 판단의 근거는 두 가지로 요약됩니다. 첫째, 이번에 사용된 악성 코드가 해당 그룹이 이전에 사용했던 악성 코드와 매우 유사하거나 동일한 특성을 보였다는 점입니다. 둘째, 악성 페이로드 유포에 사용된 IP 주소가 북한 해커들이 자주 악용하는 아스트릴 VPN 노드와 연결돼 있었다는 점입니다. 여기에 가짜 회사 접근, 화상회의 초대, 오디오 문제를 빌미로 악성 링크 설치를 유도하는 전술 또한 기존 북한 해커들의 수법과 일치하는 것으로 해석됩니다.
👨💻 누구에게 위험한가: 개발자만의 문제가 아니라는 점
직접적인 1차 표적은 NPM을 사용하는 개발자와 개발 환경이었습니다. 특히 엑시오스를 설치하거나 업데이트하는 과정에서 악성 버전을 받아들인 시스템이 위험에 노출됐고, 영상에서는 2026년 3월 31일 새벽 12시 21분부터 3시 29분 사이 NPM을 통해 특정 개발 도구를 설치하거나 업데이트한 경우 감염 가능성을 언급합니다. 다만 개발자가 아니라고 해서 이 사건이 완전히 무관한 것은 아닙니다. 어떤 기업의 개발자가 감염되면 그 컴퓨터에 저장된 내부 시스템 정보, 인증 정보, 고객 데이터 접근 경로 등이 추가 공격의 발판이 될 수 있기 때문입니다. 결국 공급망 공격은 개발자를 시작점으로 삼지만, 그 개발자가 속한 회사와 그 회사의 서비스 이용자, 더 넓게는 일반 사용자까지 간접적으로 위험에 노출시킬 수 있습니다.
🧱 반복되는 NPM 공급망 사고: 구조적 위험이 드러난 이유
이 사건은 단발성 해프닝이 아니라, 최근 수개월 사이 NPM 생태계에서 유사한 공급망 사고가 반복되고 있다는 흐름 속에서 이해됩니다. 영상에서는 7개월 동안 세 차례의 공급망 침해 사고가 있었다는 점을 지적하며, 개발자 계정이 해킹당하면 패키지에 독을 탈 수 있고, 그 패키지를 상위 프로젝트들이 재사용하는 순간 연쇄 오염이 발생한다고 설명합니다. 오늘날 하나의 애플리케이션이 수백 개의 패키지에 의존하는 구조에서, 가장 아래쪽 작은 조각 하나가 무너지면 전체 시스템이 흔들릴 수 있다는 것입니다. 이는 젠가 블록처럼, 하단 구성 요소 하나만 빼도 전체가 붕괴하는 현대 소프트웨어 공급망의 취약성을 보여주는 비유로 정리됩니다.
🤖 AI 코딩 시대의 새로운 우려: 자동화가 검증 책임을 없애주지는 않는 이유
영상은 AI 코딩과 바이브 코딩의 확산이 이런 문제를 더 키울 수 있다고 우려합니다. 일반 사용자나 비전문 개발자도 AI가 추천한 패키지를 별다른 검증 없이 가져다 쓰는 환경이 늘어나고 있는데, 해커는 바로 그 점을 노려 AI가 악성 또는 위장 패키지를 선택하도록 유도할 수 있습니다. 실제로 사용자가 잘 알지 못하는 패키지를 AI가 자동으로 프로젝트에 포함시키게 만들려는 시도들이 이미 존재하며, 이런 흐름이 커질수록 공급망 검증 부담은 오히려 더 커질 수 있습니다. 즉 AI가 개발 생산성을 높여줄 수는 있지만, 외부 코드의 안전성 검토까지 완전히 대신해 줄 것이라고 기대하는 것은 지나치게 낙관적이라는 메시지입니다.
⚖️ 남는 질문: 공급망 해킹의 책임은 어디까지 물을 수 있는가
마지막 쟁점은 책임의 문제입니다. 어떤 기업이 해킹을 당했는데, 그 원인이 자사가 직접 만든 코드가 아니라 외부 오픈소스 관리자 계정이 탈취되어 오염된 패키지를 받아들인 데 있었다면, 과연 책임을 누구에게 어떻게 물어야 하는지가 복잡해집니다. 이 사건은 단순히 특정 개발자나 특정 오픈소스 관리자의 실수로만 볼 수 없는 구조적 문제를 드러냅니다. 현대 소프트웨어는 수많은 외부 의존성을 기반으로 구축되고 있기 때문에, 보안을 어디까지 점검하고 어떤 수준까지 검증 책임을 요구할 것인지에 대한 기준 자체를 다시 논의해야 하는 시대가 되었음을 보여줍니다.
🔎 결론: 이번 사건이 남긴 가장 중요한 경고
이번 공급망 해킹 사건은 널리 쓰이는 오픈소스 패키지 하나가 무너지면, 짧은 시간 안에도 광범위한 피해가 발생할 수 있음을 선명하게 보여줬습니다. 공격자는 기술적 침투와 사회공학 기법을 결합해 관리자 계정을 장악했고, 운영체제별 백도어를 심는 방식으로 대규모 감염을 노렸습니다. 동시에 이 사건은 개발자 개인의 보안 습관, 패키지 관리자 권한 구조, 구형 인증 토큰 관리, 오픈소스 의존성 검토, AI 기반 개발 환경의 검증 체계까지 모두 다시 점검해야 한다는 경고로 읽힙니다. 핵심은 단순한 ‘엑시오스 해킹’이 아니라, 현대 소프트웨어 생태계 전체가 연결된 공급망이라는 사실 자체가 가장 큰 공격 표면이 되고 있다는 점입니다.