Wat is SSH

SSH, of Secure Shell, is een protocol voor beheer op afstand waarmee gebruikers hun servers op afstand kunnen bedienen en wijzigen via het Internet. De dienst is opgezet als een veilige vervanging voor het onversleutelde Telnet en maakt gebruik van cryptografische technieken om ervoor te zorgen dat alle communicatie van en naar de server op afstand op een versleutelde manier gebeurt. Het biedt een mechanisme voor het authenticeren van een gebruiker op afstand, het overbrengen van invoer van de client naar de host, en het terugsturen van de uitvoer naar de client.

De afbeelding hieronder toont een typisch SSH-venster. Iedere Linux of macOS gebruiker kan direct vanuit het terminal venster SSH-en op de server op afstand. Windows-gebruikers kunnen hun voordeel doen met SSH-clients zoals Putty. U kunt shell-opdrachten op dezelfde manier uitvoeren als wanneer u de computer op afstand zou bedienen.

Deze SSH-tutorial behandelt de basisprincipes van hoe ssh werkt, samen met de onderliggende technologieën die door het protocol worden gebruikt om een beveiligde methode voor toegang op afstand te bieden. Het zal de verschillende lagen en soorten van encryptie die gebruikt worden behandelen, samen met het doel van elke laag.

Geef uw Linux VPS hosting bij Hostinger. Ontvang tot 77% korting!

Get Start Here

How Does SSH Work

Als u Linux of Mac gebruikt, dan is het gebruik van SSH erg simpel. Als u Windows gebruikt, zult u een SSH-client moeten gebruiken om SSH-verbindingen te openen. De meest populaire SSH client is PuTTY, waarover u hier meer kunt leren.

Voor Mac en Linux gebruikers, ga naar uw terminal programma en volg dan de onderstaande procedure:

Het SSH commando bestaat uit 3 verschillende delen:

ssh {user}@{host}

Het SSH key commando instrueert uw systeem dat u een versleutelde Secure Shell verbinding wilt openen. {user} vertegenwoordigt de account waartoe u toegang wilt. Bijvoorbeeld, u wilt toegang tot de root gebruiker, wat in principe synoniem is voor systeembeheerder met volledige rechten om alles op het systeem te wijzigen. {host} verwijst naar de computer waartoe u toegang wilt hebben. Dit kan een IP Adres zijn (b.v. 244.235.23.19) of een domeinnaam (b.v. www.xyzdomain.com).

Wanneer u op enter drukt, wordt u gevraagd om het wachtwoord voor de gevraagde account in te voeren. Als u het intypt, verschijnt er niets op het scherm, maar uw wachtwoord wordt wel degelijk verzonden. Zodra u klaar bent met typen, drukt u nogmaals op enter. Als uw wachtwoord correct is, wordt u begroet met een terminal venster op afstand.

Als u meer wilt weten over enkele SSH commando’s, vindt u ze hier.

Uitleg over verschillende Encryptie Technieken

Het grote voordeel van SSH ten opzichte van zijn voorgangers is het gebruik van encryptie om de veilige overdracht van informatie tussen de host en de client te garanderen. Host verwijst naar de server op afstand waartoe je toegang probeert te krijgen, terwijl de client de computer is die je gebruikt om toegang te krijgen tot de host. Er zijn drie verschillende versleutelingstechnologieën die door SSH worden gebruikt:

  1. Symmetrische versleuteling
  2. Asymmetrische versleuteling
  3. Hashing.

Symmetrische versleuteling

Symmetrische versleuteling is een vorm van versleuteling waarbij een geheime sleutel wordt gebruikt voor zowel het versleutelen als het ontsleutelen van een bericht door zowel de client als de host. In feite kan iedereen die de sleutel bezit het overgebrachte bericht ontsleutelen.

Symmetrische versleuteling wordt ook wel gedeelde sleutel of gedeelde geheime versleuteling genoemd. Er wordt meestal maar één sleutel gebruikt, of soms een sleutelpaar waarbij de ene sleutel eenvoudig kan worden berekend met behulp van de andere sleutel.

