Sikkert skall

Innen IT og telekommunikasjon er SSH ( Secure SHell ) en protokoll som lar deg etablere en kryptert ekstern sesjon via et kommandolinjegrensesnitt med en annen vert på et datanettverk . Det er protokollen som har erstattet det analoge, men usikre, Telnet .

Beskrivelse

SSH -klienten har et kommandolinjegrensesnitt som ligner på telnet og rlogin , men hele kommunikasjonen (dvs. både autentiseringen - gjensidig - og arbeidsøkten ) foregår på en kryptert måte. Av denne grunn har SSH blitt en de facto- standard for fjernadministrasjon av UNIX -systemer og nettverksenheter , noe som gjør telnet-protokollen foreldet, ansett som for farlig på grunn av dens manglende beskyttelse mot avlytting.

SSH - klienten og serveren er installert eller installerbar på mange versjoner av UNIX , GNU / Linux , macOS og Microsoft Windows . Det er også tilgjengelig som et administrasjonsverktøy på enkelte nettverksenheter . Internet Assigned Numbers Authority ( IANA ) har tildelt port 22 TCP og UDP til SSH-tjenesten , selv om det fortsatt er mulig å implementere SSH-tjenesten på andre porter som ikke er definert av IANA .

Kommandoen på UNIX-lignende systemer er som følger:

ssh [alternativer] brukernavn @ vert [kommando]

Den første versjonen av SSH var helt åpen kildekode , mens den andre ble kommersiell; men det er en gratisversjon kalt OpenSSH som er basert på den første versjonen, men som gir støtte for den andre versjonen.

SSH-protokollen er basert på en arkitektur som kan representeres i tre forskjellige nivåer: Transport Layer Protocol, User Authentication Protocol og Connection Layer Protocol. Inndelingen i tre uavhengige nivåer garanterer ekstrem fleksibilitet av protokollen: den logiske uavhengigheten til nivåene lar deg endre konfigurasjonen av forbindelsen uten å måtte endre de øvre eller nedre nivåene av protokollen, for eksempel kan du endre informasjonskomprimeringen protokollen uten å måtte endre krypterings- eller autentiseringsprotokollen til systemet.

Det er viktig å spesifisere at nivåene nevnt ovenfor ikke har noe forhold til nivåene til ISO/OSI -standarden da de er interne nivåer til SSH-protokollen som igjen kan plasseres rett over ISO/OSI - transportlaget . Faktisk dekker de interne nivåene til SSH-protokollen de tre siste nivåene i ISO / OSI-stakken ved å bruke en annen organisasjon enn den som er forutsatt av standarden for nettverk.

Transport Layer Protocol er det første av de tre nivåene i SSH-protokollen, den inneholder alle protokollene og prosedyrene som brukes i etableringen og opprettelsen av den krypterte klient-server kommunikasjonskanalen. Innenfor transportlaget foregår serverautentisering, nøkkelutveksling, kryptering, komprimering og pakkeintegritetssjekk. Nivået omfatter dels sesjonsnivået og dels presentasjonsnivået til ISO/OSI-standarden. Forbindelsen som opprettes bruker normalt TCP/IP-protokollen for kommunikasjon på nettverket og transportlaget, men er teoretisk uavhengig av den. I transportlaget kontrolleres integriteten til pakkene, men tilfellene der tilkoblingspakkene går tapt håndteres ikke, i slike tilfeller avsluttes økten og må reetableres fullstendig. Av disse grunner anbefales tilkoblingsorienterte transportprotokoller som TCP på det sterkeste for å forhindre pakketap og koblingsstenging.

Algoritmeforhandling

Forhandlingsalgoritmer er et av de første trinnene for å etablere en SSH-forbindelse. For å bestemme hvilke algoritmer som skal brukes i SSH-forbindelsen, må klienten og serveren utveksle listen over algoritmer de støtter for tilkoblingen. Listen inneholder alle tilgjengelige algoritmer i preferanserekkefølge, preferanse og tilgjengelige algoritmer bestemmes av konfigurasjonen av klient- og serverprogramvaren. Når utvekslingen av listene er fullført, velges protokollene som er tilgjengelige på begge maskinene, og prioriterer de høyere algoritmene i preferanserekkefølge. Hvis det ikke er felles algoritmer mellom maskinene, avsluttes forbindelsen.

Nøkkelutveksling

