Spoof
Portscanning [astept sugestii pentru numele seriei] |
|||||
1. Disclaimer (inspirat cu nerusinare din The Phrack Magazine) Autorul (denumit in continuare ``EU'') a scris articolul acesta in scopuri pur informative. Toate informatiile prezentate in acest articol sunt (din cate stiu eu) adevarate si exacte. Pe cat posibil am incercat sa verific tot ceea ce am scris. Cu toate acestea, nu sunt omniscient (nu sunt nici macar platit). E foarte posibil ca ceva sa fie incorect intr-un fel sau altul, caz in care EU va roaga sa-i trimiteti un email ca sa-si poata corecta greseala. De asemenea, EU nu am nici o responsabilitate pentru lucrurile stupide (sau ilegale) pe care unii oameni le-ar putea face cu informatiile prezentate. 2. Copyright Articolul asta e copyright (c) 1999 Petru Paler (ppetru@coltronix.com). Poate fi redistribuit prin orice mijloace, cu conditia sa ramana nemodificat. Parti din el pot fi folosite in alte publicatii, cu conditia mentionarii sursei originale. De asemenea m-as bucura (deci nu e obligatoriu) sa aud critici/opinii/sugestii pe tema articolului. 3. Avertisment Am incercat sa prezint pe scurt unele dintre notiunile folosite. Cu toate astea, s-ar putea ca articolul sa fie un pic cam prea dificil. Asta e. Keep tryin' :) Era sa uit. Sunt sysadmin/programator, in nici un caz scriitor. Asa ca scuze pentru stilul mai putin literar. 4. Ce e de fapt portscanning-ul ? Portscanning-ul este o metoda prin care se poate afla (in scopuri informative, desigur) ce servicii ruleaza pe un calculator conectat la Internet. 5. Cum functioneaza ? [ explicatie despre
TCP UDP porturi servicii IP id] 6. Care e problema ? Metodele "clasice" de scanning (care vor fi probabil prezentate in numerele viitoare ale serialului) pot fi detectate destul de simplu (un program care face asta foarte bine este Abacus PortSentry[1]) dupa adresa sursa din conexiunile TCP. 7. Ce este un "spoof-scan" ? "to spoof" inseamna in engleza a falsifica, a schimba. La prima vedere am putea crede ca e posibil sa schimbam adresa sursa din pachetele TCP si ca va merge. Din pacate (sau din fericire) lucrurile nu stau tocmai asa. Ca sa vedem daca un anumit port este deschis trebuie sa primim un raspuns de la sistemul victima. Cum tocmai am schimbat adresa sursa, raspunsul nu va mai ajunge la noi niciodata. Situatia parea fara iesire, pana cand, pe 15 decembrie 1998, un tip numit antirez[5] a anuntat[2] pe lista Bugtraq ca a inventat o metoda de spoof-scan care functioneaza. 8. Cum functioneaza ? Metoda se bazeaza pe 3 "probleme" de implementare ale protocolului TCP/IP, probleme care apar in majoritatea sistemelor de operare existente: a) la primirea unui
pachet SYN se raspunde cu SYN|ACK daca portul e deschis sau cu RST|ACK
daca portul e inchis 9. Descrierea metodei La scan participa
3 calculatoare: Metoda: A monitorizeaza cu atentie numarul de pachete trimise de B, folosind IP id-ul. Din cauza faptului ca B nu primeste/trimite alte pachete in afara de cele de la A, id-ul creste cu 1 pentru fiecare pachet. In paralel, A trimite un pachet SYN catre C (pe portul X care trebuie verificat) cu adresa lui B in loc de sursa (astfel incat C nu isi poate da seama ca pachetul vine de fapt de la A). Apar doua situatii posibile: a) portul X de pe C este inchis, caz in care C va trimite un RST catre B, care il va ignora (vezi 8.c). B nu a trimis nici un pachet, lucru care poate fi observat prin monitorizarea IP id-ului. b) portul X de pe C este deschis. C va incerca sa continue procedura "3-way" de stabilire a conexiunii TCP si ii va trimite lui B un pachet SYN|ACK. B stie ca nu a trimis nici o cerere de conectare la C, asa ca raspunde cu RST. C vede RST-ul si renunta la conectare. Totul pare ok, *dar* B a trimis un pachet, lucru pe care A il observa (diferenta dintre ID-urile pachetelor este mai mare decat 1) 10. Cum se face practic ? Probabil ca sectiunea 9 nu e foarte explicita, asa ca sa vedem cu se face in practica. Materiale necesare: hping2[3] (sau hping
> 0.67, dar hping2 este recomandat) Mod de lucru: pe prima consola se monitorizeaza calculatorul B folosind comanda: # hping B -r (B este adresa IP a lui B) rezultatul va fi ceva de gen: eth0 default routing
interface selected (according to /proc) Lasand primul hping pornit, trecem pe a doua consola si ii trimitem pachete false lui C: # hping C -a B -S -p X (C si B sunt adresele lui C si B, iar X este portul scanat) rezultatul nu va fi foarte interesant: eth0 default routing
interface selected (according to /proc) Nu vom primi nici un pachet inapoi, fiindca C discuta cu B. Revenind insa la prima consola, observam ca diferenta dintre doua ID-uri consecutiva s-a modificat (cu cat anume depinde de timpul de propagare intre A, B si C): ... Asta bineinteles in cazul in care portul X este deschis. Daca nu e, diferenta intre ID-urile consecutive ramane aceeasi. Cam asta ar fi ideea. Dupa ce veti intelege cum functioneaza metoda si dupa ce veti face cateva teste o sa fie totul mult mai clar. 11. Tema si variatiuni Acum ca tot am inteles cum se face, hai sa ne folosim imaginatia. Putem incepe (de exemplu) prin citirea manualului de la hping si prin folosirea altor flag-uri. Sau putem folosi ceva care sa ne mai reduca din munca, de exemplu idlescan[4]. Putem sa scanam linistiti serverul unui ISP in timp ce adminul disperat vede in loguri ca scanul vine de la calculatorul secretarei :) 12. Observatii importante a) da, hping are nevoie de drepturi de root pentru executie :P b) calculatoarele ruland windows pun octetii invers in campul ID al pachetelor IP, asa ca trebuie folosita optiunea -W la hping pentru a vedea rezultatele corecte. Exemplu: # hping windows -r eth0 default routing
interface selected (according to /proc) E destul de putin probabil ca respectivul host sa trimita exact 256 de pachete la fiecare secunda. Sa incercam: # hping windows -r -W eth0 default routing
interface selected (according to /proc) Asa mai merge :) Aceasta particularitate a windows-ului poate fi folosita (bineinteles) si la determinarea sistemului de operare. c) In sectiunea 9 am spus ca B nu trebuie sa trimita si sa primeasca nici un pachet. Ei bine, am mintit :) B poate sa aiba activitate, cu conditia sa ne dam seama *cata*. Tot ce avem de facut este sa trimitem un pic mai repede (folosind optiunea -i de la hping)(ati citit manualul hping, nu-i asa ? :) pachetele SYN catre C. Vom observa clar cum diferenta dintre ID-urile primite de la B creste de la (spre exemplu) 5-6 la 30-40 pachete/secunda. 13. Bibliografie a) Mesajul de la care a pornit totul[2] b) Pagina lui antirez[5] c) Fisierele din subdirectorul "docs" aflat in distributia lui hping2 d) net/ipv4/*.c din sursele kernelului Linux 14. Multumiri Fara vreo ordine anume: tb_bloom, pentru faptul
ca m-a tot batut la cap sa scriu articolul A. Referinte [1] Abacus PortSentry: http://www.psionic.com/abacus/portsentry/ [2] Mesajul lui antirez pe Bugtraq: AICI [3] hping2: http://www.kyuzz.org/antirez/hping2.html [4] idlescan: http://superbofh.org/idlescan/ si http://www.hackers-pt.org/ptstuff/ [5] Pagina lui antirez: http://www.kyuzz.org/antirez |
|||||
Petru Paler <ppetru@coltronix.com> |