User Tools

Site Tools


koriscenje_tcpdump


Tcpdump predstavlja najvazniji alat za mreznu analizu za information security profesionalce. Dobro poznavanje ove über-jake aplikacije je obavezno za svakog ko zeli da temeljno shvati TCP/IP. Mnogi vise vole da koriste alatke za analizu viseg nivoa kao sto su Ethereal Wireshark, ali ja verujem da je ovo greska.

U metodi koja zavisi od stvarnog razumevanja koncepta protiv mehanickog ucenja vazno je da razumete ono sto se nalazi ispod haube TCP/IP steka. Dobro poznavanje ovih protokola vam omogucava da pronadjete uzroke problema na nivou daleko iznad prosecnog analiticara, ali majstorstvo poznavanja protokola je jedino moguce kroz neprekidni dodir sa njima.

Kada se koristi alatka koja prikazuje mrezni saobracaj na prirodniji (neobradjen) nacin teret analize se stavlja direktno na coveka umesto na aplikaciju. Ovakav pristup usavrsava neprekidno i podize nivo razumevanja TCP/IP steka, i iz ovog razloga ja veoma preporucujem koriscenje tcpdump umesto ostalih alata gde god je to moguce.

15:31:34.079416 IP (tos 0x0, ttl  64, id 20244, offset 0, flags [DF], proto: 
TCP (6), length: 60) source.35970 > dest.80: S, cksum 0x0ac1 
(correct), 2647022145:2647022145(0) win 5840
0x0000:  4500 003c 4f14 4000 4006 7417 0afb 0257  E..
0x0010:  4815 222a 8c82 0050 9dc6 5a41 0000 0000  H."*...P..ZA....
0x0020:  a002 16d0 0ac1 0000 0204 05b4 0402 080a  ................
0x0030:  14b4 1555 0000 0000 0103 0302            ...U........

Opcije

Ispod je nekoliko opcija (sa primerima) koji ce vam dosta pomoci u radu sa ovim alatom. Lako se zaboravljaju i/ili mesaju sa ostalim tipovima filtera, npr ethereal, tako da se nadam da ce vam ova stranica sluziti kao referenca, kao sto to jeste za mene. Na pocetku, dodacemo nekoliko opcija samoj tcpdump komandi, u zavisnosti od toga sta trazimo. Prva od ovih opcija je -n, koja trazi da se imena ne prevode – rezultirajuci da se uvek prikazuju samo IP adrese. Druga opcija je -X, koja prikazuje i hex i ascii sazdrzaj unutar paketa. i zadnja opcija je -S, koja menja prikaz sequence brojeve kao apsolutne a ne relativne. Sama ideja je da nemozete videti neuobicajenosti u sekvencnim brojevima ako se sakriju od vas. Zapamtite, prednost koriscenja tcpdump vs. nekog drugog alata je u manuelnoj interakciji sa paketima. Vazno je napomenuti i da tcpdump podrazumevano uzima samo prvih 68 bajta podataka iz paketa. Ako zelite da pogledate vise, dodajte opciju -s broj, gde broj predstavlja broj bajtova koje zelite da uzmete. Ja obicno zadajem 1514 (da bih dobio sve) ako koristim ovu opciju. Ovo je kratka lista opcija koje najcesce koristim:

  • -n : Ne prevodi u imena hostova.
  • -nn : Ne prevodi u imena hostova niti imena portova.
  • -X : Prikazi sadrzaje paketa u hex i ASCII.
  • -v, -vv, -vvv : Povecajte kolicinu informacija o paketu koje dobijate.
  • -c : Uzmi samo x paketa i onda stani.
  • -S : Prikazi apsolutne sekvencne brojeve.
  • -e : Prikazi i ethernet header.

Znaci, na osnovu tipa saobracaja koji hocemo da pratimo, koristimo razlicite kombinacije opcija za tcpdump, kao sto je to dole prikazano:

  • Osnovna komunikacija // osnovne informacije bez mnogo opcija
tcpdump -nS
  • Osnovna komunikacija (very verbose) // dosta dobra kolicina saobracaja, sa opsirnijim informacijama ne prikazujuci imena hostova
tcpdump -nnvvS
  • Dublji pogleda na saobracaj // dodaje -X ali ne uzima nista vise od paketa
