[Lintulan etusivu] -> [Ohjelmistot] -> [ssh] -> [Miten ssh toimii]

Lintula

Miten ssh toimii


Tällä sivulla on kuvattu ssh-ohjelmiston toiminta teoriassa. Kuvaus on huomattavasti yksinkertaistettu säilyttäen kuitenkin oleelliset asiat. Ohjelmiston toiminnan tunteminen auttaa ymmärtämään ongelmia, joita ssh:n käytössä saattaa esiintyä. Kaikkien ssh:n käyttäjien tulisi lukea tämä ohje, jotta he osaisivat välttää ssh:hon liittyvät tietoturvaongelmat. Vaikka sivulla esiintyy viitteitä Lintulaan, asiat on sovellettavissa mihin tahansa ssh-ohjelmistoa käyttävään ympäristöön.

Mikä on ssh

Ssh -ohjelmisto on kehitetty korvaamaan turvattomat rsh ja telnet ohjelmistot pääteyhteyksissä ja osittain ftp-ohjelmisto tiedostojen siirrossa. Ssh pyrkii paikkaamaan edellä mainittujen ohjelmistojen puutteita muunmuassa yhteyden salauksella ja palvelimen tunnistamisella. Ssh tarjoaa myös mahdollisuuden putkittaa mikä tahansa yksittäistä porttia käyttävä tcp-yhteys salatun yhteyden yli. Yleisimpänä esimerkkinä tästä on Unixissa käytetyn graafisen X11 ikkunoinnin verkkoyhteys.

Ssh käyttää palvelimen ja haluttaessa käyttäjän tunnistamiseen julkisen avaimen kryptografiaa. Julkisen avaimen kryptografiassa yhteyden osapuolella (esimerkiksi ssh-palvelimella tai tunnistettavalla käyttäjällä) on avainpari, johon kuuluu julkinen ja salainen avain. Julkisen avaimen kryptografiassa avainpari on luotu niin, että julkisella avaimella salattu viesti voidaan purkaa vain salaisella avaimella ja toisinpäin.

Varsinainen tietoliikenteen salaus ssh:ssa hoidetaan symmetrisellä salauksella ja käytettävissä on useita eri salausmenetelmiä.

Ssh-yhteyden vaiheet

Kun ssh-asiakasohjelma (jatkossa asiakas), kuten Unixin ssh -komento tai Windowsissa toimiva PuTTY tai SSH Secure Shell, ottaa yhteyttä toisessa tietokoneessa (jatkossa kohdekone) pyörivään ssh-palvelinohjelmistoon (jatkossa palvelin), tapahtuu seuraavat vaiheet ennen varsinaisen pääteyhteyden muodostumista tai tiedoston siirtoa.

Yhteyden muodostus ja palvelimen tunnistaminen

  1. Asiakasohjelma avaa tcp-yhteyden kohdekoneeseen. Jotta tämä onnistuisi, yhteys pitää olla sallittu kaikissa matkan varrella olevissa palomuureissa ja pääsylistoissa.

  2. Kun yhteys on avattu, palvelin lähettää oman julkisen avaimensa asiakkaalle.

  3. Asiakas vertaa saamaansa avainta omaan tietokantaansa, johon on tallennettu tunnettujen palvelinten julkiset avaimet. Tietokannasta etsitään avain palvelimen IP-osoitteen ja/tai nimen perusteella. Asiakasohjelmalla on yleensä kaksi erillistä tietokantaa. Toinen on konekohtainen koneen ylläpitäjän hallitsema ja toinen on käyttäjäkohtainen ja käyttäjän itsensä hallitsema (Lintulassa tämä löytyy käyttäjän .ssh/ -hakemistosta tiedostosta nimeltä known_hosts). Mikäli palvelimen nimi ja/tai IP-osoite löytyy molemmista tietokannoista, käytetään yleensä ensisijaisesti käyttäjäkohtaista tietokantaa.

    Jos palvelimen IP-osoitteella ja/tai nimellä... 
Palvelimen luotettava tunnistus on erittäin tärkeää, jotta voidaan varmistua, ettei yhteyden välissä ole kolmatta osapuolta, joka pääsisi kaappaamaan käyttäjäntunnistustiedot ja/tai yhteyden sisältöä.

Käyttäjän tunnistaminen

Kun palvelin on saatu luotettavasti tunnistettua ja asiakkaan ja palvelimen välille on saatu neuvoteltua salattu yhteys, palvelin vaatii asiakkaalta käyttäjäntunnistustietoja. Käyttäjäntunnistus voi tapahtua useilla eri menetelmillä (palvelimelle on konfiguroitu, mitkä menetelmät sallitaan):

Palvelimen tunnistamiseen liittyviä ongelmia

Palvelimen luotettava tunnistaminen on erittäin tärkeä osa yhteyden avausta, koska ilman palvelimen tunnistamista ei voida olla varmoja siitä, ettei yhteyden välissä ole kolmatta osapuolta, joka voi kaapata yhteyden yli kulkevat käyttäjäntunnistustiedot ja/tai muun liikenteen.

Palvelimen tunnistaminen perustuu siihen, että asiakas tuntee palvelimen julkisen avaimen tai avaimen sormenjäljen. Mikäli julkista avainta tai sen sormenjälkeä ei tunneta, palvelimen tunnistamista ei voida pitää luotettavana. Tämän takia Lintulan kotisivuilla on ssh avainten sormenjälkihakukone, jolla voi tarkistaa Lintulan koneiden julkisten avainten sormenjäljet ja verrata näitä ssh-yhteyttä avattaessa asiakasohjelman antamaan sormenjälkeen. Lisäksi Lintulan koneet tuntevat automaattisesti toistensa julkiset avaimet, eli Lintulan koneelta toiselle kirjauduttaessa asiakasohjelman ei koskaan pitäisi pyytää käyttäjää varmentamaan palvelimen lähettämää avainta.

