Als het AI-platform onder je app gehackt wordt

Je beveiligt je eigen app, maar de laag eronder is van iemand anders. Deze week werd een kritiek lek in het AI-platform MLflow actief misbruikt en publiceerde Varonis een aanval waarmee Copilot zelf de sleutel tot gevoelige informatie prijsgaf. Hieronder wat er dan bij jou binnenkomt, en welke maatregelen daadwerkelijk helpen.

Terug naar OneDayBuild

Waar de AI-laag in je app zit

Meestal denk je aan het model. Er zit veel meer tussen.

Als je een AI-functie hebt gebouwd, praat je zelden rechtstreeks met een model. Er zit een keten tussen: een bibliotheek in je code, vaak een dienst die je gesprekken of documenten bijhoudt, soms een platform dat modellen aanbiedt of experimenten bijhoudt, en pas dan de aanbieder van het model zelf. Elke schakel daarin is software van iemand anders die kwetsbaarheden kan hebben.

Het lek in MLflow van deze week is daar een voorbeeld van. MLflow is een platform dat veel teams gebruiken om modellen en experimenten te beheren, en een kritiek lek erin wordt inmiddels actief misbruikt. Wie dat draait, heeft een probleem dat niets met zijn eigen code te maken heeft.

De aanval die Varonis publiceerde zit aan de andere kant: daar werd de assistent zelf overgehaald om informatie prijs te geven waar hij bij kon. Dat is een verwant maar ander probleem, en hoe dat werkt staat in prompt injection in je app.

Wat er bij jou binnenkomt

Drie soorten schade, in volgorde van hoe vaak we ze zien.

Je sleutels

Vrijwel elke AI-koppeling werkt met een sleutel die kosten kan maken en toegang geeft. Komt die naar buiten, dan draait iemand anders op jouw rekening, en bij sommige aanbieders kan hij ook je gebruiksgeschiedenis inzien. Dit is met afstand de meest voorkomende schade.

Je prompts en je context

Wat je aan het model meestuurt, staat vaak ergens tussenopgeslagen: gespreksgeschiedenis, documenten die je liet samenvatten, gegevens uit je database. Dat is precies het materiaal dat je niet wilt lekken, en het is makkelijker te bereiken dan je eigen database.

Je gebruikers

Draait de gecompromitteerde laag ook antwoorden terug naar je gebruikers, dan kan een aanvaller daar iets in wijzigen. Dat is zeldzamer maar vervelender, want je merkt het pas als iemand een antwoord krijgt dat niet van jou komt.

Wat helpt en wat niet

De maatregelen die werken kosten je een uur en de rest is schijnzekerheid.

Helpt
  • Een aparte sleutel per toepassing, met een uitgavenlimiet en zo min mogelijk rechten.
  • Geen gevoelige gegevens meesturen die de functie niet nodig heeft; wat je niet stuurt kan niet lekken.
  • Zelf bijhouden welke AI-onderdelen je draait, zodat een melding over MLflow of een ander platform je bereikt.
  • Bewaartermijnen kort houden op alles waar prompts en antwoorden in blijven staan.
  • Loggen welke aanroepen er zijn gedaan, zodat je achteraf kunt zien of er iets vreemds tussen zat.
Helpt niet
  • Vertrouwen dat een groot platform wel veilig zal zijn. Ook grote platformen krijgen kritieke lekken.
  • Alles zelf hosten om het probleem te vermijden. Dan draai je die software zelf en moet je hem ook zelf patchen.
  • Één sleutel voor je hele project, omdat dat handiger was tijdens het bouwen.
  • Aannemen dat het niet speelt omdat je maar een prototype hebt. Sleutels worden gevonden door scanners, niet door mensen.

Wat je vandaag kunt doen

Vier handelingen, samen een uur werk, en je hebt het grootste deel afgedekt.

Maak eerst een aparte sleutel voor elke toepassing en zet er een uitgavenlimiet op. Als een sleutel uitlekt, is de schade dan begrensd en kun je hem intrekken zonder de rest van je project plat te leggen. Controleer meteen of er geen sleutel in je code staat in plaats van in je omgevingsvariabelen, want dat is de meest voorkomende fout in projecten die snel zijn gebouwd.

