Hotmodell för agentplattformen

Version 2026-10-09. Uppdateras vid varje incident. Skriven av den som byggde och driver plattformen.

Plattformen låter kodagenter arbeta dygnet runt med riktiga bolags data. Frågan en hotmodell ska svara på är inte om en agent kan luras. Det kan den. Frågan är vad som händer sedan. Här är tillgångarna, de som hotar dem, de tolv hot som styrt bygget, och för vart och ett: kontrollen, beviset för att den fungerar, och det som fortfarande saknas.

Tillgångar

Klientdata
Filerna i klientmappen och allt som kommer ur dem. Får bara läsas av den lokala modellen.
Personuppgifter i text
Personnummer, namn, adresser, konton i texter som agenter hanterar. Får inte lämna huset utan ett ja.
Godkännandet
Farres ja från mobilen. Allt som skickas, publiceras eller betalas hänger på att det inte kan förfalskas eller återanvändas.
Nycklar och tokens
API-nycklar, Telegram-token, pseudonymiseringsnycklar per klient.
Spåren
Hubs händelselogg, godkännandeloggen, SIEM:en. Värdelösa om de kan ändras i efterhand.
Grindens tillgänglighet
Är grinden nere står agenterna. Det är avsett, men det är också en måltavla.
Kontoret-exporten
Publik JSON med siffror. Får aldrig innehålla innehåll, bara antal.
Den publika agenten
holgerai.com/fraga: en Gemini-tjänst på Cloud Run som vem som helst får fråga. Den vet bara publicerat material, men den kostar pengar per fråga och är en yta mot internet.

Vem eller vad som hotar

Manipulerad agent
En agent som läst ett dokument, en webbsida eller ett mejl med instruktioner som inte kommer från Farre, och följer dem.
Felande agent
En agent som inte är manipulerad utan bara har fel: fel mottagare, fel mapp, en loop som kostar pengar.
Förgiftat beroende
Ett paket, en avbild eller en GitHub Action som gör något annat än den säger.
Nätverksangripare
Någon utanför huset som når en port, en webhook eller en Telegram-knapp.
Modelleverantör
Moln-API:er som sparar, tränar på eller läcker det som skickas dit.
Operatören
Farre själv: trött, stressad, trycker ja på fel sak.

Förtroendegränser

Hot, kontroll, bevis, kvar