Koska asiakasohjelma tallentaa varmennetut palvelinten julkiset avaimet omaan tietokantaansa, on tärkeää, että palvelimen avainpari ei esimerkiksi ylläpitotoimien takia turhaan muutu. Mikäli palvelimen avainpari muuttuu, käyttäjä joutuu tekemään ylimääräistä työtä ja poistamaan palvelimen vanhan julkisen avaimen tietokannastaan ja hyväksymään uuden avaimen (hyväksyminen vaatii toki taas uuden avaimen sormenjäljen tunnistamista). Palvelimen avainparin vaihtaminen tulee kuitenkin tehdä, mikäli on syytä epäillä, että palvelimen salainen avain on päässyt paljastumaan, koska tällöin on mahdollista toteuttaa man-in-the-middle tyyppinen hyökkäys.

Käyttäjän tunnistamiseen liittyviä ongelmia

Salasanaan perustuva tunnistus

Salasanapohjaisessa käyttäjäntunnistuksessa ongelmat liittyvät käyttäjän salasanan joutumiseen vääriin käsiin ja tällöin palvelimelle voidaan hyökätä käyttäjän tunnuksella ja salasanalla. Salasanan paljastuminen aiheuttaa toki aina ongelmia, vaikka ssh:ta ei käytettäisikään, mutta ssh saattaa lisätä riskiä salasanan paljastumiselle, mikäli käyttäjä ei ole huolellinen. Lisäksi ssh-palvelimen olemassaolo helpottaa paljastuneiden salasanojen hyväksikäyttöä ja heikkojen salasanojen etsimistä.

Ssh-käytössä salasana saattaa paljastua, mikäli palvelimentunnistusta ei ole hoidettu luotettavasti (ks palvelimen tunnistamiseen liittyvät ongelmat) ja ssh-yhteyttä on päästy salakuuntelemaan. Tällöin hyökkääjä voi näin saada käyttäjän käyttäjätunnuksen ja salasanan tietoonsa. Käyttäjän tulee siis aina varmentaa sormenjäljen aitous (esimerkiksi Lintulan ssh avainten sormenjälkihakukoneella).

Salasana saattaa paljastua myös, mikäli käytettävään asiakaskoneeseen on asennettu jonkinlainen keylogger -ohjelmisto tai hakkeroitu ssh-asiakasohjelma, joka kerää talteen käyttäjän ssh-asiakasohjelmalle syöttämät palvelimen nimen, käyttäjätunnuksen ja salasanan. Onkin tärkeää, että käyttäjä on varma käyttämänsä koneen turvallisuudesta käyttäessään. Lintulaan on murtauduttu useita kertoja eri käyttäjien tunnuksille tälläistä menetelmää käyttäen.

Julkinen ssh-palvelin, johon sallitaan yhteydet kaikkialta Internetistä, mahdollistaa myös salasanojen hyvyyden testaamisen. Hyökkääjä voi ottaa yhteyden ssh-palvelimelle tietyllä käyttäjätunnuksella ja kokeilla erilaisia salasanoja. Mikäli käyttäjän salasana on huono, hyökkääjä voi päästä murtautumaan ssh-palvelimelle. Tämän takia käyttäjän tulee pitää huoli siitä, että salasana on riittävän hyvä (tietoa Lintulan salasanasta ja ohjeita hyvän salasanan valintaan löytyy täältä).

Julkisen avaimen menetelmään perustuva tunnistus

Julkisen avaimen menetelmään perustuvan käyttäjätunnistuksen ongelmat liittyvät käyttäjän avainparin salaisen avaimen turvallisuuteen. Mikäli salainen avain joutuu vääriin käsiin, sen avulla pääsee kirjautumaan ssh-palvelimelle, jonne avainparin julkinen avain on asennettu (eli Lintulan tapauksessa kaikille Lintulan koneille, joille käyttäjä pääsee ssh:lla kirjautumaan). Tämän takia on erittäin tärkeää, että salaisen avaimen turvallisuudesta varmistutaan.

Ssh-ohjelmisto pyrkii varmistamaan käyttäjän salaisen avaimen turvallisuuden salakirjoittamalla avaimen sisältävän tiedoston käyttäjän antamalla salalauseella (passphrase). Salalause asetetaan avainparin generoinnin yhteydessä (sitä voi toki muuttaa jälkikäteen). Useissa julkisen avaimen autentikointia esittelevissä ohjeissa suositellaan salalauseen jättämistä tyhjäksi, jolloin salaisen avaimen sisältävää tiedostoa ei salakirjoiteta. Näin ei kuitenkaan saa tehdä tehdä kuin sellaisissa tapauksissa, joissa avaimen turvallisuudesta voidaan muilla keinoin varmistua ja salakirjoitetun avaimen käyttäminen ei ole mahdollista. Mikäli Lintulan koneille asentaa julkisen avaimen, jonka salainen avain ei ole salakirjoitettu, tulee käyttäjän aina ottaa yhteyttä ylläpitoon, jotta voidaan selvittää, olisiko salakirjoitetun avaimen käyttö mahdollista.

Salakirjoitetun salaisen avaimen käyttö on hieman ongelmallista, koska aina avainta käytettäessä käyttäjä joutuu kirjoittamaan salalauseen. Tämän ongelman voi kuitenkin kiertää käyttämällä ssh-agent -ohjelmistoa (ks. ssh-agent ohje).


29.08.2016