VS코드 개발자 노린 악성 캠페인, 의존성 교묘히 조작
- 플러그인으로 풍부해진 시장, 플러그인으로 흔들려
- 이번 캠페인, 최소 10개월 동안 무탈하게 진행
- 개발자들도 주의해야 하지만 MS 측에서 보안 강화해야
개발자들을 노린 악성 캠페인이 발견됐다. 이미 적잖은 시간 진행된 후에 발견된 것이라, 피해자 역시 상당할 수 있다는 예측도 나오고 있다. 이 캠페인에 노출되어 있던 건 비주얼 스튜디오 코드(VS Code)를 사용하는 개발자들로, 공격자들은 마켓플레이스(Marketplace)를 통해 19개의 악성 플러그인을 최소 10개월 동안 유포했다고 한다. 보안 기업 리버싱랩스(ReversingLabs)가 이러한 사실을 알렸다.
VS코드? 마켓플레이스?
비주얼 스튜디오 코드, 줄여서 VS코드는 MS에서 제공하는 무료 코딩 편집기다. 수많은 개발자들이 VS코드를 사용해 코드를 작성하고 디버깅을 한다. 마켓플레이스는 기본 VS코드의 기능을 확장시켜주는 플러그인이 유통되는 곳이다. 이 마켓플레이스 때문에 VS코드가 하나의 편집 프로그램에서 거대한 생태계 수준으로 진화하고 있기도 하다.
그런데 ‘플러그인이 거래되면서 기본 플랫폼이 진화하고 있다’는 현상은, 어디선가 많이 들어본 이야기이기도 하다. 워드프레스가 바로 그것이다. 워드프레스도 기본적으로는 웹사이트를 쉽게 개발하게 해 주는 플랫폼인데, 사용자가 늘어나면서 온갖 종류의 플러그인들이 개발돼 유통되었고, 이를 통해 점점 더 덩치를 불려갔다. 워드프레스는 플러그인 때문에 더 풍성해지고 인기도 높아졌지만, 반대로 그 플러그인들 때문에 워드프레스 생태계가 취약해지기도 한다.
VS코드와 마켓플레이스도 마찬가지다. 이곳의 수많은 플러그인들 덕분에 VS코드를 이용하는 개발자들이 좀 더 많은 기능을 구현할 수도 있지만, 반대로 공격자들의 공격 통로가 확장되기도 한다. “공격자들은 오랜 시간 마켓플레이스를 통해 악성 코드를 플러그인으로 포장해 배포해 왔습니다. 제일 먼저 발견된 건 프리티어(Prettier)라는 플러그인이었습니다. 그 안에는 애니비아스틸러(Anivia Stealer)라는 정보 탈취형 프로그램이 숨겨져 있었습니다.”
악성 코드, 어떻게 숨겼나?
공격자들은 마켓플레이스에서 유통되는 플러그인들 속에 악성 코드를 어떻게 숨겼을까? 핵심은 ‘의존성을 변조하는 것’이었다고 리버싱랩스는 설명한다. 이를 이해하려면 VS코드 생태계 내 플러그인들의 특성을 하나 알아야 한다. 그것은 “하나의 플러그인이 여러 패키지와 의존하는 관계를 맺고 있다”는 것이다.
“VS코드 플러그인은 하나의 작은 프로그램입니다. 그래서 모든 기능을 독립적으로 100% 구현하는 건 아닙니다. 외부 패키지나 라이브러리에서 필요한 기능을 불러다 쓸 때가 많죠. 이렇게 프로그램들끼리 서로의 기능을 필요할 때만 빌려다 쓰는 것을 ‘의존한다’고 하고, 그런 관계를 ‘의존성’이라고 합니다. VS코드 플러그인들은 이런 식으로 저용량을 유지합니다.” 리버싱랩스의 설명이다.
의존성에 대해서는 플러그인을 사용하려는 개발자가 미리 확인할 수 있다. 자기가 다운로드 받는 플러그인이 생소할 경우 개발자들은 검사부터 하고 사용하는데, 이 때 유명 패키지나 라이브러리와 연결돼 있다면 자기도 모르게 신뢰하게 된다. “실제로 이번 캠페인에서 공격자들은 path-is-absolute라는 유명 패키지가 자신들의 플러그인과 연결된 것처럼 의존성을 조작했습니다. 하지만 실제 해당 플러그인과 연결된 건 비슷한 이름의 악성 패키지였죠.”
악성 플러그인, 어떤 기능 발휘했나?
속아버린 개발자가 자기가 다운로드한 플러그인을 실행시키는 동시에, 그 플러그인에 연결된 악성 패키지 및 라이브러리가 같이 실행된다. “그러면서 자바스크립트 기반 드로퍼가 디코딩 되면서 피해자 컴퓨터에 심깁니다. 또한 플러그인 내부에는 banner.png라는 이미지 파일이 있는데, 사실 이건 이미지가 아니라 악성 바이너리 2개가 압축된 아카이브 파일이었습니다. 여기에 실제 악성코드가 포함돼 있었고요.”
이제 피해자 컴퓨터 안에는 드로퍼 하나와 악성 바이너리 2개가 있게 된다. 드로퍼는 윈도의 기본 도구 중 하나인 cmstp.exe를 애용해 악성 바이너리 2개를 실행시킨다. “별다른 페이로드를 다운로드 하지 않고, 플러그인 자체 검사만으로는 잘 탐지되지 않을 방법을 통해 악성코드를 실행시키는 전략입니다. 악성코드는 트로이목마 계열이었습니다.”
문제의 악성코드는 러스트(Rust)로 작성된 것으로 분석됐다. 하지만 정확한 기능은 아직 분석 중에 있어 공개되지 않고 있다.
개발자들, 어떻게 피해야 하나?
이 캠페인은 개발자들이 플러그인을 외부에서 다운로드 받아 사용할 때 검사를 꼼꼼하게 하지 않는다는 점을 파고든 것이라고 할 수 있다. 과거에도 VS코드 생태계에서는 이러한 악성 플러그인 배포 시도가 몇 차례 있었다. “따라서 개발자들이 플러그인을 사용하기 전에 미리 검사부터 해보는 게 중요합니다. 유명 패키지에 연결돼 있다고 금방 신뢰해버려서는 안 됩니다.”
진짜 할 일은 MS에 있다고 리버싱랩스는 주장한다. “VS코드의 마켓플레이스에는 거의 아무나 플러그인을 업로드할 수 있습니다. 플랫폼 차원에서의 보안 수준이 그리 높지 않은 이유가 이 때문입니다. 패키지를 공식 서명한다든지, 플랫폼 자체에서 실행파일들을 검사한다든지, 의존성까지 엄격하게 확인하는 등의 절차를 도입해야 합니다. 그래야 개발자들이 더 안심하고 VS코드 생태계로 진입할 수 있을 겁니다.”🆃🆃🅔
by 문가용 기자(anotherphase@thetechedge.ai)
Related Materials
- [1] Malicious Campaigns Proliferate from VSCode to npm, ReversingLabs, 2024년
- [2] VSCode Extensions with Malicious Code Installed 229M Times, SC Media, 2024년
- [3] Ad Fraud on Large Online Platforms, CERT Polska, 2024년
- [4] A Comprehensive Analysis of the VS Code Extension Ecosystem, arXiv, 2023년
