Out-of-band management van je server beveiligen (IPMI/BMC)
Kort antwoord
Behandel je Baseboard Management Controller (BMC) als eigen beveiligingsgrens, los van het besturingssysteem dat hij beheert. Stel de management-interface nooit rechtstreeks bloot aan het publieke internet, gebruik sterke, unieke inloggegevens voor het BMC-account, controleer of IPMI Cipher Type 0 aanstaat en schakel dat uit als dat zo is, en houd de firmware van de controller up-to-date.
Elke out-of-band management-interface, of het nu Dell iDRAC, HP iLO of generieke IPMI is, draait op een kleine, onafhankelijke computer in de server: de BMC. Die heeft een eigen processor, een eigen netwerkstack en eigen toegang tot de hardware van de server, en blijft actief ook als het besturingssysteem is uitgeschakeld, is vastgelopen of volledig is gecompromitteerd. Dat maakt de BMC nuttig voor herinstallaties op afstand en console-toegang. Het maakt de BMC ook precies daarom een aantrekkelijk doelwit: wie de BMC beheert, beheert de server eronder, ongeacht wat er wel of niet draait in het besturingssysteem.
Waarom BMC-toegang het besturingssysteem volledig omzeilt
Een BMC compromitteren vereist niet eerst het besturingssysteem compromitteren, en de twee worden niet door dezelfde controles beschermd. Een aanvaller met BMC-toegang kan doorgaans de server herstarten, willekeurige virtuele media koppelen en daarvandaan opstarten, de console tijdens het opstarten meelezen (inclusief wachtwoordzinnen voor schijfversleuteling die op dat moment worden ingetypt), en bij sommige architecturen rechtstreeks bij het systeemgeheugen komen. Hardening op OS-niveau, gepatchte software, een strak afgesloten firewall, schijfversleuteling: niets daarvan houdt een aanvaller tegen die de BMC via een andere weg bereikt. De BMC heeft een eigen beveiligingsniveau nodig, geen overgeërfd niveau.
Stel de management-interface nooit bloot aan het publieke internet
De belangrijkste maatregel is meteen ook de simpelste: de webinterface en IPMI-poort van de BMC mogen nooit rechtstreeks bereikbaar zijn vanaf het publieke internet. Zet hem in plaats daarvan achter een VPN of een strikt afgeschermd management-netwerk, zodat alleen geauthenticeerde beheerders via een vertrouwd pad er überhaupt bij kunnen. Dit is precies waarom je de out-of-band management bij Worldstream pas kunt bereiken nadat je de Remote Access VPN vanuit Portal hebt opgezet. Zie Console redirection starten via out-of-band management voor hoe die verbinding werkt. Evalueer je andere hardware of een colocation-opstelling, controleer dan of hetzelfde uitgangspunt geldt: geen enkele BMC-interface hoort op een publiek IP-adres te staan zonder een VPN of gelijkwaardige barrière ervoor.
IPMI Cipher Type 0: controleer je firmware
Het authenticatieprotocol van IPMI ondersteunt verschillende cipher suites, en een daarvan, Cipher Type 0, biedt in feite helemaal geen authenticatie: een client kan die kiezen en de BMC accepteert commando's zonder een wachtwoord te controleren. Dit is geen theoretisch risico, het was een reëel, goed gedocumenteerd probleem in een reeks oudere BMC-firmware van meerdere leveranciers, en het is de moeite waard om dit actief te controleren in plaats van aan te nemen dat jouw hardware er niet door wordt geraakt.
- Controleer de ondersteunde cipher suites van je BMC via de webinterface of met
ipmitool(zie het commando-overzicht hieronder). - Staat Cipher Type 0 aan, schakel het dan uit: actuele firmware van grote leveranciers biedt die mogelijkheid, en update de firmware als de optie om het uit te schakelen helemaal ontbreekt.
- Beschouw elke BMC-firmware die meer dan een paar hoofdversies achterloopt op de huidige versie als het bekijken waard: cipher- en authenticatiegerelateerde fixes vormen een terugkerende categorie van BMC-beveiligingspatches.
Risico op brute-force van de wachtwoordhash
Oudere IPMI-implementaties (met name de RMCP+-handshake van IPMI 2.0) kunnen een gezouten wachtwoordhash lekken naar elke client die het authenticatieproces start, nog voordat de client bewijst het wachtwoord te kennen. Die hash kan daarna offline worden brute-forced, buiten het bereik van elke lockout of rate-limiting die de BMC zelf toepast. De praktische maatregelen zijn dezelfde als overal elders: een lang, uniek wachtwoord met hoge entropie voor het BMC-account (niet hergebruikt van het OS, en geen standaardwachtwoord van de leverancier), en de interface van het publieke internet weghouden zodat de handshake sowieso niet bereikbaar is voor een willekeurige client.
Bewustzijn van firmware-kwetsbaarheden
BMC-firmware is software zoals alle andere software, en verzamelt net zo goed kwetsbaarheden. Omdat de BMC onafhankelijk van het OS draait, raak je het overzicht op het patchniveau ervan makkelijk kwijt: een beheerder die trouw het besturingssysteem patcht, denkt er misschien nooit aan om de firmware van de controller zelf te checken. Bouw hier een gewoonte omheen:
- Noteer de huidige firmwareversie van de BMC van elke server in je inventaris, niet alleen de OS-versie.
- Houd de beveiligingsadviezen van de leverancier in de gaten voor de specifieke controllerfamilie die je gebruikt (iDRAC, iLO, of de BMC-leverancier achter een gegeven IPMI-implementatie).
- Voer BMC-firmware-updates volgens een vast schema uit, niet alleen reactief na een incident.
Sterke, aparte inloggegevens
Het BMC-account is een aparte identiteit ten opzichte van elk account op OS-niveau, en verdient een aparte aanpak:
- Hergebruik nooit een OS-wachtwoord (root, Administrator of een ander) voor het BMC-account.
- Wijzig standaardinloggegevens van de leverancier meteen: standaard BMC-wachtwoorden zijn algemeen bekend en worden actief gescand, overal waar een BMC bereikbaar is.
- Gebruik een uniek, gegenereerd wachtwoord dat je opslaat in een password manager: het BMC-account wordt zelden vaak genoeg gebruikt om het uit je hoofd te leren.
- Maak, waar de controller dat ondersteunt, aparte accounts per beheerder aan in plaats van één login te delen, zodat BMC-acties naar een persoon te herleiden zijn.
ipmitool commando-overzicht
ipmitool is de standaard command-line utility om een BMC te bevragen en te configureren vanaf een vertrouwde host op het management-netwerk. Een paar commando's die het kennen waard zijn:
ipmitool mc info: geeft de firmwareversie en basale controllerinformatie, het startpunt om te controleren of een update nodig is.ipmitool user list 1: toont de geconfigureerde BMC-gebruikersaccounts, handig om standaard- of onverwachte accounts op te sporen.ipmitool lan print 1: toont de netwerkconfiguratie van de BMC, inclusief of hij bereikbaar is via een gedeelde of een dedicated netwerkinterface.ipmitool sel list: leest de System Event Log, die hardware- en BMC-gebeurtenissen vastlegt, waaronder mislukte authenticatiepogingen op sommige firmware.ipmitool channel getciphers ipmi: toont de cipher suites die de BMC op dit moment accepteert, gebruik dit om te bevestigen of Cipher Type 0 aanstaat.
Exacte syntax en beschikbare subcommando's verschillen per BMC-leverancier en firmwareversie: beschouw het bovenstaande als startpunt voor wat je moet controleren, niet als kant-en-klaar script.
GRUB2-configuratie voor een seriële console
Out-of-band tekstconsoles zijn het nuttigst wanneer het besturingssysteem de bootoutput ook echt ergens naartoe stuurt waar de BMC die kan weergeven. Op Linux betekent dit GRUB2 zo configureren dat de output ook naar een seriële console gaat, naast (of in plaats van) de lokale video-output. Hierdoor kun je een server zien opstarten, of met een rescue shell werken, puur via de console-redirectie van de BMC, zonder dat je lokale video nodig hebt. De algemene vorm van de wijziging, op GRUB2-gebaseerde distributies, is het toevoegen van een definitie voor de seriële console en console-parameters aan de GRUB-configuratie (meestal in /etc/default/grub, met kernelparameters zoals console=ttyS0,115200 naast de bestaande videoconsole), en daarna de GRUB-configuratie opnieuw genereren. Exacte apparaatnamen en baudrates hangen af van de hardware en BMC die je gebruikt, beschouw dit dus als iets om te verifiëren aan de hand van de documentatie van je eigen controller, niet als vast recept.