Symmetrische sleutels worden gebruikt om de gehele communicatie tijdens een SSH Sessie te versleutelen. Zowel de client als de server leiden de geheime sleutel af volgens een overeengekomen methode, en de resulterende sleutel wordt nooit aan een derde partij onthuld. Het proces van het maken van een symmetrische sleutel wordt uitgevoerd door een sleuteluitwisselingsalgoritme. Wat dit algoritme bijzonder veilig maakt, is het feit dat de sleutel nooit tussen de client en de host wordt uitgewisseld. In plaats daarvan delen de twee computers openbare gegevens en manipuleren deze om onafhankelijk de geheime sleutel te berekenen. Zelfs als een andere machine de publiek gedeelde gegevens onderschept, kan deze de sleutel niet berekenen omdat het sleuteluitwisselingsalgoritme niet bekend is.

Het moet echter worden opgemerkt dat het geheime token specifiek is voor elke SSH-sessie, en wordt gegenereerd voorafgaand aan de client authenticatie. Als de sleutel eenmaal is gegenereerd, moeten alle pakketten tussen de twee machines worden versleuteld met de privé-sleutel. Dit geldt ook voor het wachtwoord dat door de gebruiker in de console wordt ingetikt, zodat referenties altijd beschermd zijn tegen netwerk packet sniffers.

Er bestaat een variëteit aan symmetrische versleutelingsciphers, waaronder, maar niet beperkt tot, AES (Advanced Encryption Standard), CAST128, Blowfish etc. Alvorens een beveiligde verbinding tot stand te brengen, beslissen de client en een host over het te gebruiken cijfer, door een lijst van ondersteunde cijfers in volgorde van voorkeur bekend te maken. De meest geprefereerde cypher van de door de client ondersteunde cypher die op de lijst van de host staat, wordt gebruikt als de bidirectionele cypher.

Bijv. als twee Ubuntu 14.04 LTS machines met elkaar communiceren over SSH, zullen ze aes128-ctr gebruiken als hun standaard cipher.

Asymmetrische Encryptie

In tegenstelling tot symmetrische encryptie, gebruikt asymmetrische encryptie twee aparte sleutels voor encryptie en decryptie. Deze twee sleutels zijn bekend als de publieke sleutel en de privé-sleutel. Samen vormen deze twee sleutels een publiek-privaat sleutelpaar.

De publieke sleutel wordt, zoals de naam al aangeeft, openlijk verspreid en gedeeld met alle partijen. Hoewel zij qua functionaliteit nauw verbonden is met de privésleutel, kan de privésleutel niet mathematisch worden berekend uit de publieke sleutel. De relatie tussen de twee sleutels is zeer complex: een bericht dat is versleuteld met de openbare sleutel van een machine, kan alleen worden ontsleuteld met de particuliere sleutel van diezelfde machine. Deze eenrichtingsrelatie houdt in dat de openbare sleutel zijn eigen berichten niet kan ontcijferen, noch iets kan ontcijferen dat met de particuliere sleutel is versleuteld.

De particuliere sleutel moet privé blijven, d.w.z. om de verbinding te beveiligen, mag geen derde partij deze ooit kennen. De kracht van de gehele verbinding ligt in het feit dat de particuliere sleutel nooit wordt onthuld, omdat dit de enige component is die in staat is berichten te ontcijferen die met de eigen openbare sleutel zijn versleuteld. Daarom moet iedere partij die in staat is om publiekelijk ondertekende berichten te ontsleutelen, in het bezit zijn van de bijbehorende private sleutel.

In tegenstelling tot wat algemeen wordt gedacht, wordt asymmetrische versleuteling niet gebruikt om de gehele SSH-sessie te versleutelen. In plaats daarvan wordt het alleen gebruikt tijdens het sleuteluitwisselingsalgoritme van symmetrische encryptie. Alvorens een beveiligde verbinding te starten, genereren beide partijen tijdelijke publiek-private sleutelparen, en delen hun respectievelijke private sleutels om de gedeelde geheime sleutel te produceren.