Kijk daarna welke AI-onderdelen je eigenlijk draait. Bij een project dat met een AI-tool is opgezet, zitten er vaak bibliotheken en diensten in die jij niet hebt gekozen; hoe je daar overzicht in krijgt staat in wat zit er in je app. Zonder dat overzicht kun je een melding over een platform niet op jezelf betrekken.

Beperk vervolgens wat je meestuurt. Veel functies sturen het hele klantrecord mee terwijl het model aan een naam en een bedrag genoeg heeft. Dat is de goedkoopste beveiligingsmaatregel die bestaat, want gegevens die je niet verstuurt kunnen nergens blijven hangen.

Zorg tot slot dat je bij een melding snel kunt handelen. Dat betekent: weten wat je draait, weten hoe je een sleutel intrekt, en kunnen bijwerken zonder dat je bang bent dat er iets breekt. Hoe je dat tempo inricht staat in hoe snel moet jij een lek dichten.

Veelgestelde vragen

Welke AI-onderdelen kunnen een lek hebben?

Alles tussen jouw code en het model: de bibliotheek waarmee je aanroept, een dienst die gesprekken of documenten bijhoudt, een platform dat modellen of experimenten beheert, en de aanbieder zelf. Het kritieke lek in MLflow dat deze week actief werd misbruikt, zit in die middelste categorie, waar veel teams niet aan denken.

Wat is het grootste risico voor mij?

Je sleutel. Vrijwel elke AI-koppeling werkt met een sleutel die kosten kan maken en toegang geeft, en dat is met afstand de meest voorkomende schade. Een aparte sleutel per toepassing, met een uitgavenlimiet en minimale rechten, is de belangrijkste maatregel die je kunt nemen.

Helpt het om alles zelf te hosten?

Meestal niet. Dan draai je diezelfde software zelf en moet je hem ook zelf bijwerken, terwijl je niet de mensen hebt om dat bij te houden. Het lek in MLflow raakt juist partijen die het zelf draaien. Zelf hosten is een goede keuze om andere redenen, zoals waar je gegevens staan, maar niet als beveiligingsmaatregel op zich.

Wat stuur ik nu eigenlijk mee naar het model?

Vaak meer dan nodig. Veel functies sturen een heel klantrecord mee terwijl het model aan een naam en een bedrag genoeg heeft. Kijk één keer letterlijk naar wat er in de aanroep gaat. Wat je niet verstuurt, kan nergens blijven hangen en kan dus ook niet lekken bij een partij verderop.

Hoe merk ik dat er iets mis is?

Alleen als je het hebt gelogd. Leg per aanroep vast wat er is gevraagd, welk gereedschap is gebruikt en wat de uitkomst was. Zonder die registratie ziet misbruik eruit als normaal gebruik, en dat is precies de reden dat dit soort aanvallen lang onopgemerkt blijft.

Is dit hetzelfde als prompt injection?

Nee, maar ze liggen naast elkaar. Prompt injection gaat over instructies verstoppen in tekst die het model verwerkt. Dit gaat over kwetsbaarheden in de software van de laag eronder. Een gecompromitteerd platform kan overigens wel worden gebruikt om injectie mogelijk te maken, dus in de praktijk komen ze soms samen.

Wat doe ik als er een melding over mijn AI-platform komt?

Trek eerst je sleutels in en maak nieuwe aan, want dat is de schade die het snelst optreedt en het makkelijkst te beperken is. Kijk daarna of je de kwetsbare functie gebruikt en of het onderdeel bereikbaar is vanaf internet. Werk vervolgens bij, en noteer wat je hebt gedaan en wanneer.

Geldt dit ook als ik alleen een chatfunctie heb?

Ja. Ook een simpele chatfunctie heeft een sleutel, stuurt gegevens mee en bewaart vaak gespreksgeschiedenis. Dat zijn precies de drie dingen die schade opleveren. Het aantal functies bepaalt de omvang van het probleem, niet of je het hebt.

Liever een werkend prototype dan een tool-keuze?

Stuur ons je idee. Wij kijken in een intake mee welke flow je wilt testen en leveren in één werkdag een klikbaar prototype, met de juiste tools voor jouw geval.