Agora
Media
Libraria Byblos



AgoraNews  





PC Magazine Ro  




NET Report   




Ginfo   




agora ON line   





PC Concrete   





Liste de discuţii   




Cartea de oaspeţi   




Mesaje   





Agora   








Clic aici
PC Report - ultimul numar aparut


Soluţii - PC Magazine Romania, August 2003

Zidul

Răzvan Sandu

Motto:

Zărise parapetul şi, dincolo de el, ghicise căscată în întuneric prăpastia. Începu să tremure. Ar trebui să-i spun, mai am timp să-i spun... Dar îl orbiră farurile maşinii răsărite pe neaşteptate din întuneric, în faţa lor, şi fără să-şi dea seama ce face, se apropie mult de Ileana. [...] Ştiuse că, simţindu-l foarte aproape de ea, Ileana va întoarce capul şi-l va privi. Ştiuse că acea ultimă, nesfârşită clipă îi va fi deajuns. - [Mircea Eliade - "Noaptea de Sânziene"]

Afară aproape că s-a lăsat întunericul, dar eu sunt încă în biroul meu, răsturnat într-un fotoliu. În asemenea momente, sunt întotdeauna singur. Obosit, ridic privirea către fereastră. Aici, sus, la penultimul etaj al clădirii futuriste în care lucrez, suprafeţele mari de sticlă oferă priveliştea calmă a terenurilor verzi şi a pădurii ce mărginesc Bucureştiul. Acum, însă, aproape că nu mai percep plăcerea nopţii fierbinţi de iunie. De cel puţin o oră, nu-mi pot dezlipi ochii de pe jurnalele de sistem care defilează tăcut şi continuu pe fundalul negru al monitorului şi de pe LED-ul roşu al harddisk-ului, care nu s-a stins nici o clipă.

Dincolo de acest computer, care se luptă din greu să supravieţuiască, s-a dezlănţuit Iadul. Iadul oricărui administrator de reţea. Oameni rău-intenţionaţi bat la porţi, avertizări despre viruşi vin în ritmul a câte douăzecişicinci de e-mail-uri pe minut. Este cumplit să ştii că între camera familiară, plină de bâzâitul regulat al serverelor şi infernul de afară nu există decât acest singur sistem Linux. O maşină mai veche, aproape dezmembrată, cu hard-disk-uri fragile şi ventilatoare veşnic îmbâcsite de praf.

Între mine şi lupta furibundă ce se dă în acest moment pe Internet nu există decât Zidul.

La începuturi

Prin anii ´70, când germenii a ceea ce este astăzi Internetul începuseră să apară, problemele de securitate erau mult mai mici. Pe de o parte, existau reţelele guvernamentale şi militare, bazate, de cele mai multe ori, pe tehnologii proprietare şi care, oricum, nu permiteau accesul fizic al intruşilor la conexiuni. Pe de altă parte, în mediul universitar se dezvoltau reţele de cercetare, "populate" cu profesori şi studenţi. Aceştia lucrau, de regulă, la proiecte avansate, care impuneau o colaborare cât mai strânsă şi mai largă între persoane situate în universităţi diferite, cu calificări diferite… Securitatea informaţiilor nu era, aici, un scop în sine - dimpotrivă, schimbul de informaţii trebuia facilitat cât mai mult posibil. În această perioadă de pionierat au apărut programe foarte utile, dar care sunt considerate astăzi "găuri" în securitatea sistemelor - un exemplu ar fi utilitarul UNIX finger.

Lucrurile nu au ieşit de tot din perioada "romantică" nici măcar odată cu folosirea aproape generalizată a protocolului TCP/IP, care a ridicat Internetul la scară cu adevărat globală. Abia după 1993, când numărul de persoane/maşini conectate a început să crească exponenţial, într-o dezvoltare fără precedent, Internetul a devenit, cu cel mai propriu termen, o "junglă". Fenomenul se datorează, fără îndoială, apariţiei serviciului World Wide Web (WWW), care a adus cu sine "comercializarea" reţelei. Persoane de toate vârstele, naţionalităţile, etniile, nivelele de educaţie au dat, pur şi simplu, "buzna" în ciberspaţiu, de multe ori fără să le fie prea clar de ce o fac. Unii, mulţi, fără prea mari competenţe în domeniul TI. Alţii, cu intenţii nu totdeauna curate …

