Mihai Sprinceana
Un forum de programare cu de toate. Va astept sa va inscrieti si sa deveniti moderatori. Oricine este binevenit aici sa se inscrie si sa aiba acces la informatie free! Fiecare este liber sa adauge proiecte programe free etc. Ajutati acest forum sa devina o comunitate puternica unde fiecare invata de la fiecare! Tot ce trebuie sa faceti este sa va inregistrati si fiecare contributie se poate dovedi utila in timp! Forumul este free informatia free dk aveti timp liber ajutati si pe ceilalti si invatati si voi in acelasi timp! Haideti sa facem ceva pt.a ne ajuta intre noi! Cititi regulament postare forum inainte de a posta!
Lista Forumurilor Pe Tematici
Mihai Sprinceana | Inregistrare | Login

POZE MIHAI SPRINCEANA

Nu sunteti logat.
Nou pe simpatie:
Alexanndra1994 pe Simpatie
Femeie
23 ani
Bucuresti
cauta Barbat
23 - 42 ani
Mihai Sprinceana / Retele / Securitatea in retelele de calculatoare Moderat de Houssey, andreeamp, costin1920, fireratbat, ozzywz4rd, profu.info, sade5000
Autor
Mesaj Pagini: 1
mihaispr
Administrator

Inregistrat: acum 17 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


pus acum 17 ani
   
Pagini: 1  

Mergi la