Secure Shell

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În tehnologia informației și telecomunicații SSH ( Secure SHell , shell securizat) este un protocol care vă permite să stabiliți o sesiune criptată la distanță printr- o interfață de linie de comandă cu o altă gazdă dintr-o rețea de calculatoare . Protocolul este cel care a înlocuit analogul, dar nesigur, Telnet .

Descriere

Clientul SSH are o interfață de linie de comandă similară cu cea a telnet și rlogin , dar întreaga comunicare (adică atât autentificarea - reciprocă - cât și sesiunea de lucru) are loc într-o manieră criptată. Din acest motiv, SSH a devenit un standard de facto pentru administrarea de la distanță a sistemelor UNIX și a dispozitivelor de rețea , făcând protocolul telnet învechit, considerat prea periculos din cauza lipsei sale de protecție împotriva ascultării.

Clientul și serverul SSH sunt instalate sau instalabile pe multe versiuni de UNIX , GNU / Linux , macOS și Microsoft Windows . De asemenea, este disponibil ca instrument de administrare pe unele dispozitive de rețea . Autoritatea Internet Assigned Numbers ( IANA ) a atribuit portul 22 TCP și UDP serviciului SSH, deși este încă posibilă implementarea serviciului SSH pe alte porturi care nu sunt definite de IANA .

Comanda pentru sistemele asemănătoare UNIX este după cum urmează:

 ssh [opțiuni] nume utilizator @ gazdă [comandă]

Prima versiune a SSH a fost complet open source , în timp ce a doua a devenit comercială; cu toate acestea, există o versiune gratuită numită OpenSSH care se bazează pe prima versiune, dar care oferă suport pentru a doua versiune.

Arhitectura protocolului

Protocolul SSH se bazează pe o arhitectură care poate fi reprezentată în trei niveluri distincte: Protocolul stratului de transport, Protocolul de autentificare a utilizatorului și Protocolul stratului de conexiune. Împărțirea în trei niveluri independente garantează o flexibilitate extremă a protocolului: independența logică a nivelurilor vă permite să modificați configurația conexiunii fără a fi nevoie să modificați nivelurile superioare sau inferioare ale protocolului, de exemplu, puteți modifica compresia informațiilor fără a fi nevoie să modificați protocolul de criptare sau autentificare al sistemului.

Este important să specificați că nivelurile menționate mai sus nu au nicio relație cu nivelurile standardului ISO / OSI , deoarece acestea sunt niveluri interne ale protocolului SSH, care la rândul lor pot fi poziționate imediat deasupra stratului de transport ISO / OSI. De fapt, nivelurile interne ale protocolului SSH acoperă ultimele trei niveluri ale stivei ISO / OSI prin aplicarea unei alte organizații decât cea prevăzută de standardul pentru rețele.

Protocolul stratului de transport

Protocolul de strat de transport este primul dintre cele trei niveluri ale protocolului SSH, conține toate protocoalele și procedurile utilizate în stabilirea și crearea canalului de comunicație client-server criptat. În cadrul stratului de transport, au loc autentificarea serverului, schimbul de chei, criptarea, comprimarea și verificarea integrității pachetelor. Nivelul cuprinde parțial nivelul sesiunii și parțial nivelul de prezentare al standardului ISO / OSI. Conexiunea creată utilizează în mod normal protocolul TCP / IP pentru comunicații la nivelul rețelei și al stratului de transport, dar este teoretic independentă de acesta. În stratul de transport integritatea pachetelor este verificată, dar cazurile în care pachetele de conexiune se pierd nu sunt tratate, în astfel de cazuri sesiunea este încheiată și trebuie restabilită complet. Din aceste motive, protocoalele de transport orientate spre conexiune, cum ar fi TCP, sunt recomandate cu tărie pentru a preveni pierderea pachetelor și închiderea conexiunii.

Algoritmi de negociere

Negocierea algoritmilor este unul dintre primii pași în stabilirea unei conexiuni SSH. Pentru a determina ce algoritmi să utilizeze în conexiunea SSH, clientul și serverul trebuie să schimbe lista algoritmilor pe care îi acceptă pentru conexiune. Lista conține toți algoritmii disponibili în ordine de preferință, preferința și algoritmii disponibili sunt determinați de configurația software-ului client și server. După schimbul listelor, se aleg protocoalele disponibile pe ambele mașini, acordând prioritate algoritmilor superiori în ordine de preferință. Dacă nu există algoritmi comuni între mașini, conexiunea este încheiată.

