Internetul, O Retea Globala de Informatii

Cuprins

CAPITOLUL I

NOȚIUNI GENERALE

1.1. INTERNET-generalități

Ființa umană este făcută să comunice. În noua societate, cea de tip informațional, comunicarea, transferul și schimbul de informații se desfășoară prin intermediul sistemelor informaționale. Punerea la un loc a datelor stocate digital, textelor, sunetului și imaginii multimedia au condus la răspândirea utilizării sistemelor moderne de telecomunicații, a computerelor personale și serviciilor electronice de informații.

Internetul, o rețea globală de informații, s-a transformat în platforma globală de telecomunicații. Cetățenii societății industriale sunt în fața necesității de a reconsidera modalitățile de transfer a informațiilor, adaptându-le noilor cerințe și tehnologii.

Noua societate informațională aduce cu sine o serie de oportunități deosebite: constrângerile spațiale și temporale (de granițe și timp) în materie de comunicații au fost mult reduse, informațiile pot fi prelucrate, stocate și transferate rapid, prețurile serviciilor legate de transferul informației sunt în continuă scădere.

Există astăzi un larg consens în a se considera de către academicieni, politicieni și oameni de afaceri ca progresul în domeniul tehnologiilor informațiilor și comunicațiilor va afecta în mod substanțial structura societății umane. Societatea informațională nu numai că va deschide noi canale de comunicație între oameni ci va avea un impact important asupra modului în care trăim, învățăm, muncim, consumăm, interacționăm cu administrația și ne distrăm. Având în vedere impactul noilor tehnologii asupra societății, educația și perfecționarea vor juca un rol crucial în familiarizarea oamenilor cu schimbarea.

Tranziția către societatea informațională, globalizarea, progresul științific și viteza foarte mare a transformărilor, toate acestea fac ca oamenii să fie confruntați cu o avalanșă de informații. Ușurința în utilizarea rețelelor informaționale și de comunicații reprezintă însușiri de bază pentru cetățeanul de azi al planetei.

Internetul este o lume fascinantă. Însă nu este un loc foarte prietenos. În timp, pe măsură ce sunt dezvoltate standarde și tehnologii noi, aceste lucruri s-ar putea să se schimbe. Însă, la fel ca în toate situațiile în care sunt explorate domenii noi, vor apărea inevitabil probleme cu tehnologia și cu oamenii în timp ce Internetul continuă să crească într-un ritm rapid. Deoarece nu toți oamenii pe care îi vom găsi în Internet vor avea intenții bune, trebuie să ținem cont de elementele de securitate după ce ne conectăm la Internet.

1.2. Modelul de rețea OSI

În anul 1984, Organizarea Internațională de Standardizare (International Standard Organization, sau ISO) a dezvoltat un model destinat să ajute la standardizarea modului în care erau implementate protocoalele de rețea astfel încât funcțiile specifice să poată fi izolate în componente care puteau fi întreținute cu ușurință. A rezultat modelul de rețea OSI (Open Systems Interconnection). Organizația ISO a utilizat acest model pentru a dezvolta un set de protocoale de rețea deschise, însă acestea nu au fost adoptate niciodată pe scară largă. Oricum, modelul OSI este încă utilizat atunci când se discută de protocoale de rețea și este reprezentat în figura 1.1.

Figura 1.1. Modelul OSI

Fiecare strat (nivel) din model oferă servicii straturilor adiacente. Aceasta înseamnă că fluxul real de informații începe de la stratul situat cel mai sus în ierarhie, stratul aplicație, care apelează la serviciile oferite de stratul prezentare, care folosește serviciile furnizate de stratul sesiune și așa mai departe. Cel mai jos în ierarhie este situată componenta fizică a rețelei. La acest nivel este definit modul în care sunt transmise datele prin rețea – de la cablare până la plăcile de rețea și la conectoarele utilizate prin canalul fizic. Când ajung la un alt nod pe stratul fizic, datele încep să urce prin celelalte straturi; software-ul de pe fiecare strat utilizează funcții ale stratului superior până când, în final, informațiile ajung la stratul aplicație, unde pot fi în legătură cu utilizatorul. Acesta este fluxul fizic al informațiilor prin model.

Privind dintr-o perspectiva logică, fiecare strat de model comunică cu stratul corespondent din nodul situat la distanță. De exemplu, software-ul de pe stratul aplicație nu este interesat decât de modul de comunicare cu stratul aplicație din nodul situat la distanță. Software-ul scris pentru acest nivel nu trebuie sa înțeleagă modul în care ajung datele la stratul aplicație corespondent de la celălalt capăt al conexiunii. Nu contează dacă datele circulă prin cabluri de fibră optică sau pe conexiuni 10BASE-T – cel puțin atunci când este implicat stratul aplicație. Invers, componentele care lucrează la nivel fizic nu sunt interesate dacă informațiile trimise sau recepționate sunt texte ASCII sau date codate binar. Stratul fizic este preocupat numai de lucrul cu stratul fizic din nodul situat la distanță pentru a trimite și prelua datele la/de la sistemul acestuia.

Stratul fizic

La acest nivel este realizat procesul fizic de mutare a biților de date printr-un mediu de rețea. Componentele rețelei definite la acest nivel sunt:

cablarea;

conectoarele;

– tehnicile de semnalizare (electrice si optice).

Acest strat este probabil cel mai ușor de clasificat. Este format din toate componentele fizice ale rețelei care sunt implicate în trimiterea și recepționarea biților de informații.

Stratul legătură de date

Funcțiile executate pe acest strat sunt destinate asigurării de transmisii sigure de date de la un dispozitiv la altul în cadrul rețelei, cum ar fi verificarea de bază a apariției erorilor în cadrele transmise la nivelul fizic. La acest nivel biții individuali ai unui mesaj ajung la stratul fizic, iar acest strat îi organizează în formatul de cadre corespunzător, care poate fi înțeles de pe nivelurile superioare. Specificațiile IEEE împart acest strat în 2 substraturi: stratul de control al accesului la mediu (Media Access Control – MAC) și stratul de control al legăturii logice (Logical Link Control – LLC). Substratul superior (LLC) implementează punctele de acces la servicii (Service Access Points – SAP), care pot fi referite de alte dispozitive la trimiterea de informații, iar substratul MAC este dedicat trimiterii și recepționării de date fără erori între nodurile din rețea.

Stratul rețea

Conexiunile dintre nodurile rețelei sunt controlate de acest strat. La acest nivel este stabilită și terminată o conexiune logică de rețea între noduri. Între funcțiile care formează serviciile stratului rețea se numără:

translatarea adreselor logice si fizice;

rutarea și comutarea;

controlul fluxului și evitarea congestiei rețelei;

fragmentarea și reasamblarea pachetelor.

Acest strat este cel mai de jos din modelul de referință care nu are cunoștință despre aspectele fizice de bază ale rețelei.

Stratul transport

Acest model de strat este cel mai de jos din modelul de referință care oferă servicii utilizator straturilor superioare. Pe acest strat sunt efectuate și funcțiile de calitate a serviciilor, cum ar fi:

transportul datelor fără erori;

secvențierea în vederea garantării livrării pachetelor în ordinea corectă către straturile superioare;

confirmarea transferului sau recepționării pachetelor de date;

controlul fluxului pentru protocolul utilizat.

Stratul sesiune

Pe acest nivel al modelului sunt stabilite și gestionate sesiuni între calculatoare. Aplicațiile trebuie să își recunoască partenerii de dialog de pe un sistem situat la distanță și să stabilească o sesiune comună pentru tratarea schimburilor de date. De exemplu, pe acest strat protocolul NetBIOS operează pentru a stabili sesiuni bazate pe nume. Pentru a controla o sesiune, software-ul de pe acest strat realizează un arbitraj între cele două calculatoare, comunicând fiecăruia când poate să transmită și pentru cât timp. Sesiunile dintre software-ul de aplicație sunt create, întreținute și terminate pe acest nivel.

Stratul prezentare

Modul în care sunt interpretate și prezentate datele pentru aplicație este determinat de stratul prezentare. Informațiile trebuie să fie arătate utilizatorilor astfel încât să poată fi înțelese. Diferențele dintre noduri, cum ar fi modul de reprezentare al datelor sunt tratate aici. Pe acest strat sunt executate comprimarea datelor și conversiile de protocol. De asemenea și criptarea este efectuată tot pe acest strat. Acest strat include și redirectorul care direcționează operațiile de intrare/ieșire pentru resursele de rețea în cazul în care acestea nu se găsesc pe calculatorul local.

Stratul aplicație

Aici sunt tratate comunicațiile dintre aplicațiile utilizatorilor. Funcțiile de pe acest strat suportă aplicațiile utilizator care folosesc rețeaua. Serviciile care permit unui program să obțină acces la o bază de date care se găsește pe un server realizează aceasta apelând la funcțiile de pe acest nivel. Alte servicii de aplicații implementate la acest nivel sunt:

serviciile de director;

serviciile de postă electronică;

serviciile de fișiere și imprimante;

sesiunile terminale (de exemplu, Telnet).

1.3. Introducere în suita de protocoale TCP/IP

Ce este TCP/IP ?

TCP/IP este prescurtarea de la Transmission Control Protocol/Internet Protocol. Acestea sunt principalele protocoale de rețea utilizate în Internet pentru transferul datelor dintr-un loc în altul. Pe lângă aceste două protocoale importante, mai există și alte protocoale și utilitare care au legătură cu ele și care de obicei sunt grupate împreuna și sunt denumite TCP/IP Protocol Suite (Suita de protocoale TCP/IP). Această suită de protocoale include elemente cum ar fi protocolul de rezolvare a adreselor (Address Resolution Protocol, sau ARP) și protocolul pentru datagramele utilizatorilor (User Datagram Protocol, sau UDP).

Protocolul IP (Internet Protocol)

IP, protocolul de bază este utilizat pentru mutarea pachetelor dintr-un loc în altul.

Caracteristici:

deoarece IP este fără conexiune, fiecare pachet este independent. IP analizează informațiile de antet ale unui pachet și folosește aceste informații pentru a trimite pachetul către destinația finală. IP nu este interesat dacă pachetele ajung în ordinea în care au fost expediate.

IP este fără confirmare. IP nu oferă nici un mecanism pentru a determina dacă un pachet mai ajunge la destinație. Protocolul nu face decât să trimită pachetul și presupune fie ca acesta va ajunge unde trebuie, fie că un alt protocol va fi responsabil pentru această verificare.

IP nu este interesat de calea pe care circulă un pachet atunci când traversează Internetul. Deciziile de rutare sunt lăsate de obicei în seama altor protocoale.

IP preia datele de pe stratul gazdă-la-gazdă și le fragmentează în pachete (denumite datagrame) de o dimensiune care poate fi traversată prin rețea. La destinație, IP reasamblează aceste datagrame și le transferă în sus în stiva de protocoale. Pentru ca fiecare pachet să fie livrat, protocolul Internet plasează adresele IP sursă și destinație în antetul pachetului. De asemenea efectuează un calcul al sumei de control a informațiilor din antet și se asigură de corectitudinea acestora, însă nu efectuează această funcție și pentru zona de date a pachetului.

Protocolul de control al transmisiei (TCP)

Acest protocol utilizează protocolul IP și pune la dispoziție un serviciu fiabil de conexiune între două calculatoare gazda din Internet. În timp ce protocolul IP trimite pur și simplu pachetele pe rutele lor, TCP oferă mecanismele care garantează că pachetele sunt recepționate intacte și că pot fi plasate în ordinea corectă la calculatorul destinație.

Protocolul UDP (User Datagram Protocol)

UDP este similar cu TCP prin faptul că folosește protocolul IP pentru a muta pachetele prin rețea. UDP nu pune la dispoziție un mecanism de confirmare, așa cum procedează TCP, astfel că poael că poate fi considerat un serviciu fără conexiune. Pentru aplicațiile care nu au nevoie de un serviciu de livrare garantat poate fi utilizat protocolul UDP.

Protocolul ARP (Address Resolution Protocol)

Natura funcției de adresare IP ușurează rutarea datelor prin Internet. Atunci când un pachet este trimis către o rețea diferită de cea în care a fost generat, este transferat unui ruter. Ruterul ia decizii pe baza adresei IP și a informațiilor pe care le posedă în tabelul de rutare pentru a trimite pachetul pe drumul către segmentul de rețea corect. Uneori ruterul nu are o conexiune directă cu rețeaua destinație, astfel că expediază pachetul către un alt ruter care poate să execute această funcție. Când pachetul se îndreaptă în sfârșit către segmentul de rețea corect, ruterul sau poarta locală trebuie să cunoască adresa hardware a calculatorului destinație, astfel încât pachetul să facă ultimul pas din călătorie.

Adresele IP sunt utilizate pentru a forma un spațiu ierarhic de adrese care poate fi înțeles de agenții de rutare din Internet, astfel încât aceștia să poată determina modul în care să transmită un pachet dintr-o rețea în alta. Când dispozitivele comunică direct pe segmentul de rețea local, adresa reală utilizată pentru comunicarea între două dispozitive, indiferent dacă acestea sunt calculatoare, rutere sau orice altceva, este adresa internă de control al accesului la mediu (Media Access Control, sau MAC).

Protocolul ICMP (Internet Control Message Protocol)

Cu toate că protocolul IP nu oferă mecanisme de confirmare pentru a permite calculatorului care a trimis mesajul să afle dacă datagrama a fost recepționată intactă la destinație, pune la dispoziție o serie de mecanisme de raportare a erorilor prin intermediul protocolului ICMP. ICMP folosește IP pentru a transmite propriile date prin rețea.

Fiecare pachet ICMP are un câmp care definește tipul mesajului. Tipurile de mesaje folosite de acest protocol sunt prezentate în tabelul următor. În plus, fiecare pachet ICMP conține și un câmp de cod, întrebuințat pentru detalii suplimentare referitoare la tipul de mesaj ( tabel 1.1.).

Tabel 1.1.

Tipuri de mesaje ICMP

Adresarea IP

Adresele IP sunt utilizate pentru a oferi un spațiu ierarhic de adrese pentru Internet. Fiecare adaptor de rețea are o adresă de rețea codată în hardware, cu lungimea de 6 octeți. Această adresă este imprimată în cursul procesului de fabricație. Când pachetele de date sunt trimise prin cablu în segmentul local de rețea, adresa MAC este cea folosită efectiv pentru adresele sursă și destinație înglobate în cadrul Ethernet, care încapsulează datagrama IP propriu-zisă.

1.4. Clasele de adrese IP

O adresa IP are lungimea de 4 octeți (32 de biți). În timp ce adresele MAC sunt exprimate de obicei în notație hexazecimală, adresele IP sunt exprimate de obicei într-un format numit notație zecimală cu puncte. Aceasta înseamnă că fiecare octet din adresă poate fi transformat în reprezentarea sa zecimală, iar cei patru octeți ai adresei sunt separați prin puncte pentru a fi mai ușor de reținut.

Deoarece adresa IP este utilizat pentru a ruta un pachet printr-o colecție de rețele separate, o parte a adresei IP este folosită pentru a identifica rețeaua, iar cealaltă parte a adresei pentru identificarea calculatorului. Adresele IP sunt împărțite în trei clase importante (A, B și C) și alte două mai puțin importante (D și E).

Putem spune cărei clase îi aparține o adresă examinând primii patru biți ai adresei. Tabelul 2.1. prezintă clasele de adrese IP, în funcție de valorile primilor patru biți. În acest table pozițiile biților marcate cu “x” indică faptul că valoarea respectivă nu contează în determinarea clasei de adrese IP.

Tabel 2.1.

Clasele de adrese IP,determinate de primii patru biți

Adresele de clasa A

Adresele de clasa A, exprimate în notația zecimala cu punct, pot varia de la 0.0.0.0 la 127.255.255.255. Deoarece primul bit al primului octet al adresei are întotdeauna valoarea 0, mai rămân numai 7 biți cu care poate fi create o adresă de rețea. Ca urmare, într-o rețea de clasa A pot exista numai 127 de adrese de rețea (01111111 în binar). Nu pot exista 128 de adrese de rețea în această clasă, deoarece numărul 128 exprimat în binar este 10000000, care indică o adresă de clasa B. Deoarece primul octet din adresa de clasa A este folosit pentru identificarea adreselor de rețea, rămân trei octeți care pot fi folosiți pentru identificarea calculatoarelor din rețea. Cea mai mare valoare pe care o putem exprima folosind trei octeți este un șir de 24 de 1. În zecimal această valoare este 16.777.215. Pot exista în total 127 de rețele de clasa A, fiecare rețea putând avea până la 16.777.216 adrese unice pentru calculatoarele din rețea. Astfel domeniul de valori pentru rețele de clasa A variază de la 0.0.0.0 la 127.255.255.255.

Adresele de clasa B

O adresă din clasa B, exprimată în binar poate varia de la o combinație de biți care începe cu 1 și este urmată de 31 de 0, până la 10, urmat de 30 de 1. Exprimat în notația zecimală acest interval variază de la 128.0.0.0 până la 191.255.255.255. Valoarea 128 în zecimal este 10000000 în binar. Valoarea 191 în zecimal este 10111111 în binar. În adresele de clasa B, primii doi octeți ai adresei sunt utilizați pentru identificarea rețelei, iar ultimii doi octeți sunt lăsați pentru crearea adreselor calculatoarelor din rețea. În această clasă pot exista 16.384 de adrese de rețea (de la 128.0 la 191.255) și 65.536 (2 la puterea 16) de calculatoare individuale în fiecare rețea din clasa B.

Adresele de clasa C

Adresele de rețea din clasa C pot avea valori între 192.0.0.0 și 223.255.255.255. Primii trei octeți ai unei adrese din clasa C reprezintă partea de rețea a adresei și numai ultimul octet rămâne disponibil pentru crearea adreselor de gazde. Există până la 2.097.152 de rețele din clasa C, fiecare având cel mult 256 de calculatoare gazdă (în intervalul 0-255). Această împărțire asigură un număr mare de rețele de clasa C, fiecare având un număr mic de calculatoare.

Clasele D si E

Clasele D și E sunt folosite diferit față de clasele A, B și C. Adresele din clasa D sunt rezervate pentru difuzările pe grupuri (multicast). Procesul de transmitere a unui pachet de rețea către mai multe calculatoare gazda se numește multicasting. Adresele din clasa D pot avea valori în zecimal, între 224.0.0.0 și 239.255.255.255. Într-o adresă de clasa D nu există octeți alocați anume porțiunii de rețea sau de gazdă a adresei. Aceasta înseamnă că pot fi create 268.435.456 de adrese unice de clasa D. Clasa E, în zecimal are valori între 240.0.0.0 și 255.255.255.255, în valoare maximă pe care o putem exprima în binar folosind numai 32 de biți. Adresele de clasa E în mod normal nu sunt folosite în rețelele conectate la Internet.

Adrese de difuzare și de difuzare pe grupuri

Până în acest moment, am identificat domeniile de adrese care pot fi utilizate pentru a crea adresele IP din diferite clase. Însă există și excepții care trebuie remarcate. O adresă care identifica în mod unic un calculator din Internet se numește adresă unică (unicast). Numărul de adrese unice din fiecare clasa va fi mai mic decât credem deoarece unele adrese sunt rezervate de obicei pentru scopuri speciale. Tabelul 3.1. prezintă numărul de adrese rămase de fapt pentru clasele A-C după extragerea adreselor speciale.

Tabel 3.1.

Adrese IP disponibile

Ce sunt subrețelele?

Spațiul de adrese IP este foarte valoros. Pentru că o firmă (sau furnizor de servicii Internet) să creeze mai multe rețele, s-ar părea că este nevoie de mai multe domenii de adrese. Însă există o metodă de adresare, denumită lucrul cu subrețele (subnetting), care poate fi utilizată pentru a lua un singur spațiu contiguu de adrese și a-l împărți în mai multe rețele denumite subrețele (subnets).

Deși adresele IP au fost stabilite astfel încât să simplifice identificarea fiecărei porțiuni a adresei IP care a fost folosită pentru identificarea adresei de rețea și a calculatorului gazdă, există nevoia de stabilire a părții de adresă care este folosită pentru identificarea subrețelei. Aceasta se realizează cu ajutorul unei măști de subrețea (subnet mask). O mască de subrețea este o valoare binară pe 32 de biți utilizată special în acest scop.

1.5. Măști de subrețea de clasa A, B și C

O mască de subrețea poate fi utilizată pentru a împrumuta câțiva biți din porțiunea de gazdă a adresei IP astfel încât să poată fi folosiți pentru identificarea rețelei sau subrețelei. Masca de subrețea este o valoare exprimată în format zecimal cu punct, la fel ca o adresa IP, iar rolul acesteia este de a masca porțiunea din adresa IP care specifică rețeaua și partea de subrețea a adresei.

Masca adreselor de clasa A este 255.0.0.0. Deoarece 255 este reprezentat în binary ca un șir de opt biți cu valoarea 1, reprezentarea binară a acestei măști este :

11111111000000000000000000000000

Folosind logica booleană, această mască de subrețea în format binary poate fi utilizată împreună cu operatorul AND pentru a masca porțiunile de rețea și subrețea dintr-o adresă IP. Folosind operatorul AND se va obține rezultatul TRUE numai dacă ambele argumente au valoarea TRUE.

Masca de subrețea pentru adresele din clasa B este 255.255.0.0, iar pentru adresele din clasa C este 255.255.255.0 .

Subdivizarea unei adrese folosind măștile de subrețea

Împărțirea în subrețele devine utilă atunci când luăm un spațiu de adrese de rețea și îl împărțim în subrețele separate. De exemplu, mască de subrețea 255.255.255.128 poate fi folosită pentru împărțirea spațiului de adrese din clasa C în două subretele distincte. Dacă această mască este aplicată adresei de rețea 192.113.255, obținem o subrețea de gazde între 192.113.255.1 și 192.113.255.128 și o altă subrețea cu adrese de gazde între 192.113.255.129 și 192.113.255.254.

Cum se calculează adresele de subrețea?

Pentru a împărți în subrețele un spațiu de adrese, trebuie să stabilim inițial numărul de adrese de gazde de care avem nevoie în fiecare subrețea și să exprimăm acest număr în binar. Așa vom vedea de câți biți avem nevoie pentru porțiunea de gazdă a spațiului de adrese. Scădem valoarea obținută din numărul de biți disponibili (8, dacă împărțim în subrețele ultimul octet al unei adrese din clasa C). Apoi calculăm echivalentul în zecimal al numărului binar care conține pe primele poziții rămase numai biți cu valoarea 1.

1.6. Analiza conținutului unei datagrame IP

După ce un cadru este recepționat de un adaptor de rețea pe stratul fizic, informațiile de antet ale cadrului, care nu sunt relevante pentru protocolul IP, sunt eliminate, iar pachetul IP este transferat în sus în stiva de protocoale. În tabelul 4.1. este prezentată structura unui pachet IP.

Tabel 4.1.

Structura unui pachet IP

0 4 8 16 31

Versiune – acest câmp indică versiunea protocolului IP care a construit datagrama.

Lungimea antetului Internet (Internet Header Length, IHL) – acest câmp conține lungimea antetului pachetului și poate fi utilizat de programele software pentru a calcula locul în care începe efectiv zona de date în cadrul datagramei.

Tipul de serviciu – acest câmp de 8 biți a fost creat pentru ca protocolul IP să poată determina modul de tratare a unei anumite datagrame, cum ar fi acordarea unei priorități mai mici sau mai mari pentru un pachet.

Lungimea datagramei – acest câmp este folosit pentru a specifică lungimea întregii datagrame și este exprimat într-un număr de octeți (bytes). Deoarece are lungimea de 16 biți, poate fi folosit pentru a specifica o dimensiune de pachet de până la 65.534 de octeți. Scăzând valoarea câmpului IHL din aceasta valoare IP, poate fi determinate lungimea zonei de date a datagramei.

Identificare – atunci când protocolul IP împarte un mesaj în mai multe datagrame astfel încât să poată fi transmise prin rețea (fragmentare), trebuie să cunoască la capătul de destinație ce datagrame aparțin aceluiași mesaj, astfel încât să poată fi reasamblate. Pentru acest scop este utilizat acest câmp.

Indicatori – acest câmp conține mai mulți biți indicatori. Bitul 0 este rezervat și ar trebui să aibă mereu valoarea 0. Bitul 1 este câmpul fără fragmentare (Don’t Fragment sau DF):

0 = se acceptă fragmentarea, 1 = nu se acceptă fragmentarea. Dacă un calculator determină că trebuie să fragmenteze o datagrama pentru a o trimite prin următorul segment din rețeaua fizică și dacă acest câmp DF are stabilită valoarea 1, renunță la datagrama. Dacă acest câmp are valoarea 0, împarte datagrama în mai multe datagrame astfel încât acestea să poată fi trimise mai departe pe traseu. Bitul 2 se numește “Mai multe fragmente (More Fragments, sau MF)” și este utilizat pentru a indică starea de fragmentare a pachetului. Dacă are stabilită valoarea 1, trebuie să mai sosească și alte fragmente. Ultimul fragment din mesajul original care a fost fragmentat are valoarea 0 în acest câmp. Împreuna, cele două câmpuri controlează procesul de fragmentare.

Deplasamentul de fragment – atunci când indicatorul MF are stabilită valoarea 1 (adică mesajul a fost fragmentat), acest câmp este folosit pentru a indica poziția fragmentului în cadrul mesajului original astfel încât acesta să poată fi reasamblat corect. Acest câmp are o lungime de 13 biți și exprimă valoarea deplasamentului acestui fragment în unități de 8 octeți.

Durata de viață (Time to Live, sau TTL) – acest câmp specifică perioada maximă (în secunde) în care i se permite unei datagrame să existe în rețea. Valoarea este stabilită la început și este redusă de fiecare mașina prin care trece datagrama. Când acest câmp are valoarea 0 se renunță la datagrama.

Protocolul – acest câmp de 8 biți indică tipul de protocol pentru datele conținute în această datagrama. Network Information Center (NIC) stabilește numerele folosite în acest câmp pentru identificarea protocoalelor.

Suma de control a antetului – este o valoare calculată pe 16 biți, utilizată pentru a verifica integritatea informațiilor din antet. Când informațiile din antet sunt modificate, această valoare este recalculată.

Adresa sursă – este adresa IP a sursei datagramei. Acest câmp are lungimea de 32 de biți.

Adresa destinație – este adresa IP a destinației datagramei. Acest câmp are lungimea de 32 de biți.

Opțiuni – acesta este un câmp original, de lungime variabilă, care poate conține o listă de opțiuni: control, rezervat, depanare și măsură.

Completare – acest câmp este utilizat pentru a completa antetul până la limita de 32 de biți. Completarea se face cu zerouri.

CAPITOLUL II

SECURITATEA RETELELOR DE CALCULATOARE

Nu toate calculatoarele personale sunt legate în rețea. Dar virtual, toate calculatoarele, în rețea sau nu, conțin informații senzitive care fac o invitație la un compromis între ușurința accesului și securitatea datelor memorate în fișiere și baze de date. Gândiți-vă ce ușor este pentru cineva familiarizat cu lucrul pe PC – și azi acest lucru este valabil pentru multă lume – să umble în calculator și să copieze o listă cu clienți, fișiere personale sau orice alte informații care sunt considerate confidențiale. Sunt măsurile de securitate la fel de importante pe un PC ca și procedurile de control al accesului în rețea? Ar trebui ca și conținutul discului hard să fie păstrat la fel de secret ca hârtiile într-un fișier încuiat?

Multă lume consideră că securitatea pe un PC este prea problematică, prea confuză și prea scumpă. Nu toate aceste scuze sunt valabile întotdeauna. Securitatea pe un PC care nu este conectat în rețea este ușor de instalat, folosit și întreținut. Adesea, adăugând un program de securitate re rezolvă o serie de probleme. Dar este acest lucru necesar? Dacă aveți date pe care le-ați încuia într-un birou sau fișet dacă ar fi pe hârtie, atunci, când sunt într-un calculator, trebuie să le protejați cu un program special de securitate.

Vom încerca în continuare să răspundem la întrebarea: ce este o rețea?

În prima etapă, vom considera că o rețea de calculatoare este sigură dacă toate operațiile sale sunt întotdeauna executate conform unor reguli strict definite, ceea ce produce o protecție completă a entităților, resurselor și operațiilor [MUFT86], [MUFT88c], [MUFT88b], [MUFT88c], [JENI89]. Această definiție este completă în sensul că ea nu trebuie să definească ce probleme (amenințări) pot apărea într-o rețea precum și în ce circumstanțe și ce componente ale rețelei sunt amenințate. Lista de amenințări constituie baza definirii cerințelor de securitate. Odată cesta cunoscute, trebuie elaborare regulile conform cărora să se controleze operațiile rețelei. Aceste reguli operaționale se numesc de fapt servicii de securitate, iar implementarea serviciilor se face prin protocoale de securitate.

Pentru a defini lista cerințelor de securitate, trebuie elaborată o listă exhaustivă a variatelor operații, a entităților și resurselor rețelei, împreună cu posibilele probleme, operații ilegale, defecte de funcționare.

O mulțime de mecanisme de securitate [VOYD83], [COOP89], privind toate aceste cerințe de securitate și proiectate conform setului de reguli definite, face ca o rețea să fie sigură. O astfel de rețea se numește rețea sigură de calculatoare. Pentru a o defini trebuie elaborate:

