De website antwoordt op 443, de VPN antwoordt op 1194, de firewall staat precies die twee toe, en de beoordeling slaagt. Niets in die volgorde vroeg wat de webwerker kan lezen of welke bestanden hij kan herschrijven. Een gecompromitteerde werker heeft geen open poort nodig als hij een besturingssocket of een beschrijfbare configuratiemap kan bereiken. De grens is bevoegdheid, en luisteraars zijn alleen het deel dat makkelijk te zien is.

Een aparte dienstnaam is een label; een aparte identiteit is een beveiligingseigenschap.

Tel de bevoegdheid van de werker, niet de poorten

Begin bij de runtime-gebruiker, zijn groepen, zijn mogelijkheden en zijn bestandssysteemweergave. Een dienstaccount dat toevallig in een VPN-groep zit, kan sleutelmateriaal lezen zonder dat er een poort open staat. Beschrijfbare mounts zijn de andere helft: uploads en caches horen ver van beleidsbestanden en geheimen te staan, en een onnodig gedeelde beschrijfbare map maakt nette naamgeving ongedaan. Controleer het proces dat de handeling zou uitvoeren, want een bevoorrechte ouder en onbevoorrechte werkers delen niet één bevoegdheid.

Dat een VPN-sleutel leesbaar is tijdens het starten van de daemon betekent niet dat de webwerker hem nodig heeft. Scheid het lezen dat de daemon doet van de toegang die de applicatie krijgt.

Sockets die meer geven dan ze lijken

Sommige eindpunten zijn administratieve API's in het kostuum van een metriekfeed. De beheerinterface van de VPN kan sessies wijzigen, clients loskoppelen en status lezen. Een container-runtime-socket is nog breder: toegang daartoe is in feite hostbeheer, veel verder dan een webapplicatie nodig heeft. Geen van beide hoort in de mountset van een gewone applicatie, en geen van beide verschijnt wanneer je luisterende poorten telt.

Een beheerluisteraar aan een lokaal adres binden is een begin, geen volledige beperking, want elk inkomend pad naar dat adres blijft belangrijk. Sta alleen de bedoelde bronnen en interfaces toe.

Containers delen één kernel

Containers voegen proces-, bestandssysteem- en netwerkgrenzen toe, en ze delen één kernel met de host. Dat maakt keuzes in mogelijkheden, host-mounts en daemontoegang beslissend: hostgeheimen mounten of bevoorrechte runtime-controle geven wist de grens die het containerlabel suggereert. Aparte VM's geven wel aparte gastkernels, terwijl de hypervisor, administratieve identiteiten, opslag en back-ups gedeeld blijven. Kies de grens waarvan de configuratie en updates een genoemde eigenaar hebben.

Een uitgebreidere regeling die niemand onderhoudt, is slechter dan een eenvoudige die echt wordt beoordeeld.

Test de weigering, dan de dienst

Gebruik goedgekeurde controles in de echte context van de werker om te bevestigen dat hij het VPN-beleid niet kan wijzigen, geen onnodige geheimen kan lezen en de beheerinterface niet kan aanraken. Een geslaagde lezing als beheerder test niets over die weigering. Verifieer daarna de website, een gewone toegestane VPN-handeling, en wat met elk daarvan gebeurt bij een herstart. Behoud een herstelpad dat niet afhankelijk is van het repareren van de VPN, zodat een fout herstelbaar blijft.

Beide rollen delen nog steeds CPU, geheugen, uplinkcapaciteit en onderhoudsgebeurtenissen. Die gedeelde middelen horen in het plan, ook wanneer de bevoegdheidsgrens schoon is.

Leg vast wat elk proces kan doen, wat faalt als het stopt, en welke grens gedeeld blijft. Poortaantallen zijn niet die vastlegging.

Gerelateerde artikelen