Contagious Interview IDE 공격을 탐지하고 방지하는 방법 (새 탭에서 열림)
Contagious Interview 캠페인은 가짜 채용 과제로 피해자가 악성 저장소를 VS Code에서 열고, tasks.json을 통해 악성 명령을 실행하도록 유도한다. 글은 VS Code 자체보다 운영체제에 가까운 node-pty의 spawn-helper 실행을 탐지하는 EDR 규칙과, IDE 작업 자동 실행을 비활성화하는 하드닝을 함께 적용해야 한다고 주장한다. 이를 통해 인포스틸러 설치와 기업 네트워크 접근 권한 탈취를 실행 전에 차단할 수 있다.
Contagious Interview 공격의 진입 방식
- 공격자는 가짜 면접·코드 리뷰를 미끼로 피해자에게 악성 코드 저장소를 다운로드하고 VS Code에서 열도록 유도한다.
- 저장소의
.vscode/tasks.json에는 프로젝트를 열 때 자동 실행되는 작업이 정의될 수 있다. - VS Code는 해당 저장소를 신뢰하도록 승인해야 작업을 실행하지만, 피해자는 면접 과정이라고 믿어 무심코 신뢰를 부여할 가능성이 높다.
- 악성 작업은
runOn: "folderOpen"을 사용해 폴더를 열 때 자동 실행되며, 화면에 거의 표시되지 않도록 설정할 수 있다. - 예시 명령은 운영체제별로 다음 단계 악성코드를 내려받아 실행한다.
- macOS:
curl ... | bash - Linux:
wget ... | sh - Windows:
curl ... | cmd
- macOS:
- 이후 인포스틸러가 비밀번호와 암호화폐 정보를 탈취하고, 지속성을 확보해 피해자의 기업 네트워크 접근 권한을 악용할 수 있다.
IDE보다 낮은 계층을 겨냥한 탐지
- 특정 VS Code 기능만 탐지하면 VS Code 포크나 유사한 Node/Electron 기반 IDE를 우회 경로로 사용할 수 있다.
- GitLab은 운영체제에 더 가까운 프로세스 생성 계층을 조사했다.
- VS Code는 하위 프로세스를 실행할 때 널리 사용되는
node-pty라이브러리를 활용한다. node-pty.spawn()호출은 자체 바이너리인spawn-helper를 실행하며, 이 프로세스는 Node 애플리케이션의 자식 프로세스로 생성된다.node-pty는 주당 다운로드 수가 100만 회 이상인 널리 사용되는 라이브러리이므로, 이 계층을 이용하면 특정 IDE에 종속되지 않는 탐지가 가능하다.
백그라운드 실행과 사용자 실행의 구분
- GitLab은 Purple Team 훈련으로 공격 경로를 재현한 뒤 EDR 텔레메트리를 분석했다.
- VS Code에서 백그라운드 작업을 실행할 때는 주로
spawn-helper가 호출된다. - 사용자가 통합 터미널을 열거나 직접 프로세스를 실행하는 등 전면적인 상호작용이 있을 때는
Code Helper바이너리가 사용된다. - 따라서
spawn-helper를 기반으로 탐지하면 사용자가 인지하지 못한 상태에서 실행되는 IDE 작업에 집중할 수 있다. - 일반적인 개발 활동에서 발생하는 의도적 프로세스 실행을 제외해 오탐을 줄일 수 있다.
curl | shell 패턴과 행위 기반 튜닝
curl | bash는 Homebrew 설치처럼 정상적인 용도로도 사용될 수 있으므로 단순 문자열 탐지는 오탐 가능성이 있다.- 하지만 사용자가 인지하지 못하는 백그라운드 작업에서 해당 명령이 실행되는 것은 조직 환경에서 비정상적일 수 있다.
- GitLab은 다음과 같은 조건을 결합해 탐지 규칙을 조정했다.
- 부모 프로세스가 IDE의
spawn-helper인지 - 작업이 백그라운드에서 실행됐는지
- 외부 URL에서 데이터를 내려받는지
- 다운로드한 내용을 셸로 직접 파이프하는지
- 부모 프로세스가 IDE의
- 이 방식은 모든 백그라운드 작업을 차단하지 않고, 드물고 위험한 실행 조합만 경고하도록 설계됐다.
- 조직 내 많은 개발자가 매일 VS Code를 사용했음에도 구현 후 오탐이 발생하지 않았다고 설명한다.
다층 방어와 IDE 설정 강화
- EDR을 이용한 런타임 탐지는 악성 작업이 실제로 실행되는 순간을 포착하는 방어선이다.
- 동시에 조직 전체 설정을 배포해 VS Code의 작업 자동 실행 자체를 비활성화하면 공격 표면을 줄일 수 있다.
- 특히 저장소를 열 때 자동으로 실행되는 작업을 제한하면
runOn: "folderOpen"기반 공격을 예방하는 데 효과적이다. - VS Code뿐 아니라 동일한 Node 기반 구조와 백그라운드 작업 기능을 가진 IDE 포크에도 같은 원칙을 적용해야 한다.
실무적으로는 IDE 작업 자동 실행을 기본 비활성화하고, EDR에서 spawn-helper의 백그라운드 프로세스 생성과 curl/wget | shell 패턴을 함께 모니터링하는 방식을 권장한다. Gmail·채용 플랫폼 등 초기 유입 경로에 대한 보안 교육과 저장소 신뢰 승인 절차도 병행해야 한다.