lista cerințelor de securitate;

regulile de protecție și securitate;

mecanismele de securitate corespunzătoare celor de sus.

Există o literatură de specialitate bogată care analizează problemele de securitate ale rețelelor, dar definițiile securității diferă chiar în viziunea instituțiilor internaționale de standardizare:

securitatea este totalitatea mecanismelor și tehnicilor care protejează componentele unui sistem (ISO);

securitatea minimizează riscul expunerii componentelor și resurselor în fața unor vulnerabilități variate (ISO);

securitatea se referă la un complex de măsuri procedurale, logice sau fizice destinate prevenirii, detectării și corectării diferitelor tipuri de accidente, utilizări defectuoase sau căderi ale sistemelor (ECMA).

Prin urmare nu putem găsi în literatură o definiție unanim acceptată în ceea ce privește securitatea rețelelor. În [MUFT89] se încearcă o definiție exhaustivă a conceptului de rețea sigură de calculatoare, sub o formă însă structurată ca o listă de servicii de securitate pentru rețea de calculatoare. Intenția a fost ca această listă să fie cât mai completă, astfel că o rețea care conține toate serviciile descrise poate fi numită rețea sigură.

Pentru a proiecta și implementa un sistem integrat de securitate al unei rețele, este necesar mai întâi să identificăm toate amenințările împotriva cărora este cerută protecția. Acest proces este unul de analiză și constă în trei etape:

analiza vulnerabilităților, adică identificarea elementelor potențial slabe ale rețelei;

evaluarea amenințărilor, adică determinarea problemelor care pot apărea datorită elementelor slabe ale rețelei;

analiza riscurilor, adică a posibilelor consecințe pe care aceste probleme le pot crea.

Rezultatul acestei faze de analiză îl constituie cerințele de securitate ale rețelei.

Următoarea etapă constă în definirea politicii de securitate, ceea ce înseamnă să se decidă:

care amenințări trebuie eliminate și care se pot tolera;

care resurse trebuie protejate și la ce nivel;

cu ce mijloace poate fi implementată securitatea;

care este prețul măsurilor de securitate care poate fi acceptat.

Selecția serviciilor de securitate. Aceste sunt funcții individuale care sporesc securitatea rețelei. Fiecare serviciu poate fi implementat prin metode variate, numite mecanisme de securitate. Pentru implementarea și utilizarea eficientă a mecanismelor de securitate este nevoie de o sumă de activități numite funcții de gestiune a securității. Gestiunea securității într-o rețea constă în controlul și distribuția informațiilor către toate sistemele deschise în scopul:

utilizării serviciilor și mecanismelor de securitate;

raportarea către serviciile și mecanismele de securitate;

raportarea către administratorul rețelei a evenimentelor de securitate relevante care pot apărea.

2.1. Planificarea securității rețelei

Într-o rețea de calculatoare trebuie să existe garanția că datele secrete sunt protejate, astfel încât doar utilizatorii autorizați să aibă acces la ele.

Vulnerabilitatea rețelelor de calculatoare se manifestă în două moduri:

modificarea sau distrugerea informației (atac la integritatea fizică);

posibilitatea folosirii neautorizate a informațiilor.

Asigurarea „securității datelor” stocate în cadrul unei rețele de calculatoare, presupune proceduri de manipulare a datelor care să nu poată duce la distribuirea accidentală a lor și/sau măsuri de duplicare a datelor importante, pentru a putea fi refăcute în caz de nevoie.

A avea o rețea de calculatoare cu acces sigur la date, presupune o procedură de autentificare a utilizatorilor și/sau de autorizare diferențiată pentru anumite resurse.

Orice rețea trebuie asigurată împotriva unor daune intenționate sau accidentale. Există patru amenințări majore la securitatea unei rețele de calculatoare:

accesul neautorizat;

alterarea electronică a datelor;

furtul de date;

daunele intenționate sau accidentale.

Cade în sarcina administratorului de rețea să asigure o rețea sigură, fiabilă și pregătită să facă față pericolelor de mai sus.

Vom considera că o rețea de calculatoare este sigură dacă toate operațiile sale sunt întotdeauna executate conform unor reguli strict definite, ceea ce are ca efect o protecție completă a entităților, resurselor și operațiilor. Lista de amenințări constituie baza definirii cerințelor de securitate. Odată acestea fiind recunoscute, trebuie elaborate regulile conform cărora să se controleze ansamblul operațiilor rețelei.

Aceste reguli operaționale se numesc „servicii de securitate”, iar complemetarea serviciilor se face prin protocoale de securitate.

Pentru a defini o rețea sigură de calculatoare trebuie elaborate următoarele:

lista cerințelor de securitate;

regulile de protecție și securitate;

mecanismele de securitate.

2.2. Definirea politicilor de securitate

Asigurarea securității rețelei presupune adoptarea unui set de norme, reguli și politici, care să nu lase nimic la voia întâmplării.

Într-o rețea de calculatoare, modelul de securitate presupune trei nivele:

securitatea fizică;

niveluri logice de securitate;

conectarea sigură.

Politicile de securitate stabilesc orientarea generală și oferă linii directoare pentru administratorii de rețea, în cazul unor situații neprevăzute.

Cele mai importante politici de securitate sunt:

prevenirea;

autentificarea;

instruirea.

Prevenirea este cea mai bună politică de protejare a datelor. Prin prevenirea accesului neautorizat în rețea, datele vor fi în siguranță.

Autentificarea este politica prin care se asigură o primă linie de apărare împotriva utilizatorilor neautorizați. Aceasta înseamnă că accesul într-o rețea necesită un nume de utilizator valid și o parolă.

Instruirea este politica pe care administratorul de rețea trebuie să o promoveze permanent în rândul utilizatorilor. Pentru aceasta, administratorul trebuie să elaboreze un ghid, clar, concis, cu noțiunile pe care utilizatorii trebuie să le cunoască cu privire la procedurile de operare și de asigurare a securității.

2.3. Modele de securitate

Principalul model de securitate pentru un calculator, o bancă sau altceva seamănă cu o ceapă. Niveluri de securitate înconjoară subiectul ce trebuie protejat. Fiecare nivel izolează subiectul și îl face mai greu de accesat în alt mod decât în cel în care a fost planificat.

Securitatea fizică

Securitatea fizică este nivelul cel mai exterior al modelului de securitate și constă, în general, în înlocuirea echipamentelor informatice într-un birou sau într-o incintă. Securitatea fizică merită o considerație specială. Problema cea mai mare o constituie salvările pentru copii de rezervă ale datelor și programelor; siguranța păstrării acestor suporți de salvare este o mare problemă. În aceste situații rețelele locale sunt de mare ajutor: dacă toate fișierele schimbate rezidă pe un server, aceleași persoane (sigure și de încredere) care lansează salvările pentru minicalculatoare sau mainframe-uri, pot face același lucru și la server. Microcalculatorul, ca orice piesă costisitoare, ar trebui să fie protejat și de pericolul furtului. Păstrarea în afara zonelor publice este una dintre cele mai bune forme de protecție. Simpla încuiere a echipamentelor va preveni mutările ascunse precum și furtul.

Într-un sistem în care prelucrarea este distribuită, prima măsură de securitate fizică care trebuie avută în vedere este prevenirea accesului la echipamente. Pentru a învinge orice alte măsuri de securitate trebuie să aveți acces fizic la echipamente. Acest lucru este comun tuturor sistemelor de calcul, distribuite sau nu.

Niveluri logice de securitate

Cele mai interioare niveluri ale modelului de securitate sunt privite ca securitate logică, adică acele metode care asigură controlul accesului la resursele și serviciile sistemului.

Securitatea logică are mai multe niveluri, împărțite în două grupe mari:

niveluri de securitate a accesului (NSA);

niveluri de securitate a serviciilor (NSS).

a) Niveluri de securitate a accesului (NSA)

Cel mai înalt NSA este nivelul de acces la sistem (NAS). NSA constau în disponibilitatea de a controla, de a verifica identitatea și de a stabili drepturile de acces ale utilizatorului; ele sunt de nivel mai înalt decât NSS. Acest nivel este răspunzător de a determina dacă și când rețeaua este accesibilă tuturor utilizatorilor, unor grupuri sau numai anumitor stații individuale. El poate fi, de asemenea, răspunzător pentru decuplarea unei stații, ca și de gestiunea evidenței accesului. NAS poate, de exemplu, să prevină conectarea în afara orelor de serviciu și să întrerupă toate sesiunile după un anumit timp. În spatele NAS se află nivelul de acces la cont (NAC). Acest nivel verifică dacă utilizatorul care se leagă cu un anumit nume și cu o parolă, există și are un profil utilizator valid.

Nivelul cel mai interior în NSA este nivelul drepturilor de acces (NDA). După ce ați trecut prin NAS și NAC, NDA determină ce privilegii de conectare aveți (de exemplu contul poate avea sesiuni care totalizează 5 ore pe zi sau contul poate utiliza doar stația 5). Câteva dintre aceste funcții pe care le puteți implementa cu NSA sunt acordarea de conturi (pentru timpul de conectare, utilizarea discului și așa mai departe) și gestiunea evidenței accesului utilizatorilor.

Nivelurile de securitate a serviciilor

Nivelul de securitate a serviciilor (NSS), care se află sub NSA, controlează accesul la serviciile sistem, cum ar fi fire de așteptare, I/O la disc și gestiunea serverului. Cel mai înalt NSS este nivelul de control al serviciilor (NCS), care este responsabil cu funcțiile de avertizare și de raportare a stării serviciilor. De asemenea el activează și dezactivează diferitele servicii. NSS sunt însărcinate cu controlul drepturilor de accesare a serviciilor sistemului.

Odată ce NCS a stabilit un serviciu, nivelul de drepturi la servicii (NDS) determină exact cum folosește un anumit cont de serviciu dat. De exemplu, un cont poate avea dreptul de a adăuga și șterge fișiere imprimantei nr. 2. NDS administrează, de asemenea, drepturile specifice unui cont. Dacă contul este un membru al unuia sau mai multor grupuri, atunci NDS se va asigura că acest cont să moștenească drepturile grupului. De exemplu, un cont poate avea doar drepturi de a citi, deschide și căuta fișiere în subdirectoarele operatorului.

Se pot include și servicii de înalt nivel specifice software-ului (SIS) precum și servicii de nivel scăzut specifice hardware (SSH). SIS sunt operațiuni care nu sunt limitate hardware – de exemplu cererea de a deschide un fișier după nume. Alte servicii sunt accesul la fire de așteptare și la cutiile poștale. SIS sunt de fapt construite prin SSH și pot necesita mai multe funcții de nivel scăzut pentru a se executa. SSH sunt dependente de hardware. Aceste servicii sunt „cărămizile” fundamentele de construcție ale sistemului și acoperă nivelurile de I/O la sectoarele de disc și alocare/eliberare a blocurilor de memorie.

Conectarea sigură

Odată stabilită conexiunea, NSA validează și definește contul. Operațiile actuale ce trebuie executate sunt controlate de NSS, care împiedică cererile ce nu sunt specificate în profilul utilizatorului. Accesul într-un sistem de securitate perfect trebuie să se facă prin aceste niveluri de securitate, de sus (NAS) în jos (SSH). Dar când serverele folosesc doar NSA pentru a controla accesul la sistem, pentru ca apoi să permită execuția apelurilor directe la SSH, nivelurile NSS sunt ușor de evitat, iar operațiunile neautorizate pot fi executate fără a fi detectate. Aceasta se întâmplă când toate celelalte niveluri ale NSS sunt implementate și executate în serverul client.

Orice sistem care vă lasă să evitați unul sau mai multe niveluri ale modelului de securitate implică riscul de a fi nesigur.

Securitatea prin parole și cifrare

a) Sisteme cu parole

Cel mai simplu sistem de parolă este un program care rulează când se face încărcarea sistemului de operare, cere o parolă și nu va lăsa să se continue încărcarea sistemului până când nu se introduce parola corectă. O metodă obișnuită pentru a activa programul corespunzător este folosirea unei linii ca DEVICE = PASSWORD.SYS în fișierul CONFIG.SYS. O schemă atât de simplă poate avea deficiențe evidente – de exemplu, calculatorul rămâne permanent vulnerabil după ce a fost încărcat cu succes sistemul de operare.

Un atac frontal la orice sistem de parole, chiar dacă este vorba de unul simplu, este greoi; a repeta pornirea calculatorului și a aștepta ghicirea parolei este un lucru mare consumator de timp, în afara cazului în care alegerea parolei ar fi fost în mod evident prost făcută.

Problema sistemelor cu parole constă în faptul că ele nu prezintă o caracteristică a securității – ele sunt o caracteristică a insecurității. Urmărind permiterea unui acces controlat într-un sistem, altfel (fără cunoașterea parolei) de nepătruns. Ca să utilizăm o metaforă este ca o cetate cu ziduri din oțel, foarte groase și (aproape) inexpugnabile, dar nefolositoare; adăugați o ușă și accesul devine posibil; adăugați un lacăt la ușă și veți putea controla accesul. Mainframe-urile sunt inaccesibile, au aer condiționat și adesea sunt puse în săli special protejate; parolele permit trecerea controlată prin tot acest sistem de securitate care este construit în jurul acestor tipuri de calculatoare. Microcalculatoarele sunt în birouri, accesibile fizic și uneori chiar portabile. A adăuga parole e ca și cum s-ar construi o ușă solidă cu un lacăt sigur la o casă făcută din cărți de joc. Restrângerea accesului este o condiție obligatorie pentru controlul accesului. Restrângerea accesului poate lua mai multe forme. Ea poate fi fizică, ca și cum s-ar ține calculatorul încuiat într-o cameră separată; în acest caz nu este nevoie de nici un fel de echipamente suplimentare sau de măsuri de securitate software. De asemenea ea poate fi inerentă, ca și cum calculatorul ar fi de un tip atât de neobișnuit sau atât de greu de operat, încât nici nu vă puteți imagina cum să-i faceți vreun rău, chiar dacă aveți acces fizic la el. multe companii se bazează încă pe acest fel de protecție. Aceasta era bună în trecut, când erau încă puține microcalculatoare și puțini oameni știau să le folosească, dar nu mai e la fel de sigură acum.

b) Cifrarea autonomă și transparentă

Restrângerea accesului poate fi logică, impusă de echipamente sau programe special destinate, făcând accesul imposibil fără cunoștințe speciale. Cifrarea este cel mai simplu mod de a face acest tip de restrângere a accesului. Utilizarea datelor cifrate, prin intermediul unui program de descifrare, poate părea ca și folosirea unei parole sistem – chiar pare același lucru utilizatorului, care nu poate face distincția între o parolă și o cheie de descifrare. Dar bineînțeles că nu este același lucru. Dacă se depășește (se ocolește) sau se desființează parola sistem, totul este accesibil; pe când chiar dacă se înlătură programul de descifrare tot nu se poate citi nimic din fișierele cifrate.

Aici trebuie făcută o remarcă foarte importantă: nu calculatorul trebuie protejat, ci datele memorate de acesta. Chiar dacă considerați că a încuia camera sau a folosi chei sau parole de acces pot constitui căi adecvate de a proteja calculatorul, problema nu poate fi rezolvată numai așa; datele, care trebuie de fapt protejate, nu există numai în calculator, dar și în multe alte copii pe suporți de arhivare, plasați în alte incinte.

Pentru a asigura securitatea datelor, trebuie luată în considerare nu numai prevenirea accesului neautorizat, ci și evitarea pierderii datelor. Prevenirea accesului neautorizat este cel mai bine realizată prin a nu avea copii ale fișierelor peste tot; prevenirea pierderii datelor cere cât mai multe copii posibile. cifrarea poate rezolva această contradicție, simplu și eficient. Dacă copiile de arhivare pe discuri sunt cifrate într-un mod sigur, puteți face un număr nelimitat de duplicate, fără a compromite datele confidențiale. De aceea, chiar dacă nu folosiți cifrarea datelor în activitatea zilnică, ați putea-o folosi în realizarea copiilor.

(i) Cea mai simplă cale de a implementa cifrarea pe un microcalculator este cu un program autonom de cifrare-descifrare. În funcție de comandă, el va cifra sau descifra un fișier specificat, cu parola (cheia) furnizată de utilizator: astfel de programe sunt simplu de scris, dar nepractic de utilizat. De exemplu, pentru a edita un document confidențial, cifrat anterior, în timpul unei sesiuni tipice de editare, trebuie:

– să păstrăm editorul;

să apelăm programul de descifrare, să-i specificăm numele fișierului și cheia de cifrare potrivită, apoi să așteptăm ca întregul fișier să fie descifrat;

să reintrăm în editor;

să edităm documentul;

să păstrăm editorul;

să apelăm programul de cifrare, să-i specificăm numele fișierului și cheia de cifrare potrivită, apoi să așteptăm până ce întregul fișier este cifrat;

să reintrăm în editor.

În plus, trebuie să rescriem toți suporți de salvare. Dacă editorul a creat și șters singur toate fișierele temporare, trebuie să suprascriem tot spațiul liber de pe disc pentru eventualitatea în care date importante ar fi fost lăsate aici.

O rafinare a unui astfel de program de cifrare-la-cerere (autonom) este de a-l face permanent rezident, activat de o singură combinație de taste. Aceasta înlătură pașii de „ieșire din editor”, dar lasă procedura la fel de greoaie ca și înainte. În fața frecventelor modificări aduse unui document, nerăbdarea umană normală va impune lăsarea fișierului necifrat. O altă slăbiciune în aceste scheme este folosirea cheilor. Trebuie să introducem chei de cifrare și descifrare în mod frecvent, așa încât multă lume va selecta chei scurte – și de aceea nesigure – pentru ușurare și rapidizarea introducerii. De asemenea, nu există protecție încorporată împotriva greșelilor de introducere. Să presupunem că, din greșeală, cheia CONFIDENȚIAL este introdusă ca COMFIDENȚIAL. Totul pare să fie în regulă până când încercăm să accesăm documentul, probabil după câteva luni, și constatăm că acesta nu poate fi citit (descifrat).

(ii) Cifrarea transparentă rezolvă aceste probleme. Un sistem de cifrare transparentă este un program TSR (Terminate and Stay Resident), care rămâne permanent activ în memoria RAM după lansarea sa în execuție. Acesta monitorizează și interceptează toate accesele la disc, pentru fișierele importante. La fiecare scriere pe disc, sistemul cifrează informațiile, înainte ca ele să fie depuse pe disc; la fiecare citire el le detectează, înainte de a le pune la dispoziția programului ce rulează. Un sistem de cifrare transparentă este invizibil pentru programul de aplicație, care nu știe că se face vreo cifrare. Aceasta elimină orice probleme de compatibilitate posibile. De asemenea, întreaga protecție automată se extinde la fișierele temporare pe care aplicațiile le-ar putea crea și șterge fără știrea noastră și unde ar putea rămâne, în alte condiții, date confidențiale în clar. Cifrarea transparentă este aproape invizibilă chiar și utilizatorului. Cheile de cifrare sunt hotărâte odată pentru totdeauna la începutul fiecărei sesiuni și rămân ascunse, dar și cifrate potrivit, în memoria proprie programului TSR. De aceea, după conectarea inițială, secvența complexă de operații necesară editării unui document cu cifrare simplă devine pur și simplu „editare document”.

Deoarece cheia se introduce o singură dată, există mai puțină rezistență din partea utilizatorului la a le face complexe și poate fi rezolvată problema alegerii parolelor scurte, ușor de reținut și ușor de ghicit, prin cerința ca aceste chei să aibă o lungime minimă (de exemplu opt caractere) și o lungime maximă (de exemplu 60 de caractere). Cu cifrarea transparentă, introducerea unei chei greșite nu are efect catastrofic la ceea ce este deja stocat. Tot ce se întâmplă este faptul că ceea ce citim de pe disc cu cheia greșită pare a fi corupt; odată introdusă cheia corectă, totul este iarăși citibil. Un avantaj final major al cifrării transparente este eficiența sa în aplicații de baze de date. În loc să se descifreze și apoi să se cifreze o întreagă bază de date, care poate avea o mărime de mai mulți megaocteți, de fiecare dată când este cerută o înregistrare, un sistem de cifrare transparentă descifrează doar datele de care avem de fapt nevoie: probabil un index de intrare, câțiva pointeri și însăși înregistrarea cerută. Creșterea de viteză rezultată este evidentă și vizibilă în mod practic.

Ceea ce trebuie apreciat într-un sistem de cifrare transparentă sunt viteza, granularitatea, tranferabilitatea și securitatea. Viteza este o cerință evidentă. Dacă cifrarea sau descifrarea durează prea mult, calculatorul va părea lent.

Granularitatea se referă la gradul de detaliere pe care îl folosim în specificarea cheilor de cifrare. Sistemele de cifrare la comandă se pot obișnui ușor cu granularitatea la nivel de fișier, cu o cheie diferită pentru fiecare fișier, dacă este nevoie; sistemele de cifrare transparentă au dificultăți mai mari în a face aceasta. Granularitatea la nivel de disc, cu toată informația cifrată identic, este ușor de realizat, dar nu este suficientă. Pe un hard-disc-sistem unele fișiere, cum ar fi CONFIG.SYS și drivere de periferice (și desigur programul de cifrare însuși) trebuie să fie citite înainte de putea instala orice program de cifrare, astfel că, cel puțin, trebuie să se facă o diferențiere între fișierele necifrate folosite în procesul de încărcare a sistemului și fișierele cifrate folosite după aceea. Mai mult, persoanele distincte pot folosi calculatorul pentru diferite proiecte și este o bună idee forțarea separării, prin folosirea de chei diferite. Un program de cifrare transparentă util trebuie să ofere cel puțin granularitate la nivel de director și preferabil la nivel de fișier

Transferabilitatea este o cerință foarte importantă. Întotdeauna trebuie să avem posibilitatea să schimbăm fișierele între calculatoare. Aceasta înseamnă că trebuie să putem utiliza mai multe chei, excepție făcând cazul în care toți utilizatorii diferitelor calculatoare din departamentul unde lucrăm, folosesc aceleași chei. Unele pachete de programe comerciale generează o cheie în mod aleatoriu la fiecare instalare, făcând pirateria singurul mod practic de a asigura libertatea schimburilor.

Securitatea este cel mai dificil criteriu dintre toate. Prea mulți distribuitori de sisteme de securitate subestimează subtilitățile și capcanele criptografiei și vând produse care sunt periculos de nesigure, multe din ele putând fi „sparte” în câteva ore fără cunoștințe speciale de criptografie. Din nefericire, algoritmul de cifrare pare să fie ultimul lucru luat în considerație în proiectarea celor mai multe sisteme de securitate.

2.4. Creșterea nivelului de securitate

 Pentru îmbunătățirea nivelului de securitate din rețea, exista o serie de modalități (opțiuni) pe care le are administratorul de rețea:

a) Auditarea

Prin operația de auditare (inspectare, examinare) se înregistrează intr-un jurnal de securitate al serverului anumite tipuri de evenimente. Acest proces urmărește activitatea din rețea prin intermediul conturilor de utilizator.

Auditarea ar trebui să facă parte din sistemul de securitate al rețelei, deoarece înregistrările efectuate indică utilizatorii care au încercat și, eventual, au reușit să obțină acces la anumite resurse.

Auditarea ajută administratorii să identifice activitățile neautorizate. Auditarea permite înregistrarea anumitor evenimente:

încercările de deschidere si de încheiere a unei sesiuni de lucru;

conectarea și deconectarea la/de la resursele specificate;

terminarea conectării;

dezactivarea conturilor;

deschiderea sau închiderea fișierelor;

modificarea fișierelor;

– evenimente si modificări care au loc pe server;

– modificarea parolelor;

– modificarea parametrilor de deschidere a unei sesiuni de lucru;

Înregistrările efectuate prin operația de auditare indică modul în care este folosită rețeaua.

b) Utilizarea calculatoarelor fără unități de disc

Calculatoarele fără unități de disc nu conțin unități de dischete sau de hard-disc. Ele pot îndeplini toate funcțiile unui calculator obișnuit, cu excepția salvării datelor pe o dischetă sau pe un hard-disc local. Aceste calculatoare sunt ideale pentru asigurarea securității unei rețele, deoarece utilizatorii nu pot lua cu ei datele pe care le vizualizează.

Calculatoarele fără unități de disc nu au nevoie de discuri de inițializare (boot). Ele pot să comunice cu serverul și să deschidă o sesiune de lucru datorita unui cip ROM special, pentru inițializări, instalat pe placa de rețea.

c) Criptarea datelor

Înainte de a fi transferate prin rețea, datele sunt codate cu ajutorul unui utilitar de criptare. Astfel, chiar in cazul interceptării datelor de pe cablu, acestea nu vor putea fi citite clar. Atunci când datele ajung la calculatorul destinatar, codul recepționat este decriptat cu ajutorul unei chei, informația redevenind lizibila. Schemele de criptare avansate a datelor automatizează atât procesul de criptare, cât și pe cel de decriptare. Cele mai bune sisteme de criptare sunt cele care folosesc componente hardware, însă ele sunt foarte scumpe.

d) Protecția împotriva virușilor

Virușii distructivi sunt din ce în ce mai frecvenți. Ei trebuie luați în considerație atunci când se concep procedurile de asigurare a securității rețelei. Chiar dacă nu există programe antivirus infailibile, ele contribuie la:

împiedicarea arhivării virușilor;

eliminarea virușilor;

remedierea daunelor provocate de un virus;

ținerea sub observație a unui virus, activarea acestuia.

Prevenirea accesului neautorizat reprezintă cea mai bună cale de a evita contactarea unui virus.

Administratorul de rețea trebuie să ia măsurile de protecție:

folosirea parolelor pentru a preveni accesul neautorizat;

planificarea accesului și atribuirea unor privilegii pentru toți utilizatorii;

folosirea profilelor, pentru a structura mediul de rețea și a configura și păstra configurația mediului de lucru a utilizatorilor, inclusiv conexiunile de rețea și elementele de program ce apar atunci când utilizatorul deschide o sesiune de lucru.

2.5. Criptografia – componentă indestructibilă a securității

La începuturile sale, Internetul era folosit cu precădere în mediile academice, iar servicii precum e-mail-ul sau Web-ul nu erau esențiale în felul în care sunt astăzi. În plus, în mediile academice nu se punea problema incorectitudinii și tentativei de fraudă. Pe atunci, utilizatorii Internetului se respectau între ei prin intermediul unui cod nescris al bunelor maniere (Netiquette), problemele apărând mai târziu, mai ales odată cu folosirea rețelei în scopuri comerciale.

Multe dintre serviciile Internet transmit informații importante – cum ar fi nume de utilizator și parole – fără a le proteja. În acest sens, stiva de protocoale TCP/IP a fost concepută să fie transparentă, oricine având acces la pachetele de date. O persoană rău intenționată poate monitoriza traficul din rețea și depista cu ușurință aceste informații. Criptarea informațiilor este soluția cel mai des utilizată pentru prevenirea acestor atacuri.

Criptografia permite comunicația sigură între părți. Aceasta înseamnă atât siguranța că un mesaj poate fi citit doar de către persoana căreia îi este destinat, cât și siguranța că mesajul nu a fost modificat pe parcurs.

Procesul de transformare a informațiilor din forma inițială într-o formă imposibil de citit, fără a acea câteva cunoștințe suplimentare (o cheie), se numește criptare. Decriptarea este operațiunea inversă, adică transformarea informației criptate în forma sa inițială.

Criptarea, respectiv decriptarea necesită în general utilizarea unei informații secrete, numită cheie. Informațiile originale sunt criptate utilizând o cheie de criptare, sunt transmise, iar la destinație sunt decriptate folosind tot o cheie, identică sau diferită de prima cheie.

Criptografia (de la cuvântul grec kryptos logos, adică cuvânt secret, ascuns) este știința care se ocupă de protecția informațiilor prin codificarea acestora. Criptanaliza studiază metodele de determinare a informațiilor originale sau a cheilor de criptare.

Criptografia a apărut ca știință acum mii de ani, fiind utilizată de-a lungul timpului îndeosebi pentru ascunderea secretelor militare.

Există două tipuri de sisteme de criptare:

criptarea cu cheie secretă (sau criptografia simetrică) folosește aceeași cheie atât la criptarea cât și la decriptarea informațiilor. Dintre algoritmii de criptare de acest tip putem enumera DES și IDEA.

criptarea cu chei publice (sau criptografia asimetrică) folosește chei distincte pentru criptare, respectiv pentru decriptare, cheile fiind dependente una de alta. Prima cheie numită cheia privată este ținută secretă și este cunoscută doar de proprietarul ei. A doua cheie numită cheie publică, este cunoscută și de expeditor și de destinatar. Informațiile pot fi criptate de către orice persoană care posedă cheia publică, dar vor pute fi decriptate doar de către persoana care cunoaște cheia privată. Cel mai cunoscut sistem de decriptare cu chei publice este RSA.

Sisteme criptografice

