Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 07/04/14 in all areas

  1. In acest tutorial se prezinta cateva mijloace prin care se poate limita impactul atacurilor de tip SYN flood. Un numar de utilitare este necesar apriori: vnstat Acesta este un utilitar folosit in scopul monitorizarii latimi de banda(bandwith) utilizate. htop Este o varianta detaliata a utilitarului top si permite monitorizarea tuturor resurselor sistemului(CPU,RAM, bandwith usage) la un nivel de granularitate mult mai ridicat tcpdump este inclus in lista cu toate ca este incorporat in majoritatea distributiilor Linux. tcpdum permite monitorizarea traficului de retea, pe orice interfata intr-un mod usor de organizat de catre procesoarele de text(easy to grep) rmmod Acesta permite detasarea(stergerea) unui modul din kernel-ul Linux. In trecut Linux folosea kernel-uri monolitice; adaugarea unei noi functionalitati necesita compilarea intregului kernel. In prezent kernel-ul are o structura modulara, fiecare modul poate fi compilat in parte si adaugat ulterior in kernel-ul existent. Se castiga astfel timp si eficienta in design software(dezvoltatorii nu mai trebuie sa fie familiarizati cu intreaga functionalitate a kernel-ului) modprobe Acesta permite adaugarea si inlaturarea de module kernel ethtool Acesta returneaza informatii privind interfetele de retea Pentru instalarea utilitarelor rulam: sudo sh -C "apt-get install vnstat;apt-get install htop;apt-get install tcpdump;apt-get install rmmod;apt-get install modprobe;apt-get install ethtool" Acum putem implementa urmatoarele strategii de prevenire: Ce este un atac SYN flood? Moduri de detectare Activarea syncookie-urilor Folosirea de cozi implementate in hardware(hardware queues) Folosirea RPS (Received Packet Steering) iptables 1. Ce este un atac SYN flood? Moduri de dectare Atacul SYN flood este o metoda denial-of-service(DoS) care afecteaza statiile care ruleaza procese(aplicatii/servicii/daemoni) TCP de tip server. Acesta are la baza starea de asteptare, implementata in protocolul TCP, in urma primirii unui pachet cu fanionul SYN setat, transmis catre un port aflat in stare de ascultare(LISTEN). Un atacator poate exploata acest lucru prin initierea consecutiva a unui numar ridicat de conexiuni incomplete, aflate in asteptare, astfel incat server-ul(tinta) nu mai poate initia alte legaturi valide. Mai multe detalii pot fi gasite in RFC4987. Atacul este relativ dificil de prevenit, unul din motivele pentru care are un ridicat grad de popularitate/raspandire. Motivele sunt, in mare, urmatoarele: Se foloseste de pachete cu adrese IP sursa arbitrare, care nu pot fi blocate(putem bloca clienti legitimi) fiind specifice fiecarui pachet trimis Consuma un numar redus din resursele atacatorului si un numar mare din cele ale victimei Mecanismul de prevenire este relativ complex si necesita timp pentru intelegere si implementare In timpul unui atac SYN, atacatorul deschide numeroase conexiuni catre server insa acestea nu sunt incheiate conform implementarii TCP. Starea fiecarei astfel de conexiuni va ramane in SYN_RECV(server-ul asteapta clientul sa termine conexiunea; sa primeasca un pachet cu fanioanele SYN/ACK setate si ulterior sa trimita un pachet cu fanionul ACK setat). Putem numara conexiunile in asteptare ruland: sudo netstat -anutp | grep SYN_RECV | wc -l Daca numarul este mai mare ca si 40 sunt sanse destul de ridicate sa fim victima unui atac. Metoda de mai sus nu este totusi recomandata de a fi folosita in script-uri deoarece poate consuma resurse de procesare semnificative. Putem monitoriza consumul latimii de banda folosind vnstat in felul urmator: sudo vnstat -l -i eth0 htop poate fi, de asemenea, folosit pentru monitorizarea resurselor sistemului: htop Pentru a vedea itnreruperile in sistem apasam F2, navigam la "Display options" dupa care selectam "Display threads in a different color". Intreruperile vor fi afisate in roz. Cu utilitarul tcpdump putem monitoriza toate pachetele receptionate: sudo tcpdump -i eth0 -nn 'tcp port 80' and 'tcp[13] == 2' -c 250 Secventa de mai sus afiseaza primele 250 de pachete TCP care au portul destinatie 80 de pe interfata eth0. Un lucru important de retinut in privinta pachetelor este faptul ca acestea sunt receptionate la intervale de timp neregulate; daca am crea un grafic asociat traficului nu am observa numai valori maxime ci alternante neregulate intre valoarea maxima si o valoare mai mica ca si aceasta. 2. Activarea syncookie-urilor syncookie-urile sunt un mod de a alege initial numerele de secventa TCP de catre server-ele TCP. Folosirea lor permite ca un server sa nu refuze conexiuni atunci cand coada SYN(SYN queue) este utilizata in intregime. Server-ul percepe coada ca fiind extinsa. Acesta trimite inapoi clientului raspunsul SYN/ACK insa nu adauga o intrare in coada SYN. Daca server-ul receptioneaza un pachet ACK ulterior atunci acesta capabil sa reconstruiasca coada SYN pe baza informatiilor incluse in numarul de secventa TCP(TCP sequence number). Pentru a verifica daca syncookies este activat rulam: sysctl -n net.ipv4.tcp_syncookies sau cat /proc/sys/net/ipv4/tcp_syncookies Pentru a activa syncookies executam: sudo vim /etc/sysctl.conf sau sudo gedit /etc/sysctl.conf dupa care adaugam linia: net.ipv4.tcp_syncookies = 1 Salvam fisierul si rulam: sysctl -p pentru a aplica modificarea. 3. Folosirea de cozi implementate in hardware(hardware queues) Pentru a facilita prevenirea atacului SYN este recomandata imbunatatirea driver-ului NIC(Network Inerface Card). Cand un fragment de date ajunge prin cablu sau unde radio, in NIC, se executa o intrerupere sistem care comanda procesorului sa opreasca activitatea curenta si sa analizeze fragmentul(pachetul) receptionat. Insa, daca fiecare frame ar face acest lucru atunci orice transfer prin retea ar genera latente semnificative. Astfel, aceste intreruperi sunt structurate intr-o coada(queue, coada este o structura de tip LIFO, last-in-first-out. Cu alte cuvinte pachetele ajunse sunt stocate in spatele cozii iar cele care sunt de ja in coada sunt procesate incepand cu primul), care este livrata unitatii de procesare(CPU) deodata. Acest lucru are loc intre 200 si 1000 de ori pe secunda, in functie de cronometrul sistemului de operare. Cu cat acesta are o perioada mai redusa cu atat CPU-ul are mai mult de procesata(coada este transmisa mai rar si cu un nr. mai mare de elemente). Majoritatea calculatoarelor din prezent au mai multe unitati de procesare(Multicore CPUs). Deoarece, fiecare este un procesor in sine, trebuie sa distribuim numarul de intreruperi intr-un mod echilibrat intre acestea. Exista doua mijloace: Folosirea cozilor hardware(hardware queues). NIC-urile moderne au numeroase cozi de intrerupere, intre 4-16. Pe Linux, acestea sunt dezactivate in mod implicit. Trebuiesc activate pentru a uzita intrega capacitate a unitatilor de procesare(CPU cores) Cea de a doua metoda este prin RPS(Receive Packet Steering). Este un mecanism relativ nou care distribuie in mod automat intreruperile intre toate core-urile, neavand importanta prezenta cozilor hardware(acestea pot fi fie una singura fie un grup de cozi hardware). Aceasta metoda este recomandata doar daca numarul de cozi al NIC-ului este mai mic decat cel al core-urilor. Aceasta sectiune trateaza cozile hardware, metoda RPS fiind dezvoltata in sectiunea urmatoare. Primul pas consta in aflarea driver-ului de retea(NIC driver), a modelului NIC si a fabricantului: sudo ethtool -i eth0 Acum trebuie sa instalam ultima versiune pentru respectivul NIC. Trebuiesc instalate ultimele driver-e; se gasesc in mod normal pe site-ul producatorului. Acestea trebuiesc, de regula compilate in diverse module. Acestea necesita codul sursa ale unor module kernel, care trebuiesc instalate apriori. Etapa aceasta depinde de hardware-ul fiecarei statii. Acum cozile hardware trebuiesc configurate. Pentru aceasta trebuiesc consultate documentatia NIC-ului(acesta poate varia intr-o masura semnificativa de la o statie la alta). De exemplu, pentru un igb(Intel Driver) cu 8 cozi vom rula: sudo rmmod igb sudo modprobe igb QueuePairs=1,1,1,1 RSS=8,8,8,8 IntMode=3,3,3,3 InterruptThrottleRate=3000,3000,3000,3000 Acum trebuie sa distribuim intreruperile pe mai multe procesoare. Trebuie sa gasim care numere de intreruperi sunt folosite de NIC-ul nostru: sudo cat /proc/interrupts | grep eth0 In exemplul de mai sus am folosit interfata eth0. Aici se pot observa toate numerele intreruperilor folosite de NIC si modul in care sarcina este distribuita. Retineti aceste numere. Trebuie modificat afinitatea SMP pentru a distribui respectivele intreruperi in mod secvential pe unitati de procesare. De exemplu, intreruperea 1 este executata pe core 1, intreruperea 2 pe core 2, s.a.m.d. Putem realiza acest lucru ruland: sudo echo 1 > /proc/irq/xx/smp_affinity Dupa testarea configuratiei o plasam in /etc/rc.local pentru a rula la fiecare bootare. 4. Folosirea RPS (Received Packet Steering) Pentru a activa RPS rulam: sudo echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus Trebuiesc selectate interfetele in uz, in situatia in care eth0 nu este folosita, si toate cozile pe care interfetele le suporta. 5. iptables In cazul in care atacul nu se bazeaza pe IP-spoofing, adresa atacatorului fiind astfel cunoscuta putem apela la iptables pentru a bloca pachetele nedorite. Un exemplu de reguli iptables este ilustrat aici: sudo iptables -A INPUT -p tcp -m state --state NEW -m recent --update --seconds 60 --hitcount 30 -j DROP sudo iptables -A INPUT -p tcp -m state --state NEW -m recent --set -j ACCEPT Regulile de mai sus limiteaza numarul de cereri SYN de la o singura adresa IP la 30 pe minut. Nu este recomandat sa folositi aceasta regula intrucat este posibil sa blocati un grup de utilizatori situati in spatele unui NAT(Network to Address Translation, un router).
    1 point
  2. dea se poate scrie si in maxim 6 lini dar imi e lene daca iam pus si o keye ajung la 7 lini sub create { my $tostr = $_[0]; my @t = (4, 32, 128); my $return = ""; for(my $i=0; $i<length($tostr); $i++) { $hx = substr($tostr, $i, 1); $hxr = chr(ord($hx) + ($t[2]-$t[1]>ord($hx)?32:64) - ($t[0]**(($i%2==0)?2:1))*2); $return .= &strtohex(ord($hxr)); } return $return; } PERL (Crisalixx)
    1 point
  3. Ba da mai iesi in rasa matii cu scanneru tau, mai ai si tupeu sa zici ca ai facut nustiu ce si ca din greseala si pe pula mea. Auzi la el cica am lucrat 2 saptamani si a ramas linia aia, mars la cacat. Sa dea cineva ban si t/c ... @aelius . LE: Scz, later am vazut ca e banat, dati si t/c .
    1 point
  4. da-l ma draq nu-l mai baga in seama de el iti arde tie, keep up the good work si fa ce vrei public, cryptat sau ne-cryptat faci cum vrei tu e programu tu nu datorezi scuze nimanui cui nu-i place screw them and keep it up mie unu imi place
    -1 points
  5. Videochat cu curve romance cacaturi de promovare videochateiste,traseiste, in pula mea eliminatile Din cauza lor pot sa-mi PIERD prietena mancamiar pula de curve un mic ddos , sau avertisment sa se mute in pizda masi in america ca noi navem nevoie de asa ceva
    -1 points
×
×
  • Create New...