IPRO - PC Magazine Romania, Aprilie 2004
SOLUȚII PENTRU PROGRAMATORII ȘI DESIGNERII WEB
Welcome to ARPANET…
Atacurile prin telnet
Alexandru Ioan Lazăr
În anii ´80, pe vremea când Internetul era abia la început, când nimeni
nu auzise de WWW, BBS era cuvântul de ordine. În loc de situri web scrise în
HTML, cei care erau în căutare de distracții printre biți accesau sisteme bulletin
board (BBS - Bulletin Board System) scrise în C. Chiar și acum, BBS reprezintă
o activitate prolifică, iar scrierea unei interfețe BBS este o provocare interesantă
pentru foarte mulți programatori. Un sistem BBS funcționează prin comunicarea
directă dintre client și server. Comunicarea se face tot prin intermediul protocoalelor.
Numai că în loc de cripticul și complicatul httpd, aceste sisteme folosesc telnet…
Boom-Boom System
Telnet poate fi folosit nu numai pentru BBS. Telnet este un protocol care,
în sine, nu permite cine știe ce atacuri. Spargerile se produc din cauza vulnerabilităților
interne ale sistemelor. Hackerii din anii ´80 numeau sistemele nesigure
la atacurile telnet Boom-Boom System (aluzie, evident, la BBS).
Am vorbit data trecută despre atacurile de la distanță. Atacurile prin telnet
intră în această categorie, deoarece ele vizează obținerea accesului de la distanță;
telnet fiind un protocol folosit pentru comunicarea între calculatoare (RFC
856). Telnet funcționează prin schimbul de pachete pe 8 biți între stații. Demonul
telnet rulează pe portul 23 (atenție însă! Sesiuni telnet pot fi lansate pe
orice port, iar comunicația prin telnet se poate face cu aproape orice demon).
Cazul WebForce
Există mai multe motive din care un atac prin telnet reușește. Primul este
software-ul prost configurat, iar în legătură cu acesta există un caz celebru:
cazul mașinilor SGI WebForce.
Calculatoarele WebForce au fost fabricate de Sillicon Graphics și erau livrate
cu un sistem UNIX. WebForce au fost apreciate pentru calitatea lor - dar au
avut o singură problemă: sistemul de operare avea, implicit, contul lp activ.
Contul lp este destinat imprimantei de rețea, și există pe majoritatea sistemelor
UNIX - dar este dezactivat. Dacă ai acces la o stație Linux, aruncă o privire
în /etc/passwd. Vei vedea o linie cu contul lp - și vei vedea că este neprotejate
(nu are parolă) dar este implicit dezactivat.
S-a dezvoltat o întreagă "industrie" de spart mașini WebForce. Totul
se făcea lansând o conexiune telnet spre acea mașină:
telnet 192.141.128.51 Connecting to 192.141.128.51… Connected. Escape character is ´^[´ login: lp $
Stația atacată prezenta imediat un prompt. Contul lp putea fi folosit ca o
"rampă de lansare" pentru a ataca alte stații din rețea. De fapt,
era situația perfectă: un cont care nu cerea parolă, pe o mașină UNIX...
Conturile protejate prin parole slabe sunt și ele vulnerabile. Practic, în
momentul în care fișierele cu parole - fie ele Linux, Windows, NetWare sau orice
alt sistem - au fost afișate sau obținute, ele pot fi și sparte. Dacă un cracker
a putut afișa la stdout fișierul /etc/passwd de pe o mașină UNIX, el poate,
cel puțin teoretic, obține acces ca root. De aceea, parolele utilizatorului
root trebuie să fie alese cu mare grijă. Regulile sunt binecunoscute: minim
opt caracter, litere mari și mici, cifre și nu cuvinte din dicționar. Toate
dicționarele includ numele de Bob (câinele unui prieten, de ce nu?). O asemenea
parolă se sparge ușor. Dar nimeni nu-și botează câinele shg98Abf5.
E drept că, pe un sistem configurat cum trebuie, cazuri ca cele de mai sus
sunt foarte rare. Doar o greșeală serioasă poate activa un cont neprotejat prin
parolă, iar dacă fișierul de parole a putut fi vizualizat sau descărcat, ar
fi cazul să revizuiești schema de securitate a rețelei tale. Mare atenție la
numărul de tentative de conexiune pe care le permiți. Dacă un utilizator nu
e în stare să nimerească parola din cinci încercări, mai mult ca sigur nici
nu o știe!
Pasărea R… login
rlogin și rsh permit utilizatorilor de la distanță să acceseze resursele unei
stații, într-un mod asemănător cu telnet. Numai că, spre deosebire de telnet,
lipsește terminalul virtual. Cu alte cuvinte, programe ca EMACS sau pico nu
vor funcționa. În schimb, ceea ce face foarte periculos aceste servicii este
faptul că ele nu cer parola utilizatorilor de pe mașiniile "trusted".
Multe sisteme sunt vândute cu wildcard-ul ´+´ activat în fișierul
/etc/hosts.equiv, ceea ce implică faptul că, implicit, toate mașinile sunt tratate
drept "trusted". În acest fel, se poate obține accesul folosind orice
nume de utilizator existent în fișierul /etc/passwd al țintei, mai puțin root
(iată de ce este serviciul finger atât de periculos…).
Să vedem un exemplu…
$whoami ftp $rsh test.ro csh -i Warning: no access to tty; $ rlogin test.ro -l toor Welcome to our domain!
Poți observa că totul a pornit cu mine logat ca ftp (și nu root, cum aș lucra
în mod normal). M-am logat apoi, tot ca ftp. Warning: no access to tty; ar fi
trebuit, poate, să mă alarmeze. Dimpotrivă, cu atât mai bine, asta înseamnă
că nu există job control… așa că pot să mă desfășor "în voie".
Probabil că ftp nu are o importanță atât de mare. DAR contul bin, cont de sistem,
are, pentru că este proprietarul unor fișiere importante. De exemplu, dacă m-aș
loga ca bin, aș putea avea acces la fișierele pe care acest cont le deține.
Părerea mea? Rsh și rlogin trebuie dezactivate fără drept de apel - sau, dacă
ai neapărată nevoie de ele, permite conexiunea numai de la anumite adrese.
Protecția
Cum se atinge o configurare corectă? Păi… În primul rând, parolele. Nu
aștepta să-ți fie spartă rețeaua ca să schimbi parolele. Evită folosirea conturilor
fără parole (impune folosirea parolelor chiar pe mașini cu Windows9x) și verifică-le
pe cele existente. Schimbarea parolelor ar trebui făcută la cel mult o lună
pentru fiecare utilizator. Pentru un administrator, educarea utilizatorilor
trebuie să fie o prioritate. Degeaba ai parole gen X0jkgfsIGl dacă sunt pe un
post-it lipit de monitor.
În Windows, trebuie să blochezi orice fel de conexiune telnet venită din exterior,
cu excepția cazului în care e nepărată nevoie de ele (iar atunci în nici un
caz să nu permiți logarea ca guest). Telnet nu e încă destul de configurabil
pe platforma Microsoft. Părerea mea. În cazul Linux, nu trebuie să iei măsuri
atât de radicale. Dimpotrivă, îți poți permite chiar să descurajezi atacatorii
folosind mascarea parolelor prin shadow și trecerea unor shell-uri false pentru
conturile sistem.
Să le luăm pe-ndelete. Folosirea de shell-uri false pentru conturile sistem
înseamnă că vei da conturilor ca bin sau daemon (care nu au nevoie de un shell
´real´ ca sh sau bash) un shell care nu există, de exemplu /bin/false,
atât în /etc/passwd cât și în celelalte fișiere care le cer. În felul acesta,
oricine va încerca să se logheze ca bin sau daemon va avea o mică surpriză (un
shell care nu există nu poate răspunde la comenzi).
Chiar dacă ei vor obține acces non-root, rămâne o soluție. Shadow este, pentru
cine nu știe, un utilitar care permite înlocuirea fișierului /etc/passwd cu
un link simbolic pentru adevăratul fișier cu parole care este ascuns bine prin
structura de directoare. Dacă un atacator obține acces ca utilizator non-root,
el nu va vedea nici un fișier cu parole (shadow este destul de deștept ca să
nu permită deschiderea fișierului real printr-o comandă care invocă link-ul
simbolic. De exemplu, cat /etc/passwd | less nu va produce nici un rezultat
în afara unui mesaj de eroare).
Telnet mai are o mare problemă: comunicația prin el este necriptată. Plasarea
unui sniffer (interceptor de trafic) în rețeaua ta va putea dezvălui parolele
pe care tu le introduci când te conectezi prin telnet. De aceea, eu prefer să-l
înlocuiesc cu ssh (Secure SHell), care folosește o comunicație criptată, asigurând
parolele tale pentru următoarele câteva era glaciare câte vor fi necesare pentru
a le sparge.
|