기술

VS Code 확장에 1년 숨어든 GlassWorm, 네 갈래 통제선이 끊겼다

Susan Hill

1년 넘게, 당신의 휴대폰 앱을 만드는 개발자 일부가 자기도 모르는 사이 다른 누군가를 위해 일하고 있었다. GlassWorm이라는 악성 프로그램이 세계에서 가장 많이 쓰이는 코드 편집기 Visual Studio Code의 확장 안에, 그리고 그 개발자들이 매일 프로젝트에 끌어오는 오픈소스 패키지 안에 들어앉아 있었다. 이 프로그램은 그들의 비밀번호를 긁어모으고 계정을 가로챈 뒤, 그것을 이용해 더 많은 소프트웨어에 스스로를 심었다. CrowdStrike와 Google, 그리고 Shadowserver Foundation이 이제 그 줄을 끊었다.

이것은 코드 편집기를 한 번도 열어본 적 없는 사람에게도 중요하다. 소프트웨어 공급망이란 말 그대로 사슬이기 때문이다. 휴대폰의 메신저 앱도, 은행 앱도, 콘솔의 게임도 모두 다른 사람들이 쓰고 관리하는 수천 개의 작은 오픈소스 조각 위에 얹혀 있다. 그 조각 하나에 독을 풀면, 독은 물길을 따라 아래로 흘러 수백만 명이 쓰는 완성품까지 닿을 수 있다. GlassWorm은 그 흐름을 들키지 않고 올라타도록 만들어졌다.

다른 것과 구별되는 점은 숨는 방식이었다. 운영자들은 악성 명령을 보이지 않는 유니코드 문자로 적었다. 편집기에서는 빈 공간처럼 보이는 코드라, 파일을 검토하는 개발자 눈에는 이상한 점이 보이지 않았다. 이 캠페인을 가장 먼저 짚어낸 Koi Security 연구진은 이를 코드 편집기 확장을 통해 스스로 번지는 최초의 웜이라고 불렀다. 감염된 기기 하나하나가 다음 기기로 가는 출발점이 되었다.

공급망 공격은 대개 치고 빠지기다. 독이 든 패키지가 발견되면 내려지고 며칠 안에 고쳐진다. GlassWorm은 오래 버티도록 설계됐다. 번지는 데 필요한 자격 증명을 스스로 훔쳤기에, 어떤 확장이 내려진 뒤에도 한참 동안 다시 자신을 심을 수 있었다. 그렇게 단 한 번의 작전이 1년 넘는 기간에 수백 개 프로젝트와 수만 건의 내려받기에 닿았다.

감염 경로는 현대 소프트웨어 작업의 평범한 배관이었다. 운영자들은 덫을 심은 확장을 Open VSX에 올렸다. VS Code와 그 사촌 격인 Cursor, Windsurf, Positron, VSCodium에 양분을 대는 장터다. 시간 기록기나 코드 정리 도구 같은 무해한 도구로 위장한 것이다. 그들은 npm과 Python 패키지 색인의 패키지에, 알아서 실행되는 설치 스크립트를 통해 손댄 코드를 끼워 넣었고, 앞선 피해자에게서 가져온 자격 증명으로 GitHub의 300개가 넘는 저장소의 주요 브랜치에 악성 변경을 강제로 밀어 넣었다. 기기에 들어간 GlassWorm은 열쇠를 찾았다. npm 토큰, GitHub 로그인, 개발자가 확장을 올릴 수 있게 해주는 게시 토큰, 그리고 암호화폐 지갑이다. 감염된 컴퓨터를 다른 범죄 트래픽의 중계 서버로 바꾸고, 어떤 경우에는 화면을 실시간으로 들여다볼 수 있는 숨은 원격 제어 프로그램을 깔았다.

이것을 무너뜨리려면 운영자들이 기기와 연락을 이어가던 방식을 쳐야 했고, 바로 그 지점에서 GlassWorm은 살아남도록 지어져 있었다. 전원을 뽑으면 끝나는 단일 명령 서버에 기대는 대신, 네 개의 통로를 동시에 썼다. 하나는 명령을 영구적이고 손댈 수 없도록 설계된 공개 장부인 Solana 블록체인의 거래 안에 부호화해 넣었다. 다른 하나는 설정을 파일 공유망 BitTorrent에 숨겼다. 세 번째는 부호화한 웹 주소를 Google Calendar 일정 제목에 끼워 넣었다. 네 번째는 흔한 임대 서버였다. CrowdStrike의 Counter Adversary Operations 팀은 Google, Shadowserver와 함께 이 한 묶음 전체를 단 한 번의 조율된 타격으로 끊었다.

줄을 끊는 것은 상처를 씻어내는 것과 다르다. 통로를 끊으면 운영자가 새 명령과 새 페이로드를 보내지는 못하지만, 이미 장악한 기기에서 GlassWorm을 걷어내지는 못하며, 이미 훔쳐간 비밀번호는 훔쳐간 채로 남는다. 이 캠페인이 끊긴 것도 처음이 아니다. Koi Security가 폭로한 뒤 GlassWorm은 돌아왔다. 한 번은 스물네 개의 새 악성 확장과 함께, 몇 달 뒤에는 수십 개를 더 데리고. 연구자들이 무너뜨리기 불가능하다고 했던 블록체인 통로는 이제 무너졌지만, 그 배후는 다시 세워 올린다는 것을 거듭 보여줬다.

수사관들은 운영자들이 러시아에 있을 가능성이 크다고 본다. 이 프로그램은 시작할 때 컴퓨터의 언어와 시간대 설정을 확인하고, 러시아나 옛 소련권 이웃 나라의 시스템에 떨어졌다 싶으면 조용히 종료한다. 그 지역에서 움직이며 자국 피해자를 피하는 범죄 조직의 익숙한 흔적이다. CrowdStrike는 이 변화를 건조하게 요약했다. 공격자는 더 이상 제품만 노리지 않는다, 그것을 만드는 개발자를 노린다는 것이다. Shadowserver Foundation은 피해 조직이 시스템을 소독하고 유출됐을 수 있는 모든 자격 증명을 교체하도록 통보를 시작했고, 사슬 더 아래에 있는 모두에게 진짜 작업은 이제 시작된다. 각 팀이 2025년 초부터 어떤 확장과 패키지를 설치했는지 점검하면서다. 기반 시설은 꺼졌다. 정리는 이제 겨우 시작됐다.

토론

댓글 0개가 있습니다.