Ovaj text je objavljen bez ikakvog znanja i dozvole autora. Naravno, necemo mu dati nikakvu naknadu (niti za psihicku bol, niti za materijalnu stetu koja mu je pricinjena ovim objavljivanjem). Text nije toliko novijeg datuma, ali trebate ga procitati. Sinisa Tomic web-admin (mioc@fly) P.S. TURBO! ULTRA! MEGA! VAZNO! !!! !!! !!! U tekstu pise da su terminali u auli sigurni. U vrijeme pisanje su !!! (mozda) i bili sigurni. Danas to vise nije tako. To su jedna od !!! najnesigurnijih racunala na FERu, tako da ovo radite iskljucivo sa !!! SIGURNOG RACUNALA! (neka od onih u Fly-u su sigurna, a mozda je !!! najbolje da si S/Key-eve gernerirate kod kuce pomocu nekog od programa !!! koji za to postoje, a zatim ih inicijalizirate samo. !!! !!! (tko ne voli citati: TERMINALI U AULI _*NISU*_ SIGURNI!!!) UKRATKO Na fly-u je odnedavno instaliran s/key programski paket koji nudi vrlo efikasnu zastitu od svih vrsta mreznih snifera. Njegova upotreba je preporucena svima koji se logiraju na fly od drugdje nego sa terminala u auli (dakle, preko modema, terminala na SRCE-u, nekog zavoda i sl.) Ovaj tekst ukratko objasnjava kako da upotrijebite s/key sistem passworda i zasto. UVOD Mrezni sniferi predstavljaju jedno od najopasnijih oruzja kojima raspolazu hackeri (provalnici). Ukratko receno, onaj koji uspije dignuti snifer na jednom mreznom racunalu ima uvid ne samo u promet koji se odvija na tom racunalu vec i u sav promet koji prolazi preko tog racunala. Taj promet ukljucuje i vase passworde. Drugim rjecima, ukoliko je dignut snifer na ijednom od racunala koja povezuju vas terminal sa odredisnim racunalom, provalnik koji je dignuo snifer otkriti ce vas password. Sniferi su se cesto javljali na CARNet-u, nekolicina ih je vrlo vjerojatno i trenutno u pogonu, te oni predstavljaju realnu opasnost po sigurnost sistema i vaseg accounta. S/Key predstavlja rjesenje problema snifanja. Radi se o programu koji omogucuje koristenje dodatnih, jednokratnih passworda, osim onog "sistemskog". S/Key vam moze izgenerirati listu od 100-ak passworda znanih samo vama. Tada imate izbor: ili cete se ulogirati sa pravim, sistemskim passwordom, ili cete upotrijebiti s/key password. Ukoliko se logirate sa "nesigurnog" terminala (dakle, postoji mogucnost da je na jednom od mnogih racunala koje povezuju vas terminal sa racunalom na koje se logirate dignut snifer, kao sto je to cesto bio slucaj sa modserverima), biti ce bolje da upotrijebite s/key password. Posto jednom upotrijebite s/key password, on postaje neupotrijebljiv, i sljedeci sa liste s/key passworda postaje "aktivan". Drugim rjecima, cak i ako je vas password bio usnifan, on je sada provalniku potpuno beskoristan. Iduci password znate iskljucivo vi. UPOTREBA Prije nego sto pokrenete s/key sistem, morate naci neki potpuno siguran terminal. U ovom slucaju, to su terminali u auli. Oni su spojeni na fly preko jednog jedinog racunala (dec90m) i na njemu nema snifera. Kada sa sigurnog terminala jednom pokrenete s/key sistem, mozete nastaviti koristiti s/key passworde i sa nesigurnih terminala. U s/key sistemu postoje cetiri kljucna pojma: * seed: To je niz do osam znakova kojeg ce generirati samo racunalo pri inicijalizaciji s/key-a. * secret password: To je vas tajni password, kljuc za sve passworde koje ce s/key generirati. * sequence: To je redni broj trenutno aktivnog passworda. Na pocetku to je 98, i opada za jedan svaki puta kada trenutni password iskoristite (drugim rjecima, prvo cete upotrijebiti password broj 98, onda password broj 97 itd. sve dok ne upotrijebite password broj 1. Tada je krajnje vrijeme da se obnovi fond passworda). * s/key password: To je trenutni jednokratni password. Prije svega, trebate napraviti inicijalizaciju, to jest dati neki secret password na bazi kojega ce se stvoriti fond jednokratnih passworda. To se radi pomocu naredbe keyinit, dakle: fly [~]> keyinit Updating gaso: Old key: fl16273 Reminder - Only use this method if you are directly connected. If you are using telnet or rlogin exit with no password and use keyinit -s. Enter secret password: Again secret password: ID gaso s/key is 99 fl16274 SEC WHAT TUB JOIN BADE CUT fly [~]> Ovime je inicijaliziran fond vasih s/key passworda. Trenutno stanje mozete uvijek doznati pomocu naredbe keyinfo, dakle: fly [~]> keyinfo 98 fl16274 fly [~]> Sada smo doznali da je trenutno vazeci password broj 98, i da je seed "fl16274". Dolazimo do kljucne naredbe koja ispisuje same passworde, a zove se key. Njena sintaksa je "key [-n count] sequence seed". Opcija -n omogucuje ispis vise od jednog passworda. Dakle, napraviti cemo (primjer za tcsh): fly [~]> key -n 99 99 fl16274 >spass Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: fly [~]> chmod 700 spass Sada raspolazete datotekom spass koja sadrzi fond vasih s/key passworda. Jedna napomena: program key izracuna bazu passworda na bazi onoga sto ste mu rekli da je seed i da je secret password. On ne zna da li je to uopce tocno, i nece vas obavijestiti ako ste pogrijesili. Provjera se moze napraviti pomocu zadnjeg (99-og) passworda, koji i sluzi u tu svrhu (trenutno vazeci password je 98-mi). Dakle, fly [~]> cat spass 1: BUG HAYS HOFF PLY FINK OF 2: RUTH BRIG COCA GERM DALE WARN 3: LOG CERN BEE CITY BOSS READ [SNIP] 96: POT KERR HOCK EDEN SUCH HANG 97: BEEN BELL WANE JAIL EVIL VERB 98: ROY WANG TASK DOWN TONY JAVA 99: SEC WHAT TUB JOIN BADE CUT fly [~]> Dakle, 99-i password je ispao "SEC WHAT TUB JOIN BADE CUT", sto se podudara sa onim sto nam je rekao keyinit (vidi par stranica gore). Dakle, secret password smo ispravno unjeli "key"-u, i ovi passwordi su ispravni. Preostalo je da ovu datoteku sa passwordima na neki siguran nacin prenesete do kuce (ftp sa nekog sto direktnije spojenog PC-a na disketu bi bilo OK, a ako vec mora preko modema, neka barem bude PGP-kriptirano). Jasno, ako vam netko putem usnifa ovu datoteku u nesifriranom obliku, stvar je propala. Sljedeci puta kada se logirate sa modema ili nekog drugog nepouzdanog terminala, unesite password br. 98 tj "ROY WANG TASK DOWN TONY JAVA". Slijedeci puta cete unjesti passwd 97, tj "BEEN BELL WANE JAIL EVIL VERB". I tako dalje. Vi se jos uvijek mozete logirati sa sistemskim passwordom, ali ukoliko NJEGA usnifaju, provalit ce vam u account. Bit s/key passworda jeste da je usnifan s/key password potpuno beskoristan. NAPOMENE * S/Key je instaliran vec na nivou samog telnetd-a, ali ce korisnicima koji se ne zele njime koristiti biti potpuno transparentan. * Vrlo je preporucljivo izabrati sto anarhicniji secret password. S obzirom da cete ga (ako sve tece normalno) trebati otkucati samo dva puta u zivotu, a kasnija ce sigurnost ovisiti o njemu, neka to bude nesto u stilu "g&6VZhas}=_". * Ovi passwordi mozda izgledaju zastrasujuce dugacki, ali ne predstavljaju problem ako ih koristite od doma (za upotrebu preko modema). Naucite se koristiti clipboard (imaju ga svi vazniji OS-ovi za koje sam cuo) i onda je to stvar tri kliktaja. * Ukoliko vam se ne da uciti koristiti clipboard, ili radite sa terminala u SRCE-u, s/key nudi jos jednu korisnu opciju. Ukoliko na upit "Password:" stisnete ENTER na prazno, ponovo ce vas upitati za password, ali ovaj puta sa echoiranjem karaktera. S obzirom da su s/key passwordi podugacki, to je dobrodosla pomoc, a uopce nije bitno ako vam ga netko i procita. * Naredba "keyinfo" ima tocno tako slozen ispis da se podudara sa argumentima naredbe "key". To znaci da mozete napisati (primjer za tcsh): fly [~]> key -n 3 `keyinfo` Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: 96: POT KERR HOCK EDEN SUCH HANG 97: BEEN BELL WANE JAIL EVIL VERB 98: ROY WANG TASK DOWN TONY JAVA fly [~]> da saznate vasa iduca tri passworda. * Opcijom -s moguce je zadavati i druge parametre keyinitu, to jest seed i velicinu fonda passworda (do 10000). Procitajte manual. * Kada vam istekne fond passworda, trebate ponoviti proceduru sa keyinit. Iz sigurnosnih razloga (vidi sljedece poglavlje) bilo bi preporucljivo to uciniti vec kada ih ostane oko 10 ili prije. * U dogledno doba mislimo se baciti na kompajliranje naredbe "key" za popularne kucne platforme (Linux, AmigaOS, Windows, MSDOS i sl.). Na taj nacin, nije se potrebno brinuti hoce li netko usnifati vasu datoteku sa fondom passworda dok je prebacujete, biti ce dovoljno na fly-u pokrenuti keyinit, upamtiti secret password i seed, i onda doma startati "key". Biti cete obavijesteni. * Ukoliko se nekome vec sada da baciti na kompajliranje toga za kucne platforme, arhivu sa skey-om moze naci na ftp://fly.cc.fer.hr/pub/adm/security/logdaemon-4.9.tar.gz Zanima vas poddirektorij "skey" i u njemu fajlovi skey.* i oni koji sudjeluju u stvaranju libskey.a (vidi Makefile). SIGURNOST S/KEY SISTEMA (ZA ONE KOJI ZELE ZNATI VISE) U bazi s/key sistema nalazi se RSA algoritam kriptiranja (inacica MD4) primjenjen rekurzivno, sto s/key sistemu daje vrlo veliku sigurnost. Princip je sljedeci. Keyinit spoji seed (dobiven na bazi prva dva slova imena hosta i vrijednosti timera, daklem slucajna varijabla) sa secret passwordom koji mu dadoste. Na to primjeni RSA, koji mu izbaci 16 bajtova Tih sesnaest bajtova on sxora na 8 i prozove to key #1. Onda tih 8 bajtova opet baci na RSA, rezultirajucih 16 bajtova sxora na 8 i proglasi to key #2. Itr. (i tako rekurzivno :) ). Password #n se dobiva iz key-a #n jednostavnim postupkom. Na tih 64 bita od key-a dodaju se dva paritetna, sto cini 66 bitova. Tih 66 bitova se rastavi na 6 x 11 bitnih brojeva (od 0 do 2047). Konacno, password se slozi pomocu 6 rjeci iz rjecnika sa 2000 dvo,tro i cetveroslovnih rjeci. (pretvorba key 2 passwd i passwd 2 key nije problem). Vi keyinitu dadoste secret password i on ga rekurzivno izRSAse do 99-og clana. 99-i key ostase zapisan u datoteci /etc/skeykeys, to jest fly [~]> cat /etc/skeykeys |grep gaso gaso 0099 fl16274 3b3f550951550c19 Aug 17,1995 06:49:56 fly [~]> Ova gornja informacija je dostupna svim korisnicima sistema. Taj 3b3f... kada se rastavi na 11-bitne brojeve i pretvori po rjecniku, ispada gorespomenuti "SEC WHAT TUB JOIN BADE CUT" (o vasem izvornom secret passwordu sistem vise nema pojma). To je ujedino ono sto se dobije RSAnjem 98-og keya, kojeg vi imate zapisanog (kao i sve druge) jer ste si zapisali rezultat rekurzivnog RSAnja od secret passworda pa nadalje. Prilikom ulogiravanja, telnetd provjerava dvije stvari. Password kojeg mu utipkate mora se poklapati ili sa sistemskim passwordom, ili se mora moci prevesti u key, i RSA tog key-a treba dati zapisani key. Ukoliko RSA tog key-a ne da zapisani (sada 99-i) key, sistem odbije logiranje. Ukoliko se RSA vaseg key-a poklopi, sistem vas prihvati i zapise taj key koji ste mu dali u /etc/skeykeys (sistem defakto ni nema drugog nacina da sazna slijedeci key (tj. prethodni key) nego od vas). I slijedeci puta opet ista procedura. Kako to sve izgleda jednom provalniku? Culi ste vjerojatno za krekanje. Ukratko, uz dobar rjecnik, rjec tipa "karlovacko" se dekriptira za jednu minutu, "ferklub1" za cetiri dana, "g6^&@jJA\" za par desetaka tisuca godina, a full 8-bitni potpuno slucajni zapis za jos nesto dulje. U slucaju s/key-a, vec prvi key je 8bitni totalno slucajni zapis (dobiven RSAnjem secret passworda i seeda) te je drugi key crypt 8bitnog totalno slucajnog zapisa. Itd. Provalnik ima dvije osnovne mogucnosti. Recimo da se trazi key 76 koji se RSAiran treba poklopiti sa poznatim key-om 77. U tom slucaju kreka se slucajni 8bitni zapis, s time da sav trud propada ukoliko se u meduvremenu pravi vlasnik ulogira sa passwordom 76. Drugim rjecima, sanse za ovo su infinitezimalno malene. Druga varijanta jest da se pokusa pogoditi originalni secret key. To ce nalikovati na standardno krekanje, ali usporeno (u ovom slucaju) 76 puta, zbog iteracija. To je dobar razlog zasto bi ste si trebali obnavljati passworde vec kad spadnete na fond od 10-20 (to usporava krekanje) i zasto bi ste trebali paziti da vam secret password doista bude u stilu "udWDT&n>>". Ukucati cete ga ionako samo dva puta, i krekeru stvoriti tisucljetni san.