HotHur det skulle gå tillKontroll och bevisKvar
Personuppgifter lämnar huset i ett utgående anrop
Manipulerad eller felande agent
Ett dokument i agentens arbetsmapp ber den sammanställa klientuppgifter och skicka dem någonstans. Agenten lyder och bygger ett anrop med uppgifterna i.Varje utgående verktygsanrop skannas av grinden: Presidio, spaCy och svenska regler med kontrollsiffror. Hård träff stoppar, exit 2. Stängd som standard om grinden inte svarar. Undantag bara med ett ja för exakt det anropet.
Drygt 90 stopp av 3 900 skanningar sedan 30 september. Prova reglerna. Kaosprovet varje natt. Wazuh-regel 100110 och 100113 (tre stopp mot samma bolag på tio minuter).
Text som är omskriven så att varken regler eller namnigenkänning träffar. Ett tak som stoppar stora texter utan att skanna saknas.
En agent läser klientmappen
Manipulerad eller felande agent
Agenten ombeds, eller tar själv initiativet, att öppna klientfiler för att "hjälpa till". Direkt, via sökning, eller via ett skalkommando.Kroken stoppar Read, Glob, Grep, Write och Bash som pekar på klientmappen, med realpath så att symboliska länkar inte hjälper. Klientdata går bara till den lokala modellen, pseudonymiserad, med nyckel per klient.
Stopp loggas som "mot klientfiler", Wazuh-regel 100111 nivå 12. Simulering 2 på Kontoret.
Ett skript som agenten skriver till en annan mapp och sedan kör, och som i sin tur läser klientmappen, syns inte som en sökväg i anropet. Skyddet på filsystemsnivå (egen användare, ACL) är inte infört.
Något skickas, publiceras eller betalas utan ja
Alla
Agenten anropar ett verktyg som mejlar, pushar, publicerar eller betalar, eller övertalar sig själv att ett gammalt ja gäller.Godkännande per exakt åtgärd: fingeravtryck av verktyg och indata, ett ja gäller en gång i 30 minuter, ett ändrat kommando har ett nytt fingeravtryck. Nödstoppet fryser allt.
448 ja och 0 nej på sju dygn. agent-permit med 42 tester. Kaosprovet steg 7 och 8.
Ett ja som trycks på fel sak. Meddelandet visar fingeravtryck och sammanfattning, men det är fortfarande en människa som läser.
Grinden slutar svara
Nätverksangripare, felande agent, slumpen
En stor text, en loop av anrop, en krasch, eller en process som dödas. Utan skydd skulle agenterna fortsätta utan grind.Stängd som standard: svarar grinden inte stoppas anropet. launchd startar om den. Prometheus mäter skanningstiden och en vakt i Hub larmar till mobilen när p95 passerar 5 s eller när grinden slutar svara på /metrics.
Kaosprovet dödar grinden varje natt och mäter: uppe igen efter 1 till 5 s. Postmortem om när en tidsgräns såg ut som ett driftstopp.
Ett stopp är också ett sätt att stoppa arbetet. Det är avsiktligt: hellre stilla än läckande.
Spåren ändras i efterhand
Alla med skrivrätt på maskinen
Någon, eller något, tar bort en rad ur loggen för att dölja ett stopp eller ett ja.Godkännandeloggen i agent-permit är hashkedjad: en ändrad eller borttagen rad bryter kedjan. Händelser exporteras varje minut till Wazuh i en egen container med egna regler.
agent-permit verify. SIEM-exporten och Wazuh-larmen syns på plattformssidan.
Allt ligger på samma maskin. Den som har root har allt. Kedjan avslöjar, den hindrar inte.
Nycklar eller innehåll läcker via loggar, Telegram eller Kontoret
Felande agent, operatören
En agent loggar en hel text, ett Telegram-meddelande innehåller en klientfil, exporten till Kontoret får med ett namn.Grinden loggar aldrig text, bara typ och antal. Godkännandemeddelanden beskriver åtgärden, de innehåller den inte. Kontoret-exporten vägrar skriva om utdatan innehåller ett @, ett personnummerliknande tal eller ett klientnamn.
Exportens spärrar står i kontoret_export.py. Grindens svar: typ, position, säkerhet, aldrig texten.
En nyckel i en miljövariabel som en agent läser och skriver ut. Hemligheter ligger inte i ett valv.
Förgiftat beroende
Förgiftat beroende
Ett paket på PyPI, en Docker-avbild eller en GitHub Action byter ägare eller innehåll.Kubernetes: Kyverno nekar avbilder utan fast version, Checkov granskar manifesten. Öppen källkod: CodeQL, pip-audit och SBOM vid varje push, Dependabot varje vecka.
Kyverno, Checkov, arbetsflödena i agent-permit och svenska-pii.
Pythonmiljöerna på Macen (grinden, nattskiftet) granskas inte nattligt av pip-audit. Avbilder signeras inte.
Från agent till kluster
Manipulerad agent, nätverksangripare
En agent som kör på maskinen försöker nå klustret, Argo CD eller databasen och ändra något.Hubservern lyssnar bara på localhost bakom Tailscale. Argo CD kräver inloggning via Keycloak med gruppstyrda roller: läsare ser, administratörer synkar. Poddar kör utan root, utan eskalering, utan värdmonteringar.
8 av 8 IAM-prov, 10 av 10 Kyverno-prov.
En nod. Ingen nätverkssegmentering mellan agenterna och klustret utöver inloggningen.
Knapp från fel telefon
Nätverksangripare
Någon annan än Farre trycker Godkänn, i rätt chatt eller i en annan.Bara den konfigurerade chatten och de konfigurerade användar-id:na accepteras. Allt annat loggas och avvisas. Nödstoppet kan slås på från samma telefon.
Testerna test_telegram_rejects_other_chats_and_users och test_telegram_freeze_rejects_strangers i agent-permit.
Telefonen själv. Tappas den upplåst finns knappen där.
Agenten bränner pengar
Felande agent
En loop, ett för stort dokument, en modell som kallas tusen gånger.Tokenbudget per bolag och dag. Vid taket stoppar kroken nästa anrop och Farre får en fråga. Förbrukningsvakten jämför mot snittet.
3 budgetstopp på sju dygn. Vakten "Förbrukning och modeller" larmade 4 oktober: 612 M tokens, 47 gånger snittet.
Taket gäller per dag. En dyr dag är fortfarande dyr.
Modelleverantören behåller det den fått
Modelleverantör
Det som skickas till ett moln-API kan sparas, användas för träning eller läcka hos leverantören.Klientdata går aldrig till molnet: lokal Qwen, pseudonymiserad text, nyckel per klient. Till molnet går bara text som grinden släppt, och Relta använder Bedrock i Frankfurt.
Pseudonymiseringen i pseudo.py. Grindens molnvariant framför Gemini: 4 av 4.
Det grinden missar hamnar hos leverantören. Se första raden.
Den publika agenten missbrukas
Nätverksangripare, manipulerad besökare
Någon använder holgerai.com/fraga som gratis modell, driver upp kostnaden, eller försöker få agenten att lämna ut något annat än underlaget.Underlaget är bara redan publicerat material och ligger i avbilden; ingen koppling till Hub, klientdata eller nycklar. Tjänstekontot har en roll, aiplatform.user. 200 frågor per dygn, 20 per timme och adress, 600 tecken per fråga, en instans som mest, CORS bara från holgerai.com, och budgetlarm i Google Cloud. Grinden kontrollerar frågan före modellen och svaret efter. Loggen innehåller typ, antal och tid, aldrig text.
Terraform i gcp/terraform/fraga.tf, koden i gcp/fraga/main.py. Morgonkollen frågar tjänsten varje dag och rapporterar antal frågor och stopp.
Räknarna lever i instansens minne och nollas vid omstart, så taket per dygn är ungefärligt. Gränsen per adress stoppar inte den som har många adresser. Svaret kan vara fel även när källorna är rätt; sidan säger det.

Antaganden och det som inte täcks

Hur modellen hålls levande

Hoten 1 och 4 provas varje natt av kaosprovet. Hoten 2, 3, 5 och 9 provas av testsviterna i agent-permit och i Hub. Varje incident ger ett postmortem och en rad här. Kolumnen "Kvar" är arbetslistan, i den ordning den står.

Tillbaka till plattformens kontroller.