| 
				
					| 
							mihaispr
							Administrator
							  Inregistrat: acum 18 ani 
							Postari: 2142
						 |  | 
				
					| Securitatea în retele de calculatoare începe sa fie din ce în ce mai mult luata în serios în ultima perioada. 
 Motivul pentru aceasta tendinta este bineînteles numarul mare de atacuri. Ca exemplu, în Statele Unite,
 timpul mediu de atac al unui calculator care nu este protejat este de doua ore. În afara de faptul ca numarul de
 atacuri a crescut îngrijorator de mult în ultima perioada, informatia digitala devine din ce în ce mai valoroasa
 pentru un atacator (numere de carti de credit, informatii confidentiale, tranzactii bancare) astfel încât acesta
 este dispus sa investeasca mai mult timp si bani pentru a capata acces la aceste informatii. Solutia folosita
 pâna nu de mult, era ``baricadarea'' informatiilor confidentiale în fortarete impenetrabile pentru oricine.
 Astfel, era comun pentru o companie mare sa pastreze informatiile confidentiale pe un mainframe la care
 accesul se putea face doar din sala de terminale. Mai târziu, au aparut retele de calculatoare locale, dar ele
 erau izolate de exterior, astfel încât securitatea în acele retele de calculatoare se implementa printr-o
 politica extrem de severa de pedepsire a celor vinovati (concedierea sau intentarea unui proces celui
 vinovat erau masurile cele mai des folosite).
 
 O data cu aparitia Internetului însa, lucrurile s-au schimbat. Companiile au început sa îsi dea seama de
 avantajele folosirii Internetului ca piata de desfacere (e-bussiness), sau ca mijloc de comunicare cu alte
 companii pentru a oferi servicii complete clientului (bussiness to bussiness). Din acel moment însa, retelele de
 calculatoare au încetat sa mai fie forturi impenetrabile, trebuind sa-si deschida portile astfel încât compania
 sa poata ramâne competitiva.
 
 Implementarea securitatii într-o retea de calculatoare cuprinde trei aspecte importante: confidentialitatea,
 integritatea si disponibilitatea.
 
 Confidentialitatea reprezinta calitatea unei retele de a asigura accesul la informatie doar persoanelor
 autorizate.
 
 Integritatea garanteaza faptul ca informatia nu a fost modificata de persoane neautorizate.
 
 Disponibilitatea poate fi definita ca timpul în care reteaua de calculatoare si resursele din cadrul ei sunt
 operationale.
 
 Pentru fiecare din aceste aspecte ale securitatii retelelor de calculatoare exista atacuri, astfel încât
 securizarea unei retele de calculatoare trebuie sa implementeze fiecare din aceste aspecte, ceea ce nu este un
 lucru trivial. Cel care o implementeaza se confrunta cu probleme complexe:
 
 
 - identificarea, autorizarea si monitorizarea activitatii utilizatorilor
 - securizarea perimetrului retelei
 - asigurarea confidentialitatii si integritatii datelor
 - monitorizarea retelei
 - managementul echipamentelor si infrastructurii de securitate
 
 Pentru aceste probleme exista(firewall-uri,VPN-uri, sisteme de detectie a intruziunilor etc.)
 
 
 Solutii pentru implementarea securitatii
 
 Fiecare din clasele de probleme de securitate prezentate la începutul capitolului are o solutie în dispozitivele de retea sau în tehnologii special concepute pentru securitate. Astfel, asigurarea securitatii perimetrului retelei se face cu un firewall, dispozitiv special de retea. Monitorizarea retelei se face cu un IDS (Intrusion Detection System), alt dispozitiv special de retea. Pastrarea confidentialitatii si integritatii datelor într-un mediu ostil se face cu tehnologii VPN (Virtual Private Network). Pentru identificarea, autorizarea si monitorizarea activitatii (accounting) utilizatorilor într-un mod centralizat se folosesc protocoale precum RADIUS (Remote Authentication Dial-In User Service) sau TACACS (Terminal Access Controller Access Control System).
 
 
 Firewall-ul
 
 Probabil ca cel mai cunoscut dispozitiv de securitate este firewall-ul. Prin definitie, firewall-ul este un sistem sau un grup de sisteme care implementeaza politica de acces între doua sau mai multe retele. Firewall-urile pot fi clasificate în patru mari clase: firewall-uri dedicate, firewall-uri de rutere, firewall-uri de server si firewall-uri personale.
 
 Firewall-urile dedicate sunt masini ce ruleaza un sistem de operare special conceput pentru filtrarea de pachete si translatarea de adrese. Masina poate folosi ASIC-uri care o ajuta sa opereze performante mult mai bune. Firewall-urile de rutere reprezinta de fapt software special care ruleaza pe rutere. Ruterul este astfel integrat cu facilitati de firewall.
 
 Firewall-urile de server sunt implementate, în general, ca un software aditional peste un sistem de operare de retea (Linux, NT, Win2K, Novell, UNIX). Exemple de astfel de pachete software sunt: Netfilter, Microsoft ISA Server, Novell Border Manager. Din cauza ca ruleaza software peste un sistem de operare de uz general, aceste tipuri de firewall-uri nu se descurca la fel de bine în situatii de încarcare mare ca un firewall dedicat.
 
 Firewall-urile personale sunt instalate pe calculatoarele personale. Ele sunt concepute pentru a preveni atacuri doar asupra calculatorului pe care ruleaza. Este important de retinut ca aceste tipuri de firewall-uri nu sunt optimizate pentru retele întregi de calculatoare. Exemple de firme ce produc firewall-uri personale sunt McAfee si Symantec.
 
 Principalele mecanisme prin care un firewall asigura protectia retelei sunt filtrarea de pachete si translatarea de adrese, pe care le vom analiza mai pe larg în continuare.
 
 Filtrarea de pachete
 
 Filtrarea de pachete este procesul prin care firewall-ul lasa sa treaca în reteaua locala doar anumite pachete, pe baza unor reguli. Filtrarea de pachete este folosita pentru a proteja o retea de atacuri din exterior (Internet) si se realizeaza la nivelurile OSI 3 si 4.
 
 Regulile de filtrare sunt formate dintr-o parte care identifica pachetul si o parte care specifica cum sa se trateze pachetul. În partea de identificare se poate specifica adresa sursa, adresa destinatie, adresa de retea sursa, adresa de retea destinatie, protocolul (TCP, UDP, ICMP), portul sursa sau destinatie (doar pentru TCP sau UDP), tipul mesajului (pentru ICMP), interfata de intrare sau iesire, adresele de nivel doi, etc. În principiu se poate face identificarea pachetului cu orice informatie scrisa în headerul pachetului, în functie de implementare.
 
 Partea de tratare a pachetului specifica ce anume trebuie facut cu pachetele identificate de regula. Pentru filtrare exista în general 3 posibilitati de tratare: acceptare, ignorare sau respingere. În cazul acceptarii pachetul este lasat sa treaca. În cazul ignorarii pachetului nu este lasat sa treaca si nu se trimite notificare catre sursa. În cazul respingerii pachetul nu este lasat sa treaca, dar se trimite notificare catre sursa (un mesaj ICMP al carui tip poate fi, în unele implementari, ales de cel care construieste regula; de cele mai multe ori se foloseste un mesaj ICMP de tip port-unreachable).
 
 Translatarea de adrese
 
 Translatarea de adrese sau NAT este procesul prin care un ruter modifica adresele sursa (SNAT) sau destinatie (DNAT) din anumite pachete care trec prin ruter pe baza unor reguli.
 
 Putem considera ca translatarea adreselor este o functie definita pe o multime de adrese (A) cu rezultate într-o alta multime de adrese (B). Astfel, fiecare pachet cu o adresa sursa sau destinatie (dupa cum este specificat în regula) din multimea A va fi înlocuita cu o adresa din multimea B. Se spune ca avem o translatare de adresa statica daca multimile A si B sunt fiecare formate dintr-un singur element. În caz contrar avem o translatare de adrese dinamica.
 
 Avantajul folosirii translatarii de adrese dinamice consta în faptul ca se poate folosi o partajare a adreselor rutabile disponibile organizatiei. Astfel, calculatoarelor din reteaua locala li se aloca adrese private, iar ruterul va face o translatare de adrese dinamice din multimea de adrese private în multimea de adrese publice alocate organizatiei. Se observa însa ca aceasta abordare permite ca doar Card(B) calculatoare din reteaua locala sa aiba conversatii TCP sau UDP1 cu Internetul. Alt avantaj al folosirii translatarii de adrese este acela ca se ascunde astfel exteriorului maparea reala de adrese.
 
 Translatarea de adrese statica se foloseste atunci când în reteaua locala avem un server pe care dorim sa îl accesam din exterior. În acest caz se face o mapare unu la unu între adresa din interior si cea din exterior.
 
 O metoda mai avansata de translatare de adrese o reprezinta PAT (Port Address Translation), uneori denumita si NAT overloaded sau masquerading. Aceasta metoda permite un numar de aproximativ 64000 de conversatii simultane de la orice host intern catre exterior cu o singura adresa externa. Implementarea înlocuieste pachetul din reteaua locala cu adresa sursa S, adresa destinatie D, portul sursa P, portul destinatie Q, cu altul nou ce va avea adresa sursa M (adresa ruterului), adresa destinatie D, portul sursa K. Portul destinatie nu se schimba. De asemenea se memoreaza asocierea (S,P) - K. Daca un pachet ajunge pe ruter din exterior, având adresa destinatie M, adresa sursa Q si portul destinatie K, atunci acest pachet va fi înlocuit cu un altul cu adresa destinatie S, adresa sursa Q, portul destinatie P si va fi trimis în reteaua locala. Portul sursa nu se schimba.
 
 Un caz special al PAT îl reprezinta redirectarea. În acest caz se va înlocui pachetul primit din reteaua locala având adresa sursa S, adresa destinatie D, portul P cu un altul având adresa sursa S, adresa destinatie M (adresa ruterului), portul R (portul în care se face redirectarea, specificat de utilizator). Redirectarea este în general folosita pentru a implementa un proxy transparent, caz în care pe ruterul M portul R asculta un proxy configurat pentru proxy transparent.
 
 Filtrare de pachete si translatare de adrese avansata
 
 Anumite protocoale, datorita felului în care sunt concepute, pot sa nu functioneze corect atunci când clientul si serverul sunt separate de un firewall care filtreaza pachete sau implementeaza PAT. Exemple de astfel de protocoale sunt FTP, IRC si SQL. În general, pentru astfel de protocoale clientul si serverul negociaza un port pentru client si apoi serverul initiaza o conexiune catre client pe portul negociat. Din aceasta cauza, implementarea unui mecanism de filtrare care sa permita functionarea acestui protocol, dar sa protejeze statia de atacuri din exterior, se complica extrem de mult. La fel stau lucrurile si pentru PAT. Pentru a întelege de ce, sa analizam mai întâi cazul unui protocol extrem de comun: FTP.
 
 Protocolul FTP foloseste doua porturi: portul de date (ftp-date) si portul de comenzi (ftp-comenzi). La conectarea la server, clientul initiaza o conexiune catre portul ftp-comenzi. În momentul în care clientul doreste transferul unui fisier el va pregati un port pe care va asculta cereri de conexiuni de la server, dupa care va trimite pe canalul de comenzi un mesaj în care i se cere serverului fisierul de transferat si în care îi trimite serverului portul pe care clientul asculta. Serverul va initia apoi o conexiune de pe portul ftp-date catre portul specificat de client. Aceste este modul de functionare normal pentru protocolul FTP. Clientul poate fi însa configurat sa ceara de la server un mod de lucru pasiv, în care doar clientul initiaza conexiuni.
 
 Fie o situatie în care dorim sa utilizam filtrarea de pachete pentru a proteja reteua locala de atacuri din exterior. Astfel, pe firewall nu vom permite ca statiile din exterior sa initieze conexiuni catre statiile din interior. Din acest motiv, în momentul în care o statie locala va încerca sa transfere un fisier în mod normal de pe un server de FTP, firewall-ul va bloca încercarea de deschidere a unei conexiuni a serverului catre client. Cum portul este negociat de client, problema aparuta nu se poate rezolva foarte simplu.
 
 Singura solutie posibila este ca firewall-ul sa analizeze toate pachetele schimbate de client si server si sa identifice portul negociat. Cu aceasta informatie va putea apoi permite stabilirea conexiunii initiate de server cu clientul. Folosirea unei astfel de abordari este denumita stateful inspection sau connection tracking.
 
 Un alt exemplu care necesita o filtrare inteligenta este urmatorul: dorim sa lasam utilizatorii din reteaua locala sa aiba acces în afara la orice serviciu, dar sa nu acceptam initierea de conexiuni catre reteaua locala. Pentru traficul TCP aceasta problema se rezolva usor, datorita modului în care se realizeaza negocierea unei conexiuni: initierea unei conexiuni începe prin trimiterea unui pachet cu flagul SYN setat. Aceste pachete pot fi usor interceptate si rejectate. Pentru UDP însa nu exista asemenea pachete de initiere a conexiunii, pentru ca UDP nu foloseste conexiuni. Daca se foloseste stateful inspection, se vor memora informatii din pachetele trimise (sursa, destinatie, port sursa, port destinatie). Firewall-ul va permite apoi pachetelor de tipul (destinatie, sursa, port destinatie, port sursa) venite din exterior sa treaca. Dar pentru ca nu exista conexiuni pentru UDP apare aici o alta problema: nu stim când se va termina conversatia dintre cele doua hosturi. Astfel încât firewall-ul va folosi un timer de fiecare data când un pachet va fi trimis în exterior. La expirarea timerului firewall-ul va închide accesul catre statia în cauza.
 
 Sisteme de detectie a intruziunilor
 
 Sistemele de detectie a intruziunilor - Intrusion Detection Systems (IDS) au abilitatea de a detecta atacurile împotriva unei retele. Aceste sisteme identifica, opresc si semnaleaza atacurile asupra resurselor retelei. Exista doua tipuri de sisteme de detectie a intruziunilor: pentru statii si pentru retele.
 
 Un HIDS (Host based IDS) sau un sistem de detectie a intruziunilor pentru statii înregistreaza atât operatiile efectuate, cât si utilizarea resurselor sistemului. Un avantaj al HIDS este faptul ca el poate preveni atacuri necunoscute. De exemplu un HIDS poate monitoriza accesul la fisiere si reactiona când un atacator încearca sa stearga fisiere critice. Chiar daca tipul atacului este nou si nu poate fi recunoscut de un NIDS (Network based IDS) un HIDS poate sesiza atacul.
 
 Cea mai simpla forma de HIDS este pornirea proceselor de logare pe sistem. O astfel de metoda se spune ca este pasiva. Dezavantajul acestei metode este faptul ca necesita multe ore de munca din partea administratorului pentru a analiza logurile. Sistemele HIDS curente folosesc agenti software care sunt instalati pe fiecare masina si care monitorizeaza activ sistemul (pot reactiona daca detecteaza atacuri). Atunci când HIDS-ul este configurat sa raspunda activ, el va opri serviciile de retea pentru a preveni eventuale pagube si a putea analiza exact atacul. Un exemplu de sistem de detectie a intruziunilor este Linux Intrusion Detection System (LIDS).
 
 NIDS-urile sunt dispozitive de inspectare a traficului si actioneaza prin colectarea de date de la senzori amplasati în retea. NIDS-urile capteaza si analizeaza traficul ce traverseaza reteaua. Avantajul folosirii unui NIDS este faptul ca nu trebuie aduse modificari pe statii. În schimb, datorita faptului ca la baza NIDS-urilor sta detectia bazata pe semnaturi ale atacurilor, el nu poate opri sau detecta atacuri noi. Un exemplu de sistem de detectie a intruziunilor în retea este SNORT .
 
 Tipuri de atacuri si vulnerabilitati
 
 Pentru o întelege problemele securitatii de calculatoare, trebuie sa studiem sumar si modul în care acestea
 sunt cauzate. Exista doua cauze majore ce pot constitui amenintari pentru o retea de calculatoare, chiar dupa
 ce a fost implementata o politica de securitate corecta: vulnerabilitati (probleme cauzate de tehnologie) si o
 configurare necorespunzatoare.
 
 Vulnerabilitatile sunt probleme ale sistemelor de operare, protocoalelor TCP/IP, dispozitivelor de retea prin
 care un atacator poate accesa reteaua fara a respecta politica de securitate implementata.
 
 Atacurile asupra unei retele de calculatoare pot fi clasificate în atacuri interne sau externe si în atacuri structurate sau
 nestructurate.
 
 Atacurile externe sunt efectuate din afara organizatiei (din punctul de vedere al retelei).
 
 Atacurile interne sunt efectuate din reteaua organizatiei. Aceste atacuri sunt extrem de eficiente, pentru ca,
 în general, odata patruns într-un segment al retelei organizatiei este usor sa se obtina acces în alte segmente
 ale acesteia. Putine organizatii folosesc dispozitive de securitate în cadrul retelei interne.
 
 Atacurile nestructurate sunt atacurile care sunt initiate de indivizi neexperimentati ce utilizeaza exploit-uri
 disponibile pe Internet.
 
 Exploit-urile sunt programe ce exploateaza vulnerabilitatile pentru a ocoli politica de securitate implementata
 într-o retea.
 
 Atacurile structurate sunt initiate de indivizi mult mai bine motivati si cu cunostinte tehnice competente. Acesti
 indivizi cunosc vulnerabilitati de sistem si le pot folosi pentru a capata acces în retea, pot detecta noi
 vulnerabilitati de sistem si pot dezvolta cod si scripturi pentru a le exploata.
 
 Un atac trece în general prin trei faze: faza de recunoastere, faza de obtinere a accesului si (eventual) faza în
 care sistemele compromise sunt folosite pentru a ataca alte retele. Faza de obtinere de acces poate eventual
 fi formata din doua etape: una în care atacatorul obtine acces în cadrul retelei pe una din masinile din retea
 prin exploit-uri de la distanta si faza în care, daca este cazul, obtine acces privilegiat pe masina respectiva cu
 ajutorul unor exploit-uri locale.
 
 Recunoasterea
 
 Faza de recunoastere se poate defini ca procesul prin care un atacator descopera maparea sistemelor, a
 serviciilor si vulnerabilitatilor în retea. În aceasta faza atacatorul strânge informatii si, de cele mai multe ori,
 aceasta faza precede un atac efectiv. Într-o prima faza atacatorul foloseste utilitare precum nslookup sau
 whois pentru a descoperi spatiul de adrese alocate organizatiei tinta. Apoi face un ping sweep încercând
 sa determine care din adresele de IP sunt alocate si care din sisteme sunt pornite. Se foloseste apoi un port
 scanner pentru a determina ce servicii sunt active. Acest utilitar functioneaza pe principiul ca fiecare serviciu
 (web, ftp, etc) are alocat un port. Utilitarul trimite pachete SYN catre masina atacata pe portul corespunzator
 serviciului care se încearca a fi detectat. Daca masina atacata ruleaza serviciul, sistemul de operare va
 trimite un pachet de tipul SYN, ACK pentru a începe negocierea unui canal de comunicatie. Acest utilitar
 poate de asemenea sa detecteze si tipul sistemului de operare, cel mai adesea datorita modului în care unele
 din sistemele de operare genereaza numere de secventa pentru pachetele TCP. Dupa determinarea
 serviciilor si sistemului de operare, atacatorul încearca sa obtina versiunea sistemului de operare si
 versiunile serviciilor rulate. Acest lucru se poate face prin conectarea cu utilitare de gen nc sau telnet pe
 portul serviciului respectiv si examinarea mesajele afisate. Pe baza acestor informatii atacatorul poate
 determina ce vulnerabilitati exista si ce sisteme poate ataca.
 
 O alta modalitatea de recunoastere a resurselor o reprezinta asa numitul proces de packet sniffing.
 El este folosit mai ales în retelele în care mesajele ajung la toata lumea conectata la mediu, ca în cazul
 Ethernet atunci când se foloseste un hub. Datorita acestui lucru, tot traficul dintr-o astfel de retea poate fi
 analizat. În mod normal, placa de retea nu va prelua din mediu decât pachetele destinate statiei respective
 sau pachetele de broadcast (la nivel 2). Daca exista privilegii suficiente, se poate configura placa de retea
 astfel încât sa preia toate pachetele ce circula pe mediu, prin setarea acesteia în promiscuous mode.
 Pachetele astfel captate pot fi procesate cu diverse utilitare si pe baza lor se pot mapa adrese, versiuni de
 sisteme de operare sau servicii. Mai mult, folosind utilitare de packet sniffing se pot receptiona chiar si date
 importante care ar trebui sa aiba un caracter privat, cum ar fi parole, numere de carti de credit, informatii
 confidentiale, etc. O falsa solutie pentru a preveni problemele ce apar atunci când se folosesc utilitare
 de packet sniffing este sa se foloseasca un switch ca metoda de interconectare în loc de un hub. Desi
 reduce probabilitatea ca un atacator sa poata intercepta pachetele, nu este o metoda sigura. Sunt cunoscute
 metode prin care un switch poate fi pacalit sa trimite pachete si catre alte porturi (si implicit calculatoare),
 nu doar catre portul destinatie. Aceste metode poarta numele de ARP poisoning.
 
 Metode eficiente de protectie împotriva unui atac de recunoastere sunt: folosirea unui firewall, pentru a
 bloca încercarile de recunoastere, folosirea doar a unor protocoale sigure care nu trimit datele în clar,
 ci criptate, sau folosirea criptarii pentru protocoalele nesigure prin tunelare.
 
 Obtinerea accesului
 
 Una dintre cele mai sigure metode de obtinere a accesului privilegiat este a sparge parola. Acest lucru
 presupune ca atacatorul are deja acces pe o masina din retea si doreste acces privilegiat (root, Administrator).
 Desi un atac ``brute force'' nu are cum sa dea rezultate decât pe sistemele la care parolele sunt limitate la
 6-7 caractere, exista atacuri care se folosesc de unele particularitati ale parolelor. S-a observat ca
 majoritatea parolelor folosite se încadreaza în anumite categorii, pentru a putea fi usor tinute minte.
 Din aceasta cauza exista utilitare de spart parole bazate pe dictionare (Jack The Ripper).
 
 Unul dintre cele mai dese tipuri de exploit-uri de la distanta, ce functioneaza pentru o gama larga de aplicatii
 si sisteme de operare, este denumit buffer overflow. Aceasta tehnica se bazeaza pe bug-uri în aplicatii.
 Astfel, exista aplicatii care accepta siruri de caractere de la utilizatori. Aceste siruri sunt copiate apoi în
 memorie pentru a fi utilizate, de multe ori într-o variabila locala alocata pe stiva. Daca variabila este alocata
 cu o dimensiune fixa, si datele acceptate de la utilizator depasesc dimensiunea variabilei, acestea vor
 suprascrie în stiva adresa de retur din procedura cu alta, aleasa de atacator sa indice undeva în sirul introdus.
 Astfel se poate executa cod arbitrar pe masina atacata. Folosirea exploit-urilor de tip buffer overflow,
 combinata cu faptul ca unele programe au bitul set uid setat poate crea exploit-uri locale eficiente. De aceea,
 la securizarea unei masini trebuie avute în vedere aceste programe.
 
 Alta metoda de exploit-uri de la distanta este deturnarea unei conexiuni TCP (TCP session hijack). Ea consta
 în asteptarea ca un utilizator sa se logheze pe sistem ce doreste sa fie atacat, si apoi în trimiterea de pachete
 catre portul pe care ruleaza serviciul, luând locul utilizatorului care s-a autentificat. Aceasta metoda se
 foloseste daca se pot prezice numerele de secventa dintr-un pachet TCP. O varianta de deturnare de
 conexiuni TCP este man in the middle attack. În acest caz, atacatorul trebuie sa aiba acces la o masina pe
 care trece traficul dintre doua entitati A si B. În acest caz, atacatorul intercepteaza cererea de conexiune de
 la A la B si raspunde lui A, stabilind cu A o conexiune. Apoi stabileste si cu B o conexiune. Toate datele
 trimise de A vor fi apoi trimise lui B si invers. Astfel atacatorul are acces la convorbirea dintre A si B, chiar
 daca traficul este criptat din punctul de vedere al lui A si B.
 
 IP spoofing este o metoda de atac, dar poate fi folosita si pentru a ascunde identitatea atacatorului sau pentru
 a lansa atacuri. Prin acest atac, pachetele TCP/IP sunt manipulate, falsificând adresa sursa. În acest mod
 atacatorul poate capata acces atribuindu-si o identitate (adresa de IP) care are autorizare sa acceseze
 resursa atacata. Datorita falsificarii adresei sursa a pachetului IP, atacatorul nu poate stabili decât o
 comunicatie unidirectionala (presupunând ca nu este prezent în reteaua locala a masinii atacate). Acest
 lucru face protocolul TCP nesusceptibil pentru asemenea atacuri. Exista însa numeroase servicii UDP care
 pot fi exploatate cu acest tip de atac.
 
 Virusii pot constitui de asemenea metode eficace de atac, atunci când poarta cu ei troieni. Troienii sunt
 programe simple, care deschid usi de acces pe sistemele infectate de virus.
 
 O metoda diferita fata de cele discutate pâna acum o reprezinta ingineria sociala. Ea consta în aflarea de
 informatii esentiale direct de la utilizatori. De multe ori acestia îsi lasa scrisa parola undeva în apropierea
 calculatorului (sau a serverului), astfel încât ea poate fi gasita cu usurinta de atacator. Unii atacatori trimit
 email-uri sau dau telefoane utilizatorilor,pretinzând ca fac parte din departamentul de suport tehnic, sau din
 departamentul de IT al companiei, cerând utilizatorilor direct informatiile de care au nevoie.
 
 Denial of Service
 
 Atacurile de tipul denial of service (DoS) opresc sau încetinesc foarte mult functionarea unor retelele, sisteme
 sau servicii. Ele sunt cauzate de un atacator care doreste sa împiedice accesul utilizatorilor la resursele
 atacate. Atacatorul nu are nevoie sa fi capatat înainte acces pe calculatorul pe care doreste sa efectueze
 atacul. Exista multe posibilitati prin care un atac DoS se poate manifesta. Efectul însa este acelasi: se
 împiedica accesul persoanelor autorizate de a folosi serviciile de pe sistem prin utilizarea la maxim a
 resurselor sistemului de catre atacator.
 
 Un exemplu de atac DoS local este un program care creeaza procese la infinit. Acest lucru va duce în cele din
 urma la încetinirea sistemului, pentru ca existând un numar foarte mare de procese create de atacator,
 probabilitatea ca acestea sa se execute va fi foarte mare , iar procesele celorlalti utilizatori nu mai apuca sa
 se execute. Un alt tip de atac DoS local posibil este crearea unui numar limitat de procese (pentru ca
 majoritatea sistemelor de operare moderne limiteaza numarul maxim de procese pe care un utilizator le
 poate crea), care aloca zone de memorie de dimensiuni mari si care acceseaza aceste zone aleator. Ideea
 acestui atac este de a forta sistemul de operare sa lucreze cu swap-ul, încetinindu-l.
 
 Exista si atacuri DoS de la distanta. Majoritatea se bazeaza pe vulnerabilitati ale sistemelor de operare sau
 aplicatiilor. Un exemplu de astfel de atac este atacul cu date out of band, conceput pentru sistemele de operare
 Windows 95 si NT. Acest atac va determina sistemul de operare sa se blocheze sau sa se reseteze. Datele
 out of band sunt date care nu fac parte din fluxul normal de date schimbat între doi socketi. Acest tip de date
 sunt trimise doar în cazuri speciale si au prioritate fata de datele normale. Un exemplu de situatie în care
 datele out of band sunt folositoare poate fi urmatorul: presupunem ca avem o aplicatie client - server ce
 implementeaza un protocol similar cu telnet. Astfel, între client si server se trimit comenzile, respectiv
 outputul acestora. Pentru a suporta dimensiuni variabile ale ecranului la client, în momentul în care acesta
 redimensioneaza fereastra se trimite serverului un mesaj out of band în care se specifica noile dimensiuni
 ale ecranului.
 
 Atacul Ping of Death foloseste pachete IP modificate care indica faptul ca pachetul are mai multe date decât
 are de fapt. Acest atac determina blocarea sau resetarea masinii pe sistemele care nu verifica acest lucru.
 
 Exista si atacuri DoS care nu exploateaza vulnerabilitati ale sistemelor. Un astfel de atac este atacul SYN
 Flooding care deschide foarte multe conexiuni pe o masina. În cazul în care sistemul de operare nu limiteaza
 numarul de conexiuni deschise, acest proces duce la încetinirea procesarii traficului si la consumarea inutila
 a memoriei pe masina atacata. Daca se deschide un numar suficient de mare de conexiuni, pâna la urma
 masina va ceda. În cazul în care sistemul de operare limiteaza numarul de conexiuni deschise situatia nu se
 schimba prea mult, pentru ca odata ce a fost atinsa limita de conexiuni deschise, nimeni nu va mai putea
 deschide conexiuni, efectul pentru utilizator fiind acelasi: imposibilitatea de a folosi resursa.
 
 Atacuri DoS distribuite
 
 Atacurile DoS distribuite sunt astfel concepute încât sa satureze largimea de banda pe legatura ce conecteaza
 reteaua la Internet cu pachete de date trimise de atacator, astfel încât pachetele legitime nu mai pot fi trimise.
 Pentru a realiza acest lucru un atacator se foloseste, direct sau indirect, de mai multe sisteme .
 Un exemplu de astfel de atac este Smurf. Acesta începe prin a trimite un numar mare de mesaje ICMP de tip
 echo-request (sau ping) catre adrese de broadcast, sperând ca aceste pachete vor fi trimise unui întreg
 segment de retea. De asemenea aceste pachete sunt falsificate pentru a avea ca adresa sursa adresa
 sistemului tinta. Daca pachetul trece de dispozitivul de rutare, el va fi receptionat de catre toate statiile
 de pe un segment de retea. Acestea vor raspunde cu un pachet de tip echo-reply catre adresa falsa din
 pachet. Astfel, statiile vor genera trafic catre adresa specificata de atacator. Acest tip de atac poate fi usor
 contracarat daca pe ruter se dezactiveaza rutarea pachetelor de broadcast directionat.
 
 Un alt tip de atac distribuit se poate realiza cu pachetul de utilitare TFN2K (Tribe Flood Network 2000).
 Atacul TFN are capacitatea de a genera pachete de IP cu adresa sursa falsificata. În prealabil însa, sistemele
 de pe care se face atacul trebuie sa fi fost instalate cu aceste utilitare. Acest lucru se face în primul pas, când
 se ataca statiile (denumite drone-uri) cu metodele explicate în paragrafele anterioare. Un TFN master poate
 apoi comanda drone-urile cauzând atacuri DoS distribuite.
 
 Iptables
 
 Iptables este utilitarul cu ajutorul căruia se pot configura politica şi regulile de filtrare de pachete sau translatare de adrese pentru Linux 2.4. El face parte din proiectul Netfilter, ce implementează în Linux filtrarea de pachete şi NAT (inclusiv connection tracking).
 
 În iptables o regulă are două părţi: o parte care identifică pachetele (partea de match) şi una care specifică cum trebuie tratate pachetele respective (partea ţintă
  . Procesarea regulilor se face secvenţial începând cu prima regulă. Dacă regula curentă face match se execută acţiunea asociată ţintei. Dacă nu, se trece la următoarea regulă. Dacă s-au epuizat toate regulile dintr-un lanţ definit de utilizator sau dacă ţinta este RETURN, se continuă analizarea regulilor din lanţul precedent. Dacă s-au epuizat toate regulile dintr-un lanţ predefinit, se execută acţiunea asociată politicii implicite a lanţului. 
 În iptables există mai multe tabele care conţin lanţuri predefinite şi lanţuri definite de utilizator. Aceste tabele au fost introduse pentru a separa într-un fel tipurile de mecanisme oferite. Din acest motiv când lucrăm cu reguli sau lanţuri trebuie să specificăm tabela în care lucrăm folosind opţiunea -t. În fiecare din tabele sunt valide numai anumite lanţuri predefinite şi numai anumite acţiuni (ţinte) ce se pot asocia regulilor.
 
 
 Tabele
 
 Tabela filter se foloseşte pentru filtrarea de pachete. Există trei lanţuri predefinite:
 
 INPUT
 pachete ce sunt destinate ruterului
 OUTPUT
 pachete generate de ruter
 FORWARD
 pachete care sunt rutate (pachete care nici nu sunt generate de ruter, nici nu sunt destinate ruterului);
 Ţintele valide includ:
 
 ACCEPT
 pachetele sunt lăsate sa treacă
 DROP
 pachetele sunt ignorate
 QUEUE
 pachetele sunt copiate în user-space pentru analize
 REJECT
 pachetele sunt ignorate, dar sursa este notificată; la această ţintă se poate specifică tipul mesajului icmp folosit pentru notificare cu opţiunea -reject-with
 LOG
 pachetele sunt scrise în log
 Tabela nat se foloseşte pentru translatarea de adrese. Există trei lanţuri predefinite:
 
 PREROUTING
 modifică pachetul imediat ce acesta intră în ruter, înainte de a fi rutat
 OUTPUT
 modifică pachetele generate local înainte ca acestea să intre în procesul de rutare
 POSTROUTING
 modifică pachetele ce urmează să plece din ruter, după ce acestea au fost rutate
 Ţintele valide includ ACCEPT, DROP, QUEUE, REJECT, LOG precum şi:
 
 SNAT
 se face o translatare de adrese de tip PAT pe adresa sursă; adresa sursă a pachetului va fi modificată la una din intervalul specificat prin opţiunea -to-source; cu aceeaşi opţiune se poate specifica şi intervalul în care se va alege portul sursă când se face translatarea de adrese; această ţintă este valid numai în lanţul POSTROUTING (şi lanţurile chemate din acest lanţ
   DNAT
 se face o translatare de adrese de tip PAT pe adresa destinaţie; adresa destinaţie a pachetului va fi modificată la una din intervalul specificat prin opţiunea -to-destination; această ţintă este validă numai în lanţurile PREROUTING şi OUTPUT (şi lanţurile chemate din acest lanţ
   MASQUERADE
 echivalent cu SNAT; adresa sursă va fi înlocuită cu adresa asignată interfeţei pe care va fi trimis pachetul; trebuie folosită în loc de SNAT dacă adresa la care se face translatarea este asignată dinamic
 REDIRECT
 redirectează pachetul local pe portul specificat de opţiunea -to-port; acest target este valid numai în lanţurile PREROUTING şi OUTPUT
 Tabela mangle este folosită pentru a modifica pachetele într-un mod mai special. NAT modifică doar adresele dintr-un pachet. Tabela mangle poate fi folosită pentru a schimba informaţii precum TTL, TOS, sau pentru a marca un pachet. Marcarea pachetelor este folosită doar în interiorul ruterului. Odată ce un pachet părăseşte ruterul, informaţiile adăugate la marcare vor fi îndepărtate. În prezent marcarea pachetelor este folosită de către sistemul de Quality of Service (QoS).
 Există două lanţuri predefinite:
 
 
 PREROUTING
 modifică pachetele imediat ce ele au intrat în ruter, înainte de rutare
 OUTPUT
 modifică pachetele generate de ruter, înainte de rutare
 Ţintele valide includ ACCEPT, DROP, QUEUE, REJECT, LOG precum şi:
 
 MARK
 marchează pachetul cu valoarea specificată prin opţiunea -set-mark
 TOS
 setează câmpul de type of service la valoarea specificată prin opţiunea -set-tos
 TTL
 setează câmpul TTL la valoarea specificată prin opţiunea -ttl-set, decrementează valoarea acestuia (dacă se foloseşte opţiunea -ttl-dec) sau incrementează valoarea acestuia (dacă se foloseşte opţiunea -ttl-inc)
 
 
 Reguli
 
 ipchains -t table -A chain packet -j target
 adaugă o noua regulă în tabela table, lanţul chain unde packet reprezintă o serie de opţiuni ce identifică o clasă de pachete, iar target reprezintă ţinta
 ipchains -t table -D chain rule_no
 şterge regula cu numărul rule_no (numerotarea începe de la 1) din tabela table
 ipchains -t table -R chain rule_no packet -j target
 înlocuieşte regula cu numărul rule_no cu una nouă definită prin packet şi target din tabela table
 ipchains -t table -I chain rule_no packet -j target
 inserează o nouă regulă în tabela table pe poziţia rule_no definită prin packet şi target
 
 Lanţuri (chains)
 
 Utilizatorul poate crea/şterge/modifica lanţuri proprii:
 
 
 ipchains -t table -N nume_lanţ
 crează un nou lanţ în tabela table
 ipchains -t table -X nume_lanţ
 şterge lanţul creat anterior de utilizator în tabela table
 Fiecare lanţ predefinit are o politică implicită. Aceasta poate fi setată cu
 
 ipchains -t table -P target
 unde target poate lua una din valorile enumerate mai sus în secţiunea table
 
 Identificare pachet
 
 Pachetul poate fi identificat după adresa sursă, adresa destinaţie, tipul pachetului, portul (TCP, UDP) sau tipul mesajului (ICMP), interfaţa pe care intră/iese pachetul, dacă este fragment dintr-un pachet, dacă este pachet care iniţiază o conexiune (TCP). Opţiunile folosite pentru identificarea unui pachet sunt următoarele:
 
 
 ! argument
 este folosit pe post de negaţie (sau toate în afară de argument)
 -p [!] protocol
 identică protocolul şi poate lua una din valorile: icmp, tcp, udp
 -s [!] address[/mask] [!] [icmp_type_no | [port][:port]]
 adresa sursă
 -d [!] address[/mask] [!] [icmp_type_no | port][:port]]
 adresa destinaţie
 -icmp-type icmp_name
 specifică tipul mesajului icmp; acesta poate fi: destination-unreachable, port-unreachable, echo-request, echo-reply; pentru a afla toate tipurile suportate executaţi comanda iptables -p icmp -h
 -destination-port port
 portul destinaţie
 -source-port port
 portul sursă
 -i [!] interface_name[+]
 numele interfeţei de unde vine pachetul (ppp0, eth1, etc.); + poate fi folosit pe post de wildcard
 -o [!] interface_name[+]
 numele interfeţei pe unde iese pachetul (ppp0, eth1, etc.); + poate fi folosit pe post de wildcard
 [!] -f
 acest pachet este fragment
 [!] -syn
 pachet ce iniţiază o conexiune
 -mac-source [!] mac-address
 adresa MAC sursă a pachetului
 -limit rate/time
 face match numai pe primele rate pachete pe secundă, minut, oră după cum s-a specificat în time
 -mark value[/mask]
 face match pe pachetele care sunt marcate cu valoarea value (după ce în prealabil s-a făcut un şi logic cu mask)
 -uid-owner uid
 face match pe pachetele generate local de către userul uid
 -gid-owner gid
 face match pe pachetele generate local de către userii din grupul gid
 -pid-owner pid
 face match pe pachetele generate local de către procesul pid
 -sid-owner sid
 face match pe pachetele generate local de către procesele ce fac parte din grupul de sesiune sid
 -state INVALID|ESTABLISHED|NEW|RELATED
 se foloseşte mecanismul de connection tracking pentru a determina dacă pachetul face parte dintr-o conexiune care se iniţiază (NEW), o conexiune care este deja stabilită (ESTABLISHED), o conexiune care se iniţiază dar are legătură cu o conexiune deja activă (RELATED) sau o conexiune care nu face parte din nici una din categoriile enumerate
 
 Liste de acces
 
 Pentru a configura filtrarea de pachete de rutere CISCO este necesar să efectuăm doi paşi: să definim o listă de acces şi să o aplicăm pe una sau mai multe interfeţe.
 
 Listele de acces definesc regulile după care se filtrează pachetele. Listele de acces sunt de două tipuri: liste standard şi liste extinse. Fiecare listă de acces cuprinde una sau mai multe reguli şi are asociată un număr întreg ca identificator. Acest identificator va fi folosit la aplicarea listelor de acces pe interfeţe. Ruterele Cisco ştiu să facă filtrare de pachete pe mai multe protocoale. Identificatorul listei de acces va specifica pentru ce protocol construim lista de acces, precum şi dacă lista este una standard sau extinsă conform tabelului de mai jos:
 
 Crearea listelor de acces se face din modul de configurare global şi necesită ca utilizatorul să aibă drepturi de supervisor. După crearea listelor de acces, acestea trebuie aplicate. Bineînţeles că şi aplicarea listelor de acces necesită drepturi de supervisor. Listele de acces se pot aplica pe oricare din interfeţele ruterului, pe intrare sau pe ieşire, folosind din modul de configurare al interfeţei comanda:
 
 
 protocol access-group id-lista { in | out }
 unde:
 
 protocol
 poate fi ip, ipx, etc
 id-lista
 identificatorul listei de acces
 out
 lista de acces se aplică pentru pachetele care ies pe interfaţă (ATENŢIE: nu se face filtrare pe pachetele generate local de ruter)
 in
 lista de acces se aplică pentru pachetele care intră pe interfaţă
 
 Liste de acces standard
 
 Comanda cu care se adaugă o regulă la o anumită listă de acces are forma:
 
 
 access-list id-lista { permit | deny } sursă [ wildcard-sursă ]
 [ log ]
 În comanda de mai sus, access-list, permit, deny şi log sunt cuvinte rezervate, iar prin sursă şi wildcard-sursă se specifică clasa de hosturi. Semnificaţia lor este următoarea:
 
 access-list
 adăugarea la lista de access id-lista a regulii ce urmează
 permit
 specifică că toate pachetele ce fac match pe regula vor fi lăsate să treacă
 deny
 specifică că toate pachetele ce fac match pe regulă vor fi ignorate
 log
 generează un mesaj în log în care se specifică ce pachet a fost acceptat/rejectat
 sursa
 adresa sursă a pachetelor cu care se face match pe regulă
 wildcard-sursa
 un şir de biţi care ne indică ce biţi din adresa sursă a pachetelor vor fi comparate cu sursa; biţii de 1 specifică faptul că bitul de pe aceeaşi poziţie din adresa sursă a pachetului va fi ignorat; se pot folosi cuvintele cheie host sau any ca prescurtări
 
 Exemplu: (lăsăm sa treacă traficul numai de la 141.85.0.0/16 şi 141.86.99.1)
 
 access-list 1 permit 141.85.0.0 0.0.255.255
 access-list 1 permit host 141.86.99.1
 
 access-list 1 deny any
 
 Liste de acces extinse
 
 Sintaxa pentru liste de acces extinse are forma:
 
 
 access-list id-lista { permit | deny } protocol sursă
 [ wildcard-sursă  [ destinatie [ wildcard-destinaţie ] ] ]
 [ operator operand-sursă [ operator operand-desţinatie ] ]
 [ established ]
 În listele de acces extinse access-list, permit, deny au acelaşi rol ca şi în liste de acces standard.
 
 protocol
 specifică protocolul pentru care se face filtrarea de pachete; poate fi ip, tcp, udp, icmp, gre, igrp etc.
 sursă
 adresa sursă a pachetelor care fac match pe regulă
 destinaţie
 adresa destinaţie a pachetelor care fac match pe regulă
 wildcard-sursă
 are aceaşi semnificaţie ca şi la listele de acces standard
 wildcard-destinaţie
 analog cu wildcard-sursă
 operator
 poate fi unul din cuvintele cheie lt, gt, eq, neq (mai mic decât, mai mare decât, egal, diferit)
 operand
 un număr de port valid pentru protocolul specificat
 established
 se face match pe regulă dacă pachetul face parte dintr-o conexiune deja stabilită; este utilizabil numai pentru protocolul tcp
 
 Exemplu (lăsăm sa treacă numai pachetele de telnet si web)
 
 access-list 100 permit tcp any any any 20
 access-list 100 permit tcp any any any 80
 
 access-list 101 permit tcp any any established
 
 Liste de acces cu nume
 
 Există şi posibilitatea identificării listelor de acces prin nume, caz în care trebuie să se specifice tipul listei de acces:
 
 
 protocol access-list { extended | standard } nume-listă
 { permit | deny } ...
 Folosirea listele de acces cu nume are câteva avantaje importante faţă de folosirea listelor de acces fără nume:
 
 identificarea listelor de acces se face mai uşor de către utilizatori
 pot fi definite mai mult de 99/100 de liste de acces simple/extinse
 din listele de acces cu nume se pot şterge reguli sau adăuga
 Nu pot însă exista două liste de acces cu acelaşi nume, chiar dacă nu sunt de acelaşi tip (simple/extinse).
 
 Liste de acces reflexive
 
 Listele de acces reflexive sunt folosite atunci când se doreşte deschiderea de găuri în firewall în mod dinamic. Configurarea listelor de acces se face în trei etape:
 
 
 crearea unei liste în care se salvează intrări despre conexiunile create şi permise
 agregarea listei respective la o listă de acces
 setarea perioadei de timp după care o conexiune este Ethernetderată închisă dacă nu se generează trafic
 În general listele de acces reflexive se folosesc pentru a lăsa în afară un anumit tip de pachete iar în interior numai reply-uri de la acele pachete. Practic, se urmăresc aceleaşi beneficii date de o filtrare stateful inspection, cu un overhead mult mai mic. Bineînţeles că această abordare nu funcţionează decât pentru anumite protocoale.
 
 Definirea listei reflexive
 
 access-list extended nume-listă { permit | deny } protocol sursă
 [ wildcard-sursă [ destinaţie [ wildcard-destinaţie ] ] ]
 [ operator operand-sursă [ operator operand-destinaţie ] ]
 reflect nume timeout [ secunde ]
 Reflectările pachetelor pe care se face match din regula specificată vor fi introduse în lista nume. Se vor genera intrări în listă numai dacă se face match pe pachete şi numai dacă nu s-a făcut match pe alte reguli definite înaintea regulii care face reflect. Timeoutul conexiunii este setat la secunde secunde.
 
 Agregarea listei reflexive la o lista de acces
 
 protocol access-list extended nume-listă-acces evaluate
 nume-listă-reflexivă
 Se vor introduce în nume-listă-acces intrările din lista nume-listă-reflexivă. Se păstrează toate proprietăţile intrărilor din lista reflexivă (adică pot fi adăugate dinamic noi intrări sau şterse intrări din lista de acces nume-listă-acces)
 
 Setarea valorii de timeout a unei conexiuni
 Setarea timeoutului pentru conexiune se poate specifica pentru fiecare listă reflexivă la crearea acesteia. Dacă nu se specifică un timeout, atunci este setat un timeout implicit (300 de secunde). Acest timeout se poate schimba în orice moment cu ajutorul comenzii:
 
 
 protocol reflexive-list timeout seconds
 
 Exemplu (permite numai trafic de www si icmp pe internet)
 
 interface Serial 0
 description Access to the Internet via this interface
 
 ip access-group inboundfilters in
 
 ip access-group outboundfilters out
 
 !
 
 ip reflexive-list timeout 120
 
 !
 
 ip access-list extended outboundfilters
 
 Utilitarul tcpdump
 
 Tcpdump este un utilitar destinat monitorizării traficului în reţea şi achiziţionării de date. A fost iniţial dezvoltat de un grup de cercetare în cadrul Lawrence Berkeley National Laboratory al Universităţii din California în iunie 1992.
 
 După cum se ştie plăcile de reţea, cum sunt cele Ethernet, capturează la nivelul data-link doar frame-urile adresate lor sau cele de broadcast. De aceea pentru a captura toate frame-urile, tcpdump trebuie să treacă interfaţa într-un mod special de lucru, numit promiscuous mode. Pentru aceasta are însă nevoie de suportul sistemului de operare, în prezent existând suport pentru sistemele bazate pe 4.4BSD, BSD/386, SunOS, Ultrix şi HP-UX.
 
 Cel mai simplu mod de a începe monitorizarea este invocând comanda:
 
 
 [ :]# tcpdump
 
 tcpdump: listening on eth0
 
 
 14:45:09.252803 frodo.noi.39993 > 64.12.30.90.5190: P 444608787:444608793(6)
 
 
 ack 1453900500 win 32893 (DF)
 
 
 14:45:09.254097 frodo.noi.33335 > main.noi.domain:  16713+ PTR? 90.30.12.64.
 
 
 in-addr.arpa.(42) (DF)
 
 
 14:45:09.254583 main.noi.domain > frodo.noi.33335:  16713 NXDomain 0/1/0 (113)
 
 
 (DF)
 
 
 Să urmărim o analiză sumară a output-ului de mai sus:
 
 14:45:09.252803 - timpul în care pachetul TCP a intrat în reţeaua locală (nu face parte din pachet)
 frodo.noi.39993 - sursa şi portul sursă
 64.12.30.90.5190 - destinaţia şi portul destinaţie
 P, ack 1453900500, DF - proprietăţi TCP
 444608787:444608793(6) - intervalul numerelor de secvenţă, urmat de numărul de octeţi din interval
 win 32893 - dimensiunea ferestrei pe care sursa e capabilă să o accepte
 Pentru a vedea şi conţinutul pachetului utilizăm flagul -x:
 
 :# tcpdump -c1 -x
 
 tcpdump: listening on eth0
 
 
 18:38:51.087244 64.12.24.48.5190 > frodo.noi.32777: P 3127656695:3127656809(114)
 
 
 ack 3009470569 win 16384 (DF) [tos 0x80]
 
 
 4580 009a c7a1 4000 6406 354d 400c 1830
 
 
 c0a8 000b 1446 8009 ba6c 40f7 b360 e069
 
 
 5018 4000 1f0d 0000 2a02 20dc 006c 0003
 
 
 000b 0000 87d9 0d61 0836 3032 3033 3631
 
 
 3400 0000 0700 0100 0200 7000 0c00 2500
 
 
 0000
 
 
 6 packets received by filter
 
 
 0 packets dropped by kernel
 
 
 :#
 
 
 Conform structurii unui pachet IP, primii 20 octeţi (4580 009a c7a1 4000 6406 354d 400c 1830 c0a8 000b) reprezintă antetul IP iar următorii 20 de octeţi (1446 8009 ba6c 40f7 b360 e069 5018 4000 1f0d 0000) reprezintă antetul TCP.
 Putem verifica câteva dintre aceste numere: A doua jumătate al celui de-al 5-lea număr (6406), 06, reprezintă protocolul încapsulat în pachetul IP, în cazul nostrul TCP (adică 6). Numerele 9 şi 10 ar trebui să codifice adresa destinaţie. Dacă transformăm c0a8 000b în baza 10 obţinem 192.168.0.11 adică exact adresa lui frodo.noi.
 
 În ceea ce priveşte antetul TCP, primii 2 octeţi (1446), transformaţi în baza 10 reprezintă exact portul sursă ( ).
 
 După capturarea pachetelor tcpdump va afişa două contoare:
 
 
 Numărul de pachete recepţionat de filtru - dacă la rularea lui tcpdump s-a specificat un filtru în linia de comandă, se vor număra fie pachetele care trec de filtru fie toate pachetele care ajung la filtru, în funcţie de sistemul de operare (şi posibil de configurarea acestuia).
 Numărul de pachete ignorate de kernel - pachete la care sistemul de operare a renunţat datorită lipsei de spaţiu în buffere, dacă sistemul de operare este capabil să returneze acest număr; dacă nu, se va raporta 0.
 Câteva opţiuni utile:
 
 Referitoare la comportament:
 
 -i - specifică interfaţa de la care se capturează; dacă nu se specifică nimic se va alege cea cu numărul cel mai mic, excluzându-se interfaţa de loopback.
 Exemplu: # tcpdump -i eth0
 
 
 -c - se opreşte după recepţionarea unui anumit număr de pachete.
 Exemplu: # tcpdump -c10 (recepţioneză 10 pachete)
 
 
 -s - specifică numărul de octeţi ce se capturează din fiecare pachet; implicit se capturează 68 octeţi
 Exemplu: # tcpdump -s100 (capturează câte 100 octeţi)
 
 
 Referitoare la ce informaţii din pachet se vor afişa:
 
 -e - afişează adresele MAC/Ethernet
 -x - afişează conţinutul pachetului în hexa (un număr de octeţi egal cu minimul dintre dimensiunea pachetului şi cel specificat cu opţiunea -s).
 -q - quiet; util dacă nu se doresc informaţii multe.
 -v - verbose; afişează informaţii de identificare, TTL şi lungimea totală a pachetului; în plus verifică integritatea pachetului utilizând sumele de control ale antetelor IP şi TCP.
 -vv - very verbose; se vor afişa şi mai multe informaţii
 Referitoare la tipul de trafic ce se capturează:
 Se pot stabili filtre pe bază de:
 
 
 adresă de nivel 3
 Sintaxa generală:
 
 
 # tcpdump host nume_host
 
 # tcpdump dst host nume_host
 
 
 # tcpdump src host nume_host
 
 
 Exemplu:
 
 pentru afişarea întregului trafic al hostului frodo:
 
 
 # tcpdump host frodo
 
 pentru afişarea întregului trafic cu destinaţia frodo
 
 
 # tcpdump dst host frodo
 
 adresă de nivel 2
 Sintaxa generală:
 
 
 # tcpdump ether host adresa_ethernet
 
 # tcpdump ether dst host adresa_ethernet
 
 
 # tcpdump ether src host adresa_ethernet
 
 
 Exemplu:
 
 traficul în care 00:30:84:3C:0E:4A apare ca destinaţie
 
 
 # tcpdump ether src host 00:30:84:3C:0E:4A
 
 adresă de reţea
 Sintaxa generală:
 
 
 # tcpdump net adresă_reţea
 
 # tcpdump dst net adresă_reţea
 
 
 # tcpdump src net adresă_reţea
 
 
 # tcpdump net adresă_reţea mask mască
 
 Exemplu:
 
 pentru traficul în care apare reţeaua 192.168.0.11/24
 
 
 # tcpdump net 192.168.0.11 mask 255.255.255.0
 
 protocol:
 Se pot face referiri prin nume pentru protocoalele icmp, icmp6, igmp, igrp, pim, ah, esp, vrrp, udp, tcp. Restul de protocoale trebuie să fie specificate direct prin numere (a se vedea /etc/protocols).
 
 Sintaxa generală:
 
 
 # tcpdump ip protocol număr_protocol_ip
 
 # tcpdump ether protocol număr_protocol_ethernet
 
 
 # tcpdump ip broadcast
 
 
 # tcpdump ether broadcast
 
 
 Exemplu:
 
 afişează pachetele ICMP
 
 
 # tcpdump icmp
 
 pentru pachetele IP cu protocolul numărul 6 (TCP)
 
 
 # tcpdump ip proto 50
 
 salvează într-un fişier câte 300 de bytes din primele 100 de pachete UDP sosite pe interfaţa eth0
 
 
 # tcpdump -c 100 -i eth0 -s 300 -w udp1000.dump udp
 
 port:
 Sintaxa generală:
 
 
 # tcpdump port număr_port
 # tcpdump dst port număr_port
 
 # tcpdump src port număr_port
 
 Oricare dintre cele 3 situaţii poate fi precedată de cuvintele cheie tcp sau upd pentru filtrarea pachetelor corespunzătoare.
 
 Exemple:
 
 
 afişarea pachetelor TCP cu portul sursă 232
 
 # tcpdum tcp src port 23
 caracteristicile pachetului
 Sintaxa generală:
 
 
 # tcpdump expresie relaţie expresie
 Unde relaţie poate fi unul din operatorii relaţionali:  iar expresie este o expresie în care pot apărea constante întregi, operatori binari (+, -, *, /, &, ), operatorul de lungime (length) şi un operator special de acces la datele din interiorul pachetului, cu sintaxa:
 proto [ expr : size ], unde
 
 
 proto poate fi ether, fddi, tr, ip, arp, rarp, tcp, udp, icmp sau ip6
 expr este deplasamentul în octeţi al câmpului accesat
 size dimensiunea în octeţi a câmpului dorit (opţional)
 Exemple:
 
 
 va afişa toate pachetele ICMP deoarece protocolul este specificat în octetul numărul 9 din pachetul IP (numerotate de la 0), iar valoarea corespunzătoare protocolului ICMP este 1.
 
 
 # tcpdump "ip[9]=1''
 
 pentru tot traficul de multicast
 
 
 # tcpdump "ether[0] & 1 != 0"
 
 Unele dintre câmpuri pot fi accesate direct prin nume: icmptype, icmpcode, tcpflags. De asemenea, flagurile TCP pot fi utilizate şi ca: tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-push, tcp-ack, tcp-urg.
 
 combinaţii ale variantelor de mai sus
 Se pot utiliza combinaţii ale variantelor de mai sus împreună cu operatorii de negaţie ( sau ), şi ( sau ), sau ( sau ).
 
 Exemple:
 
 
 se capturează într-un fişier tot traficul mai puţin cel de SSH între maşinile frodo şi athos.
 
 # tcpdump -w tracefile not "(port 22 and host frodo and host athos)"
 Referitoare la formatul de afişare:
 
 -a - forţează rezolvarea numelor (implicit)
 -n - elimină rezolvarea numelor
 -t - elimină informaţiile despre timp
 -tt - nu formatează informaţiile despre timp
 -ttt - afişează timpul ca lună şi zi
 Pentru un pachet TCP afişarea se face în general în următorul format:
 
 src > dst: flags date-seqno ack window urgent options
 src - adresa sursă şi portul sursă
 dst - adresa destinaţie şi portul destinaţie
 flags - o combinaţie de S (SYN), F (FIN), P (PUSH), R (RST) sau punct . dacă nici un flag nu este setat
 data-seqno - specifică intervalul numerelor de secvenţă ale datelor din pachet
 ack - numărul de secvenţă aşteptat
 windows - dimensiunea ferestrei pe care sursa o poate accepta
 urgent - există date urgente în pachet
 options - opţiuni TCP sub forma  (ex: mss 1024)
 
 permit tcp any any any 80 reflect wwwtraffic
 
 permit icmp any any
 
 deny ip any any
 
 !
 
 ip access-list extended inboundfilters
 
 permit icmp any any
 
 evaluate wwwtraffic
 
 deny ip any any
 
 !
 
 
 
 Implementarea salvează într-o tabelă pachetele reflectate ale unei reguli de reflectare. Intrările din aceste liste au următoarele proprietăţi:
 
 
 sunt temporare (expiră după o anumită perioadă
  şi sunt întotdeauna de tipul permit protocolul este acelaşi ca al pachetului reflectat
 adresele sursă şi destinaţie sunt aceleaşi ca cele ale pachetului reflectat, dar inversate (adresa sursă devine adresă destinaţie şi viceversa)
 dacă există porturi, acestea sunt aceleaşi ca ale ale pachetului reflectat, dar inversate (portul sursă devine port destinaţie şi viceversa)
 dacă este detectat un pachet de închidere al conexiunii intrarea va fi ştearsă din tabelă
 dacă nu se generează trafic pe conexiune un anumit timp intrarea va fi ştearsă
 
 Vom prezenta în continuare un exemplu de firewall foarte simplu:
 
 
 #!/usr/bin/bash
 
 IP_ADDRESS=141.85.128.75
 
 
 IPTABLES=/usr/sbin/iptables
 
 
 $IPTABLES -F
 
 
 $IPTABLES -P INPUT DROP
 
 
 $IPTABLES -A INPUT -i lo -j ACCEPT
 
 
 $IPTABLES -A INPUT -d $IP_ADDRESS -p tcp -dport 22 -j ACCEPT
 
 
 $IPTABLES -A INPUT -d $IP_ADDRESS -p tcp -dport 80 -j ACCEPT
 
 
 $IPTABLES -A INPUT -s 192.129.4.6 -d $IP_ADDRESS -p tcp -dport 25 -j ACCEPT
 
 
 $IPTABLES -A INPUT -s 141.85.37.12 -d $IP_ADDRESS -p tcp -dport 3306 -j ACCEPT
 
 
 $IPTABLES -A INPUT -s 141.85.157.10 -d $IP_ADDRESS -p tcp -dport 3306 -j ACCEPT
 
 
 $IPTABLES -A INPUT -s 141.85.128.61 -d $IP_ADDRESS -p tcp -dport 113 -j ACCEPT
 
 
 $IPTABLES -A INPUT -m state -state ESTABLISHED -d $IP_ADDRESS -j ACCEPT
 
 
 $IPTABLES -A INPUT -m state -state RELATED -d $IP_ADDRESS -j ACCEPT
 
 
 $IPTABLES -A INPUT -p icmp -j ACCEPT
 
 
 |  |