Obiectivul principal al măsurilor de protecție într-un sistem de calcul îl constituie eliminarea posibilităților de distrugere accidentală sau voită a informațiilor, precum și de consultare neautorizată a acestora. Accesul neautorizat la informații poate provoca serioase daune prin afectarea caracterului privat al transmisiilor, de aceea este nevoie de câteva obiective importante care trebuie avute în vedere la proiectarea unor mecanisme hardware și software pentru protecția informațiilor într-o rețea. Dintre acestea le menționăm pe cele de dezvăluire a caracterului în clar al mesajelor, a inserării de mesaje false, a analizei traficului de mesaje, precum și pe cele de detectare a modificării, ștergerii sau înlocuirii conținutului mesajelor, a încercărilor de conectare neautorizată în rețea.

Obiectivele de prevenire pot fi atinse prin cifrarea informațiilor, soluție eficientă, când memorarea sau transmiterea de date se efectuează pe medii nesigure. Obiectivele de detectare sunt realizate dacă se folosesc protocoale specifice, coroborate cu metode criptografice, care asigură schimburile de mesaje între entitățile rețelei.

Cifrarea conferă protecție informației transmise pentru canalele ce sunt ascultate sau interceptate. În acest scop emițătorul alege un algoritm de cifrare și o cheie, pe care le comunică, receptorul pe cale sigură, – de exemplu, prin curier. Criptografia modernă protejează datele transmise pe linii de mare viteză și memorate în calculatoare. Ea urmărește două obiective principale, și anume: protecția sau confidențialitatea (prevenirea dezvăluirii neautorizate a unor informații transmise sau memorate) și autentificarea sau integritatea (prevenirea unor modificări neautorizate a datelor).

Un sistem criptografic (criptosistem) are cinci componente:

spațiul mesajelor în text clar; {M}

spațiul mesajelor în text cifrat; {C}

spațiul cheilor; {K}

familia transformărilor de cifrare, Ek: M → C; unde k {K};

familia transformărilor de descifrare Dk: C → M, unde k {K};

Fiecare transformare de cifrare, Ek, este definită de un algoritm de cifrare, E, comun tuturor transformărilor familiei, și o cheie, K, distinctă de la o transformare la alta. În mod similar, fiecare transformare de descifrare, Dk, este definită de un algoritm de descifrare D și de cheia K. Pentru un K dat, Dk reprezintă inversa lui Ek, adică:

Dk(Ek(M)) = M, M{M}.

Datele trebuie astfel protejate încât utilizatorii neautorizați să nu poată reconstitui textul clar dintr-un text cifrat interceptat. În acest sens, este necesar să se asigure ca:

utilizatorul neautorizat să nu poată determina sistematic transformarea de descifrare, Dk, din textul cifrat interceptat C, chiar dacă se cunoaște textul clar, M, corespondent;

utilizatorul neautorizat să nu poată reconstitui textul clar, M, din textul cifrat, C, fără cunoașterea transformării Dk.

Protecția datelor (confidențialitatea) impune ca transformarea de cifrare Dk (respectiv cheia) să fie protejată.

Autentificarea datelor cere ca un utilizator neautorizat să nu fie capabil în mod obiectiv să substituie textul cifrat, C, cu un alt text fals, C’, fără ca acest lucru să fie detectat. Nu trebuie să i se permită utilizatorului neautorizat:

să determine sistematic transformarea Ek, cunoscând pe C și textul clar corespunzător, M;

să găsească în mod sistematic C’, astfel încât Dk(C’) să fie un text clar valid în M;

Cerințele de autentificare impun doar ca transformarea Ek (respectiv cheia de cifrare) să fie protejată.

Criptarea cu chei publice

Conceptul de criptosistem cu două chei (asimetric) a fost introdus de Diffie și Hellman în 1976. Ei propuneau o nouă metodă de cifrare, numită cifrare cu cheie publică, în cadrul căreia doi utilizatori (procese) pot comunica cunoscând fiecare doar cheia publică a celuilalt.

În criptosistemele cu chei publice fiecare utilizator A deține o transformare de cifrare publică, EA, care poate fi memorată într-un registru (fișier) public și o transformare de descifrare secretă, DA, ce nu este posibil să fie obținută din EA.

Cheia de descifrare (secretă) este derivată din cheia de cifrare (publică) printr-o transformare greu inversabilă (one-away). În sistemele cu chei publice, protecția și autentificarea sunt realizate prin transformări distincte. Să presupunem că utilizatorul cunoaște transformarea bublică EB, atunci A poate transmite M la B sub forma C = EB(M), asigurându-se astfel funcția de protecție (confidențialitate).

La recepție, B, va descifra criptograma C utilizând transformarea secretă DB, cunoscută doar de el:

DB = DB(EB(M)) = M

Schema nu furnizează facilități de autentificare, deoarece orice utilizator (proces) are acces la transformarea publică EB a lui B și îi poate trimite mesaje false M’ sub forma C’ = EB(M’).

Pentru autentificare se aplică lui M transformarea secretă DA a lui A. Ignorând protecția pentru moment, A va emite C = DA(M) la B, care la recepție va aplica transformarea publică, EA a lui A:

EA(C) = EA(DA(M)) = M

Autentificarea este realizată deoarece numai A poate aplica transformarea DA.

Protecția nu este asigurată, întrucât este posibil ca M să fie obținut de oricine aplicând transformarea publică EA. Pentru a se realiza simultan protecția și autentificarea informațiilor spațiului {M} trebuie să fie echivalent spațiului {C}, așa încât orice pereche (EA, DA) să fie în măsură să opereze atât asupra textului clar, cât și asupra textului cifrat; în plus se cere ca EA și DA să fie mutual inverse.

Emițătorul de mesaj A va aplica mai întâi transformarea secretă a sa, DA, mesajului M. Apoi A va cifra rezultatul – utilizând transformarea publică a lui B, EB și va emite către receptor criptograma:

C = EB(DA(M))

Receptorul B îl obține pe M aplicând la început propria-i funcție de descifrare, DB, iar apoi transformarea publică a lui A, EA, cea care furnizează autentificarea:

EA(DB(C)) = EA(DB(EB(DA(M)))

= EA(DA(M))

= M.

Criptarea cu chei secrete

În sistemele criptografice cu chei secrete, este utilizată o singură cheie atât pentru criptarea cât și pentru decriptarea informațiilor. Pentru ca sistemul să funcționeze corect, cele două părți (expeditorul și destinatarul) trebuie să negocieze un protocol comun, care să asigure transmisia în siguranță a cheii secrete de la expeditor către destinatar, fără a fi posibil ca o terță parte să o descopere. Cele mai des utilizate tehnici în cadrul criptografiei cu chei private sunt cifrul-bloc (block ciphers), cifrurile-flux (stream ciphers) și codurile de autentificare a mesajelor (MAC, Message Autentification Codes).

Cifrurile-bloc

Un cifru-bloc este un algoritm de criptare cu cehei simetrice, care transformă un bloc text (text necriptat) de lungime fixa într-un bloc de text cifrat (text criptat) de aceeași lungime cu blocul original. Această transformare are loc cu ajutorul unei chei secrete. Decriptarea este realizată aplicând transformarea inversă, utilizând aceeași cheie de criptare. Acea lungime fixă se numește mărimea blocului – și pentru mulți dintre algoritmii de criptare este de 64 de octeți.

Deoarece blocurile de text diferite corespund la blocuri de text criptat diferite, un cifru-bloc realizează o permutare a setului format din toate mesajele posibile. Funcția de permutare are ca argument cheia secretă.

Fiindcă textul original are o lungime oarecare, există mai multe tehnici de criptare a blocului, numite moduri de operare a cifrului-bloc. Conform standardului ISO/IEC 10116 (Modes of operation for an n-bit block cipher algorithm), standardul DES suportă patru moduri de operare: modul carte de coduri, modul cu înlănțuire, modul cu reacție și modul cu reacție la ieșire.

Cifrul-bloc iterativ

Acest tip de cifrare criptează un bloc de text în mai multe iterații. La fiecare iterație, aceeași transformare (numită round function) este aplicată informației utilizând o sub-cheie. Setul de sub-chei este de obicei derivat din cheia secretă de criptare, prin intermediul unei funcții speciale. Setul de sub-chei se numește plan de chei (key schedule). Numărul de cicluri dintr-un cifru iterativ depinde de nivelul de securitate dorit și de relația sa cu performanța. În majoritatea cazurilor, un număr ridicat de cicluri va îmbunătăți securitatea oferită de un cifru-bloc, dar pentru unele cifruri numărul de iterații necesare pentru a obține o securitate adecvată va fi prea mare pentru a fi practic.

Cifrurile Feistel reprezintă o clasă specială de cifruri-bloc iterative, în care textul criptat este generat prin aplicarea repetată a aceleiași transformări sau a funcției iterative. Cifrurile Feistel sunt denumite uneori cifruri tip DES.

În linii mari, într-un cifru Feistel, textul original este despărțit în două bucăți. Funcția iterativă este aplicată unei jumătăți utilizând o sub-cheie, iar ieșirea aceste funcții este calculată sau-exclusiv (XOR) cu cealaltă jumătate. Cele două bucăți sunt apoi interschimbate. Fiecare ciclu urmează același algoritm, exceptând ultima iterație, în care nu se efectuează interschimbarea. Un exemplu de cifru Feistel este IDEA.

Modul carte de coduri (ECB, Electronic Code Book)

În modelul carte de coduri ECB, fiecare bloc de text original este criptat independent de blocul cifrat, cu alte cuvinte, fiecărui bloc de text original îi corespunde un bloc de text cifrat.

Modul cu înlănțuire (CBC, Cipher Block Chaining)

În modul cu înlănțuire CBC, fiecare bloc de text original este calculat sau-exclusiv (XOR) cu blocul cifrat precedent și apoi este criptat. Este utilizat un vector de inițializare ca „sămânță” pentru acest proces, de preferință pseudo-aleator.

Modul PCBC este o variație a modului CBC și este folosit pentru a extinde sau propaga un singur bit de eroare în textul cifrat. Aceasta permite depistarea erorilor de transmisie.

Modul cu reacție (CFB, Chifer Feedback)

În modul cu reacție CFB, blocul cifrat precedent este criptat, iar ieșirea este combinată cu blocul original printr-o operație sau-exclusiv (XOR). Este utilizat și în acest caz un vector de inițializare ca „sămânță” pentru acest proces.

Modul de reacție la ieșire (OFB, Output Feedback)

Modul cu reacție la ieșire OFB este similar cu CFB, însă cantitatea calculată prin aplicarea XOR cu fiecare bloc de text original este generată independent și de textul original, și de cel criptat. Este utilizat și în acest caz un vector de inițializare ca „sămânță” pentru o secvență de blocuri de text și fiecare text este derivat din criptarea blocului precedent.

Cifrurile-flux

Un cifru-flux (numit cifru secvențial) este un algoritm de criptare simetric. Cifrurile-flux au avantajul că sunt mult mai rapide decât cifurile-bloc. În timp ce cifrurile-bloc operează cu blocuri mai mari de informații, cifrurile-flux lucrează în general cu unități mai mici de text, în mod uzual biți. Criptarea unui anumit text cu ajutorul unui cifru bloc va genera același text criptat atunci când este utilizată aceeași cheie. Cu un cifru-flux, transformarea acestor unități mici de text variază, în funcție de întâlnirea lor în cadrul procesului de criptare.

Un cifru-flux generează o așa-numită cheie flux, adică o secvență de biți utilizată ca și cheie. Criptarea se realizează combinând cheia flux cu textul original, în mod uzual utilizând operația XOR. Generarea cheii flux poate fi independentă de textul original și de cel criptat, producând ceea ce se numește cu cifru-flux sincron, sau poate depinde de informațiile originale și de cele criptate, caz în care spunem că cifrul-flux este auto-sincronizat. Majoritatea cifrurilor-flux sunt sincrone.

Interesul actual în cifrurile-flux este îndreptat înspre promisiunile teoretice ale proprietăților drumului unic (one-time pad). Un drum unic, denumit și cifru Verman, utilizează un șir de biți generat aleatoriu. Cheia-flux are aceeași lungime ca și textul original, iar șirul aleator este combinat utilizând operația XOR cu textul original pentru a genera textul criptat. Deoarece întreaga cheie-flux este aleatoare, este practic imposibilă determinarea textului original, chiar dacă se dispune de resurse computaționale mari. Teoretic, un asemenea cifru oferă siguranță perfectă și, din acest motiv, analiza drumului unic este una dintre preocupările științei criptografiei moderne. Deși drumul unic a fost utilizat pentru timp de război în cadrul canalelor diplomatice, necesitate ca această chestie secretă care nu poate fi utilizată decât o singură dată) să aibă aceeași lungime ca și textul original induce probleme majore la gestionarea cheilor. Deși absolut sigur, drumul unic este în general impracticabil.

Cifrurile-flux au fost dezvoltate ca o aproximare a modului de operare al drumului unic. În acest moment nu există nici un asemenea cifru standardizat, cel mai utilizat fiind RC4.

Anumite moduri de operare a cifrului-bloc îl transformă într-un generator de chei-flux și, astfel, orice cifru-bloc poate fi utilizat ca un cifru-flux, ca DES în modurile CFB sau OFB.

Funcțiile de dispersie

O funcție de dispersie (hash) H reprezintă o transformare ce primește la intrare valoare m și returnează un șir de lungime fixă, h, care este numită rezumat (digest sau hash value) (adică h = H(m)). Cerințele de bază pentru funcțiile criptografice de dispersie sunt următoarele:

intrarea poate avea orice lungime;

ieșirea are o lungime fixă;

H(x) este relativ ușor de calculat pentru orice x dat;

H(x) are un singur sens;

H(x) este puternică.

O funcție de dispersie are un singur sens atunci când este greu de inversat, cu alte cuvinte, pentru o valoare de dispersie dată h, este improbabilă posibilitatea de a găsi o intrare x, astfel încât H(x) = h. Dacă pentru un mesaj dat x, este improbabilă posibilitatea găsirii unui mesaj y diferi de x pentru care H(x) = H(y), atunci spunem că H este o funcție de dispersie slabă (weakly collision-free). O funcție H puternică (strongly collision-free) este una pentru care e improbabilă posibilitatea de a găsi două mesaje x și y astfel încât H(x) = H(y).

Rezumatul prezintă concis mesajul lung sau fișierul care a fost procesat; această valoare se numește message digest, putând fi considerat și „amprenta digitală” sau „suma de control” a mesajului. Exemple de funcții de dispersie sunt MD5 și SHA.

Funcțiile de dispersie sunt utilizate în principal pentru verificarea integrității mesajelor și pentru semnăturile digitale. Rezumatul poate fi făcut public fără a exista posibilitatea reasamblării mesajului original.

Coduri de autentificare a mesajelor

Un cod de autentificare a mesajului (MAC, Message Autentification Code) este o etichetă de autentificare numită și sumă de control (checksum) și derivă din aplicarea unei scheme de autentificare, împreună cu o cheie secretă, unui mesaj. Spre deosebire de semnăturile digitale, MAC-urile sunt calculate și verificate utilizând aceeași cheie, astfel încât ele pot fi verificate doar de către destinatar.

Există patru tipuri de MAC-uri:

Sigure necondiționat (unconditionally secure), propuse de Simmons și Stinso, fiind bazate pe criptarea cu drum unic. Textul cifrat al mesajului se autentifică pe sine însuși și nimeni altcineva nu are acces la drumul unic. Totuși, trebuie să existe porțiuni redundante ale mesajului. Un MAC sigur necondiționat poate fi obținut și prin utilizarea unei chei secrete folosite doar o singură dată.

Bazate pe funcțiile de dispersie (HMAC), utilizează una sau mai multe chei împreună cu o funcție de dispersie pentru a produce o sumă de control care este adăugată mesajului. Un exemplu de asemenea MAC este keyed-MD5.

Bazate pe cifruri-flux (propus de Lai, Rueppel și Woolven), în care un cifru-flux sigur (provably secure stream cipher) este utilizat pentru a descompune un mesaj în mai multe fluxuri și fiecare sub-flux este trimis către un LFSR; suma de control este starea finală a celor două LFSR-uri.

Bazate pe cifruri-bloc, în care se criptează blocuri de mesaj utilizând DES CBC și furnizează la ieșire blocul final al textului cifrat ca sumă de control. Un exemplu este DES-CBC MAC.

Sisteme criptografice

Sistemul RSA

Sistemul criptografic exponențial RSA (Rivers Shamir Adleman) utilizează chei publice și oferă mecanisme de criptare a datelor și semnături digitale (autentificare). El a fost dezvoltat de către Ronald Rivers, Adi Shamir și Leonard Adleman în anul 1977.

Funcționarea algoritmului RSA este următoarea: se consideră două numere prime mari p și q, și se calculează produsul lor n = pq, rezultatul fiind denumit modul. Se alege un număr, e, mai mic decât n și relativ prim cu (p – 1)(q – 1), ceea ce înseamnă că e și (p – 1)(q – 1) nu au nici un factor comun în afară de 1. Se găsește alt număr, d, astfel încât (ed – 1) este divizibil cu (p – 1)(q – 1). Valorile e și d sunt denumite exponenții public, respectiv privat. Cheia publică este perechea (n, e), iar cea privată este (n, d). Factorii p și q pot fi eliminați sau păstrați împreună cu cheia privată.

Obținerea cheii private d pornind de la cheia publică (n, e) este dificilă. Prin factorizarea lui n în p și q, se poate determina cheia privată d. Securitatea sistemului RSA se bazează pe faptul că această determinare este foarte dificilă.

Criptarea prin intermediul RSA se realizează astfel: expeditorul mesajului m creează textul cifrat

c = me mod n

, unde perechea e și n reprezintă cheia publică a destinatarului; pentru decriptare, destinatarul calculează m = cd mod n; relația dintre e și d asigură faptul că destinatarul decriptează corect mesajul. Deoarece numai destinatarul cunoaște valoarea lui d, doar el poate decripta mesajul.

Semnătura digitală se realizează în modul următor: expeditorul creează o semnătură digitală calculatorului

s = md mod n

, unde perechea d și n reprezintă cheia privată a expeditorului. Acesta din urmă trimite pe m și pe s destinatarului: pentru a verifica semnătura, acesta calculează

m = se mod n

, unde perechea e și n reprezintă cheia publică a expeditorului.

Siguranța RSA se bazează în primul rând pe siguranța gestionării cheilor private, mecanism dependent de implementarea algoritmului RSA folosită. De asemenea, este importantă alegerea unei perechi „puternice” de numere p și q. Numerele prime puternice au diferit proprietăți care fac ca produsul n să greu de „fabricat”.

Dimensiunea cheii utilizate într-un algoritm RSA se referă în general la dimensiunea nodului n. Cu cât modulul este mai mare, cu atât securitatea algoritmului este mai mare, dar și funcționarea acestuia este mai lentă. Mărimea uzuală a cheii este de 1024 de biți.

De obicei, sistemul RSA este utilizat împreună cu un sistem criptografic cu chei secrete, cum ar fi DES, pentru a cripta un mesaj utilizând un plic digital RSA (RSA digital envelope).

Sistemul DES

DES (Data Encryption Standard) este un algoritm standardizat de către FIPS (Federal Information Processing Standard). Gradul de utilizare a acestui algoritm a scăzut în ultimii ani, deoarece cheile pe 56 de biți folosite de acesta pot fi sparte, utilizând mașini suficient de puternice, într-un timp relativ scurt.

Algoritmul DES este mai des utilizat, împreună cu un sistem sigur de gestionare a cheilor de criptare, spre exemplu, generarea cheilor pentru fiecare sesiune în parte.

Dacă este necesară utilizarea DES, se recomandă utilizarea unor moduri de operare alternative, cum ar fi ECB sau CBC, sau utilizarea unor variante ale des. Una dintre variante este triple-DES, care criptează datele de trei ori consecutiv, iar alta este DESX, în care mesajul este calculat sau-exclusiv (XOR) cu o cheie adițională pe 64 de biți înainte de a fi criptat cu DES, iar apoi este calculat XOR cu alți 64 de biți a cheii de criptare.

Sistemul AES

AES (Advanced Encryption Standard) este noul standard federal pentru criptare, adoptat de NIST (National Institute of Standard and Technology) în anul 2001.

Există cinci algoritmi care au fost acceptați pentru selecția finală:

MARS, produs de IBM, acceptă chei de până la 448 de biți lungime și consistă din 16 etape de criptare, utilizând operații obișnuite cum ar fi operații bit cu bit și aritmetice.

RC6, produs de RCA Laboratories, este un algoritm rapid și simplu bazat pe RC5, format din 20 de etape. Este bazat pe operații aritmetice pe 32 de biți, cum ar fi rotații și multiplicări. Este cel mai rapid dintre cei cinci algoritmi propuși.

Rijndael, propus de Joan Daemen și Vincent Rijmen, este un cifru-bloc bazat pe algoritmul Square. În versiunea pe 128 de biți, criptarea se face în 10 etape. Blocurile constau în matrice de elemente. Reprezintă standardul ales de NIST.

Serpent, propus de Ross Anderson, Eli Biham și Lars Knudsen. Timpul de criptare este ridicat, în schimb necesarul de memorie este redus.

Twofish, propus de Bruce Schneier, John Kelsey, Dough Whiting, David Wagner, Chriss Hall și Niels Ferguson, se bazează pe algoritmul Blowfish realizat de Schneier. Este un sistem rapid de tip Feistel și solicită puțină memorie. Structura cifrului este foarte complexă și, ca atare, dificil de analizat.

Sistemul DSA

DSA (Digital Signature Algorithms) este un standard al NIST (National Institute of Standards and Technology) care poate fi utilizat pentru semnături digitale. DSA folosește calculul de logaritmi discreți în anumite subgrupe în câmpul finit GF(p) pentru diferite numere prime p. standardul a fost propus în anul 1994.

În mod uzual, pentru DSA sunt utilizate chei pe 1024 de biți.

Protecția criptografică a parolelor

Un aspect interesant al sistemului de operare UNIX este și acela că, prin versiunile sale succesive, și-a perfecționat și îmbogățit facilitățile de protecție a informațiilor și a mediului de execuție. UNIX încorporează o serie de programe de protecție criptografică, care-l fac capabil să execute sarcinile în medii „ostile”, ca o parte a ansamblului său standard de apeluri sistem și comenzi.

Cifrarea parolelor se face utilizându-se simularea software a cifrului DES. Reamintim că aceasta reprezintă primul standard de cifrare elaborat de NBS din SUA, în 1979. DES cifrează blocuri de 64 de biți, utilizând o cheie de 56 de biți. Deoarece implementarea software a algoritmului este lentă, folosirea lui pentru protecția parolelor s-a făcut astfel: primele 8 caractere ale parolei se folosesc drept cheie pentru DES în vederea cifrării unei constante. DES este aplicat iterativ de 25 de ori, iar rezultatul de 64 de biți este implementat și constituie un sir de 11 caractere tipăribile, scrise în fișierul de parole și care reprezintă parola cifrată (la care se adaugă, după cum se va vedea „sarea”).

Există 2 căi posibile de atac asupra schemei de cifrare. O posibilitate o reprezintă găsirea unei metode generale de inversare a algoritmului de cifrare, care ar permite obținerea cheii din textul cifrat și din cel clar. Cu toate eforturile făcute, pentru DES nu s-a găsit o metodă satisfăcătoare. O altă cale de penetrare este să se încerce parole potențiale, până când se reușește (atac de tip „Key search”). Acest lucru este posibil deoarece oamenii au tendința de a folosi parole scurte, ușor de reținut, formate de obicei numai din litere sau date personale. Factorul critic în această metodă este creșterea timpului cerut de cifrarea parolelor potențiale și comparare lor cu intrările din fișierul de parole.

Una din problemele dificile create este legată de faptul că există, la ora actuală, o serie de „chip”-uri comerciale care implementează DES și care fac o căutare exhaustivă a parolei cu câteva ordine de mărime mai rapidă. Pentru a evita o astfel de posibilitate, una din tabelele interne ale DES-ului (așa numita tabelă E) care calculează funcția f, a fost schimbată într-un mod în care ea nu mai este constantă, ci este dependentă de 12 biți aleatori care se adaugă la cheie într-o manieră ce va fi prezentată ulterior. Tabela E este setată prin apelul subrutinei „setkfy” care primește ca argument cheia (64 de biți); apelurile ulterioare ale rutinei DES necesită două argumente (șirul de intrare – 64 de biți – și un factor care indică funcția cifrare/descifrare) și returnează adresa șirului de 64 de biți care reprezintă textul cifrat.

O altă soluție pentru sporirea factorului de dificultate necesar unei căutări exhaustive a parolei este următoarea: fiecare parolă este concatenată înainte de cifrare cu un număr aleatoriu de 12 biți (numit „sare”) obținut prin citirea ceasului real. Când se creează o parolă P se generează „sarea” X și se concatenează la P. În fișierul de parole se memorează atât X, cât și fXP(C) (11 caractere), unde f reprezintă funcția de cifrare. Când un utilizator se va conecta în sistem și va introduce parola P, sistemul va extrage fin fișier numărul X, va forma prin concatenare PX și va verifica fXP(C) cu ceea ce este memorat în fișierul de parole. Această soluție nu face să crească factorul de muncă pentru găsirea unei anumite parole utilizată, deoarece X nu este protejat, dar sporește substanțial (de 2 la puterea 12, deci de 4 096 de ori) factorul de muncă pentru generarea aleatoare de parole și verificarea lor prin compararea cu întreg fișierul de parole. Dacă parola are n biți, există 2 la puterea n + 12 posibilități pentru fXP, adică există 4 096 de versiuni cifrate posibile pentru fiecare parolă. Ca urmare, căutarea crește la câteva zile/calculator și devine impracticabil să se pregătească în avans un dicționar de parole cifrate pentru căutarea exhaustivă.

Un alt avantaj al soluției este că nu se poate detecta dacă o persoană o folosește pe mai multe calculatoare. Efortul făcut pentru protecția adecvată a parolelor este justificat, deoarece acestea reprezintă unul din cele mai importante elemente care asigură protejarea mediului de execuție al fiecărui utilizator.

Protecția fișierelor prin criptare

Multe versiuni de UNIX oferă programe de cifrare. Acestea citesc intrarea standard, transformă datele și le trimit la ieșirea standard. Algoritmul de cifrare utilizat apelează funcția sistem crypt(), apoi construiește tabele de substituție pentru realizarea cifrării.

Pentru cifrarea datelor (fișierelor) se folosește un program care modelează mașina cu rotor de tip ENIGMA, folosită de către Germania în al doilea război modial. Rotorul are 256 de elemente diferite și permite cifrarea oricăror combinații de 8 biți. Conectarea între rotor și stator este diferită de la o cifrare la alta și depinde de cheie. Utilizatorul furnizează cheia de cifrare, până la 10 caractere ASCII, care este transmisă algoritmului DES la fel ca în cazul parolelor, acesta returnează un șir de 13 caractere (din litere mari, litere mici, cifre și /) care va fi permutat și va constitui cheia mașinii ENIGMA.

Securitatea fișierelor cifrate depinde de următorii doi factori: algoritmul de cifrare, care trebuie să fie greu de spart și imposibilitatea unei căutări exhaustive a cheii în spațiul cheilor. În ceea ce privește algoritmul, deși sunt cunoscute metode de atac, factorul de muncă cerut este foarte mare. Însă alegerea cheii și securitatea cheii reprezintă cel mai vulnerabil aspect al implementării. Rutina crypt, respectiv utilitarul cu același nume pot fi apelate în două moduri:

fără furnizarea cheii ca argument, ca urmare, rutina afișează un prompter și așteaptă cheia;

furnizând cheia ca argument în linia de comandă; în această situație există dezavantajul ca o comandă ps (lista proceselor în curs de execuție și mărimea argumentelor cu care au fost lansate) să facă vizibilă cheia. Pentru a minimiza acest risc, crypt distruge articolul cu cheia imediat după ce intră în execuție.

Prin intermediul utilitarului crypt se pot cifra fișiere pentru a le face inaccesibile unor utilizatori pentru transmiterea lor sigură în rețea. Editorul standard de texte încorporează o opțiune care-i permită să lucreze în mod „cifrare”. În acest caz toate citirile în buffer-ul editorului, respectiv scrierile acestuia pe disc, sunt precedate de un prompter care cere cheia de cifrare/descifrare, datele fiind transmise/recepționate prin pipe la/de la rutina crypt. Folosirea fișierelor cifrate și prelucrarea lor prin utilitare specifice fișierelor text se poate face prin conectarea prin pipe a lui crypt cu aceste programe, astfel încât textul în clar să existe pe durate foarte scurte.

În afară de serviciile oferite de crypt, puteți apela la o metodă mai puțin subtilă de cifrare, care poate totuși ascunde de ochi nedoriți conținutul fișierelor pe care le considerați private. Această metodă face un sau exclusiv între o parolă, pe care o introduceți la tastatură și conținutul fișierului, ca în exemplul următor:

#include <stdio.h>

#define PROMPT “Enter password tu use: “

main ()

{

int c, last, count;

char password [10];

strcpy (password, getpass (PROMPT));

last = strlen (password);

count = 0;

while ((c = getchar()) ! = EOF)

{

putchar (c^password [count ++]);

if (count ==last) count = 0;

}

}

Puteți mări puterea de cifrare, folosind parole lungi și prin utilizarea de două ori a cifrării și introducând, de fiecare dată parole de lungimi diferite. De exemplu, prima parolă poate avea opt caractere, iar a doua șapte.

