Werkwijze v1.0 / 2026-10
Onze werkwijze: zo verloopt een pentest, in zeven stappen.
Als wij een pentest uitvoeren, gaat dat in zeven stappen: scoping, dreigingsmodel, testen, verificatie, ernst, rapportage en hertest. Dat gaat op dezelfde manier bij een AI-agent als bij de webapplicatie en de API eronder, en elke bevinding koppelen we aan de OWASP-lijsten, MITRE ATLAS en CVSS v4.01.
Een pentest heeft een vaste tijd. Een aanvaller niet. Dus besteden we die tijd aan denken.
§02 / Zeven stappen
Een pentest uitvoeren, van het eerste gesprek tot de hertest
Wat erin zit, wat niet, en wie we bellen.
Een gesprek van 30 minuten, daarna een schriftelijke scope: de systemen, accounts en omgevingen die meedoen, het testvenster, wat erbuiten valt, en de contactpersonen aan beide kanten. We spreken ook af hoeveel we vooraf weten: black box (niets), grey box (testaccounts, documentatie, de systeemprompt) of white box (ook de broncode). De scope wordt de bijlage bij je schriftelijke toestemming; er wordt niets getest voordat die is getekend.
OpleveringScope + vrijwaringsverklaring
Wat een aanvaller van jou zou willen.
We brengen in kaart wat er in je product te stelen of te misbruiken valt, wie erbij kan, en waar de modellaag de stacklaag raakt. Het testplan volgt het dreigingsmodel, niet een checklist, zodat de uren gaan waar het risico zit.
OpleveringTestplan
Beide lagen, langs de dekkingskaart hieronder.
Onze eigen tooling doet de verkenning, het vastleggen en afspelen van verkeer, en de triage. Een mens beslist wat uren verdient: bedrijfslogica, autorisatie, misbruik in meerdere stappen, de tools en het geheugen van een agent, en de paden tussen de twee lagen.
OpleveringDekkingsmatrix, ingevuld
Niets komt in het rapport op een vermoeden.
Stackbevindingen krijgen de exacte requests mee. Modelbevindingen krijgen een reproductiescore: n van de 10 pogingen, met model, versie en instellingen erbij, omdat een model niet altijd twee keer hetzelfde antwoordt.
OpleveringF-03 / Gereproduceerd 7/10
Een score die je kunt controleren, en de context die ze weglaat.
Elke bevinding krijgt een basisscore in CVSS v4.0, met de vector ernaast. Naast de score staan de reproductiescore bij AI-bevindingen en de voorwaarden in gewone taal, zoals een account, een rol of een document in je kennisbank.
OpleveringF-03 / CVSS-B 7.6 / Hoog
Eén rapport voor je engineers, één verklaring voor je klanten.
Het volledige rapport in zeven delen, en een verklaring van één pagina die je kunt delen zonder de bevindingen.
OpleveringRapport + verklaring
Een bevinding is gesloten als de oplossing standhoudt.
Na je oplossingen spelen we elke oorspronkelijke bevinding opnieuw af tegen de nieuwe build en werken we het rapport bij.
OpleveringF-03 / Hertest: opgelost 2026-09-24
§03 / Dekking
Waar we kijken: de gezichtsveldtest
Onze testcatalogus heeft 54 categorieën: 20 in de modellaag, 34 in de stacklaag. We tekenen ze als een gezichtsveldtest, de oogtest met 54 punten2, omdat een testplan dezelfde zwakte heeft als een oog: een blinde vlek waar niemand kijkt. In ons plan is dat de gestippelde omtrek, en het enige wat erin valt, is wat jij buiten de scope laat.
- Modellaag, 20
- Stacklaag, 34
- Wat jij buiten de scope laat
§04 / De matrix
De dekkingsmatrix, zoals die in je rapport komt
Dezelfde 54 categorieën als tabel. In je rapport is elke rij gemarkeerd als getest, niet van toepassing of buiten scope, met de ids van eventuele bevindingen ernaast. Het voorbeeldrapport laat er een ingevuld zien.
| Id | Categorie | Wat we controleren |
|---|---|---|
| LLM01:2026 | Prompt Injection | Weerstand tegen prompt injection, direct en indirect |
| LLM02:2026 | Sensitive Information Disclosure | Lekken van gevoelige informatie in antwoorden en getoonde output |
| LLM03:2026 | Excessive Agency | Te veel handelingsruimte: rechten, autonomie en reikwijdte van tools |
| LLM04:2026 | Supply Chain | Toeleveringsketen van modellen, datasets en componenten |
| LLM05:2026 | Data and Model Poisoning | Integriteit van trainings-, finetuning- en retrievaldata |
| LLM06:2026 | Unbounded Consumption | Grenzen aan verbruik en bescherming tegen denial of wallet |
| LLM07:2026 | Misinformation | Onderbouwing van antwoorden en waarborgen tegen blind vertrouwen |
| LLM08:2026 | Hidden Context Exposure | Bescherming van systeemprompts en verborgen configuratie |
| LLM09:2026 | Vector and Embedding Weaknesses | Scheiding van vectoropslag en embeddings tussen gebruikers en klanten |
| LLM10:2026 | Improper Output Handling | Validatie van modeloutput voordat die code, browsers of databases bereikt |
| Id | Categorie | Wat we controleren |
|---|---|---|
| ASI01 | Agent Goal Hijack | Doelintegriteit van de agent als invoer en documenten instructies bevatten |
| ASI02 | Tool Misuse and Exploitation | Tool- en functieaanroepen binnen de bedoelde reikwijdte van de taak |
| ASI03 | Identity and Privilege Abuse | Identiteit van de agent, gedelegeerde rechten en grenzen aan bevoegdheden |
| ASI04 | Agentic Supply Chain Vulnerabilities | Agentische toeleveringsketen: MCP-servers, plug-ins en tooldefinities |
| ASI05 | Unexpected Code Execution (RCE) | Grenzen aan code-uitvoering en sandboxing voor agents |
| ASI06 | Memory & Context Poisoning | Integriteit van agentgeheugen en gedeelde context |
| ASI07 | Insecure Inter-Agent Communication | Authenticatie en integriteit van berichten tussen agents |
| ASI08 | Cascading Failures | Inperking van fouten die zich over agents en workflows verspreiden |
| ASI09 | Human-Agent Trust Exploitation | Menselijke goedkeuring en waarborgen bij vertrouwde agentoutput |
| ASI10 | Rogue Agents | Detectie en inperking van agents die van hun opdracht afwijken |
| Id | Categorie | Wat we controleren |
|---|---|---|
| API1:2023 | Broken Object Level Authorization | Autorisatie per object op elk endpoint |
| API2:2023 | Broken Authentication | API-authenticatie en omgang met tokens |
| API3:2023 | Broken Object Property Level Authorization | Autorisatie per eigenschap bij lezen en schrijven |
| API4:2023 | Unrestricted Resource Consumption | Rate limits en grenzen aan resourcegebruik |
| API5:2023 | Broken Function Level Authorization | Autorisatie per functie voor rollen en beheerroutes |
| API6:2023 | Unrestricted Access to Sensitive Business Flows | Bescherming van gevoelige bedrijfsprocessen |
| API7:2023 | Server Side Request Forgery | Verdediging tegen server-side request forgery |
| API8:2023 | Security Misconfiguration | API-beveiligingsconfiguratie en hardening |
| API9:2023 | Improper Inventory Management | API-inventaris, versies en ongedocumenteerde endpoints |
| API10:2023 | Unsafe Consumption of APIs | Veilig gebruik van API’s van derden |
| Id | Categorie | Wat we controleren |
|---|---|---|
| WSTG-INFO | Information Gathering | Blootgestelde informatie en het in kaart brengen van de applicatie |
| WSTG-CONF | Configuration and Deployment Management Testing | Configuratie- en deploymentbeheer |
| WSTG-IDNT | Identity Management Testing | Identiteitsbeheer: rollen, registratie en provisioning |
| WSTG-ATHN | Authentication Testing | Authenticatie: inloggegevens, herstel en blokkering |
| WSTG-ATHZ | Authorization Testing | Autorisatie en scheiding tussen klanten |
| WSTG-SESS | Session Management Testing | Sessiebeheer: tokens, cookies, uitloggen en time-out |
| WSTG-INPV | Input Validation Testing | Invoervalidatie en omgang met injectie |
| WSTG-ERRH | Testing for Error Handling | Foutafhandeling zonder informatielekken |
| WSTG-CRYP | Testing for Weak Cryptography | Transportbeveiliging en cryptografische keuzes |
| WSTG-BUSL | Business Logic Testing | Bedrijfslogica en integriteit van processen in meerdere stappen |
| WSTG-CLNT | Client-side Testing | Beveiliging aan de clientkant: DOM, cross-originbeleid en framing |
| WSTG-APIT | API Testing | Review van GraphQL en het API-oppervlak |
| Id | Categorie | Wat we controleren |
|---|---|---|
| Minimale rechten voor gebruikers, rollen en serviceaccounts | ||
| Paden naar meer rechten en vertrouwen tussen accounts | ||
| Inloggen versterkt: federatie, MFA en voorwaardelijke toegang | ||
| Blootstelling van objectopslag en toegangsbeleid | ||
| Geheimen in code, images en geheimenopslag | ||
| Integriteit van CI/CD-pipelines en buildrechten | ||
| Bescherming van instance-metadata en workloadidentiteit | ||
| Configuratie van containers en Kubernetes | ||
| Serverless functies en event-triggers | ||
| Gehoste AI-diensten: modelendpoints, sleutels en quota | ||
| Dekking van logging en audittrail | ||
| Externe infrastructuur: blootgestelde hosts, diensten en toegang op afstand |
§05 / Ernst
Hoe we een bevinding beoordelen
| Ernst | CVSS v4.03 | Wat we van je vragen |
|---|---|---|
| Kritiek | 9,0 tot 10,0 | Eerst oplossen, voor al het andere. |
| Hoog | 7,0 tot 8,9 | Oplossen voor je volgende release. |
| Middel | 4,0 tot 6,9 | Plan de oplossing in, en kijk of de bevinding samen met andere een pad vormt. |
| Laag | 0,1 tot 3,9 | Oplossen als de code weer wordt aangeraakt. |
| Info | 0,0 | Geen direct risico: een opmerking over hardening of hygiëne. |
Een score is een beginpunt, geen oordeel. Een keten van middelzware bevindingen kan ergens kritiek eindigen, en het rapport beoordeelt haar daar, als bevinding over beide lagen, zodat niets belangrijks tussen twee rapporten verdwijnt.
§06 / Wie doet wat
Wat onze tooling doet, en wat een mens beslist
| Onze tooling doet | Een mens beslist |
|---|---|
| Assets ontdekken en verkenning samenvoegen | Het dreigingsmodel: wat een aanvaller echt van je wil |
| Crawlen, verkeer vastleggen en afspelen | Wat uren verdient en wat niet |
| Testgevallen in grote aantallen | Bedrijfslogica, autorisatiemodellen, misbruik in meerdere stappen |
| Triage en ontdubbelen van responses | Kleine problemen samenvoegen tot één echt risico |
| Herhaalde pogingen op de AI-laag, met telling van reproducties | De test waar nog niemand een checklist voor heeft |
| Eerste opmaak van het rapport | De ernst, de oplossing en elk woord dat je leest |
| Elke oorspronkelijke bevinding opnieuw afspelen bij de hertest | Of de oplossing de oorzaak wegneemt, niet alleen het symptoom |
§07 / Je gegevens
Tooling en gegevens, per opdracht vastgelegd
- Modellen
- Waar
- Hoe lang
- Inloggegevens
- Nooit per e-mail of via het scopingformulier. Als de test ze nodig heeft, zetten we een veilig kanaal op.
Bekijk de werkwijze in de praktijk
Het voorbeeldrapport is deze werkwijze, ingevuld voor een fictieve klant. De spelregels zijn wat we beloven terwijl de test loopt.