코딩 에이전트가 EDR 경보를 울리는 이유 (그리고 규칙은 옳다)
요약
AI 코딩 에이전트가 자율적인 작업을 수행하는 과정에서 발생하는 보안 탐지 문제를 다룹니다. 에이전트의 자동화 동작이 EDR(엔드포인트 탐지 및 대응) 시스템에는 악성코드의 행동 패턴과 유사하게 인식되어 경보를 유발한다는 점을 분석합니다.
핵심 포인트
- 에이전트의 자격 증명 접근 시도가 EDR에 의해 자격 증명 탈취로 오인됨
- certutil, bitsadmin 등 시스템 유틸리티 사용이 공격자의 LOLBins 패턴과 일치
- 자동화된 도구 전환(pivot) 동작이 공격자의 행동과 유사하게 탐지됨
- 시작 폴더에 스크립트를 작성하는 행위가 지속성 확보 시도로 간주됨
당신의 보안 도구가 Claude Code나 Cursor, 또는 Codex를 차단했습니다.
에이전트 자체가 악성코드라서가 아닙니다. 에이전트가 마치 악성코드처럼 보이는 행동을 했기 때문입니다: 브라우저 자격 증명 복호화, Windows Credential Manager 열거(enumerate), certutil과 bitsadmin으로 다운로드를 재시도하거나, 시작 폴더에 스크립트를 떨어뜨리는 식의 행위가 그것입니다.
이것은 2026년 7월 초 Sophos X-Ops에서 나온 불편한 발견입니다: AI 코딩 에이전트가 인간 공격자를 위해 구축된 엔드포인트 행동 탐지(endpoint behavioral detections)와 충돌하고 있다는 것입니다. 에이전트는 보통 무해합니다. 하지만 탐지 시스템은 제 역할을 하고 있는 것입니다.
만약 당신이 매일 에이전트 기반 도구를 배포한다면, 이것은
1) 브라우저 자격 증명 복호화 (DPAPI)
가장 큰 비중을 차지하는 자격 증명 접근 (credential-access) 규칙(해당 그룹의 약 42.6%)은 프로세스가 Windows DPAPI를 사용하여 브라우저에 저장된 자격 증명을 잠금 해제할 때 발생합니다.
Sophos는 GStack을 널리 사용되는 스킬 팩 (skill pack)으로 지목합니다. 이 스킬 팩의 /browse 스킬은 PowerShell을 실행하여 저장된 브라우저 데이터를 복호화하며, 이를 통해 에이전트가 로그인과 유사한 작업을 자동화할 수 있도록 합니다. Claude Code의 관점에서는 이것이 거의 확실히 "브라우저 사용을 도와줘"라는 의미겠지만, EDR의 관점에서는 자격 증명 탈취 (credential theft)이며, 규칙이 작동하는 것은 정당합니다.
또 다른 사례로, Claude Code는 실행 중인 브라우저를 종료하고 Python을 통해 자격 증명 저장소 (credential store) 데이터를 가져왔습니다. 별도로, Windows 자격 증명 관리자 (Credential Manager)를 열거하기 위해 cmdkey /list를 실행하기도 했습니다. Sophos는 또한 Claude Code가 --dangerously-skip-permissions 옵션과 함께 실행된 사례들을 언급했는데, 이는 Anthropic이 위험하다고 문서화했으며 조직이 관리형 설정 (managed settings)을 통해 차단할 수 있는 모드입니다.
2) Living-off-the-land 다운로드 (LOLBins)
OpenAI Codex는 certutil을 사용하여 실제 python.org로부터 Python 설치 프로그램을 가져오려고 시도했습니다. 차단되자, 이는 bitsadmin으로 전환(pivot)했습니다. 두 도구 모두 정당한 Windows 유틸리티입니다. 또한 두 도구 모두 페이로드 (payload) 회수를 위해 공격자들이 사용하는 전형적인 도구입니다. 차단되었을 때 다른 도구로 전환하는 루프 (pivot-when-blocked loop)는 에이전트가 정적인 스크립트가 아니라, 마치 키보드를 직접 두드리는 공격자처럼 느껴지게 만드는 요소입니다.
3) 지속성 형태의 쓰기 (Persistence-shaped writes)
Cursor는 PowerShell을 사용하여 시작 프로그램 폴더 (startup-folder)에 스크립트를 드롭함으로써 지속성 (persistence) 규칙을 위반했습니다. 의도가 무해한 자동화라 할지라도, 신뢰할 수 있는 설치 프로그램 경로 외부에서 파일을 쓰는 행위는 방어자들이 즉각적으로 탐지하는 대상입니다.
이 중 어떤 것도 에이전트가 "악의적"일 것을 요구하지 않습니다. 단지 에이전트가 첫 번째 도구가 실패했을 때 다음 도구를 시도할 만큼 충분히 자율적(autonomous)이기만 하면 됩니다 — 그리고 이것이 바로 현대의 코딩 에이전트를 유용하게 만드는 바로 그 지점입니다. 저는 이러한 경쟁적 변화에 대해 The Real AI War of 2026 Isn't Chatbots. It's Coding Agents.에서 작성한 바 있습니다.
경계선의 양측에 있는 에이전트들
동일한 표면이 이미 이중 용도 (dual-use)로 사용되고 있습니다:
- Sophos는 이전에 공격자들이 EDR 제품을 대상으로 악성코드를 구축하고 테스트하기 위해 AI 에이전트를 사용한 사례 (Claude Opus급의 조정 포함)를 문서화한 바 있습니다.
- 별도의 연구에 따르면, 코딩 에이전트는 오염된 입력(poisoned inputs)을 통해 공격자의 코드를 실행하도록 속아 넘어갈 수 있으며 (이를 "agentjacking"이라 함), 이는 종종 신뢰할 수 있는 사용자 세션(trusted user session) 내부에서 발생합니다. 이는 바로 EDR이 경보를 울리기에 가장 부담스러운 지점입니다.
따라서 방어자들은 이제 다음과 같은 행위로부터 발생하는 브라우저 자격 증명(browser-cred) 호출, LOLBin 다운로드, 시작 프로그램 쓰기(startup writes)를 목격하게 됩니다:
- 실제 작업을 수행 중인 선량한 코딩 에이전트
- 도구를 구축 중인 공격자가 운영하는 에이전트
- 개발자의 신원으로 활동하는 탈취된 에이전트
단순한 행위 자체만으로는 이전만큼 많은 정보를 얻을 수 없습니다.
데모 이후 실제로 작동하는 것
다음은 Claude Code, Cursor, Codex 또는 OpenClaw + Ollama와 같은 로컬 하네스(local harnesses)를 사용하는 모든 팀에 제가 배포할 실무 플레이북(playbook)입니다.
1) "노이즈(noise)"와 "절대 허용 불가(never allow)"를 분리하기
Sophos의 가이드는 에이전트 운영(agent ops)에 깔끔하게 적용됩니다:
| 카테고리 | 예시 | 정책 본능 |
|---|---|---|
| 실행 노이즈 (Execution noise) | 다운로드 재시도, 기이한 PowerShell 형태, 알려진 양호한 출처의 낮은 평판 설치 프로그램 | 부모 프로세스 (claude.exe, cursor.exe, 자식 프로세스), 워크스페이스/임시 경로, 그리고 다운로드 평판에 따른 범위 지정/허용 목록(allowlist) 관리 |
| ... |
2) 관리형 설정에서 위험한 권한 모드 차단하기
만약 노이즈의 원인이 Claude Code의 --dangerously-skip-permissions로 추적된다면, 조직 전체에서 이를 끄십시오. Anthropic의 자체 Claude Code 보안 문서는 권한 기반 아키텍처(permission-based architecture), 샌드박스화된 bash(sandboxed bash), 작업 디렉토리 경계(working-directory boundaries), 그리고 팀을 위한 관리형 설정(managed settings)을 강조합니다. 이를 활용하십시오. 데모가 빨라 보인다는 이유만으로 프로덕션 에이전트 플릿(agent fleets)을 "모두 승인" 모드로 실행하지 마십시오.
훅(Hooks)과 강력한 제약 조건(hard constraints)은 여전히 느낌(vibes)보다 중요합니다. 소프트 프롬프트(Soft prompts)는 스킬 팩(skill pack)이 DPAPI를 호출하는 것을 막지 못할 것입니다.
3) 에이전트의 폭발 반경(blast radius)을 줄이십시오
다음과 같은 조건에서 높은 에이전시(high-agency) 세션을 실행하십시오:
- 에이전트가 개인 브라우저 프로필에 접근할 수 없음
- 비밀 정보(Secrets)는 에이전트가 통째로 덤프(dump)할 수 없는 볼트(vault) 또는 환경 변수 주입기(env injector)에 저장됨
- 네트워크가 화이트리스트(allowlisted)로 관리됨 (패키지 레지스트리, 문서, 귀사의 API — 기본적으로 개방된 웹이 아님)
- 쓰기 권한이 프로젝트 워크트리(worktree) 또는 클라우드 샌드박스(cloud sandbox)로 제한됨
클라우드 에이전트 샌드박스(웹 기반 Claude Code 스타일의 격리, 원격 샌드박스, 워크트리 등)가 존재하는 이유가 바로 이것입니다. 로컬의 "전체 사용자 권한(full user rights)"을 가진 에이전트는 편리하지만, 동시에 EDR이 비명을 지르는 이유이기도 합니다.
4) 스킬 팩을 공급망(supply chain)으로 취급하십시오
GStack의 /browse 스킬은 완벽한 예시입니다. 유용한 자동화 도구이지만, 높은 신호의 탐지(high-signal detection)를 상속받습니다. 커뮤니티 스킬이나 MCP 도구를 설치하기 전에 다음을 수행하십시오:
- 어떤 셸(shell)을 실행하는지 읽어보십시오
- 자격 증명 저장소(credential-store)를 스크래핑하는 방식보다 공식 브라우저 자동화 API를 사용하는 스킬을 선호하십시오
- 스킬이 업데이트될 때 버전을 고정(pin)하고 차이점(diffs)을 검토하십시오
이는 npm 패키지를 다룰 때와 동일한 위생 수칙입니다. 다만 실패 모드가 단순히 "빌드 오류"가 아니라 "새벽 2시에 발생하는 보안 사고(security page-out)"라는 점이 다를 뿐입니다.
5) 에이전트 도입을 SOC 런북(runbooks)과 병행하십시오
전사적으로 코딩 에이전트를 배포하기 전에 보안 팀에 다음 내용을 알리십시오:
- 예상되는 부모 프로세스(parent processes) 및 설치 경로
- 예상되는 패키지 관리자 및 다운로드 출처
- 어떤 머신이 "에이전트 워크스테이션(agent workstations)"인지, 아니면 가치가 높은 "프로덕션 관리자(production admins)"인지 구분
그렇지 않으면 모든 Claude 세션이 하나의 작은 사고(mini incident)가 될 것입니다. Claude Sonnet 5와 같은 모델 업그레이드와 더 넓은 워크 에이전트 접점(work-agent surfaces)은 세션 볼륨을 증가시킬 뿐입니다.
진짜 정책적 질문
Sophos는 이를 명확하게 정의합니다. 이것은 **초기 분석(early read)**이며, 에이전트가 고장 났다는 판결이 아닙니다. 남은 질문은 더 단순하면서도 더 어렵습니다:
코딩 에이전트가 엔드포인트(endpoint)에서 무엇을 만질 수 있도록 허용해야 할까요?
자격 증명 저장소(Credential stores)는 타당한 첫 번째 레드라인(red line)입니다. 시작 프로그램의 지속성(Startup persistence) 확보 또한 마찬가지입니다. 차단 이후에 발생하는 자율적인 LOLBin(Living-off-the-land Binaries) 피벗(pivots)은 세 번째 사례입니다. 이는 에이전트에게는 유용하지만, 공격자에게는 높은 신호(high-signal)가 됩니다.
만약 귀하의 팀이 오직 "에이전트가 티켓을 완료하는 것"에만 최적화한다면, 공격자의 형태를 띤 행동을 무시하도록 EDR을 계속 훈련시키는 꼴이 될 것입니다. 반대로, 단순한 허용 목록(allowlists)을 통해 오탐(false positives) 제로에만 최적화한다면, 에이전트재킹(agentjacking)과 공격자에 의해 구동되는 에이전트(attacker-driven agents)를 위한 구멍을 열어주게 될 것입니다.
승리하는 포지션은 지루합니다:
- 기본적으로 최소 권한 원칙(Least privilege by default) 적용
- 알려진 에이전트 부모 프로세스에 대한 범위 제한적 허용 목록(Scoped allowlists) 설정
- 자격 증명 및 지속성 프리미티브(persistence primitives)에 대한 강력한 거부(Hard denies) 설정
- Living-off-the-land과 유사해 보이는 모든 행위에 대한 인간의 검토(Human review)
이것은 에이전트에 반대하는 것이 아닙니다. 이것이 에이전트가 실제 기업용 엔드포인트와 접촉하며 생존하는 방법입니다.
팀 위키(wiki)에 바로 붙여넣을 수 있는 빠른 체크리스트
- 개발자 머신의 에이전트 바이너리(binaries) 및 스킬 팩(skill packs) 인벤토리 작성
- 관리 정책을 통해 권한 건너뛰기(skip-permissions) / YOLO 모드 비활성화
- 브라우저 자격 증명 DB 및 자격 증명 관리자(Credential Manager)에 대한 에이전트 접근 차단
- 긴 자율 실행의 경우 샌드박스(sandbox)/워크트리(worktree)/클라우드 실행 선호
- 경보 폭풍(alert storm)이 발생하기
_전(before)_에 SOC에 부모 프로세스(parent-process) + 경로 허용 목록(path allowlist) 가이드라인 제공 - MCP 서버 및 커뮤니티 스킬을 제3자 코드(third-party code)와 같이 검토
- 단순히 토큰(tokens)이 아니라, 완료된 결과당 비용과 리스크를 측정 (coding-agent race notes에서 더 넓은 에이전트 경제학 관점 참조)
결론
코딩 에이전트가 갑자기 악성코드(malware)가 된 것이 아닙니다. 엔드포인트 탐지(Endpoint detections)가 갑자기 틀린 것이 아닙니다.
에이전트의 자율성(Agent autonomy)은 이제 침입의 행동 시그니처(behavioral signature)와 중첩됩니다. 이것은 2026년에 에이전트 기반 소프트웨어 엔지니어링(agentic software engineering)을 진지하게 고려하는 누구에게나 시스템 설계(systems design) 문제입니다.
에이전트를 출시하십시오. 또한 폭발 반경(blast radius)도 함께 출시하십시오.
출처
- Sophos X-Ops — AI 에이전트가 공격자처럼 보일 때: 행동 텔레메트리(behavioral telemetry)가 우리에게 말해주는 것
- The Hacker News — 공격자를 잡기 위해 구축된 엔드포인트 보안 규칙을 트리거하는 것으로 밝혀진 AI 코딩 에이전트
- Sophos의 조사 결과에 대한 Cyber Security Intelligence 요약
- Sophos — 탐지 회피를 향한 커서(Cursor)의 지시
- CrowdStrike 2026 글로벌 위협 보고서 (Global Threat Report)
- Claude Code 보안 문서 (Security documentation)
- The Hacker News — 에이전트재킹 (Agentjacking) 관련 보도
토론 (Discussion): 귀하의 팀 EDR/XDR은 이미 Claude Code, Cursor 또는 Codex에 대해 페이징(paging)을 시작했습니까? 무엇을 화이트리스트(allowlist)에 추가했고, 무엇을 하드 블록(hard-block) 했습니까?
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기