Iată un exemplu care face criptarea dublă și apoi decriptarea fișierului program encript.c:

%encrypt <encript.c> ttl;

Enter password to use: dan

%encrypt <ttl> tt2

Enter password tu use: salut!

%cat tt2

<seven lines of strange characters, some unprintable>

%encrypt <tt2> tt3

Enter password to use: salut!

%encrypt <tt3>

Enter password to use: dan

#include <stdio.h>

#define PROMPT “Enter password to use: “

main()

{

int c, last, count;

char password [10];

strcpy (password, getpass (PROMPT));

last = strlen (password);

count = 0;

while ((c = getchar()) ! = EOF

{

putchar (c^password [count++]);

if (count == last) count = 0;

}

}

%

Această metodă de criptare, implementată în exemplul prezentat, este mai slabă decât algoritmul crypt, furnizat de funcția omonimă UNIX, dar ea poate fi utilă protejării unor fișiere fără grad foarte înalt de confidențialitate.

CAPITOLUL III

SECURITATEA ACCESULUI LA INTERNET

3.1. Conceptul de Firewall

Atunci când vine momentul să conectăm o rețea la Internet, trebuie să fie luate în considerare mai multe elemente, cum ar fi tipul de conexiune care va fi necesară pentru a asigura o lărgime de bandă suficientă traficului preconizat sau furnizorului ISP. Undeva pe lista noastră trebuie să includem și un rând unde scrie “Fă rost de un firewall”. Instalarea unui firewall este una dintre cele mai importante activități pe care trebuie să le efectuăm atunci când realizăm o conectare la Internet.

Termenul de firewall provine din industria construcțiilor civile. Multe din clădirile moderne au în structura lor firewalls – pereți special construiți, rezistenți la foc care, în cazul izbucnirii unui incendiu, au rolul de a împiedica sau încetini răspândirea focului până la sosirea pompierilor. Termenul a migrat și în construcția de mașini, unde un firewall separă compartimentul motorului unei mașini de habitaclu, pentru a proteja pasagerii. Pentru știința calculatoarelor, probabil că cel mai ușor este să descriem, mai întâi, ceea ce un firewall nu este: un firewall nu este un simplu router sau un calculator gazdă care asigură securitatea unei rețele. În linii mari, un firewall (numit uneori și pasarelă de securitate) este un sistem care impune o politică de control al accesului între două rețele. Un firewall reprezintă implementarea acestei politici în termeni de configurare a rețelei, unul sau mai multe sisteme gazdă și routere cu funcțiuni speciale, alte măsuri de securitate, cum ar fi autentificarea prin metode criptografice a clienților.

Conceptul de firewall

Un firewall este un sistem (o colecție de componente), plasat între două rețele, care posedă următoarele proprietăți:

tot traficul dinspre interior spre exterior și vice-versa trebuie să treacă prin acesta;

este permisă trecerea numai a traficului autorizat prin politica locală de securitate;

sistemul însuși este imun la încercările de penetrare a securității acestuia.

Cu alte cuvinte, un firewall este un mecanism folosit pentru a proteja o rețea sigură din punctul de vedere al securității de una nesigură, în care nu putem avea încredere. În mod tipic, una din rețele este cea internă unei organizații (sigură, de încredere), în timp ce cealaltă este Internet–ul (în care nu avem încredere din punctul de vedere al securității). Prin ultimele statistici referitoare la Internet se arată că în compunerea sa intră 50 000 de rețele, cu un total de peste 2,5 milioane sisteme gazdă, creșterea fiind estimată la 4000 de noi domenii și 150000 de noi sisteme gazdă pe lună.

Dat fiind numărul și mai mare de utilizatori – mulți dintre aceștia având, din nefericire, statutul de hacker (cracker sau vandal) – folosirea unui firewall are sens, deoarece posibilitatea “izbucnirii unui foc” undeva în Internet este foarte mare.

Deși cele mai mari firewall-uri sunt, în mod curent, interpuse între rețelele interne și Internet, conceptul de firewall nu vizează numai acest aspect, existând suficiente motive pentru folosirea firewall-urilor în oricare Internet, inclusiv în rețelele cu arie largă (WAN) ale diferitelor companii. Deoarece un firewall este dispus la intersecția a două rețele, acesta poate fi folosit și în alte scopuri decât acelea de control al accesului:

pentru monitorizarea comunicațiilor dintre o rețea internă și o rețea externă. De exemplu, un firewall poate jurnaliza (monitoriza, înregistra) serviciile folosite și cantitatea de date transferată prin conexiuni TCP/IP între propria organizație și lumea exterioară;

Un firewall poate fi folosit pentru interceptarea și înregistrarea tuturor comunicațiilor dintre rețeaua internă și exterior. O linie închiriată, care permite viteze de pînă la 128 Kbps, în condițiile în care ar fi folosită tot timpul, ar transfera zilnic, circa 1,4 GB, ceea ce ar permite ca traficul pe câteva zile să înceapă pe o singură bandă magnetică digitală de 8mm;

Dacă o organizație are mai multe rețele, separate din punct de vedere geografic, fiecare având câte un firewall, există posibilitatea programării acestor firewall-uri pentru a cripta automat conținutul pachetelor transmise între ele. În acest fel, pe suportul Internet, organizația își poate realiza propria rețea virtuală privată.

Avantajele folosirii unui firewall

Argumentul principal pentru folosirea unui firewall este că, fără acesta, o rețea este expusă riscurilor folosirii unor servicii inerent lipsite de securitate (cum ar fi NFS sau ) și încercărilor de penetrare inițiate de la oricare stație din afara acesteia.

Într-un mediu fără firewall, securitatea rețelei se bazează în mod exclusiv pe securitatea calculatoarelor gazdă, fiind necesar ca toate acestea să coopereze pentru realizarea unui nivel înalt și uniform de securitate a rețelei. Cu cât rețeaua devine mai largă, cu atât este mai greoaie administrarea calculatoarelor gazdă în scopul menținerii lor la același nivel (înalt) de securitate. Pe măsură ce greșelile și lipsurile în ceea ce privește securitatea rețelei devin tot mai obișnuite, penetrările au loc nu ca rezultat al unor atacuri complexe ci, mai ales, datorită erorilor de configurare sau alegerii inadecvate a parolelor.

Opțiunea de realizare a securității prin firewall furnizează numeroase avantaje rețelelor, ajutând și la creșterea nivelului de securitate a calculatoarelor gazdă componente. Prezentăm în continuare principalele avantaje ale folosirii unui firewall:

A) Protecția serviciilor vulnerabile

Un firewall poate contribui la creșterea nivelului de securitate al unei rețele, reducând riscurile la care aceasta este supusă, prin filtrarea serviciilor care sunt în mod inerent nesigure. De exemplu, un firewall poate bloca intrarea sau ieșirea dintr-o rețea protejată a unor servicii vulnerabile, cum ar fi NFS sau . Se obține astfel avantajul prevenirii exploatării vulnerabilităților acestora din exteriorul rețelei și, în același timp, avantajul folosirii lor în interior, cu un grad de risc mult mai redus.

Un firewall poate, de asemenea, să asigure protecția față de atacurile bazate pe exploatarea vulnerabilităților mecanismului de dirijare a pachetelor în Internet. De exemplu, la încercările de schimbare a rutelor către destinații compromise, prin intermediul pachetelor de redirectare ICMP, firewall-ul poate rejecta aceste pachete și poate informa administratorul de rețea despre incident.

B) Impunerea unei politici a accesului în rețea

Un firewall furnizează mijloace de control al accesului într-o rețea privat. Unele calculatoare gazdă pot fi făcute accesibile din exterior, în timp ce altele pot fi protejate efectiv față de accesele nedorite. De exemplu, o organizație poate interzice accesul din exterior către calculatoarele din rețeaua proprie, cu excepția celor care asigură serviciile de poștă electronică și cele informaționale.

Un firewall asigură, deci, mijloace pentru implementarea și impunerea unei politici a accesului în rețea, furnizând un control asupra serviciilor disponibile și accesului în rețea, furnizând un control asupra serviciilor disponibile și accesului utilizatorilor la acestea. Astfel, o politică a accesului în rețea poate fi impusă printr-un firewall, în timp ce, fără un firewall, o astfel de politică ar depinde în întregime de cooperarea dintre utilizatori. O organizație se poate baza pe proprii utilizatori în ceea ce privește cooperarea dintre ei, dar nu poate face același lucru relativ la toți utilizatorii din Internet.

C) Concentrarea securității

Pentru securitatea în rețea, un firewall poate fi o soluție mai puțin costisitoare, în sensul că programul care trebuie modificat și software-ul adițional de securitate pot fi localizate în sistemul firewall (în totalitate sau în cea mai mare parte), spre deosebire de situația în care acestea ar fi fost distribuite pe toate calculatoarele gazdă.

D) Întărirea caracterului privat al informației care circulă prin rețea

Caracterul privat al informației este o preocupare majoră pentru unele companii, deoarece informația considerată în mod normal nesenzitivă (nesecretă), poate conține secvențe folositoare pentru un eventual atacator. Folosind un firewall, se pot bloca servicii cum ar fi finger sau DNS (Domain Name Service), de exemplu.

Serviciul finger afișează informații despre utilizatori, cum ar fi data ultimului acces, dacă și-au citit poșta electronică și altele. În același timp însă, finger furnizează atacatorilor informații despre cât de des este folosit un sistem, dacă sistemul are utilizatori activi la un moment dat și dacă poate fi atacat fără a atrage atenția.

Firewall-urile pot fi folosite, de asemenea, pentru a bloca ieșirea în exterior a informației DNS referitoare la sistemele gazdă interne, numele și adresele IP asociate acestora nefiind disponibile celorlalte calculatoare din Internet. Se ascunde astfel o informație care ar putea fi folositoare atacatorilor.

E) Monitorizarea și realizarea de statistici cu privire la folosirea rețelei

Dacă întregul trafic spre/dinspre Internet trece printr-un firewall, atunci există posibilitatea monitorizării acestuia și furnizării de statistici cu privire la folosirea rețelei. Colectarea de date privitoare la încercările de atac asupra rețelei permite verificarea rezitenței firewall-ului la asemenea încercări, iar realizarea de statistici este folositoare pentru analizarea riscurilor și pentru studiile de dezvoltare a rețelei.

Dezavantajele folosirii unui firewall

În afara avantajelor folosirii unui firewall există, de asemenea, o serie de dezavantaje și un număr de probleme de securitate nu pot fi rezolvate prin intermediul acestuia. Încă de la început trebuie reținut faptul că un firewall nu este un panaceu universal pentru rezolvarea tuturor problemelor de securitate ale rețelelor conectate la Internet.

A) Restricționarea accesului la unele servicii

Cel mai evident dezavantaj al folosirii unui firewall este că acesta impune, de cele mai multe ori, restricționarea accesului la unele servicii considerate vulnerabile, servicii care sunt însă solicitate intens de utilizatori (de exemplu : Telent, Ftp, X Window, Nfs etc.). Uneori, politica de securitate în rețea a organizației poate chiar impune blocarea acestora. Totuși, acest dezavantaj nu este specific numai unui firewall, accesul la anumite servicii putând fi restricționat la fel de bine și la nivelul calculatoarelor gazdă, în funcție de politica de securitate a unei organizații. O politică de securitate bine planificată, care pune în balanță atât cerințele de securitate în rețea, cât și nevoile utilizatorilor, poate duce la reducerea problemelor aduse de restricționarea accesului la unele servicii.

Unele rețele pot avea o topologie ce nu impune necesitatea existenței unui firewall sau pot folosi unele servicii, cum ar fi NFS, într-o astfel de manieră încât utilizarea unui firewall ar necesita restructurarea majoră a rețelei. Într-o astfel de situație, costul adăugării unui firewall ar trebui să fie comparat cu costul acceptării vulnerabilităților în condițiile lipsei acestuia, printr-o analiză a riscurilor.

B) Potențialul ridicat pentru existența unor “uși secrete”

Un firewall nu poate proteja împotriva unor “uși secrete” (back doors) existente într-o rețea, cum ar fi, de exemplu, permiterea nerestricționată a accesului prin modem la unele dintre sistemele gazdă interne.

Vitezele de transmisie ale modem-urilor actuale sunt suficient de mari pentru a face practică folosirea protocoalelor SLIP sau PPP. O conexiune SLIP sau PPP într-o rețea protejată este, în esență, un potențial back door, care face inutilă folosirea unui firewall.

C) Protecția scăzută față de atacurile provenite din interior

În general, un firewall nu asigură o protecție față de amenințările interne. Dacă poate fi proiectat astfel încât să prevină scurgerea de informații secrete spre exterior, un firewall nu poate opri o persoană din interiorul rețelei spre exterior, un firewall poate opri o persoană din interiorul rețelei de a copia aceste informații pe o dischetă și de a le furniza apoi celor interesați. De aceea, este greșit să presupunem că existența unui firewall asigură protecția față de atacurile din interior sau față de atacurile care nu au nevoie să treacă prin acesta. Este total nerecomandată investirea de resurse importante într-un firewall, dacă celelalte modalități posibile pentru furtul datelor sau pentru atac împotriva sistemului sunt neglijate.

D) Alte probleme:

Serviciile WWW – noile servicii de informare și clienții acestora, cum ar fi WWW gopher, WAIS, nu au fost proiectate pentru a se integra ușor în politicile de firewall și, datorită noutății lor, folosirea acestora este, în general, considerată riscantă. Atacul potențial este acela prin intermediul instrucțiunilor și datelor trimise spre procesare clienților, de exemplu instrucțiuni pentru efectuarea de modificări în fișiere care au legătură directă cu problemele de securitate și de control al accesului 1 pe calculatorul gazdă;

Virușii – Firewall-urile nu pot proteja împotriva utilizatorilor care aduc local, din arhivele Internet, prin intermediul FTP sau ca atașări la e-mail, programe infectate de viruși. Din cauză că aceste programe pot fi criptate sau comprimate în mai multe moduri, un firewall nu le poate “scana” în scopul identificării semnăturilor virale. Această problemă a programelor infectate rămâne și va trebui rezolvată prin alte politici și/sau controlate antivirale.

Viteza de comunicație cu exteriorul – Un firewall reprezintă o potențială gâtuire pentru traficul care intră/iese în/din rețea. Totuși, aceasta nu constituie o problemă în rețelele legate cu exteriorul prin linii de mare viteză;

Fiabilitatea – O rețea protejată prin firewall își concentrează securitatea într-un singur loc, spre deosebire de varianta distribuirii securității între mai multe sisteme. O compromitere a firewall-ului poate fi dezastruoasă pentru celelalte sisteme (mai puțin protejate) din rețea. Acestui dezavantaj i se poate opune argumentul că incidentele de securitate apar, mai degrabă, pe măsură ce numărul de sisteme din rețea crește, iar distribuirea securității între acestea multiplică modalitățile în care rețeaua poate fi atacată.

În ciuda acestor probleme și dezavantaje, se recomandă ca protejarea resurselor unei rețele să se facă atât prin intermediul firewall-urilor, cât și al altor mijloace și tehnici de securitate.

Componentele unui firewall

Componentele fundamentale ale unui firewall sunt:

politica de control a accesului la servicii;

mecanismele de autentificare;

filtrarea pachetelor;

serviciile proxy și porțile la nivel de aplicație (application level gateway);

sistemele gazdă-bastion.

În continuare sunt descrise toate aceste componente.

3.2. Politica de protocol al accesului la servicii

Există două niveluri ale politicii de control al accesului la servicii, care influențează direct proiectarea, instalarea și folosirea unui sistem firewall:

politica de acces la serviciile rețelei;

politica de proiectare a firewall-ului.

Politica de nivel superior definește acele servicii ale rețelei care pot fi explicit permise sau refuzate, cum vor fi folosite acestea și condițiile în care vor putea exista excepții. Politica de nivel inferior descrie modul în care firewall-ul va restricționa accesul și va filtra serviciile definite prin politica de nivel superior.

Politica de acces la servicii – trebuie să se concentreze asupra problemelor de utilizare specifice Internet-ului și asupra conexiunilor cu exteriorul (linii telefonice comutate). Această politică trebuie să fie o extensie a politicii generale a organizației cu privire la protecția resurselor informaționale. Pentru ca un firewall să aibă succes, politica de acces la servicii trebuie să fie realistă și trebuie schițată înaintea implementării efective a acestuia. O politică restrânsă este aceea care asigură un echilibru între protejarea rețelei față de anumite riscuri cunoscute și asigurarea accesului utilizatorilor la resursele rețelei.

Un firewall poate implementa o varietate de politici de acces la servicii:

una tipică este aceea de a interzice accesul din Internet în rețeaua proprie și de a-l permite pe cel din interior spre Internet;

altă politică tipică este cea în care se permite accesul din Internet, dar numai pe anumite sisteme (selectate), cum ar fi server-ele de informații sau de poștă electronică;

firewall-urile implementează uneori politici care permit accesul din Internet pe anumite sisteme gazdă, dar numai în cazuri absolut necesare și numai în condițiile folosirii mecanismelor avansate de autentificare.

Politica de proiectare a firewall-ului – definește regulilie folosite pentru implementarea politicii de acces la servicii, ținând cont de capabilitățile și limitările unui firewall, precum și de amenințările și vulnerabilitățile asociate cu Internet-ul și de protocoale TCP/IP. Proiectarea sistemelor firewall are la bază una din următoarele două sub-politici:

ceea ce nu este interzis în mod explicit este permis;

ceea ce nu este permis în mod explicit este interzis.

Un firewall proiectat după prima sub-politică permite în mod explicit existența tuturor serviciilor, cu excepția acelora dezactivate prin politica de acces. Un firewall proiectat după cea de-a doua sub-politică interzice în mod explicit toate serviciile, permițându-le doar pe acelea care au fost expres permise prin politica de acces. Cea de-a doua sub-politică urmează modelul “clasic”, folosit în toate domeniile securității informatice.

Politica de acces la servicii este cea mai importantă dintre componentele enumerate anterior, reflectând politica generală de securitate a organizației. Celelalte componente sunt folosite pentru a implementa și a impune această politică. Eficiența unui sistem firewall în protejarea unei rețele depinde de politica de acces la servicii, de politica de proiectare folosită și de alegerea unei arhitecturi firewall corespunzătoare.

3.3. Mecanismele avansate de autentificare

Există numeroase incidente petrecute în Internet, ca urmare a vulnerabilității existente în folosirea tradițională a parolelor. În general, utilizatorii sunt sfătuiți cum să-și aleagă parole din ce în ce mai greu de ghicit, pe care să nu le dezvăluie altor persoane. Chiar dacă urmează acest sfat, faptul că, la cerere, parolele sunt transmise în clar prin rețea și că traficul din Internet poate fi monitorizat cu ușurință face ca acest sistem să fie depășit.

Mecanismele avansate de autentificare, cum ar fi cartele inteligente, jetoanele de autentificare, tehnicile biometrice și mecanismele bazate pe software sunt destinate contraatacării slăbiciunilor sistemului tradițional al parolelor. Deși mecanismele avansate de autentificare sunt diferite, ele sunt similare în ceea ce privește faptul că parolele pe care le generează nu pot fi refolosite de către atacator care a monitorizat conexiunea – ele fiind de unică folosință. În condițiile problemelor inerente sistemului tradițional al parolelor, apreciem că nu are sens existența unui firewall care nu folosește aceste mecanisme avansate.

Deoarece un firewall centralizează și controlează accesul într-o rețea, acesta este locul unde, în mod logic, trebuie să se afle software-ul sau hardware-ul pentru autentificare. Deși mecanismele avansate de autentificare pot fi folosite pe fiecare sistem gazdă, este mai economică, mai practică și mai ușor de administrat varianta centralizării acestora pe firewall.

Scopul principal al firewall este de a furniza servicii Internet sigure pentru utilizatorii din interiorul rețelei protejate. Există situații când este necesară furnizarea de servicii și pentru utilizatorii din exterior. Aceste servicii sunt de două tipuri: anonime (de exemplu anonymus FTP) și cele care cer autentificare:

Serviciile anonime nu necesită o tratare specială din punctul de vedere al unui firewall. De obicei, în interiorul firewall-ului va rula server-ul pentru serviciul anonim respectiv, iar accesul la acel server va fi permis prin mijloacele normale de control;

Serviciile “autentificate” sunt furnizate mai ales pentru a da posibilitatea propriilor utilizatori să se conecteze la sistemele gazdă interne, de undeva din exteriorul rețelei. Problema majoră care apare, față de cazul serviciilor pentru utilizatorii din interior, este autentificarea falsă.

Câteva din mecanismele avansate de autentificare sunt bazate fie pe parole utilizabile o singură dată, fie pe cartele inteligente.

Parole de unică folosință

Există două modalități de funcționare a unui sistem cu parole utilizabile o singură dată (one-time-passwords):

lista de parole este generată aleator, iar sistemul și utilizatorul păstrează câte o copie;

o anume intrare din listă este generată de utilizator la cerere și validată de sistem.

Problema în primul caz este că, dacă cineva obține lista memorată, o poate folosi pentru autentificări (false) ulterioare.

Un sistem care implementează a doua soluție este S/Key, dezvoltat de Belcore. S/Key aplică iterativ un algoritm criptografic de hash, începând cu o valoare inițială.

Un tip special de parole utilizabile o singură dată îl reprezintă parolele bazate pe timp. Într-un astfel de sistem, parola se modifică după câteva minute, după un algoritm cunoscut de sistem și de instrumentul de autentificare a utilizatorului. Acest instrument este, de obicei, o cartelă inteligentă. Security Dinamics implementează un astfel de sistem, numit SecurID. Un algoritm posibil este criptarea timpului curent cu o cheie cunoscută de sistem și programată în memoria cartelei.

Cartele inteligente

Un alt mecanism de autentificare îl reprezintă “răspunsul la provocare”. Principiul după care funcționează mecanismul este următorul:

Utilizatorul își introduce numele de login;

Sistemul generează un număr aleator (provocarea) și îl trimite utilizatorului;

Utilizatorul criptează provocarea cu o cheie cunoscută și de sistem (stabilită dinainte) și trimite rezultatul;

Sistemul criptează, la rândul său, numărul aleator cu cheia corespunzătoare numelui introdus de utilizator și compară cu răspunsul primit. În caz de coincidență, utilizatorul este acceptat de sistem.

Un astfel de sistem este SNK-004, produs de Digital Pathways. Sistemul folosește o cartelă inteligentă pentru a memora cheia utilizatorului și a implementa algoritmul de criptare DES. Pentru a utiliza o astfel de cartelă utilizatorul trebuie să introducă un PIN (Personal Identification Number), înscris în memoria acesteia.

Sistemele prezentate pot fi implementate și pe un server de autentificare. Existența unui server de autentificare reprezintă o abordare diferită față de cea clasică în care programele (cum ar fi login sau ftpd) implementau efectiv autentificarea, fiind obligate să știe metoda prin care se realiza aceasta. Dacă la un moment dat se dorea schimbarea metodei de autentificare sau adăugarea uneia noi, atunci era necesară modificarea tuturor acelor programe. Serverul de autentificare face necesară o singură dată modificarea acestor programe – pentru a ști cum să comunice cu server-ul. Pentru autentificare, un program client va parcurge următorii pași:

primește de la utilizator numele de login;

contactează serverul de autentificare și îi comunică acest nume;

serverul comunică programului client ce anume să ceară utilizatorului;

trimite serverului răspunsul primit de la utilizator;

primește de la server rezultatul autentificării si afișează un mesaj corespunzător.

3.4. Filtrarea pachetelor

Prima linie de apărare

Ruterele cu ecranare au reprezentat primele firewall-uri. De obicei ne gândim la un ruter ca la un dispozitiv de rețea a cărui sarcina este de a lua decizii in cea ce privește modul de retransmitere a unui pachet astfel incat acesta sa poată fi livrat. Adăugarea listelor de control al accesului permite unui ruter sa monitorizeze ce pachete au permisiunea să circule prin interfețele sale de rețea. Aceasta metoda simplă de retransmitere sau de respingere a unui pachet pe baza regulilor stabilite de administratorul de rețea reprezintă baza unui filtru de pachete. Ruterul cu ecranare efectuează o funcție de filtrare, astfel încât numai pachetelor care îndeplinesc anumite criterii le este permisă trecerea.

Unde trebuie folosite filtrele de pachete?

În figura 1.3. putem vedeam trei scenarii diferite care întrebuințează un ruter pentru a filtra pachetele înainte ca acestea să fie distribuite în rețeaua LAN. În fiecare dintre cele trei cazuri, ruterul cu ecranare este poziționat cel mai aproape de conexiunea la Internet. Aceasta înseamnă că se găsește la marginea rețelei și acționează ca un portar (gatekeeper).

Figura 1.3. Filtrarea pachetelor cu ajutorul unui ruter

În prima situație, ruterul ecranează pachetele înainte ca acestea să fie livrate unui calculator gazdă cu două plăci de rețea. Ruterul acționează ca un filtru de pachete. Calculatorul gazdă cu două plăci de rețea a fost configurat într-un mod foarte sigur ca o gazdă bastion. Serviciile și conturile de utilizator care nu sunt necesare au fost eliminate de pe acest calculator, iar sistemul de operare a fost modificat astfel încât să nu existe pachete care să fie retransmise automat de la o interfața la cealaltă. Rezultatul acestor modificări este acela ca nici un pachet IP nu are permisiunea să circule direct din rețeaua locală către Internet. Software-ul de pe gazda cu două plăci de rețea (intermediar de aplicație) este responsabil pentru discuțiile cu clienții din rețeaua internă și interacțiunea cu serverele din Internet în numele acelor clienți.

În al doilea caz, putem vedea că nu este absolut necesar să folosim un calculator cu două plăci de rețea pentru găzduirea serviciilor intermediare. O conexiune este suficientă. Însă în acest tip de configurare, este important ca ruterul să fie configurat astfel încât să permită pachetelor să circule între Internet și serverul intermediar și să nu permită trecerea nici unui trafic direct din Internet către rețeaua LAN internă. Acest model e denumit “configurație cu gazda ecranată” (screened-host configuration). Este considerat mai puțin sigur decât utilizarea unei gazde cu două plăci de rețea pentru aplicațiile intermediare deoarece clienții din rețeaua internă trebuie să fie configurați corect, astfel încât să trimită pachete către serverul intermediar și să nu încerce să comunice direct cu serverele din Internet.

A treia configurație, care implică două rutere, creează o subrețea între Internet și rețeaua LAN și este cunoscută sub numele de subrețea ecranată (screened subnet). Calculatoarele gazdă care se găsesc în subrețeaua ecranată sunt protejate de ruterul conectat la Internet. Pentru a apăra clienții din rețeaua LAN este folosit alt ruter.

Crearea de reguli pentru filtrarea pachetelor

Pentru a decide cum vom stabili regulile pentru un filtru de pachete, la început vom hotărî:

Ce servicii dorim să oferim în rețea;

Dacă dorim să limităm abilitatea vreunui calculator gazdă intern de conectare la Internet;

Dacă există gazde sigure în Internet care vor avea nevoie de un anumit tip de acces în rețeaua internă.

Tipurile de informații pe care le putem folosi pentru a crea reguli variază puțin de la un produs la altul, însă următoarele elemente sunt cele mai utile:

– Interfața și direcția – Dacă un pachet părăsește sau ajunge în rețea și prin ce interfața trece prin aceasta.

– Adresele IP sursa și destinație – Trebuie să putem verifica atât locul de unde pretinde un pachet că provine (adresa IP sursa), cât și locul în care dorește să ajungă (adresa IP destinație).

– Opțiunile IP – Trebuie să putem să verificăm acest câmp, în special pentru a împiedica rutarea la sursă.

– Protocolul de nivel mai înalt – Tipul de protocol care folosește pachetul IP. De exemplu TCP sau UDP.

– Pentru pachetele TCP, bitul ACK – Verificarea acestui bit ne poate ajuta să determinăm dacă se face o încercare de stabilire a unei conexiuni și în ce direcție.

– Dacă este ICMP, tipul de mesaj – Putem împiedica anumite încercări de căutare a unor informații despre rețeaua proprie.

– Porturile sursă și destinație pentru pachetele TCP și UDP – Aceste informații ne pot ajuta să stabilim ce servicii sunt folosite.

Servicii periculoase

Între serviciile periculoase cărora nu ar trebui să le permitem trecerea prin firewall se număra următoarele:

Network File System (NFS) – dacă permitem trecerea acestui tip de trafic prin firewall, este posibil ca cineva din exteriorul rețelei să fie capabil să monteze un sistem de fișiere din rețeaua internă și să acceseze fișiere și directoare ca și cum ar fi conectat la rețeaua LAN.

Network Information Services (NIS) – Acest serviciu, care era cunoscut înainte sub numele de “Yellow Pages”, poate oferi hackerilor informații valoroase, cum ar fi numele de gazde și utilizatori din rețeaua dumneavoastră.

X Windows – Sunt multe probleme de securitate provocate de folosirea clienților și serverelor X. Pe lângă problemele asociate cu modul în care sunt rulate aplicațile și privilegiile utilizate, permiterea unei sesiuni X Window poate fi la fel de dăunătoare ca o sesiune Telnet.

Informațiile din antetul IP care pot fi folosite pentru filtrarea pachetelor

