Secure Shell

Secure Shell (SSH) är ett protokoll som används för att ansluta sig säkert mot andra datorer över Internet eller på ett lokalt nätverk. Det finns tillgängligt i två versioner, SSH-1 och SSH-2. SSH är en ersättare till telnet, med skillnaden att all trafik mellan datorerna krypteras. SSH består av en serverdel, som vanligtvis lyssnar på port 22, och en klientdel. Programvaran hos klienten används för att ansluta sig till servern.

SSH-1 använder sig av RSA för att autentisera servern och överföra en sessionsnyckel, SSH-2 RSA eller DSA för autentiseringen och Diffie-Hellmans nyckelöverföring för sessionsnyckeln. Resten av kommunikationen sker med någon symmetrisk kryptoalgoritm, vanligen 3DES, och säkras i SSH-2 med hmac-md5 eller liknande.

Användaren autentiseras vanligen med lösenord eller med RSA- eller DSA-nycklar. 

Vidare kan man med hjälp av SSH sätta upp en tunnel, mellan två datorer. SSH på den ena datorn lyssnar då på en eller flera portar. All trafik på dessa portar kommer att krypteras, skickas i tunneln till den andra datorn, dekrypteras och skickas vidare. På detta sätt kan program som ej har inbyggd kryptering använda en ssh-tunnel för att få en krypterad förbindelse.

Historia 
I början av 1995 utvecklade Tatu Ylönen, forskare vid Tekniska högskolan i Finland, den första versionen av SSH-protokollet (numera kallat SSH-1). Ylönen gjorde SSH tillgängligt som gratisprogram (freeware) i juli 1995, och det blev snabbt populärt. Inom ett halvår beräknades antalet användare av SSH ha vuxit till cirka 20 000 i över femtio länder. 

I originalversionen av SSH användes fri programvara, exempelvis GNU-projektets programkod för stortalsaritmetik, men för senare versioner av SSH används uteslutande "privatägd programvara" (Proprietary software). I december 1995 grundade Ylönen företaget SSH Communications Security för att marknadsföra och utveckla SSH, och inledde ett nära samarbete med F-Secure.

Året därpå, 1996, utvecklades protokollet säkerhetsmässigt och funktionsmässigt. Viktiga brister som konstaterats när en bredare krets av akademiker studerat 1995 års version, till exempel sårbarhet för Man-in-the-middle attacks (MITM), åtgärdades. Bland annat förbättrades säkerheten med hjälp av Diffie-Hellmans nyckelöverföring och säker autenticitetskontroll genom Message authentication code. Det blev också möjligt att ansluta med flera sessioner genom en SSH-anslutning. Eftersom 1996 års förbättringar innebar en bruten bakåtkompatibilitet infördes benämningarna SSH-1 för 1995 års specifikationer, och SSH-2 för det utvecklade protokollet. 

Det fanns en efterfrågan på en fri version av SSH. 1999 hittade Björn Grönvall versionen 1.2.12 av programmet, vilken var den sista av Ylönen som helt använde fria licenser. På basen av denna utvecklades OpenSSH.

År 2006 klassificerade IETF SSH-2 som internetstandard, och fastställde att SSH-1 inte längre bör användas. De flesta servrar och klienter stödjer idag SSH-2. Programvara som inte stödjer SSH-2 används emellertid fortfarande av många, vilket gör det svårt att avvara SSH-1.

Användningsområden 
SSH används idag av mängder av program, men används mest:
 för fjärrstyrning av Unix-liknande operativsystem,
 för filkopiering med SFTP eller SCP och
 för vidarebefordring av portar eller tunnling (eng. tunneling), som ett alternativ till virtuella privata nätverk.

Vid vidarebefordring av portar är kommunikationen säkrad mellan tunnelns ändpunkter. Om klienten kontaktar en SSH-server på samma dator och denna kopplas till en SSH-server på den egentliga värddatorn kan man använda program och protokoll som i sig är osäkra utan att förbindelsen kan avlyssnas eller manipuleras av datorer på nätet mellan ändpunkterna. Användningsområdet för sådana SSH-transporter inkluderar databasservrar, e-postservrar, Windows' fjärrskrivbord och VNC-anslutningar.

Säkerhet 
Det är inte ovanligt att datorer med SSH-server som är direktanslutna till internet utsätts för tusentals oauktoriserade inloggningsförsök dagligen. Datorer som är direktanslutna till Internet brukar därför aldrig tillåta SSH-inloggning med root som användarnamn. Inloggningsmöjligheten kan begränsas till vissa användare eller användargrupper (möjligen "users", som innefattar vanliga användare men inte användarnamn för specialändamål). Det förra gör att angriparen inte får andra rättigheter än vad den specifika användaren har, och då i regel måste hitta andra svagheter för att fullfölja attacken, det senare att illasinnade måste gissa (eller ta reda på) både användarnamn och lösenord för att kunna logga in, vilket gör det betydligt svårare. Dessa inställningar görs på Unix-maskiner vanligen i filen /etc/ssh/sshd_config. Det är inte ovanligt att inloggning som root eller för alla är avstängd som förval, och administratören alltså måste bestämma vem eller vilka grupper som skall få logga in. Användargrupperna kan regleras med nyckelorden "AllowUsers", "DenyUsers", "AllowGroups" och "DenyGroups". Man kan också reglera från vilka datorer inloggning är tillåten, till exempel (på Unix) med direktiv i filen /etc/hosts.allow.

Ytterligare sätt att försvåra intrång av den här typen är att använda olika säkerhetsdaemoner som till exempel sshguard. Dessa fungerar vanligtvis så att de automatiskt, till exempel via iptables eller /etc/hosts.conf, blockerar ip-adresser till klienter som genererat ett visst antal misslyckade inloggningsförsök. Risken med detta är att man kan utestänga legitima användare genom inloggningsförsök med samma ip-adress, antingen ifråga om fleranvändardatorer eller datorer bakom samma NAT-värd eller möjligen med förfalskade ip-adresser (TCP borde försvåra förfalskning) – eller helt enkelt så att den legitima användaren misslyckas för många gånger.

En mer avancerad metod är "dörrknackning" ("port knocking"), som innebär att man först måste kontakta vissa andra portar för att sshd-porten över huvud taget skall öppnas. En enklare variant, som dock ger bara begränsat stöd, är välja att låta SSH-servern lyssna på en annan port än den vanliga, varvid den inte hittas utan att en mängd portar undersöks.

På datorer med många användare är standardlösningar ofta nödvändiga. Därvid är det viktigt att så långt som möjligt tvinga användare att använda starka lösenord. I sammanhang där man lägger stor vikt vid säkerheten kan man förbjuda inloggning med lösenord och istället endast använda RSA- eller DSA-nycklar, varvid det är nyckelhanteringen som blir den svaga punkten.

Referenser

Externa länkar 
 OpenSSH – Information och Unix-versioner (Öppen källkod) 
 PuTTY – Gratis SSH-klient 
 Ganymed SSH2 – Gratis SSH2-klient för Java 
 SSHDOS och SSH2DOS – Gratis SSH- och SSH2-klienter för DOS (Öppen källkod) 
 Gratis SSH-klient för Windows (Öppen källkod) 

Datasäkerhet
Fjärradministrationsprogram
Applikationsskiktsprotokoll