Platformele Microsoft au fost, până la un moment dat, scutite de "neplăceri" grave de securitate. Şi asta nu fiindcă designul ar fi fost neapărat mai bun - până la Windows 2000 nici nu se poate vorbi de o securitate reală. Ci pentru că

1. o implementare mai "serioasă" de TCP/IP a apărut abia odată cu Windows 95, până atunci calculatoarele fiind izolate sau legate doar în mici reţele locale şi

2. majoritatea covârşitoare a maşinilor rulează aproape exclusiv software-client (Windows 3.1/95/98/Me/2000 Professional/ XP), deci, 99%, nu oferă servicii în reţea, ci doar primesc aceste servicii… 99%, zic, excepţia la cele spuse mai sus constituind-o "micile" implementări de servere Web şi FTP din versiunile de Windows amintite, pe care puţini utilizatori le instalează şi folosesc. Pe platformele Microsoft, principala ameninţare o constituie, încă, viruşii şi celelalte categorii de software distructiv (purtaţi, "bătrâneşte", pe dischete ☺)…

Orice s-ar afirma, în toată această perioadă, "greul" Internetului s-a sprijinit pe umerii diverselor implementări de Unix (atât cele comerciale, de la AT&T, Sun, HP şi IBM, cât şi, de curând, ai "clonelor" free - Linux, NetBSD, FreeBSD, etc.). Gândeşte-te numai la portaluri uriaşe, ca Google, Yahoo şi altele de aceleaşi dimensiuni şi întreabă-te ce tehnologii trebuie să stea în spatele acestor "mastodonţi", cu încărcări de zeci de mii de utilizatori. Aşa cum îţi spuneam într-un articol precedent, chiar şi situl Hotmail, aparţinând Microsoft, a funcţionat, până la un moment dat, pe maşini Sun care rulau Unix. Asta până când gigantul din Redmond a realizat că face contrareclamă propriilor produse server…