În general filtrele de pachete operează numai cu informațiile de antet pe care le găsesc în pachet. Deoarece există mai multe anteturi diferite de protocoale în fiecare pachet, le vom analiza doar pe cele care sunt importante pentru filtrarea pachetelor. Majoritatea filtrelor de pachete nu folosesc informațiile de antet găsite la nivelul de cadru Ethernet. Adresa sursei și alte informații similare sunt puțin folosite, deoarece este vorba fie de o adresă hardware MAC locală pentru un sistem din rețeaua LAN, fie de o adresă a unui ruter responsabil pentru ultimul segment din calatoria unui pachet prin Internet. În continuare, în stiva de protocoale urmează informațiile de antet pentru pachetul IP. În tabelul 1.3. putem vedea că aceste informații sunt foarte limitate în antetul unui pachet IP.

Tabel 1.3.

Informațiile de antet pentru pachetul IP

0 4 8 16 31

Filtrul de pachete din acest antet poate folosi trei informații importante:

Adresa IP – Atât adresa sursa cât și adresa destinație;

Protocoale – TCP, UDP, ICMP;

Opțiunile IP – rutarea la sursă.

Informațiile de antet TCP si UDP

Fiecare strat din stiva de protocoale adăugă informații de antet datelor pe care le recepționează de la stratul de deasupra lui. Deoarece protocolul IP este utilizat de alte protocale, cum ar fi TCP si UDP, ne putem aștepta ca în interiorul porțiunii de date a pachetului IP să se găsească informații de antet plasate de protocoalele amintite. O parte din aceste informații sunt foarte utile pentru filtrarea pachetelor. În tabelul următor (tabel 2.3. ) este prezentată structura antetului TCP. Aceste informații de antet sunt numite uneori TCP Protocol Data Unit.

Tabel 2.3.

Structura antetului TCP

Portul sursă – Acesta este un câmp de 16 biți folosit pentru identificarea portului utilizat de aplicația care trimite datele.

Portul destinație – Acesta este un câmp de 16 biți folosit pentru identificarea portului la care va fi livrat pachetul la capătul receptor al conexiunii.

Numărul de secvența – Acesta este un câmp de 32 de biți folosit pentru a identifica locul în care se găsește un segment într-un mesaj mai mare atunci când mesajul este împărțit în fragmente pentru transmisie.

Numărul de confirmare – Acesta este un câmp de 32 de biți folosit pentru indicarea numărului de secvența care urmează.

Deplasamentul datelor – Este un câmp de 4 biți utilizat pentru a specifica numărul de cuvinte de 32 de biți care formează antetul. Acest câmp folosit pentru a calcula începutul porțiunii de date a pachetului.

Zona rezervată – Acești 6 biți au fost rezervați pentru o utilizare viitoare, și deoarece nu sunt folosiți niciodată trebuie să aibă valoarea 0.

Indicatorul URG – Atunci când acest bit are valoarea 1, câmpul denumit Pointer urgent indică o secțiune a zonei de date a pachetului specificată ca “urgent”.

Indicatorul ACK – Acesta este bitul de confirmare. Dacă primește valoarea 1, pachetul este o confirmare. Dacă primește valoarea 0, pachetul nu este o confirmare.

Indicatorul PSH – Dacă primește valoarea 1, acest bit indică o funcție push; în celelalte cazuri are valoarea 0.

Indicatorul RST – Dacă primește valoarea 1, acest bit este un semnal care indică resetarea conexiunii; în celelalte cazuri are valoarea 0.

Indicatorul SYN – Dacă primește valoarea 1, acest bit indică faptul că numerele de secvență trebuie sincronizate. Dacă primește valoarea 0, numerele de secvența nu trebuie sincronizate.

Indicatorul FIN – Dacă primește valoarea 1, acest bit specifică faptul că expeditorul a terminat de trimis informațiile. În celelalte cazuri, primește valoarea 0.

Window – Acest câmp de 16 biți este folosit pentru a specifica cate blocuri de date este capabil sa accepte in acest moment calculatorul receptor.

Suma de control – Acest câmp de 16 biți este o valoare calculata, utilizata pentru verificarea integrității antetului si a zonelor de date din pachet.

Pointerul urgent – Daca indicatorul URG este activat, acest câmp de 16 biți indica deplasamentul fata de câmpul numărului de secvența din zona de date a pachetului unde sunt stocate datele urgente. Acest câmp nu este folosit de TCP, ci de aplicațiile situate deasupra protocolului TCP in stiva

Opțiuni – Acest câmp avea lungime variabila si este asemănător cu câmpul de opțiuni din pachetul IP. Una din funcțiile pentru care este utilizat acest câmp specificarea dimensiunii maxime a segmentului.

Deoarece câmpul de opțiuni poate varia ca dimensiune, antetul este completat cu biți suplimentari, astfel incat sa aibă o dimensiune multiplu de 32.

Având disponibile toate aceste informații, putem observa ca protocolul TCP poate exercita un bun control asupra conexiunii. Însă prin modificarea unor câmpuri și hackerii pot exercita un bun control asupra conexiunii. De exemplu prin manipularea biților indicatori ACK si SYN hackerii sunt capabili să folosească atacuri de tip interzicerea serviciului, denumite inundare SYN. Prin modificarea informațiilor din antetul TCP, în special a numerelor de secvența și de confirmare, este posibilă “deturnarea” unei conexiuni TCP.

Antetul UDP este mult mai mic decât antetul TCP. În tabelul următor (tabel 3.3.) se observă că acest antet nu include decât patru câmpuri, iar dintre acestea doar două, porturile sursă și destinație, sunt utile pentru filtrarea pachetelor. UDP este un protocol fără conexiune, care nu garantează livrarea și nu face mai mult decât să trimită date în rețea.

Tabel 3.3

Structura antetului UDP

Porturi și socluri

Cele două câmpuri importante din aceste două anteturi utilizate de filtrele de pachete sunt porturile sursă și destinație. Adresele sursă și destinație din antetul IP sunt utilizate pentru a identifica cele două mașini din rețea care își trimit pachete una alteia. Porturile sunt folosite pentru a identifica punctele finale de aplicație ale conexiunii. Deoarece un anumit calculator poate avea mai multe aplicații care utilizează simultan stiva TCP, trebuie să existe o metodă de diferențiere a pachetelor care lucrează cu aplicații diferite. De exemplu să presupunem că am stabilit o sesiune Telnet cu un calculator situate la distanță și vrem să descărcăm un fișier de pe acel calculator. Utilitarul Telnet nu transferă fișiere deci trebuie să deschidem o conexiune FTP. Deoarece adresele sursa și destinație ar trebui să fie aceleași în pachetul IP pentru ambele sesiuni, numerele de porturi sunt utilizate pentru a indica aplicația.

Atunci când combinăm o adresă cu un număr de port avem un identificator care poate identifica în mod unic ambele puncte finale ale unei aplicații. Numele folosit pentru această combinație de numere este soclu (socket).

Bitul SYN

Acest bit de sincronizare este activat atunci când este trimisă o cerere în timpul încercării inițiale de conectare, indicând faptul că numerele de secvența ar trebui sincronizate. Configurarea unei conexiuni consumă mult mai mult timp decât gestionarea uneia care este deja folosită pentru transferul de date. O inundare SYN nu este decât un hacker care trimite continuu pachete având bitul SYN activate, astfel încât calculatorul destinație pierde mult din timpul prețios al unității centrale de prelucrare încercând să configureze o conexiune nouă și alocând memorie pentru această operație. Cu toate că nu putem filtra toate pachetele care au activate bitul SYN, putem monitoriza fișierele jurnal pentru a găsi gazdele care încearcă în mod repetat să trimită aceste tipuri de pachete, astfel încât acelor gazde să nu li se permită accesul prin firewall.

Bitul ACK (bitul de confirmare)

Acest câmp activate numai după stabilirea unei conexiuni. Primul pachet trimis pentru a solicita o conexiune are acest bit șters (dezactivat). La celălalt capăt al conexiunii, acest bit este activate și este trimis înapoi un răspuns. Prin examinarea acestui bit și analizarea direcției comunicației, este posibil să creăm reguli în filtrul de pachete pentru a permite o conexiune numai în direcția în care dorim – către interior sau către exterior.

Pachete ICMP

Protocolul ICMP (Internet Control Message Protocol) este folosit de stivele TCP/IP pentru a trimite informații de control și gestionare una către cealaltă. De exemplu, un tip de mesaj ICMP este denumit mesaj Source Quench (Oprirea sursei). Acest tip de mesaj este trimis de un calculator pentru a comunica parții care a inițiat conexiunea sa oprească transmisia de pachete. Este folosit pentru controlul fluxului, astfel incat partea receptoare a conexiunii sa nu ajungă suprasaturata si sa respingă pachetele. Acest tip de mesaj este unul dintre cele pe care nu le vom dori sa le blocam folosind un filtru de pachete, deoarece gestionarea controlului fluxului este o operație importanta. Mesajul de tip Redirect poate fi utilizat pentru a comunica unei gazde sau unui ruter ca ar trebui folosita o alta ruta pentru a ajunge la o anumita destinație. Folosind acest tip de mesaj, un hacker poate trimite date incorecte ruterelor si poate sa altereze tabele de rutare.

Pachetele ICMP pot fi foarte utile, insa ele pot fi folosite si pentru a obține informații despre rețeaua noastră. O funcție importanta a unui firewall este de a împiedica persoanele din exterior sa obtina informații despre gazdele din rețeaua noastră. Datorita acestui fapt, este indicat sa blocam câteva tipuri de mesaje, cum ar fi următoarele:

Mesajele echo request către interior și echo reply către exterior – trebuie să permitem utilizatorilor să folosească utilitarul PING pentru a testa conectivitatea cu gazdele din exterior, însă nu și invers.

Mesajele redirect către interior – aceste mesaje pot fi folosite pentru reconfigurarea tabelelor de rutare din rețeaua proprie.

Mesajele destination unreachable către exterior și service unavailable către exterior – nu trebuie să permitem nimănui să ne sondeze rețeaua. Prin aflarea destinațiilor la care nu se poate ajunge sau ce servicii nu sunt oferite, sarcina hackerului este mult mai ușoară.

Operarea independent de stare în comparație cu inspectarea dependentă de stare

Utilizarea porturilor sursă și destinație pentru crearea regulilor referitoare la conexiunile TCP este foarte utilă. Aceasta se datorează faptului că TCP este un protocol orientat spre conexiune. Fiecare pachet UDP este independent. Atunci când este folosit pentru a executa funcții de cerere/răspuns, poate fi imposibil de determinat din informațiile de antet ale fiecărui pachet dacă un pachet sosit este un răspuns la un pachet UDP anterior. Un filtru simplu de pachete nu poate fi utilizat pentru a controla servicii care folosesc pachete UDP de acest gen. Un filtru simplu de pachete, denumit filtru de pachete independent de stare, ia decizii în funcție de fiecare pachet în parte și nu putem crea reguli care să filtreze pachetele pe baza relației între un pachet și altul.

Tehnica de filtrare dinamică a pachetelor, denumită și inspectare dependentă de stare, duce conceptul de filtrare a pachetelor la un nivel mai înalt, păstrând în memorie un tabel care încearcă să realizeze corespondență între pachetele către exterior și cele către interior. Informațiile reținute vor fi de obicei adresele sursă și destinație, precum și porturile sursă și destinație. Este folosit un cronometru astfel încât intrările din acest tabel nu pot fi exploatate cu ușurința. Dacă nu apare un răspuns pentru un pachet trimis, intrarea din tabel va fi ștearsă pentru a nu lăsa o breșa în sistemul de securitate.

Utilizarea unui filtru pentru restricționarea accesului

Ruterele diferă prin sintaxa utilizată pentru crearea listelor de control al accesului (sau a regulilor). Unele ne permit să creăm un set de reguli care se pot aplica tuturor interfețelor în mod egal, atât către interior cât și carte exterior. Altele ne permit să specificăm un set de reguli pentru o interfața și un alt set de reguli pentru cealaltă interfață.

Între caracteristicile importante ale unui ruter cu filtrarea pachetelor se numără următoarele:

Capabilități bune de înregistrare în jurnal – de obicei ruterele au capacitatea limitată de stocare, astfel că este recomandată funcția de rutare a informațiilor de tip jurnal la un demon syslogd pe un alt system securizat.

O sintaxa de comandă care nu e complicată, permițând crearea regulilor pe baza câmpurilor ce includ portul sursă pentru pachetele TCP și UDP. Folosind această funcție, putem crea un set de reguli mai sever.

Regulile ar trebui evaluate în ordine. Dacă ruterul efectuează un anumit tip de optimizare a setului de reguli, poate fi dificil să diagnosticăm probleme atunci când testam firewall-ul.

Avantajele și dezavantajele filtrelor de pachete

Avantaje:

Filtrarea pachetelor este gratuită. Într-o rețea LAN mică, un singur ruter poate fi suficient pentru utilizarea ca filtru de pachete.

Teoretic, nu avem nevoie decât de un singur filtru, în punctul în care rețeaua LAN se conectează la Internet sau la o rețea externă de calculatoare. Acesta asigură un “punct de strangulare” pentru rețea.

Nu trebuie ca utilizatorii să fie instruiți sau să folosim un tip special de program client sau server pentru implementarea filtrelor de pachete. Ruterul cu ecranare sau gazdă pentru filtrarea pachetelor execută în mod transparent toate operațiile pentru clienții din rețea.

Dezavantaje:

Ruterele pot fi dificil de configurat, în special dacă folosim o configurare complexa, cu un număr mare de reguli. În această situație ele pot fi și dificil de testat riguros.

Atunci când un filtru de pachete se defectează sau nu este configurat corect, pagubele din rețea ar putea fi mult mai mari decât in cazul defectării unui server intermediar. Cu toate ca un ruter ar putea permite retransmiterea pachetelor IP datorita unei erori de programare sau unui set de reguli configurat incorect, atunci când o aplicație intermediara se defectează, nu exista o retransmisie directa a pachetelor IP. Defectarea unui intermediar desface conexiunea.

Filtrele de pachete lucrează pe un set mic de date – informațiile din antetul pachetului IP. Deoarece acestea sunt singurele informații care pot fi folosite pentru a decide dacă unui pachet trebuie să i se permită trecerea prin firewall, un filtru de pachete este limitat în ceea ce privește deciziile pe care le pot lua. Tehnicile de inspectare dependente de stare îmbunătățesc această funcție, însă tot ar trebui să luăm în considerare folosirea serverelor intermediare (pe lângă un filtru de pachete) pentru a crea o soluție completă de firewall.

Multe rutere cu filtrarea pachetelor nu au capabilitati solide de înregistrare în jurnal, astfel ca este dificil de obținut informații utile atunci când un system este infiltrate sau atacat.

3.5. Utilizarea unei gazde bastion

Termenul gazdă bastin (bastion host) este folosit referitor la un system de calcul care a fost întărit prin creșterea securității la un nivel care nu este aplicabil pe o stație de lucru obișnuită. Un calculator întărit folosește elementele fundamentale de protecție a resurselor, auditarea și mecanismele de autentificare din sistemul de operare, în cea mai completă formă. Aplicațiile și serviciile care nu sunt necesare pentru sarcinile efectuate de gazda bastion sunt eliminate de pe calculator astfel încât să nu poată deveni ținte pentru compromitere. Conturile de utilizator sunt șterse de pe calculator astfel încât să rămână numai cele de care este nevoie pentru rularea software-ului sau cele folosite pentru administrarea gazdei. Calculatorul “dezbrăcat” este denumit gazdă bastion datorită funcției pe care o îndeplinește. Un firewall bun este compus din mai multe dispozitive. De obicei este utilizat un ruter pentru conectarea rețelei LAN la Internet, iar acest ruter poate fi configurat pentru a efectua operații de filtrare a pachetelor. Filtrul de pachete se găsește in prima linie de apărare intre rețeaua LAN și Internet. În spatele acestui filtru de pachete, se găsesc de obicei unul sau mai multe calculatoare de tip gazdă bastion care oferă servicii intermediare pentru utilizatorii din rețeaua internă.

Instalarea unui sistem de operare securizat pornind de la zero

Dacă este posibil, ar trebui să instalăm sistemul de operare pentru o gazdă bastion pornind de la zero. Dacă reciclăm un sistem mai vechi care are deja instalate un sistem de operare și aplicații, este mai bine să radem discul și să o luați de la început decât să încercăm să analizăm și să verificăm dacă nu există slăbiciuni.

Deși nu este practic pentru sistemele de operare, unele sisteme, cum ar fi Open VMS, pot fi încărcate si rulate de pe un CD-ROM. Având sistemul de operare pe CD-ROM sau pe o partiție de disc numai pentru citire, fișierele sistemului de operare nu mai sunt o potențială țintă pentru un intrus. Nu putem să înlocuim sau să falsificăm fișiere importante de sistem dacă se găsesc pe o partiție numai pentru citire. Unele produse firewall mai răspândite folosesc această tehnică pentru a proteja sistemul de operare și fișierele de aplicații importante. Fișierele care trebuie deschise pentru scriere sau actualizare pot fi stocate pe o altă partiție. Este posibil, pe unele sisteme, ca datele importante să fie plasate complet pe un alt sistem. De exemplu, multe sisteme UNIX pot fi configurate astfel încât

demonul syslogd să trimită informațiile de înregistrare în jurnal pe un alt sistem. De asemenea, este o idee bună să instalăm pe gazdă bastion numai un sistem de operare. Nu este bine sa folosim acest tip de platforma ca gazda cu încărcare dubla. Orice fișier găsit pe hard-disc este o ținta pe care un hacker o poate folosi împotriva noastră atunci când a băgat un picior pe ușa. La fel cum eliminam fișierele de aplicații de care nu este nevoie, nu ar trebui sa existe fisiere din sistemul de operare pe gazda bastion, cu excepția celor care sunt necesare.

Pentru sistemele UNIX, avem avantajul unui fișier de parole ascuns dacă aceasta funcție este o componentă a pachetului de instalare. Aceasta măsură suplimentară de securitate va ajuta să împiedicam un intrus să descarce fișierul obișnuit /etc./passwd și să își folosească timpul liber pentru a descoperi parolele. Dacă fișierul de parole obișnuit este de obicei disponibil pentru toată lumea, fișierul de parole ascuns nu este.

Eliminarea serviciilor și aplicațiilor care nu sunt necesare

Pe sistemele de UNIX, procesele care se desfașoară în fundal și oferă servicii sunt denumite demoni. Aceste procese demon pot fi proiectate pentru a executa o diversitate de operații, si nu toate sunt necesare pe un calculator pregătit sa fie utilizat ca gazda bastion. De asemenea, serverele Windows NT au procese de tip serviciu care rulează în fundal si pot reprezenta o problema pe o gazda bastion. Vom analiza separat cele doua cazuri, deoarece sistemele folosesc metode diferite de gestionare a serviciilor rulate în fundal.

UNIX

Pe sistemele UNIX, procesele demon sunt lansate în execuție de obicei prin una din următoarele trei metode:

• De către demonul inetd;

• De către fișierele de pornire la încărcarea sistemului de operare;

• Ca parte a nucleului.

Pentru multe servicii uzuale de rețea, demonul inetd răspunde solicitărilor apărute în rețea si folosește informațiile din fișierul de configurare propriu, / etc / inetd.conf, pentru a lansa în execuție în fundal un proces server care satisface fiecare cerere. Putem sa editam acest fișier pentru a preveni pornirea anumitor servicii nedorite.

Între serviciile pe care le-am putea pune în discuție – sau șterge total – din fișierul de configurare inetd.conf, se număra următoarele:

Serviciile r – Aceste utilitare convenabile, cum ar fi rlogin, rcp si rexec, sunt convenabile și pentru hackeri. Dacă aceștia sunt capabili să modifice un fișier hosts. Equiv sau .rhosts de pe sistemul țintă, vor fi capabili să provoace pagube mari pe sistemul respectiv. Trebuie să înlocuim serviciilor r, în cazul în care chiar aveți nevoie de ele, cu serviciile Secure Shell (ssh), care execută în esența aceleași funcții, dar adaugă utilitarelor opțiuni de criptare și autentificare puternică.

FTP – Trebuie să folosim un intermediar pentru acest serviciu. Serviciile UNIX standard, cum ar fi FTP si Telnet, trimit parolele sub forma de text clar prin rețea, iar acestea pot fi capturate cu ușurința cu un program de interceptare. Puteți sa utilizați pachetul TIS Internet Firewall Toolkit (FWTK), de exemplu, pentru a oferi un serviciu FTP mai sigur către si dinspre firewall.

Telnet – Ca si în cazul FTP, folosim un intermediar, cum ar fi, de exemplu, unul dintre cele disponibile în pachetul FWTK.

uucp – Cu toate ca nu este la fel de raspândit ca altădată, programul uucp (UNIX to UNIX Copy Program) este încă inclus în unele versiuni UNIX si mai poate fi găsit rulând în unele locuri. Acest utilitar a fost scris în perioada de început a rețelei Internet si a protocoalelor TCP/IP si nu este o metoda sigura de distribuire a informațiilor între calculatoare în rețeaua Internet moderna. Funcționalitatea oferita de uucp a fost înlocuita de alte utilitare care sunt mai ușor de utilizat si care operează într-un mod mai securizat.

finger – Acest utilitar UNIX standard ne oferă informații despre utilizatorii din rețea.

inetd – Este posibil sa ștergem chiar serverul demon inetd, deoarece multe produse comerciale oferă aceasta funcționalitate. Pentru a găsi înlocuitori pentru serviciile r, verificam produsul SSH Secure Shell, care poate fi folosit în locul acestor servicii problematice.

Unele servicii sunt pornite la încărcarea sistemului, în general din fișierele /etc/rc. *. Trebuie să verificăm în documenta pe pentru a găsi structura corespunzătoare a directorului cu fișierele de pornire si pentru a determina ce fișiere sunt pornite simultan cu procesele. Acesta este modul obișnuit în care sunt pornite servicii cum ar fi NFS (Network File System). NFS este un sistem complex, construit pe baza unor rutine care folosesc apeluri de proceduri de la distanta (RPC, sau remote procedure call). Protocolul utilizat pentru a realiza conexiunea inițiala cu sistemul de fișiere situat la distanta. RPC este o aplica pe protocol simpla de tip clienți server care definește modul în care interacționează clienții si serverele. A fost dezvoltata inițial pentru a fi utilizata în construirea sistemului NFS, însa în prezent este folosita pe scara larga pentru multe alte servicii. Atât clienții, cât si gazdele server care folosesc RPC rulează demonul rpcbind. NFS este un protocol independent de stare. Aceasta înseamnă ca serverul nu păstrează informații care sa tina evidenta de la o cerere a unui client la următoarea. NFS nici nu lucrează cu funcții de genul deschidere sau închidere de fișier. Exista un alt protocol, Mount, care executa aceasta functie pentru NFS. Aceasta înseamnă ca un alt serviciu în fundal, demonul mountd, rulează atât pe client, cât si pe calculatorul server.

Alte fișiere UNIX de rețea care trebuie revizuite

Printre alte fișiere de configurare de rețea standard în sistemele UNIX, care trebuie verificate, se număra următoarele:

• /ete/networks – Acest fișier este similar cu fișierul /ete/hosts, care mapeaza numele prietenoase la adresele IP. Acest fișier face același lucru pentru adresele de rețea. Deși este convenabil sa referim gazdele de la distanta după nume, pentru mulți utilizatori finali aceasta funcționalitate (a numelui de rețea) nici nu este necesara. Majoritatea utilizatorilor finali nu au nici o idee despre rețelele la care sunt conectați. Acest fișier nu este folosit decât pentru a defini numele rețelei locale pentru translatarea adresei, însă ar trebui analizat pentru a va asigura ca nu conține înregistrări care nu sunt necesare sau care arată ciudat.

• /ete/protocols – Acest fișier este folosit pentru a asocia un număr cu un nume de protocol. De exemplu, antetul pachetului IP conține un câmp care definește dacă pachetul este pentru protocolul TCP sau pentru protocolul UDP. În pachetul IP, protocolul este identificat după un număr. Acest număr poate fi referit încrucișat în fișierul / etc/ protocols pentru a obține numele protocolului.

• /ete/services – Acest fișier realizează corespondența între numele serviciului de rețea și numărul de port utilizat în mod obișnuit de serviciu și de protocolul de transport (TCP sau UDP) folosit de serviciu. Putem să edităm din proprie inițiativa acest fișier dacă dorim să adăugați mai mult de un tip de server pentru un software intermediar particular.

Windows NT

Pentru a verifica ce servicii rulează pe un system Windows NT 4.0 Server folosim miniaplicația Services, care se găsește în Control Panel. Această miniaplicație deschide o caseta de dialog (figura 2.3.) care listează serviciile într-o zonă derulabilă.

Figura 2.3. Miniaplicația Services

Folosind acest utilitar, putem să pornim, să oprim sau să întrerupem temporar serviciile. Deși este recomandată oprirea unui serviciu, este o idee bună și ștergerea completă din sistem a unui serviciu în cazul în care acesta nu este necesar. De exemplu în figura 3.3. serviciul TCP/IP NetBios Helper rulează. Deoarece serverul nu folosește decât protocolul TCP/IP pentru comunicarea cu clienții sau cu alte sisteme din Internet, nici nu trebuie să avem instalat protocolul NetBIOS.

Pentru a dezactiva un serviciu de rețea, inițial trebuie să îl oprim executând clic pe serviciu și utilizând butonul Stop. Apoi folosim butonul Startup pentru a schimba modul în care este pornit serviciul. În figura 3.3. putem vedea caseta de dialog Service.

Figura 3.3. Caseta de dialog Service

Pentru a șterge un protocol sau serviciu de rețea din sistem, utilizăm miniaplicația Network din Control Panel. În figura 4.3. putem vedea miniaplicația Network având selectată pagina Services. Dacă protocolul NetBIOS nu este folosit de sistem, putem să ștergem aici acest serviciu în această casetă executând clic pe el și apoi executând clic pe butonul Remove.

Figura 4.3. Miniaplicația Network

Pentru a duce lucrurile puțin mai departe, putem să ștergem și protocolul NetBEUI. Figura 5.3. prezintă miniaplicația Network având selectată pagina Protocols. Aici putem să executăm click pe protocolul NetBEUI și apoi să folosim butonul Remove pentru a șterge protocolul de pe server.

Figura 5.3. Miniaplicatia Network – pag. Protocols

Permisiunile la resurse UNIX

Sistemul de operare UNIX permite să atribuim permisiuni la fișiere și directoare pe baza a trei categorii fundamentale. Primul grup de permisiuni se aplică proprietarului fișierului sau directorului. Al doilea se aplică grupului de utilizatori căruia îi aparține fișierul. Al treilea specifică permisiunile pentru alți utilizatori care încearcă să obțină acces la fișier.

Tipurile de permisiuni fundamentale care se pot aplica unui fișier sau director sunt următoarele:

• Read (r) – Aceasta permisiune acordă utilizatorului dreptul să listeze fișierele stocate într-un director (inclusiv atributele acestuia) și permite citirea conținutului unui fișier.

• Write (w) – Această permisiune acordă utilizatorului dreptul să adauge sau să șteargă fișiere într-un director și să modifice conținutul unui fișier.

• Execute (x) – Această permisiune acordă unui utilizator dreptul de a accesa directorul și de a lansa în execuție un fișier program.

SUID si SGID

Pe lângă aceste permisiuni de bază, mai există două permisiuni importante care trebuie discutate: SUID și SGID. Atunci când un program rulează pe un sistem UNIX, folosește permisiunile care se aplică utilizatorului care rulează programul. Dacă utilizatorul este proprietarul fișierului, sunt folosite permisiunile proprietarului. Dacă utilizatorul este membru al aceluiași grup ca și programul, se aplică permisiunile grupului. Însă dacă unui program îi este aplicată permisiunea SUID (Set User ID), atunci când este executat preia un set de permisiuni identice cu cele ale proprietarului fișierului, chiar dacă utilizatorul care rulează programul nu este proprietarul acestuia. În mod similar, permisiunea SGID (Set Group ID) permite programului să obțină permisiunile care vor fi acordate grupului. Aceste permisiuni puternice permit rularea unui program pentru a executa funcții care ar trebui să fie interzise utilizatorului dacă acesta ar încercă să le execute direct. Este o facilitate necesară pentru anumite proceduri. De exemplu, atunci când un utilizator își schimbă parola, aplicația pentru parolă accesează fișierul /etc/passwd având accesul pentru scriere în vederea efectuării modificării. Utilizatorul nu are acces pentru scriere în fișierul /etc/passwd, astfel că aplicația pentru parolă trebuie să fie capabilă să obțină singură permisiunea. Problema cu aceste permisiuni nu provine de la utilizarea lor normală, ci din erori de programare sau obiceiuri greșite de programare. Atunci când un program utilizează aceste permisiuni și există o eroare de programare cunoscută, este posibil ca un hacker să exploateze această eroare pentru a sparge cadrul programului și apoi, având permisiuni superioare, să execute funcții pe care dumneavoastră nu intenționați să le efectuați. Un obicei bun de programare este verificarea stărilor de răspuns ale tuturor rutinelor și detectarea tuturor erorilor care pot fi determinate prin această metodă. Pentru a determina dacă un fișier sau un director a avut activată permisiunea SUID, putem folosi tot comanda ls și să căutam litera S în câmpul de permisiune al proprietarului din tabloul de permisiuni. Aceasta indică permisiunea SUID. Dacă această literă este majusculă, permisiunea de execuție nu este acordată pentru proprietar. Dacă litera este mică, proprietarului îi este acordată permisiunea de execuție. Atunci când permisiunea este stabilită pentru un grup (adică este acordată permisiunea SGID), găsim caracterul s în poziția utilizată pentru accesul la execuție al grupului.

