close

Sikker Shell

Hop til navigation Hop til søgning

Inden for IT og telekommunikation er SSH ( Secure SHell ) en protokol , der giver dig mulighed for at etablere en krypteret fjernsession via en kommandolinjegrænseflade med en anden vært på et computernetværk . Det er protokollen, der har erstattet det analoge, men usikre, Telnet .

Beskrivelse

SSH - klienten har en kommandolinjegrænseflade, der ligner den for telnet og rlogin , men hele kommunikationen (dvs. både autentificeringen - gensidig - og arbejdssessionen ) foregår på en krypteret måde. Af denne grund er SSH blevet en de facto- standard for fjernadministration af UNIX -systemer og netværksenheder , hvilket gør telnet-protokollen forældet, der anses for at være for farlig på grund af dens manglende beskyttelse mod aflytning.

SSH - klienten og serveren er installeret eller kan installeres på mange versioner af UNIX , GNU / Linux , macOS og Microsoft Windows . Det er også tilgængeligt som et administrationsværktøj på nogle netværksenheder . Internet Assigned Numbers Authority ( IANA ) har tildelt port 22 TCP og UDP til SSH-tjenesten , selvom det stadig er muligt at implementere SSH-tjenesten på andre porte, der ikke er defineret af IANA .

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

ssh [indstillinger] brugernavn @ vært [kommando]

Den første version af SSH var fuldstændig open source , mens den anden blev kommerciel; der er dog en gratis version kaldet OpenSSH , som er baseret på den første version, men som understøtter den anden version.

Protokolarkitektur

SSH-protokollen er baseret på en arkitektur, der kan repræsenteres i tre forskellige niveauer: Transport Layer Protocol, User Authentication Protocol og Connection Layer Protocol. Opdelingen i tre uafhængige niveauer garanterer ekstrem fleksibilitet af protokollen: den logiske uafhængighed af niveauerne giver dig mulighed for at ændre konfigurationen af ​​forbindelsen uden at skulle ændre de øvre eller nedre niveauer af protokollen, for eksempel kan du ændre informationskomprimeringen protokol uden at skulle ændre systemets krypterings- eller autentificeringsprotokol.

Det er vigtigt at specificere, at de ovennævnte niveauer ikke har noget forhold til niveauerne i ISO/OSI -standarden , da de er interne niveauer til SSH-protokollen, som igen kan placeres umiddelbart over ISO/OSI - transportlaget . Faktisk dækker de interne niveauer af SSH-protokollen de sidste tre niveauer af ISO / OSI-stakken ved at anvende en anden organisation end den, der er forudset af standarden for netværk.

Transport Layer Protocol

Transport Layer Protocol er det første af de tre niveauer af SSH-protokollen, den indeholder alle de protokoller og procedurer, der bruges til at etablere og skabe den krypterede klient-server kommunikationskanal. Inden for transportlaget finder serverautentificering, nøgleudveksling, kryptering, komprimering og pakkeintegritetstjek sted. Niveauet omfatter dels sessionsniveauet og dels præsentationsniveauet for ISO/OSI-standarden. Den oprettede forbindelse bruger normalt TCP/IP-protokollen til kommunikation på netværket og transportlaget, men er teoretisk uafhængig af den. I transportlaget kontrolleres pakkernes integritet, men de tilfælde, hvor forbindelsespakkerne går tabt, håndteres ikke, i sådanne tilfælde afsluttes sessionen og skal genetableres fuldstændigt. Af disse grunde anbefales forbindelsesorienterede transportprotokoller såsom TCP kraftigt for at forhindre pakketab og lukning af forbindelse.

Algoritmeforhandling

Forhandlingsalgoritmer er et af de første trin i etableringen af ​​en SSH-forbindelse. For at bestemme, hvilke algoritmer der skal bruges i SSH-forbindelsen, skal klienten og serveren udveksle listen over algoritmer, de understøtter til forbindelsen. Listen indeholder alle tilgængelige algoritmer i præferencerækkefølge, præference og tilgængelige algoritmer bestemmes af konfigurationen af ​​klient- og serversoftwaren. Når udvekslingen af ​​listerne er afsluttet, vælges de tilgængelige protokoller på begge maskiner, hvilket giver prioritet til de højere algoritmer i præferencerækkefølge. Hvis der ikke er fælles algoritmer mellem maskinerne, afbrydes forbindelsen.

Nøgleudveksling

