Blootstelling van het containernetwerk
A container port mapping puts a database straight on the internet, with no firewall rule appearing to change. Connect to it directly, then bind the mapping to localhost and segment the services onto a user-defined network.
Wat is Blootstelling van het containernetwerk?
Het publiceren van een containerpoort bindt deze standaard aan elke interface, waardoor een mapping die bedoeld is voor lokale ontwikkeling een database op het publieke internet kan zetten zonder dat er ogenschijnlijk een firewallregel verandert. Op het standaard bridge-netwerk kan elke container ook elke andere container bereiken. Deze oefening behandelt een database die is blootgesteld door een poortmapping: bekijk hoe een aanvaller rechtstreeks verbinding maakt zonder dat er een applicatie bij betrokken is, en los het daarna op door te binden aan localhost en de services op een user-defined netwerk te plaatsen.
Wat je leert in Blootstelling van het containernetwerk
- Elke interface op de host, inclusief publieke, en dat is waarom een gemak voor ontwikkeling een database kan blootstellen aan het internet.
- De mapping wordt aangemaakt door de container-runtime op de host, dus verandert er niets in de configuratie van de cloud security groups om dit te weerspiegelen.
- Elke container erop kan elke andere container bereiken, dus geeft de compromittering van één enkele container netwerktoegang tot alle andere.
- Roteer de credentials die bereikbaar waren, want het sluiten van de poort maakt niets ongeldig wat een aanvaller al heeft verzameld.
Blootstelling van het containernetwerk — Trainingsstappen
-
Een database op het open internet
Bob bevindt zich nergens binnenin. Weken geleden kocht hij een dump met daarin een read-only databasecredential voor Halvexis, maar een credential is nutteloos als je de database niet kunt bereiken. Dus scant hij de data-store-hosts van het bedrijf om te zien of een ervan van buitenaf reageert.
-
Rechtstreeks naar binnen, geen applicatie
Er is geen inlogpagina, geen API, geen rate limit. Een gepubliceerde databasepoort spreekt het onbewerkte Postgres-protocol tegen iedereen die haar kan bereiken. Bob richt een databaseclient rechtstreeks erop en authenticeert met de credential die hij al had.
-
Lees de residents-tabel
De credential is read-only, en dat is alles wat Bob nodig heeft. Hij bevraagt de tabel met de huurders van het platform en hun gegevens, rechtstreeks uit productie.
-
Wat er is veranderd
Bob heeft deze exacte credential al maanden en heeft hem nooit gebruikt.
-
Monitoring signaleert het verkeer
Halvexis draait cloudmonitoring op zijn productiehosts. Het weet niet waar de database voor dient; het rapporteert wat het heeft gezien.
-
Zoek de open poort
Als de security groups niet zijn veranderd, is de blootstelling ontstaan op de host zelf, door de manier waarop een container zijn poort publiceerde. Alice toont de databasecontainer en leest de ene kolom die aangeeft aan welke interfaces de poort gebonden is.
-
Waar de poort wordt gepubliceerd
De poortmapping komt uit het Compose-bestand dat de stack definieert. Alice opent het om de regel te zien die 5432 publiceerde.
-
De regel die het deed
Eén mapping, geschreven zoals een developer die op zijn laptop schrijft, is wat de database op het internet zette toen deze stack werd uitgeleverd naar productie.
-
Bind het aan localhost
De API bereikt de database via het Compose-netwerk met de servicenaam, niet via een gepubliceerde hostpoort. De hostmapping hoeft dus helemaal niet publiek te zijn. Alice bindt hem aan de loopback-interface, zodat alleen de host zelf en de containers op zijn netwerk hem kunnen bereiken.
-
Lees de herstelde binding
De wijziging is één interface-prefix, maar het is de hele fix. Alice loopt de gebonden mapping door voordat ze opnieuw deployt, om precies te zien wat nu bereikbaar is en van waaruit.