Schimbarea proprietarului și a valorilor permisiunilor

Există două comenzi simple care se folosesc pentru schimbarea proprietarului și a permisiunilor la resurse. Acestea sunt chown (change owner) și chmod (change permission mode). Pentru a schimba proprietarul unui fișier sau director, se folosește următoarea sintaxa:

chown [ -fhR ] owner [: group ] file …

În aceasta sintaxa, owner (sau group) ar trebui să fie noul utilizator sau identificatorul grupului căruia doriți să îi acordați proprietatea asupra fișierului sau directorului (file…).

Parametrii pe care îi puteți folosi vor acționa astfel:

• -f – anulează raportarea erorilor.

• -h – schimbă proprietarul pentru o legătură simbolică la un fișier și nu pentru fișierul real.

• -R – determină ca schimbarea proprietarului să fie aplicată și pentru fișierele și directoarele din directorul curent.

Pentru a schimba permisiunile de acces la un fișier sau director, folosiți comanda chmod.

Sintaxa pentru această comanda permite să se folosească două metode diferite pentru specificarea permisiunilor. Prima utilizează o valoare numerică, în timp ce a doua metodă folosește un șir de text. Pentru a fi puțin mai clar, vom analiza să analizăm la început valorile numerice pe care le folosim pentru a specifica permisiunile:

• O No access (Nici un acces).

• 1 Execuție fișier (sau căutare în director).

• 2 Write (Scriere).

• 4 Read (Citire).

Pentru a schimba permisiunile de acces la un fișier folosind aceste valori, specificăm câte o cifră pentru fiecare câmp (proprietar, grup și ceilalți utilizatori). Pentru fiecare dintre acestea, putem să adunăm valorile pentru mai multe permisiuni și să ajungem astfel la o valoare între O și 7.

De exemplu:

chmod 660 /etc/bca/sw2dd.asc

În acest caz, au fost stabilite permisiunile de citire și scriere (4+2=6) pentru proprietar și grup. Pentru toți ceilalți utilizatori este interzis accesul la fișier (O).

A doua metodă pe care o putem, folosi pentru a schimba valorile permisiunilor pentru un fișier sau director utilizează caractere în loc de valori numerice. Pentru a specifica pentru cine este stabilită valoarea de permisiune, sunt folosite următoarele litere:

• u Owner (proprietar).

• g Group (Grup).

• o Others (Ceilalți).

• a All (Toți).

Pentru a specifica permisiunea acordată, folosim următoarele caractere:

• r Read (Citire).

• w Write (Scriere).

• x Execute (Execuție).

• s SUID sau SGID.

Pentru a utiliza comanda chmod, trebuie să specificăm cui i se aplica schimbarea de permisiune, ce permisiune este adăugată sau anulată și fișierul sau directorul pentru care este stabilită modificarea. Sintaxa pentru aceasta operație este următoarea:

chmod who function permission

Pentru who si permission folosiți caracterele anterioare. Pentru function, putem utiliza oricare dintre următoarele variante:

• = Pentru a stabili o permisiune.

• + Pentru a adăuga o permisiune.

• – Pentru a șterge o permisiune.

De exemplu:

chmod a=rw /etc/bca/sw2dd.asc

Aceasta comandă oferă tuturor (a provine de la all) permisiunile de citire (r) și scriere (w) în fișier. În exemplul următor, anulăm accesul de scriere (w) pentru celelalte grupuri:

chmod o-w /etc/bca/sw2dd.asc

Windows NT

Pentru a începe analiza tipurilor de permisiuni care pot fi utilizate pentru a controla resursele pe o platformă Windows NT, trebuie să analizăm inițial cele două metode folosite. Puteți utiliza permisiunile speciale, care sunt de baza, sau să atribuim permisiuni folosind grupuri care combină câteva dintre aceste permisiuni de bază într-o unitate în vederea atribuirii.

Permisiunile speciale oferă cel mai complet control asupra accesului la resurse:

R Permisiunea Read (Citire).

W Permisiunea Write (Scriere).

X Permisiunea Execute (Execuție).

D Permisiunea Delete (Ștergere).

P Permisiunea Change (Modificare).

O Permisiunea Take Ownership (Luare în proprietate).

Majoritatea permisiunilor standard care pot fi folosite pentru fișiere combină câteva dintre aceste permisiuni speciale (care sunt mult mai precise) în unități care pot fi mai convenabil de utilizat la atribuirea permisiunilor:

Read RX

Change RWXD

Full Control RWXDPO

No Access

Dacă privim permisiunea standard Read, observăm că include permisiunea specială Read, ca și permisiunea specială Execute. Atunci când acordăm unui utilizator dreptul de a citi un fișier, în majoritatea cazurilor dorim ca utilizatorul respectiv să fie capabil să execute fișierul. Într-o astfel de situație, utilizarea permisiunii Read este mai simplă decât utilizarea permisiunilor speciale și efectuarea de două atribuiri de permisiuni, una pentru accesul la citire și alta pentru accesul la execuție. O permisiune standard pe care o putem folosi și care nu este formată din mai multe permisiuni speciale este No Access. Această permisiune este o metoda convenabilă de interzicere a oricărui tip de acces la o resursă.

Pentru directoare, există o listă diferită de permisiuni standard. Atunci când definim acest tip de permisiuni, există două seturi de permisiuni listate: cele care se aplică directorului și cele care se aplică fișierelor din director. Permisiunile standard pentru directoare sunt următoarele:

List (RX) nespecificat.

Read (RX) (RX).

Add (WX) (nespecificat).

Add & Read (RWX) (RX).

Change (RWXD) (RWXD).

Full Control (RWXDPO) (RWXDPO).

No Access.

Vizualizarea permisiunilor pentru fișiere și directoare cu Windows Explorer

Executăm click pe Start, Programs, Windows NT Explorer. În figura 6.3 se poate vedea că a fost selectat dosarul Fw.

Figura 6.3. Dosarul IIS fw

2. Executăm click cu butonul drept al mouse-ului pe un dosar sau fișier și selectăm din meniu opțiunea Properties. În figura 7.3. putem vedea pagina Properties pentru dosarul Fw, având selectată foaia de proprietăți Security.

3. Executăm click pe butonul Permissions pentru a modifica permisiunile de resurse ale dosarului.

Figura 7.3. Pagina Properties – dosarul fw.

4. Utilizăm caseta de dialog Directory Permissions ca în figura 8.3. pentru a vizualiza permisiunile existente pentru dosar. În mod curent, există mai multe grupuri de utilizatori care au acordate permisiuni de acces pentru acest dosar.

Figura 8.3. Caseta de dialog Directory Permissions

Modificarea permisiunilor cu Windows Explorer

În caseta de dialog Directory Permissions, bifăm casetele de validare Replace Permisions on Subdirectories (Înlocuiește permisiunile asupra subdirectoarelor) și Replace Permissions on Existing Files (Înlocuiește permisiunile asupra fișierelor existente).

Figura 9.3. Caseta de dialog Add Users and Groups

2. Executăm click pe butonul Add. Figura 9.3. prezintă caseta de dialog Add Users and Groups.

3. În partea de jos a casetei de dialog, folosim meniul Type of Access (Tip de acces) pentru a selecționa opțiunea Full Control. Executăm click pe butonul Show Users (Afișează utilizatorii) și derulăm pentru a găsi contul de utilizator fwadmin (figura 9.3.). Executăm click pe butonul Add și contul GATEKEEPER\fwadmin1 este afișat în câmpul Add Names (Adaugă nume).

4. Executăm click pe butonul OK pentru a reveni în caseta de dialog Directory Permisions. Contul de utilizator fwadmin1 este acum afișat prezentând permisiunea de acces Full Control.

5. Revenim din nou în caseta de dialog Directory Permissions, selectăm grupul Administrator executând click pe el și apoi executam click pe opțiunea Remove. Procedăm în mod similar pentru grupul Everyone.

Compromiterea unei gazde bastion

Deoarece o gazdă bastion este plasată mai aproape de Internet decât majoritatea sistemelor din rețea, este normal ca această gazdă are șanse mai mari de a fi infiltrată de intruși. Deși putem face sarcina unui hacker mai dificilă, nu există o metodă 100% garantată de prevenire a tuturor formelor de atac. Această afirmație este adevărată mai ales pentru că permanent sunt dezvoltate noi metode de atac. Prin folosirea unor măsuri bune de auditare ar trebui să detectați cu rapiditate momentul în care a avut loc o intruziune. Însă, indiferent cât de repede ne dăm seama că ceva nu este în regula, s-ar putea să nu fie suficient de repede pentru a evita pagube ulterioare. S-ar putea ca intrusul să fi modificat deja fișierele de sistem sau să fi plantat alte aplicații, cum ar fi cele de tip cal troian. Este posibil ca intrusul să modifice fișiere asociate cu un serviciu intermediar de aplicație. Din aceste motive, nu putem doar să schimbăm o parola și să reintroducem calculatorul gazdă în serviciu. Trebuie să începem din nou de la zero și să evaluăm gazda bastion. Cu toate că ar putea fi tentant să restaurăm foarte simplu gazda bastion folosind o bandă cu o copie de siguranța recentă, această metodă nu este la fel de sigură ca pornirea de la zero folosind programe cunoscute de configurare a aplicațiilor. Dacă gazda bastion a fost compromisă, nu putem fi siguri 100% de momentul în care a început atacul. De exemplu, dacă gazda s-a blocat, aceasta se datorează unui program descărcat recent pe calculatorul respectiv sau unui program de tip cal troian care așteaptă de câteva luni un semnal de declanșare.

Când gazda bastion este compromisă, toate celelalte gazde care se găsesc în zona DMZ trebuie analizate. Dacă un sistem a fost penetrat, este foarte probabil ca informațiile obținute din aceasta pătrundere să poată fi utilizate pentru o penetrare ulterioară a rețelei. Când o gazdă bastion este compromisă, ar trebui să examinăm toate celelalte gazde care interacționează cu gazda bastion, cum ar fi ruterele și celelalte porți, pentru a ne asigura că am determinat dimensiunea reală a pagubelor.

3.6. Porți de aplicații si servere intermediar

Utilizarea serverelor intermediare

Dacă filtrele de pachete operează la nivelul transport de rețea prin inspectarea informațiilor de antet corespunzătoare protocolului IP și altor protocoale, serverele intermediare lucrează la nivelul aplicație și pot fi utilizate pentru o varietate de servicii de rețea. Un server intermediar, prin care trebuie să circule toate pachetele de rețea pentru o anumită conexiune, oferă o poartă intre client si server. Un alt termen utilizat uzual este poarta de aplicație (application gateway). Un server intermediar nu transferă pachetele IP între rețele interne și externe, așa cum procedează filtrele de pachete, ci recepționează o cerere de la un client și face în continuare o cerere către server in interesul clientului. Între client și server nu sunt transferate pachete IP. Serverul intermediar este poziționat în mijlocul conexiunii și discută cu ambele părți pentru a media conexiunea.

În figura următoare (figura 10.3) putem vedea cum operează un server intermediar pentru a bloca traficul IP, împiedicându-l să circule intre rețea și Internet. Utilizatorul care navighează în Internet de la propria stație de lucru cere o pagina WEB din Internet. Deoarece browserul utilizatorului a fost configurat să trimită cereri HTTP unui server intermediar, solicitarea nu ajunge niciodată direct la serverul WEB.

Figura 10.3.

Serverul intermediar este cel care primește cererea prin adaptorul său de rețea conectat la rețeaua locala. Serverul intermediar nu rutează (sau retransmite) pachetul IP care conține cererea către serverul destinație din Internet. Aplicația intermediara care rulează pe serverul intermediar consultă un set de reguli, configurate de administrator , pentru a decide daca cererea este permisă. In caz afirmativ, serverul intermediar formulează o cerere pentru pagina respectivă, utilizând ca sursă a cererii adresa celuilalt adaptor de rețea propriu (care este conectat la Internet). Când serverul WEB din Internet primește cererea, poate doar să presupună că serverul intermediar este clientul care solicită pagina și ii trimite acestuia datele.

Când serverul intermediar recepționează pagina WEB solicitata, nu transferă pachetele IP înapoi către clientul inițiator al cererii, ci efectuează câteva verificări in datele returnate, după cum a fost configurat de administrator. Daca totul este in regulă, serverul intermediar creează noi pachete IP cu adresa adaptorului de rețea local și returnează clientului datele din pagina WEB.

Avantaje și dezavantaje ale serverelor intermediare

Avantaje:

Ascunderea informațiilor de rețea despre clienții sau serverele din rețeaua protejată.

Existenta unui singur punct critic in rețea de unde putem controla accesul la serviciile de rețea intre rețeaua protejată și Internet. Chiar dacă aplicația intermediara se blochează sau se defectează, pe o gazda bastion configurată corespunzător nu mai ramâne nici un mecanism care să permită trecerea traficului.

Serverele intermediare pot fi configurate pentru a înregistra in jurnale informații despre serviciile oferite și pentru a ne alerta in cazul activităților suspecte si încercărilor de acces neautorizat.

Unele servere intermediare pot ecrana conținutul datelor returnate și pot bloca accesul la anumite site-uri. De asemenea, ele pot bloca și datele care conțin viruși cunoscuți sau alte obiecte nesigure.

Dezavantaje:

Cu toate că un server intermediar asigură o singura locație de control al accesului, acesta devine și un punct critic de defectare.

Fiecare serviciu de rețea va necesita propria aplicație server intermediar. Exista și soluții generale, insă nu oferă același nivel de securitate.

Ar putea fi nevoie de modificarea sau reconfigurarea clienților pentru ca aceștia să folosească un server intermediar.

Intermediare clasice și transparente

Intermediare clasice

După cum sugerează și numele, un server intermediar clasic se referă la primul tip de server intermediar care a fost dezvoltat. Intr-un anumit sens, acest tip de intermediar nu este decât un program care este plasat intre client si server. Serverul intermediar obligă clientul de la capătul conexiunii să se autentifice intermediarului înainte ca acesta să înceapă transferul de date înainte si înapoi.

De exemplu, un utilizator care folosește un intermediar clasic pentru utilitarul FTP ar putea să îl utilizeze ca pe o țintă a comenzii FTP, să se autentifice la serverul intermediar și apoi sa informeze serverul care este ținta reală a conexiunii.

Problema acestui tip de server intermediar este că presupune operații suplimentare pentru client. De exemplu, atunci când se folosește FTP direct, fără intermediar, etapele sunt simple:

Utilizatorul execută comanda client FTP, de genul ftp www.twoinc.com

Serverul cere un nume de utilizator, utilizatorul răspunde.

Serverul cere o parolă, utilizatorul răspunde.

Utilizatorul execută comenzile pentru a trimite sau recepționa fișiere, s.a.

Serverul răspunde la comenzi recepționând fișierele de la aplicația client a utilizatorului sau trimițând fișiere către aplicația clientului.

Folosind un intermediar clasic, situația devine puțin mai complicată:

Utilizatorul execută comanda client FTP, de genul ftp proxyserver.twoinc.com.

Serverul cere un nume de utilizator, utilizatorul răspunde.

Serverul cere o parolă, utilizatorul răspunde.

Utilizatorul indică serverului intermediary destinația reală a conexiunii FTP, de obicei intr-un format similar cu [anonimizat]. În acest exemplu, username este un nume valid de utilizator de pe sistemul destinație, iar target.com este ținta finală a sesiunii FTP.

Serverul intermediar retransmite informațiile de conectare către destinație și, dacă autentificarea s-a încheiat cu succes, informează aplicația client că utilizatorul poate să execute comenzi FTP.

Serverul intermediar recepționează comenzile FTP de la software-ul client al utilizatorului și le retransmite către serverul destinație.

Serverul destinație răspunde la comenzile primite de la serverul intermediar ca și când ar fi clientul său și returnează datele către serverul intermediar, în funcție de comenzile lansate de client.

Serverul intermediar retransmite datele recepționate de la serverul destinație înapoi la aplicația client a utilizatorului.

Pentru majoritatea utilizatorilor, acest proces s-ar putea să nu pară foarte complex. Însa folosirea unui server intermediar de acest tip presupune ca utilizatorul să fie instruit pentru întrebuințarea sa. Nu toate aplicațiile server intermediar funcționează la fel, astfel că utilizarea intermediarului Telnet s-ar putea să nu fie exact la fel cu utilizarea unui intermediar FTP s.a. Etapele suplimentare și instruirea utilizatorilor fac din acest tip de server intermediar o soluție acceptabilă, dar nu perfectă.

Intermediare transparente

Pentru ca aplicațiile intermediare să fie mai ușor de gestionat și mai ușor de folosit de către utilizatorul final, avem nevoie de o aplicație intermediară care să fie transparentă pentru utilizator. Astfel nu mai sunt necesare comenzi suplimentare, iar utilizatorul nici nu ar trebui să știe că folosește un server intermediar. Din punct de vedere al utilizatorului, un intermediar transparent funcționează la fel ca o conexiune directă. Acest tip de intermediar ar trebui să fie mult mai ușor de implementat, deoarece utilizatorul nu mai trebuie să fie instruit asupra modului de folosire. Utilizatorul nici nu ar trebui să știe că există un server intermediar. În loc să folosească serverul intermediar ca destinație a comenzii FTP, utilizatorul execută comanda având serverul țintă real ca parametru in linia de comandă. Deoarece se găsește pe traseul dintre utilizator si serverul destinație și a fost programată să intercepteze anumite tipuri de trafic de rețea, serverul intermediar poate să evalueze o cerere și să decidă dacă este cazul să o permită sau să o interzică. Aceasta înseamnă că un client care trimite o cerere FTP crede că se afla în comunicație directă cu serverul destinație. Stiva TCP/IP a serverului intermediar a fost modificată pentru a prelua pachetele de rețea destinate propriei adrese IP, ca și pachetele IP care sunt trimise către serverele țintă protejate de acel server intermediar. Deoarece serverul intermediar transparent interceptează ceea ce altfel ar fi o conexiune directă, poate să determine adresa serverului țintă evaluând pachetul interceptat. Nu este nevoie ca utilizatorul să introducă numele serverului destinație, așa cum se procedează în cazul unui server intermediar clasic. Utilizatorul trebuie să se autentifice pe serverul țintă, la fel ca într-o conexiune directă. Însa serverul intermediar este poziționat la mijlocul acestei conexiuni și poate permite sau interzice anumite acțiuni. De exemplu, ar putea sa permită utilizatorului să obtină fișiere de pe serverul țintă (comanda GET), dar, în același timp, să interzică utilizatorului să trimită fișiere către serverul țintă (comanda PUT). Serverul intermediar poate asigura controlul accesului hotărând cine și ce acțiuni sunt permise și poate oferi funcțiile de înregistrare în jurnal și de alertare, la fel ca un server intermediar clasic. Însa pentru utilizator, acest proces este transparent, operând la fel ca o conexiune directă. Totuși, serverul intermediar transparent nu ascunde informațiile IP din cele două părți ale conexiunii intermediate. Clientul trebuie să cunoască adresa IP a serverului țintă. Dacă folosim un intermediar pentru a permite gazdelor din exterior sa realizeze o conexiune cu un server din interiorul rețelei dumneavoastră, serverul din interior crede în continuare că respectivul client este serverul intermediar. Însa clientul extern știe adresa IP a serverului.

O soluție la aceasta problema este plasarea serverelor într-o subrețea separată din rețeaua internă, de genul zonei DMZ. In acest mod, orice atacator care încearcă să hărțuiască aceste servere nu va primi nici o informație despre restul rețelei, care se găsește de cealaltă parte a zonei DMZ.

Translatoare de adrese de rețea (NAT)

Network Address Translator (NAT) este un serviciu intermediar foarte raspândit. Una dintre cele mai importante funcții de securitate executate de un firewall este de a ascunde persoanelor din exterior informațiile despre rețeaua internă. Aceste informații includ adresarea TCP /IP și datele de configurare pentru stațiile de lucru și serverele din rețea. Pentru a ascunde informațiile despre gazdele noastre, o aplicație NAT folosește propria adresa IP (sau un interval de adrese IP) atunci când face cereri în Internet în interesul clienților din rețeaua internă. În rețeaua noastră protejata clienții comunică utilizând adresele IP atribuite efectiv. Atunci când este trimisa o cerere prin firewall aplicația NAT înlocuiește cu propria sa adresa câmpul cu adresa sursă. Când sosește un răspuns la aplicația NAT, aceasta înlocuiește propria adresa din câmpul destinație cu adresa clientului care a făcut cererea. Un lucru important care trebuie remarcat aici este acela că sunt multe metode folosite pentru a implementa serviciul NAT. Unele translatoare NAT utilizează atribuiri statice de adrese, în care adresa unui client din rețeaua interna este legata la o adresa IP fixa folosita de NAT în lumea exterioara. Translatoarele NAT care folosesc atribuirea dinamica a adreselor pot atribui o adresa IP pentru a fi utilizata în rețeaua externă atunci când clientul formulează o solicitare care trece dincolo de serverul intermediar. După ce se termina sesiunea client, sau după trecerea unui anumit timp, adresa validă în lumea exterioară este returnată unui domeniu de adrese și așteaptă următoarea atribuire. NAT poate lucra într-un mod unidirecțional, în care clienților din rețeaua internă le este atribuită o adresa de către NA T atunci când sunt inițiate sesiuni către exterior, sau în mod bidirecțional, în care adresele IP destinație sosite din exterior pot fi modificate pentru a trimite un pachet unui server din rețeaua internă folosind o adresă diferită.

Ce este vectorizarea adreselor?

Funcția denumita vectorizarea adreselor este foarte asemănătoare cu NAT. Să presupunem ca avem un site Web popular care primește un număr mare de vizite în fiecare zi. Pentru a satisface aceste cereri, putem achiziționa un server puternic, cu mai multe unitați centrale de prelucrare și subsisteme de discuri RAID care suportă sarcina. Însa la un moment dat, se va ajunge într-un punct în care serverul, indiferent cât de mare este, începe sa lucreze mai lent, iar timpul de răspuns va creste. Pentru un site Internet mare, folosirea unui singur server este pur și simplu nefezabilă. O soluție ar putea fi utilizarea mai multor servere și atribuirea pentru fiecare server a unei adrese IP diferite si a unui nume DNS diferit. Însa aceasta soluție nu este foarte practică. Folosind aceasta metodă, clienții ar trebui să știe mai multe nume de gazde pentru a accesa situl și ar trebui să încerce numele rând pe rând pâna când primesc un răspuns satisfăcător. Vectorizarea adreselor va permite să distribuim încărcarea pe mai multe servere, toate acționând ca și cum ar fi același server care este adresat de un client. Nu este nevoie decât de un nume DNS și de o adresă IP. Tehnologia NAT permite translatarea mai multor adrese interne ale clienților într-o singură adresă IP externă validă. Vectorizarea adreselor funcționează similar, permițând unei singure adrese IP sosite să fie translatată în mai multe adrese IP în rețeaua LAN. Astfel, putem sa adăugăm mai multe servere pentru a echilibra încărcarea după cum dorim. Vom folosi o aplicație intermediara care suportă vectorizarea adreselor pentru a decide ce server (de obicei cel mai puțin ocupat) va satisface cererea.

Ecranarea și blocarea conținutului

Ecranarea accesului la Internet a devenit un subiect fierbinte în ultimii ani. Aceasta capabilitate permite administratorului sa desemneze câteva site-uri care vor fi blocate pentru utilizatorii din rețeaua locala. Unele produse ne permit sa specificam siturile care trebuie blocate, în timp ce altele ecranează continutul traficului de rețea și pot fi configurate pentru a bloca anumite cuvinte sau alte date. Dacș răspundem de o rețea comercialș, vom dori ca angajații noștii să își petreacă timpul producând ceva pentru companie, nu navigând în Web, în căutarea unor situri "interesante".

Motivele pentru care putem folosi tehnici de ecranare si blocare nu se limitează la obligarea angajator sa lucreze în interesul companiei. Putem întrebuința aceste tehnici și pentru a reduce răspunderile legale.

Deoarece un server intermediar este plasat între clientul si serverul unui serviciu de rețea, pot fi utilizate mai multe metode pentru ecranare a sau blocarea accesului la nivelul serverului intermediar:

• Blocarea adreselor URL – Putem să specificam adresele URI. care vor fi blocate (sau înregistrate în jurnale). Dezavantajul acestei metode este că adresele URL se schimbă frecvent în Internet. Mii de pagini sunt adăugate zilnic și este practic imposibil pentru un administrator ocupat sa evalueze fiecare site nou.

• Blocarea categoriilor – Această metodă ne permite sa specificăm o anumită categorie de informații care va fi blocată.

• Conținut înglobat – Unele aplicații software intermediare pot fi configurate să blocheze obiectele Java, controalele ActiveX și alte obiecte care ar putea fi înglobate într-un răspuns la o cerere Web. Aceste tipuri de obiecte pot fi folosite pentru a rula aplicații pe un calculator local și, din acest motiv, pot fi utilizate și de hackeri pentru a obține acces.

Facilități de înregistrare în jurnal și de avertizare

O funcție de securitate importantă pe care o oferă serverele intermediare și care nu trebuie trecută cu vederea sau tratată cu ușurință este capacitatea de înregistrare în jurnal a informațiilor despre activitățile pe care le desfasoară. Unele pot fi configurate pentru a declanșa o alarmă (de exemplu, un mesaj e-mail pentru administrator sau un mesaj pop-up la consola) pe baza unor condiții predeterminate. Serverele intermediare de nivel aplicație sunt capabile în mod obișnuit să ofere mai multe informații pentru înregistrarea în jurnal decât intermediarele generale sau de nivel circuit. Aceasta se datorează faptului că intermediarul de nivel circuit nu ia decizii decât pe baza informațiilor de adresare (adresa IP, numărul de port), la fel ca un filtru de pachete. Intermediarele de nivel aplicație sunt scrise pentru anumite servicii sau protocoale și, astfel, sunt capabile să extragă o cantitate mai mare de informații pentru înregistrarea în jurnal, deoarece "înțeleg" serviciul sau protocolul. Înregistrarea în jurnal este o componenta importanta a auditării oricărui sistem, server intermediar, server de fișiere sau chiar a unei stații de lucru obișnuite.

CAPITOLUL IV

4.1. Instalarea și configurarea firewall-urilor

4.1.1. Utilizarea produsului TCP Wrappers

TCP Wrappers a fost dezvoltat de Wietse Venema la Universitatea Tehnologică Eindhoven pentru a contribui la protejarea calculatoarelor din Universitate împotriva atacurilor. TCP Wrappers restricționează serviciile de rețea ce pot fi folosite, precum și gazdele cărora li se permite să le folosească. TCP Wrappers poate fi configurat pentru manipularea celor mai multe dintre serviciile de baza de pe un sistem Unix, cum ar fi:

Telnet

Finger

FTP

Exec

RSH

Rlogin

TFTP

Cum funcționează programul TCP Wrappers

Atunci când programul demon inetd primește o cerere de rețea, determină ce serviciu trebuie sa lanseze, în funcție de numărul portului. Fișierul /etc/services conține o mapare între numele serviciilor și numerele porturilor. După ce determină serviciul ce trebuie lansat, inetd citește fișierul de configurare (inetd.conf) pentru a descoperi ce program ar trebui sa ruleze pentru a rezolva cererea.

Pentru ca demonul TCP Wrappers (tcpd) să ia decizii de control al accesului și să își îndeplinească sarcinile de înregistrare in jurnale, trebuie sa edităm fișierul inetd.conf pentru a preciza că este rulat demonul tcpd in locul programului executabil care răspunde in mod normal cererii de serviciu. Demonul tcpd isi îndeplinește sarcinile și, daca gazda care a făcut cererea are dreptul sa folosească serviciul, lansează programul executabil pentru serviciul respectiv. Ca urmare, TCP Wrappers se inserează intre demonul inetd și serviciul de rețea.

Conectarea prin syslog

TCP Wrappers asigură nu doar controlul accesului pentru serviciile împreuna cu care este folosit, ci și înregistrarea in jurnale, astfel incât să putem determina cine folosește serviciile. Informațiile care trebuie înregistrate în jurnal sunt transmise către demonul syslogd, care asigură și posibilitatea de înregistrare centralizata pentru multe componente ale sistemului de operare Unix. În mod prestabilit, TCP Wrappers trimite informațiile de înregistrare în jurnal în același loc ca si jurnalele de tranzacții ale demonului send mail. În general, syslog poate transmite informațiile de jurnal către unul sau mai multe fișiere, către consola de system, către o consola de utilizator sau către un utilizator, printr-un mesaj e-mail. Modul in care syslogd stabilește ce sa facă cu informațiile in jurnal este controlat prin datele din fișierul de configurare, numit de obicei /etc/syslog. conf.

