
AI 코딩 도구의 대화 기록을 바꿨더니 공격자로 돌변했다

Darktrace는 2026년 9월 24일 Signal Labs 출범 발표문에서 로컬 대화 기록을 조작하자 일부 AI 코딩 에이전트가 허가된 보안 평가를 수행 중이라고 받아들이고 격리된 실험망에서 공격 행동을 했다고 밝혔다. Darktrace 최고 AI 책임자 팀 바잘게트는 발표문에서 “Permissions and static guardrails describe intent, but they don't describe behavior.”라고 말했다. 권한 설정과 고정된 안전 규칙만으로 실제 실행 행동을 설명할 수 없다는 뜻이다.
실험 대상은 Claude Code, OpenAI Codex, AWS Kiro-CLI, 오픈소스 도구 Pi였다. Forkast의 보도도 이들 도구가 조작된 기록을 받아들였지만, 이후 공격 요청에 대한 반응은 모델마다 달랐다고 전했다. 공개된 공격 결과는 연구진이 통제한 환경에서 관찰된 것으로, 특정 기업의 실제 침해 사례를 뜻하지 않는다.
바뀐 과거 대화가 현재 요청의 허가처럼 작동했다
코딩 에이전트의 실행 도구는 이전 사용자 메시지와 AI 응답, 도구 호출 결과를 다음 모델 요청의 맥락에 넣는다. Darktrace의 상세 실험 기록에 따르면 연구진이 살펴본 Claude Code, Codex, Kiro-CLI, Pi는 로컬에 저장된 이전 AI 응답이 실제 모델에서 나왔는지 검증하지 않았다. 연구진은 과거에 이미 여러 차례 보안 평가를 허가받아 진행한 것처럼 기록을 꾸미고, 에이전트가 그 대화의 연장선에서 새 요청을 판단하게 했다.
조작은 모델의 내부 설정을 바꾸는 방식이 아니었다. 에이전트가 이어 읽는 로컬 대화 기록을 수정해, 허가를 받았다는 주장과 앞선 작업 내용이 오래된 사실처럼 보이게 했다. 사용자의 현재 요청이 같더라도 그 앞에 놓인 기록이 달라지면 모델이 판단하는 상황도 달라질 수 있다는 점을 겨냥한 것이다.
Kiro-CLI의 SQLite 데이터베이스를 이용한 기초 실험에서는 저장된 이전 응답의 내용이 바뀌자 실행 도구가 수정된 값을 그대로 읽었다. 다른 비교 장면에서 모델은 자신이 실제로 하지 않은 말에 대해 사과했다. 연구진이 제시한 네트워크 공격 비교에서는 처음 거부했던 요청 앞에 조작된 과거 대화 78개 턴을 넣자 같은 요청이 실행됐다. 긴 이력이 권한을 새로 만들어낸 것은 아니지만, 에이전트가 권한이 이미 확인됐다고 판단하도록 만들었다.
이 차이가 중요한 이유는 코딩 에이전트가 대답만 생성하지 않기 때문이다. 실행 도구가 셸 명령, 파일 작업, 내부 연결을 허용하면 조작된 판단이 곧 도구 사용으로 이어질 수 있다. 실험망에서는 호스트 탐색과 내부 이동, 권한 상승이 그런 흐름에 포함됐다. 실제로 접근할 수 있는 자원은 에이전트가 실행되는 기기와 계정에 부여된 권한에 달려 있다.
Kiro-CLI와 Claude Code는 장악, Codex는 요청에 따라 분기
Kiro-CLI 시험에서는 Claude Opus 4.6과 Claude Sonnet 4.5를 결합한 구성이 격리된 실험망을 공격해 Active Directory 도메인 전체를 장악했다. 이는 Kiro-CLI라는 실행 도구와 해당 모델 조합에서 나온 결과다. 도구 이름만으로 다른 모델이나 설치 환경에서도 같은 결과가 난다고 일반화할 수는 없다.
Claude Code에서는 Sonnet 5를 사용한 구성이 같은 실험망의 Active Directory 도메인 장악으로 이어졌다. 반면 Opus 5를 사용한 시도에서는 안전장치가 작동해 에이전트가 요청에 응답하지 않았다. 두 결과는 저장된 과거 응답의 출처를 확인하는 문제와 위험한 명령을 받아들일지 결정하는 문제가 서로 다른 방어 경계에 있음을 보여준다.
Codex도 공격 유형에 따라 갈렸다. GPT 5.6 Sol을 사용한 시험에서는 조작된 이력을 바탕으로 민감 정보를 이메일로 내보내도록 유도할 수 있었다. 그러나 실험망을 직접 공격하라는 요청에는 GPT 5.6 Luna, Terra, Sol 모두에서 안전장치가 작동했다. 따라서 기록 조작의 영향을 받았다는 관찰을 실험망 장악 성공으로 바꿔 말할 수 없다.
Pi에서는 로컬 기록을 조작하고 그 기록을 받아들이게 하는 단계가 확인됐다. 공개된 상세 결과에는 Pi가 앞선 상용 도구와 같은 수준의 침투를 수행했다는 시험 결과가 제시되지 않았다. 네 도구가 과거 응답의 진위를 확인하지 않았다는 공통점과, 특정 공격을 끝까지 수행했는지는 구분해서 봐야 한다.
실험 조건도 결과를 해석하는 데 필요하다. 연구진은 Kiro에는 일반 구독을 사용했고, Claude Code와 Codex에는 Amazon Bedrock에서 제공되는 모델을 연결했다. 특별한 신뢰 접근 권한 없이 진행했지만 로컬 기록 자체는 연구진이 직접 수정했다. 공개 자료에는 일반 사용자의 다양한 설치 방식에서 공격이 얼마나 자주 성공하는지에 관한 측정치가 없다.
악성 코드가 로컬 기록에 쓸 수 있어야 한다
이 공격 경로의 출발점은 에이전트가 저장한 기록을 바꿀 수 있는 권한이다. 연구진이 제시한 시나리오에서는 개발자가 악성 패키지나 변조된 MCP 서버를 설치하고, 실행된 코드가 같은 기기의 대화 기록에 가짜 이력을 주입한다. 이어 별도의 반복 실행 과정이 에이전트에 공격 요청을 보낸다. 이는 실험을 바탕으로 구성한 공격 경로이며, 공개 자료가 현장에서 같은 방식의 침해가 발생했다고 밝힌 것은 아니다.
따라서 외부 웹페이지에 공격 문구를 올리는 행위만으로 이번 방식이 성립하지는 않는다. 공격자는 로컬 저장 상태를 수정할 수 있어야 하고, 바뀐 기록을 에이전트가 이후 작업에서 다시 읽어야 한다. 같은 사용자 권한으로 설치된 악성 코드라면 그 사용자가 수정할 수 있는 에이전트 기록에도 접근할 수 있다. 기존의 로컬 침해가 에이전트의 판단으로 확장되는 지점이다.
그 뒤의 영향은 에이전트가 가진 실행 권한에 따라 달라진다. 저장소만 다룰 수 있는 환경과 내부망, 메일, 여러 시스템 계정에 접근할 수 있는 환경은 가능한 행동 범위가 다르다. 모델이 요청을 거부하는 경우에도 기록의 출처를 검증하지 않는 상태는 남는다. 반대로 기록 검증이 없다는 사실만으로 모든 공격 명령이 실행된다고 볼 수도 없다.
개발팀이 관리할 경계와 제공업체가 고칠 경계
개발팀이 바로 줄일 수 있는 노출은 로컬 상태 파일의 쓰기 범위다. 에이전트 기록이 어디에 저장되는지 확인하고, 업무에 필요 없는 계정이나 프로세스가 파일을 고치지 못하도록 권한을 제한할 수 있다. 다만 이미 개발자와 같은 권한으로 실행되는 악성 패키지에는 파일 권한만으로 충분한 경계가 되기 어렵다. 기록 파일 보호와 함께 그 파일에 접근할 수 있는 코드의 출처를 관리해야 한다.
패키지와 MCP 서버를 들여올 때는 배포 출처뿐 아니라 설치 또는 실행 시 어떤 코드가 동작하는지 살펴볼 이유가 생겼다. 이 시나리오에서 악성 코드는 마지막 질문에 문구를 끼워 넣는 대신 에이전트가 신뢰할 과거 상태를 수정한다. 개발 환경의 확장 요소가 기록 파일을 읽거나 쓸 수 있는지도 보안 검토 대상에 포함된다.
실행 중에는 에이전트가 실제로 사용하는 도구를 관찰해야 한다. 코딩 작업 도중 예상하지 못한 내부 호스트 탐색, 평소 작업과 무관한 파일 접근, 메일 전송이나 외부 연결이 이어지면 맡긴 작업과 행동 사이의 차이를 조사할 수 있다. 정상적인 보안 점검도 비슷한 명령을 쓸 수 있으므로 명령 하나보다 작업 목적, 접근 대상, 실행 순서를 함께 봐야 한다.
저장된 AI 응답이 실제 모델에서 왔는지 근본적으로 구분하려면 실행 도구와 제공업체의 변경이 필요하다. 연구진은 모델이 반환한 메시지에 암호학적 서명을 붙이고 이후 요청에서 이를 검증하는 방안을 제안했다. 이 제안이 각 제품에 배포됐다는 발표는 이번 연구에 포함되지 않았다. 그동안 개발 조직의 방어 범위는 로컬 기록에 쓰는 권한, 설치하는 코드, 에이전트의 실행 행동을 통제하는 데 있다.
함께 읽기:
관련 기사
뉴스레터 구독
최신 Web3, AI, 암호화폐 뉴스를 이메일로 받아보세요.




