슬롭스쿼팅: AI 코딩 어시스턴트가 당신을 위해 준비하고 있을 수 있는 공급망 공격
요약
AI 코딩 어시스턴트의 발전으로 인해 '슬롭스쿼팅'이라는 새로운 공급망 공격 위험이 증가하고 있습니다. 이는 LLM이 환각처럼 생성한 가짜 패키지 이름을 악용하여, 개발자가 이를 설치하는 과정에서 악성 코드가 실행되는 것을 의미합니다. 에이전트 워크플로우가 일반화되면서 이 보안 위협은 더욱 심각해지고 있어, 사용자는 종속성을 신중하게 검증하고 락파일을 사용하는 습관이 필요합니다.
핵심 포인트
- AI 모델의 환각 현상을 악용한 새로운 공급망 공격 방식입니다.
- 에이전트가 자동으로 코드를 실행하며 인간의 검토 지점이 줄어들어 위험도가 높아졌습니다.
- 낯선 종속성은 게시 시점, 다운로드 횟수 등을 반드시 확인해야 합니다.
- 락파일(lockfile)과 해시 고정(Hash-pinning)을 통해 보안 취약점을 방지해야 합니다.
AI 비서에게 간단한 스크립트를 요청합니다. 그것은 깨끗한 코드를 작성하고, 한 번도 들어본 적 없는 패키지를 가져오며, 당신은 pip install을 실행합니다. 오류 없이 설치됩니다.
하지만 만약 그 패키지가 지난주에야 존재했고, 그것을 만든 사람이 당신의 API 키를 원한다면 어떨까요?
이것이 바로 **슬롭스쿼팅(slopsquatting)**이며, AI 지원 코딩 시대의 가장 흥미로운 보안 문제 중 하나입니다.
슬롭스쿼팅이란 무엇인가요?
LLM은 때때로 패키지 이름을 '환각'처럼 만들어냅니다. 그것들은 완벽하게 그럴듯하게 들리지만 존재하지 않는 라이브러리를 추천합니다. 슬롭스쿼팅은 공격자가 이러한 반복되는 가짜 이름들을 감지하고 PyPI나 npm 같은 공개 레지스트리에 악성 코드를 담아 등록하는 행위입니다.
이것은 **오타 스쿼팅(typosquatting)**의 사촌 격입니다. 오타 스쿼팅에서는 공격자들이 당신이 requests를 잘못 입력할 것을 기대하며 reqeusts와 같은 이름을 등록합니다. 차이점은 여기서는 아무도 오타를 내지 않는다는 것입니다. 모델이 이름을 발명하고, 당신은 그것을 신뢰하기 때문입니다.
왜 이것이 단순한 이론이 아닌 실제 위험인가요?
코드 생성 모델의 패키지 환각에 대한 연구(수십만 개의 생성된 코드 샘플을 분석한 2025년 연구)는 세 가지 중요한 사실을 발견했습니다:
- 환각된 패키지는 흔합니다. 추천되는 패키지의 의미 있는 비율이 존재하지 않았으며, 오픈 소스 모델이 상용 모델보다 더 자주 환각 현상을 보였습니다.
- 반복적입니다. 많은 가짜 이름들이 실행을 거듭할 때마다 반복적으로 나타났습니다. 이것은 공격자가 추측할 필요가 없다는 것을 의미합니다. 그들은 단지 모델에 쿼리하여 인기 있는 가짜 이름들을 수집할 수 있습니다.
- 그럴듯해 보입니다. 이름들은 보통 실제 명명 규칙을 따르기 때문에, 당신의
- 공격자가 여러 모델에 일반적인 코딩 작업을 요청합니다.
- 그들은 레지스트리에 존재하지 않는 패키지 이름을 수집합니다.
- 그 이름들로 악성 패키지를 게시합니다.
- 개발자의 AI 어시스턴트가 이 중 하나를 제안하고, 개발자가 이를 설치합니다.
- 설치 스크립트나 가져온 코드가 개발자(또는 CI)의 권한으로 실행됩니다.
4단계와 5단계가 위험합니다. 설치 시 스크립트는 패키지의 한 줄을 읽기도 전에 임의의 코드를 실행할 수 있습니다.
2026년에 더 심각한 이유
에이전트 워크플로우(Agentic workflows)는 위험 프로필을 변화시켰습니다. 스니펫을 복사할 때, 인간은 적어도 임포트 구문(import)을 흘끗 확인합니다. 셸 명령을 실행할 수 있는 코딩 에이전트는 '테스트를 통과시키기 위해' 종속성을 자동으로 설치할 수 있습니다. 인간의 검토 지점이 줄어들면 나쁜 이름을 포착할 기회도 줄어듭니다.
병렬 에이전트(Parallel agents), CI 트리거 에이전트, 그리고 아무도 종속성 목록을 읽지 않는 '바이브 코딩(vibe coding)' 세션 모두 이 위험 창(window)을 넓힙니다.
스스로를 방어하는 방법
AI 도구 사용을 중단할 필요는 없습니다. 몇 가지 습관이 필요합니다.
1. 설치하기 전에 검증하세요
낯선 종속성을 추가하기 전에 다음 사항들을 확인하세요:
- 언제 처음 게시되었나요? (지난주에 만들어졌는데 어시스턴트가 '안전하지 않다'고 아는 패키지는 의심스럽습니다.)
- 다운로드 횟수 및 릴리스 이력
- 연결된 소스 저장소, 그리고 그 저장소가 실제적이고 활성화되었는지 여부
- 유지보수자 프로필
30초 정도만 살펴보면 대부분의 위험을 포착할 수 있습니다.
2. 모든 것을 고정하고 잠그세요(Pin and lock everything)
락파일(package-lock.json, poetry.lock, 해시가 포함된 requirements.txt)을 사용하세요. 특히 해시 고정(Hash-pinning)은 예상치 못한 패키지가 나중에 조용히 슬립 인하는 것을 막아줍니다.
pip install --require-hashes -r requirements.txt
3. 허용 목록 또는 사설 레지스트리를 사용하세요
팀의 경우, 승인된 패키지만 허용하는 내부 프록시(Artifactory, Nexus 등)를 통해 설치 경로를 지정하세요. 환각으로 생성된 이름은 단순히 해결에 실패합니다.
4. 가능한 곳에서는 설치 스크립트를 비활성화하세요
npm config set ignore-scripts true
이것은 임포트(import) 시점에 악성 코드를 막지는 못하지만, 설치 과정 중 주요 실행 경로를 제거합니다.
5. 에이전트를 위한 샌드박싱 (Sandbox your agents)
코딩 에이전트를 프로덕션 비밀 정보(production secrets), SSH 키 또는 클라우드 자격 증명에 접근할 수 없는 컨테이너나 개발 환경에서 실행하세요. 에이전트가 설치하는 모든 종속성(dependency)은 검토되기 전까지는 신뢰하지 않는다고 가정해야 합니다.
6. CI에 종속성 스캐닝 추가 (Add dependency scanning to CI)
pip-audit, npm audit, Socket, Snyk, OSV-Scanner 같은 도구들은 알려진 악성(known-bad) 및 의심스러운 패키지를 플래그합니다. 풀 리퀘스트(pull requests)에서 새로운 종속성 차이점(new-dependency diffs)을 필수 검토 항목으로 만드세요.
7. 기존 도구에 대한 프롬프트 요청 (Prompt for existing tools)
어시스턴트에게 잘 알려진 표준 라이브러리나 이미 설치된 종속성을 선호하도록 요청하고, 새로운 것을 도입할 때마다 사용자에게 알려달라고 하세요. 완벽하지는 않지만, 그렇지 않으면 놓칠 수 있는 추가 항목들을 드러내 줍니다.
간단 체크리스트 (A quick checklist)
- AI가 새로운 종속성을 추가했습니까?
- 패키지가 실제 이력과 실제 리포지토리(repo)를 가지고 존재합니까?
- 고정되고 잠겨 있습니까(pinned and locked)?
- 비밀 정보가 없는 샌드박스에서 실행되었습니까?
- CI로 스캔했습니까?
더 큰 교훈 (The bigger lesson)
슬롭스쿼팅(Slopsquatting)은 사실 AI 문제가 아닙니다. 이것은 오래된 신뢰 문제, 즉 '인터넷이 설치하라고 말하는 것은 무엇이든 실행해 보겠다'는 태도가 새롭고 매우 설득력 있는 정보 출처를 만나면서 발생한 문제입니다.
AI 어시스턴트는 그럴듯한(plausible) 결과물을 생성하는 데 탁월합니다. 그럴듯함과 정확함은 같지 않으며, 이 둘 사이의 간극이야말로 공격자들이 활동하는 지점입니다.
도구를 사용하세요. 단지 모든 새로운 종속성을 집 열쇠를 요구하는 낯선 사람처럼 취급할 뿐입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기