Reacţia lumii Unix la ameninţările sporite de securitate nu s-a lăsat aşteptată (deşi lucrurile nu sunt şi nu vor fi niciodată perfecte). Mai întâi, s-au dezvoltat rapid protocoale cu grad sporit de siguranţă (ssh în locul clasicului telnet, Kerberos, criptare cu chei asimetrice, parole shadow, etc.) Apoi, s-a acordat o mai mare atenţie raportării, publicării, rezolvării în cod şi corectării rapide a problemelor de securitate (vezi, ca exemplu, buletinele de securitate periodice ale Computer Emergency Response Team - CERT - la www.cert.org. Pentru Linux, cu ajutorul vastei comunităţi de programatori open-source din întreaga lume, soluţiile pentru problemele de securitate identificate apar, de obicei, în intervale de ordinul orelor.

Cum funcţionează totul

Pentru aceia dintre voi care abia fac primii paşi în domeniul reţelelor, voi încerca să explic, mai jos, conceptele principale pe care se bazează atacurile. Fiind o prezentare destinată începătorilor, rog profesioniştii să-mi ierte definiţiile prea "libere", analogiile şi simplificările făcute voit.

Orice reţea este alcătuită în scopul de a oferi servicii utilizatorilor săi. Aceste servicii pot fi diverse: stocarea de fişiere pe un harddisk aflat la distanţă, partajarea unei imprimante, primirea şi trimiterea de poştă electronică, transferul de fişiere între maşini, publicarea de pagini Web, etc. Ca majoritatea maşinilor Unix, PC-ul tău Linux este capabil să ofere o multitudine de servicii de reţea - din care, probabil, nu toate sunt active în momentul de faţă, unele nefiind necesare în toate cazurile. Pentru a-ţi face o idee, afişează pe ecran fişierul /etc/services:

less /etc/services

Acest fişier este prea lung ca să-l pot reproduce aici, dar este suficient să ştii că fiecare linie prezentă defineşte câte un serviciu. Probabil că te va speria complexitatea lui…

Principala noţiune ce stă în spatele alcătuirii reţelelor este aceea de arhitectură client/server. Prin definiţie, în această arhitectură, un server este maşina (sau programul rulând pe ea) care oferă servicii altor maşini din reţea. Similar, un client este calculatorul (sau programul) care primeşte, foloseşte serviciul oferit. În multe cazuri, o aceeaşi maşină poate oferi şi primi servicii în/din reţea, jucând rolul de server faţă de unele maşini şi de client faţă de altele. Aşa cum arătam mai sus, exemplificând pentru platformele Microsoft, maşinile rulând Windows NT, familia Windows 2000 Server sau familia Windows 2003 sunt, în esenţă, maşini-server, iar restul (Windows 95/98/Me/2000 Professional/XP) au rolul de client.

Pentru stabilirea "dialogului" între client şi server se utilizează "limbaje" formalizate înţelese de ambele tipuri de maşini, care poartă denumirea de protocoale. Spre exemplu, protocolul Simple Mail Transfer Protocol (SMTP) este utilizat pentru trimiterea poştei eletronice, în timp ce protocolul Post Office Protocol-3 (POP3) este folosit pentru primirea ei ("descărcarea" mesajelor de pe serverul de poştă electronică pe maşina-client).

În fine, ultima noţiune analizată este aceea de port de reţea. Imaginează-ţi maşina ta server, situată la adresa IP 192.168.1.1, ca pe un zid gros de beton care "apără" interiorul maşinii de restul reţelei. În acest zid sunt practicate găuri, numerotate - numite "porturi" - care servesc ca "puncte de întâlnire" între programele client (care încearcă conexiuni din exterior) şi programele server. Dacă, de exemplu, un client va dori să acceseze serverul tău DNS de la adresa IP 192.168.1.1, va "întâlni" programul server corespondent (care rulează "în spatele" zidului) la portul numărul 53. De unde ştie clientul cărui port să se adreseze? Dacă priveşti încă odată fişierul /etc/services, vei observa, în dreptul liniei serviciului domain, în coloana a doua, numărul 53. Acestea sunt numere de port/serviciu larg utilizate în Internet (well-known services).

Ce legătură pot avea toate acestea cu securitatea reţelei, de vreme ce se ştie precis, despre fiecare program-server, la ce port "ascultă"? Noi nu trăim într-o lume perfectă, iar programele-server nu sunt, nici ele, perfecte. Din când în când, în fiecare asemenea program, se descoperă câte o vulnerabilitate - sau eroare (bug) - care, exploatată, permite unui client să se conecteze şi să obţină acces cu drepturi de root pe maşina-server-ţintă. Odată obţinut accesul cu drepturi de root, cracker-ul are întreaga libertate de a controla această maşină…

Ce putem face? Măsurile sunt destul de puţine şi, conceptual, simple, dar aplicarea lor este o adevarată artă (există oameni şi firme care câştigă milioane de dolari oferind consultanţă în acest domeniu). Iată câteva:

• opreşte toate programele-server care nu îţi sunt cu adevărat necesare, adică închide ("zideşte" ☺) porturile acelor servicii pe care ştii că nu le vei folosi;

• descarcă de pe Internet corecţiile (patch) pentru toate vulnerabilităţile descoperite şi instalează-le. Pentru aceasta trebuie să consulţi periodic diverse surse de informare, cum ar fi buletinele CERT, ca să afli ce "găuri" de securitate au mai fost semnalate;

• îngrijeşte-te să ai, pe sistemul tău, un software rezonabil de nou. Vulnerabilităţile de securitate descoperite în programe sunt, aproape întotdeauna, automat corectate de autori în versiunile ce apar după descoperirea lor. Trebuie însă remarcat că un software mai nou nu este, neapărat, mai puţin afectat de erori decât unul vechi. Dacă eşti programator, probabil că ştii că orice versiune nouă de program corectează cam 100 de bug-uri vechi şi introduce aproximativ 200 de bug-uri noi. ☺

• foloseşte parole bune. Nu contează ce versiune de software utilizezi şi ce patch-uri au fost aplicate, dacă parola ta este de două litere şi poate fi spartă într-un sfert de oră, folosind cine ştie ce program gratuit din Internet. O parolă decentă are minimum 8 caractere, litere mari, mici, cifre şi semne speciale amestecate şi nu are nici o legătură cu numele tău, al soţiei, data naşterii, numărul maşinii, cuvinte din dicţionar, etc.

• nu nota parolele, memorează-le! Şi, mai ales, nu le lipi cu POST-IT pe monitor, alături de poza copilului sau a duduiţei Playboy preferate ☺! Vorba regretatului Toma Caragiu, în rolul unui tovarăş însărcinat să pregătească Revelionul la uzină: "Lista surprizelor de Anul Nou va fi afişată la loc vizibil şi fiecare invitat va semna de luare la cunoştinţă pentru fiecare surpriză în parte …" ☺. Te rog, atenţie!

Aceia dintre voi care lucrează mai demult pe platforme Microsoft se vor declara revoltaţi! Software-ul open-source, căruia îi tot lăudăm calităţile, pare a fi … dezastruos, cel puţin din punct de vedere al securităţii ! Nu pot să fac nici un comentariu. Acum vreun an, la ultimele atacuri virale serioase cu Nimda sau Code Red, soluţia a fost găsită în câteva ore sau zile, după ce fuseseră afectate destule maşini, pe toate platformele. Din nefericire, raportul de dimensiuni între cei 650 MB ai CD-ului meu cu Windows 2000 şi cei 124 MB ai ultimului Service Pack pentru el (al treilea) nu mă prea lasă să dorm. Cât despre "fix-urile" de securitate de pe windowsupdate.microsoft.com şi primul Service Pack la Windows 95, care venea pe un număr de dischete aproape egal cu al produsului însuşi, îmi stăruie şi azi în amintire… ☺

"We don´t need no education…"

Sunt un mare admirator al formaţiei Pink Floyd - aţi văzut vreodată filmul concertului de la Pompei ? - dar nu există un domeniu în care fraza de mai sus să fie mai puţin adevărată ca acela al TI-ului. Şi al Unix-ului, în special. Acum, a venit momentul să discutăm despre Zid.

Un firewall (termen pe care nu ştiu dacă să-l traduc ca "parafoc", "antifoc" sau, dimpotrivă, "zid de foc") pare să desemneze, în limba engleză, un zid compact, fără ferestre, care împiedică răspândirea incendiului spre o anumită zonă a unei clădiri. În TI, noţiunea are o semnificaţie precisă: firewall-ul este programul (şi maşina pe care rulează acesta) care separă o reţea locală privată de Internet, oferind acces numai anumitor persoane, servicii şi programe, în cadru strict controlat. Imaginează-ţi-l ca pe un "portar informatic" al reţelei tale.

Observă, te rog, că pseudo-definiţia de mai sus nu spune nimic despre sensul în care circulă informaţia prin firewall. Dincolo de aplicaţia imediată (apărarea reţelei locale de eventualele atacuri ale persoanelor rău-voitoare din Internet), firewall-ul mai poate fi folosit şi pentru scopuri cel puţin discutabile, cum ar fi:

• restrângerea dreptului angajaţilor unei companii de a accesa Internetul, limitând serviciile disponibile, tipul siturilor ce se pot vizita, orele de funcţionare, staţiile de la care se poate face accesul, etc.

• scanarea informaţiilor ce trec prin firewall, în ambele sensuri, căutându-se viruşi, dar şi cuvinte pornografice, informaţii confidenţiale, informaţii ce ţin de intimitatea persoanei (sexuală, de opinii politice), etc. - vezi www.epic.org

• restrângerea dreptului minorilor de a accesa anumite informaţii pe Internet (situri cu caracter violent, pornografic, rasist, etc.)

Este uşor de imaginat ce se poate realiza folosind "utilitare" de asemenea putere care încap pe mâna utilizatorilor neautorizaţi, administratorilor lipsiţi de deontologie profesională, firmelor prea preocupate de "buna conduită" a angajaţilor sau diverselor "agenţii" guvernamentale sau private susceptibile să încalce drepturile persoanei! Sau, de ce nu, chiar pe mâna părinţilor ☺ !

Sub termenul general de firewall se găsesc înglobate două concepte separate: filtrele de pachete (filtering firewall) şi serverele proxy (proxy servers). În cele ce urmează, mă voi referi numai la primul tip, care realizează, în cele mai multe cazuri, protecţia reţelelor LAN.

Ca în western-urile cu John Wayne - table, ţinte, reguli…

Ai instalat un firewall pe sistemul tău ? (vreau să aud "nuuuuuuuuu"). Ba da, îl ai - este chiar kernel-ul Linux.

În reţea, informaţia circulă sub formă de pachete. Pentru a trimite prin reţea un fişier, acesta este "spart", la sursă, în pachete. Pe lângă informaţia strict utilă, "bucata" de fişier propriu-zisă, numită corpul pachetului (packet body), fiecăruia i se adaugă un antet (header). Fără a intra în amănunte, antetul specifică sursa de la care a pornit pachetul, destinaţia sa şi alte informaţii (cum ar fi tipul de comunicaţie pe care pachetul îl stabileşte, adică serviciul de reţea/portul/protocolul care îl utilizează).

Kernel-ul Linux conţine, implicit, codul necesar pentru a face filtrarea de pachete, pe baza informaţiilor existente în antetul acestora. Tot ceea ce este necesar este o "unealtă" cu ajutorul căreia să putem defini regulile în funcţie de care se va face filtrarea. În versiunile mai vechi de Linux, aceste utilitare au fost, pe rând, ipfwadm şi ipchains, iar în prezent utilitarul folosit este iptables - acesta este singurul la care mă voi referi, deşi mai există încă în funcţie maşini care folosesc vechile programe.

În kernel, regulile după care se face filtrarea pachetelor sunt grupate în tabele (tables). Kernelul posedă trei asemenea tabele predefinite şi oferă posibilitatea de a se defini şi altele:

• filter - tabela implicită folosită pentru filtrarea pachetelor;

• nat - tabela folosită pentru a aduce modificări pachetelor care creează o nouă conexiune;

• mangle - tabela folosită pentru a opera modificări speciale asupra pachetelor;

Fiecare dintre tabelele arătate conţine, la rândul său, un număr de serii sau lanţuri de reguli de filtrare (chains).

Tabela filter, singura despre care vom vorbi aici, conţine:

• INPUT - seria de reguli care se aplică pachetelor primite printr-o interfaţă de reţea

• OUTPUT - seria de reguli care se aplică pachetelor ce pleacă prin aceeaşi interfaţă de reţea ca şi cea care le-a primit;

• FORWARD - seria de reguli ce se aplică pachetelor ce sosesc printr-o anumită interfaţă de reţea şi pleacă prin alta.

Fiecare serie predefinită foloseşte o politică (policy), adică o acţiune implicită care se execută asupra pachetelor care au traversat toate regulile seriei fără a fi fost "capturate" de nici una dintre ele.

La rândul ei, fiecare regulă conţine un criteriu de filtrare şi o ţintă. Ţinta (target) reprezintă acţiunea care va fi executată asupra pachetului în cauză dacă acesta îndeplineşte criteriul regulii. În caz contrar, este analizată regula următoare sau aplicată politica (dacă regula este ultima din serie).

Valorile predefinite ale ţintelor sunt:

• ACCEPT - pachetul este acceptat să treacă prin filtru;

• DROP - pachetul este respins tacit;

• QUEUE - pachetul este trecut în spaţiul-utilizator;

• RETURN - pachetul continuă cu regula următoare a seriei care a apelat seria curentă.

Comanda iptables permite manipularea tuturor acestor parametri pentru a introduce şi extrage reguli din tabelele kernelului. Iată câteva exemple:

/sbin/iptables -A -s 192.168.0.1 -p tcp —dport 22 -j ACCEPT

Comanda de mai sus poate fi citită: "adaugă (-A) o regulă prin care pachetele provenite de la adresa-sursă 192.168.0.1 (-s), cu protocolul tcp (-p) şi destinate portului 22 (—dport 22) să fie acceptate (-j ACCEPT - fă un salt, jump, la ţinta ACCEPT).

Sau:

/sbin/iptables -P INPUT DROP

stabileşte politica seriei INPUT ca fiind DROP, deci pachetele vor fi, în mod implicit, respinse.

Sau încă:

/sbin/iptables -A FORWARD -p udp —sport 53 —dport 1024 -j ACCEPT

adaugă seriei FORWARD o regulă de acceptare a pachetelelor protocolului UDP ce au ca sursă portul 53, iar ca destinaţie portul 1024. Acest lucru se referă la traficul serviciului de nume (DNS).

Alte exemple de comenzi ar putea fi:

/sbin/iptables -F

care goleşte (flush) regulile din toate seriile sau:

/sbin/iptables -N ineth0

care defineşte o nouă serie, cu numele ineth0.

De remarcat că, în absenţa unei specificaţii explicite, toate operaţiile cu serii şi reguli de mai sus (adăugări, eliminări, etc.) se referă la tabela filter. Tabelele mangle şi nat pot fi folosite ca în exemplul ce urmează:

/sbin/iptables -A PREROUTING -t nat -d 192.168.0.1 -p tcp —dport 80 -j DNAT —to-destination 10.40.5.2

Arta creării regulilor de firewall este mult prea complexă pentru ca eu să o pot prezenta în detaliu aici. Mărturisesc, de altfel, că sunt departe de a fi un expert în firewall-uri şi în securitate. Ceea ce urmăream era să te familiarizezi cu principalele concepte folosite în această tehnică, care să îţi permită să citeşti documentaţia excelentă existentă pe Internet. Iată câteva adrese de unde îţi sugerez să începi:

netfilter.samba.org (da, este situl proiectului Samba, iar codul filtrului de pachete mai este cunoscut şi ca netfilter)

www.redhat.com/support/resources/networking/firewall.html (câteva indicaţii date pe situl Red Hat)

Încurajări

Nu-i aşa că te simţi complet demoralizat de complexitatea sarcinii de a crea un firewall? Nu ar trebui, dacă eşti dispus să studiezi.

Ai putea începe prin a analiza configuraţia unui firewall creat de altcineva sau exemplele din documentaţie. Desigur, nu îţi sugerez, pentru început, să testezi toate acestea pe maşina direct conectată la Internet în spatele căreia şeful tău ţine toate fişierele cu politicile de preţuri - confidenţiale ! - ale firmei. În cel mai bun caz, o configuraţie greşită de firewall poate bloca mai mult trafic decât este cu adevărat necesar, făcând imposibil accesul la unele servicii critice pentru companie. În cazul mai rău, poţi oferi portiţe de atac persoanelor rău intenţionate din afară.

Ah, să nu uit ! Toată munca ta de firewalling este stocată în memoria RAM a computerului, adică se va pierde după repornirea acestuia. Ca să instruieşti Linux-ul să încarce setul creat de reguli, la pornire, salvează-le, mai întâi, folosind comanda:

/sbin/service iptables save
(ca root)

Această comandă va apela scriptul /sbin/iptables-save, salvând regulile în fişierul /etc/sysconfig/iptables. Ele vor fi reîncărcate automat, după repornire, cu ajutorul scriptului /sbin/iptables-restore. Cele spuse mai sus sunt valabile pentru distribuţiile Red Hat recente - alte distribuţii sau versiuni mai vechi pot avea alte comenzi pentru a obţine acelaşi efect.

Şi dacă tot am adus vorba despre micile facilitaţi Windows-like, pe care ni le oferă o distribuţie "periată" ca Red Hat, îţi voi semnala şi faptul că există acolo două utilitare grafice care te pot ajuta să creezi o configuraţie de firewall de bază. Ele apar cu denumirile "Security Level" şi "glokkit" (Gnome Lokkit) în menurile interfeţei Gnome.

Nu te sfătuiesc, însă, să te bazezi mult pe ele, întrucât aceste utilitare nu sunt capabile să construiască decât un firewall absolut elementar.

S-a făcut noapte

Dacă ai căpătat puţină încredere în capacitatea ta de a crea un firewall eficient, este cazul să mă ridic din fotoliul meu de la etajul trei şi să plec acasă. Fetiţa mea s-a culcat fără să apuc să-i spun povestea de seară - comanda date îmi arată că e aproape 11. Atacul viral - de data asta, a fost virusul BugBear - poate că va înceta, mâine, poimâine. Deocamdată, mail-urile continuă să vină, în cantitaţi uriaşe. Tot ceea ce putem face este să sperăm că firewall-ul şi serverul de mail vor rezista încărcării. Povesteşte-mi experienţele tale la linuxwill@go.ro...

Ieşind, sting lumina şi închid, binişor, uşa după mine.


PC Magazine Ro | CD ROM | Redactia | Abonamente | CautareArhive

Copyright © 1999-2002 Agora Media.

webmaster@pcmagazine.ro

LG - Life´s Good

www.agora.ro

deltafri

Concurs de Grafica Digitala si Web Design

www.agora.ro

www.agora.ro