Etter definisjonen av algoritmene som skal brukes i forbindelsen, skjer et av de viktigste trinnene for å etablere den sikre kommunikasjonskanalen: utveksling av nøkler. For å garantere sikkerheten og personvernet til kommunikasjonen er det viktig å etablere sikre nøkkelutvekslingsalgoritmer, en sikkerhetsfeil i nøkkelutvekslingen vil kompromittere hele forbindelsen. Forhandlingen av nøklene finner sted i begynnelsen av hver tilkobling, for å sikre større sikkerhet reforhandles nøklene vanligvis hver time eller hver gigabyte med data som går gjennom tilkoblingen.

De mest brukte nøkkelutvekslingsalgoritmene er :

  • diffie-hellman-gruppe1-sha1
  • diffie-hellman-gruppe14-sha1

De to algoritmene som brukes er varianter av Diffie-Hellman-nøkkelutvekslingsalgoritmen der et serversertifiseringssystem er lagt til ved hjelp av en vertsnøkkel. Ved å observere de identifiserende strengene til algoritmene er det mulig å utlede at de varierer kun for begrepet groupX, dette begrepet definerer gruppen som brukes i definisjonen av parameterne til Diffie-Hellman-algoritmen, disse gruppene er dokumentert i RFC3526.

Diffie-Hellman-algoritmen har blitt sertifisert som en av de sikreste nøkkelutvekslingsmetodene over en usikker kommunikasjonskanal og er blant de mest brukte algoritmene i verden. På grunn av det høye antallet beregninger som kreves for Diffie-Hellman nøkkelutveksling, er det mulig å bruke RSA -algoritmen like sikker, men mindre krevende når det gjelder datakraft i eldre systemer med mindre datakraft.

Serverautentisering

Serverautentisering brukes til å forhindre at en ondsinnet bruker "ettergir seg" serveren ved å oppgi brukerens legitimasjon ( forfalskning av mann i midtangrepet ). For å gjøre dette genereres et asymmetrisk nøkkelpar for hver server. Den private nøkkelen forblir på serveren. Den offentlige nøkkelen må være kjent av klienten, klienten kan få en servernøkkel ved å bruke offentlige nøkkellagre tilgjengelig på nettet eller ved å motta den direkte fra serveren under den første tilkoblingen.

Autentisering skjer under Diffie-Hellman nøkkelutveksling, serveren oppretter en kryptert melding med sin private nøkkel og sender den til klienten, klienten dekrypterer den med serverens offentlige nøkkel for å bekrefte identiteten til serveren, hvis dekryptering av meldingen er vellykket, klienten fortsetter med etableringen av forbindelsen, ellers avbryter den prosedyren. Siden bare serveren skal kjenne den private nøkkelen, er klienten i stand til å bestemme identiteten til serveren den kommuniserer med.

Tilkoblingskryptering

Når en hemmelig nøkkel er definert som utelukkende er kjent av klienten og serveren, kan en symmetrisk krypteringsprotokoll brukes til å kryptere kommunikasjonen mellom klient og server.

En symmetrisk krypteringsalgoritme lar deg bruke en enkelt nøkkel for å kryptere og dekryptere informasjon. I en symmetrisk nøkkelalgoritme må den delte nøkkelen defineres før forbindelsen initialiseres ved hjelp av en sikker nøkkelkommunikasjonsmetode som i SSH foregår ved hjelp av Diffie-Hellman-algoritmen. De symmetriske nøkkelalgoritmene garanterer en høy sikkerhetsstandard og en lav kostnad når det gjelder datakraft (i motsetning til de asymmetriske nøkkelalgoritmene som RSA-algoritmen).

Listen over symmetriske algoritmer som kan brukes av SSH-protokollen inkluderer:

  • 3des-cbc
  • blåsefisk-cbc
  • twofish256-cbc
  • tofisk-cbc
  • tofisk192-cbc
  • tofisk128-cbc
  • aes256-cbc
  • aes192-cbc
  • aes128-cbc
  • slange256-cbc
  • slange192-cbc
  • slange128-cbc
  • arcfour
  • idé-cbc
  • støpt128-cbc

De mest brukte algoritmene er AES og 3DES som finnes på praktisk talt alle datamaskiner.

Det er mulig å bruke en nullkrypteringsalgoritme som faktisk ikke utfører noen krypteringsoperasjon, dette valget frarådes på det sterkeste da det ville gjøre hele kommunikasjonen usikker.

Etter å ha etablert protokollene som skal brukes og etter å ha utført nøkkelutvekslingen ved hjelp av Diffie-Hellman-protokollen, er det mulig å etablere den krypterte forbindelsen med den tidligere definerte symmetriske nøkkelalgoritmen.