Schimb de chei

După definirea algoritmilor care vor fi utilizați în conexiune, are loc unul dintre cei mai importanți pași în stabilirea canalului de comunicație sigur: schimbul de chei. Pentru a garanta securitatea și confidențialitatea comunicării, este esențial să se stabilească algoritmi siguri de schimb de chei, o eroare de securitate în schimbul de chei ar compromite întreaga conexiune. Negocierea cheilor are loc la începutul fiecărei conexiuni, pentru a asigura o securitate mai mare, cheile sunt, în general, renegociate la fiecare oră sau la fiecare gigabyte de date trecute prin conexiune.

Cei mai utilizați algoritmi de schimb de chei sunt:

  • diffie-hellman-group1-sha1
  • diffie-hellman-group14-sha1

Cei doi algoritmi utilizați sunt variante ale algoritmului de schimb de chei Diffie-Hellman în care a fost adăugat un sistem de certificare de server folosind o cheie gazdă. Observând șirurile de identificare ale algoritmilor este posibil să se deducă că acestea variază doar pentru termenul grup X, acest termen definește grupul utilizat în definirea parametrilor algoritmului Diffie-Hellman, aceste grupuri sunt documentate în cadrul RFC3526.

Algoritmul Diffie-Hellman a fost certificat ca una dintre cele mai sigure metode de schimb de chei pe un canal de comunicare nesigur și se numără printre cei mai utilizați algoritmi din lume. Datorită numărului mare de calcule necesare pentru schimbul de chei Diffie-Hellman, este posibil să se utilizeze algoritmul RSA la fel de sigur, dar mai puțin solicitant în ceea ce privește puterea de calcul în sistemele mai vechi cu o putere de calcul mai mică.

Autentificare server

Autentificarea serverului este utilizată pentru a împiedica un utilizator rău intenționat să „identifice” serverul furnizând acreditările utilizatorului ( spoofing de către om în mijlocul atacului ). Pentru a face acest lucru, este generată o pereche de chei asimetrică pentru fiecare server. Cheia privată rămâne pe server. Cheia publică trebuie să fie cunoscută de client, clientul poate obține o cheie de server folosind magazinele de chei publice disponibile pe web sau primind-o direct de la server în timpul primei conexiuni.

Autentificarea are loc în timpul schimbului de chei Diffie-Hellman, serverul creează un mesaj criptat cu cheia sa privată și îl trimite către client, clientul îl decriptează cu cheia publică a serverului verificând identitatea serverului, dacă decriptarea mesajului are succes, clientul continuă cu stabilirea conexiunii, altfel oprește procedura. Deoarece numai serverul ar trebui să cunoască cheia privată, clientul poate determina identitatea serverului cu care comunică.

Criptare conexiune

Odată ce este definită o cheie secretă care este cunoscută doar de client și server, se poate utiliza un protocol de criptare simetrică pentru a cripta comunicația dintre client și server.

Un algoritm de criptare simetrică vă permite să utilizați o singură cheie pentru a cripta și decripta informațiile. Într-un algoritm de cheie simetrică, cheia partajată trebuie definită înainte ca conexiunea să fie inițializată utilizând o metodă de comunicare cu cheie sigură care în SSH are loc utilizând algoritmul Diffie-Hellman. Algoritmii cu cheie simetrică garantează un standard ridicat de securitate și un cost redus în ceea ce privește puterea de calcul (spre deosebire de algoritmii cu cheie asimetrică, cum ar fi algoritmul RSA).

Lista algoritmilor simetrici care pot fi utilizați de protocolul SSH include:

  • 3des-cbc
  • blowfish-cbc
  • twofish256-cbc
  • twofish-cbc
  • twofish192-cbc
  • twofish128-cbc
  • aes256-cbc
  • aes192-cbc
  • aes128-cbc
  • serpent256-cbc
  • serpent192-cbc
  • șarpe128-cbc
  • arcfour
  • idea-cbc
  • cast128-cbc

Cei mai utilizați algoritmi sunt AES și 3DES prezenți pe aproape toate computerele.

Este posibil să se utilizeze un algoritm de criptare nul care de fapt nu efectuează nicio operațiune de criptare, această alegere este puternic descurajată, deoarece ar face întreaga comunicare nesigură.

