코딩 에이전트가 원격 코드 실행에 성공하는 과정과 위험 범위
개발자 기기에서 터미널 명령을 실행하거나 코드를 수정하는 과정은 더 이상 단순한 질문에 답변하는 단계를 넘어섰습니다. AI 에이전트는 이제 코드 작성, 웹 탐색, 이메일 검색 등 복잡하고 다단계적인 작업을 사용자를 대신해 수행할 수 있는 단계로 확대되었습니다. 이러한 변화는 새로운 공격 경로를 열었는데, 특히 '모델 컨텍스트 프로토콜(Model Context Protocol, MCP)' 서버와 에이전트가 사용하는 외부 도구(Skill)들이 여러 에이전트에 공통으로 연결되면서 취약점이 발생합니다. 기존의 보안 제품들은 네트워크 패킷이나 코드를 검사하는 데 초점을 맞추었기 때문에, AI 에이전트가 자연어 맥락을 바탕으로 악성 지시를 실행하기로 판단하는 과정 자체는 탐지 범위를 벗어나기 쉽습니다. 실제로 조사된 사례에 따르면, 코딩 에이전트는 개발자 기기에 직접 연결되어 원격 코드 실행에 성공할 수 있었으며, 생산성 에이전트의 경우 별다른 흔적 없이 데이터 유출을 시도했습니다. 이처럼 공격은 단순히 네트워크를 뚫는 것이 아니라, AI가 가진 '추론 및 행동 제안' 능력 자체를 악용하는 방식으로 진화하고 있습니다.
에이전트가 외부 도구를 호출하여 실제 작업을 수행하게 될 때는 정교한 절차와 검증 단계가 필요합니다. 예를 들어, Claude 같은 모델은 사용자의 요청과 정의된 도구 설명을 바탕으로 언제 도구를 호출할지 판단하며, 그 결과는 구조화된 호출(structured call) 형태로 나옵니다. 이 과정에서 애플리케이션이 클라이언트 역할을 할 경우 직접 실행을 담당하거나, 서버가 역할을 할 경우에는 Anthropic 측에서 실행합니다. 이러한 명확한 권한 경계 덕분에 신뢰성을 확보하기 위해서는 에이전트의 작동 방식을 철저히 검증하는 작업이 필수적입니다. OpenAI는 'Evaluations(평가)'라는 기능을 통해 모델 출력이 사용자가 지정한 스타일과 내용 기준을 충족하는지 테스트합니다. 이는 단순히 코드가 동작하는지를 넘어, 애플리케이션을 배포하기 전부터 예상되는 실패 사례를 예측하고 에이전트의 신뢰성을 확보하는 중요한 과정입니다. 따라서 개발자 기기나 내부 시스템에 접근하는 모든 AI 에이전트는 이러한 도구 호출과 실행 과정을 단계적으로 확인하고 검증하는 통제 장치가 반드시 요구됩니다.
자연어 맥락 기반의 악성 지시 실행: AI 에이전트의 작동 흐름
사용자가 "지난 분기 매출 데이터를 분석해서 다음 마케팅 캠페인에 필요한 코드를 작성해 줘"라고 지시할 때, AI 에이전트는 단순히 답변을 생성하는 것을 넘어 여러 단계를 계획하고 도구를 호출하여 작업을 수행합니다. 이 과정에서 에이전트가 가장 먼저 거치는 단계는 사용자의 자연어 요청을 분석하여 어떤 외부 기능을 사용할지 결정하는 것입니다. 예를 들어, Anthropic의 Claude와 같은 모델은 사용자 질문과 정의된 도구 설명을 바탕으로 특정 함수를 호출할 시점을 판단하고, 그 결과를 구조화된 형태로 반환합니다. 이 구조화된 출력이 바로 에이전트가 취할 행동을 제안하는 단계이며, 이는 단순히 텍스트로 답변하는 것과는 근본적으로 다릅니다. 그러나 이러한 작동 방식은 새로운 보안 경로를 만듭니다. Straiker의 조사 사례에서 보듯, AI 에이전트는 사용자의 질문에 담긴 자연어 맥락 자체를 악용하여 내부 시스템에 접근하고, 기존 방화벽이나 엔드포인트 탐지 솔루션이 검사하는 네트워크 패킷 수준을 벗어나 작동할 수 있기 때문에, 이 '의도 판단' 과정 자체가 보안 취약점이 될 위험이 있습니다.
에이전트가 도구 사용을 결정한 후에는 실제로 코드를 실행하거나 내부 시스템 작업을 수행하게 됩니다. 이러한 코드 실행은 개발자 기기나 클라우드 계정 같은 신뢰 경계 안에서 이루어지며, 이 단계에서 악성 지시가 원격 코드 실행으로 이어질 수 있습니다. 따라서 에이전트의 동작을 안전하게 통제하기 위해서는 단순히 코드를 검사하는 것을 넘어, 에이전트가 어떤 의도로 특정 도구를 호출했는지에 대한 흐름 전체를 추적해야 합니다. 예를 들어, OpenAI의 평가(Evals) 기능을 사용하면 모델이 예상한 콘텐츠 기준이나 스타일 기준에 맞게 작동하는지 사전에 테스트할 수 있습니다. 이는 실제 환경에 배포하기 전에 에이전트가 의도치 않은 방식으로 오작동하거나 악성 명령을 생성하지 않도록 신뢰성을 검증하는 중요한 과정입니다. 또한, AI 에이전트의 동작은 모델 컨텍스트 프로토콜(MCP) 서버나 외부 도구, 스킬 등 여러 구성 요소에 걸쳐 연결되므로, 이 공급망 전반에서 발생하는 취약점까지 함께 통제할 필요가 있습니다.
개발자 기기부터 GitHub까지: AI 코딩 에이전트의 보안 통제 설계
개발자가 터미널에서 복잡한 스크립트를 실행해야 할 상황을 가정해 봅시다. 단순히 질문에 답하는 생성형 AI를 넘어, 코딩 에이전트는 사용자의 지시를 받아 스스로 계획(plan)을 세우고 여러 단계를 거쳐 작업을 완료합니다. 이 과정은 에이전트가 외부 도구(tool)를 호출하고, 그 결과를 바탕으로 상태(state)를 유지하며 협업하는 방식으로 진행됩니다. 예를 들어, 특정 기능을 구현하기 위해 데이터베이스에 접근하거나 웹페이지의 정보를 가져와야 할 때, 에이전트는 정의된 도구를 사용합니다. 이때 보안 통제가 가장 중요한데, 모델 컨텍스트 프로토콜(MCP) 서버나 외부 스킬을 통해 호출되는 모든 기능은 입력과 출력에 대한 엄격한 검증 과정을 거쳐야 합니다. 클로드 같은 시스템에서는 사용자 요청이나 도구의 설명만으로 에이전트가 어떤 기능을 실행할지 판단하고, 그 결과는 애플리케이션에서 실제로 실행하는 구조화된 호출(structured call) 형태로 나옵니다. 이처럼 외부 도구를 이용한 모든 작업은 권한 경계와 입력·출력 검증을 통해 통제되어야 하며, 에이전트가 개발자 기기나 내부 시스템에 접근할 때도 이러한 명확한 실행 흐름과 제한 조건 설정이 필수적입니다.
새로운 코딩 에이전트를 실제 업무 환경에 배포하기 전에, 잠재적인 위험 요소를 사전에 검증하는 과정 자체가 중요한 보안 통제 설계가 됩니다. 아무리 정교하게 만들어진 AI라도 자연어 맥락을 바탕으로 악성 지시를 실행할 수 있다는 위협은 여전히 존재합니다. 따라서 에이전트의 출력을 체계적으로 테스트하여, 개발자가 기대하는 스타일이나 내용 기준에 부합하는지 확인하는 평가(Evaluations) 과정이 필수적입니다. 이 평가는 단순히 코드가 돌아가는지를 넘어, 모델이 예상치 못한 방식으로 작동하거나 민감한 데이터를 유출할 가능성이 있는 지점을 찾아내기 위함입니다. OpenAI의 Evals API 같은 도구를 이용해 프로그램을 통해 이러한 검증 작업을 수행하며, 에이전트가 사전에 정의된 평가 기준을 통과했는지 확인하는 것이죠. 이처럼 배포 전 단계에서부터 모델의 동작 범위를 제한하고 성능을 객관적으로 측정함으로써, 개발자 기기나 소스코드 저장소 같은 핵심 자산에 대한 잠재적인 원격 코드 실행 위험을 최소화할 수 있습니다.
트래픽 검사를 넘어선 방어: 의도를 파악하는 에이전틱 보안의 필요성
개발자가 AI 에이전트에게 "지난주 데이터에서 문제가 있는 부분을 수정해줘"와 같이 자연어로 요청하는 순간, 보안은 더 이상 네트워크 패킷이나 파일 해시만 검사해서는 안 됩니다. 악성 의도가 담긴 지시는 기존의 방화벽이나 엔드포인트 탐지 시스템을 우회할 수 있기 때문입니다. 따라서 에이전트가 어떤 행동을 할지 미리 예측하고 그 '의도' 자체를 점검하는 과정이 필수적입니다. 예를 들어, 코딩 에이전트가 터미널 명령 실행이나 내부 애플리케이션 데이터 접근과 같은 고위험 작업을 계획할 때, 시스템은 이를 즉시 가로채서 사용자에게 "에이전트가 이 기능을 사용하려고 합니다. 진행하시겠습니까?"라는 형태로 행동 제안을 보여줘야 합니다. 이러한 과정에서 에이전트가 호출하려는 외부 도구(Tool)의 기능과 권한 범위를 명확히 파악하고, 그 결과물이 구조화된 호출 형태인지를 검증하는 절차가 핵심 방어선 역할을 수행합니다.
에이전트가 실행을 요청받은 코드를 실제로 돌리거나 데이터를 읽는 단계에서도 보안 통제가 필요합니다. 에이전트는 여러 개의 도구와 스킬(Skill)을 조합하여 복잡한 다단계 작업을 수행하기 때문에, 단 하나의 취약점만으로도 전체 시스템의 신뢰 경계를 넘나들 수 있습니다. 따라서 코드가 실제로 실행되는 환경은 반드시 격리된 가상 공간(Isolation Environment)에서 이루어져야 합니다. 만일 에이전트가 특정 함수를 호출하거나 외부 API에 접근해야 할 경우, 실제 운영 시스템과 완전히 분리된 테스트베드와 같은 곳에서 먼저 작동 여부를 확인하는 절차를 거쳐야 합니다. 이 과정은 마치 모델의 출력을 사전에 평가(Evaluations)하여 기대한 결과물인지 검증하듯, 에이전트가 생성한 모든 코드는 실제 개발자 기기에 적용되기 전 반드시 안전성을 점검받는 과정을 거치도록 설계해야 합니다.
안전한 에이전트 구축 전: SLSA와 서명 기반의 아티팩트 검증
개발자가 복잡한 요청을 할 때, 에이전트가 단순히 답변하는 것을 넘어 외부 기능을 호출해야 하는 상황을 가정해 봅시다. 이때 모델이 어떤 도구(Tool)를 사용하고 어떤 입력값을 넣을지 결정하는 과정은 매우 중요한 경계입니다. 예를 들어, 클로드 같은 대규모 언어 모델(LLM)은 사용자 요청과 해당 도구의 설명서를 바탕으로 특정 기능을 호출할 시점을 스스로 판단합니다. 이 과정에서 에이전트가 외부 시스템에 접근하려 할 때, 모델 자체는 구조화된 호출을 반환하고 실제 실행은 애플리케이션 클라이언트 측에서 담당하게 됩니다. 즉, 모델의 자연어 추론 능력이 곧바로 기기 명령으로 이어지는 것이 아니라, 개발자가 정의한 명확한 인터페이스를 거쳐야 합니다. 이처럼 도구 사용 기능을 활용할 때는 누가 어떤 권한을 가지고 무엇을 실행할지 정확히 분리하여 통제하는 메커니즘이 작동해야 하며, 이는 에이전트가 시스템의 신뢰 경계 안에서 안전하게 활동하도록 보장하는 핵심적인 장치입니다.
에이전트를 실제 환경에 배포하기 전에는 반드시 철저한 검증 단계를 거쳐야 합니다. AI 코딩 에이전트는 개발자 기기나 소스코드 저장소, 클라우드 계정에 연결되기 때문에 공급망 전체의 보안 문제가 발생할 수 있습니다. 따라서 에이전트가 예상치 못한 방식으로 작동하거나 오작동하는 것을 막기 위해 '평가(Evaluations)' 과정이 필수적입니다. 평가 기능을 사용하면 모델이 특정 스타일이나 내용 기준을 충족하는지 테스트하여, 애플리케이션이 기대하는 대로 동작할지 미리 검증할 수 있습니다. 예를 들어, 에이전트가 코드를 작성하거나 문서를 요약했을 때, 그 결과물이 사내 보안 규정이나 지정된 형식에서 벗어나지 않도록 프로그램적으로 규칙을 설정하고 반복 테스트를 진행해야 합니다. 이처럼 초기 단계부터 모델의 출력을 체계적으로 검증하는 과정을 거쳐야만, 에이전트가 가진 잠재적 위험 요소를 최소화하고 신뢰할 수 있는 자동화 후보군을 선별해 나갈 수 있습니다.
바로 써볼 체크리스트
시작 전에 확인할 것
도입 전후로 아래 항목만 확인해도, 자동화가 예상 밖으로 움직일 가능성을 크게 줄일 수 있습니다.
- 모든 도구 호출 전, 사용자 입력 및 외부 API 응답의 데이터 형식과 범위를 철저히 검증하는 로직을 구현하여 오버플로우 공격을 방지해야 한다.
- 에이전트가 접근할 수 있는 모든 외부 도구 및 시스템 자원에 대해 최소 권한 원칙(Principle of Least Privilege)을 적용하고 검증해야 한다.
- 다양한 악의적 입력과 예외 상황(edge case)을 포함하는 평가 시나리오를 설계하여 에이전트의 안정성을 사전에 검증해야 한다.
- 모든 도구 호출 과정, 에이전트의 상태 변화, 그리고 실행된 코드를 추적할 수 있는 상세하고 불변적인 로깅 시스템을 구축해야 한다.
- 코드가 실행되는 도중 보안 위협이나 예상치 못한 오류가 감지되면 즉시 작업을 중단하고 이전 안전한 상태로 되돌리는 메커니즘을 구현해야 한다.
- 배포되는 모든 에이전트의 핵심 기능 로직과 외부 연동 코드는 반드시 보안 및 개발팀 책임자의 최종 승인 절차를 거쳐야 한다.
- 외부 아티팩트와 라이브러리 사용 시, Sigstore 등의 표준화된 방법을 통해 코드 서명 및 무결성 검증 과정을 의무적으로 적용해야 한다.
참고 자료
- AI 코딩 에이전트 공격 36% 원격 코드 실행...개발자 기기·MCP 공급망 통제 시급 (Bing News) https://www.gttkorea.com/news/articleView.html?idxno=26368
- OpenAI Agents SDK guide (OpenAI documentation) https://developers.openai.com/api/docs/guides/agents
- Tool use with Claude (Anthropic documentation) https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview
- OpenAI evaluations guide (OpenAI documentation) https://developers.openai.com/api/docs/guides/evals
- SLSA specification (SLSA) https://slsa.dev/spec/v1.1/
- Sigstore documentation (Sigstore) https://docs.sigstore.dev/