Komprimering av informasjon

SSH-protokollen lar deg bruke informasjonskomprimeringsalgoritmer på datastrømmen som går gjennom forbindelsen. Komprimering ved hjelp av zlib -biblioteket støttes for øyeblikket .

Pakkeintegritet

Informasjonsintegritetskontrollen er en prosess som lar deg verifisere at dataene i en pakke mottatt av en av de to vertene for forbindelsen samsvarer med dataene som sendes av den andre maskinen. Informasjonskontrollprosessen lar deg identifisere eventuelle feil i sendefasen, og fremfor alt lar deg identifisere eventuelle replay -angrep fra datamaskiner utenfor kommunikasjonen.

MAC - algoritmene (Message Authentication Code) som kan brukes i SSH-protokollen er:

  • hmac-sha1
  • hmac-sha1-96
  • hmac-md5
  • hmac-md5-96

Integritetssjekkprosessen anbefales, men ikke obligatorisk på en SSH-tilkobling.

Integritetskontrollen av pakkene utføres etter definisjonen av den hemmelige nøkkelen til forbindelsen, før det ikke er mulig å gjennomføre en integritetssjekk.

Etter å ha opprettet en sikker kommunikasjonskanal, sørger ssh-protokollen for brukerautentisering ved hjelp av metoder definert i brukerautentiseringsprotokollen. Dette laget av SSH-protokollarkitekturen inkluderer operasjonene som kreves av ISO / OSI-standarden for øktlaget.

Offentlig nøkkelautentisering

Offentlig nøkkelautentisering er den sikreste autentiseringsmetoden implementert i SSH-protokollen og må alltid være tilgjengelig på hver server. Denne autentiseringsmetoden er basert på asymmetrisk kryptering . Den mest brukte asymmetriske krypteringsalgoritmen for nøkkelgenerering er RSA.

Prosedyre Nøkkelgenerering og overføring

For å autentisere genererer klienten et offentlig/privat nøkkelpar ved hjelp av en asymmetrisk krypteringsalgoritme støttet av SSH-protokollen ved å bruke ssh-keygen-kommandoen. Når nøklene er generert, må brukeren overføre sin offentlige nøkkel til serveren hvor den vanligvis er lagret i en spesiell fil i brukerens hjemmekatalog på serveren; den private nøkkelen oppbevares på klienten og må ikke avsløres, for å sikre større sikkerhet er det mulig å beskytte den private nøkkelen med et passord ( passordfrase ). Brukeren kan overføre sin offentlige nøkkel til serveren enten gjennom fysiske lagringsmedier eller gjennom ssh-copy-id-kommandoen.

Autentisering

Kildeserveren utnytter de spesielle egenskapene til asymmetriske kryptografiske algoritmer for å verifisere brukerens identitet. Under autentiseringsfasen genererer serveren en tilfeldig streng på 256 biter, krypterer den ved hjelp av brukerens offentlige nøkkel og krypteringsalgoritmen som tilsvarer nøkkelen og sender den til klienten. Klienten dekrypterer meldingen ved å bruke sin private nøkkel og sender hashen til den mottatte strengen til serveren, hvis hashen til klientstrengen samsvarer med hashen til serverstrengen, blir brukeren autentisert. Bare eieren av brukerens private nøkkel er i stand til å dekryptere den krypterte meldingen til serveren på riktig måte, slik at serveren er i stand til å bekrefte identiteten til klienten.

Ved offentlig nøkkelautentisering kreves det ikke noe passord fra brukeren med mindre en passordfrase er brukt på den private nøkkelen.

Passordautentisering

Passordautentisering er den enkleste autentiseringsmetoden som støttes av SSH-protokollen.

Brukeren oppgir et brukernavn og passord, serveren sammenligner disse dataene med operativsystemets brukerdatabase. Denne utvekslingen foregår innenfor en kryptert kanal, så det er ikke risiko for avlytting.

Fremgangsmåte:

  1. A $ ⇒ B: SSH_MSG_USERAUTH_REQUEST, pappy, ssh-userauth, keyboard-interactive
  2. B $ ⇒ A: SSH_MSG_USERAUTH_INFO_REQUEST, pappa, passord-autentisering, 1, "Skriv inn passord"
  3. A $ ⇒ B: SSH_MSG_USERAUTH_INFO_RESPONSE, 1, "kjærlighet"
  4. B $ ⇒ A: SSH_MSG_USERAUTH_SUCCESS.

