볼 수 없었기에 승인해 버린 멜웨어
GlassWorm는 페이로드를 보이지 않는 유니코드에 숨겨서 사람의 코드 리뷰를 통과한 뒤, 작업 공간에 널려 있는 자격 증명을 읽어 갑니다. 보이지 않는 웜이 암호를 깨는 일은 없습니다. 필요한 건 파일 하나뿐이에요.
리뷰어는 풀 리퀘스트를 읽었습니다. 모든 줄이 깔끔하게 렌더링되었습니다. 버전 업데이트, 작은 리팩터링, 문서 수정. 아무것도 잘못돼 보이지 않았죠. 잘못된 부분은 화면에 그려지지 않았으니까요. 글리프가 없는 유니코드 문자로 작성되어 있었습니다. 눈에는 보이지 않고, diff 뷰에는 보이지 않고, 공급망 보안이 여전히 기대고 있는 사람의 승인에도 보이지 않았습니다.
그것이 GlassWorm입니다. 10월 이후 Koi Security의 연구원들은 VS Code 확장을 통해 퍼지는 최초의 자기 전파 웜을 추적해 왔고, 아직 멈추지 않았습니다[1]. Socket은 1월 말 이후 Open VSX 마켓플레이스에서 새로운 악성 확장 70개 이상을 적발했다고 밝혔습니다[2]. 로더가 보이지 않는 유니코드 안에 숨어 있기 때문에, 코드는 정리 작업처럼 보이며 리뷰를 그대로 통과합니다.
설치한 뒤에 하는 일은 평범한 부분이고, 바로 거기에 요점이 있습니다. 널려 있는 것을 읽어 갑니다. npm 토큰. GitHub 자격 증명. Git 설정. 환경 변수와 작업 공간에 열려 있는 CI 시크릿. 그런 다음 탈취한 자격 증명으로 여러분의 이름을 내걸고 더 많은 오염된 패키지를 발행합니다. 웜이 웜이 되는 방식이 바로 이겁니다. 명령 제어는 Solana 트랜잭션을 타고 오가기 때문에 압수할 서버가 없습니다[3].
시각을 바꿔 봅시다. 아무도 @code를 해킹하지 않았습니다. Open VSX가 전통적인 의미에서 뚫린 것도 아닙니다. 확장 모델은 설계된 대로 정확히 작동했습니다. 도우미 하나를 설치하면 여러분의 권한으로, 열려 있는 프로젝트 안에서, 시크릿 옆에서 실행됩니다. 이 모델은 확장 작성자만 신뢰하면 되는 세계를 전제로 만들어졌습니다. GlassWorm는 신뢰받는 작성자의 계정을 배송 트럭으로 바꾸고, 화물은 볼 수 없는 문자 속에 숨깁니다. 도구가 실패한 게 아닙니다. 위협 모델이 모든 사람의 밑에서 한꺼번에 움직인 겁니다.
그러면 여러분 자신의 머신에 대한 불편한 질문이 남습니다. 신뢰했던 확장이 프로젝트를 열었을 때, 거기서 가져갈 것이 무엇이 있나요?
대부분의 개발자에게 답은 이렇습니다. 전부입니다. dotfile 안에 들어 있는 오래 살아 있는 npm 토큰. 한 번 붙여 넣고 잊으라고 했던 유용한 설정 가이드가 알려 준 개인 액세스 토큰. 그 머신의 모든 프로세스가 읽을 수 있는 env 파일 속 시크릿. 이 자격 증명들은 정적 상태로, 코드가 실행되는 바로 그 자리에 놓여서 로컬 접근 권한이 있는 무엇이든 기다립니다. 편집기 안의 보이지 않는 웜이 암호를 깨야 할 필요는 없습니다. 파일 하나면 됩니다.
Clavitor는 반대의 가정에서 출발합니다. 자격 증명은 필요한 순간에 중개되고, 용도가 하나로 한정되며, 만료됩니다. 나중에 발견되도록 개발 환경에 기록되는 일은 없습니다. 그래서 적대적인 코드가 정적 키를 향해 작업 공간을 훑어도, 남아 있는 npm 토큰도, 영구적인 GitHub PAT도, 사용된 순간보다 오래 살아남는 것은 아무것도 없습니다. 웜이 서랍을 열면 서랍은 비어 있습니다.
솔직하게 말하자면, 사용 중인 자격 증명은 사용되는 동안에는 여전히 살아 있습니다. 세션이 실행 중이고 적대적인 코드가 그 세션을 공유한다면, 그 짧은 기간과 좁은 범위 안에서 지금 살아 있는 것을 그대로 탈 수 있습니다. 임시적이고 범위가 한정된 발급은 파괴 반경과 시간을 줄여 줍니다. 공격자에게 넘겨준 머신을 안전하게 만들지는 못합니다. 아무것도 그렇게 만들지 못합니다. 하지만 사용 중인 범위 제한 자격 증명 하나를 우연히 낚아챈 공격자와, 영구 키 파일을 복사해 1년 동안 여러분을 소유하는 공격자 사이에는 큰 격차가 있습니다.
자격 증명 시스템이 절대 하지 말아야 할 짧은 목록을 정리해 두었습니다. 맨 위 근처에 있는 항목은 이것입니다. 시크릿을 코드가 실행되는 자리에 두지 말 것. 여기에서 읽어 보세요
Clavitor(@clavitorai)는 AI 에이전트를 위해, 그리고 그들을 상대로 만들어진 자격 증명 금고입니다. clavitor.ai
출처
[1] Koi Security — "GlassWorm: The First Self-Propagating Worm Using Invisible Code Hits the Open VSX Marketplace" (연구 기업; 검증된 X 핸들 없음)
[2] Socket, @TheHackersNews 인용 — "GlassWorm Supply-Chain Attack Abuses 72 Open VSX Extensions to Target Developers" (@SocketSecurity)
[3] @SecurityWeek — "Supply Chain Attack Targets VS Code Extensions With 'GlassWorm' Malware"