După stabilirea protocoalelor care trebuie utilizate și după efectuarea schimbului de chei utilizând protocolul Diffie-Hellman, este posibil să se stabilească conexiunea criptată cu algoritmul de cheie simetric definit anterior.

Comprimarea informațiilor

Protocolul SSH vă permite să aplicați algoritmi de compresie a informațiilor la fluxul de date care trece prin conexiune. În prezent este acceptată compresia utilizând biblioteca zlib .

Integritatea pachetului

Verificarea integrității informațiilor este un proces care vă permite să verificați dacă datele conținute într-un pachet primit de una dintre cele două gazde ale conexiunii se potrivesc cu datele trimise de cealaltă mașină. Procesul de control al informațiilor vă permite să identificați orice erori în faza de trimitere și, mai presus de toate, vă permite să identificați orice atac de reluare al computerelor din afara comunicației.

Algoritmii MAC (Message Authentication Code) care pot fi utilizați în protocolul SSH sunt:

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

Procesul de verificare a integrității este recomandat, dar nu obligatoriu pe o conexiune SSH.

Verificarea integrității pachetelor se efectuează după definirea cheii secrete a conexiunii, înainte de a nu putea fi efectuată o verificare a integrității.

Protocol de autentificare utilizator

După crearea unui canal de comunicare sigur, protocolul ssh asigură autentificarea utilizatorului utilizând metode definite în Protocolul de autentificare utilizator. Acest strat al arhitecturii protocolului SSH include operațiunile cerute de standardul ISO / OSI pentru stratul de sesiune.

Autentificare cu cheie publică

Autentificarea cu cheie publică este cea mai sigură metodă de autentificare implementată în protocolul SSH și trebuie să fie întotdeauna disponibilă pe fiecare server. Această metodă de autentificare se bazează pe criptare asimetrică . Cel mai frecvent utilizat algoritm de criptare asimetrică pentru generarea cheilor este RSA.

Procedură
Generarea și transferul de chei

Pentru autentificare, clientul generează o pereche de chei publice / private utilizând un algoritm de criptare asimetric acceptat de protocolul SSH utilizând comanda ssh-keygen. Odată ce cheile au fost generate, utilizatorul trebuie să transfere cheia sa publică către server, unde este în general stocată într-un fișier special în directorul principal al utilizatorului de pe server; cheia privată este păstrată pe client și nu trebuie dezvăluită, pentru a asigura o securitate mai mare este posibilă protejarea cheii private cu o parolă ( expresie de acces ). Utilizatorul își poate transfera cheia publică către server fie prin suport de stocare fizic, fie prin comanda ssh-copy-id.

Autentificare

Serverul sursă exploatează caracteristicile particulare ale algoritmilor criptografici asimetrici pentru a verifica identitatea utilizatorului. În timpul fazei de autentificare, serverul generează un șir aleatoriu de 256 de biți, îl criptează utilizând cheia publică a utilizatorului și algoritmul de criptare corespunzător cheii și îl trimite clientului. Clientul decriptează mesajul folosind cheia sa privată și trimite hash-ul șirului primit către server, dacă hash-ul șirului client se potrivește cu hash-ul șirului server, utilizatorul este autentificat. Numai proprietarul cheii private a utilizatorului este capabil să decripteze corect mesajul criptat al serverului, în acest fel serverul poate verifica identitatea clientului.

În autentificarea cheii publice, nu este necesară nicio parolă de la utilizator, cu excepția cazului în care a fost aplicată o parolă pentru cheia privată.

Autentificare prin parolă

Autentificarea prin parolă este cea mai simplă metodă de autentificare acceptată de protocolul SSH.

Utilizatorul furnizează un nume de utilizator și o parolă, serverul compară aceste date cu baza de date a utilizatorilor sistemului de operare. Acest schimb are loc într-un canal criptat, deci nu riscă să fie interceptat.

Procedură:

  1. A $ ⇒ B: SSH_MSG_USERAUTH_REQUEST, pappy, ssh-userauth, tastatură interactivă
  2. B $ ⇒ A: SSH_MSG_USERAUTH_INFO_REQUEST, pappy, autentificare prin parolă, 1, „Introduceți parola”
  3. A $ ⇒ B: SSH_MSG_USERAUTH_INFO_RESPONSE, 1, „dragoste”
  4. B $ ⇒ A: SSH_MSG_USERAUTH_SUCCESS.

Pentru a preveni brute force atacuri, un DenyHosts sau fail2ban poate fi folosit instrument.