For å forhindre brute force -angrep kan et DenyHosts- eller Fail2ban- verktøy brukes .

Connection Layer er det høyeste nivået av SSH-protokollen, det tillater etablering av interaktive terminaler, utførelse av eksterne kommandoer, videresending av tilkoblinger og videresending av X11-grafikkapplikasjoner. Tilkoblingslaget administrerer disse funksjonene ved å bruke flere kommunikasjonskanaler som går gjennom den samme krypterte tunnelen i transportlaget.

Kanalene

Hver åpen interaktiv terminal og hver forbindelse som videresendes gjennom SSH-forbindelsen kan oppta en kommunikasjonskanal. Siden det er mulig å etablere flere kanaler, hver kanal har et identifikasjonsnummer, dette nummeret brukes til å skille pakker som tilhører forskjellige kanaler, slik at SSH-applikasjonen kan rekonstruere de forskjellige kommunikasjonene som er åpne gjennom den krypterte tunnelen. Åpningen av en kanal skjer når begge parter er enige om å opprette den, hvis en av de to partene nekter, opprettes ikke kanalen. Så lenge en av vertene ennå ikke har bekreftet åpningen av kanalen, har ingen pakker lov til å bruke den kanalen

Portvideresending

Takket være den ekstreme fleksibiliteten til SSH-protokollen, er det mulig å lage krypterte tunneler som er i stand til å bære vilkårlige TCP-økter innenfor den krypterte forbindelsen, noe som gjør det mulig å beskytte usikrede protokoller mot avlytting, eller å omgå rutingbegrensninger.

Denne funksjonen kalles portvideresending , og den lar deg åpne en TCP- socket på klient-SSH ( lokal portvideresending) eller på serveren ( ekstern portvideresending). Tilkoblinger mottatt på denne porten videresendes fra den andre enden av SSH-tilkoblingen til en spesifisert vert og port .

For eksempel, med denne kommandoen kobler vi til host1, videresender porten 10022på maskinen der vi starter klientens ssh til porten 22til host2gjennom en sikker kanal mellom klient og vert1:

ssh host1 -L 10022: host2: 22

Mens denne tilkoblingen er aktiv, blir tilkobling til porten 10022til clientdeg omdirigert til porten 22til host2.

Eksempel på bruk av portvideresending

Portvideresending er nyttig for eksempel for å gi ekstern assistanse til maskiner uten et sikkert fjernstyringssystem. Det er mulig å opprette en sikker tunnel mellom en klientport og en port på den eksterne serveren eller en hvilken som helst tredje maskin bak den eksterne serveren, så lenge servermaskinen har aktivert videresending. Dette er normalt mulig uten å installere noen ekstra pakker.

For eksempel i følgende scenario

KLIENT - [sikkert nettverk] -> ssh-server - [usikkert nettverk] -> TREDJE MASKIN

Hvis vi ønsker å bruke et eksternt skrivebord på den tredje maskinen, er det bare å koble til ssh-serveren inkludert en tunnel mellom en lokal port på maskinen der vi jobber og port 3389 til den TREDJE MASKINEN. Etter det er det bare å starte RDP-klienten og koble til localhost: (valgt port).

Den lokale ssh-klienten vil etablere en kryptert forbindelse med serveren, opprette en tunnel innenfor denne krypterte forbindelsen og sende RDP -forbindelsen over denne tunnelen. Serveren vil i sin tur etablere en normal TCP -sesjon med den tredje maskinen på den forespurte porten.

Som et resultat vil RDP-klienten bli satt i kommunikasjon med den tredje maskinen. Forbindelsen mellom ssh-serveren og den tredje maskinen vil ikke være kryptert, så det anbefales at kommunikasjonen mellom disse to maskinene ikke er i fare for avlytting. Den tredje maskinen vil se TCP-tilkoblingen som kommer fra ssh-serveren i stedet for klienten.

X videresending

Portvideresending er også nyttig for å overføre X Window- applikasjoner over en SSH-tilkobling. SSH setter også automatisk de riktige miljøvariablene, slik at X-applikasjoner som startes fra en ekstern terminal, vises på skjermen som tilkoblingen ble startet fra.

X-videresending på klientsiden må aktiveres ved å sende " -X "-alternativet mens på serversiden må konfigurasjonsfilen / etc / ssh / sshd_config endres ved å aktivere direktivet X11Forwarding(husk å starte serveren på nytt når endringen er gjort til filkonfigurasjonen).

Relaterte elementer

Andre prosjekter

Eksterne lenker