SSH: Varna lupina
SSH pomeni Secure Shell. Znan je tudi kot Secure Socket Shell. Kriptografski omrežni protokol, imenovan Secure Shell (SSH), se uporablja za varno delovanje omrežnih storitev v nevarnih omrežjih. Arhitektura odjemalskega strežnika je temelj aplikacij SSH, ki povezujejo instanco odjemalca SSH s strežnikom SSH.
Kot naslednik Telneta in nevarnih oddaljenih protokolov lupine Unix, kot je Berkeley Remote Shell (rsh) in z njim povezana protokola rlogin in rexec, je bil SSH ustvarjen za operacijske sisteme, podobne Unixu, ki uporabljajo nezaščiteno komunikacijo žetonov za preverjanje pristnosti z navadnim besedilom.
Opredelitev
SSH lahko uporabimo na več različnih načinov. Najenostavnejša izvedba šifrira podatke s samodejno generiranimi javno-zasebnimi pari ključev na obeh koncih komunikacijskega kanala in omrežne povezave. Po tem avtentikira uporabnika z geslom. Ko uporabnik ročno ustvari par javno-zasebnih ključev, je preverjanje pristnosti praktično zaključeno, ko je par ključev vzpostavljen, kar omogoča takojšen zagon seje brez poziva za geslo.
java pretvori char v niz
V tem primeru lastnik hrani ustrezen zasebni ključ tajnega, javni ključ pa je nameščen na vseh napravah, ki morajo lastniku omogočiti dostop. Čeprav zasebni ključ služi kot osnova za preverjanje pristnosti, se ključ pri izvajanju preverjanja pristnosti nikoli ne pošlje po omrežju. SSH potrjuje, da ima ponudnik javnega ključa tudi ustrezen zasebni ključ.
Povezovanje neznanega javnega ključa z znanim zasebnim ključem v vseh različicah SSH je ključnega pomena, preden jih sprejmete kot legitimne javne ključe z ID-ji. Če od napadalca sprejmete javni ključ, ne da bi ga preverili, boste napadalca, ki mu ne zaupate, sprejeli kot zakonitega uporabnika.
Ustvarjanje
Tatu Ylönen, računalniški znanstvenik iz Finske, je leta 1995 prvič ustvaril SSH. Nadaljnji razvoj paketa protokolov je potekal v številnih skupinah razvijalcev, kar je privedlo do različnih ponovitev implementacije. Na voljo so izvedbe za vse priljubljene operacijske sisteme, vključno z vgrajenimi sistemi. OpenSSH, ki so ga ustvarjalci OpenBSD dali na voljo kot odprtokodno programje leta 1999, je najpogosteje uporabljen sklad programske opreme.
Upravljanje ključev OpenSSH za avtentikacijo
Seznam odobrenih javnih ključev se običajno hrani v sistemih, podobnih Unixu, v datoteki ~/.ssh/authorized keys v uporabnikovem domačem imeniku, ki ima privilegije za oddaljeno prijavo. SSH spoštuje to datoteko le, če je ne more spreminjati nihče drug kot lastnik in root. Geslo ni več potrebno, če sta prisotna javni ključ oddaljenega konca in ustrezni zasebni ključ lokalnega konca. Lahko pa uporabimo geslo za zaklepanje zasebnega ključa za veliko večjo zaščito. Skrivno kodo lahko iščemo tudi na pogostih lokacijah in lahko uporabimo možnost ukazne vrstice, da zagotovimo njeno celotno pot (možnost -i za ssh).
SSH nadalje zagotavlja avtomatsko generiranje ključev, šifrirano avtentikacijo na podlagi gesla. Napadalec v tem scenariju se lahko lažno predstavlja kot zaupanja vredna stran strežnika, zahteva geslo in ga pridobi (napad človeka v sredini). Na strani strežnika lahko izklopimo preverjanje pristnosti gesla.
Uporaba
SSH uporablja paradigmo odjemalec-strežnik. Običajno se za beleženje uporablja SSH. Prav tako lahko tunelira vrata TCP, posreduje povezave X11 in izvaja ukaze v oddaljenem sistemu. Običajno se povezave z demonom SSH, ki omogočajo oddaljene povezave, izvedejo z uporabo odjemalske aplikacije SSH. Oba pogosto najdemo v večini sodobnih operacijskih sistemov, kot so macOS, distribucije Linuxa, OpenBSD, FreeBSD, NetBSD, Solaris in OpenVMS. Nekatere različice so lastniške, brezplačne in odprtokodne z različnimi stopnjami kompleksnosti in celovitosti (na primer PuTTY in različica OpenSSH, vključena v Cygwin in OpenSSH). Predvsem SSH ni privzeto vključen v različice sistema Windows do različice 1709 sistema Windows 10.
Podobno funkcijo upravljanja datotek (sinhronizacija, kopiranje in brisanje na daljavo) ponuja brezplačna in odprtokodna aplikacija za Windows WinSCP, ki uporablja PuTTY kot zaledje. Ne da bi ju bilo treba namestiti na odjemalski računalnik, sta WinSCP in PuTTY na voljo zapakirana za delovanje neposredno s pogona USB. Za nastavitev strežnika SSH v sistemu Windows je pogosto potrebno omogočiti funkcijo v aplikaciji za nastavitve.
SSH je v računalništvu v oblaku ključnega pomena za reševanje težav s povezavo in preprečevanje varnostnih tveganj neposrednega izpostavljanja virtualnega stroja v oblaku internetu. Varno povezavo prek interneta je mogoče omogočiti prek virtualnega računalnika tunela SSH prek požarnega zidu. Za ta protokol je IANA določila vrata TCP 22, vrata UDP 22 in vrata SCTP 22.
Že leta 2001 je IANA privzeta vrata TCP 22 za strežnike SSH uvrstila med dobro znana vrata. Protokol SCTP, usmerjen v povezavo, se lahko uporablja za izvajanje SSH namesto TCP.
Zgodovinsko napredovanje
Ponovitev 1
Napad z vohanjem gesla na omrežje njegove ustanove je navdihnil Tatuja Ylönena, raziskovalca na Tehnološki univerzi v Helsinkih na Finskem, ki je leta 1995 ustvaril začetno ponovitev protokola (danes znanega kot SSH-1).
SSH je bil zasnovan tako, da prevzame vlogo prejšnjih protokolov, vključno z rlogin, TELNET, FTP in rsh, ki niso imeli robustne garancije za preverjanje pristnosti in tajnosti. Ylönen je dal svojo aplikacijo na voljo kot brezplačno programsko opremo. Julija 1995 je naprava hitro postala priljubljena. Do konca leta 1995 je bilo 20.000 uporabnikov SSH v 50 različnih državah.
bash preveri, ali je spremenljivka okolja nastavljena
Za promocijo in napredek SSH je Ylönen decembra 1995 ustanovil SSH Communications Security. Različne komponente brezplačne programske opreme, vključno z GNU libgmp, so bile uporabljene v prvi izdaji programa SSH, vendar so kasnejše iteracije, ki jih zagotavlja SSH Communications Security, prerasle v vse bolj lastniško programsko opremo. Po ocenah je bilo do leta 2000 2 milijona uporabnikov.
Ponovitev 2
Internet Engineering Task Force (IETF) je v svoji uradni dokumentaciji delovno skupino, zadolženo za ustvarjanje protokola SSH različice 2, označila kot 'Secsh'.
SSH-2, izboljšana ponovitev protokola, je leta 2006 postal standard. SSH-1 ni združljiv s to različico. SSH-2 ponuja funkcionalnost in varnostne nadgradnje v primerjavi s SSH-1. Na primer, izmenjava ključev Diffie-Hellman in robustno preverjanje celovitosti prek kod za preverjanje pristnosti sporočil zagotavljata večjo varnost. Zmožnost delovanja neomejenega števila lupinskih sej prek ene same povezave SSH je ena od novih zmogljivosti SSH-2. Ker je SSH-2 naprednejši in bolj razširjen kot SSH-1, nekatere izvedbe, kot so libssh (v0.8.0+), Lsh in Dropbear, podpirajo samo SSH-2.
Ponovitev 1.99
RFC 4253 je zahteval, da strežnik SSH, ki podpira 2.0, kot tudi starejše različice, svojo različico protokola navede kot 1.99 januarja 2006, precej po tem, ko je bila razvita različica 2.1. Ta številka različice se uporablja za označevanje združljivosti s prejšnjimi različicami in ne za predstavitev prejšnje revizije programske opreme.
OSSH in OpenSSH
Odkar je bila leta 1999 zadnja različica prvotnega programa SSH, različica 1.2.12, distribuirana pod odprtokodno licenco, razvijalci delajo na različici brezplačne programske opreme. To je bilo uporabljeno kot osnova za program OSSH Björna Grönvalla. Kmalu zatem je ekipa OpenBSD klonirala Grönvallovo delo za izdelavo OpenSSH, ki je bil vključen v izdajo OpenBSD 2.6. Iz te različice so ustvarili vejo 'prenosljivosti' za prenos OpenSSH v različne operacijske sisteme.
Najpogosteje uporabljena izvedba SSH od leta 2005 je bil OpenSSH, privzeta različica v številnih distribucijah operacijskega sistema. Po odstranitvi podpore za SSH-1 iz kodne baze v izdaji OpenSSH 7.6 se OpenSSH še vedno posodablja in podpira protokol SSH-2. Medtem OSSH ni več relevanten.
Uporabe
Uporabnik 'josh' je 'SSHed' z lokalnega računalnika 'foo fighter' na oddaljeni stroj 'tengwar', da zažene xeyes kot primer tuneliranja programa X11 prek SSH. Ljudje uporabljajo odjemalca Windows SSH PuTTY za dostop do OpenWrt.
SSH je protokol, ki deluje s številnimi sistemi, vključno z Microsoft Windows in večino različic Unixa (Linux, BSD, vključno z Applovim macOS in Solaris). Naslednje aplikacije lahko potrebujejo zmogljivosti, ki so ekskluzivne ali združljive z določenimi odjemalci ali strežniki SSH. Trenutno je na primer izvedljivo uporabiti le strežnik OpenSSH in implementacijo odjemalca protokola SSH za izdelavo VPN-ja.
- Za dostop do lupine na oddaljenem gostitelju (nadomešča Telnet in rlogin)
- Za izvajanje samotnega ukaza na oddaljenem gostitelju (nadomešča rsh)
- Za konfiguriranje samodejne prijave (brez gesla) oddaljenega strežnika (na primer z uporabo OpenSSH)
- Kot popolnoma delujoč šifriran VPN ne pozabite, da to zmožnost podpirata le odjemalec in strežnik OpenSSH.
- Za prenos X z oddaljenega gostitelja (možno prek več vmesnih gostiteljev)
- Za uporabo odjemalcev SSH, ki podpirajo protokol SOCKS za brskanje po internetu preko šifrirane proxy povezave.
- Za varno namestitev imenika oddaljenega strežnika kot datotečnega sistema na lokalnem računalniku, ki uporablja SSHFS.
- Z eno ali več zgoraj omenjenimi tehnologijami za samodejno spremljanje in upravljanje oddaljenega strežnika.
- Za razvoj mobilnih ali vdelanih naprav, združljivih s SSH.
- Za zaščito mehanizmov za prenos datotek.
Metode prenosa datotek
Več sistemov za prenos datotek uporablja protokole Secure Shell, kot je npr
- Prek SSH je varna kopija (SCP) razvita iz protokola RCP.
- rsync, ki naj bi bil učinkovitejši od SCP, se pogosto upravlja prek povezave SSH.
- Alternativa FTP, ki je varna, je SSH File Transfer Protocol (SFTP) (ne zamenjujte s FTP prek SSH ali FTPS)
- FISH ali datoteke, ki se prenašajo prek protokola lupine, so bile predstavljene leta 1998 in razvite iz navodil lupine SSH prek Unixa.
- Aspera, znana tudi kot hiter in varen protokol (FASP), uporablja SSH za ukaze in za prenos podatkov, vrata UDP.
Arhitektura
Tri različne komponente sestavljajo večplastno arhitekturo protokola SSH:
- Protokol za nadzor prenosa (TCP) TCP/IP običajno uporablja transportna plast (RFC 4253), pri čemer so vrata številka 22 določena kot vrata za poslušanje strežnika. Ta plast izvaja šifriranje, stiskanje, preverjanje celovitosti, začetno izmenjavo ključev in avtentikacijo strežnika. Čeprav lahko vsaka izvedba omogoča več, višjemu sloju izpostavi vmesnik za pošiljanje in sprejemanje paketov navadnega besedila do 32.768 bajtov. Običajno po prenosu 1 GB podatkov ali po preteku ene ure, kar nastopi prej, transportna plast poskrbi za ponovno izmenjavo ključev.
- Preverjanje pristnosti odjemalca poteka prek sloja za preverjanje pristnosti uporabnika (RFC 4252), ki ponuja tudi več tehnik preverjanja pristnosti. Avtentikacija, ki jo vodi odjemalec, pomeni, da lahko odjemalec SSH, ne strežnik, od uporabnika zahteva geslo. Samo odjemalčeve zahteve za avtentikacijo prejmejo odgovor strežnika. Pogosto se uporabljajo naslednje tehnike avtentikacije uporabnikov:
Geslo , preprosta tehnika preverjanja pristnosti gesla, ki vključuje možnost spreminjanja gesla. Te tehnike ne uporablja vsa programska oprema. - Običajno podpira vsaj pare ključev DSA, ECDSA ali RSA javni ključ je tehnika za avtentikacijo na podlagi javnega ključa. Druge izvedbe dodatno sprejemajo potrdila X.509.
- Funkcija enotne prijave za seje SSH je na voljo prek GSSAPI tehnike avtentikacije, ki ponujajo razširljiv sistem za upravljanje avtentikacije SSH z uporabo zunanjih mehanizmov, kot sta Kerberos 5 ali NTLM. Čeprav ima OpenSSH funkcionalno izvedbo GSSAPI, komercialne izvedbe SSH te tehnike pogosto vključujejo za uporabo v podjetjih.
- Ideja kanalov, ki definirajo ponujene storitve SSH, je opredeljena s povezovalno plastjo (RFC 4254). Iz ene same lahko multipleksiramo več povezav SSH. Oba prenašata podatke v obe smeri. Kanalske zahteve prenašajo podatke izven pasu, določene za dani kanal, kot je izhodna koda procesa na strani strežnika ali sprememba velikosti terminalskega okna. Poleg tega z uporabo velikosti sprejemnega okna vsak kanal nadzira svoj pretok. Odjemalec SSH pošlje globalno zahtevo za posredovanje vrat na strani strežnika. Pogosti tipi kanalov vključujejo:
- Lupina za SFTP, exec in terminalske lupine (vključno s prenosi SCP)
- Direct-TCPIP za posredovane povezave od odjemalca do strežnika.
- Posredovane povezave od strežnika do odjemalca z uporabo forwarded-tcpip
- Za potrditev legitimnosti gostitelja zapis SSHFP DNS (RFC 4255) ponuja prstne odtise ključev javnega gostitelja.
Zaradi njegove odprte zasnove lahko uporabljamo SSH za široko paleto nalog poleg varovanja lupin, kar mu daje veliko vsestranskost.
Ranljivosti
SSH-1
Zaradi neustrezne zaščite celovitosti podatkov, ki jo zagotavlja CRC-32 v tej različici protokola, je bila leta 1998 ugotovljena ranljivost v SSH 1.5, ki je dovoljevala nepooblaščeno vstavljanje materiala v šifriran tok SSH. V večini izvedb so dodali popravek, znan kot SSH Compensation Attack Detector. Več teh spremenjenih izvedb je vključevalo novo napako prekoračitve celega števila, ki je napadalcem omogočila zagon poljubne kode s korenom ali zmogljivostmi demona SSH.
Napaka, ki napadalcem omogoča, da spremenijo zadnji blok seje, šifrirane z IDEA, je bila odkrita januarja 2001. Istega meseca je bila odkrita še ena napaka, ki je lažnemu strežniku omogočila, da posreduje prijavo odjemalca drugemu strežniku.
Zaradi svoje prirojene ranljivosti se SSH-1 na splošno šteje za zastarelega in se mu je treba izogniti tako, da izrecno odstranite nadomestni SSH-1. Večina trenutnih strežnikov in odjemalcev podpira SSH-2.
Obnovitev navadnega besedila za CBC
Teoretična ranljivost, ki je omogočila pridobitev do 32 bitov odprtega besedila iz bloka šifriranega besedila, šifriranega s takratno standardno metodo šifriranja, CBC, je bila odkrita v vseh različicah SSH novembra 2008. Najenostavnejša rešitev je preklop na CTR, števec namesto načina CBC, zaradi česar je SSH odporen na napad.
ponavljanje zemljevida v Javi
NSA osumljena dešifriranja
Objava občutljivih dokumentov Edwarda Snowdna za Der Spiegel 28. decembra 2014 nakazuje, da bo Agencija za nacionalno varnost lahko potencialno dekodirala določene komunikacije SSH.