Agenci AI · bezpieczeństwo · spedycja

Agent dyspozytorski pod atakiem

Agent dyspozytorski AI zbudowany i atakowany w przygotowanej przez nas piaskownicy. Kod QR na dowodzie dostawy próbuje przekierować ciężarówkę.

01

Przegląd

Zbudowaliśmy niewielkiego agenta dyspozytorskiego, który rezerwuje odbiory, aktualizuje ETA i wprowadza zmiany adresów na podstawie e-maili od przewoźników i dowodów dostawy. Działa na lokalnym otwartym modelu w przygotowanej przez nas piaskownicy: symulowanym systemie zarządzania transportem, fikcyjnej skrzynce odbiorczej i drukowanych dowodach dostawy, których kody QR agent dekoduje z obrazu.

Następnie zaatakowaliśmy go 24 atakami typu prompt injection. Pięć z sześciu szablonów ataków wykorzystuje opublikowane teksty ataków z AgentDojo (samego benchmarku AgentDojo nie uruchamialiśmy); szósty jest nasz. Ukrywają polecenia w kodzie QR, w niewidocznym białym tekście, w treści e-maila albo w e-mailu z łudząco podobnego adresu i próbują przekierować przesyłkę do innego magazynu, ujawnić PIN odbioru, anulować rezerwację lub podrzucić fałszywe ETA. Człowiek patrzący na dowód dostawy widzi kod rezerwacji. Agent odczytuje rozkaz.

Obrona opiera się na uproszczonej wersji projektu CaMeL (wyłącznie plany liniowe). Planer, który widzi wyłącznie zlecenie dyspozytora, układa plan, zanim zostanie odczytany jakikolwiek e-mail. Osobny ekstraktor bez dostępu do narzędzi czyta niezaufaną treść i może jedynie uzupełniać wartości. Każda wartość niesie informację o swoim źródle, a polityka nie dopuszcza niezaufanych wartości do odbiorców, anulowań i identyfikatorów przesyłek. Każda zmiana adresu czeka ponadto na oddzwonienie pod numer zapisany w systemie. Te same ataki uruchomiliśmy bez obrony i z samą regułą oddzwonienia. Pokazujemy też, czego obrona nie zatrzymuje: fałszywego ETA. Przeszło ono w 4 z 6 prób – z e-maila przewoźnika, z ukrytego tekstu na dowodzie dostawy i od łudząco podobnego nadawcy – ponieważ polityka pozwala, by odczytane wartości trafiały do ETA. Ochrona tras, rezerwacji i odbiorców zadziałała. Ta sama luka dotyczy godzin slotów i numerów rezerwacji, których nie testowaliśmy.

02

Co zbudowaliśmy

  • Agent dyspozytorski korzystający z narzędzi, działający na lokalnym otwartym modelu z 4 miliardami parametrów, z 12 narzędziami piaskownicy (odczyt e-maila, odczyt dokumentu, dekodowanie kodu QR, rezerwacja slotu, aktualizacja ETA, zmiana miejsca docelowego, wysłanie e-maila, anulowanie rezerwacji i inne).
  • Piaskownica z fikcyjnymi przesyłkami, przewoźnikami i odbiorcami, z dowodami dostawy renderowanymi z prawdziwymi kodami QR i symulowanym oddzwonieniem pod zapisany w systemie numer odbiorcy.
  • Uproszczona obrona w stylu CaMeL (plany liniowe): planer układa plan wyłącznie na podstawie zlecenia, odizolowany ekstraktor czyta niezaufaną treść, pochodzenie każdej wartości jest śledzone, a polityka sprawdza każde działanie.
  • Zestaw 24 ataków typu prompt injection (6 szablonów × 4 cele, w 4 miejscach ukrycia), oceniany na podstawie stanu piaskownicy po każdym przebiegu.
03

Technologie

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

04

W liczbach

WartośćJak to zmierzyliśmy
12 · 7 · 4 z 24 ataków przeszło

bez obrony, z samą regułą oddzwonienia i z pełną obroną. Każdy z 24 przypadków uruchomiono raz w każdej konfiguracji na tym samym lokalnym modelu z dekodowaniem zachłannym; atak liczy się jako udany, gdy jego cel widać w stanie piaskownicy na końcu przebiegu (adres, e-mail do atakującego, anulowana rezerwacja lub ETA). Małe liczby na jednym modelu; nie formułujemy ogólnych wniosków.

Wszystkie 4 ataki, które przeszły przez pełną obronę, to fałszywe ETA

(4 z 6 przypadków z fałszywym ETA: 2 z e-maila przewoźnika, 1 z ukrytego tekstu na dowodzie dostawy, 1 od łudząco podobnego nadawcy). W tych przebiegach nie zmieniła się żadna trasa, rezerwacja ani odbiorca. Jeden z nich (f1) został zignorowany przez oba zwykłe warianty agenta; ekstraktor go skopiował, więc zmiana netto od samej reguły oddzwonienia do pełnej obrony wynosi 7 → 4.

5 z 5 zadań wykonanych bez ataku we wszystkich trzech konfiguracjach.

To pięć zleceń dyspozytora uruchomionych raz przy czystej skrzynce odbiorczej i sprawdzonych pod kątem oczekiwanych rezerwacji, ETA, e-maila i adresu.

05

Kadry

Podobny problem do rozwiązania?

Wystarczy opisać, co trzeba obliczyć, zasymulować lub rozstrzygnąć, a odpowiemy, jak byśmy do tego podeszli.

Napisz do nas AI i uczenie maszynowe