AI 코딩 어시스턴트는 단순한 자동 완성 위젯의 단계를 훨씬 전에 넘어섰습니다. 이들은 저장소를 인덱싱하고, 환경 변수를 읽으며, 셸 명령어를 제안하고, 터미널에 수정 사항을 속삭이듯 알려줍니다. 이들은 소스 코드, 로컬 토큰, 클라우드 CLI 설정, SSH 키와 동일한 메모리 공간에 존재합니다. 이러한 근접성 때문에 이들은 이론적인 위협이 아니라 매우 직접적인 방식으로 공격 표면(attack surface)의 일부가 됩니다.

대부분의 팀은 이러한 도구들을 급하게 도입했습니다. 개발자가 확장을 설치하고, 개인 액세스 토큰(PAT)으로 인증한 뒤, AI가 생성한 제안을 수락하기 시작합니다. 보안 검토는 좀처럼 그 속도를 따라가지 못합니다. 최근 발생한 두 가지 위협인 Djinn Stealer와 ChocoPoC는 왜 이러한 격차가 위험한지를 정확히 보여줍니다.

검증하는 것을 잊어버린 이웃

어시스턴트가 실제로 어디에 위치하는지 생각해 보십시오. GitHub Copilot, Cursor, Continue 또는 이와 유사한 도구를 사용한다면, 해당 도구는 열려 있는 파일, 프로젝트 구조, 때로는 로컬 파일 시스템 전체에 대한 읽기 권한을 가질 가능성이 높습니다. 또한 디스크의 예측 가능한 위치에 인증 토큰을 저장합니다. 이들은 사용자의 권한으로 실행되는 IDE 내부에서 작동합니다. 이는 워크스테이션을 침해한 악성코드가 자격 증명을 찾기 위해 무작정 헤맬 필요가 없음을 의미합니다. AI 어시스턴트가 이미 흥미로운 키들을 한곳에 편리하게 모아두었기 때문입니다.

이것은 가설적인 아키텍처 결함이 아닙니다. Djinn Stealer는 바로 이러한 구조를 악용하도록 설계되었습니다. 이 도구는 개발자 자격 증명과 AI 도구 세션을 구체적으로 겨냥합니다. 파일 시스템의 모든 구석을 긁어모으는 대신, 코딩 워크플로우를 구동하는 토큰을 노립니다. 만약 어시스턴트가 GitHub, GitLab 또는 클라우드 제공업체에 인증되어 있다면, 해당 세션을 탈취하는 것은 공격자에게 코드 그 이상의 것을 제공합니다. 바로 사용자의 신원을 넘겨주는 것입니다. 공격자는 사용자의 이름으로 커밋을 푸시하고, 비공개 저장소를 읽으며, 사용자가 매일 사용하는 것과 동일한 API를 탐색할 수 있습니다.

Djinn Stealer: 당신의 왕국을 여는 열쇠를 사냥하다

Djinn Stealer가 머신에 침투하면, 어떤 서랍에 여분의 열쇠가 들어 있는지 알고 있는 영리한 도둑처럼 행동합니다. 이들은 AI 도구 설정 디렉토리, 브라우저 세션 저장소, 그리고 개발자가 수개월간 작업하며 쌓아온 자격 증명 파일들을 찾아냅니다. 이 스틸러는 현대의 개발 환경이 액세스 권한을 중앙 집중화한다는 점을 알고 있습니다. AI 어시스턴트를 위한 하나의 OAuth 토큰이 패키지 레지스트리, 컨테이너 저장소 및 인프라 API에 대한 액세스 권한과 중복될 수 있기 때문입니다.

개발자가 로컬에서 PoC 코드를 테스트할 때 위험은 배가됩니다. 보안 연구원의 흥미로운 저장소를 클론하고, 어떻게 작동하는지 확인하기 위해 스크립트를 실행하면, 그 스크립트는 백그라운드에서 조용히 자격 증명 탈취기를 실행합니다. AI 어시스턴트의 토큰은 홈 디렉토리 아래의 표준 경로에 존재하기 때문에, 스틸러는 사용자가 README를 다 읽기도 전에 토큰을 유출할 수 있습니다. 가장 심각한 점은 이러한 토큰들이 운영 시스템이 아닌 생산성 도구를 위해 생성되었기 때문에, 종종 기업의 SSO를 우회한다는 것입니다.

ChocoPoC: 의존성이 거짓말을 할 때

Djinn Stealer가 집을 습격한다면, ChocoPoC는 우편함 사이로 몰래 들어옵니다. 이 위협은 Python 의존성, 특히 frint 및 skytext라는 이름의 패키지 내부에 악성 경로를 숨깁니다. 페이로드는 일반적인 검토로 잡아낼 수 있는 눈에 보이는 스크립트에 있지 않습니다. 대신, 더 깊숙한 곳에 자신을 숨깁니다,