SSH: Veilige Shell
SSH staat voor Secure Shell. Het is ook bekend als Secure Socket Shell. Een cryptografisch netwerkprotocol genaamd Secure Shell (SSH) wordt gebruikt om netwerkdiensten veilig te exploiteren via onveilige netwerken. Client-serverarchitectuur vormt de basis van SSH-applicaties, die een SSH-clientinstantie koppelen aan een SSH-server.
Als opvolger van Telnet en onveilige externe Unix-shellprotocollen zoals de Berkeley Remote Shell (rsh) en de bijbehorende rlogin- en rexec-protocollen, is SSH gemaakt voor Unix-achtige besturingssystemen die gebruik maken van onveilige, leesbare authenticatietokencommunicatie.
Definitie
We kunnen SSH op verschillende manieren toepassen. De eenvoudigste implementatie codeert gegevens met behulp van automatisch gegenereerde publiek-private sleutelparen aan beide uiteinden van een communicatiekanaal en een netwerkverbinding. Daarna authenticeert het de gebruiker met een wachtwoord. Wanneer een gebruiker handmatig een publiek-privaat sleutelpaar genereert, wordt de authenticatie vrijwel voltooid wanneer het sleutelpaar tot stand is gebracht, waardoor een sessie onmiddellijk kan worden gestart zonder dat er om een wachtwoord wordt gevraagd.
hoe je een script uitvoert
In dit geval houdt de eigenaar de bijbehorende privésleutel geheim en wordt de publieke sleutel geïnstalleerd op alle machines die toegang moeten verlenen aan de eigenaar. Hoewel de privésleutel als basis voor authenticatie dient, wordt de sleutel bij het uitvoeren van authenticatie nooit over het netwerk verzonden. SSH bevestigt dat de aanbieder van de publieke sleutel ook over de bijbehorende private sleutel beschikt.
Het verbinden van de onbekende publieke sleutel met een bekende private sleutel in alle versies van SSH is van cruciaal belang voordat deze worden geaccepteerd als legitieme publieke sleutels met ID’s. Als u een openbare sleutel van een aanvaller accepteert zonder deze te valideren, wordt een niet-vertrouwde aanvaller als legitieme gebruiker geaccepteerd.
Creatie
Tatu Ylönen, een computerwetenschapper uit Finland, creëerde SSH voor het eerst in 1995. De verdere ontwikkeling van de protocolsuite vond plaats in veel ontwikkelaarsgroepen, wat leidde tot verschillende implementatie-iteraties. Er zijn implementaties beschikbaar voor alle populaire besturingssystemen, inclusief embedded systemen. OpenSSH, dat de makers van OpenBSD in 1999 als open-source software beschikbaar stelden, is de meest gebruikte softwarestack.
Beheer van OpenSSH-sleutels voor authenticatie
De goedgekeurde lijst met openbare sleutels wordt op Unix-achtige systemen gewoonlijk bewaard in het bestand ~/.ssh/authorized sleutels in de thuismap van de gebruiker, die rechten heeft om op afstand in te loggen. SSH respecteert dit bestand alleen als het door niemand anders dan de eigenaar en root kan worden gewijzigd. Het wachtwoord is niet langer nodig als zowel de openbare sleutel van het externe uiteinde als de overeenkomende privésleutel van het lokale uiteinde aanwezig zijn. Maar we kunnen een wachtwoordzin gebruiken om de privésleutel te vergrendelen voor veel meer bescherming. We kunnen de geheime code ook op algemene locaties doorzoeken, en we kunnen een opdrachtregeloptie gebruiken om het volledige pad op te geven (optie -i voor ssh).
SSH biedt verder geautomatiseerde sleutelgeneratie, gecodeerde, op wachtwoorden gebaseerde authenticatie. In dit scenario kan de aanvaller zich voordoen als de betrouwbare serverzijde, het wachtwoord opvragen en dit verkrijgen (man-in-the-middle-aanval). Aan de serverkant kunnen we wachtwoordverificatie uitschakelen.
Gebruik
SSH maakt gebruik van het client-server-paradigma. Normaal gesproken wordt SSH gebruikt voor logboekregistratie. Het kan ook TCP-poorten tunnelen, X11-verbindingen doorsturen en opdrachten uitvoeren op een extern systeem. Normaal gesproken worden verbindingen met een SSH-daemon die externe verbindingen mogelijk maken, gemaakt met behulp van een SSH-clienttoepassing. Beide zijn vaak te vinden op de meeste hedendaagse besturingssystemen, zoals macOS, Linux-distributies, OpenBSD, FreeBSD, NetBSD, Solaris en OpenVMS. Sommige versies zijn propriëtair, freeware en open source met een verschillende mate van complexiteit en volledigheid (zoals PuTTY en de versie van OpenSSH die bij Cygwin en OpenSSH wordt geleverd). Met name SSH is pas standaard opgenomen in Windows-versies als Windows 10 versie 1709.
Soortgelijke functionaliteit voor bestandsbeheer (synchronisatie, kopiëren en verwijderen op afstand) wordt aangeboden door de gratis en open-source Windows-applicatie WinSCP, die PuTTY als back-end gebruikt. Zonder dat ze op de clientcomputer hoeven te worden geïnstalleerd, zijn WinSCP en PuTTY beschikbaar, verpakt om rechtstreeks vanaf een USB-station te werken. Het inschakelen van een functie in de instellingen-app is vaak vereist om een SSH-server in Windows in te stellen.
Om verbindingsproblemen op te lossen en de veiligheidsrisico's te voorkomen die gepaard gaan met het rechtstreeks blootstellen van een cloudgebaseerde virtuele machine aan internet, is SSH van cruciaal belang bij cloud computing. Een veilige verbinding via internet kan mogelijk worden gemaakt via een virtuele SSH-tunnelcomputer via een firewall. Voor dit protocol heeft de IANA TCP-poort 22, UDP-poort 22 en SCTP-poort 22 aangewezen.
Al in 2001 classificeerde IANA de standaard TCP-poort 22 voor SSH-servers als een van de bekende poorten. Het verbindingsgerichte transportlaagprotocol SCTP kan worden gebruikt om SSH uit te voeren in plaats van TCP.
hoeveel nullen in 1 miljard
Historische vooruitgang
Iteratie 1
Een wachtwoord-snuivende aanval op het netwerk van zijn instelling inspireerde Tatu Ylönen, een onderzoeker aan de Technische Universiteit van Helsinki in Finland, die in 1995 de eerste versie van het protocol creëerde (tegenwoordig bekend als SSH-1).
SSH is ontworpen om de rol over te nemen van eerdere protocollen, waaronder rlogin, TELNET, FTP en rsh, die geen robuuste authenticatie- en geheimhoudingsgaranties hadden. Ylönen stelde zijn applicatie beschikbaar als freeware. In juli 1995 werd het apparaat al snel populair. Eind 1995 waren er 20.000 SSH-gebruikers verspreid over 50 verschillende landen.
Om SSH te promoten en te bevorderen, richtte Ylönen in december 1995 SSH Communications Security op. Verschillende gratis softwarecomponenten, waaronder GNU libgmp, werden gebruikt in de eerste release van het SSH-programma, maar latere iteraties van SSH Communications Security groeiden uit tot steeds meer propriëtaire software. Volgens schattingen waren er in het jaar 2000 twee miljoen gebruikers.
Iteratie 2
De Internet Engineering Task Force (IETF) heeft de werkgroep die verantwoordelijk is voor het creëren van SSH-protocol versie 2 in haar officiële documentatie 'Secsh' genoemd.
SSH-2, een verbeterde protocoliteratie, werd in 2006 een standaard. SSH-1 is niet compatibel met deze versie. SSH-2 biedt functionaliteit en beveiligingsupgrades ten opzichte van SSH-1. De Diffie-Hellman-sleuteluitwisseling en robuuste integriteitsverificatie via berichtauthenticatiecodes zorgen bijvoorbeeld voor een hogere beveiliging. De mogelijkheid om een onbeperkt aantal shell-sessies uit te voeren via een enkele SSH-verbinding is een van de nieuwe mogelijkheden van SSH-2. Omdat SSH-2 geavanceerder is en op grotere schaal wordt gebruikt dan SSH-1, ondersteunen bepaalde implementaties, zoals libssh (v0.8.0+), Lsh en Dropbear, alleen SSH-2.
Iteratie 1.99
RFC 4253 vereiste dat een SSH-server die 2.0 en eerdere versies ondersteunt, in januari 2006 de protocolversie 1.99 moest aangeven, lang nadat versie 2.1 was ontwikkeld. Dit versienummer wordt gebruikt om achterwaartse compatibiliteit aan te geven en niet om een eerdere softwarerevisie weer te geven.
OSSH en OpenSSH
Sinds de laatste versie van het originele SSH-programma, versie 1.2.12, in 1999 onder een open-sourcelicentie werd verspreid, hebben ontwikkelaars aan een gratis softwareversie gewerkt. Dit werd gebruikt als basis voor het OSSH-programma van Björn Grönvall. Kort daarna kloonde het OpenBSD-team het werk van Grönvall om OpenSSH te produceren, dat was opgenomen in OpenBSD Release 2.6. Ze hebben van deze versie een 'portability'-tak gemaakt om OpenSSH naar verschillende besturingssystemen over te zetten.
De meest gebruikte SSH-implementatie vanaf 2005 was OpenSSH, de standaardversie in veel besturingssysteemdistributies. Na het verwijderen van SSH-1-ondersteuning uit de codebase in de OpenSSH 7.6-release, wordt OpenSSH nog steeds bijgewerkt en ondersteunt het het SSH-2-protocol. Ondertussen is OSSH niet langer relevant.
Toepassingen
De gebruiker 'josh' 'SSHed' van de lokale computer 'foo fight' naar de verre machine 'tengwar' om xeyes uit te voeren als voorbeeld van het tunnelen van een X11-programma via SSH. Mensen gebruiken de Windows SSH-client PuTTY om toegang te krijgen tot OpenWrt.
SSH is een protocol dat met veel systemen werkt, waaronder Microsoft Windows en de meeste Unix-varianten (Linux, BSD's, inclusief Apple's macOS en Solaris). De volgende apps hebben mogelijk mogelijkheden nodig die exclusief zijn voor of compatibel zijn met bepaalde SSH-clients of -servers. Het is momenteel bijvoorbeeld alleen mogelijk om de OpenSSH-server en clientimplementatie van het SSH-protocol te gebruiken om een VPN te bouwen.
- Toegang krijgen tot een shell op een externe host (ter vervanging van Telnet en rlogin)
- Voor het uitvoeren van een eenzaam commando op een verre gastheer (ter vervanging van rsh)
- Voor het configureren van de geautomatiseerde (wachtwoordloze) login van een server op afstand (bijvoorbeeld met behulp van OpenSSH)
- Als volledig functionele gecodeerde VPN moet u er rekening mee houden dat alleen de OpenSSH-client en -server deze mogelijkheid ondersteunen.
- Voor het verzenden van X vanaf een verre host (mogelijk via meerdere tussenliggende hosts)
- Voor het gebruik van SSH-clients die het SOCKS-protocol ondersteunen om op internet te surfen via een gecodeerde proxyverbinding.
- Voor het veilig koppelen van de directory van een externe server als bestandssysteem op een lokale machine die gebruik maakt van SSHFS.
- Via een of meer van de hierboven genoemde technologieën voor automatische servermonitoring en -beheer op afstand.
- Voor SSH-compatibele ontwikkeling van mobiele of embedded apparaten.
- Om mechanismen voor bestandsoverdracht te beschermen.
Overdrachtsmethoden voor bestanden
Verschillende systemen voor bestandsoverdracht maken gebruik van Secure Shell-protocollen, zoals
git push-opdracht
- Via SSH is Secure Copy (SCP) ontwikkeld op basis van het RCP-protocol.
- rsync, dat effectiever zou moeten zijn dan SCP, wordt vaak beheerd via een SSH-verbinding.
- Een veilig alternatief voor FTP is SSH File Transfer Protocol (SFTP) (niet te verwarren met FTP over SSH of FTPS)
- FISH, of bestanden die via het shell-protocol worden overgedragen, werd in 1998 geïntroduceerd en ontwikkeld op basis van SSH via Unix-shell-instructies.
- Aspera, ook bekend als Fast and Secure Protocol (FASP), maakt gebruik van SSH voor commando's en voor gegevenstransport, UDP-poorten.
Architectuur
Drie verschillende componenten vormen de gelaagde architectuur van het SSH-protocol:
- Het Transmission Control Protocol (TCP) van TCP/IP wordt vaak gebruikt door de transportlaag (RFC 4253), waarbij poortnummer 22 gereserveerd is als luisterpoort voor de server. Deze laag implementeert encryptie, compressie, integriteitscontrole, initiële sleuteluitwisseling en serverauthenticatie. Hoewel elke implementatie meer mogelijk maakt, stelt deze aan de hogere laag een interface bloot voor het verzenden en ontvangen van pakketten met platte tekst van elk maximaal 32.768 bytes. Meestal regelt de transportlaag, nadat 1 GB aan gegevens is getransporteerd of nadat een uur is verstreken, afhankelijk van wat zich het eerst voordoet, de sleuteluitwisseling.
- Clientauthenticatie wordt afgehandeld via de gebruikersauthenticatielaag (RFC 4252), die ook verschillende authenticatietechnieken biedt. Clientgestuurde authenticatie betekent dat de SSH-client, en niet de server, de gebruiker om een wachtwoord mag vragen. Alleen de verzoeken om authenticatie van de client ontvangen een antwoord van de server. De volgende gebruikersauthenticatietechnieken worden vaak gebruikt:
Wachtwoord , een eenvoudige techniek voor wachtwoordauthenticatie die de mogelijkheid biedt om het wachtwoord te wijzigen. Niet alle software maakt gebruik van deze techniek. - Meestal ondersteunt het ten minste DSA-, ECDSA- of RSA-sleutelparen publieke sleutel is een techniek voor authenticatie op basis van publieke sleutels. Andere implementaties accepteren bovendien X.509-certificaten.
- Single sign-on-functionaliteit voor SSH-sessies wordt aangeboden via GSSAPI authenticatietechnieken, die een uitbreidbaar systeem bieden voor het afhandelen van SSH-authenticatie met behulp van externe mechanismen zoals Kerberos 5 of NTLM. Hoewel OpenSSH een functionele GSSAPI-implementatie heeft, integreren commerciële SSH-implementaties deze technieken vaak voor gebruik in bedrijven.
- Het idee van kanalen die de aangeboden SSH-diensten definiëren, wordt gedefinieerd door de verbindingslaag (RFC 4254). We kunnen meerdere SSH-verbindingen multiplexen vanaf één enkele. Beide verzenden gegevens in beide richtingen. Kanaalverzoeken verzenden out-of-band gegevens die specifiek zijn voor een bepaald kanaal, zoals de exitcode van een proces aan de serverzijde of de verandering van de grootte van een terminalvenster. Bovendien regelt elk kanaal, met behulp van de ontvangstvenstergrootte, zijn stroom. De SSH-client doet een globaal verzoek om een poort aan de serverzijde door te sturen. Kanaaltypen die veel voorkomen, zijn onder meer:
- Shell voor SFTP-, exec- en terminalshells (inclusief SCP-overdrachten)
- Direct-TCPIP voor doorgestuurde verbindingen van de client naar de server.
- Doorgestuurde verbindingen van server naar client met behulp van forwarded-tcpip
- Om de legitimiteit van de host te bevestigen, biedt het SSHFP DNS-record (RFC 4255) vingerafdrukken van de openbare hostsleutel.
Vanwege het open ontwerp kunnen we SSH gebruiken voor een breed scala aan taken, naast het beveiligen van schelpen, waardoor het een grote veelzijdigheid heeft.
Kwetsbaarheden
SSH-1
Vanwege de ontoereikende bescherming van de gegevensintegriteit die CRC-32 in deze protocolversie biedt, werd in 1998 een kwetsbaarheid in SSH 1.5 geïdentificeerd die het ongeoorloofd invoegen van materiaal in een gecodeerde SSH-stroom mogelijk maakte. In de meeste implementaties hebben ze een patch toegevoegd die bekend staat als SSH Compensation Attack Detector. Verschillende van deze herziene implementaties bevatten een nieuwe integer-overflow-fout, waardoor aanvallers willekeurige code konden uitvoeren met root- of de mogelijkheden van de SSH-daemon.
In januari 2001 werd een fout gevonden die aanvallers in staat stelt het laatste blok van een IDEA-gecodeerde sessie te wijzigen. In dezelfde maand werd een andere fout gevonden die een malafide server in staat stelde een client-login door te geven aan een andere server.
Vanwege de inherente kwetsbaarheden wordt SSH-1 over het algemeen als verouderd beschouwd en moet worden vermeden door de fallback van SSH-1 expliciet te verwijderen. De meeste huidige servers en clients ondersteunen SSH-2.
Herstel van platte tekst voor CBC
In november 2008 werd in alle versies van SSH een theoretische kwetsbaarheid ontdekt die het mogelijk maakte om tot 32 bits leesbare tekst op te halen uit een blok gecodeerde tekst dat was gecodeerd met de standaardcoderingsmethode van die tijd, CBC. De eenvoudigste oplossing is om over te schakelen naar CTR. modus, in plaats van de CBC-modus, waardoor SSH immuun wordt voor de aanval.
NSA verdacht van ontsleuteling
De vrijgave van gevoelige documenten door Edward Snowden aan Der Spiegel op 28 december 2014 impliceert dat de National Security Agency mogelijk bepaalde SSH-communicatie kan decoderen.