Van kwetsbaarheid naar bewijs: continu, geautomatiseerd pentesten in monsys
Je inventaris weet wélke software draait. De nieuwe aanvalsoppervlak-laag kijkt van buitenaf en bewijst wat écht bereikbaar is: opt-in, alleen op bewezen-eigen scope, detect-only, en gesigneerd voor je NIS2-audit.
Een kwetsbaarheidsmelding stelt altijd dezelfde vraag die niemand snel kan beantwoorden: draait dit ergens, en kan iemand er vanaf buiten bij? De pakketinventaris zegt "deze versie van PHP is kwetsbaar". Wat je op zo'n dag nodig hebt is de regel erna: welke van je sites reageren erop, vanaf internet, nu.
Daarom hebben we aan monsys een aanvalsoppervlak-laag toegevoegd: continu, geautomatiseerd pentesten dat de inside-out inventaris aanvult met een outside-in blik. Het is bewust strak afgebakend: een scanner die naar klantsystemen wijst mag nooit buiten scope raken, nooit iets kapotmaken en nooit draaien zonder bewijs van eigendom.
Wat het beantwoordt
- Wat is écht bereikbaar? Open poorten, publieke panelen, TLS-configuratie,
ontbrekende security-headers, blootgestelde bestanden zoals .git en .env.
- Is een CVE ook uitbuitbaar? Een detectie die een kwetsbaarheid uit je
inventaris bevestigt, tilt die blootstelling van "monitoren" naar exploiteerbaar bevestigd: met een melding.
- Wat heeft niemand als CVE geregistreerd? Zwakke ciphers, verlopen
certificaten per domein, standaard-logins, directory listings.
Veilig by design
De hele laag is gebouwd rond één principe: scope is bewezen eigendom. Een scanner raakt alleen een asset die je aantoonbaar bezit: een domein dat een agent op je eigen host serveert (bevestigd via het Let's Encrypt-certificaat), een DNS-TXT-verificatie, of een handmatige toevoeging met TOTP. Er is geen vrij invoerveld dat zomaar een scan start.
Daarbovenop:
- Opt-in. Scannen staat standaard uit. Inschakelen vereist TOTP. Scans
draaien in je eigen onderhoudsvenster.
- Detect-only. Geen exploitatie, geen brute force, geen DoS-achtige tests,
niets geschreven op een target. We gebruiken alleen self-hosted open source: nmap, testssl.sh, nuclei en OWASP ZAP: geen externe cloud-dienst in het pad.
- Geïsoleerd. Elke scanner draait in een gepinde, geharde Docker-container:
read-only, zonder capabilities, non-root, met de hostnaam vastgepind aan het gecontroleerde IP zodat DNS-rebinding onmogelijk is.
- Stopbaar. Een kill-switch stopt een lopende scan binnen seconden.
Gebouwd zoals je een aanvalstool hoort te bouwen
Omdat één foute call op een klantsysteem bedrijf-beëindigend is, hebben we deze feature laten bewaken door een apart adversarieel team dat tijdens de bouw op zoek ging naar scope-escape, SSRF, command-injectie en een kill-switch die niet pakt. Dat team vond echte problemen: een kill-switch die een container niet stopte, DNS-rebinding, een vervalsbaar eigendomsbewijs, en elk daarvan is gefixt en opnieuw geverifieerd vóór de uitrol. Dat is geen bijzaak; dat is de reden dat je dit op je eigen infrastructuur durft aan te zetten.
Bewijs voor je audit
Elke scan-run wordt Ed25519-ondertekend en landt in de maandelijkse audit-pack: wie scande, wanneer, welke scope, welke findings. NIS2 vraagt om beleid en procedures die de doeltreffendheid van je maatregelen beoordelen. Een maandelijks, reproduceerbaar, ondertekend scanrapport per asset is precies dat. monsys meet; de auditor beoordeelt.
Aanzetten
Ga naar Beveiliging → Aanvalsoppervlak, importeer je domeinen van de agents, zet de policy aan met TOTP en kies een onderhoudsvenster. De eerste scan vindt binnen minuten je open poorten, TLS-status en misconfiguraties, en vanaf dan elke week, met een vergelijking ten opzichte van vorige week.
Van "er is een CVE" naar "deze host, dit domein, bereikbaar, bevestigd": in één doorlopende lijn.