Obținerea produsului TCP Wrappers

Putem folosi următoarea adresa URL pentru a obține pachetul TCP Wrappers prin FTP, împreuna cu alte instrumente utile dezvoltate de Wietse Venema, cum ar fi SATAN:

ftp://ftp.porcupine.org/pub/security/

Utilitarele TCP Wrappers sunt disponibile sub forma de cod sursă.

Configurarea produsului TCP Wrappers

Pentru folosirea utilitarelor TCP Wrappers pe un sistem Unix mai intâi compilăm codul sursă. După ce obținem programul executabil tcpd, putem edita fișierele de configurare care controlează modul de folosire a acestuia:

inetd.conf – Trebuie sa edităm acest fișier pentru a insera referințe la demonul tcpd în înregistrările corespunzătoare serviciilor pe care le încapsulăm in utilitarele TCP Wrappers.

hosts.allow – Acest fișier conține regulile care definesc cui ii este permis să folosească fiecare serviciu lansat de tcpd.

hosts.deny – Acest fișier conține regulile care definesc cui ii este interzis explicit accesul la fiecare serviciu lansat de tcpd.

Configurarea fișierului inetd.conf

În tabelul 1.4. se descriu câmpurile care formează o înregistrare în acest fișier.

Tabel 1.4.

Configurarea sistemului inetd.conf

Nici unul din câmpuri nu arată cine are dreptul sa ruleze un anumit serviciu de rețea. Fișierul inetd.conf nu face decât sa stabilească o corespondentă intre numele unui serviciu și programul executabil care va deservi cererea, împreuna cu protocolul ce va fi folosit și identificatorul de utilizator sub care va rula programul.

Fișierele hosts.allow si hosts.deny

După ce am configurat demonul tcpd pentru gestionarea serviciilor de rețea, prin editarea fișierului inetd.conf, următorul lucru pe care trebuie să îl facem este să edităm celelalte doua fișiere folosite pentru stocarea informațiilor despre cei care au voie și cei care nu au voie să folosească fiecare serviciu. Aceste fișiere sunt hosts.allow și hosts.deny. Atunci când se foloseste, demonul tcpd citește mai intâi fișierul allow, apoi fișierul deny. Sintaxa de bază pentru ambele fișiere este următoarea:

lista_demoni : lista_clienți : [: comanda_de_nucleu]

lista_demoni – numele serviciului căruia i se aplică regula;

lista_clienți – nume de gazda, nume de domeniu sau adresa IP

tcpd folosește prima regula care i se potrivește și ignoră următoarele reguli. Mai important este că dacă nu găsește nici o regulă care să se potrivească în nici unul dintre cele două fișiere, accesul este permis in mod prestabilit. Din acest motiv ar trebui ca întotdeauna să interzicem tuturor explicit accesul, apoi să permitem accesul selective numai celor cărora le este necesar!

Există câteva cuvinte cheie care fac configurarea mai simplă:

ALL – Acest cuvânt cheie poate fi folosit pentru specificarea tuturor serviciilor sau a tuturor gazdelor.

LOCAL – Acest cuvânt cheie poate fi folosit pentru specificare oricărui nume care nu conține caracterul punct.

UNKNOWN – Acest cuvânt cheie poate fi folosit pentru specificarea oricărui utilizator al cărui nume nu este cunoscute sau a oricărei gazde cu nume sau adresa necunoscute.

KNOWN – Acest cuvânt cheie poate fi folosit pentru specificarea oricărui utilizator al cărui nume nu este cunoscut sau a oricărei gazde cu nume sau adresa necunoscute.

PARANOID – Acest cuvânt cheie poate fi folosit pentru specificarea oricărei gazde al cărei nume nu corespunde adresei.

Limitele produsului TCP Wrappers

TCP Wrappers nu ar trebui sa fie singura linie de apărare a sistemului. Adresele IP și numele de gazde pot fi falsificate. TCP Wrappers nu poate identifica întotdeauna aceste situații. Deoarece programul de încapsulare (wrapper) este folosit doar pentru lansarea inițială a demonului corespunzător care va deservi cererea, nu funcționează cu servicii precum NFS, care după lansare deservesc mai mulți clienți. Numai serviciile care sunt lansate pentru fiecare conexiune de către inetd pot folosi utilitarele TCP Wrappers. Procesele demon de fundal, lansate la încărcare prin intermediul fișierelor de pornire, nu funcționează în aceasta manieră.

4.1.2 Folosirea setului de instrumente FWTK (TIS Firewall Toolkit)

De ce setul de instrumente FWTK este gratuit?

TIS Internet Toolkit a fost dezvoltat în cadrul unui contract guvernamental care stipula ca întregul cod sursă rezultat să fie plasat în domeniul public. Codul este acum susținut de un număr mare de persoane și chiar îi este dedicat un site Web: www.fwtk.org. De pe acest site putem descărca setul de instrumente și documentația.

Construirea unui firewall folosind setul de instrumente FWTK

TIS Internet Firewall Toolkit (FWTK) nu este o soluție comercială pentru firewall-uri. Așa cum sugerează și numele, este un set compus din mai multe instrumente diferite care, împreuna cu o manieră corespunzătoare de administrare a sistemului, pot fi folosite pentru construirea unui firewall. FWTK este o soluție dedicată sistemelor UNIX și funcționează cu implementările TCP/IP care folosesc socluri de tip .

O scurtă istorie a setului de instrumente FWTK

FWTK are o istorie lungă. A fost dezvoltat inițial de o companie numită Trusted Information Systems, Inc., pentru agenția DARPA (Defense Advanced Research Projects Agency). Atunci când a fost creat FWTK, singura protecție de tip firewall disponibilă era filtrul elementar de pachete. Deși un filtru de pachete își are locul în strategia de implementare a unui firewall, era nevoie de ceva mai mult pentru impunerea politicii de securitate a firewall-ului, iar FWTK a fost dezvoltat tocmai în acest scop.

FWTK nu este un filtru de pachete, ci o colecție de diferite programe pe care le putem folosi pentru a crea servere intermediar pentru cele mai populare servicii TCP/IP. Deși FWTK nu asigură filtrarea pachetelor, poate funcționa destul de bine pe gazdele bastion protejate de un ruter cu filtrarea pachetelor.

Care sunt diferențele între firewall-ul Gauntlet și FWTK?

După ce TIS a dezvoltat setul de instrumente FWTK, compania a mers mai departe, creând firewall-ul Gauntlet. În 1998, TIS a fuzionat cu o altă companie, Network Associates, iar aceasta încă vinde firewall-ul Gauntlet. La prima vedere, există multe asemănări între cele două produse, și mulți cred că FWTK este doar o versiune redusă a firewall-ului Gauntlet. Totuși, începând cu versiunea 1.0, cele două produse nu mai folosesc același cod sursă. Sursele pentru Gauntlet sunt disponibile – contra cost – așa că putem să le comparăm dacă dorim.

FWTK nu asigură întregul set de servicii oferit de Gauntlet. Iată ce oferă setul de instrumente FWTK:

• Cod sursă

• Servere intermediar pentru FTP, TELNET, Rlogin, HTTP, Gopher, SMTP, NNTP

• Poarta X11 (X11 Gateway)

• Server de autentificare (Authentication Server)

• Diferite instrumente pentru testarea firewall-ului

La acestea, Gauntlet adaugă alte servere intermediar, compatibilitatea cu SSL, SHTTP și POP3, un server DNS și multe alte caracteristici. Desigur, deoarece Gauntlet este un produs comercial, TIS oferă și instruire și asistență tehnică. FWTK este un produs întreținut de utilizatorul final și nu putem obține alt ajutor în afara de ceea ce oferă situl Web dedicat și cei care participă la grupurile de discuții sau listele poștale. Totuși, dacă avem cunoștințele necesare despre administrarea unui sistem UNIX și despre TCP/IP, setul de instrumente ar putea fi tocmai ceea ce căutăm.

Componentele setului FWTK

Documentația furnizată de TIS precizează că setul de instrumente este format din trei componente:

• Filozofia de proiectare

• Practici de configurare și strategii de verificare

• Instrumente software

Ce este o "cutie de cristal"?

Termenul "cutie neagră" este folosit, de obicei, pentru a descrie un sistem în care sunt cunoscute intrările și ieșirile, dar nu și funcționarea internă. Nu aceasta este filozofia aplicată în cazul setului de instrumente. Acesta este dezvoltat ca o "cutie de cristal". Codul sursă nu este păstrat secret prin compilarea componentelor, ci este pus la dispoziția oricui vrea sa îl studieze.

Ideea aflată la baza acestei maniere de lucru este aceea că făcând cunoscut codul sursă al componentelor setului de instrumente – atât utilizatorilor, cât si hackerilor – corectarea erorilor și distribuirea corecturi lor prin Internet se simplifică. În loc să aștepte ca un furnizor să răspundă la o nouă amenințare de securitate, utilizatorii care asigură suportul pentru setul de instrumente prin Internet pot să elaboreze rapid un program de corectare sau o cale ocolitoare și să o pună la dispoziția tuturor.

Un exemplu din setul de instrumente pentru practicile de configurare este serviciul FTP. Pentru a îmbunătăți securitatea operațiilor FTP anonime, setul de instrumente descrie utilizarea unei alte componente, netacl, pentru a oferi o versiune mai sigură a acestui serviciu. Instrumentele software incluse în set sunt următoarele:

• netacl pentru asigurarea serviciilor Telnet, Finger și liste pentru controlul accesului

la rețea.

• smap și smapd pentru asigurarea unui serviciu SMTP sigur.

• ftp-gw pentru asigurarea unui server intermediar pentru FTP.

• tn-gw pentru asigurarea unui server intermediar pentru Telnet.

• rlogin-gw pentru asigurarea unui server intermediar pentru Rlogin.

• plug -gw pentru asigurarea unui server intermediar generic.

• authd pentru asigurarea unui serviciu de autentificare care să îmbunătățească practicile de "autentificare puternică".

• telnetd un server Telnet care poate fi folosit pentru gestionarea firewall-ului.

• login – sw un program de conectare îmbunătățit care asigură suportul pentru conectări sigure, folosind dispozitive de autentificare de tip token, cum ar fi cartelele inteligente.

• syslogd un înlocuitor pentru demonul de conectare UNIX tradițonal.

netacl

Programul netacl din setul de instrumente funcționează ca un program pentru controlul accesului. Acest program este furnizat în setul de instrumente astfel încât să putem permite utilizarea pe un firewall a unor servicii de rețea într-o manieră mai sigură. De exemplu, putem folosi programul netacl pentru a rula serverul Telnet pe un firewall, dar stabilind reguli care permit numai anumitor gazde – cum ar fi stația de lucru a administratorului – să utilizeze acest server. Datorită modului în care poate fi configurat programul netacl, putem chiar să specificam un demon Telnet diferit pentru fiecare utilizator. Deși am ales ca exemplu serviciul Telnet, putem folosi programul netacl pentru a rula diverse alte servicii de rețea pe gazda firewall.

Ca și alte servere intermediar din setul de instrumente, programul netacl folosește un fișier numit /usr/local/etc/netperm-table pentru a decide dacă un serviciu este permis sau nu, pe baza numelui de gazdă sau a adresei IP a calculatorului care a generat cererea.

În sistemele UNIX, responsabilitatea lansării serviciilor de rețea revine demonului inetd, iar serviciile sunt configurate în fișierul /etc/inetd.conf. Acest fișier conține o listă de servicii și de informații de care demonul inetd are nevoie pentru asigurarea serviciului.

În tabelul 2.4. sunt descrise câmpurile fiecărei linii din fișierul de configurare.

Tabel 2.4

Câmpurile fișierului de configurare /etc/inetd

Așa cum putem vedea în figura 1.4., demonul inetd rulează ca proces de fundal și ascultă cererile din rețea. Pentru generarea unei cereri, către server este trimis un pachet care conține atât adresa IP a expeditorului, cât și un număr de port. Numărul portului este folosit de demon pentru a determina ce serviciu este solicitat. Fișierul /etc/services este folosit pentru căutarea numărului de port și, după ce numele serviciului este cunoscut, programul demon poate folosi informațiile din fișierul /etc/inetd.conf pentru a determina daca serviciul este permis pentru serverul respectiv și, în caz afirmativ, ce program să ruleze pentru deservirea cererii.

Figura 1.4. Rularea demonului inetd

Serviciile obișnuite de rețea, cum ar fi FTP si telnet, sunt asigurate de firewall prin lansarea programelor asociate. Totuși, din acest fișierul /etc/inetd.conf lipsește o functionalitate importanta. Nu exista nici o metoda de control al accesului. Demonul inetd nu face decât ce îi cere o înregistrare din acest fișier. Nu are nici un mecanism prin care sa decidă daca o anumita gazda care a lansat cererea are dreptul să folosească serviciul. Această parte este lăsata în seama procedurilor obișnuite de autentificare ale sistemului, care implica un nume de utilizator si o parola, stocate în fișierul /etc/passwd. Deoarece această metoda de autentificare nu este foarte puternica – de exemplu, serviciul telnet transmite numele de utilizator si parolele sub forma de text clar, care poate fi interceptat de fapt nu este o metoda sigura pentru oferirea serviciilor pe o gazda firewall.

Pentru a compensa această lipsă de control al accesului, este folosit programul netacl. Pentru a utiliza programul netacl cu un serviciu de rețea, trebuie sa edităm acest fișier. În loc sa apelăm programul in. ftpd pentru deservirea unei cereri FTP, apelăm programul netacl și îl lăsăm apoi sa se ocupe de lansarea demonului server pentru gazda care a făcut cererea. Un exemplu de înregistrare din fișierul / etc / inetd. cond pentru serviciul FTP ar arata astfel:

ftp stream tcp nowait root /usr/local/etc/netacl

-in.ftpd

Câmpul Server din fișierul /etc/inetd. conf. apelează acum programul netacl în locul programului server FTP. Argumentul transmis programului netacl este numele serviciului. Totuși, înainte de a putea sa lanseze programul server, netacl trebuie să mai parcurgă o etapă. Trebuie să caute în fișierul /usr/local/etc/netperm-table o înregistrare corespunzătoare serviciului FTP, pentru a decide dacă rularea acestuia este permisă pentru gazda care a făcut cererea si, în caz afirmativ, sa stabilească programul ce trebuie rulat pentru asigurarea serviciului si identificatorul de utilizator (UID sau userID) sub care va rula acesta. În figura 2.4. putem vedea că acest proces nu face decât sa adauge câteva etape la procesul normal de lansare a unui serviciu de rețea.

Figura 2.4.

Fișierul de configurare: /usr/local/efc/nefperm-fable ,

Când este lansat de inetd, netacl nu începe imediat rularea serviciului solicitat, care este transmis ca argument în linia de comanda. Mai întâi preia acest unic argument și îl folosește pentru a căuta informații despre serviciu într-o baza de date cu reguli, definită în fișierul /usr/ local/etc/netperm-table. Imediat ce programul netacl (sau o alta aplicație intermediar din set) este executat, citește informațiile de configurare din acest fișier și le stochează în memorie.

Ca urmare, după ce aplicația folosește comanda chroot pentru a trece într-un alt director, informațiile rămân disponibile și nu este nevoie ca fișierul să rămână accesibil în timpul rulării serviciului. Prin folosirea acestei metode, avem siguranța că o hibă din programul serviciu nu poate fi folosită pentru accesul neautorizat la fișierul netperm-table. Fiecare linie din fișierul netperm-table este numită regulă. Fiecare regulă poate fi aplicată uneia sau mai multor aplicații din setul de instrumente și este formată din doua componente importante:

• Cuvânt cheie – Acesta este numele aplicației (aplicațiilor) asupra căreia (cărora) se aplică regula. Acest nume este textul care denumește serviciul și îl putem obține din fișierul / etc / services. Atunci când serviciul este folosit împreuna cu aplicația netacl, numele este compus din textul "netacl-", plus numele serviciului. Numele este separate de restul regulii printr-un caracter doua puncte (:).

• Lista de valori pentru atribut Acesta este de fapt textul care definește regula pentru aplicația asociata. Partea de atribut este un parametru de configurare pentru aplicație și este urmată de una sau mai multe valori pentru parametrul respectiv.

Putem insera în fișier comentarii, pentru a face mai ușor de înțeles aceste înregistrări pe o singură linie. Pentru a indica un comentariu, plasăm un caracter ,,#" la începutul liniei. De asemenea, atunci când o aplicație citește acest fișier pentru a găsi o regula care i se aplică, o face de sus în jos și ține seama de ordinea în care apar regulile. Ca urmare, dacă creăm doua reguli pentru aceeași aplicație, numai prima va fi folositaă.

Atunci când modificam acest fișier, trebuie să verificăm toate înregistrările, astfel încât să nu creăm din greșeală reguli duplicate. O regulă duplicată nu înseamnă doua reguli aplicate aceleiași aplicații intermediar. De fapt, deseori este necesar să cream mai multe reguli folosite de aceeași aplicație intermediar. O regulă ar putea fi folosită pentru definirea gazdelor care folosesc aplicația intermediar, în timp ce o altă regulă ar putea fi folosită pentru definirea directorului în care trece aplicația intermediar după ce este apelată. Un exemplu de regula duplicată ar fi crearea a doua reguli care specifică directorul. În acest caz, numai prima definire a directorului va fi folosită.

La verificarea valorii atributului pentru un nume de gazdă sau o adresă IP, comparația se face ținându-se seama daca regula conține numai caractere numerice (si caracterul punct) sau conține caractere alfanumerice, indicând un nume de gazda. Iată două exemple de reguli:

netacl -in.ftpd: permit-hosts yoko.twoinc.com -exec /usr/etc/in.ftpd

netacl -in.ftpd: permit-hosts 140.176.177.69 -exec /usr/etc/in.ftpd

În primul caz, regula conține un nume de gazda, așa ca aplicația va obține numele gazdei care a făcut cererea și îl va compara cu numele specificat în regulă. În al doilea caz, regula conține numai caractere numerice și puncte, așa că pentru comparație este folosită adresa IP a gazdei. În general, ar trebui sa folosim cea de-a doua formă deoarece este foarte ușor sa folosim înșelarea DNS pentru ca numele de gazdă să pară a fi altul decât cel real.

Tabelul 3.4. prezintă cuvintele cheie ce pot fi folosite in fișierul netperm – table pentru configurarea programului netacl.

Tabelul 3.4.

Cuvinte cheie pentru atributele de configurare folosite împreună cu programul netacl

Configurarea serviciilor intermediar

Setul de instrumente oferă aplicații intermediar "de trecere" pentru serviciile de rețea TCP/IP folosite în mod obișnuit. Fiecare dintre aceste aplicații ar trebui să fie configurată prin plasarea regulilor în fișierul netperm-table, la fel ca pentru programul netacl.

FTP: ftp-gw

Aplicația ftp-gw permite asigurarea unei aplicații intermediar pentru serviciul de rețea FTP. Prin configurarea aplicației intermediar (cu ajutorul regulilor din fișierul netperm – table), se asigură controlul accesului (ce gazde pot folosi serviciul), opțiuni de înregistrare în jurnal și destinații selectate pe blocuri. Aplicația intermediar ftp-gw trece mai întâi într-un director izolat și gol, astfel încât să nu creeze un risc de securitate pentru firewall. De asemenea, aplicația intermediar nu execută operații de intrare/ieșire locale (exceptând citirea informațiilor din fișierul de configurare netperm-table). Tabelul 4.4. prezintă cuvintele cheie ce pot fi folosite în fișierul netperm-table pentru configurarea programului intermediar ftp-gw.

Tabel 4.4.

Cuvinte cheie pentru atributele de configurare folosite împreună

cu programul intermediary ftp-gw

Aplicația intermediar ftp-gw are mai multe atribute decât programul netacl. Procesul de configurare se complică și mai mult deoarece atributul hosts permite folosirea mai multor opțiuni:

– noinput – folosită pentru a specifica faptul că aplicația intermediary nu accepta intrări printr-un port.

– nooutput – folosită pentru a specifica faptul că aplicația intermediar nu transmite rezultate (ieșiri) printr-un port.

– log operație – acesta opțiune controlează înregistrările în jurnal pentru gazdele asociate.

– authall – aplicația intermediar nu permite executarea nici unei operații FTP (exceptând quit) până la autentificarea utilizatorului pe server.

– auth operație – operațiile FTP nu vor fi premise pănă la autentificarea utilizatorului pe server.

– dest destinație – specifică destinațiile valide către care utilizatorul poate executa o operație FTP.

– deny operație – specifică una sau mai multe operații FTP care nu sunt premise.

Instalarea setului de instrumente pe o gazdă bastion

Setul de instrumente este distribuit sub formă de cod sursă și este scris în limbajul de programare C. Ca urmare, după ce descărcăm setul de instrumente, trebuie sa îl compilăm pe sistemul local pentru a putea sa îl folosim. Firewall-ul pe care îl construim nu poate fi mai sigur decât gazda pe care rulează. De obicei, acest calculator este numit gazdă bastion.

4.1.3. Socks

Socks V4 si Socks V5

SOCKS este un protocol ce poate fi folosit pentru crearea conexiunilor de intermediere printr-un firewall. Dezvoltat inițial de David Koblas si Ying-Da Lee la NEC Systems Laboratory, SOCKS a fost standardizat printr-un număr mare de documente RFC (Request For Comments) și este folosit pe scară largă în Internet. Protocolul SOCKS poate fi folosit pentru a permite unei gazde aflate de o parte a serverului SOCKS sa interacționeze cu o gazdă aflată de cealaltă parte, în urma autentificării, fără să aibă loc un transfer direct de pachete IP între cele două gazde.

SOCKS este un protocol. Depinde de furnizor dacă un anumit firewall acceptă serverul SOCKS. Produsele software client care accepta conexiuni SOCKS sunt disponibile pe scară largă. Pentru aplicațiile mai vechi, NEC oferă mai multe soluții, inclusiv o bibliotecă de funcții ce pot fi folosite pentru "SOCKSificarea" aplicației prin recompilare și o biblioteca DLL pentru sistemele Windows, numita SocksCap, care poate intercepta apelurile către funcțiile de rețea WinSock.

Versiunea 4

SOCKS este un protocol simplu. În V4, protocolul are trei funcții principale:

• Schimbul de cereri de conexiuni

• Configurarea circuitului intermediar

• Retransmiterea datelor aplicației

Aceste etape simple permit clientului să configureze prin serverul SOCKS un circuit care poate fi folosit pentru transmiterea traficului TCP de rețea al aplicației.

Cererea CONNECT

Pentru crearea unei conexiuni, aplicația client transmite o cerere CONNECT către serverul SOCKS. Aceasta cerere conține mai multe câmpuri:

• Numărul versiunii – Acest câmp de 8 biți conține numărul de versiune, care pentru această versiune este 4.

• Codul de comanda SOCKS -Acest câmp de 8 biți este folosit pentru un cod care indică funcția pachetului. Valoarea 1 indica o cerere de conectare.

• Portul destinație – Acest câmp de 16 biți este numărul portului de pe serverul țintă la care vrea sa se conecteze clientul.

• Adresa IP a destinației – Acest câmp de 32 de biți este adresa IP a serverului țintă la care vrea sa se conecteze clientul.

• Identificatorul utilizatorului (userID) – Acesta este un câmp de lungime variabilă care conține un identificator de utilizator valabil pentru serverul țintă.

După ce consultă fișierul de reguli și determină dacă este permisă conexiunea, serverul SOCKS încearcă sa se conecteze la serverul țintă, folosind adresa IP si numărul de port furnizate de client. După ce această operație reușește (sau eșuează), serverul SOCKS returnează clientului un pachet care conține următoarele câmpuri:

• Numărul versiunii – Acest câmp de 8 biți conține numărul de versiune al codului de răspuns și ar trebui să fie O. "

• Codul rezultat SOCKS – Valoarea din acest câmp de 8 biți indică succesul sau eșecul operației de conectare.

Dacă mesajul conține un cod de eroare, serverul SOCKS termină conexiunea cu clientul după ce trimite acest răspuns. În caz contrar, serverul este gata sa transmită date între aplicațiile client si server.

Figura 3.4.

Cererea BIND

După ce o aplicație client a folosit cu succes cererea CONNECT pentru a stabili o conexiune intermediată cu o aplicație server țintă, cererea BIND poate fi folosită pentru a informa serverul SOCKS ca clientul vrea sa stabilească o conexiune de recepție cu serverul de aplicații. Conținutul cererii BIND este asemănător cu cel al cererii CONNECT, exceptând faptul ca valoarea câmpului pentru codul de comandă SOCKS trebuie sa fie 2. Daca serverul SOCKS, după consultarea regulilor, decide ca o asemenea conexiune este permisă, returnează clientului un pachet de răspuns asemănător cu cel trimis în cazul cererii CONNECT. Serverul SOCKS alocă un soclu la care vor fi primite pachetele de la serverul de aplicații si returnează aplicației client un răspuns care conține două câmpuri suplimentare:

• Portul destinație Acesta este portul alocat pe serverul SOCKS pentru primirea datelor de la serverul de aplicații .

• Adresa IP a destinației Aceasta este adresa IP a adaptorului de rețea de pe serverul SOCKS prin care sunt recepționate datele de la serverul de aplicații. Acest câmp este necesar dacă serverul SOCKS are mai multe adaptoare de rețea. Dacă valoarea acestui câmp este O, clientul folosește aceeași adresă ca și conexiunea CONNECT originală cu serverul SOCKS.

Aplicația client folosește aceste informații despre soclu pentru a formată o cerere către serverul de aplicații țintă. Serverul de aplicații deschide apoi o conexiune cu serverul SOCKS, folosind acest soclu. Serverul SOCKS verifică dacă cea de-a doua conexiune provine de la aceeași gazdă cu cea identificată în cererea BIND originală și, în caz afirmativ, trimite aplicației client un alt pachet de răspuns, prin care o informează că a fost stabilită conexiunea. Deși protocolul SOCKS poate fi folosit pentru crearea unei conexiuni clienți server prin firewall, protocolul în sine nu execută nici o verificare specifică aplicației. În acest mod, protocolul funcționează asemănător cu un f1ltru de pachete. Serverul SOCKS poate fi configurat astfel încât să permită sau sa interzică accesul unor gazde sau rețele, dar nu intră în detalii privind permiterea anumitor funcții ale unei aplicații. Această funcționalitate intră în responsabilitatea aplicației codate în vederea utilizării protocolului SOCKS. Totuși, spre deosebire de un f1ltru de pachete, SOCKS nu transmite direct pachete între aplicațiile client și server. Între cele două nu există nici o conexiune directă.

Versiunea 5

Cea mai noua versiune a protocolului SOCKS adăuga la TCP suportul pentru autentificare și pentru crearea serverelor intermediar UDP. De asemenea, noile specificații prevăd acceptarea numelor de domenii și adresarea IPv6.

Porți la nivel de circuit

În SOCKS V4, atunci când aplicația client trimitea o cerere CONNECT, în cerere era inclus si un identificator de utilizator. Aceasta informație este folosită de serverul SOCKS atunci , când consulta regulile pentru a decide dacă o conexiune poate fi permisă. SOCKS poate folosi și funcționalitatea protocolului IDENT pentru a verifica numele de utilizator al clientului care face cererea. Totuși, autentificarea propriu-zisă prin conexiunea intermediată nu este afectată de SOCKS V4. Ca urmare, dacă se folosește protocolul FTP printr-o conexiune SOCKS și clientul trimite numele de utilizator și parola sub formă de text clar, securitatea este compromisă daca textul este interceptat.

SOCKS V5 adăugă acceptarea metodelor de autentificare într-o manieră generalizată, folosind un cadru de lucru de specificații, prin care asigură folosirea unor protocoale arbitrare de autentificare la configurarea inițiala a conexiunii SOCKS. După ce se conectează la serverul SOCKS, clientul trimite un mesaj care identifică versiunea protocolului SOCKS și una sau mai multe "metode" ce pot fi folosite pentru autentificare. Deși formatul pachetului permite până la 255 de metode diferite, în acest moment sunt definite doar câteva. Serverul SOCKS selectează una dintre metodele furnizate de client și returnează un mesaj prin care comunica clientului metoda aleasa. Valorile pentru metode sunt controlate de organizația IANA (Internet Assigned Numbers Authority) și în prezent sunt următoarele:

• Nu este necesară autentificarea (O)

• GSS-API (1)

• USERNAME/PASSWORD (2)

• IANA (3-127)

• Rezervate pentru metode private (128-254)

• Fără metode acceptabile (255)

După ce clientul a recepționat acest mesaj, clientul și serverul SOCKS intră într-o fază de negociere specifică metodei de autentificare aleasă.

Formatul de cerere al protocolului SOCKSV5

Deși este asemănător cu formatul V4, formatul SOCKS V5 prevede includerea mai multor informații. Câmpul pentru numărul versiunii trebuie sa contină valoarea 5. Câmpul pentru comanda SOCKS poate avea trei valori:

• 1 CONNECT

• 2 BIND

• 3 UDP ASSOCIATE

