frame

Sveiki apsilankę!

Jei forume lankaisi pirmą kartą, kviečiame registruotis ir prisijungti prie diskusijų.

Prisijungti Registruotis

TCPdump komandų pavyzdžiai galimų atakų aptikimui

tcpdump - atvirojo kodo programinė įranga skirtas stebėti duomenų perdavimą vykdomą iš/į Jūsų serverį. Ši programinė įranga neturi vartotojo sąsajos, todėl galimi patikrinimai atliekami naudojantis komandine eilute (terminalu). Naudojantis įvairiomis komandomis galima stebėti TCP/IP bei kitų paketų perdavimą, kuriame dalyvauja Jūsų serveris.

Šioje pamokoje apžvelgsime įrankio diegimą bei komandas, kurios padės aptikti žalingą veiklą vykdoma į/iš Jūsų serverio.


0. Preliminarūs reikalavimai:

- Linux serveris naudojantis vieną iš mūsų siūlomų operacinių sistemų šablonų (CentOS, Debian, Ubuntu).
- Papildomas sistemos naudotojas turintis sudo teises. Instrukciją, kaip sukurti tokį naudotoją rasite kitoje mūsų pamokoje.


1. Diegimas

Diegimo komanda CentOS operacinėje sistemoje:
yum install tcpdump

Diegimo komanda Ubuntu ir Debian operacinėse sistemose:
apt-get install tcpdump


2. Bazinė informacija

Prieš pradėdant tikrinti srautą rekomenduojame susipažinti su tcpdump komandų sintakse. Taigi, pradeda su šiuo pavyzdžiu:
sudo tcpdump venet0 -nn -s0 -v port 80
sudo - parametras reikalingas paleisti root teisių reikalaujančias komandas, būnant prisijungus prie papildomo naudotojo;
tcomdump - parametras nurodantis, kad kreipiatės į tcpdump programinę įrangą;
venet0 -  mūsų serveriuose naudojamas virtualizacijos modelis;
-nn - parametrai pateikiantis indormacija apie serverių pavadinimus bei prievadus. Šis parametras taip pat padeda matyti didelius duomenų srautus, tačiau toks informacijos pateikimas gali sulėtėti atsakymo gavimą;
-s0 - parametras, kuriuo galima apibrėžti norimo dydžio parametrus. -s0 nustato limitą į neribotą - naudokite jei norite stebėti visą srautą;
-v - parametras apibrėžiantis pateikiamos informacijos detalumą. Naudojami -v ir -vv parametrai padidina pateikiamos informacijos kiekį. Pateikiama  daugiau su konkrečia protokolu susijusios informacijos.
port 80 - apribrėžiamas konkretus prievadas. Šiuo atveju 80, kuris priklauso HTTP tarnybai.

ASCII teksto pateikimas

Pridedant -A parametrą bus pateikiamas informacija naudojant ascii standartą. Tai leis lengviau suprasti pateikiamą informaciją bei galimybę išsifiltruoti reikiamą rezultatą naudojant grep komandą. Komanda, kuri rodytų ir ASCII formato bei šešioliktainę informaciją yra -X - gali būti naudojama vietoje -A.
sudo tcpdump -A -s0 port 80

Filtravimas pagal protokolą

UDP srauto išrinkimas gali būti atliekamas naudojant udp parametrą. Taip pat galima naudoti protocol 17 vietoje udp. Bus pateikiamas toks pat rezultatas. Jeigu norite filtruoti TCP srautą, taip galite naudoti tcp arba protocol 6. Pavyzdžiui:
sudo tcpdump -i eth0 udp
sudo tcpdump -i eth0 proto 17

Filtravimas pagal Host naudojant IP adresą

Naudojant parametrą host ir IP adresą yra fiksuojamas srautas į konkretų host'ą ir iš konkretaus IP adreso. Pavyzdžiui:
sudo tcpdump -i eth0 host 10.10.1.1
Jeigu norite matyti tik paketus keliaujančius į vieną pusę, naudokite src (srautas einantis iš konkretaus IP) arba dst (srautas einantis į konkretų IP). Pavyzdžiui:
sudo tcpdump -i eth0 dst 10.10.1.20

Išrašų perkėlimas į failą

Srauto generavimo išrašai gali būti saugomi pcap formatu tam, kad vėliau juos galima būtų įkelti į programinę įrangą patogiai analizei. Šiuo atveju rekomenduojame pasinaudoti Wireshark programine įranga.
sudo tcpdump -i eth0 -s0 -w test.pcap

Srauto duomenų pateikimas su grep

Nenaudojant papildomų parametrų kaip -l ar -c ne visada gausite struktūrizuotą atsakymą su grep filtravimu. Todėl rekomenduojame naudoti tokią komandą:
sudo tcpdump -i eth0 -s0 -l port 80 | grep 'Server:'

Papildomas filtravimas

Taip pat su visomis  išvardintomis komandomis galite naudoti ir papildomus filtravimo parametrus, pavyzdžiui:
and or &&
or or ||
not or !


3. Komandų pavyzdžiai


HTTP User Agents informacija

HTTP User Agent informcija gali būti pateikiama naudojant šią komandą:
sudo tcpdump -nn -A -s1500 -l | grep "User-Agent:"

Naudojant egrep filtravimą  ir papildomas reikšmes galime gauti  User Agent ir Host informaciją atliekant vieną užklausą. Pavyzdžiui:
sudo tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'


HTTP GET ir POST užklausų atrinkimas

Bandydami giliau ieškoti įrašų, galite apibrįžti tik paketus su GET komanda. Pavyzdžiui:
sudo tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
Taip pat, galim nurodyti, kad būtų ieškomos tik POST užklausos. Pastebime, kad pačių paketų informacija gali būti nepateikiama naudojant šį filtravimą. Tikėtina, kad POST užklausos bus išskirstytos per kelis TCP duomenų paketus.
:~$ sudo tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'
Naudojamos šešioliktainės išraiškos atitinka GET ir POST užklausas ASCII formatu. Išraiška tcp[((tcp[12:1] & 0xf0) >> 2):4] visų pirma nustato vietą, kurioje yra reikalingi bitai ir tada parenka 4 bitus, kuriuos mes norime matyti.


HTTP užklausų URL išfiltravimas

Tam, kad galima būtų gauti URL adresą visų pirma turime išsifiltruoti Host ir HTTP užklausų vietas atskiriant iš viso srauto. Nenorodant konkretaus prievado su parametru port 80 galime rasti užklausas vykdytas iš visų galimų prievadų kaip 443 ir pan.

sudo tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"

tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
	POST /wp-login.php HTTP/1.1
	Host: dev.example.com
	GET /wp-login.php HTTP/1.1
	Host: dev.example.com
	GET /favicon.ico HTTP/1.1
	Host: dev.example.com
	GET / HTTP/1.1
	Host: dev.example.com


HTTP slaptažodžių aptikimas POST užklausose

Galime aptikti bandymus atspėti slaptažodžius. Įvedant Host: parametrą matysite kur slaptažodžiai buvo naudoti.
sudo tcpdump -s 0 -A -n -l | egrep -i "POST /|pwd=|passwd=|password=|Host:"

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes 11:25:54.799014 IP 10.10.1.30.39224 > 10.10.1.125.80: Flags [P.], seq 1458768667:1458770008, ack 2440130792, win 704, options [nop,nop,TS val 461552632 ecr 208900561], length 1341: HTTP: POST /wp-login.php HTTP/1.1 .....s..POST /wp-login.php HTTP/1.1 Host: dev.example.com .....s..log=admin&pwd=notmypassword&wp-submit=Log+In&redirect_to=http%3A%2F%2Fdev.example.com%2Fwp-admin%2F&testcookie=1


ICMP paketų, kurie nėra standartiniai ECHO/REPLY pateikiamas

Filtravimas vykdomas su icmp paketais, kurie nėra standartiniai paketai naudojami ping paketuose. Tokių paketų naudojimas gali vesti į bandymą įsilaužti.
sudo tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:37:04.041037 IP 10.10.1.189 > 10.10.1.20: ICMP 10.10.1.189 udp port 36078 unreachable, length 156


SMTP/POP3 laiškų analizė

Šioje užklausoje mes ištrauksime laiškų gavėjus. Taip pat įmanoma išsifiltruoti laiškų tekstą bei antraštes.
sudo tcpdump -nn -l port 25 | grep -i 'MAIL FROM\|RCPT TO'


FTP komandų ir prisijungimų informacija

Naudojant žemiau pateiktą komandą galėsite matyti USER ir PASS informacija bei naudotas FTP komandas, tokias kaip LIST, CWD, PASSIVE.
sudo tcpdump -nn -v port ftp or ftp-data


Prievado skenavimo aptikimas

Pateiktame pavyzdyje galite matyti srautą vykdomą iš vieno šaltinio į vieną lokaciją. Parametrai Flags [S] ir  Flags [R] gali būti pastebimi prie skirtingų atsitiktinai parinktų prievadų, kas ir rodo, kad bandoma atrasti neapsaugotą prievadą.

tcpdump -nn

21:46:19.693601 IP 10.10.1.10.60460 > 10.10.1.199.5432: Flags [S], seq 116466344, win 29200, options [mss 1460,sackOK,TS val 3547090332 ecr 0,nop,wscale 7], length 0
21:46:19.693626 IP 10.10.1.10.35470 > 10.10.1.199.513: Flags [S], seq 3400074709, win 29200, options [mss 1460,sackOK,TS val 3547090332 ecr 0,nop,wscale 7], length 0
21:46:19.693762 IP 10.10.1.10.44244 > 10.10.1.199.389: Flags [S], seq 2214070267, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0
21:46:19.693772 IP 10.10.1.199.389 > 10.10.1.10.44244: Flags [R.], seq 0, ack 2214070268, win 0, length 0
21:46:19.693783 IP 10.10.1.10.35172 > 10.10.1.199.1433: Flags [S], seq 2358257571, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0
21:46:19.693826 IP 10.10.1.10.33022 > 10.10.1.199.49153: Flags [S], seq 2406028551, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0
21:46:19.695567 IP 10.10.1.10.55130 > 10.10.1.199.49154: Flags [S], seq 3230403372, win 29200, options [mss 1460,sackOK,TS val 3547090334 ecr 0,nop,wscale 7], length 0
21:46:19.695590 IP 10.10.1.199.49154 > 10.10.1.10.55130: Flags [R.], seq 0, ack 3230403373, win 0, length 0
21:46:19.695608 IP 10.10.1.10.33460 > 10.10.1.199.49152: Flags [S], seq 3289070068, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
21:46:19.695622 IP 10.10.1.199.49152 > 10.10.1.10.33460: Flags [R.], seq 0, ack 3289070069, win 0, length 0
21:46:19.695637 IP 10.10.1.10.34940 > 10.10.1.199.1029: Flags [S], seq 140319147, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
21:46:19.695650 IP 10.10.1.199.1029 > 10.10.1.10.34940: Flags [R.], seq 0, ack 140319148, win 0, length 0
21:46:19.695664 IP 10.10.1.10.45648 > 10.10.1.199.5060: Flags [S], seq 2203629201, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
21:46:19.695775 IP 10.10.1.10.49028 > 10.10.1.199.2000: Flags [S], seq 635990431, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
21:46:19.695790 IP 10.10.1.199.2000 > 10.10.1.10.49028: Flags [R.], seq 0, ack 635990432, win 0, length 0


DNS užklausų ir atsakymų aptikimas

Išeinančios DNS užklausos į Google viešus DNS serverius ir A įrašo atsakymai būtų matomi naudojant šią komandą:
sudo tcpdump -i wlp58s0 -s0 port 53

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytes 14:19:06.879799 IP test.53852 > google-public-dns-a.google.com.domain: 26977+ [1au] A? play.google.com. (44) 14:19:07.022618 IP google-public-dns-a.google.com.domain > test.53852: 26977 1/0/1 A 216.58.203.110 (60)

Nesaugių (plaintext) slaptažodžių aptikimas

Su šia komanda mes peržiūrėime standratinius plain text protokolus ir ieškome visų naudotojo vardų bei slaptažodžių. Įvedant parametrą -B5 prie grep komandos  gausime 5 eilutes, kuriose rasime visą informaciją apie konkretų slaptažodį.

sudo tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet -l -A | egrep -i -B5
'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user '


Apibendrinimas

Šie tcpdump pavyzdžiai, patarimai ir komandos yra skirti suteikti jums pagrindinį supratimą apie galimybes. Priklausomai nuo to, kokio rezultato siekiate, yra daugybė būdų, kuriais galite gilintis ar derinti įvairius filtravimo metodus norint gauti norimą atsakymą.

Tcpdump derinimas su Wireshark prograimine įranga yra labai naudingas, ypač kai norite įsigilinti į visas aplikacijos sluoksnių sesijas, nes dekoderiai tada gali surinkti visą reikiamą srautą ir pateikti jį patogiu būdu.


Pažymėtos temos:
Norėdami palikti komentarą, turite prisijungti arba registruokis.