Escolar Documentos
Profissional Documentos
Cultura Documentos
Tihomir Mei
Zagreb, 2007.
Sadraj :
1 2 Uvod ....................................................................................................... 1 Povijest, razvoj i slini protokoli ......................................................... 3
Povijest i razvoj SSH protokola ................................................ 3 R-naredbe................................................................................. 4 TELNET.................................................................................... 4 Pregled arhitekture ................................................................... 6
Podatkovne strukture SSH protokola........................................ 7 Brojevi poruka........................................................................... 8 Uspostavljanje veze.................................................................. 9 Kompatibilnost sa starim verzijama ........................................ 10 SSH binarni paketni protokol .................................................. 11 Algoritmi kompresije ............................................................... 12 Algoritmi enkripcije.................................................................. 12 Integritet podataka .................................................................. 14 Metode razmjene kljueva ...................................................... 15 Algoritmi javnog kljua ............................................................ 16 Pregovaranje algoritama......................................................... 17 Razmjena kljueva.................................................................. 19 Zahtjevi za autentifikacijom..................................................... 23 Autentifikacija pomou javnog kljua ("publickey") ................. 24 Autentifikacija pomou lozinke ("password")........................... 27 "hostbased" autentifikacija ...................................................... 28
3.1 3.2
3.1.1 3.1.2 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 3.2.10
3.3
3.4
Spojni protokol........................................................................ 29
3.4.1 Otvaranje kanala..................................................................... 30 3.4.2 Prijenos podataka ................................................................... 31 3.4.3 Zatvaranje kanala ................................................................... 31 3.4.4 Interaktivne sjednice ............................................................... 32 3.4.5 Prosljeivanje TCP/IP prometa............................................... 34 Praktini rad ........................................................................................ 36
4.1 4.2
5 6 7
1 Uvod
Secure Shell protokol (SSH) je mreni protokol za sigurno spajanje na udaljeno raunalo preko nesigurnog medija kao to je Internet. Bez obzira na njegovo ime, protokol prua puno veu funkcionalnost nego obini alati za udaljeno spajanje poput telnet-a ili rlogin-a. Ova dva prethodna protokola su sa sigurnosnog aspekta jako nesigurna, jer je sav promet izmeu klijenta i posluitelja nekriptiran, i tako su osjetljive informacije kao to su korisnike lozinke itljive svima koji mogu prislukivati mreni promet. Dizajn tih protokola je odraz vremena u kojem su oni nastajali. Tada su raunala bila relativno rijetka, obino su se nalazila u akademskim institucijama i umreavana su u male lokalne mree, tako da velika sigurnost i tajnost podataka i nije bila osobito potrebna. Meutim, porastom broja raunala i razvojem Interneta, rizici su postali puno vei. Sve se vie osjetljivih podataka poelo prenositi Internetom, i sve je vie raznih alata koji omoguavanju prislukivanje podataka zlonamjernim korisnicima, pa je bilo samo pitanje vremena kada e se protokol kao SSH pojaviti. SSH, za razliku od starijih protokola za udaljeno spajanje (remote login) nudi jako veliku sigurnost. To je protokol koji pripada aplikacijskom sloju TCP/IP modela, ali moe funkcionirati i preko drugih prijenosnih protokola. On osigurava tajnost svih prenoenih podataka tako to kriptira sav promet izmeu klijenta i posluitelja. Takoer osigurava integritet prenoenih podataka raunanjem MAC (message authentication code) kodova za svaki paket. U postupku spajanja klijenta, SSH omoguava klijentu da autentificira posluitelj, tj. da utvrdi da je posluitelja ba onaj za kog se izdaje, i tako se osigura od mogueg ovjek-u-sredini (man-in-the-middle) napada gdje bi se potencijalni napada predstavljao kao posluitelj. Nadalje, SSH omoguava nekoliko mehanizama za autentifikaciju klijenta, od kojih su najee autentifikacija javnim kljuem i autentifikacija lozinkom. Za razliku od telnet protokola ovdje se lozinke prenose sigurnim kriptiranim kanalom, i tako onemoguuju prislukivanje (eavesdropping). Nakon uspostavljanja veze i meusobnog autentificiranja, spojni sloj SSH protokola omoguava razne usluge. Mogue je tradicionalno udaljeno koritenje ljuske operacijskog sustava (shell), ali je takoer mogue koristiti uspostavljenu vezu za prosljeivanje prometa nekih drugih protokola (port forwarding), ili je mogue pokrenuti neki podsustav (scp, sftp) koji e koristiti SSH kanal kao sigurni medij za prenoenje podataka. Protokol doputa i koritenje kompresije podataka za utedu mrenog prometa, ako to obje strane u komunikaciji zahtijevaju. Omogueno je i istovremeno koritenje vie kanala za prijenos, koji su zapravo samo logiki kanali, a sav promet se multipleksira u jedan kanal. Protokol ima modularan dizajn, tj. doputa implementacijama dodavanje novi usluga ili podsustava ve postojeim, jer se o svim uslugama vri pregovaranje. Takoer je mogue dodavanje novih kriptografskih algoritama ili metoda autentifikacije, ako se stare s vremenom pokau kao nesigurne. Ovaj rad e na poetku opisati povijest i razvoj ovog protokola, i protokole sline namjena koji su mu prethodili. Zatim, u drugom poglavlju e biti opisana kompletna 1
arhitektura ovog protokola kroz pregled prijenosnog, autentifikacijskog i spojnog sloja i njihovih funkcija. U etvrtom poglavlju bit e opisan praktini dio ovog rada, a to je izrada raunalnog programa koji simulira rad SSH protokola, prikazuje sve podatke koji su relevantni za simulaciju, i omoguava mijenjanje istih. Bit e opisani detalji programske implementacije, kao i upute za koritenje programa. Treba rei da postoje dvije nekompatibilne verzije protokola, SSH-1 i SSH-2. Prva verzija protokola pati od dosta sigurnosnih propusta pa je brzo nakon nastanka zamijenjena puno boljom verzijom SSH-2. S obzirom da je SSH-1 protokol zastario i sve se manje koristi, u ovom radu bit e opisan samo SSH-2 protokol i gdje god se spominje SSH protokol to zapravo znai SSH-2 protokol, osim ako nije drukije navedeno.
protokola. Godine 2006. SSH-2 kao ve zreo protokol postaje predloeni Internet Standard definiran u nizu RFC dokumenata [1-5].
2.2 R-naredbe
UNIX naredbe rsh (remote shell), rlogin (remote login) i rcp (remote copy) koje su poznate pod imenom r-naredbe (r-commands), su direktni prethodnici SSH-1 naredbi ssh, slogin i scp. Suelja prema korisniku su skoro potpuno identina. Meutim, r-naredbe za razliku od svojih ssh dvojnika ne kriptiraju promet i imaju autentifikacijske mehanizme koje je lako prevariti. rsh naredba koristi se za izvravanje naredbe na udaljenom raunalu, rlogin naredba spaja se na udaljeni terminal dok rcp naredba slui za kopiranje datoteka sa udaljenog posluitelja ili kopiranje datoteka na udaljeni posluitelj. Zajednika stvar im je nain autentifikacije korisnika. Nakon spajanja klijenta na udaljeni posluitelj, posluitelj iz poslane mrene adrese klijenta nalazi ime raunala pomou servisa kao to su NIS (network information service) ili DNS (domain name system). Nakon toga server provjerava lokalne konfiguracijske datoteke, najee su to /etc/hosts.equiv i $HOME/.rhosts. U tim datotekama se nalaze imena raunala i imena korisnika kojima je doputeno spajanje na to raunalo. Ako je ime raunala i korisnika pronaeno u jednoj od tih datoteka, korisniku je doputeno spajanje sa svim ovlastima koje inae ima na tom raunalu. Ovaj sustav autentifikacije je jako nesiguran, s obzirom servisi kao DNS imaju sigurnosne rupe koje bi omoguile da raunalo potencijalnog napadaa nakon kompromitiranja DNS servera, posluitelju izgleda kao raunalo kojem moe vjerovati. Napada bi tada dobio potpuni pristup tom raunalu bez da zna korisniku lozinku. Ako su r-naredbe konfigurirane da trae lozinku, ona se prenosi kao isti tekst. r-naredbe se mogu koristiti u malim mreama gdje se moe vjerovati svim raunalima. Meutim, koritenje u nesigurnim mreama kao to je Internet bi predstavljalo prevelik rizik tako da ove naredbe polako odlaze u prolost. Dodatni nedostatak im je i taj to se mogu koristiti samo na UNIX raunalima.
2.3 TELNET
TELNET (TELecommunication NETwork) je do pojave SSH protokola, bio daleko najkoriteniji protokol za spajanje na udaljeni terminal. Razvijen je 1969. godine i postao je jedan od prvih Internet standarda (IETF STD 8). Velika prednost pred r-naredbama mu je to to je nezavisan o platformi na kojoj se koristi. Obino se koristi iznad TCP/IP konekcije, iako je sam TELNET protokol stariji od samog TCP/IP protokolnog stoga. Tipian mreni pristup (port) na kojem TELNET posluitelj oslukuje zahtjeve je 23.
U zadnjih desetak godina zbog pojave SSH protokola dosta gubi na popularnosti, ali se i dalje koristi, pogotovo zato to klijentski TELNET program dolazi unaprijed instaliran na gotovo svim operacijskim sustavima. Sa sigurnosnog aspekta se koritenje TELNET protokola nikako ne preporuuje. To je stoga to se svi podaci (ukljuujui i lozinke) prenose u istom, nekriptiranom obliku. Tako je mogue da svatko tko ima pristup mrenom usmjerniku na mrei izmeu dva raunala koja komuniciraju TELNET-om i ima pokrenut nekakav alat kao to je tcpdump, moe proitati korisnike lozinke. Drugi razlog zato se TELNET treba izbjegavati je stoga to on nema mehanizme za autentificiranje posluitelja, tako da su mogui man-in-themiddle napadi, u kojima bi se potencijalni napada predstavljao kao TELNET server i doao do tajnih podataka klijenta.
Nakon uspostave sigurnog prijenosnog kanala klijent obino poalje zahtjev za pokretanjem autentifikacijskog servisa (ssh-userauth). Takoer, nakon uspjene autentifikacije klijent e poslati zahtjev za pokretanjem spojnog protokola (ssh-connection). To omoguava da novi protokoli budu definirani i da koegzistiraju sa postojeim protokolima.
duljinom. Stringovi se takoer koriste za zapisivanje tekstualnih podataka. U tom sluaju, koristi se ASCII kodiranje ako se radi o internim imenima (npr. imena algoritama, imena podsustava i sl.), a za tekst koji e se eventualno prikazati korisniku koristi se UTF-8 kodiranje definirano u standardu ISO-10646. Pozitivna stvar kod UTF-8 kodiranja je to to zapis US-ASCII znakova ostaje nepromijenjen. Za tekst vrijedi isto kao i za proizvoljne nizove, zavrni null znak se ne koristi. Tako bi, na primjer, tekst "primjer" bio zapisan kao 00 00 00 07 p r i m j e r. mpint Ovaj podatkovni tip predstavlja veliki cijeli broj viestruke preciznosti (multiple precision integer) u dvojnom komplementu, zapisan kao string (znai prvo ide uint32 podatak u kojem je zapisan broj bajtova koji slijede), tako da najvaniji bajt ide na poetku zapisa broja. Negativne vrijednosti imaju postavljen bit 1 kao najznaajniji bit prvog bajta koji predstavlja broj. Ako se, meutim, radi o pozitivnom broju koji bi imao bit 1 kao najznaajniji bit, tada se na poetak zapisa dodaje jedan bajt iji su svi bitovi nula. Vrijednost nula se kodira kao string ija je duljina jednaka 0 bajtova. Npr. broj 0 kodiramo kao 00 00 00 00, broj 0x10ab kodiramo kao 00 00 00 02 10 ab, broj 0x90 kodiramo kao 00 00 00 02 00 90. name-list Ovaj tip podataka predstavlja listu imena. Kodira se kao string iji je sadraj lista imena odvojenih zarezom. To znai da prvo ide uint32 podatak u kojem je zapisana ukupna duljina liste (broj bajtova koji slijedi), a zatim ide lista od 0 ili vie imena koja su odvojena zarezom. Ime u listi mora biti dugako minimalno jedan bajt i ne smije u sebi sadrati znak zareza (","). Sva imena moraju biti kodirana kao US-ASCII. Ovisno o kontekstu u kojem se ovaj tip podataka koristi, mogu postojati i druge restrikcije. Na primjer, u postupku pregovaranja algoritama, lista algoritama je predstavljena kao name-list podatak, i postoji ogranienje da navedena imena moraju biti ispravna imena algoritama (npr. za simetrine algoritme "aes-128-cbc", "blowfish-cbc" itd.). Zavrni null znak se ne koristi, niti za pojedinana imena niti za listu u cjelini. Primjeri: prazna lista () se kodira kao 00 00 00 00, lista ("zlib,none") se kodira kao 00 00 00 09 7a 6c 69 62 2c 6e 6f 6e 65.
Na poetku niza obavezno mora biti "SSH-", a nakon toga ide verzija protokola koju program koristi. Za SSH-2 verziju protokola to mora biti "2.0". Nakon toga slijedi verzija programa koji se koristi. Nakon toga mogu ii komentari, ali oni su opcionalni. Ako su komentari prisutni, tada nakon niza koji oznaava verziju programa mora doi razmak (ASCII 32). Identifikacijski niz mora biti prekinut jednim CR znakom (carriage return, ASCII 13), a nakon toga jednim LF znakom (line feed, ASCII 10). Null znak ne smije biti na kraju niza. Maksimalna duina ovog niza je 255 znakova (ukljuujui i CR i LF znakove). Ako bilo koja strana primi identifikacijski niz koji ne poinje sa "SSH-" mora ga ignorirati. Ovi identifikacijski znakovi bitni su kod izbora verzije protokola koji e se koristiti, a oba niza e se poslije koristiti u DiffieHellman postupku razmjene kljueva. Odmah nakon to su poslani identifikacijski nizovi sa obje strane poinje proces razmjene kljueva. Svi podaci koji se alju nakon identifikacijskih nizova moraju biti u formatu binarnog SSH paketa. Ovdje se dan jedan primjer preuzet iz log datoteke programa Putty, u kojem se moe vidjeti kako izgleda inicijalno uspostavljanje veze u praksi. Na
Kao to se moe vidjeti, ni klijent ni posluitelj nemaju opcionalni komentar nego iza verzije programa odmah slijede CR i LF znakovi. Klijent je prijavio da koristi verziju protokola "2.0", dok je posluitelj prijavio verziju "1.99".
10
dopuna
byte[n2]
MAC
byte[m]
Opis Oznaava duljinu paketa u bajtovima, bez MAC polja, i bez sebe samog Oznaava duljinu nasumine dopune u bajtovima Ovdje su pohranjene korisne informacije. Ako je kompresija dogovorena ovo polje je komprimirano. Duljina ovog polja je n1 = duljina_paketa duljina_dopune - 1 Nasumina dopuna, takva da je ukupna duljina spojenih polja (duljina_paketa || duljina_dopune || koristan_teret || dopuna) viekratnik broja 8 ili duljine bloka enkripcije, to god je vee. Obavezno mora biti barem 4 bajta dopune. Dopuna bi trebala biti nasumina ali to nije obavezno. Maksimalna veliina dopune je 255 bajtova. Message Authentication Code. Polje koje osigurava integritet podataka i titi od napada ponavljanjem paketa, ili mijenjanja redoslijeda paketa. Nije obavezno i koristi se samo ako je to u postupku pregovaranja algoritama dogovoreno.
Kao to se vidi iz slike 2, svaki binarni paket poinje sa etiri bajta koja predstavljaju ukupnu duljinu paketa nakon tog polja, bez MAC polja koje je opcionalno. Slijedi jedan bajt u kojem je zapisana veliina dopune sa kraja 11
paketa. Minimalna veliina dopune je 4 bajta, a maksimalna je 255 bajtova. Dopuna bi trebala biti nasumina, to oteava napade na algoritam kriptiranja koji se koristi. Veliina dopune se odabire tako da bi duljina ukupnog paketa bez MAC polja bila viekratnik broja 8 ili duljine bloka algoritma enkripcije, to god je vee. Treba primijetiti da je minimalna duljina paketa 16 bajtova + duljina MAC polja ako se ono koristi. Kompletan paket se kriptira, pa tako i polje sa duljinom paketa, to znai da e kod pogrene dekripcije i ovo polje biti pogreno, te se nee moi znati kolika je duljina paketa. MAC polje se ne kriptira.
U gornjoj tablici navedeni su algoritmi kompresije koje SSH protokol definira. Prva je 'none' metoda. Ona oznaava da nema kompresije, i prema SSH protokolu ta je metoda obavezna u svim SSH implementacijama. Druga metoda, oznaena kao "zlib", je zlib metoda kompresije opisana u dokumentima RFC1950 (ZLIB Compressed Data Format Specification version 3.3) i RFC1951 (DEFLATE Compressed Data Format Specification version 1.3).
12
jedna smjer, a drugi algoritam za drugi smjer, meutim to nije preporuljivo. Duljina kljueva enkripcije bi trebala biti minimalno 128 bitova. Algoritmi koji su predvieni za koritenje u originalnom protokolu dani su u sljedeoj tablici:
Tablica 3 : Definirani algoritmi enkripcije
aes192-cbc
opcionalno
aes128-cbc
preporueno
Opis algoritma enkripcija-dekripcija-enkripcija DES algoritmom, sa tri kljua, u CBC nainu Blowfish algoritam u CBC nainu kriptiranja. Ima klju duljine 128 bitova. Twofish algoritam u CBC nainu sa 256bitovnim kljuem i 128-bitovnim blokovima Alias za twofish256-cbc Twofish algoritam u CBC nainu sa 192bitovnim kljuem i 128-bitovnim blokovima Twofish algoritam u CBC nainu sa 128bitovnim kljuem i 128-bitovnim blokovima AES (Advanced Encryption Standard) algoritam u CBC nainu sa 128-bitovnim blokovima i 256-bitovnim kljuem AES (Advanced Encryption Standard) algoritam u CBC nainu sa 128-bitovnim blokovima i 192-bitovnim kljuem AES (Advanced Encryption Standard) algoritam u CBC nainu sa 128-bitovnim blokovima i 128-bitovnim kljuem Serpent algoritam u CBC nainu sa 256bitovnim kljuem Serpent algoritam u CBC nainu sa 192bitovnim kljuem Serpent algoritam u CBC nainu sa 128bitovnim kljuem Arcfour algoritam koji kriptira tok podataka i ima klju duljine 128 bitova. Treba ga izbjegavati jer ima problem sa slabim kljuevima. IDEA algoritam kriptiranja u CBC nainu CAST-128 algoritam u CBC nainu, sa 128-bitovnim kljuem bez enkripcije, ne preporua se
Kao to se vidi iz tablice, jedini algoritam koji je obavezan za sve implementacije je "3des-cbc", to je razumljivo. Taj algoritam je odabran zato to je DES algoritam dosta dugo bio najkoriteniji, a i dalje je skoro svugdje podran. Iako 3DES ima klju duljine 192 bita, taj klju zapravo ima efektivnu
13
duljinu od 112 bitova, to je manje od preporuenog, pa je puno bolje koritenje nekog drugog algoritma, kao to je npr. "aes128-cbc". Svi algoritmi rade u CBC (cipher block chaining) nainu (osim arcfour algoritma), to znai da se prije kriptiranja vri XOR operacija izmeu istog teksta i prethodnog kriptiranog bloka (ili inicijalizacijskog vektora ako se radi o prvom paketu). Princip rada u tom nainu prikazan je na slici 3.
gdje MAC oznaava dogovoreni MAC algoritam, mac_klju je klju dobiven nakon razmjene kljueva, redni_broj_paketa je redni broj paketa koji aljemo predstavljen kao uint32, i postavljen na nulu za prvi paket. Taj redni broj se spaja zajedno sa nekriptiranim paketom, koji ine duljina paketa, duljina dopune, korisni teret i dopuna. Na te dvije spojene vrijednosti primjenjuje se MAC algoritam uz koritenje navedenog kljua i rezultat je mac polje koje se alje zajedno s paketom. Strana koja primi paket, prvo ga dekriptira, primijeni mac algoritam na isti nain, i ako dobivena vrijednost nije jednaka primljenoj to znai da se taj paket odbacuje. Time se uva integritet i titi od napada ponovnim slanjem paketa (replay attack) ili napada mijenjanjem redoslijeda paketa. I ovdje je mogue da klijent i posluitelj koriste razliite MAC algoritme ali to se ne preporua.
14
hmac-md5 hmac-md5-96
opcionalno opcionalno
none
opcionalno
Opis algoritma HMAC-SHA1 algoritam, duljina saetka je 160 bitova, kao i duljina kljua Prvih 96 bitova HMAC-SHA1 algoritma se uzimaju kao saetak, klju je duljine 160 bitova HMAC-MD5 algoritam, duljina saetka je 128 bitova, kao i duljina kljua Prvih 96 bitova HMAC-MD5 algoritma se uzimaju kao saetak, klju je duljine 128 bitova ne koristi se MAC, ne preporua se
Svi HMAC-* algoritmi opisani su u [10], a zapravo predstavljaju obine algoritme za raunanje saetka (hash) koji se primjenjuju na spoj tajnog kljua i teksta, a ne samo na tekst kao to to rade obini algoritmi za raunanje saetka.
Sve ove definirane metode koriste Diffie-Hellman algoritam razmjene kljueva, i sve osim ("diffie-hellman-group-exchange-sha256") koriste sha1 algoritam za raunanje saetka. Metoda "diffie-hellman-group1-sha1" oznaava Diffie-Hellman algoritam uz koritenje sha1 algoritma, i koristi 1024-bitni modulus. Parametri su: Modulus (1024 bita), heksadekadski:
FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
15
E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE65381 FFFFFFFF FFFFFFFF
Generator:
2
Metoda "diffie-hellman-group14-sha1" je ista kao i gornja uz tu razliku da koristi drugi modulus. Parametri su: Modulus (2048 bita), heksadekadski:
FFFFFFFF 29024E08 EF9519B3 E485B576 EE386BFB C2007CB8 83655D23 670C354E E39E772C DE2BCBF6 15728E5A FFFFFFFF 8A67CC74 CD3A431B 625E7EC6 5A899FA5 A163BF05 DCA3AD96 4ABC9804 180E8603 95581718 8AACAA68 C90FDAA2 020BBEA6 302B0A6D F44C42E9 AE9F2411 98DA4836 1C62F356 F1746C08 9B2783A2 3995497C FFFFFFFF 2168C234 3B139B22 F25F1437 A637ED6B 7C4B1FE6 1C55D39A 208552BB CA18217C EC07A28F EA956AE5 FFFFFFFF C4C6628B 514A0879 4FE1356D 0BFF5CB6 49286651 69163FA8 9ED52907 32905E46 B5C55DF0 15D22618 80DC1CD1 8E3404DD 6D51C245 F406B7ED ECE45B3D FD24CF5F 7096966D 2E36CE3B 6F4C52C9 98FA0510
Generator:
2
Metode "diffie-hellman-group-exchange-*" se razlikuju po tome to nemaju fiksno definirane parametre (modulus i generator), ve se oni dogovaraju prilikom spajanja. Klijent poalje paket sa zahtjevom u kojem trai te parametre i definira minimalnu i eljenu veliinu u bitovima. Nakon toga, server koji ima veliku bazu izgeneriranih parametra alje modulus i generator klijentu.
Ime formata
Zahtjev
Opis formata
16
Sirovi DSS klju Sirovi RSA klju OpenPGP certifikat (RSA klju) OpenPGP certifikat (DSS klju)
gdje su p, q, q i y parametri DSS algoritma kodirani kao mpint podaci. Format zapisa DSS digitalnog potpisa je sljedei:
string string "ssh-dss" dss_potpis
gdje dss_potpis predstavlja string zapis 160-bitnih brojeva "r" i "s" koji su rezultat potpisivanja DSS algoritmom. Format zapisa RSA javnog kljua je sljedei:
string mpint mpint "ssh-rsa" e n
gdje su "e" i "n" parameri RSA algoritma kodirani kao mpint podaci. Format zapisa RSA potpisa je sljedei:
string string "ssh-rsa" rsa_potpis
gdje rsa_potpis predstavlja string zapis broja "s" koji se dobije kao rezultat potpisivanja neke poruke RSA algoritmom. Formati "pgp-sign-rsa" i "pgp-sign-dss" oznaavaju da su kljuevi, certifikati i potpisi u OpenPGP binarnom formatu.
17
name-list name-list name-list name-list name-list name-list name-list name-list name-list name-list boolean uint32
algoritmi razmjene kljua algoritmi javnog kljua algoritmi enkripcije od klijenta prema posluitelju algoritmi enkripcije od posluitelja prema klijentu mac algoritmi od klijenta prema posluitelju mac algoritmi od posluitelja prema klijentu algoritmi kompresije od klijenta prema posluitelju algoritmi kompresije od posluitelja prema klijentu jezici od klijenta prema posluitelju jezici od posluitelja prema klijentu slijedi prvi KEXINIT paket 0 (rezervirano za budua proirenja)
Dakle, prvi bajt je SSH_MSG_KEXINIT i govori primatelju o kojoj vrsti paketa se radi, zatim slijedi "cookie", koji je niz od 16 nasuminih bajtova, i slui za oteavanje napada. Nakon toga slijede liste eljenih algoritama odvojenih zarezom (name-list). Algoritam za utvrivanje dogovorenih algoritama je vrlo jednostavan: 1. ako je prvi algoritam u listi klijenta i u listi posluitelja isti, tada je to odabrani algoritam 2. ako prvi algoritam u listama nije isti, tada se ide po listi klijentovih algoritama od poetka do kraja, i prvi algoritam koji se nalazi i na posluiteljevoj listi je odabrani algoritam 3. ako nema niti jednog istog algoritma u listama klijenta i posluitelja, tada je pregovaranje neuspjeno, i klijent i posluitelj prekidaju vezu Na ovom primjeru koji je preuzet iz log datoteke programa Putty moe se vidjeti kako taj paket izgleda u praksi:
Incoming packet type 20 / 0x14 (SSH2_MSG_KEXINIT) 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 1c fb 09 b9 09 1a 5d 7b 8e d1 f0 fe 95 90 7f ad 00 00 00 59 64 69 66 66 69 65 2d 68 65 6c 6c 6d 61 6e 2d 67 72 6f 75 70 2d 65 78 63 68 61 6e 67 65 2d 73 68 61 31 2c 64 69 66 66 69 65 2d 68 65 6c 6c 6d 61 6e 2d 67 72 6f 75 70 31 34 2d 73 68 61 31 2c 64 69 66 66 69 65 2d 68 65 6c 6c 6d 61 6e 2d 67 72 6f 75 70 31 2d 73 68 61 31 00 00 00 0f 73 73 68 2d 72 73 61 2c 73 73 68 2d 64 73 73 00 00 00 87 61 65 73 31 32 38 2d 63 62 63 2c 33 64 65 73 2d 63 62 63 2c 62 6c 6f 77 66 69 73 68 2d 63 62 63 2c 63 61 73 74 31 32 38 2d 63 62 63 2c 61 72 63 66 6f 75 72 2c 61 65 73 31 39 32 2d 63 62 63 2c 61 65 73 32 35 36 2d 63 62 63 2c 72 69 6a 6e 64 61 65 6c 2d 63 62 63 40 6c 79 73 61 74 6f 72 2e 6c 69 75 2e 73 65 2c 61 65 73 31 32 38 2d 63 74 72 2c 61 65 73 31 39 32 2d 63 74 72 2c 61 65 73 32 35 36 2d 63 74 72 00 00 00 87 61 65 73 31 32 38 2d 63 62 63 2c 33 64 65 73 2d 63 ......]{........ ...Ydiffie-hellm an-group-exchang e-sha1,diffie-he llman-group14-sh a1,diffie-hellma n-group1-sha1... .ssh-rsa,ssh-dss ....aes128-cbc,3 des-cbc,blowfish -cbc,cast128-cbc ,arcfour,aes192cbc,aes256-cbc,r ijndael-cbc@lysa tor.liu.se,aes12 8-ctr,aes192-ctr ,aes256-ctr....a es128-cbc,3des-c
18
00000120 00000130 00000140 00000150 00000160 00000170 00000180 00000190 000001a0 000001b0 000001c0 000001d0 000001e0 000001f0 00000200 00000210 00000220 00000230 00000240 00000250 00000260
62 63 2c 62 6c 6f 77 66 69 73 68 2d 63 62 63 2c 63 61 73 74 31 32 38 2d 63 62 63 2c 61 72 63 66 6f 75 72 2c 61 65 73 31 39 32 2d 63 62 63 2c 61 65 73 32 35 36 2d 63 62 63 2c 72 69 6a 6e 64 61 65 6c 2d 63 62 63 40 6c 79 73 61 74 6f 72 2e 6c 69 75 2e 73 65 2c 61 65 73 31 32 38 2d 63 74 72 2c 61 65 73 31 39 32 2d 63 74 72 2c 61 65 73 32 35 36 2d 63 74 72 00 00 00 55 68 6d 61 63 2d 6d 64 35 2c 68 6d 61 63 2d 73 68 61 31 2c 68 6d 61 63 2d 72 69 70 65 6d 64 31 36 30 2c 68 6d 61 63 2d 72 69 70 65 6d 64 31 36 30 40 6f 70 65 6e 73 73 68 2e 63 6f 6d 2c 68 6d 61 63 2d 73 68 61 31 2d 39 36 2c 68 6d 61 63 2d 6d 64 35 2d 39 36 00 00 00 55 68 6d 61 63 2d 6d 64 35 2c 68 6d 61 63 2d 73 68 61 31 2c 68 6d 61 63 2d 72 69 70 65 6d 64 31 36 30 2c 68 6d 61 63 2d 72 69 70 65 6d 64 31 36 30 40 6f 70 65 6e 73 73 68 2e 63 6f 6d 2c 68 6d 61 63 2d 73 68 61 31 2d 39 36 2c 68 6d 61 63 2d 6d 64 35 2d 39 36 00 00 00 09 6e 6f 6e 65 2c 7a 6c 69 62 00 00 00 09 6e 6f 6e 65 2c 7a 6c 69 62 00 00 00 00 00 00 00 00 00 00 00 00 00
bc,blowfish-cbc, cast128-cbc,arcf our,aes192-cbc,a es256-cbc,rijnda el-cbc@lysator.l iu.se,aes128-ctr ,aes192-ctr,aes2 56-ctr...Uhmac-m d5,hmac-sha1,hma c-ripemd160,hmac -ripemd160@opens sh.com,hmac-sha1 -96,hmac-md5-96. ..Uhmac-md5,hmac -sha1,hmac-ripem d160,hmac-ripemd 160@openssh.com, hmac-sha1-96,hma c-md5-96....none ,zlib....none,zl ib.............
3.2.10
Razmjena kljueva
Nakon to su utvreni svi potrebni algoritmi koji e se koristiti, kree postupak razmjene kljueva i autentificiranja posluitelja. Iako je teoretski mogue koristiti bilo koju metodu oko koje se klijent i posluitelj dogovore, algoritam razmjene kljua koji se trenutno koristi u svim implementacijama je Diffie-Hellman algoritam. Uz njega se u postupku jo koriste DSS ili RSA algoritam, a njihova funkcija je ovdje autentificiranje posluitelja. Slijedi opis kompletnog postupka korak po korak. U opisu V_C oznaava klijentov identifikacijski niz, V_S je posluiteljev identifikacijski niz, p i g su unaprijed poznati parametri Diffie-Hellman razmjene, p je veliki prosti broj, a g je generator za grupu GF(p), K_S je posluiteljev javni klju, I_C je klijentova SSH_MSG_KEXINIT poruka, a I_S je posluiteljeva SSH_MSG_KEXINIT poruka. 1. klijent generira veliki sluajni broj x i rauna broj e, e = g^x mod p. Klijent alje broj e posluitelju. 2. Posluitelj generira sluajni broj y i rauna broj f, f = g^y mod p. Posluitelj prima broj e. Tada rauna tajni klju K, K = e^y mod p. Takoer rauna H, H = hash(V_C || V_S || I_C || I_S || K_S || e || f || K). Posluitelj potpisuje H svojim privatnim kljuem i dobiva potpis s. Posluitelj alje (K_S || f || s) klijentu. 3. Klijent provjerava da javni klju K_S stvarno pripada posluitelju (bilo pomou certifikata ili pomou lokalne baze kljueva). Klijent moe prihvatiti posluiteljev klju i bez provjere, ali to ini protokol ranjivim na man-in-the-middle napade. Klijent takoer
19
rauna tajni klju K, K = f^x mod p, rauna H = hash(V_C || V_S || I_C || I_S || K_S || e || f || K) i provjerava da li je s ispravan potpis od H. Vidimo da kao rezultat razmjene dobivamo K, to je tajni klju poznat samo klijentu i posluitelju, a ne potencijalnim napadaima koji su prislukivali promet. To je osigurano zbog teine raunanja diskretnog logaritma na vrijednostima e i f. Ako nismo provjerili da javni kju stvarno pripada posluitelju tada je mogu aktivni napad, u kojem bi se potencijalni napada nalazio izmeu klijenta i posluitelja i tako iskoristio slabost Diffie-Helman algoritma na man-in-themiddle napade. Slijedi opis poruka kojima se ostvaruje gore opisana razmjena. Klijent na poetku alje ovaj paket:
byte mpint SSH_MSG_KEXDH_INIT parametar e
Na sljedeem isjeku iz log datoteke programa Putty vidi se kako ta razmjena poruka izgleda u praksi:
Outgoing packet type 30 / 0x1e (SSH2_MSG_KEXDH_INIT) 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00 00 01 00 7b 9b 14 1c 58 76 a8 a8 75 89 ee a5 cc 6f e1 7a c8 0a 1e 2c 98 de 7e fc 43 d2 b3 a0 4e 7f 17 11 81 34 72 b8 60 bb 0f f2 49 53 d0 0c e8 14 79 1c 7d 7a 64 43 da f3 3b cd 84 67 ab 33 e0 c5 3f 84 fb f6 f9 b7 df 94 f5 63 99 02 77 c4 48 2c 4e f0 39 aa ee 68 41 79 2a 1a 27 53 63 8d 69 be 06 2f 80 19 dc ac 4a 12 1c 5d 2e 99 cd 1c 19 d8 4e e4 10 08 b3 66 87 6c d6 35 3e 76 00 cc 93 74 93 13 06 3e 30 94 23 48 26 5a 17 1d a8 97 7b d7 db e4 21 86 d7 7d f6 1e 9e e7 1c 39 e9 69 54 43 0b 74 73 46 e1 5c 78 6b 7f d9 d2 eb 6c 1f 38 f8 fc 16 33 7f c2 13 ff 27 c9 bc 55 f2 08 ae c0 b3 c7 fc 89 56 f0 69 f6 42 da 60 b0 e2 90 2f dc 37 98 b4 c1 02 d3 1e a0 1a c3 b1 b8 62 45 31 38 d5 05 92 67 c7 4c 6b 93 9b aa b4 29 bc b8 8a a8 c5 de f8 22 13 11 54 f0 b6 00 8b 0b b1 61 b7 9a 3f 2d b9 ....{...Xv..u... .o.z...,..~.C... N....4r.`...IS.. ..y.}zdC..;..g.3 ..?........c..w. H,N.9..hAy*.'Sc. i../....J..].... ..N....f.l.5>v.. .t...>0.#H&Z.... {...!..}.....9.i TC.tsF.\xk....l. 8...3....'..U... .....V.i.B.`.../ .7...........bE1 8...g.Lk....)... ...."..T......a. .?-.
20
00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 00000130 00000140 00000150 00000160 00000170 00000180 00000190 000001a0 000001b0 000001c0 000001d0 000001e0 000001f0 00000200 00000210 00000220
00 00 00 95 00 00 00 07 73 73 68 2d 72 73 61 00 00 00 01 23 00 00 00 81 00 da b9 53 d1 51 28 36 a2 62 67 bb a4 56 f0 ae 37 86 56 88 56 4f 73 a3 5e f3 8a 9f 2f 11 86 ee 6f 1a 2b 76 11 83 61 d6 7f 44 ee 26 7d aa 2d ef 10 02 75 e0 f2 40 ba aa 4a a8 df 60 28 6a 49 f6 7b 36 95 1f f8 ab 34 5e f2 16 63 4e 20 31 64 ae 94 1e e9 dd 61 61 f3 c3 90 9f b3 8e 22 30 f1 08 50 83 68 ca 94 ad 82 d4 d3 25 26 69 66 91 79 ea 7c 7b 03 50 b1 fb 4a be e3 40 f6 b1 e2 51 40 32 f9 00 00 01 00 59 a2 72 68 b7 16 49 a3 c9 f1 59 0a 67 3a b6 04 24 50 29 dc ab 66 85 51 88 7b 1f 2d 34 96 bc ba ed 01 db 92 f7 d0 71 14 e8 57 28 f0 40 61 0f 0c 73 40 72 39 a9 51 59 f8 d7 02 d8 6a ff 5a be 48 95 90 ca ac 1d f5 2c 79 2e 7a a3 dd 18 da 30 a4 87 30 6f bd 05 d7 f6 87 69 22 87 03 e4 73 4f 13 a2 66 71 39 0e 0c 9e 5d a0 38 32 d8 fb 42 90 b8 44 7f 1a 92 c6 fe 0b b7 ac 72 3b f7 57 75 aa 49 fa 06 9a 3c ef 28 44 6f 80 97 fd a5 3a 31 4e 0e e0 86 4a 88 cb 66 6b b6 dd 84 e1 df ef 87 a0 41 6e ac 6c de 42 06 e9 48 13 40 62 b3 d0 f6 36 a6 49 94 0a 2d 9e 4d ce ef b9 3e 02 c1 90 f3 70 62 52 54 2f 90 27 b3 b2 f4 e2 64 8f 53 81 26 0a ff b0 cd bb ab 78 a3 1f 40 b4 3f aa 1f 98 b9 47 0a c5 34 2c c3 9a 9b 43 ac 22 f3 65 86 9e 81 56 d3 4b 81 53 a1 c6 24 a9 24 82 46 a9 b9 a1 37 49 ff 00 00 00 8f 00 00 00 07 73 73 68 2d 72 73 61 00 00 00 80 74 bb 21 5e 51 c0 88 e7 25 be cf 87 62 c4 70 a1 0e 11 17 e8 ba 6a fb df 75 d8 e3 72 64 7e 26 13 34 95 41 4b 71 0b 62 c2 b7 5e f4 02 f1 3a 8d 8e ed 88 61 a3 be ce 38 6c be 00 9b 10 9b 31 99 d9 50 bf 51 a5 3e 1c 56 d9 72 7c 36 88 48 fb 62 2b 12 bc d7 da ed 03 af 8f bc dd e2 ec 9e 45 02 91 3f f4 c6 fe 82 a8 5a 7b d8 4d f6 89 1b 0d 20 f1 35 ee ba 91 de 44 93 f7 34 87 c1 16 50 b1 07 d9
........ssh-rsa. ...#.......S.Q(6 .bg..V..7.V.VOs. ^.../...o.+v..a. .D.&}.-...u..@.. J..`(jI.{6....4^ ..cN 1d.....aa.. ...."0..P.h..... .%&if.y.|{.P..J. .@...Q@2.....Y.r h..I...Y.g:..$P) ..f.Q.{.-4...... ...q..W(.@a..s@r 9.QY....j.Z.H... ...,y.z....0..0o .....i"...sO..fq 9...].82..B..D.. ......r;.Wu.I... <.(Do....:1N...J ..fk........An.l .B..H.@b...6.I.. -.M...>....pbRT/ .'....d.S.&..... .x..@.?....G..4, ...C.".e...V.K.S ..$.$.F...7I.... .....ssh-rsa.... t.!^Q...%...b.p. .....j..u..rd~&. 4.AKq.b..^...:.. ..a...8l.....1.. P.Q.>.V.r|6.H.b+ .............E.. ?.....Z{.M.... . 5....D..4...P...
Na kraju razmjene kljueva kao rezultat imamo vrijednosti K (tajni klju) i H (saetak razmjene). Svi kljuevi za enkripciju i MAC dobivaju se iz te dvije vrijednosti. Saetak H iz prve razmjene se takoer koristi kao identifikator sjednice (session identifier), koji se koristi u autentifikacijskim metodama kao dio podataka koji se digitalno potpisuje privatnim kljuem korisnika. Taj identifikator ostaje isti tokom cijelog trajanja veze. Kljuevi se generiraju koritenjem hash funkcije koja je dio algoritma razmjene kljueva. Tako se u algoritmu "diffie-hellman-group1-sha1" koristi SHA1 funkcija. Generiraju se drugi kljuevi za svaki smjer enkripcije. Kljuevi se raunaju na sljedei nain: Inicijalni IV (klijent -> posluitelj) = hash (K || H || "A" || identifikator_sjednice) Inicijalni IV (posluitelj -> klijent)
21
= hash (K || H || "B" || identifikator_sjednice) Klju enkripcije (klijent -> posluitelj) = hash (K || H || "C" || identifikator_sjednice) Klju enkripcije (posluitelj -> klijent) = hash (K || H || "D" || identifikator_sjednice) MAC klju (klijent -> posluitelj) = hash (K || H || "E" || identifikator_sjednice) MAC klju (klijent -> posluitelj) = hash (K || H || "F" || identifikator_sjednice) Ovdje su znakovi od "A" do "F" zapravo obini ASCII znakovi, a identifikator sjednice i vrijednost H, su jednaki kod prve razmjene kljueva. Razmjena kljueva zavrava tako to sva strana poalje paket:
byte SSH_MSG_NEWKEYS
Ovaj paket se alje primjenjujue stare kljueve. Svaka poruka poslana nakon ove mora koristiti nove kljueve i algoritme. Nakon to jedna strana primi ovu poruku ona od tog trenutka pa nadalje mora koristiti nove kljueve za primanje podataka. Nakon zavretka razmjene kljueva klijent e zatraiti pokretanje odreene usluge sljedeim paketom:
byte string SSH_MSG_SERVICE_REQUEST ime usluge
Svaka usluga ima svoje dodijeljeno ime. Najznaajnije su ove dvije usluge: ssh-userauth ssh-connection koje redom oznaavaju autentifikacijski i spojni protokol. Gotovo uvijek nakon zavretka razmjene kljueva klijent e zatraiti pokretanje usluge autentifikacije (ssh-userauth). Ako posluitelj podrava traenu uslugu i eli prihvatiti poslani zahtjev on to dojavljuje klijentu paketom:
byte string SSH_MSG_SERVICE_ACCEPT ime usluge
Ako, ipak, posluitelj ne eli prihvatit klijentov zahtjev on to ini slanjem sljedee poruke i nakon toga se odspaja:
byte uint32 SSH_MSG_DISCONNECT identifikator razloga prekida
22
string string
Poslani paket je tipa SSH_MSG_USERAUTH_REQUEST, nakon toga ide korisniko ime tog korisnika na raunalu na koje se spaja. Zatim ide polje s nazivom usluge koju treba pokrenuti ako autentifikacija uspije (to je gotovo uvijek "ssh-connection", to oznaava spojni protokol). Nakon toga ide naziv metode autentifikacije koju klijent eli. Najvanije metode dane su u tablici 7.
23
Od navedenih metoda jedino "publickey" metodu moraju podravati sve implementacije. Ovaj popis nije konaan, i mogue je definirati i nove metode. Ako posluitelj odbije autentifikacijski zahtjev klijenta on e to uiniti slanjem sljedee poruke:
byte name-list boolean SSH_MSG_USERAUTH_FAILURE autentifikacijske metode koje prihvaam djelomian uspjeh
Dakle, posluitelj alje listu metoda koje on u tom trenutku moe prihvatiti. Logika vrijednost djelomian uspjeh koristi se ako je za autentifikaciju potrebno vie od jedne metode. Na primjer, posluitelj moe zahtijevati da se korisnik mora autentificirati i "password" metodom i "publickey" metodom. Nakon to korisnik poalje "password" zahtjev sa ispravnom lozinkom, posluitelj e mu odgovoriti sa SSH_MSG_USERAUTH_FAILURE paketom u kojem e vrijednost varijable djelomian uspjeh biti istina, a u listi prihvatljivih metoda nee biti navedena "password" metoda. To govori klijentu da je autentifikacija lozinkom prola uspjeno, ali da posluitelj zahtjeva jo jednu metodu autentifikacije da bi proces uspjeno zavrio. Kada posluitelj u potpunosti prihvati autentifikaciju on alje paket:
byte SSH_MSG_USERAUTH_SUCCESS
24
Ovdje vidimo da korisnik ima dva kljua, jedan RSA i jedan DSS klju, kodirano base64 algoritmom. Da bi taj korisnik uspjeno izvrio autentifikaciju "publickey" metodom, u njegovom zahtjevu mora biti jedan od ta dva kljua. Takoer, digitalni potpis koji on poalje provjeravat e se tim javnim kljuem. Privatni kljuevi klijenta obino su pohranjeni na njegovom osobnom raunalu, i da bi se ouvala sigurnost ove metode potrebno je da oni budu dobro zatieni. Najbolja metoda za to je, da korisnik prilikom generiranja kljua, zatiti istog unoenjem takozvanog passphrase niza, to e rezultirati time da e privatni klju biti kriptiran. Passphrase niz je dui od lozinke i moe sadravati i znakove razmaka. Svaki put kad on bude potreban, korisnik e biti upitan za unoenje passphrase niza. Slijedi opis razmjene poruka ovom metodom autentifikacije. Da bi klijent provjerio da li posluitelj prihvaa njegov javni klju on alje sljedeu poruku:
byte string string string boolean string string SSH_MSG_USERAUTH_REQUEST korisniko ime ime usluge "publickey" NE ime algoritma javnog kljua javni klju
Kao to se vidi to je standardna SSH_MSG_USERAUTH_REQUEST poruka kako je opisana gore. Specifina polja su ovdje "publickey" to oznaava da koristimo autentifikaciju javnim kljuem. Logika varijabla NE oznaava da ovaj paket ne sadri digitalni potpis. Zatim ide ime algoritma javnog kljua, najee su to "ssh-rsa" ili "ssh-dss", i na kraju ide javni klju u formatu opisanom u poglavlju 3.2.8. Ako posluitelj ne prihvaa ponueni javni klju on odgovara slanjem SSH_MSG_USERAUTH poruke. Ako posluitelj prihvaa ponueni klju on e dojaviti klijentu slanjem poruke:
25
Nakon to dozna da posluitelj prihvaa njegov javni klju, klijent pomou svog privatnog kljua stvara digitalni potpis i alje sljedeu poruku:
byte string string string boolean string string string SSH_MSG_USERAUTH_REQUEST korisniko ime ime usluge "publickey" DA ime algoritma javnog kljua javni klju digitalni potpis
Poruka je ista kao i prethodna koju je klijent poslao, s tom razlikom da je sada na kraju poruke i digitalni potpis klijenta, a logika varijabla sada ima vrijednost DA, to oznaava da je potpis prisutan. Inae, klijent moe odmah poslati ovu poruku bez da prvo provjerava da li posluitelj prihvaa njegov javni klju, ali tada postoji rizik da e klijent uzalud raunati potpis (to je raunski skupa operacija). Potpis se rauna primjenom odabranog algoritma, pomou klijentovog privatnog kljua nad porukom koja izgleda ovako:
string byte string string string boolean string string identifikator_sjednice SSH_MSG_USERAUTH_REQUEST korisniko ime ime usluge "publickey" DA ime algoritma javnog kljua javni klju
Primitkom ovog paketa, posluitelj provjerava da li je ponueni javni klju prihvatljiv, i zatim provjerava poslani digitalni potpis poslanim javnim kljuem. Ako je potpis ispravan posluitelj alje SSH_MSG_USERAUTH_SUCCESS poruku, ako nije alje SSH_MSG_USERAUTH_FAILURE poruku. U ovom isjeku iz log datoteke programa Putty moe se vidjeti kako ta razmjena izgleda u praksi:
Outgoing packet type 00000000 00 00 00 00000010 63 6f 6e 00000020 6e 65 Incoming packet type 00000000 00 00 00 00000010 73 73 77 00000020 69 6e 74 Outgoing packet type 00000000 00 00 00 00000010 63 6f 6e 00000020 62 6c 69 00000030 72 73 61 50 / 0x32 (SSH2_MSG_USERAUTH_REQUEST) 04 72 6f 6f 74 00 00 00 0e 73 73 68 2d 6e 65 63 74 69 6f 6e 00 00 00 04 6e 6f 51 27 6f 65 50 04 6e 63 00 / 0x33 (SSH2_MSG_USERAUTH_FAILURE) 70 75 62 6c 69 63 6b 65 79 2c 70 61 72 64 2c 6b 65 79 62 6f 61 72 64 2d 72 61 63 74 69 76 65 00 / 0x32 (SSH2_MSG_USERAUTH_REQUEST) 72 6f 6f 74 00 00 00 0e 73 73 68 2d 65 63 74 69 6f 6e 00 00 00 09 70 75 6b 65 79 00 00 00 00 07 73 73 68 2d 00 00 95 00 00 00 07 73 73 68 2d 72 ....tiho....sshconnection....no ne ...'publickey,pa ssword,keyboardinteractive. ....tiho....sshconnection....pu blickey.....sshrsa........ssh-r
26
00000040 73 61 00 00000050 8e ae 54 00000060 74 f3 9e 00000070 4a 30 e9 00000080 d6 92 bb 00000090 ed 12 da 000000a0 f5 79 29 000000b0 18 33 89 000000c0 18 06 bd Incoming packet type 00000000 00 00 00 00000010 00 00 07 00000020 00 00 81 00000030 d5 61 75 00000040 2a 5e 48 00000050 af 0e fa 00000060 f2 b9 eb 00000070 ea a3 17 00000080 22 e6 14 00000090 dc 91 fd 000000a0 2d e9 0f Outgoing packet type 00000000 00 00 00 00000010 63 6f 6e 00000020 62 6c 69 00000030 72 73 61 00000040 73 61 00 00000050 8e ae 54 00000060 74 f3 9e 00000070 4a 30 e9 00000080 d6 92 bb 00000090 ed 12 da 000000a0 f5 79 29 000000b0 18 33 89 000000c0 18 06 bd 000000d0 00 00 00 000000e0 84 94 17 000000f0 85 6b d7 00000100 8c 2c b1 00000110 64 01 38 00000120 d7 17 87 00000130 27 5e cb 00000140 81 4e 14 00000150 18 f7 3e Incoming packet type
00 85 44 68 ed 97 c8 05 bf 60 07 73 00 02 cd 12 0f d0 a5 63 e5 50 04 6e 63 00 00 85 44 68 ed 97 c8 05 bf 07 aa 74 b3 88 f2 88 40 f9 52
00 01 23 00 00 00 81 00 b8 fa 70 5c 47 3c 4d d5 61 75 02 23 8e c1 05 18 9c ba 2a 5e 48 cd 3c 01 9f b3 c4 46 ef af 0e fa 12 d5 8b 55 6c 64 b2 7d f2 b9 eb 0f d4 e1 bd be 12 a6 fe ea a3 17 d0 05 fa 01 a1 e5 ea 97 22 e6 14 a5 75 dc 79 ed 04 06 5d dc 91 fd 63 26 42 2e 21 98 0a 66 2d e9 0f e5 / 0x3c (SSH2_MSG_USERAUTH_PK_OK) 73 73 68 2d 72 73 61 00 00 00 95 73 68 2d 72 73 61 00 00 00 01 23 b8 fa 70 fb 8e ae 54 85 5c 47 3c 23 8e c1 09 74 f3 9e 44 05 18 9c 3c 01 9f d4 4a 30 e9 68 b3 c4 46 d5 8b 55 35 d6 92 bb ed 6c 64 b2 d4 e1 bd cc ed 12 da 97 be 12 a6 05 fa 01 a3 f5 79 29 c8 a1 e5 ea 75 dc 79 c0 18 33 89 05 ed 04 06 26 42 2e 63 18 06 bd bf 21 98 0a
fb 09 d4 35 cc a3 c0 63
sa....#.......p. ..T.\G<M.au.#... t..D....*^H.<... J0.h..F.......U5 ....ld.}........ ................ .y)....."...u.y. .3.....]...c&B.c ....!..f-... ....ssh-rsa..... ...ssh-rsa....#. ......p...T.\G<M .au.#...t..D.... *^H.<...J0.h..F. ......U5....ld.} ................ .........y)..... "...u.y..3.....] ...c&B.c....!..f -... ....tiho....sshconnection....pu blickey.....sshrsa........ssh-r sa....#.......p. ..T.\G<M.au.#... t..D....*^H.<... J0.h..F.......U5 ....ld.}........ ................ .y)....."...u.y. .3.....]...c&B.c ....!..f-....... ....ssh-rsa..... ......2{.e...DO. .k.t.w[.,...k.(. .,.......N....6. d.8.qbRK.S.d.i.. ...../..$....... '^..'7... ...... .N.@...eF+J.3... ..>.......V....
00 00 4d ba ef 7d fe 97 5d 66
27
Kao to se vidi metoda autentifikacije navedena u poruci mora biti "password". Lozinke se kodiraju UTF-8 kodom. Nakon primitka ove poruke zadaa je posluitelja da provjeri ispravnost lozinke to ovisi o operacijskom sustavu koji se koristi i njegovoj konfiguraciji. Ako je lozinka zastarila, posluitelj ne smije dopustiti autentifikaciju starom lozinkom ve mora zahtijevati njenu promjenu. To on radi slanjem poruke:
byte string string SSH_MSG_USERAUTH_PASSWD_CHANGEREQ poruka o tome kako je lozinka zastarila identifikacijski kod jezika poruke
U tom sluaju klijent moe nastaviti pokuati se autentificirati drugom metodom ili moe prikazati klijentu poruku i zatraiti ga unos nove lozinke. Ako je korisnik unio novu lozinku ona se prosljeuje posluitelju u sljedeoj poruci:
byte string string string boolean string string SSH_MSG_USERAUTH_REQUEST korisniko ime ime usluge "password" DA stara lozinka nova lozinka
Ako nova lozinka ne zadovoljava pravila o duljini i sastavu koja namee posluitelj, tada on ponovo alje poruku sa zahtjevom za promjenom lozinke. Na kraju, ako je autentifikacija SSH_MSG_USERAUTH_SUCCESS poruku, SSH_MSG_USERAUTH_FAILURE poruku. uspjela, a ako posluitelj nije on alje alje
28
ime usluge "hostbased" algoritam javnog kljua javni klju raunala klijenta ime (FQDN) klijentskog raunala korisniko ime na klijentskom raunalu digitalni potpis
Digitalni potpis se rauna privatnim kljuem raunala klijenta, a kao poruka se uzima:
string byte string string string string string string string identifikator_sjednice SSH_MSG_USERAUTH_REQUEST korisniko ime ime usluge "hostbased" algoritam javnog kljua javni klju raunala klijenta ime (FQDN) klijentskog raunala korisniko ime na klijentskom raunalu
Nakon primitka ove poruke, posluitelj iz mrene adrese klijenta provjerava da li je FQDM ime raunala isto kao i u zahtjevu. Zatim provjerava u lokalnoj bazi da li poslani javni klju stvarno pripada tom raunalu i da li je tom raunalu i prijavljenom korisniku doputena autentifikacija. Na kraju provjerava poslani digitalni potpis. Ako je autentifikacija uspjela posluitelj alje SSH_MSG_USERAUTH_SUCCESS paket, a ako nije on alje SSH_MSG_USERAUTH_FAILURE paket sa podranim metodama autentifikacije.
29
suprotna strana nema dovoljno velik prozor sve dok ona ne dojavi da poveava veliinu prijemnog prozora.
Inicijalna veliina prozora predstavlja broj bajtova koje je mogue poslati poiljatelju ove poruke prije nego to on povea veliinu prozora. Maksimalna veliina paketa oznaava maksimalnu veliinu pojedinanog paketa, koju poiljatelj ove poruke moe primiti. Poeljno je da to bude to manje kod interaktivnih sjednica, da bi vrijeme odgovora bilo to manje. Ako suprotna strana prihvaa zahtjev za otvaranjem kanala ona alje sljedeu poruku:
byte uint32 uint32 uint32 uint32 .... SSH_MSG_CHANNEL_OPEN_CONFIRMATION broj kanala primatelja broj kanala poiljatelja inicijalna veliina prozora maksimalna veliina paketa podaci ovisni o vrsti kanala
Broj kanala primatelja je broj koji je dobiven u originalnom CHANNEL_OPEN zahtjevu, dok je broj kanala poiljatelja, broj koji ova strana generira i predstavlja lokalni identifikator za ovaj kanal. Ako primatelj CHANNEL_OPEN zahtjeva ne eli otvoriti novi kanal on to dojavljuje slanjem sljedee poruke:
byte uint32 uint32 string string SSH_MSG_CHANNEL_OPEN_FAILURE broj kanala primatelja identifikator razloga odbijanja opis razloga, kodirano UTF-8 kodom identifikator jezika
30
Nakon primitka ovakve poruke primatelj moe poslati broj bajtova vie podataka nego to je to mogao prije. Podaci se prenose sljedeom porukom:
byte uint32 string SSH_MSG_CHANNEL_DATA broj kanala primatelja podaci
Najvea koliina podataka koju jedna strana moe poslati jednaka je veliini prijemnog prozora primatelja ili maksimalnoj veliina paketa za tog primatelja, to god je manje. Nakon slanja podataka, poiljatelj umanjuje veliinu prozora za broj podataka koji je poslao. Takoer je mogue slanje posebnog tipa podataka, kao na primjer slanje stderr izlaza iz interaktivnih sjednica. Slanje se vri sljedeom porukom:
byte uint32 uint32 string SSH_MSG_CHANNEL_EXTENDED_DATA broj kanala primatelja tip podataka podaci
31
Nakon te poruke kanal ostaje i dalje otvoren i mogue je slanje podataka u drugom smjeru. Kanal se u potpunosti zatvara slanjem poruke:
byte uint32 SSH_MSG_CHANNEL_CLOSE broj kanala primatelja
Nakon primanja ovog paketa, suprotna strana mora takoer poslati CHANNEL_CLOSE paket. Tek kada su obje strane poslale te pakete, kanal se smatra zatvorenim.
Ovakve zahtjeve bi trebali slati samo klijenti i ako je posluitelj u kojem sluaju poalje, klijent ih treba odbiti. Kada klijent eli uz svoju ve otvorenu sjednicu vezati pseudo-terminal (pty) on alje poruku:
byte uint32 string boolean string uint32 uint32 uint32 uint32 string SSH_MSG_CHANNEL_REQUEST broj kanala primatelja "pty-req" elim odgovor TERM varijabla okoline (npr. xterm) irina u znakovima (npr. 80) visina u znakovima (npr. 24) irina u pikselima (npr. 640) visina u pikselima (npr. 480) op tty kodovi koje terminal razumije
Ako je vrijednost varijable elim odgovor istina, tada posluitelj odgovara. Ako je stvaranje uspjelo on alje:
byte uint32 SSH_MSG_CHANNEL_SUCCESS broj kanala primatelja
32
Kada klijent eli zapoeti preusmjeravanje X11 prometa sa posluitelja, on to zatrai slanjem poruke:
byte uint32 string boolean boolean string string uint32 SSH_MSG_CHANNEL_REQUEST broj kanala primatelja "x11-req" elim odgovor samo jedna veza x11 autentifikacijski protokol x11 autentifikacijski cookie x11 broj ekrana
Nakon to je uspostavljena sjednica, i svi njeni parametri postavljeni klijent e najee zatraiti pokretanje nekog programa. Taj program moe biti neka aplikacija, ili ljuska operativnog sustava (shell) ili neki podsustav (scp, sftp). Dozvoljeno je pokretanje samo jednog ovakvog programa po sjednici, to znai da e nakon to program zavri morati zavriti i sjednica. Pokretanje ljuske operacijskog sustava vri se porukom:
byte uint32 string boolean SSH_MSG_CHANNEL_REQUEST broj kanala primatelja "shell" elim odgovor
Ovaj zahtjev rezultirat e pokretanjem korisnikove podrazumijevane ljuske (na UNIX sustavim ona je definirana u datoteci /etc/passwd). Ako je korisnik oznaio da eli odgovor, posluitelj e odgovoriti slanjem CHANNEL_SUCCESS ili CHANNEL_FAILURE ovisno da li je pokretanje ljuske uspjelo. Ako korisnik ne eli pokretati ljusku operativnog sustava nego samo izvriti jednu naredbu on alje poruku:
33
Da bi pokretanje uspjelo, podsustav mora biti definiran i mora biti dostupan na posluitelju. Kada naredba ili program koju je klijent pokrenuo na drugoj strani zavri ona vraa izlazni status. Taj broj moe koristiti klijentu jer on moe utvrditi da li je izvravanje naredbe uspjelo ili je dolo do greke. Posluitelj moe poslati izlazni status sljedeom porukom:
byte uint32 string boolean uint32 SSH_MSG_CHANNEL_REQUEST broj kanala primatelja "exit-status" NE izlazni status
Nakon to je ova poruka poslana, svaki put kada pristigne konekcija na adresu i pristup (navedene u poruci), otvara se kanal koji e se koristiti za prijenos preusmjerenog prometa. Ako je adresa na kojoj se klijent vezao na posluitelju onda posluitelj, nakon to mu pristigne zahtjev na toj adresi, otvara novi kanal slanjem poruke:
34
SSH_MSG_CHANNEL_OPEN "forwarded-tcpip" broj kanala poiljatelja inicijalna veliina prozora maksimalna veliina paketa mrena adresa koja je spojena mreni pristup koji je spojen mrena adresa originalnog zahtjeva mreni pristup originalnog zahtjeva
Ako je adresa koja je vezana za preusmjeravanje prometa na raunalu klijentu, i ako na definiranu adresu i definiran pristup pristigne neki zahtjev, klijent e otvoriti novi kanal slanjem poruke:
byte string uint32 uint32 uint32 string uint32 string uint32 SSH_MSG_CHANNEL_OPEN "direct-tcpip" broj kanala poiljatelja inicijalna veliina prozora maksimalna veliina paketa adresa na koju se spaja pristup na koji se spaja adresa originalnog zahtjeva pristup originalnog zahtjeva
35
4 Praktini rad
Praktini dio zadatka bila je izrada raunalnog programa koji e simulirati rad SSH protokola. Ideja je bila da simulator omoguava uvid u sve vane podatke u svakom koraku simulacije, da omoguava dinamiko mijenjanje istih kako bi se ispitalo ponaanje i sigurnost protokola. Treba rei da zbog jednostavnosti i preglednosti program ne simulira apsolutno sve funkcije protokola, nego se bazira na najvanije dijelove tj. jezgru protokola. Tako funkcije kao to su kompresija, prosljeivanje portova (port forwarding) i interaktivne sjednice (interactivne login session) nisu implementirane.
Jezgru programa SSH Simulator ine klase koje su prikazane na slici 4. Glavna klasa je klasa imena SSHSimulator. Ona je zaduena za iscrtavanje korisnikog suelja i komunikaciju s korisnikom. Sve podatke koje korisnik unese ova klasa prosljeuje klasama Klijent i Server. Takoer, ova klasa upravlja tijekom simulacije. Nakon to korisnik stisne gumb za sljedei korak simulacije ova klasa zove odreene metode u klasama Klijent i Server. Klasa Klijent predstavlja klijentsku stranu u SSH komunikaciji i implementira sve potrebne strukture podataka i metode potrebe da bi klijent mogao uspjeno sudjelovati u komunikaciji. Klasa Server implementira serversku stranu u 36
komunikaciji i implementira sve strukture podataka i metode potrebne da bi server mogao uspjeno sudjelovati u komunikaciji. Na poetku, nakon to korisnik stisne gumb za pokretanje simulacije, SSHSimulator objekt instancira objekte klijenta i servera i meusobno ih spaja sa dva para PipedInputStream/PipedOutputStream objekata. Ti objekti simuliraju mrenu vezu koja u stvarnim implementacijama postoji izmeu klijenta i servera. Sva komunikacija izmeu njih ide kroz te objekte.
Prozor programa podijeljen je vertikalno na dva dijela. Lijevi dio predstavlja klijenta, a desni dio predstavlja server. Kao to se vidi na slici 5 u donjem dijelu prozora nalaze se dva gumba za kontrolu simulacije. Prvi gumb zapoinje simulaciju i poslije se koristi za prelazak na sljedei korak simulacije. Do njega je gumb "Reset" koji se koristi za ponitavanje tijeka simulacije i vraanje na poetak. Odmah pored nalazi se polje u kojem za svaki korak simulacije pie objanjenje to se trenutno dogaa. Iznad tih polja nalaze se etiri tekstualna prozora, dva na klijentskoj strani te dva na serverskoj. U tim prozorima ispisuje se sav promet koji odreena strana u komunikaciji dobiva. U gornjem prozoru ispisuje se sirovi (kriptirani) promet, dok se u donjem ispisuje dekriptirani promet (takoer se uklanja zaglavlje i dopuna). Na poetku simulacije korisnik moe odabrati inicijalizacijske nizove koji se alju. Takoer, mogue je odabrati algoritme koji se koriste u postupku pregovaranja. Taj dio suelja prikazan je na slici 6. Na klijentskom dijelu prozora mogue je odabrati redoslijed algoritama. Redoslijed se mijenja gumbima "Gore" i "Dolje", a mogue je odabirati algoritme za razmjenu kljueva, za digitalni potpis, za enkripciju i MAC. Pozicija na listi odreuje koliko je algoritam poeljan, tako da su algoritmi na vrhu najpoeljniji. Ovo e
37
imati utjecaja na postupak pregovaranja algoritama jer e onim redoslijedom koji korisnik odabere algoritmi biti poslani u KEXINIT paketu. Na serverskoj strani je mogue odabirati koje e algoritme server prijaviti u pregovaranju a koje nee. Ovdje redoslijed nije bitan jer se odabrani algoritmi biraju po prioritetu koji poalje klijent. Neke algoritme nije mogue izbaciti. To su algoritmi koji su prema SSH standardu obavezni i sve strane ih moraju podravati kako bi rad protokola bio mogu.
Na kraju postupka, nakon to i klijent i server poalju svoje liste sa eljenim algoritmima, oni se odabiru i korisniku se prikazuju u dijalogu kakav se moe vidjeti na slici 7. Sljedei korak je Diffie-Hellman razmjena kljueva. Suelje prikazuje sve parametar iz te razmjene (modulus p, generator g, parametri e i f, tajni klju K) i mogue je u svakom trenutku mijenjati te parametre. Izgled suelja prikazan je na slici 8. U ovom dijelu simulacije takoer se vri autentifikacija servera. Korisniku je omogueno da sa datotenog sustava odabere datoteke u kojima se nalaze
38
DSS i RSA privatni kljuevi servera. Javni kljuevi i digitalni potpisi se takoer prikazuju korisniku i on ih moe u svakom trenutku promijeniti.
Kao dio autentifikacije servera potrebno je utvrditi ispravnost njegovog javnog kljua. To se radi tako da se korisniku ispie MD5 saetak kljua (fingerprint) i pita ga se da li prihvaa taj klju kao valjan, to je prikazano na slici 9. Nakon Diffie-Hellman razmjene slijedi generiranje kljueva. Suelje je prikazano na slici 10. Tu se odmah na poetku nalaze parametri K i G koji su rezultat iz prolog koraka, a koriste se za generiranje svih potrebnih kljueva. Njihove vrijednosti se mogu promijeniti u svakom trenutku. Iz te dvije vrijednosti generiraju se dva inicijalizacijska vektora i dva kljua enkripcija (po jedan za svaki smjer komuniciranja). Takoer se generiraju i dva MAC kljua. Vrijednosti na klijentskoj i serverovoj strani bi trebale biti jednake ako je sve bilo kako treba. Sve ove parametre mogue je mijenjati u svakom trenutku.
39
Sljedei korak u postupku je autentificiranje korisnika. Korisniku je iz padajueg izbornika ponueno biranje izmeu dvije implementirane metode: "publickey" i "password". Ako korisnik odabere "password" metodu, on moe upisati korisniko ime i lozinku u za to predviena polja. Na serverskoj strani mogue je odabrati koje metode su doputene ("publickey" je prema standardu obavezna). Mogue je odabrati datoteku u kojoj se nalaze korisnika imena i lozinke. Format datoteke je jednostavan, u svakom redu nalazi se jedno korisniko ime, zatim ide razmak, i na kraju pripadajua lozinka. Sve linije koje zapoinju znakom "#" se smatraju komentarima. Ako je odabrana "publickey" metoda na klijentskoj strani tada je korisniku mogue odabiranje datoteke sa privatnim kljuem korisnika. Mogue je odabrati DSS ili RSA klju. Inae datoteke su u PEM formatu, tj. iste su kao datoteke koje generira OpenSSH. Kljuevi nisu kriptirani. Na serverskoj strani mogue je odabrati datoteku u kojoj se nalaze autorizirani javni kljuevi, tj. oni kojima je doputeno spajanje (isto kao datoteka authorized_keys na OpenSSH implementacijama). Poslani kljuevi i potpisi se prikazuju korisniku i mogue ih je mijenjati.
40
Zadnji korak je suelje u kojem se moe kontrolirati tijek spojnog protokola (slika 12). Ovdje nije implementirana najee koritena usluga spojnog protokola, a to je interaktivna sjednica (interactive login session) niti slabije koritena usluga kao to je prosljeivanje mrenih pristupa (port forwarding). Implementirano je obino udaljeno izvravanje naredbe. Korisnik moe podeavati identifikatore otvorenog kanala i na klijentu i na serveru. Takoer moe podeavati veliinu prijemnog prozora na klijentu. Moe se podesiti i naredba koja e se izvriti na serveru (podrazumijevana naredba je dir ili ls ovisno na kojem operacijskom sustavu je program pokrenut). Naredba se izvri i nakon toga server poalje standardni izlaz naredbe klijentu koji to onda ispisuje na svojoj strani. Interaktivna sjednica nije implementirana zbog toga to bi implementacija bila jako komplicirana, a izmjena poruka koje se koriste (to je najbitnije za protokol) je skoro pa ista kao i kod udaljenog izvravanja naredbe.
41
5 Zakljuak
Nakon prouavanja SSH protokola mogu rei da to je to jedan od protokola koji e u budunosti sve vie dobivati na popularnosti, sve dok se ne pojavi neko globalno rjeenje koje e uini Internet promet sigurnijim (npr. IPsec). Njegovi najvei aduti su njegov modularan dizajn, koji doputa dodavanje novih algoritama i podsustava, kad se pokae da su stari nesigurni ili ne pruaju dovoljnu funkcionalnost. Drugi adut je njegova jednostavnost, jer je to protokol lake kategorije koji praktiki ne zahtijeva nikakvu infrastrukturu i njegove programske implementacije su velike nekoliko stotina kilobajta, i mogu biti prikladne za male mobilne ureaje. Njegova primjena e vjerojatno rasti u tom smjeru da e se SSH koristiti kao siguran prijenosni kanal za druge protokola (kao to je to npr. sftp), i mislim da e se u budunosti pojaviti vie alata koji e koristiti tu funkcionalnost. Najvee mane su nedostatak PKI infrastrukture koja bi omoguavala provjeravanje vlasnitva nad javnim kljuevima, pa je SSH u dananjim implementacijama ranjiv na aktivne ovjek-u-sredini napade (man-in-themiddle). Drugi ozbiljniji napadi na SSH protokol nisu pronaeni, a manje ranjivosti pokazane u [13], [14] i [16], su u praksi jako teko ostvarive. Praktini dio seminara tj. izrada simulatora SSH protokola mi je omoguilo puno bolje s upoznavanje sa samim protokolom, i mislim da je program dosta zgodan za vizualizaciju rada protokola i koritenje u edukativne svrhe. Znatieljnici koji svakodnevno koriste taj protokol, a zapravo ne znaju kako on funkcionira, mogu vidjeti kako izgleda rad tog protokola korak po korak.
42
6 Literatura
[7]
[12]
[13]
[14]
[15] [16]
Ylnen, T., C. Lonvick, Ed., "The Secure Shell (SSH) Protocol Architecture", RFC 4251, 2006. Ylnen, T., C. Lonvick, Ed., "The Secure Shell (SSH) Transport Layer Protocol", RFC 4253, 2006. Ylnen, T., C. Lonvick, Ed., "The Secure Shell (SSH) Authentication Protocol", RFC 4252, 2006. Ylnen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) Connection Protocol", RFC 4254, 2006. Lehtinen, S., C. Lonvick, Ed., "The Secure Shell (SSH) Protocol Assigned Numbers", RFC 4250, 2006. Cusack, F., Forssen M., "Generic Message Exchange Authentication for the Secure Shell Protocol (SSH)", RFC 4256, 2006. Friedl M., Provos N., Simpson W. "Diffie-Hellman Group Exchange for the Secure Shell (SSH) Transport Layer Protocol", RFC4419, 2006. Postel, J., J. Reynolds, "Telnet Protocol Specification", STD 8, RFC 854, 1983. Kantor, B., "BSD Rlogin", RFC 1282, 1991. Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed-Hashing for Message Authentication", RFC2104, 1997. US National Institute of Standards and Technology, "Digital Signature Standard (DSS)", Federal Information Processing Standards Publication 186-2, 2000. Schneier, B., "Applied Cryptography Second Edition: protocols algorithms and source in code in C", John Wiley and Sons, New York, 1996. Dai, W., "An attack against SSH2 protocol", Email to the SECSH Working Group ftp://ftp.ietf.org/ietf-mail-archive/secsh/2002-02.mail, 2002. Bellare, M., Kohno, T., C. Namprempre, "Authenticated Encryption in SSH: Fixing the SSH Binary Packet Protocol", Proceedings of the 9th ACM Conference on Computer and Communications Security, 2002. Bellare, M., Kohno T., Namprempre C. "The Secure Shell (SSH) Transport Layer Encryption Modes", RFC4344, 2006. Song, X.D., Wagner, D., and X. Tian, "Timing Analysis of Keystrokes and SSH Timing Attacks" , Paper given at 10th USENIX Security Symposium, 2001. 43
[17] Solar Designer and D. Song, "SSH Traffic Analysis Attacks", Presentation given at HAL2001 and NordU2002 Conferences, 2001.
44
7 Dodaci
Dodatak A Identifikatori poruka Protokolom su definirane sljedee poruke, a njihovi identifikatori su predstavljeni kao cijeli brojevi veliine 8 bitova i dani su u sljedeoj tablici. Sloj u kojem se koristi
Prijenosni Prijenosni Prijenosni Prijenosni Prijnosni Prijenosni Prijenosni Prijenosni Autentifikacijski Autentifikacijski Autentifikacijski Autentifikacijski Spojni Spojni Spojni Spojni Spojni Spojni Spojni Spojni Spojni Spojni Spojni Spojni Spojni Spojni
Identifikator poruke
SSH_MSG_DISCONNECT SSH_MSG_IGNORE SSH_MSG_UNIMPLEMENTED SSH_MSG_DEBUG SSH_MSG_SERVICE_REQUEST SSH_MSG_SERVICE_ACCEPT SSH_MSG_KEXINIT SSH_MSG_NEWKEYS SSH_MSG_USERAUTH_REQUEST SSH_MSG_USERAUTH_FAILURE SSH_MSG_USERAUTH_SUCCESS SSH_MSG_USERAUTH_BANNER SSH_MSG_GLOBAL_REQUEST SSH_MSG_REQUEST_SUCCESS SSH_MSG_REQUEST_FAILURE SSH_MSG_CHANNEL_OPEN SSH_MSG_CHANNEL_OPEN_CONFIRMATION SSH_MSG_CHANNEL_OPEN_FAILURE SSH_MSG_CHANNEL_WINDOW_ADJUST SSH_MSG_CHANNEL_DATA SSH_MSG_CHANNEL_EXTENDED_DATA SSH_MSG_CHANNEL_EOF SSH_MSG_CHANNEL_CLOSE SSH_MSG_CHANNEL_REQUEST SSH_MSG_CHANNEL_SUCCESS SSH_MSG_CHANNEL_FAILURE 1 2 3 4 5 6
Vrijednost
20 21 50 51 52 53 80 81 82 90 91 92 93 94 95 96 97 98 99 100
45
Saetak
U ovom radu opisan je Secure Shell (SSH) protokol za sigurno udaljeno spajanje i prenoenje podataka izmeu dva raunala preko nesigurne mree. Opisan je nastanak ovog protokola kao i protokoli sline namjene koji su mu prethodili. Protokol je detaljno opisan kroz pregled njegovih sastavnih dijelova: prijenosnog, autentifikacijskog i spojnog protokola. Razvijen je program koji simulira i vizualizira rad ovog protokola.
46