IPRO - PC Magazine Romania, Noiembrie 2003
SOLUŢII PENTRU PROGRAMATORII ŞI DESIGNERII WEB
Securitatea Reţelei
Alexandru Ioan Lazăr
Instrumente (1) - Scanere
Pe vremea când autostrada informaţională era doar un grup de uliţe la 300 bps, nu se auzise încă de HTTP. De fapt, nici nu se inventase e-mail-ul aşa cum îl ştim noi. La acel moment, vulnerabilităţile erau foarte puţine, şi cele mai multe doar pentru atacuri DoS (Denial of Service). De fapt, problema esenţială era cea a parolei, din moment ce singura metodă de comunicare era asemănătoare cu telnet-ul actual.
Timpul a trecut, protocoalele s-au înmulţit, şi odată cu ele, au apărut şi o serie de vulnerabilităţi. Au apărut Linux, Solaris, Windows (că tot veni vorba de breşe …), Linus Torvalds, Kevin Mitnick, Wietse Wenema, Dan Farmer şi toţi cei care le-au călcat pe urme. Dar nici măcar mintea acestora din urmă nu poate ţine minte toate setările posibile, nici toate posibilităţile de a sparge un sistem. Aşa că au apărut scannerele.
Scannere şi protocoale
Un scanner este un program care interoghează porturile unui calculator-ţintă şi întoarce informaţii despre acel calculator. Luna trecută amintisem în treacăt despre protocoalele de la nivelul Aplicaţie, şi mai ales de câteva mai cunoscute: ftp, http, smtp, telnet şi finger. Un scanner se bazează pe informaţiile care se "scurg" prin porturi datorită acestor protocoale - mai precis, datorită demonilor lor.
Înainte de a discuta pe larg despre scannere, haideţi să vedem mai întâi cum
funcţionează aceste protocoale şi "demonii" lor. Demonii (daemons)
sunt programe care ascultă anumite porturi. Atunci când tu scrii www.pcmagazine.ro
şi apeşi <ENTER>, lansezi o cerere spre portul 80 al ţintei, pe care rulează
demonul httpd. Acesta "aude" cererea, şi acţionează în consecinţă.
Probabil că deja te întrebi câţi demoni există. Mulţi, într-adevăr...câte protocoale la nivel Aplicaţie, atâţia demoni. Nu-i aşa că e ceva în neregulă? De câtă memorie este nevoie pentru asta? Demonii aceştia nu pot sta tot timpul în memoria calculatorului pentru că ar încetini prea mult celalalte procese. În plus de asta, ce folos ar fi ca demonul ftpd (FTP) să fie activ tot timpul, în condiţiile în care e folosit foarte rar? Soluţia este inetd, "mama tuturor demonilor", un demon care porneşte la bootarea unui sistem Linux sau UNIX (platformele Microsoft folosesc - normal - programe proprietare Microsoft, care se bazează însă pe aceleaşi principii). Inetd ascultă de toate porturile, şi atunci când apare o cerere pe unul din ele, cedează controlul demonului corespunzător.
Demonii ştiu să facă multe lucruri. În afară de unul singur: nu prea ştiu să se apere de intruşi. Inevitabil, unele informaţii se pot scurge prin porturi, sau pot fi obţinute prin diverse cereri. Evident că unui om i-ar lua ceva timp să interogheze toate porturile… aici intervine un scanner.
Dar cum…?
Cum funcţionează, deci, un scanner? Mai precis, cum poate un scanner să afle informaţii despre o ţintă? Şi în plus, de când este un administrator atât de "deştept" încât să lase informaţii vitale să "scape" prin porturi?
Şi totuşi, fiecare demon trebuie să trimită unele informaţii către client. Dacă ştii sa programezi în Perl, vei putea face un script care să afle ce demoni ascultă porturile unei ţinte, fătă cunoştiinţe despre TCP/IP. De exemplu, să zicem că vreau să aflu ce serviciu rulează pe portul 22 al unei maşini. Pentru asta, ar fi destul să lansez o conexiune telnet spre acel port…
telnet 192.168.141.129 22
Trying 192.168.141.129...
Connected to 192.168.141.129.
Escape character is ´^]´.
220 alex FTP server (Version wu-2.6.1(1) Wed Aug 9 05:54:50 EDT 2000) ready.
530 Please login with USER and PASS.
…şi iată cum penultima linie mă lămureşte că portul 22 este "monopolizat" de serviciul FTP (de dragul didacticii, am folosit portul 22. De obicei, ftpd ascultă portul 21). Mai departe, aş putea încerca să văd dacă mi se oferă ftp anonim, şi aş vrea să aflu dacă nu cumva există directoare în care utilizatorii anonimi ar putea scrie. Acolo aş pune un script Perl… şi cred că îţi dai seama ce pot scrie în acel script J.
Evident însă, un scanner face mai mult decât să lanseze conexiuni telnet. Mai ales că aceste conexiuni lasă urme în fişierele-jurnal (fişiere care înregistrează tot ce "mişcă" prin porturi). Ele obţin informaţiile prin lansarea unor cereri specifice. Dacă îţi place C, poţi arunca o privire peste sursele programului SATAN (vezi mai jos…), o bijuterie în materie de programare.
Gama informaţiilor pe care un scanner le poate furniza este imensă. Totuşi, un scanner nu va putea da două informaţii: nu va dezvălui un cracker vreo metodă clară de spargere, şi nici nu-i va putea spune ce urme a lăsat scanarea în fişierele jurnal.
Şi…merge?
Primul (şi probabil unul din cele mai folositoare) scannere pe care l-am încercat a fost IdentTCPScan. Iată ce a întors scanner-ul când am scanat o maşină din reţea (am omis unele înregistrări):
Port:21|Service:(?)|Userid:root
Port:22|Service:(?)|Userid:root
Port:25|Service:(?)|Userid:root
Port:37|Service:(?)|Userid:root
Port:79|Service:(?)|Userid:root
Port:80|Service;(?)|Userid:root
Port:6000|Service:(?)|Userid:root
IdentTCPScan identifică, deci, procesele care rulează pe un anume port şi uid-ul acestora.
Am mai amintit despre această greşeală de configurare în articolul trecut, dar acum o vedem pe viu. Portul 80 este ascultat de HTTPD. Folosind IdentTCPScan, am aflat că uid-ul este root. Dacă aş găsi un program CGI vulnerabil la un atac, aş putea să rulez orice procese ca root şi aş putea să "fur" fişierul /etc/passwd şi sa-l sparg.
Nici portul 6000 nu e de neglijat, deoarece este portul serverului X. Atacând ţinta prin acest port, eu aş putea intercepta - dacă portul e neprotejat - ceea ce introduc utilizatorii, aş putea captura ferestre sau le-aş putea schimba comportamentul (la drept vorbind, dacă aş avea intenţii rele, aş putea scrie un script Perl care să ucidă într-una serverul X…dar asta e ceva ce numai un cracker ar face). Un rezultat asemănător este întors şi de STROBE, care este însă mai rapid şi nedetectabil pentru unele firewall-uri.
SATAN (System Administrator´s Tool for Auditing Networks) este unul din cele mai "tari" instrumente de securitate. Scris de doi hackeri de mare valoare, Dan Farmer şi Wietse Wenema, SATAN este şi extrem de uşor de folosit (deşi începătorii vor avea probleme la compilare) pentru că beneficiază de un "panou de comanda" accesibil simplu prin intermediul unui browser web. Nici nu ştiu exact dacă să-l calific drept scanner datorită multitudinii de instrumente pe care le include, dar voi vorbi despre modulul de scanare.
Majoritatea scannerelor returnează informaţii care trebuie sintetizate pentru descoperirea unei vulnerabilităţi (dacă n-ai încercat niciodată să-ţi spargi propria reţea, să vezi ce bine e când iei deoparte 600 de pagini de arhive USENET căutând un "ceva"…). Dar SATAN va spune utilizatorului de-a dreptul care este problema. El poate găsi o gamă foarte largă de breşe, şi este extrem de folositor, chiar dacă ultima versiune este veche de aproape opt ani - unele vulnerabilităţi sunt încă de actualitate.
O suită de instrumente de securitate la fel de utilă ca şi SATAN (mai ales că este disponibilă şi pentru platformele Microsoft) este ISS SAFEsuite, care poate testa vulnerabilităţile dintr-o reţea. Cu toate acestea, ISS SAFEsuite nu mi se pare la fel de complet ca şi SATAN, nereuşind să vadă unele vulnerabilităţi din reţeaua mea.
Scanarea propriei mele maşini cu SATAN (Linux) a găsit o grămadă de breşe, pe când ISS (Windows) a vrut, cred, să mă facă să mă simt mai bine. Chiar aşa însă, versiunile noi ale ISS sunt aproape indispensabile unui administrator, detectând o mulţime de probleme.
Şi dacă nu vreau să fiu scanat?
Evident, se pune problema unei protecţii. Unora nu le place să fie… "scanaţi". Singura soluţie este să foloseşti un firewall de calitate. Unele scannere pot să scaneze nedetectate folosind cereri de conexiune incomplete, pe care unele firewall-uri nu le detectează.
Dacă reţeaua ta a fost scanată (vei descoperi asta în fişierele jurnal) atunci aşteaptă-te la ce e mai rău - chiar dacă în 99% din cazuri nu se va mai întâmpla nimi. Cei mai mulţi crackeri nu acţionează imediat după scanare, aşa că fii gata să respingi un atac chiar peste două, trei săptămâni.
Înregistrează imediat IP-ul eventualului atacator, şi dacă scanările persistă (şi în plus apar interogări finger sau host, conexiuni telnet care încearcă obtinerea accesului prin "forţă brută" sau încercări de a obţine acces prin FTP) ar trebui să contactezi rapid ISP-ul celui care te spionează.
Un ultim cuvânt despre scannere: cele mai puţin cunoscute se obţin destul de greu şi numai sub formă de sursă.
Sunt necesare cunoştinţe de C pentru a putea interveni în sursă în caz de erori. Cea mai bună metodă de a le găsi este folosirea unui serviciu de căutare FTP (www.alltheweb.com are un asemenea serviciu).
Mult noroc…
|