node-pty

1 개의 포스트

gitlab

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` - 이후 인포스틸러가 비밀번호와 암호화폐 정보를 탈취하고, 지속성을 확보해 피해자의 기업 네트워크 접근 권한을 악용할 수 있다. ## 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에서 데이터를 내려받는지 - 다운로드한 내용을 셸로 직접 파이프하는지 - 이 방식은 모든 백그라운드 작업을 차단하지 않고, 드물고 위험한 실행 조합만 경고하도록 설계됐다. - 조직 내 많은 개발자가 매일 VS Code를 사용했음에도 구현 후 오탐이 발생하지 않았다고 설명한다. ## 다층 방어와 IDE 설정 강화 - EDR을 이용한 런타임 탐지는 악성 작업이 실제로 실행되는 순간을 포착하는 방어선이다. - 동시에 조직 전체 설정을 배포해 VS Code의 작업 자동 실행 자체를 비활성화하면 공격 표면을 줄일 수 있다. - 특히 저장소를 열 때 자동으로 실행되는 작업을 제한하면 `runOn: "folderOpen"` 기반 공격을 예방하는 데 효과적이다. - VS Code뿐 아니라 동일한 Node 기반 구조와 백그라운드 작업 기능을 가진 IDE 포크에도 같은 원칙을 적용해야 한다. 실무적으로는 IDE 작업 자동 실행을 기본 비활성화하고, EDR에서 `spawn-helper`의 백그라운드 프로세스 생성과 `curl/wget | shell` 패턴을 함께 모니터링하는 방식을 권장한다. Gmail·채용 플랫폼 등 초기 유입 경로에 대한 보안 교육과 저장소 신뢰 승인 절차도 병행해야 한다.