Eerst vaste scans, zonder AI
Erkende open-source scanners in een vaste versie lezen je repository: gitleaks voor geheimen in code en geschiedenis, osv-scanner voor kwetsbare en kwaadaardige onderdelen uit je lockfiles, semgrep en bandit voor riskante code, hadolint en trivy voor Dockerfiles en configuratie, lizard en scc voor complexiteit en omvang. Dezelfde code geeft dezelfde uitkomst: dat is bij ons een test, geen belofte.
Daarnaast lezen vaste tools je git-geschiedenis: hoe oud, hoe actief, hoeveel mensen, en of het meeste werk van één persoon komt. Een gevonden geheim wordt gemeld met bestand, regel en soort, nooit met de waarde.
Dan leest een AI-model de code, en wij controleren elke bewering
Een AI-model leest de code alleen lezend, deel voor deel, en levert wat het vindt in als beweringen. Niet het model bepaalt wat je ziet, onze code wel: elke bewering gaat door twaalf vaste regels voordat hij in je werkplek komt. Wat een regel afwijst, gaat één keer terug naar het model en daarna naar ons team, nooit naar jou. Een paar van die regels:
- Het bestand en de regel bestaan, en het citaat staat er echt
- Een naam in de bewering, zoals een functie, een pakket, een instelling of een route, bestaat in je code
- Een bewering dat iets ontbreekt, controleren we opnieuw met een zoekopdracht
- Een document dat veel ouder is dan de code die het beschrijft, mag niet actueel heten
- Een bewering met een geheim, een link of een instructie aan de lezer erin wordt afgewezen
- Het model moet de bestanden waarover het spreekt echt geopend hebben; dat loggen wij, niet het model
Elke geautomatiseerde controle bewijst zichzelf
Een geautomatiseerde controle van ons bestaat pas als hij zichzelf kan bewijzen: een geplante testcase waarin het probleem zit en de controle het moet vinden, en een schone testcase waarin hij niets mag vinden. Die tests draaien elke nacht en voordat iets van ons naar productie gaat. Verdwijnt zo'n testcase, dan faalt die ronde.
De catalogus telt vandaag 275 controles, verdeeld over twaalf onderdelen. Niet elke controle is even ver: een deel heeft nog geen eigen testcase en staat op een gedateerde lijst van uitzonderingen die alleen korter mag worden. De documentatiecatalogus valt er nog buiten.
- Code
- 12 controles
- Beveiliging
- 80 controles
- Wet- en regelgeving
- 2 controles
- Documentatie
- 127 controles
- Kwaliteit
- 9 controles
- Optimalisatie
- 7 controles
- Architectuur
- 5 controles
- Onderhoudbaarheid
- 10 controles
- Data
- 12 controles
- Continuïteit
- 2 controles
- Proces en oplevering
- 6 controles
- AI-risico's
- 3 controles
Wat je ziet, en wat je nooit ziet
Elke controle krijgt een woord met een icoon, nooit alleen een kleur: door jullie getest en door ons gecontroleerd, door jullie gemeld en niet gecontroleerd, niet bewezen of gefaald, niet van toepassing. Een onderdeel waarin niets gemeten is, is nooit groen.
- Wat je ziet: bij elke bevinding het bestand en de regel, de commit, het scanresultaat of het CI-rapport
- Wat je nooit ziet: de waarde van een geheim. Die tonen we niet en sturen we nooit naar een AI-model
- Wat wij nooit doen: je code wijzigen of een bevinding repareren. Je tests draaien we in de pilot niet; verandert dat, dan staat het eerst in de voorwaarden. Jullie bepalen wat je oplost
- Wat je zelf kunt: elke bevinding nakijken op de plek die hij noemt, hem betwisten met een reden, of hem als aanvaard risico markeren. Een geheim kun je nooit wegfilteren
Wat nog niet bewezen is
Niet alles wat we doen, is al even hard bewezen. Dit is de stand:
- De documentatiecatalogus, welk document aanwezig, dun of ontbrekend is, bepaalt het model aan de hand van bestandsnamen en de regels hierboven. De eerste meting op onze eigen goudset staat gepland; tot dan is dit ons minst harde onderdeel
- Hoe vaak een controle iets mist, is niet gemeten. We weten dat elke controle zijn geplante geval vindt, niet hoe vaak hij een variant mist. Een meting op openbare, met opzet kwetsbare projecten is de volgende stap
- We vinden niet alles. Dat iets niet bij de bevindingen staat, betekent niet dat het in orde is. Een controle is een momentopname en geen certificaat; zo staat het ook in onze voorwaarden