Protocol de conectare

Connection Layer este cel mai înalt nivel al protocolului SSH, permite stabilirea terminalelor interactive, executarea comenzilor de la distanță, redirecționarea conexiunilor și redirecționarea aplicațiilor grafice X11. Stratul de conexiune gestionează aceste funcții utilizând mai multe canale de comunicații care trec prin același tunel criptat al stratului de transport.

Canale

Fiecare terminal interactiv deschis și fiecare conexiune redirecționată prin conexiunea SSH pot ocupa un canal de comunicație. Deoarece este posibil să se stabilească mai multe canale, fiecare canal are un număr de identificare, acest număr este utilizat pentru a distinge pachetele aparținând diferitelor canale permițând aplicației SSH să reconstruiască diferitele comunicații deschise prin tunelul criptat. Deschiderea unui canal are loc atunci când ambele părți sunt de acord cu crearea acestuia, dacă una dintre cele două părți refuză, canalul nu este creat. Atâta timp cât unul dintre gazde nu a confirmat încă deschiderea canalului, niciun pachet nu are voie să utilizeze acel canal

Port forwarding

Datorită flexibilității extreme a protocolului SSH, este posibil să se creeze tuneluri criptate capabile să efectueze sesiuni TCP arbitrare în cadrul conexiunii criptate, permițând protejarea protocoalelor nesecurizate de interceptare sau eludarea limitărilor de rutare.

Această caracteristică se numește redirecționare port și vă permite să deschideți un socket TCP pe SSH client (redirecționare port locală ) sau pe server (redirecționare port distanță ). Conexiunile primite pe acest port sunt redirecționate de la celălalt capăt al conexiunii SSH, către o gazdă și un port specificate.

De exemplu, cu această comandă ne conectăm la host1 , redirecționând portul 10022 al mașinii unde lansăm clientul ssh la portul 22 al host2 printr-un canal sigur între client și host1:

 ssh host1 -L 10022: host2: 22

În timp ce această conexiune este activă, conectarea la portul client 10022 va fi redirecționată către portul host2 22 .

Exemplu de utilizare a redirecționării porturilor

Redirecționarea porturilor este utilă, de exemplu, pentru furnizarea asistenței la distanță a mașinilor fără un sistem securizat de gestionare la distanță. Este posibil să creați un tunel sigur între un port client și un port de pe serverul la distanță sau orice terță mașină din spatele serverului la distanță, atâta timp cât mașina server a activat redirecționarea. Acest lucru este posibil în mod normal, fără a instala pachete suplimentare.

De exemplu, în următorul scenariu

 CLIENT - [rețea securizată] -> server ssh - [rețea nesigură] -> MAȘINA A TREIA

Dacă dorim să folosim un desktop la distanță pe a treia mașină, trebuie doar să ne conectăm la serverul ssh, inclusiv un tunel între un port local al mașinii în care lucrăm și portul 3389 al MAI MULTEI TREI. După aceea, pur și simplu porniți clientul RDP și conectați-vă la localhost: (portul ales).

Clientul ssh local va stabili o conexiune criptată cu serverul, va crea un tunel în cadrul acestei conexiuni criptate și va trimite conexiunea RDP prin acest tunel. La rândul său, serverul va stabili o sesiune TCP normală cu a treia mașină de pe portul solicitat.

Ca urmare, clientul RDP va fi pus în comunicare cu a treia mașină. Conexiunea dintre serverul ssh și a treia mașină nu va fi criptată, deci este recomandabil ca comunicarea dintre aceste două mașini să nu fie expusă riscului de interceptare. A treia mașină va vedea conexiunea TCP provenind de la serverul ssh în locul clientului.

X redirecționare

Redirecționarea porturilor este utilă și pentru transportarea aplicațiilor X Window pe o conexiune SSH. De asemenea, SSH setează automat variabilele de mediu corespunzătoare, astfel încât aplicațiile X lansate de la un terminal la distanță să fie afișate pe afișajul de la care a fost inițiată conexiunea.

Redirecționarea X pe partea client trebuie activată prin trecerea opțiunii „ -X ” în timp ce pe partea server fișierul de configurare / etc / ssh / sshd_config trebuie modificat activând directiva X11Forwarding (nu uitați să reporniți serverul după ce ați realizat treceți la fișierul de configurare).

Elemente conexe

Alte proiecte

linkuri externe

Controlul autorității GND ( DE ) 4628726-7