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
|
|