Efter definitionen af ​​de algoritmer, der skal bruges i forbindelsen, finder et af de vigtigste trin i etableringen af ​​den sikre kommunikationskanal sted: udveksling af nøgler. For at garantere kommunikationens sikkerhed og privatliv er det vigtigt at etablere sikre nøgleudvekslingsalgoritmer, en sikkerhedsfejl i nøgleudvekslingen ville kompromittere hele forbindelsen. Forhandlingen af ​​nøglerne finder sted i begyndelsen af ​​hver forbindelse, for at sikre større sikkerhed genforhandles nøglerne generelt hver time eller hver gigabyte data, der passerer gennem forbindelsen.

De mest brugte nøgleudvekslingsalgoritmer er :

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

De to anvendte algoritmer er variationer af Diffie-Hellman nøgleudvekslingsalgoritmen, hvor et servercertificeringssystem er blevet tilføjet ved hjælp af en værtsnøgle. Ved at observere de identificerende strenge af algoritmerne er det muligt at udlede, at de kun varierer for udtrykket groupX, dette udtryk definerer gruppen, der bruges i definitionen af ​​parametrene for Diffie-Hellman-algoritmen, disse grupper er dokumenteret i RFC3526.

Diffie-Hellman-algoritmen er blevet certificeret som en af ​​de mest sikre nøgleudvekslingsmetoder over en usikker kommunikationskanal og er blandt de mest udbredte algoritmer i verden. På grund af det høje antal beregninger, der kræves til Diffie-Hellman nøgleudveksling, er det muligt at bruge RSA -algoritmen lige så sikker, men mindre krævende med hensyn til computerkraft i ældre systemer med mindre computerkraft.

Servergodkendelse

Servergodkendelse bruges til at forhindre en ondsindet bruger i at "efterligne" serveren ved at angive brugerens legitimationsoplysninger ( spoofing af mand i midten af ​​angrebet ). For at gøre dette genereres et asymmetrisk nøglepar for hver server. Den private nøgle forbliver på serveren. Den offentlige nøgle skal være kendt af klienten, klienten kan få en servernøgle ved hjælp af offentlige nøglelagre, der er tilgængelige på nettet, eller ved at modtage den direkte fra serveren under den første forbindelse.

Autentificering finder sted under Diffie-Hellman nøgleudveksling, serveren opretter en krypteret besked med sin private nøgle og sender den til klienten, klienten dekrypterer den med serverens offentlige nøgle, der bekræfter serverens identitet, hvis dekryptering af beskeden lykkes, klienten fortsætter med etableringen af ​​forbindelsen, ellers afbryder den proceduren. Da kun serveren skal kende den private nøgle, er klienten i stand til at bestemme identiteten på den server, den kommunikerer med.

Forbindelseskryptering

Når en hemmelig nøgle er defineret, som udelukkende er kendt af klienten og serveren, kan en symmetrisk krypteringsprotokol bruges til at kryptere kommunikationen mellem klient og server.

En symmetrisk krypteringsalgoritme giver dig mulighed for at bruge en enkelt nøgle til at kryptere og dekryptere information. I en symmetrisk nøglealgoritme skal den delte nøgle defineres, før forbindelsen initialiseres ved hjælp af en sikker nøglekommunikationsmetode, der i SSH foregår ved hjælp af Diffie-Hellman algoritmen. De symmetriske nøglealgoritmer garanterer en høj sikkerhedsstandard og en lav pris i form af computerkraft (i modsætning til de asymmetriske nøglealgoritmer som f.eks. RSA-algoritmen).

Listen over symmetriske algoritmer, der kan bruges af SSH-protokollen inkluderer:

  • 3des-cbc
  • blowfish-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øbt128-cbc

De mest brugte algoritmer er AES og 3DES, der findes på stort set alle computere.

Det er muligt at bruge en nulkrypteringsalgoritme, der faktisk ikke udfører nogen krypteringsoperation, dette valg frarådes kraftigt, da det ville gøre hele kommunikationen usikker.

Efter at have etableret de protokoller, der skal bruges, og efter at have udført nøgleudvekslingen ved hjælp af Diffie-Hellman-protokollen, er det muligt at etablere den krypterede forbindelse med den tidligere definerede symmetriske nøglealgoritme.

Kompression af information

