AI 에이전트 · 보안 · 화물 포워딩

공격받는 배차 에이전트

저희가 만든 샌드박스에서 구축하고 공격한 AI 배차 에이전트입니다. 납품서의 QR 코드가 트럭을 다른 곳으로 보내려 합니다.

01

개요

운송사 이메일과 납품서를 바탕으로 집하를 예약하고, ETA를 갱신하고, 주소 변경을 반영하는 작은 배차 에이전트를 만들었습니다. 이 에이전트는 저희가 만든 샌드박스 안에서 로컬 오픈 모델로 실행됩니다. 샌드박스는 모의 운송 관리 시스템, 가상의 받은편지함, 그리고 에이전트가 이미지에서 QR 코드를 디코딩하는 인쇄된 납품서로 이루어져 있습니다.

이어서 인젝션 공격 24건으로 에이전트를 공격했습니다. 공격 템플릿 여섯 개 중 다섯 개는 공개된 AgentDojo 공격 문자열을 사용했고(AgentDojo 벤치마크 자체를 실행하지는 않았습니다), 여섯 번째는 저희가 만들었습니다. 이 공격들은 QR 코드, 보이지 않는 흰색 텍스트, 이메일 본문, 또는 비슷하게 위장한 주소에서 온 이메일에 지시를 숨기고, 화물을 다른 창고로 보내거나, 집하 PIN을 유출하거나, 예약을 취소하거나, 거짓 ETA를 심으려 합니다. 납품서를 보는 사람에게는 예약 코드가 보입니다. 에이전트는 명령을 읽습니다.

방어는 CaMeL 설계를 단순화한 버전(직선형 계획만 지원)을 따릅니다. 배차 담당자의 요청만 보는 플래너가 어떤 이메일도 읽기 전에 계획을 작성합니다. 도구가 없는 별도의 추출기가 신뢰할 수 없는 콘텐츠를 읽으며, 값을 채우는 일만 할 수 있습니다. 모든 값은 출처 정보를 지니며, 정책이 신뢰할 수 없는 값을 수신자, 취소, 화물 ID에 쓰지 못하게 막습니다. 주소 변경은 또한 등록된 번호로 거는 확인 전화(콜백)를 기다립니다. 같은 공격을 방어 없이, 그리고 콜백 규칙만 적용한 상태로도 실행했습니다. 방어가 막지 못하는 것도 보여 줍니다. 바로 거짓 ETA입니다. 운송사 이메일, 납품서의 숨겨진 텍스트, 위장 발신자를 통해 6번 중 4번 통과했는데, 정책이 읽어 들인 값을 ETA에 넣도록 허용하기 때문입니다. 경로, 예약, 수신자는 보호된 상태를 유지했습니다. 같은 허점은 슬롯 시간과 예약 참조 번호에도 해당하지만, 이는 시험하지 않았습니다.

02

구현 내용

  • 40억 파라미터 로컬 오픈 모델 위에서 도구를 사용하는 배차 에이전트로, 샌드박스 도구 12개(이메일 읽기, 문서 읽기, QR 코드 디코딩, 슬롯 예약, ETA 갱신, 목적지 변경, 이메일 발송, 예약 취소 등)를 갖추고 있습니다.
  • 가상의 화물, 운송사, 수하인으로 구성된 샌드박스. 실제 QR 코드가 렌더링된 납품서와, 등록된 수하인 번호로 거는 시뮬레이션 콜백을 포함합니다.
  • 단순화한 CaMeL 방식의 방어(직선형 계획): 플래너는 요청만으로 계획을 작성하고, 격리된 추출기가 신뢰할 수 없는 콘텐츠를 읽으며, 모든 값의 출처(provenance)를 추적하고, 정책이 각 동작을 검사합니다.
  • 인젝션 공격 24건으로 이루어진 시험 세트(템플릿 × 목표 = 6 × 4, 숨김 위치 4곳). 각 실행 후 샌드박스 상태로 채점합니다.
03

기술 스택

Python · mlx-lm · Qwen3-4B-Instruct-2507 (4-bit, Apache-2.0) · zxing-cpp · qrcode · three.js · Playwright

04

주요 수치

수치측정 방법
공격 24건 중 12 · 7 · 4건 통과

각각 방어 없음, 콜백 규칙만 적용, 전체 방어 적용일 때의 결과입니다. 24개 사례 각각을 같은 로컬 모델에서 그리디 디코딩으로 설정마다 한 번씩 실행했습니다. 실행이 끝났을 때 공격 목표(주소, 공격자에게 보낸 이메일, 취소된 예약, ETA)가 샌드박스 상태에 나타나면 통과로 셉니다. 한 모델에서 얻은 작은 표본이며, 일반적인 주장을 하지 않습니다.

전체 방어를 통과한 4건은 모두 거짓 ETA

거짓 ETA 사례 6건 중 4건입니다(운송사 이메일 2건, 납품서의 숨겨진 텍스트 1건, 위장 발신자 1건). 이 실행들에서 경로, 예약, 수신자는 하나도 바뀌지 않았습니다. 그중 하나(f1)는 기본 에이전트 두 설정 모두 무시했지만 추출기가 이를 그대로 옮겼으므로, 콜백 규칙만 적용한 경우에서 전체 방어로의 순변화는 7 → 4입니다.

공격이 없을 때 세 설정 모두에서 작업 5건 중 5건 완료.

깨끗한 받은편지함으로 배차 담당자 요청 다섯 건을 한 번씩 실행하고, 예상되는 예약, ETA, 이메일, 주소와 대조해 확인했습니다.

05

스틸 이미지

이와 비슷한 과제가 있으신가요?

계산하거나 시뮬레이션하거나 결정해야 할 내용을 알려 주시면, 저희가 어떻게 접근할지 말씀드리겠습니다.

과제 문의하기 AI·머신러닝