Un nou câmp este folosit pentru a indica tipul adresei IP. Această valoare pe 8 biți ar trebui să fie 1 daca adresa este de tip IPv4, 3 dacă adresa conține un nume de domeniu și 4 dacă adresa este de tip IPv6. Câmpul pentru portul destinație este același ca în versiunea 4, indicând portul țintă pentru serviciul la care vrea să se conecteze clientul. Dimensiunea câmpului pentru adresa destinației depinde de tipul adresei. Dacă este folosit un nume complet de domeniu, primul octet al câmp ului de adresa (8 biți) conține o valoare ce indică lungimea (în octeți) a numelui de domeniu care urmează în câmpul de adresa.

Funcția UDP ASSOCIATE

Și în acest caz, câmpul pentru versiune al mesajului de răspuns are valoarea 5 în loc de 4. Câmpul pentru codul rezultat SOCKS poate conține aceleași valori ca în versiunea 4, plus alte câteva. De asemenea, mesajul de răspuns conține câmpuri pentru adresa și tipul adresei, ca și în formatul de cerere. Pe lângă cererile CONNECT si BIND, SOCKS V5 oferă un nou serviciu, care permite crearea serverelor intermediar UDP. În pachetul de cerere UDP ASSOCIATE, clientul comunică serverului portul și adresa IP pe care vrea să le folosească pentru asociere. Pachetul de răspuns returnat de server comunică clientului numărul portului și adresa IP la care acesta trebuie sa trimită pachetele pentru conexiune. Retransmiterea traficului UDP se face altfel decât în cazul traficului TCP. În loc să recepționeze pur si simplu pachete dintr-o parte a conexiunii și să le retransmită către cealaltă parte, fiecare pachet pe care serverul SOCKS îl primește de la client are atașat un antet de cerere UDP. Acest antet de cerere include câmpurile standard folosite pentru cererile/răspunsurile SOCKS, precum și portul și adresa IP ale destinației. Deoarece UDP este un protocol fără conexiune, nefiabil, și nu asigură confirmarea primirii pachetelor, serverul SOCKS nu informează clientul dacă pachetul a fost retransmis sau abandonat.

Aplicații SOCKSificate

Dacă avem codul sursă pentru o aplicație care nu acceptă încă protocolul SOCKS, uneori este posibil sa o "SOCKSificăm", recompilând-o cu o biblioteca de funcții furnizate de NEC împreuna cu versiunea SOCKS V5 Reference Implementation. Biblioteca include rutine care, funcțional, sunt echivalente cu funcțiile de soclu BSD standard, dar implementează protocolul SOCKS.

În site-ul Web NEC SOCKS putem găsi informații detaliate privind modificările minore pe care trebuie să le facem în codul existent și modul de legare a codului cu funcțiile de biblioteca SOCKS. Adresa URL pentru aceasta legătura este: www.socks.nec.com/ how2socksify.html

SocksCap

Interfața SocksCap poate fi folosita în sistemele Windows pentru a permite aplicațiilor să lucreze prin firewall-ul SOCKS fără modificări în aplicația originală. SocksCap interceptează apelurile făcute către serviciile de rețea de clienții WinSock și le trimite către serverul SOCKS. Există mai multe versiuni ale interfeței SocksCap, atât pe 16, cât și pe 32 de biți. Pentru Windows 95 si Windows 98 putem folosi oricare dintre cele două versiuni, în funcție de aplicațiile client folosite cu serverul SOCKS. Sub Windows NT pot fi folosite numai versiunile pe 32 de biți.

4.1.4. SQUID

Ce este SQUID?

SQUID este un server intermediar cu cache.Una dintre primele utilizări ale unui server intermediar era păstrarea în cache a paginilor Web vizitate frecvent, ceea ce permitea economisirea capacitații de transfer. Aceasta se întâmpla mai ales la începutul Internetului, atunci când nu existau prea multe site-uri comerciale. Deoarece Internetul era folosit în mare parte în scopuri științifice si educaționale, mulți utilizatori foloseau aceeași sursă de informații, descărcând aceleași informații la fiecare acces. Prin păstrarea pe un server local a datelor solicitate frecvent, în mare parte statice, un răspuns primit de la un site Web putea fi folosit pentru a satisface mai mulți utilizatori locali.

Serverele intermediare cu cache funcționează prin păstrarea unor copii ale obiectelor obținute recent din Internet într-un cache de pe discul local sau din memorie. Daca după puțin timp este primită o altă cerere pentru același obiect, serverul intermediar poate folosi copia locală a datelor, în loc să trimită o altă cerere către adresa URL originală a obiectului. Serverul intermediar SQUID este disponibil gratuit în Internet, sub licența GNU. Deși SQUID poate fi descărcat gratuit din Internet, nu trebuie considerat un produs simplu, cu un set redus de funcții. SQUID are un set bogat de caracteristici si poate fi folosit în rețele de diferite mărimi pentru asigurarea serviciilor de cache. Printre caracteristicile importante ale serverului SQUID se număra:

• Servicii de intermediere și de păstrare în cache pentru protocoalele HTTP, FTP si SSL.

• Organizare ierarhica, ceea ce permite mai multor servere de cache să fie configurate

pentru a lucra împreună, folosind protocolul standard ICP (Internet Caching Protocol).

• Operare transparentă pentru utilizatori.

• Controlul accesului.

• Păstrarea în cache a cautarilor DNS.

• Accelerarea serverului HTTP.

Cum putem obține serverul SQUID

Dacă vrem sa descărcăm serverul SQUID, putem vizita situl Web SQUID. Dacă avem sistemul de operare Linux, este bine să verificăm mai întâi documentația sistemului. Multe variante de Linux conțin codul sursa SQUID, iar unele includ chiar si codul binar compilat. Totuși, în site-ul Web găsim lista SQUID FAQ oficială, un ghid de utilizare și documentație ce poate fi de folos oricui vrea sa folosească serverul SQUID într-un sistem productiv. Adresa URL a sitului SQUID este:

www. squid -cache. org.

Instalarea si configurarea serverului SQUID

Pentru instalarea serverului SQUID, este bine ca mai întâi să cream un cont de utilizator sub care va rula serverul intermediar. Nu se instalează si nu se rulează serverul SQUID sub root. Singurele fișiere la care trebuie sa aibă acces SQUID sunt fișierele proprii de configurare și fișierele și directoarele folosite pentru stocarea obiectelor de cache. Practica recomandata este să cream un cont de utilizator squid și un director (urs/local/squid) pentru cont, apoi să folosim acest cont pentru rularea serverului SQUID. Atunci când despachetam fișierul tar2 și compilam codul sursa al serverului SQUID, folosim contul squid, pentru ca acesta să devina proprietarul fișierelor create.

Alegerea unui server SQUID

Atunci când se stabilește serverul care va fi folosit pentru instalarea programelor SQUID, se alege un sistem care are destulă memorie și un sistem de discuri eficient. Deoarece păstrarea în cache implică stocarea pe termen scurt a obiectelor descărcate din Internet, folosirea mai multor discuri pentru directoarele de cache SQUID îmbunătățește performanțele. Viteza UCP nu influențează performantele la fel de mult ca și cantitatea de memorie. Se recomandă ca serverul SQUID să aibă cel puțin 128 MB de memorie, dar este mai bine să aibă 256 MB sau mai mult.

Instalarea componentelor software

Instalarea serverului SQUID este o problema simplă. După ce se creează contul de utilizator sub care va rula SQUID, ne conectăm la contul respectiv, executăm câteva comenzi pentru a compila codului si creăm directoarele și indecșii pe care îi va folosi SQUID.

Instalarea serverului SQUID

1. Creăm un director pentru stocarea fișierelor sursa SQUID:

# mkdir -p /usr/local/squid/src

2. Alegem ca director prestabilit directorul pe care tocmai l-am creat și despachetăm fișierele comprimate care conțin sursa SQUID:

# gzip -cd squid-s.3.STABLE2-src.tar.gz I tar xv

3. Folosim comanda configure pentru a lansa un proces automatizat de verificare a serverului:

# ./configure

4. Folosim fișierul make SQUID pentru compilarea codului sursă și, după terminarea cu succes a compilării, folosim parametrul install pentru a instala serverul SQUID:

# make

# make install

Aceste comenzi vor instala serverul SQUID în mai multe directoare ce vor fi create sub

directorul / usr / local/ squid, inclusiv subdirectoarele bin, etc, cache si logs.

5. Este creată o copie prestabilita a fișierului de configurare / usr /local/ squid / etc/squid. conf. Putem să folosiți aceasta copie a fișierului sau să folosim un editor de texte pentru a modifica înregistrările din fișier.

6. Folosim comanda squid pentru crearea directoarelor folosite pentru indexarea datelor stocate:

# /usr/local/bin/squid -2

7. În sfârșit, folosim comanda squid pentru a lansa un proces de fundal care receptionează cereri prin portul prestabilit al serverului SQUID, respectiv 3128. Verificam fișierul jurnal /usr/local/bin/logs/cache. log pentru a vedea daca au apărut erori.

Gestionarea serverului SQUID

Pentru a face modificări în configurația curentă a serverului SQUID, trebuie editat fișierul de configurare, apoi apelată comanda squid pentru a aplica modificările. După ce e editat fișierul squid. conf, folosim următoarea comanda pentru a aplica modificările efectuate:

/usr/local/bin/squid -k reconfigure

Fișierul squid. conf

Acesta este principalul fișier de configurare pentru SQUID și, de obicei, se află în directorul /usr/local/squid/etc/. Acest fișier conține diferite informații, cum ar fi portul HTTP folosit de SQUID. Atunci când executăm scriptul configure, comanda make install creează automat o copie prestabilită a acestui fișier. Parametrii pe care îi putem modifica în fișier sunt numeroși și cel mai bun mod de a începe este sa citim fișierul de la un capăt la altul. Fișierul prestabilit creat la instalare conține multe comentarii și, ca urmare, cea mai mare parte a comenzilor din fișier sunt ușor de urmărit. Fișierul prestabilit squid. conf poate fi păstrat ca atare dacă vrem sa folosim serverul SQUID numai pentru cache și nu vrem sa controlăm accesul utilizatorilor sau accesul la adresele URL. Documentele SQUID FAQ pot fi descărcate din situl Web SQUID, de la adresa www.squid-cache.org.

Comanda squid

Pentru pornirea serverului de cache SQUID, nu trebuie decât sa lansăm comanda squid. Câțiva dintre cei mai importanți parametri în linie de comandă pentru comanda squid sunt:

• -a port – Cere serverului SQUID să folosească un alt port pentru recepționarea cererilor HTTP. Valoarea prestabilită este 3128.

• – d nivel de eroare – Stabilește nivelul la care sunt trimise mesaje de depanare către stderr.

• -f – Stabilește un alt fișier de configurare în locul fișierului squid. conf.

• – h – Afișează informații de ajutor.

• – k reconfigure – Trimite serverului SQUID semnalul HUP, cerându-i sa citească din nou fișierul de configurare.

• – k rotate – Trimite serverului SQUID semnalul USR1. În urma acestui semnal, serverul SQUID rotește fișierele de jurnal (închide fișierul curent, îl redenumește si deschide un nou fișier).

• – k shutdown Trimite serverului SQUID un semnal TERM, cerându-i sa se oprească. Înainte de a se opri, serverul SQUID așteaptă o scurta perioadă de timp, pentru a permite închiderea conexiunilor curente.

• – k interrupt – Trimite serverului SQUID un semnal INT, cerându-i sa se oprească imediat.

• – k kill Trimite serverului SQUID un semnal KILL. În urma acestui semnal, serverul SQUID se oprește fară să execute nici o operație de "curatare" a fișierelor. Această comandă ar trebui folosită numai daca nu merge nimic altceva.

• – k debug – Trimite serverului SQUID semnalul USR2. Până la primirea următorului semnal USR2, SQUID generează mesaje de depanare completă.

• -k check Trimite serverului SQUID un semnal ZERO pentru a verifica daca procesul rulează.

• – s – Cere serverului SQUrD sa transmită către syslog numai mesaje de depanare de nivel O.

• – u – Folosit pentru a specifica un alt număr de port pentru recepționarea mesajelor rcp. Valoarea prestabilita este 3130.

• -v – Cere serverului SQUrD sa afișeze numărul versiunii.

• -z – Folosit pentru crearea directoarelor de schimb.

• -D – Suprimă testarea DNS. Daca nu este folosit acest parametru, SQUrD încearcă să verifice la pornire câteva nume de gazde recunoscute, pentru a vedea daca serverul DNS funcționează corespunzător.

• -F Folosit pentru reconstruirea cache-ului în "prim-plan". În acest mod, cache-ul este reconstruit mai rapid, dar cererile HTIP nu sunt deservite în aceasta perioadă.

• – N Cere serverului SQurD sa nu ruleze ca proces de fundal. Acest parametru este util pentru testare, daca vrem ca procesul să ruleze pe terminal.

• – R Cere serverului SQurD să nu activeze opțiunea SO_REUSEADDR pentru socluri.

• -V Acest parametru activează acceptarea gazdelor virtuale pentru modul httpd-accelerator.

• -x Cere serverului SQurD să folosească modul de depanare completă atunci când citește fișierul de configurare.

• -y Folosit pentru a permite reconstruirea mai rapida a cache-ului, atunci când sunt folosite în principal cache-uri copil.

Jurnalele SQUID

SQUID folosește mai multe fișiere jurnal. Acestea sunt:

• cache .log – Acest fișier conține informații legate chiar de serverul SQUID, incluziv mesaje de eroare generale si informații despre pornirea si oprirea serverului.

• access .log – Acest fișier înregistrează cererile făcute de clienți către serverul SQUID

• store .log – Acest fișier urmărește datele adăugate sau scoase din cache. Deoarece acest fișier poate deveni destul de mare, putem să îl dezactivam. Pentru a face acest lucru, se adăugă în fișierul squid. conf comanda cache_store_log none.

• swap .log – Acest fișier înregistrează informații despre fiecare obiect de cache scris pe disc, cum ar fi fișierul în care este păstrat obiectul și o marca de timp ce indică momentul în care obiectul a fost verificat ultima dată ca actual. SQUID citește din nou acest fișier jurnal la pornire.

4.2. Sistemul de criptare AES

Istoric

La sfârșitul anilor ’90 se decide înlocuirea sistemului de criptare DES, cele mai importante motive fiind:

În Iulie 1998 sistemul DES pe 56 biți este spart de către organizația Electronic Frontier Foundation; s-a folosit un calculator special în acest scop, iar timpul necesar spargerii a fost de 3 zile.

În luna Septembrie a aceluiași an, administrația Americană acorda companiilor producătoare de soft de securitate permisiunea de a exporta implementări ale algoritmului DES bazate pe chei de criptare de 56 biți.

În legătură cu aceste evenimente, pe 20 August 1998 NIST (National Institute of Standard and Technology) anunță (în cadrul unei conferințe speciale) un set de 15 algoritmi candidați să înlocuiască DES. Este ales și numele noului sistem de criptare: AES (Advanced Encryption Standard). Cei 15 algoritmi au fost trimiși de membrii din comunitatea criptografică mondială. Criteriile stabile de NIST pentru noul sistem au fost:

Să fie un sistem de criptare simetric pe blocuri de 128 biți.

Să accepte chei de lungime 128, 192 și 256 biti.

Să nu aibă chei slabe.

Să fie efficient atât pe platforma Intel Pentium Pro cat sip e alte platforme software sau hardware.

Să poată fi implementat atât pe procesoare de 32 biți cât și pe smart – carduri (procesoare de 8 biți).

Să fie cât mai simplu.

Să fie mai rapid decât DES și să ofere o securitate mai mare decât DES.

A doua conferință AES are loc în Martie 1999; după analiza rezultatelor algoritmilor propuși, NIST selectează 5 algoritmi: Mars, RC6, Rijndael, Serpent si Twofish. Aceștia sunt supuși testelor si discuțiilor publice, folosind drept criterii de evaluare: securitate, cost, implementare.

În Mai 2000 NIST anunța drept câștigător sistemul de criptare Rijndael, (creat de olandezii Joan Daemen și Vincent Rijman ) care devine official AES.

Detalii ale sistemului de criptare AES

Similar sistemelor anterioare (inclusive DES), AES cripteaza blocuri de text clar de lungime fixă, folosind subchei ale unei chei generate aleator. Lungimile folosite sunt de 128, 192 sau 256 biți.

Un rezultat intermediar al sistemului de criptare se numeste stare. Vom reprezenta starea unui bloc sub forma unui tablou cu 4 linii si coloane, ale cărui elemente sunt octeți. Deci valoarea lui se determina ușor : = N/32, unde N este lungimea blocului text care se criptează.

Similar, o cheie de criptare se va reprezenta printr-un tablou 4 X , unde = K/32 (K fiind lungimea cheii).

Exemplu: O stare cu = 6 și o cheie cu = 4 au forma următoare ( tabel 5.4.):

Tabel 5.4.

Uneori aceste blocuri se reprezintă ca un vector în care fiecare element este coloana unei stări (deci având o lungime de 4 octeți). În funcție de mărimea N a blocului de criptare (respectiv K a cheii), un astfel de vector are 4, 6 sau 8 componente numite cuvinte. Octeți unui cuvânt se notează cu a, b, c și respectiv d; astfel octetul 0 este a, octetul 1 este b, ș.a.m.d.

Intrarea și ieșirea din sistemul AES sunt definite sub forma unor vectori având drept componente octeți numerotați de la 0 la 4-1. un vector de intrare/ieșire are deci 16, 24 sau respective 32 componente numerotate 0…15, 0…23, 0…31.

Similar cheia de criptare este definită ca un vector de 16, 24 sau 32 octeți numerotați de la 0 la 4-1 (unde =128, 192, 256 ).

Octeții care formează intrarea în sistem completează pe coloane un tablou ca în exemplul de mai sus, numit starea inițială. Similar se procedează cu cheia de criptare. Procedeul este identic la sfârșit când se obține blocul criptat prin liniarizarea pe coloane a stării finale rezultate după criptare.

Relațiile dintre indexul al unui element (octet) din reprezentarea liniară și coordonatele ( i, j) ale aceluiași octet din reprezentarea matricială sunt:

i = (mod 4 );

j = [/4];

= i+4*j.

În plus, i este indicele octetului în cadrul unui cuvânt care conține acel octet, iar j este indicele cuvântului blocului care îl conține. Criptarea se realizare în runde, unde depinde de și . Valorile sunt date în tabelul următor (tabel 6.4.):

Tabel 6.4.

Fiecare rundă are intrare o stare și folosește o cheie de rundă. Cu excepția rundei finale o rundă este formată din patru transformări, notate pe scurt:

ByteSub (Stare);

ShiftRow (Stare);

MixColumn (Stare);

AddRoundKey (Stare, Cheie).

Ultima rundă conține numai trei transformări fiind eliminată MixColumn (Stare). Aceste transformări sunt definte astfel:

ByteSub (Stare) – este o subsituție neliniară care operează pe octeți. Tabele de substituție este o matrice inversabilă formată din compunerea a două transformări:

Fiecare octet nenul este înlocuit cu inversul său ; octetul 0 este lăsat nemodificat;

Rezultatul este modificat printr-o transformare afină peste :

Figura 4.4.

Transformarea ByteSub se aplică tuturor octeților stării de intrare în rundă, rezultatul fiind o altă stare de ieșire din rundă.

ShiftRow (Stare) – la acest pas liniile stării sunt permutate cyclic spre stânga. Numărul de octeți cu care se face ciclarea sunt: 0 pentru linia 0, Ci pentru linia i ( unde 1 3). Valorile Ci depind de lungimea a blocului și sunt date de următorul tabel ( tabel 7.4.)

Tabel 7.4.

Exemplu 2 aplicând transformarea ShiftRow stării din exemplul 1 (unde =6) vom obține starea ( tabel 8.4.)

Tabel 8.4.

Inversa transformării ShiftRow constă în permutarea ciclică spre stânga cu – Ci octeți pentru linia i ( 1 3); în acest fel fiecare octet aflat pe poziția j în linia i se deplasează pe poziția j+-Ci ( mod ).

MixColumn (Stare ) – în acestă transformare fiecare coloană a stării este privită ca un polinom de grad 3. Fiecare astfel de polinom este înmulțit cu:

c(X) = `03`X+ `01`X+`01`X+`02`

în algebra polinoamelor modulo X4+1

Operația inversă este similară . Fiecare coloană este transformată prin înmulțire cu polinomul invers lui c(X) modulo X4+1; acesta este:

d(X) = 0B`X+ `0D`X+`09`X+`0E`

AddRoundKey (Stare, Cheie) – acestă transformare constă în aplicarea unui XOR între starea curentă și cheia de rundă. Cheia de rundă are lungimea și este dedusă din cheia de criptare pe baza procedeului de mai jos (tabel 9.4.).

Tabel 9.4.

Transformarea AddRoundKey și inverse ei sunt identice.

Algoritmul de criptare AES este format din:

O transformare AddRoundKey inițială;

Nr – 1 runde;

O rundă finală.

Înainte de aplicarea acestui algoritm se foloseste un algoritm de obținere a cheilor de rundă.

Prelucrarea cheii de criptare

Toate cheile de rundă se obțin din cheia de criptare printr-o prelucrare separată, formată din două componente: extinderea cheii si alegerea cheii de rundă. Principiile de baza ale prelucrarii sunt:

Numărul total al biților din toate cheile de rundă este (+1);

Cheia de criptare este extinsă intr-o Cheie Expandată;

Cheia de rundă se obține luând primii octeți primii octeți din Cheia Expandată, care nu au fost folositi pentru alte chei.

Operații matematice

Suma

Suma a două elemente dintr-un câmp finit se obține „adăugând” coeficienții puterilor corespunzătoare din polinoame pentru cele două elemente. Suma se face cu operația XOR (notată prin ) – de ex. modulo 2 – astfel încât 1 și 0în același timp scăderea polinoamelor este identică cu suma polinoamelor.

Suma elementelor finite poate fi descrisă ca suma modulo 2 a biților corespunzători din byte. Pentru doi bytes {a7a6a5a4a3a2a1a0} și {b7b6b5b4b3b2b1b0}, suma este {c7c6c5c4c3c2c1c0}, unde fiecare ci = ai bi.

De exemplu, următoarele expresii sunt echivalente:

(x6 + x4 + x2 + x + 1) + (x7 + x + 1) = x7 + x6 + x4 + x2 (notație polinomială);

{01010111} {10000011} = {11010100} (notația binară);

{57} {83} = {d4} (notația hexazecimală).

Produsul

În reprezentarea polinomială, multiplicarea în GF(28) (notată cu ) corespunde multiplicării polinoamelor modulo un polinom iredectibil de gradul 8. Un polinom e ireductibil dacă unicii lui divizori sunt 1 și el însuși. Pentru algoritmul AES, acest polinom ireductibil este

m(x) = x8 + x4 + x3 + x + 1

sau {01} {1b} în hexa.

De exemplu, {57} c1}, deoarece

(x6 + x4 + x2 + x + 1) (x7 + x + 1) = x13 + x11 + x9 + x8 + x7

+ x7 + x5 + x3 + x2 + x +

x6 + x4 + x2 + x + 1

= x13 + x11 + x9 + x8 + x6+ x5+ x4+ x3+ 1

iar x13 + x11 + x9 + x8 + x6+ x5+ x4+ x3+ 1 modulo (x8 + x4 + x3 + x + 1) = x7 + x6 + 1

Reducerea modulară prin m(x) asigură că rezultatul va fi un polinom binar de grad mai mic de 8, și astfel va putea fi reprezentat printr-un byte. Sper deosebire de adunare, nu există o operație simplă la nivel de byte care să corespundă înmulțirii.

Înmulțirea definită mai sus e asociativă, iar elementul {01} este element neutru. Pentru orice polinom binar b(x) diferit de 0 și de grad mai mic de 8, inversul lui b(x) față de înmulțire este b-1(x) calculat astfel: (prin algoritmul Euclidian extins) calculăm a(x) și c(x) astfel încât

b(x) a(x) + m(x) c(x) = 1

a(x) b(x) mod m(x) = 1, ceea ce înseamnă

b-1(x) = a(x) mod m(x)

În plus pentru orice mulțime de 256 de valori posibile ale byte-ului, cu XOR folosit ca adunare și înmulțirea definită mai sus are structura de câmp finit GF(28).

BIBLIOGRAFIE

1. Acostăchioaie Dragoș – Securitatea Sistemelor Linux, Editura Polirom 2003.

2. Cheswick William, Bellovin Steven – Firewalls and Internet Security, Addison Wesley Professional computing series, 1994.

3. Habraken Joe – Rețele de calculatoare, Editura Bic All, 2002.

4. Norton Peter, Kearns Dave – Rețele de Calculatoare, Editura Teora 2000.

5. Ogletree Terry – Rețele de calculatoare – depanare și modernizare, Editura Teora 2001.

6. Ogletree Terry – Firewalls – Protecția rețelelor conectate la Internet, Editura Teora 2001.

7. Patriciu Victor, Bica Ion – Securitatea informatică in Unix și Internet, Editura Tehnică 1998.

8. Palivan Cornelia, Palivan Horatiu –Linux pentru avansați – sugestii, exemple, Editura Tehnică 2001.

Stepan Aurel, Petrov Gheorghe, Iordan Victoria – Rețele de calculatoare, Editura Mirton 1999.

Tanenbaum Andrew – Rețele de calculatoare, Editura Agora Computer Press 1998.

xxx – Iordan Victoria – Rețele de calculatoare – note de curs.

xxx – Popa Horia– Administrarea rețelelor locale – note de curs.

xxx – Mihalaș Stelian – Securitate si criptografie – note de curs.

BIBLIOGRAFIE

1. Acostăchioaie Dragoș – Securitatea Sistemelor Linux, Editura Polirom 2003.

2. Cheswick William, Bellovin Steven – Firewalls and Internet Security, Addison Wesley Professional computing series, 1994.

3. Habraken Joe – Rețele de calculatoare, Editura Bic All, 2002.

4. Norton Peter, Kearns Dave – Rețele de Calculatoare, Editura Teora 2000.

5. Ogletree Terry – Rețele de calculatoare – depanare și modernizare, Editura Teora 2001.

6. Ogletree Terry – Firewalls – Protecția rețelelor conectate la Internet, Editura Teora 2001.

7. Patriciu Victor, Bica Ion – Securitatea informatică in Unix și Internet, Editura Tehnică 1998.

8. Palivan Cornelia, Palivan Horatiu –Linux pentru avansați – sugestii, exemple, Editura Tehnică 2001.

Stepan Aurel, Petrov Gheorghe, Iordan Victoria – Rețele de calculatoare, Editura Mirton 1999.

Tanenbaum Andrew – Rețele de calculatoare, Editura Agora Computer Press 1998.

xxx – Iordan Victoria – Rețele de calculatoare – note de curs.

xxx – Popa Horia– Administrarea rețelelor locale – note de curs.

xxx – Mihalaș Stelian – Securitate si criptografie – note de curs.

Similar Posts

  • Sistemul Informational

    MINISTERUL EDUCAȚIEI AL REPUBLICII MOLDOVA Universitatea Tehnică din Moldova Facultatea Calculatoare, Informatică și Microelectronică Catedra Automatică și Tehnologii Informaționale Sistemul Informațional „Baza de date a tezelor de doctorat” Proiect de licență Student: ( T.Văcaru ) Conducător: (A.Leahu ) Consultanți: (R.Melnic ) _________________( A. Dodu ) _________________(Sv.Cojocaru) Șef de secție TI (R.Bulai) Șef catedră ATI ________________(D.Ciorbă)…

  • Sistemul Informational al Intreprinderii „oriflame” S.a

    “Sistemul informațional al întreprinderii „Oriflame” S.A.” CAPITOLUL 2: Orgаnizаțiа în cаdrul sistemului informаționаl Scurtă descriere а orgаnizаției Mișiuneа, obiectivele și strаtegiа informаționаlă а orgаnizаției Rolul jucаt de sistemul informаționаl în cаdrul firmei Diаgnosticаreа sistemului informаționаl existent in cаdrul firmei Oriflаme 2.5.Identificarea intrărilor și ieșirilor principalelor sisteme organizaționale existente CAPITOLUL 3: Proiectаreа sistem informаționаl аi întreprinderii…

  • Limbajul de Programare Abap

    REZUMATUL LUCRÃRII Această lucrare are rolul de a evidenția noțiunile generale ale limbajului de programare ABAP și avantajele pe care acesta le oferă, stând la baza celui mai renumit ERP din lume, SAP-ul. ABAP-ul este un limbaj de programare care permite utilizatorilor customizare să sistemului în funcție de nevoile lor. Este un limbaj usor de…

  • Mediul Online din Romania

    Situația mediului de afaceri online Mediul de afaceri online Internetul a fost fondat în 2 septembrie 1969 în Statele Unite ale Americii și purta numele de ARPANet. Inițial internetul servea la îmbunătățirea rețelei de comunicații din interiorul Departamentului de Apărare. Termenul Internet porneste de la impreunarea a doua cuvinte englezești : interconnected si network.( interconectat…

  • Aparitia Internetului Si Utilizarea Acestuia

    Termenul internet provine din împreunarea parțială și artificială a două cuvinte englezești: interconnected = interconectat și network = rețea. Cuvântul are două sensuri care sunt strâns înrudite, în funcție de context: substantivul propriu „Internet” (scris cu majusculă) desemnează o rețea mondială unitară de calculatoare și alte aparate cu adrese computerizate, interconectate conform protocoalelor (regulilor) de…