SSH-protokollen giver dig mulighed for at anvende informationskomprimeringsalgoritmer til datastrømmen, der passerer gennem forbindelsen. Komprimering ved hjælp af zlib- biblioteket er i øjeblikket understøttet .

Pakkeintegritet

Informationsintegritetstjekket er en proces, der giver dig mulighed for at verificere, at dataene i en pakke, der modtages af en af ​​de to værter i forbindelsen, stemmer overens med de data, der sendes af den anden maskine. Informationskontrolprocessen giver dig mulighed for at identificere eventuelle fejl i afsendelsesfasen og giver dig først og fremmest mulighed for at identificere eventuelle genafspilningsangreb fra computere uden for kommunikationen.

MAC (Message Authentication Code) algoritmerne, der kan bruges i SSH-protokollen er:

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

Integritetstjekprocessen anbefales, men ikke obligatorisk på en SSH-forbindelse.

Integritetskontrollen af ​​pakkerne udføres efter definitionen af ​​forbindelsens hemmelige nøgle, før det ikke er muligt at udføre en integritetskontrol.

Brugergodkendelsesprotokol

Efter oprettelse af en sikker kommunikationskanal sørger ssh-protokollen for brugergodkendelse ved hjælp af metoder, der er defineret i brugergodkendelsesprotokollen. Dette lag af SSH-protokolarkitekturen inkluderer de operationer, der kræves af ISO / OSI-standarden for sessionslaget.

Offentlig nøglegodkendelse

Offentlig nøglegodkendelse er den mest sikre autentificeringsmetode implementeret i SSH-protokollen og skal altid være tilgængelig på hver server. Denne godkendelsesmetode er baseret på asymmetrisk kryptering . Den mest almindeligt anvendte asymmetriske krypteringsalgoritme til nøglegenerering er RSA.

Fremgangsmåde
Nøglegenerering og -overførsel

For at autentificere genererer klienten et offentligt/privat nøglepar ved hjælp af en asymmetrisk krypteringsalgoritme understøttet af SSH-protokollen ved hjælp af ssh-keygen-kommandoen. Når nøglerne er blevet genereret, skal brugeren overføre sin offentlige nøgle til serveren, hvor den generelt er gemt i en speciel fil i brugerens hjemmemappe på serveren; den private nøgle opbevares på klienten og må ikke videregives, for at sikre større sikkerhed er det muligt at beskytte den private nøgle med en adgangskode ( passphrase ). Brugeren kan overføre deres offentlige nøgle til serveren enten gennem fysiske lagermedier eller gennem kommandoen ssh-copy-id.

Godkendelse

Kildeserveren udnytter de særlige karakteristika ved asymmetriske kryptografiske algoritmer til at verificere brugerens identitet. Under autentificeringsfasen genererer serveren en tilfældig streng på 256 bit, krypterer den ved hjælp af brugerens offentlige nøgle og krypteringsalgoritmen svarende til nøglen og sender den til klienten. Klienten dekrypterer meddelelsen ved hjælp af sin private nøgle og sender hashen af ​​den modtagne streng til serveren, hvis hashen af ​​klientstrengen matcher hashen af ​​serverstrengen, bliver brugeren autentificeret. Kun ejeren af ​​brugerens private nøgle er i stand til korrekt at dekryptere serverens krypterede besked, så serveren er i stand til at verificere klientens identitet.

Ved offentlig nøglegodkendelse kræves der ingen adgangskode af brugeren, medmindre en adgangssætning er blevet anvendt på den private nøgle.

Adgangskodegodkendelse

Adgangskodegodkendelse er den enkleste godkendelsesmetode, der understøttes af SSH-protokollen.

Brugeren angiver et brugernavn og en adgangskode, serveren sammenligner disse data med operativsystemets brugerdatabase. Denne udveksling finder sted inden for en krypteret kanal, så den er ikke i risiko for aflytning.

Procedure:

  1. A $ ⇒ B: SSH_MSG_USERAUTH_REQUEST, pappy, ssh-userauth, keyboard-interactive
  2. B $ ⇒ A: SSH_MSG_USERAUTH_INFO_REQUEST, pappy, adgangskode-godkendelse, 1, "Indtast adgangskode"
  3. A $ ⇒ B: SSH_MSG_USERAUTH_INFO_RESPONSE, 1, "kærlighed"
  4. B $ ⇒ A: SSH_MSG_USERAUTH_SUCCESS.

For at forhindre brute force -angreb kan et DenyHosts- eller Fail2ban- værktøj bruges .

