Als iemand voldoende tijd in een IT-omgeving heeft doorgebracht, is de kans groot dat hij of zij de term SSH-sleutels tegenkomt. Secure Shell (SSH)-sleutels zijn toegangsgegevens die worden gebruikt in het SSH-protocol voor moderne Infrastructure-as-a-Service-platforms zoals AWS, Google Cloud en Azure.
Wat zijn SSH-sleutels?
SSH-sleutels zijn er in verschillende groottes, maar de meest populaire keuze is een RSA 2048-bits encryptie. Dit is vergelijkbaar met een enorm wachtwoord van 617 cijfers. Het genereren van een SSH-sleutelpaar verschilt per besturingssysteem. Op Windows kan een gebruiker een SSH-sleutelpaar genereren door een SSH-client zoals PuTTY te downloaden en te gebruiken, terwijl dit op Mac- en Linux-systemen mogelijk is via een terminalvenster.
SSH-sleutels zijn altijd beschikbaar in paren, bestaande uit een publieke en een privésleutel. Er zijn drie verschillende soorten sleutels, afhankelijk van wie of wat deze sleutels bezit:
-
Gebruikerssleutel
Als de persoonlijke en openbare sleutels bij de gebruiker blijven, wordt deze set SSH-sleutels aangeduid als gebruikerssleutels.
-
Hostsleutel
Als de persoonlijke en openbare sleutels zich op het externe systeem bevinden, wordt dat sleutelpaar aangeduid als hostsleutels.
-
Sessiesleutel
Dit type sleutel wordt gebruikt als er een grote hoeveelheid gegevens moet worden verzonden en deze gegevens moeten worden gecodeerd.
Hoe werkt SSH-sleutelauthenticatie?
Nadat een sleutelpaar succesvol is gegenereerd, wordt de gebruiker gevraagd de SSH-gebruikersnaam en het IP-adres van het externe systeem in te voeren. Deze opgegeven gebruikersnaam en het protocol vertellen de externe server welke openbare sleutel nodig is om de gebruiker te authenticeren. Vervolgens gebruikt de externe server de reeds beschikbare openbare sleutel om een challenge-bericht te versleutelen dat naar de client wordt teruggestuurd. Dit bericht wordt vervolgens ontsleuteld met de persoonlijke sleutel op het systeem van de gebruiker.
Na dit proces, wanneer het bericht is gedecodeerd, wordt het gecombineerd met een eerder verzamelde sessie-ID en later teruggestuurd naar de server. Alleen als dit bericht overeenkomt met de server, wordt de client geauthenticeerd en krijgt hij toegang tot de externe server. Het belangrijkste is om ervoor te zorgen dat deze SSH-sleutels correct worden beheerd.
SSH-sleutels beheren
Er zijn miljoenen SSH-sleutels in gebruik om toegang te verlenen tot diverse digitale activa, voornamelijk door Fortune 500-bedrijven. Een effectief SSH-sleutelbeheersysteem zou daarom een grote bijdrage leveren aan het verminderen van beveiligingsrisico's. Er zijn verschillende opties om controle te krijgen over SSH-sleutels, zowel in ontwikkel- als productieomgevingen. Dit betekent dat de gebruiker de SSO-provider, een directoryservice en diverse systeembeheeroplossingen moet beheren.
Risico's verbonden aan SSH-sleutels
Er zijn veel risico's en kwetsbaarheden verbonden aan SSH-sleutels, maar sommige kwetsbaarheden zijn van cruciaal belang en mogen niet worden genegeerd:
Problemen met SSH-sleuteltracking
Een grote onderneming kan meer dan een miljoen SSH-sleutels hebben en het is praktisch onmogelijk om elke sleutel bij te houden of te beheren. Dit scenario doet zich voor omdat eindgebruikers, in tegenstelling tot certificaten of wachtwoorden, zonder veel gedoe nieuwe SSH-sleutels kunnen aanmaken of dupliceren. Zodra een groot aantal SSH-sleutels is verzameld, wordt het lastig om deze inloggegevens te traceren wanneer ontwikkelservers worden gemigreerd naar productieomgevingen of wanneer een medewerker de organisatie verlaat zonder zijn of haar sleutel te wijzigen. Deze niet-geregistreerde SSH-sleutels kunnen aanvallers langdurige toegang tot bedrijfsbronnen verschaffen. Soms kunnen deze aanvallers zelfs een permanent netwerk van toegang verkrijgen door zich voor te doen als de gebruiker met de daadwerkelijke SSH-sleutel.
Het delen van SSH-sleutels is een probleem
Omwille van de efficiëntie worden SSH-sleutels vaak gedeeld of gedupliceerd tussen medewerkers of servers. Door deze duplicatie kan één SSH-sleutel meerdere instanties hebben die toegang verlenen tot alle machines van een bedrijf. Dit kan het werk van gebruikers vergemakkelijken, maar op de lange termijn ook het leven van aanvallers vergemakkelijken. Duplicatie van SSH-sleutels creëert complexe, veel-op-veel privé-publieke sleutels, wat de beveiliging vermindert, omdat ze moeilijk te roteren en in te trekken zijn zonder dezelfde juiste sleutelvingerafdruk. Het delen van sleutels is gevaarlijk omdat het de hoorbaarheid en onweerlegbaarheid vermindert.
Statische SSH-sleutels
Het is geen gemakkelijke opgave om meer dan een miljoen SSH-sleutels te rouleren. Veel IT-beheerders wijzigen of herdistribueren sleutels zelden, uit angst dat een kritieke component of medewerker iets over het hoofd ziet. Deze factoren leiden tot een toename van statische SSH-sleutels, waardoor aanvallers ongewijzigde sleutels kunnen compromitteren, deze kunnen gebruiken of zich zijwaarts door de organisatie kunnen bewegen, en zo toegang kunnen krijgen tot kritieke of gevoelige assets.
Ingebedde SSH-sleutels
SSH-sleutels zijn vaak ingebouwd in een applicatie of script. Dit maakt het wijzigen ervan veel moeilijker, omdat de code en de ingesloten sleutels een zekere mate van coördinatie hebben om systeemaanvallen te voorkomen. Dit kan leiden tot achterdeurtjes voor aanvallers, via deze ingesloten SSH-sleutels in applicaties, code en scripts.
Zwakke SSH-configuratie
SSH-client- en serverimplementaties zoals OpenSSH bevatten een aantal specifieke configuratieparameters die IT-beheerders over het hoofd zien. Kiezen voor standaardinstellingen zoals poortdoorschakeling verhoogt de beveiligingsrisico's aanzienlijk.
Beveiligingsproblemen van SSH
Er zijn een aantal kwetsbaarheden gerelateerd aan beveiligingsmaatregelen, zoals:
-
Brute force- en malware-aanvallen
Aanvallers richten zich op SSH-sleutels om toegang tot de gegevens binnen een bedrijf te verkrijgen, brute-force-aanvallen en malware-aanvallen uit te voeren door achterdeurtjes te creëren.
-
SSH-sessiekaping en ongeautoriseerde toegang
Aanvallers kunnen de SSH-sessie van een gebruiker kapen door misbruik te maken van de vertrouwde communicatie tussen meerdere systemen. Dit doen ze door de socket van de gebruiker te kapen of er ongeautoriseerde toegang toe te krijgen. Daarom is het beter om standaardconfiguraties te vermijden, aangezien deze de toegang van de geprivilegieerde gebruiker in gevaar brengen.
Beperk SSH-beveiligingsaanvallen
Hoewel er veel kwetsbaarheden zijn met betrekking tot SSH-sleutelbeheer, zijn er ook manieren om deze te voorkomen:
-
Ontdek en kaartsleutels
Gebruikers moeten SSH-servers, certificaten en privésleutels vinden die de autorisatie hebben om SSH-toegang te verlenen. Regelmatige netwerkscans en het gebruik van detectietools om het centrale pad te lokaliseren en te onderhouden zijn eveneens cruciaal. Het is ook belangrijk om de sleutel-gebruikerrelatie in kaart te brengen.
-
Beheer SSH-sleutels en toegang
Het is beter om SSH-sleutelbeheerbeleid en -praktijken te implementeren om nieuwe sleutels te genereren en ongebruikte sleutels te verwijderen. De gebruiker kan directoryservices gebruiken om de vereiste toegangsrechten voor de SSH-referenties toe te wijzen.
-
Root-aanmelding uitschakelen
De root is het primaire gebruikersaccount en biedt volledige toegang tot alle UNIX-gebaseerde systemen. Aanvallers richten zich op deze root-login om onbeperkte toegang te krijgen tot kritieke systemen.
Conclusie
Als de IT-beheerders de juiste controletrajecten bijhouden om ervoor te zorgen dat alle gebruikte sleutels voldoen aan het beleid, kan dit leiden tot transparantie en kunnen de juiste wijzigingen worden doorgevoerd voor het genereren en roteren van sleutels.