Als eenmaal een beveiligde symmetrische communicatie tot stand is gebracht, gebruikt de server de publieke sleutel van de cliënt om een uitdaging te genereren en deze naar de cliënt te zenden voor authenticatie. Als de client het bericht met succes kan ontcijferen, betekent dit dat hij in het bezit is van de private sleutel die nodig is voor de verbinding. De SSH-sessie begint dan.

Hashing

One-way hashing is een andere vorm van cryptografie die in Secure Shell Connections wordt gebruikt. One-way-hash functies verschillen van de bovenstaande twee vormen van encryptie in de zin dat ze nooit bedoeld zijn om te worden ontcijferd. Zij genereren voor elke invoer een unieke waarde van een vaste lengte die geen duidelijke tendens vertoont die kan worden uitgebuit. Daardoor zijn ze praktisch onmogelijk om te keren.

Het is gemakkelijk om een cryptografische hash te genereren uit een gegeven invoer, maar onmogelijk om de invoer uit de hash te genereren. Dit betekent dat als een client de juiste invoer heeft, hij de crypto-grafische hash kan genereren en de waarde ervan kan vergelijken om te controleren of hij de juiste invoer heeft.

SSH gebruikt hashes om de authenticiteit van berichten te verifiëren. Dit wordt gedaan met HMAC’s, oftewel Hash-based Message Authentication Codes. Dit garandeert dat met de ontvangen opdracht op geen enkele wijze is geknoeid.

Terwijl het symmetrische versleutelingsalgoritme wordt gekozen, wordt ook een geschikt algoritme voor berichtauthenticatie gekozen. Dit werkt op een vergelijkbare manier als de keuze van het cijfer, zoals uitgelegd in het gedeelte over symmetrische encryptie.

Elk bericht dat wordt verzonden moet een MAC bevatten, die wordt berekend met behulp van de symmetrische sleutel, het volgnummer van het pakket en de inhoud van het bericht. Het wordt buiten de symmetrisch versleutelde gegevens verzonden als het afsluitende deel van het communicatiepakket.

Hoe werkt SSH met deze versleutelingstechnieken

De manier waarop SSH werkt is door gebruik te maken van een client-server model om authenticatie van twee systemen op afstand en versleuteling van de gegevens die tussen hen in gaan mogelijk te maken.

SSH werkt standaard op TCP poort 22 (hoewel dit kan worden veranderd indien nodig). De host (server) luistert op poort 22 (of een andere aan SSH toegewezen poort) voor inkomende verbindingen. Hij organiseert de beveiligde verbinding door de client te authenticeren en de juiste shell omgeving te openen als de verificatie succesvol is.

De client moet de SSH verbinding beginnen door de TCP handshake met de server te initiëren, te zorgen voor een beveiligde symmetrische verbinding, te verifiëren of de identiteit die door de server wordt getoond overeenkomt met eerdere records (meestal vastgelegd in een RSA key store bestand), en de benodigde gebruikersgegevens te presenteren om de verbinding te authenticeren.

Er zijn twee stadia voor het tot stand brengen van een verbinding: eerst moeten beide systemen het eens worden over encryptiestandaarden om toekomstige communicatie te beschermen, en ten tweede moet de gebruiker zichzelf authentiseren.

Session Encryption Negotiation

Als een client via TCP verbinding probeert te maken met de server, presenteert de server de encryptieprotocollen en de bijbehorende versies die hij ondersteunt. Als de client een soortgelijk overeenkomend paar van protocol en versie heeft, wordt een overeenkomst bereikt en wordt de verbinding gestart met het geaccepteerde protocol. De server gebruikt ook een asymmetrische openbare sleutel die de client kan gebruiken om de authenticiteit van de host te verifiëren.

Als dit eenmaal is vastgesteld, gebruiken de twee partijen een zogenaamd Diffie-Hellman Key Exchange Algoritme om een symmetrische sleutel te maken. Dit algoritme stelt zowel de client als de server in staat om tot een gedeelde encryptiesleutel te komen, die voortaan zal worden gebruikt om de gehele communicatiesessie te versleutelen.

