2026년 2월, MITRE는 오픈소스 AI 에이전트 OpenClaw에서 벌어진 보안 사고들을 직접 조사한 뒤 ATLAS(AI 시스템 공격 프레임워크)에 새 기법 7개를 추가했다. 전부 "어디선가 이미 실제로 벌어진 적 있는, 성숙한" 기법이었다. AI 에이전트가 사람 대신 실제로 행동(이메일 전송, 코드 실행, 파일 조작)하기 시작하면서, "툴 호출"이라는 새로운 공격 표면이 생겼기 때문이다.
Why — 왜 이 구조를 알아야 하는가
기존 소프트웨어 보안은 "누가 이 기능을 실행할 권한이 있는가"로 방어선을 긋는다. AI 에이전트는 이 전제를 깨뜨린다. 에이전트는 사용자가 미리 부여한 도구(이메일 읽기, 파일 쓰기, API 호출)를 가지고 있고, 그 도구를 언제 어떤 인자로 쓸지는 LLM이 그때그때 텍스트를 생성해서 결정한다. 문제는 이 "결정"이 사용자의 진짜 의도인지, 에이전트가 처리 중이던 외부 콘텐츠에 숨어 있던 지시인지 시스템이 구분하지 못한다는 점이다.
What — 툴 호출 구조
AI 에이전트가 도구를 쓸 수 있게 되는 과정(흔히 "함수 호출", "tool calling"이라 부른다)은 이렇게 생겼다.
시스템이 LLM에게 사용 가능한 도구 목록을 스키마(이름·설명·인자 형식)로 알려준다.
사용자가 요청을 하면, LLM은 그 요청에 맞춰 "어떤 도구를 어떤 인자로 호출할지"를 텍스트로 생성한다.
실행 레이어(에이전트 런타임)가 이 텍스트를 파싱해서 실제로 도구를 실행한다.
결과가 다시 LLM에 돌아가고, LLM은 이를 바탕으로 다음 행동을 잇는다.
핵심은 2번이다. LLM은 "이 요청이 진짜 사용자가 시킨 것"인지 "에이전트가 방금 읽은 이메일 본문에 적힌 지시"인지 구조적으로 구분할 방법이 없다. 둘 다 그냥 텍스트로 들어오기 때문이다.
How — 정상 흐름과 공격 흐름
정상적인 경우, 사용자가 "최근 이메일 요약해줘"라고 하면 에이전트는 read_email 도구를 호출해 받은 메일함을 읽고 요약한다. 문제는 이 도구가 이메일 본문도 함께 읽어들인다는 점이다.
공격자는 시스템을 직접 뚫지 않는다. 대신 에이전트가 나중에 읽어들일 것으로 예상되는 콘텐츠(이메일, 초대받은 문서, 웹페이지)에 지시문을 심어 놓는다. 에이전트가 그 콘텐츠를 처리하다가 이 지시문을 "사용자가 시킨 것"으로 오인하면, 이미 정당하게 부여받은 다른 도구(예: 메시지 전송, 파일 쓰기)를 그 지시대로 호출한다. 이게 ATLAS의 AI Agent Tool Invocation(AML.T0053) — 새 권한을 얻는 게 아니라 원래 있던 합법적 권한을 빌려 쓰는 방식이라, 로그만 보면 "정상적으로 승인된 도구가 정상적으로 실행된 것"처럼 보인다.
이 흐름이 데이터 유출로 이어지면 ATLAS는 이를 Exfiltration via AI Agent Tool Invocation(AML.T0086)으로 분류한다. 쓰기 권한이 있는 도구(캘린더 초대 생성, 메시지 전송 등)에 민감한 정보를 인자값으로 인코딩해 공격자가 통제하는 주소로 흘려보내는 방식이다.
OpenClaw에서 실제로 이런 일이 벌어졌다. OpenClaw 보안 위기에서 다룬 것처럼, 스킬 마켓플레이스에 341개 악성 스킬이 올라갔고(ClawHavoc 캠페인), 원격 코드 실행 취약점()이 발견됐고, 프롬프트 인젝션 성공률이 91.3%에 달했다. MITRE가 이 사건을 조사해 새 기법 7개를 프레임워크에 추가한 이유가 바로 이 셋이 겹치면 "지속적이고 광범위한 영향"으로 이어지기 때문이다.
Security — 왜 기존 방어로 못 막고, 뭘 봐야 하는가
전통적인 접근 제어는 "이 계정/프로세스가 이 작업을 할 권한이 있는가"를 검사한다. 툴 호출 공격에서는 권한 자체가 정당하다 — 문제는 "지금 이 순간 이 도구가 호출된 이유가 사용자 의도와 맞는가"라는, 기존 모델이 아예 묻지 않던 질문이다.
탐지 관점에서는 도구 호출 로그에서 두 가지 패턴이 신호가 된다. 첫째, 사용자가 명시적으로 요청한 적 없는 도구가 호출되는 시퀀스. 둘째, 신뢰할 수 없는 외부 콘텐츠(이메일 본문, 문서, 웹페이지)를 읽어들인 직후 곧바로 민감한 도구(전송·쓰기·삭제 권한)가 호출되는 흐름 — 이 인과관계 자체가 이상 징후다.
방어는 세 갈래로 나뉜다. 도구별 권한 범위를 최소한으로 좁혀서 하나의 도구가 뚫려도 피해 범위를 제한하는 것, 민감한 도구 호출 앞에 사람이 확인하는 단계를 넣는 것(human-in-the-loop), 그리고 도구 호출의 실제 인자값이 원래 사용자 요청과 의미상 일치하는지 검증하는 것이다. 셋 다 "권한이 있는가"가 아니라 "이 행동이 지금 맥락에서 타당한가"를 묻는다는 공통점이 있다.
한국 관점
국내 기업들도 코드 어시스턴트·업무 자동화 봇 형태로 AI 에이전트를 빠르게 도입하고 있다. 이 구조적 위험(합법 권한의 오용, 로그만으로는 정상처럼 보이는 공격)에 대한 인지가 도입 속도를 따라가지 못하면, 같은 패턴의 사고가 반복될 가능성이 크다.
Summary
툴 호출 구조 자체는 위험하지 않다 — 위험한 건 그 호출을 촉발한 입력이 사용자의 진짜 의도인지, 에이전트가 처리 중이던 외부 콘텐츠인지 시스템이 구분할 방법이 없다는 설계상의 공백이다.
OpenClaw 사고가 심각했던 이유는 기법 하나 때문이 아니라, 공급망 침해·RCE·프롬프트 인젝션이 같은 툴 호출 경로 위에서 겹쳤기 때문이다 — 개별 기법보다 경로 자체를 봐야 한다.
그래서 이건 패치로 끝나는 취약점이 아니라 설계 철학의 문제다. "권한이 있는가"를 넘어 "이 행동이 지금 맥락에서 타당한가"를 매번 되묻는 시스템으로 가야 한다.