tcpdump -nnvvXS
  • Veliki pregled paketa // krajnje “s” povecava velizinu uzorka, uzimajuci ceo paket
tcpdump -nnvvXSs 1514

Ovo je pregled tacno dva (-c2) ICMP paketa (ping i pong) koristeci neke od gore navedenih opcija. Primetite koliko informacija vidimo za svaki paket.

hermes root # tcpdump -nnvXSs 1514 -c2 icmp
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 1514 
bytes 23:11:10.370321 IP (tos 0x20, ttl  48, id 34859, offset 0, flags 
[none], length: 84) 69.254.213.43 > 72.21.34.42: icmp 64: echo request seq 0

        0x0000:  4520 0054 882b 0000 3001 7cf5 45fe d52b  E..T.+..0.|.E..+
        0x0010:  4815 222a 0800 3530 272a 0000 25ff d744  H."*..50'*..%..D
        0x0020:  ae5e 0500 0809 0a0b 0c0d 0e0f 1011 1213  .^..............
        0x0030:  1415 1617 1819 1a1b 1c1d 1e1f 2021 2223  .............!"#
        0x0040:  2425 2627 2829 2a2b 2c2d 2e2f 3031 3233  $%&'()*+,-./0123
        0x0050:  3435 3637                                4567
23:11:10.370344 IP (tos 0x20, ttl  64, id 35612, offset 0, flags [none], 
length: 84) 72.21.34.42 > 69.254.213.43: icmp 64: echo reply seq 0
        0x0000:  4520 0054 8b1c 0000 4001 6a04 4815 222a  E..T....@.j.H."*
        0x0010:  45fe d52b 0000 3d30 272a 0000 25ff d744  E..+..=0'*..%..D
        0x0020:  ae5e 0500 0809 0a0b 0c0d 0e0f 1011 1213  .^..............
        0x0030:  1415 1617 1819 1a1b 1c1d 1e1f 2021 2223  .............!"#
        0x0040:  2425 2627 2829 2a2b 2c2d 2e2f 3031 3233  $%&'()*+,-./0123
        0x0050:  3435 3637                                4567
2 packets captured
2 packets received by filter
0 packets dropped by kernel
hermes root # 

Izrazi

Izrazi vam omogucavaju da izbacite razne tipove saobracaja i nadjete tacno ono sto ste trazili. Usavrsavanje izraza i uciti kako da ih kreativno kombinujete je ono sto ce vas uciniti stvarno jakim sa tcpdump. Postoje tri onsnovna tipa izraza: type, dir, i proto. Type opcije su host, net, i port. Pravac se oznacava sa dir, i tu mozete imati src, dst, src or dst, i src and dst. Evo nekoliko primera:

  • host // trazite sabracaj na onsovu IP adrese (radi i sa imenom hosta ako ne koristite -n)

tcpdump host 1.2.3.4

  • src, dst // nadjite saobracaj samo od izvora ili destinacije (eliminise jednu stranu host razgovora)
tcpdump src 2.3.4.5
tcpdump dst 3.4.5.6
  • net // saobracaj cele mreze koristeci CIDR nacin obelezavanja
tcpdump net 1.2.3.0/24
  • proto // vazi za tcp, udp, i icmp. Nemorate da pisete proto

tcpdump icmp

  • port // vidite samo saobracaj koji dolazi na ili od odredjenog porta

tcpdump port 3389

  • src, dst port // filtriraj na osnovu izvornog ili odredisnog porta
tcpdump src port 1025
tcpdump dst port 3389

Postajati kreativan

Izrazi su dobri, ali prava magija tcpdump-a dolazi od mogucnosti da se oni kombinuju na kreativan nacin na nacin koji izoluje tano ono sto trazite. Postoje tri nacina za kombinovanje, i ako ste ucili o kompjuterima uopste onda ce vam biti prilicno poznati:

  • AND

and ili &&

  • OR

or ili ||

  • EXCEPT

not ili !

TCP saobracaj od 10.5.2.3 namenjen portu 3389:

# tcpdump -nnvvS tcp and src 10.5.2.3 and dst port 3389

Saobracaj koji dolazi sa 192.168 mreze upucen na 10 ili 172.16 mreze:

# tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16

Saobracaj koji nije ICMP saobracaj namenjen 192.168.0.2 sa 172.16 mreze:

# tcpdump -nvvXSs 1514 dst 192.168.0.2 and src net 172.16.0.0/16 and **not** icmp

Saobracaj koji dolazi sa Mars ili Pluto i koji nije namenjen za SSH port: // zahteva rezoluciju imena

# tcpdump -vv src mars or pluto and not dst port 22

Kao sto mozete videti, mozete stvarati upite da pronadjete skoro sve sto zelite. Kljuc lezi u tome da pronadjete tacno sta trazite i onda izgradite sintaksu da bi izolirali taj specificni tip saobracaja.

Imajte na umu i da kada gradite kompleksne upite mozda cete morati da grupisete vase opcije koristeci apostrofe. Apostrofi se koriste da bi rekli tcpdump-u da ignorise odredjene specijalne znakove – u ovom sucaju su to “( )” zagrade. Ista tehnika se moze koristiti za grupisanje koristeci ostale izraze kao sto su host, port, net, itd. Pogledajte ovu komandu:

Saobracaj koji dolazi od 10.0.2.4 i namenjen je portovima 3389 ili 22: // pogresno

# tcpdump src 10.0.2.4 and (dst port 3389 or 22)

Ako pokusate da pokrenete ovu inace korisnu komandu, dobicete poruku o gresci zbog zagrada. Ovo mozete srediti tako sto cete izbeci zagrade (stavljajuci \ ispred svake), ili stavljajuci celu komandu u apostrofe:

Saobracaj koji dolazi od 10.0.2.4 i koji je namenjen portovima 3389 ili 22: // ispravno

# tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'

Naprednije

Mozete filtrirati i na osnovu odredjenih delova paketa, kao i kombinujuci visestruke uslove u grupama. Prvobitni je koristan ako trazite samo za SYN ili RST pakete, na primer, a drugi za jos napredniju izolaziju saobracaja.

Savet: Anagram za TCP flagove: *U*nskilled *A*ttackers *P*ester *R*eal *S*ecurity *F*olk

Prikazi sve URG pakete:

# tcpdump 'tcp[13] & 32 != 0'

Prikazi sve ACK pakete:

# tcpdump 'tcp[13] & 16 != 0'

Prikazi sve PSH pakete:

# tcpdump 'tcp[13] & 8 != 0'

Prikazi sve RST pakete:

# tcpdump 'tcp[13] & 4 != 0'

Prikazi sve SYN pakete:

# tcpdump 'tcp[13] & 2 != 0'

Prikazi sve FIN pakete:

# tcpdump 'tcp[13] & 1 != 0'

Prikazi sve SYN-ACK pakete:

# tcpdump 'tcp[13] = 18'

[Beleska: Samo se PSH, RST, SYN, i FIN prikazuju u tcpdump izlazu flag polja. URG i ACK su prikazani, ali se pojavljuju na raznim mestima u izlazu a ne u flags polju]

Imajte na umu razloge zbog kojih ovi filteri rade. Ovi filteri gore nalaze ove razne pakete zato sto tcp[13] gleda u offset 13 u TCP headeru, broj predstavlja lokaciju unutar bajta, i !=0 znaci da je vrednost navedenog flaga 1, tj postavljen je.

Poseban saobracaj

  • Prikazi sav IPv6 Saobracaj:
# tcpdump ip6
  • Prikazi sav saobracaj koji ima i SYN i RST postavljene flagove: (ne bi trebalo da se ikada desi)
# tcpdump 'tcp[13] = 6'
  • Prikazi sav saobracaj sa postavljenim “evil bit”:
# tcpdump 'ip[6] & 128 != 0'

Zakljucak

Ovaj clanak vam moze pomoci da ojacate znanje, ali man stranica treba uvek biti pri ruci za najnaprednije i scenarije za jednokratnu upotrebu. Iskreno se nadam da vam je ovo bilo od pomoci, slobodno me kontaktirajte ako imate neka pitanja.




Izvor: http://dmiessler.com/study/tcpdump/

koriscenje_tcpdump.txt · Last modified: 2017/04/28 10:25 (external edit)