Connection Layer Protocol

Forbindelseslaget er det højeste niveau af SSH-protokollen, det tillader etablering af interaktive terminaler, udførelse af fjernkommandoer, videresendelse af forbindelser og videresendelse af X11-grafikapplikationer. Forbindelseslaget administrerer disse funktioner ved hjælp af flere kommunikationskanaler, der passerer gennem den samme krypterede tunnel i transportlaget.

Kanalerne

Hver åben interaktiv terminal og hver forbindelse videresendt gennem SSH-forbindelsen kan optage en kommunikationskanal. Da det er muligt at etablere flere kanaler, hver kanal har et identifikationsnummer, bruges dette nummer til at skelne pakker, der tilhører forskellige kanaler, hvilket gør det muligt for SSH-applikationen at rekonstruere de forskellige kommunikationer, der er åbne gennem den krypterede tunnel. Åbningen af ​​en kanal sker, når begge parter er enige om dens oprettelse, hvis en af ​​de to parter nægter, oprettes kanalen ikke. Så længe en af ​​værterne endnu ikke har bekræftet åbningen af ​​kanalen, må ingen pakker bruge den kanal

Port forwarding

Takket være SSH-protokollens ekstreme fleksibilitet er det muligt at skabe krypterede tunneler , der er i stand til at bære vilkårlige TCP-sessioner inden for den krypterede forbindelse, hvilket gør det muligt at beskytte usikrede protokoller mod aflytning eller at omgå routingbegrænsninger.

Denne funktion kaldes port forwarding , og den giver dig mulighed for at åbne en TCP- socket på klientens SSH ( lokal portvideresendelse) eller på serveren ( fjernportvideresendelse ). Forbindelser modtaget på denne port videresendes fra den anden ende af SSH-forbindelsen til en specificeret vært og port .

For eksempel, med denne kommando forbinder vi til host1, og videresender porten 10022på den maskine, hvor vi starter klientens ssh, til porten 22af host2​​gennem en sikker kanal mellem klient og vært1:

ssh host1 -L 10022: host2: 22

Mens denne forbindelse er aktiv, bliver forbindelse til din port 10022omdirigeret clienttil porten 22host2.

Eksempel på brug af port forwarding

Port forwarding er nyttig for eksempel til at yde fjernassistance til maskiner uden et sikkert fjernstyringssystem. Det er muligt at oprette en sikker tunnel mellem en klientport og en port på fjernserveren eller en tredje maskine bag fjernserveren, så længe servermaskinen har aktiveret videresendelse. Dette er normalt muligt uden at installere yderligere pakker.

For eksempel i følgende scenarie

KLIENT - [sikkert netværk] -> ssh-server - [usikkert netværk] -> TREDJE MASKINE

Hvis vi ønsker at bruge et fjernskrivebord på den tredje maskine, skal du bare oprette forbindelse til ssh-serveren inklusive en tunnel mellem en lokal port på maskinen, hvor vi arbejder, og port 3389 på den TREDJE MASKINE. Derefter skal du bare starte RDP-klienten og oprette forbindelse til localhost: (valgt port).

Den lokale ssh-klient vil etablere en krypteret forbindelse med serveren, oprette en tunnel i denne krypterede forbindelse og sende RDP -forbindelsen over denne tunnel. Serveren vil igen etablere en normal TCP -session med den tredje maskine på den anmodede port.

Som et resultat vil RDP-klienten blive sat i kommunikation med den tredje maskine. Forbindelsen mellem ssh-serveren og den tredje maskine bliver ikke krypteret, så det tilrådes, at kommunikationen mellem disse to maskiner ikke er i fare for aflytning. Den tredje maskine vil se TCP-forbindelsen komme fra ssh-serveren i stedet for klienten.

X videresendelse

Portvideresendelse er også nyttig til at bære X Window- applikationer over en SSH-forbindelse. SSH indstiller også automatisk de relevante miljøvariabler, så X applikationer, der er startet fra en fjernterminal, vises på skærmen, hvorfra forbindelsen blev startet.

X-videresendelse på klientsiden skal aktiveres ved at sende " -X " muligheden, mens konfigurationsfilen / etc / ssh / sshd_config på serversiden skal ændres ved at aktivere direktivet X11Forwarding(husk at genstarte serveren, når ændringen er foretaget til filkonfigurationen).

Relaterede emner

Andre projekter

Eksterne links