Hier volgt hoe het algoritme werkt op een zeer elementair niveau:

  1. Zowel de client als de server zijn het eens over een zeer groot priemgetal, dat uiteraard geen enkele factor gemeen heeft. Dit priemgetal wordt ook wel de zaadwaarde genoemd.
  2. Daarna komen de twee partijen een gemeenschappelijk encryptiemechanisme overeen om een andere reeks waarden te genereren door de zaadwaarden op een specifieke algoritmische wijze te manipuleren. Deze mechanismen, ook wel encryptiegeneratoren genoemd, voeren grote bewerkingen op het zaad uit. Een voorbeeld van zo’n generator is AES (Advanced Encryption Standard).
  3. Beide partijen genereren onafhankelijk van elkaar een ander priemgetal. Dit wordt gebruikt als een geheime privésleutel voor de interactie.
  4. Deze nieuw gegenereerde privésleutel, met het gedeelde getal en versleutelingsalgoritme (bijv. AES), wordt gebruikt om een publieke sleutel te berekenen die aan de andere computer wordt uitgedeeld.
  5. De partijen gebruiken vervolgens hun persoonlijke privésleutel, de gedeelde publieke sleutel van de andere machine en het oorspronkelijke priemgetal om een uiteindelijke gedeelde sleutel te maken. Deze sleutel wordt onafhankelijk door beide computers berekend, maar creëert aan beide kanten dezelfde encryptiesleutel.
  6. Nu beide partijen een gedeelde sleutel hebben, kunnen ze de hele SSH-sessie symmetrisch versleutelen. Dezelfde sleutel kan worden gebruikt om berichten te versleutelen en te ontsleutelen (lees: sectie over symmetrische versleuteling).

Nu de beveiligde symmetrisch versleutelde sessie tot stand is gebracht, moet de gebruiker worden geauthenticeerd.

Authenticeren van de gebruiker

De laatste stap voordat de gebruiker toegang tot de server krijgt, is het authenticeren van zijn/haar credentials. Hiervoor gebruiken de meeste SSH-gebruikers een wachtwoord. De gebruiker wordt gevraagd de gebruikersnaam in te voeren, gevolgd door het wachtwoord. Deze gegevens gaan veilig door de symmetrisch versleutelde tunnel, zodat er geen kans is dat ze door een derde partij worden buitgemaakt.

Hoewel wachtwoorden worden versleuteld, is het nog steeds niet aan te bevelen wachtwoorden te gebruiken voor beveiligde verbindingen. Dit komt omdat veel bots eenvoudig eenvoudige of standaard wachtwoorden kunnen kraken en toegang tot uw account kunnen krijgen. In plaats daarvan is het aanbevolen alternatief SSH Key Pairs.

Dit zijn een set asymmetrische sleutels die worden gebruikt om de gebruiker te authenticeren zonder dat er een wachtwoord hoeft te worden ingevoerd.

Conclusie

Een diepgaand begrip van de onderliggende manier waarop SSH werkt, kan gebruikers helpen de beveiligingsaspecten van deze technologie te begrijpen. De meeste mensen beschouwen dit proces als zeer complex en onbegrijpelijk, maar het is veel eenvoudiger dan de meeste mensen denken. Als je je afvraagt hoe lang het duurt voor een computer om een hash te berekenen en een gebruiker te authenticeren, wel, dat gebeurt in minder dan een seconde. In feite wordt de meeste tijd besteed aan het overbrengen van gegevens over het Internet.

Hopelijk heeft deze SSH tutorial je geholpen om te zien hoe verschillende technologieën kunnen worden samengevoegd om een robuust systeem te maken waarin elk mechanisme een zeer belangrijke rol te spelen heeft. U weet nu ook waarom Telnet tot het verleden behoorde zodra SSH op de markt kwam.

Voor meer Linux-tutorials kunt u terecht in onze VPS-tutorials-sectie.

Dit bericht is voor het laatst bewerkt op 16 juni 2020 4:37 am

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *