Sadržaj

Napadi na TCP

Sažetak

Transmission Control Protocol (TCP) je jedan od glavnih internetskih protokola te nadopunjuje mrežni protokol IP. Omogućuje sigurnu te ispravnu dostavu podatkovnih okteta uz očuvan redoslijed između aplikacija koje komuniciraju preko IP mreže. Većina aplikacija kao što su web preglednici, SSH, Telnet, email klijenti koriste TCP za komunikaciju. Nažalost, kada je protokol razvijen u njemu nisu bili ugrađeni sigurnosni mehanizmi te ga to čini iznimno ranjivim. Iako protokol omogućuje retransmisiju paketa koji nisu potvrđeni ili su primljeni u krivom redoslijedu (za razliku od UDP-a) to ne znači da protokol nije osjetljiv na napade. U nastavku slijedi nešto općenito o samome protokolu, zatim će se objasniti najčešći TCP napadi te moguće posljedice istih.

Ključne riječi: Transmission Control Protocol; podatkovni okteti; web preglednici; SSH; sigurnosni mehanizmi; napadi;

Uvod

Transmission Control Protocol (TCP) nalazi se iznad IP sloja. Kako TCP omogućuje pouzdanu komunikaciju među procesima zahtijeva uspostavu veze prije samog prijenosa podataka.

Procedura uspostave je jednostavna, svaka strana šalje tzv. SYN segment u kojem objavljuje parametre bitne za konekciju. Procedura se odvija se u tri koraka (“three'way handshake”).

Prekid TCP veze događa se kada aplikacije nemaju više podataka za razmijeniti. Prvo jedna strana šalje FIN bit postavljen na 1, zatim druga strana odgovara sa ACK i FIN bitovima te prva strana zaključuje prekid šaljući ACK bit postavljen na 1.

U strukturi TCP zaglavlja posebno nam je zanimljivo polje broj u nizu (eng. “sequence number”) čija je veličina 32 bita. Ovo polje nam služi za numeriranje jer sadrži broj prvog okteta segmenta.

Vrste napada

TCP protokol može biti napadnut na mnogo načina. Napad otmice veze (eng. session hijacking), sekvencijsko predviđanje (koje je u osnovi slično TCP vetu), TCP resetiranje samo su neki od najčešćih TCP napada. Rezultati sveobuhvatne analize ranjivosti TCP protokola objavljeni su 2009. godine. Kako je protokol nezamjenjiv za sve ove probleme ponuđena su konkretna rješenja koja ublažavaju ili potpuno rješavaju sve probleme.

SYN preplavljivanje

Ovaj napada događa se tijekom uspostave TCP konekcije, odnosno napada “three-way handshake” protokol. U slučaju DOS napada, napadač teško može server “srušiti” direktno, prvo mora naći serverovu Ahilovu tetivu. “Half-open connection queue” je upravo to.

Kada server zaprimi inicijalni SYN paket, on sprema posebnu strukturu u svoj red zvanu Transmission Control Block (TCB). U tom trenutku veza između klijenta i servera napola je uspostavljena. Kada server dobije ACK paket od klijenta, TCB će maknuti iz reda.

Prije nego “three-way handshake” završi server mora spremiti u red sve TCB strukture te ako napadač uspije popuniti sav kapacitet reda u kratkom razdoblju, server neće moći prihvaćati nove SYN pakete te tako neće više primati nove konekcije iako CPU i njegov bandwith nisu dostigli maksimum.

Napadačev posao je jednostavan, što prije napuniti serverov red tako da samo šalje SYN pakete na njega. Napadač će korisiti slučajnu IP adresu sa svakim novim zathjevom kako ga serverov vatrozid ne bi blokirao. Jedini način kako server može sada prazniti vlastiti red je da TCB-u istekne timeout koji može biti vremenski dugotrajan (otpr. 40s).

Primjer SYN Flooding napada izvor slike

Ova vrsta napada poznata je dulje vrijeme i postoji nekoliko pristupa koji pokušavaju prekriti ovu slabost. SYN kolačići (eng. cookies) predstavljaju rješenje problema. Ideja je sljedeća, server će nakon primitka SYN segmenta, napraviti hash koristeći privatni ključ koji je poznat samo njemu. Ključ sadržava informacije o IP adresi, broju vrata, broju u nizu. Server šalje vrijednost H u SYN+ACK paketu. Ako je klijent napadač, neće dobiti serverov paket (jer koristi lažnu IP adresu). Ako klijent nije napadač, dobit će paket te poslati natrag ACK paket, sa vrijednošću H+1. Naravno, napadač i dalje može napuniti server sa mnogo SYN paketa, ali oni neće dovesti do popunjavanja reda jer server ne alocira resurse sve dok ne dobije ACK paket od klijenta.

TCP resetiranje

Cilj ove vrste napada je prekinuti postojeću vezu između dva servera. Iako TCP koristi TCP FIN protokol kako bi završio trenutnu konekciju, ako jedna strana pošalje segment sa bitom RST postavljenim na 1, konekcija se odmah završava. Treba uočiti kako su na meti uglavnom konekcije koje traje neko određeno vrijeme jer je teško vjerojatno da napadač može prekinuti vezu u trajanju nekoliko sekundi.

No upravo to I je problem, napadač može prekinuti konekciju ako pošalje RST paket jednoj strani. No da bi to postignuo, zaglavlje mora biti ispravno popunjeno. Napadač mora navesti izvorišnu IP adresu, izvorišna vrata, odredišnu IP adresu, odredišna vrata. Sequence number mora također biti naveden ispravno. Da bi taj broj bio ispravan mora biti unutar dozvoljene vrijednosti, no stvarnost nije tako jednostavna. Ako primatelj primi segment čiji sequence number je puno izvan okvira do tada primljenih segmenata, jednostavno će ga odbaciti. Do 2010. TCP protokol je dozvoljavao da RST segment mora samo biti unutar dozvoljene veličine prozora zaglavlja. No to je ovu vrstu napada činilo lakom za izvesti te od tada RST segment mora biti točno sljedeći broj u nizu od prethodnog potvrđenog segmenta.

Slijepi TCP Reset napad (eng. “Blind TCP Reset attack”) se svodi na to da napadač šalje RST segmente na slijepo, odnosno pošalje ih i do nekoliko desetaka tisuća, samo kako bi uspješno “pogodio” broj u nizu.

Zanimljivo je kako ova vrsta napada ima veliku svrhu u Velikom vatrozidu (eng. The Great Firewall). To je kolekcija sustava i tehnika kojom kineska vlada cenzurira pristup internetu građanima. Ponekad, prije nego prekinu konekciju odmah na početku, dopuštaju korisniku da vidi neku stranicu (npr. web portal) te na taj način prikupljaju podatke o ponašanju korisnika. Ako se pokuša otvoriti neki video zapis koji sadrži zabranjene ključne riječi, konekcija se odmah prekina pomoću TCP Reset napada.

TCP Session Hijacking (otmica veze)

Kako bi paket bio prihvačen od strane primatelja, napadač mora znati 4 parametara koji jedinstveno određuju TCP konekciju (zvorišna IP adresa, izvorišna vrata, odredišna IP adresa, odredišna vrata). Kako bi paket uistinu bio prihvaćen, još jedan uvjet mora biti zadovoljen, a to je upravo sequence number. Ako je primatelj primio zadnji paket sa oznakom x, napadač može poslati paket sa brojem x + d, te samo mora pričekati kako bi originalni pošiljatelj poslao preostalih d paketa. Primatelj sve dobivene pakete sprema u red kako bi ih kasnije znao pravilno poredati. Na taj način će napadačev paket ostati u redu, te se neće dostaviti aplikaciji sve dok nedostaju paketi sa budućim oznakama (između x i x +d). Ako je d prevelik, napadačev paket će se odbaciti. U osnovi, ako uspijemo pogoditi pravilan broj u sekvenci paketa, možemo navesti primatelja da prima naše TCP podatke. U slučaju da je primatelj Telnet server, podaci koje nam on pošalje mogu biti naredbe, pa na taj način možemo izvoditi neželjene napada na server.

Primjer otmice veze (eng. session hijacking)izvor slike

TCP veto napad

Napad koji može predvidjeti sljedeći broj u nizu (eng. sequence number) te veličinu sljedećeg paketa rezultirajući da primatelj primi potpuno ispravan paket kao da je sve normalno. Kada primatelj primi paket sa ispravnim brojem originialnog pošiljatelja, paket se samo odbaci (smatrajući da se radi o duplikatu prvog paketa). Kažemo da je maliciozni paket izvršio “veto” nad legitimnim paketom. Posebno je problematično što ovakav napad generira i do 600 puta manje mrežnog prometa od ostalih napada. Iako TCP veto napad daje napadaču manje kontrole nad komunikacijom od npr. TCP Session Hijacking napada, ova vrstu napada jako je teško otkriti. Sprječavanje ovakve vrste napada uključuje tcpcrypt, IPsec itd…

Zaključak

TCP protokol nema ugrađene sigurnosne mehanizme kako bi zaštitio konekciju te podatke od napada. Rezultat toga su mnogobrojne vrste napada. SYN poplavljivanje TCP resetiranje spadaju pod DoS vrste napada, dok ostala dva napada omogućuju napadaču ubacivanje malicioznih podataka u postojeću TCP vezu.

Iako se napad oduzimanja veze(eng. session hijacking) može riješiti pomoću enkripcije, za ostale napade postoje rješenja (npr. SYN kolačići za SYN poplavljivanje), ali općenito probleme vezane uz sigurnost teško je riješiti.

Važna lekcija naučena iz ovog protokola, ali i bilo kojeg drugog mrežnog protokola je da se sigurnost mora odmah ugraditi kako bi odmah riješila potencijalne probleme.

Literatura

[1] Computer Security: A Hands-on Approach, Wenliang Du, 2017.

[2] Komunikacijske mreže, FER predavanja, 2017.

[3] https://en.wikipedia.org/wiki/Transmission_Control_Protocol

[4] How does a tcp reset attack work, Rober Heaton, 2020.