U ovom radu se obrađuju neki od najbitnijih napada na TCP/IP sloj te preporuke i dobre prakse kao se zaštiti te mitigirati ili u potpunosti otkloniti opasnost.
Potpoglavlja u kojima će se obrađivati napadi na TCP protokol odnose se na TCP reset napad i SYN flooding napad, a napadi na IP protokol i prisluškivanje komunikacije obrađivat će se u poglavljima o napadu čovjeka u sredini, IP spoofingu te krađi sesije.
Na kraju će se navesti tehnike i općeniti savjeti za zaštitu.
Za komunikaciju između udaljenih sustava koriste se razni protokoli. Jedan od njih je TCP IP stack. Za komunikaciju se ostvaruju TCP veze za prijenos podatkovnih paketa, a IP adrese i vrata se koriste u zaglavlju TCP paketa kako bi se znalo za koga je paket namijenjen te kome bi trebalo odgovoriti.
Uspostava i komunikacija TCP veza se odvijaju protokolima koristeći zastavice. TCP zastavice su SYN, ACK, FIN, URG, PSH, RST, ECE, CWR i ES. Posebno zanimljive zastavice su ACK, FIN, SYN i RST koje se koriste za uspostavljanje i prekid komunikacije, i koje napadači koriste za razne napade, od kojih o najutjecajnijima će se govoriti u ovome radu. Osim iskorištavanja ranjivosti postavljanja zastavica, napadači krivotvoriti adrese TCP paketa, ili prisluškivati i mijenjati sadržaje tuđih presretanih paketa.
Kako bi se obranili od napada na naše sustave možemo postaviti slojeve zaštite poput enkripcije podataka, firewalla i sustava za otkrivanje i sprječavanje upada. Bitno je konstantno pratiti sustav i sigurnosno stanje, jer ne postoji gotovo svemoguće rješenje koje će spriječiti svaki napad, nego je odgovornost na nama da pratimo i održavamo sigurnost sustava. U posljednjem poglavlju rada će biti opisani neki od dobrih tehnika i praksi kojih bi se trebali držati kako bi održavali naš sustav sigurnim.
U sljedećim poglavljima će biti opisani nekih od najučestalijih napada koji koriste propuste u TCP/IP internetskom sloju.
Prekid TCP veze između dvije strane se može obaviti na dva načina. Prvi način je gdje jedna strana pošalje paket s postavljenom zastavicom FIN. To označava da ta strana više nema paketa za slanje, na što druga strana odgovara s paketom sa zastavicom ACK, čime se prekida veza iz smjera prve strane prema drugoj. No potrebno je prekinuti vezi i u drugom smjeru, pa druga strana šalje prvoj svoj FIN paket, na što prva strana odgovara ACK paketom, čime je veza u potpunosti prekinuta. No drugi način za prekid je slanje paketa s RST zastavicom, što odmah prekida vezu. Taj paket se najčešće šalje u slučajevima pogreške ili kada se nema vremena obaviti cijeli FIN ACK protokol.
No činjenica da je vezu između dvije strane moguće odmah zaustaviti jednim paketom bez provjere je vrlo zanimljiva napadačima. Oni taj nedostatak mogu iskoristiti tako da se lažno predstave kao jedna strana komunikacije, te pošalju drugoj strani RST paket, čime se ostvaruje uskraćivanje usluge. Za uspješan napad napadač mora pravilno krivotvoriti sve bitne elemente zaglavlja TCP paketa, pravilnu IP adresu i vrata strane pošiljatelja te IP adresu i vrata strane primatelja, kao i redni broj paketa.
Jedan poslužitelj može imati otvorene TCP veze s više različitih klijenata. Kada do servera dođe TCP paket, o čijem paketu se radi server prepoznaje iz četiri elementa u zaglavlju: IP adresi i vratima pošiljatelja, te adresi i vratima primatelja. Zaglavlje TCP paketa je lagano modificirati, te ih napadač može prepraviti da izgleda kao da podatci dolaze od nekog drugog klijenta te tako slati lažne podatke poslužitelju kao na slici 3.1. Slika 3.1 - Primjer nada krađe sesije
No da bi poslužitelj prihvatio paket još jedno polje TCP paketa mora odgovarati, a to je redni broj prvog okteta podataka u paketu. Svi TCP paketi su poredani rednim brojevima kako bi ih server kasnije znao sastaviti neovisno o redoslijedu u kojem dolaze. Stoga napadač bi trebao pogoditi neki redni broj paketa koji ostavlja prostor između do sada dostavljenih paketa i tog paketa koji će biti popunjeni legitimnim paketima, no ako se ostavi previše prostora mogao bi se prekoračiti dolazni buffer te će poslužitelj odbaciti paket. Ako napadač uspije pogoditi dobar redni broj TCP paketa time efektivno može preuzeti tu vezu i slati podatke serveru koje server smatra da dolaze od drugog klijenta.
Napad čovjeka u sredini (eng. Man in the middle, MITM) je napad u kojemu napadač preusmjeri komunikaciju između dva člana komunikacije. Kako bi napad bio uspješan, napadač to mora napraviti bez da i jedna strana u komunikaciji ne posumnja da se napad događa, i da vjeruju da komuniciraju direktno s drugom stranom, kao na slici 3.2. Napadač može samo pasivno sudjelovati kao posrednik propuštanjem svih dolaznih paketa, čime efektivno prisluškuje čitavu komunikacije između dvije strane, ili može izmjenjivati poruke te time slati lažne podatke. Slika 3.2 - Primjer nada MITM
Napadač svoju namjeru može postići recimo predstavljanjem sebe kao legitimnom pristupnom točkom za Wi-Fi, na koji se neoprezni korisnici mogu spojiti te ih time napadač može prisluškivati. Kao obrana od napada se može koristiti enkripcija komunikacija te provjera krajnje točke javnim i privatnim ključem. Prva strana enkriptira poruku javnim ključem druge strane, te tu poruku sada može dekriptirati jedino korisnik na drugoj strani koristeći svoj privatni ključ, čime napadač više ne može čitati sadržaj poruka.
SYN flooding napad koristi sigurnosni propust u trosmjernom rukovanju pri uspostavljanju TCP veze. Server sluša za zahtjeve uspostavljanje veze, te se klijent javlja serveru. Klijent prvo šalje paket sa SYN zastavicom serveru, na što server ako je spreman odgovara sa s paketom koji sadrži zastavice SYN i ACK. Na kraju klijent odgovara sa ACK paketom čime se završava rukovanje te je veza uspostavljena.
Prije nego što je veza do kraja uspostavljena, poslužitelji spremaju poluotvorene veze, no količina tih veza je ograničena. Ako napadač želi zablokirati poslužitelja može pronaći način da iskoristi sva slobodna mjesta za poluotvorene veze, te novi korisnici neće uspjeti uspostaviti vezu, kao na slici 3.3. Kako bi to postigao, napadač šalje puno SYN paketa za početak rukovanja, no nikada ne šalje treći ACK paket za završetak. Napadač pakete šalje s nasumičnim adresama, kako firewall ne bi moga početi odbijati zahtjeve na temelju pošiljateljeve adrese. Slika 3.3 - Pri dolasku legitimnog upita server više nema slobodni vrata da uspostavljanje veze
Za zaštitu od SYN napada se mogu koristiti SYN kolačići, gdje server ne zauzima resurse dok ne primi zadnji ACK paket. Kako bi znao da paket dolazi od legitimnog klijenta, po primitku prvog SYN paketa server sa SYN + ACK paketom šalje i hash koji se sastoji od podataka klijentove veze i skrivene tajne poslužitelja, te poslužitelj očekuje da klijent odgovori s hash + 1, što napadač neće moći jer koristi nasumične adrese koje nisu njegove.
Paketi internetskog protokola u zaglavlju sadrže adresu primatelja, te adresu pošiljatelja kako bi primatelj mogao znati tko šalje paket, te kome treba odgovoriti. No napadači mogu mijenjati adresu pošiljatelja u zaglavlju, te se time lažno predstavljati. Takav postupak se vrlo često koristi u napadima uskraćivanja usluga (eng. Denial of service, DoS), gdje napadač pokušava preplaviti žrtvu beskorisnim porukama. Zato što napadač ne šalje svoju adresu u poruci, kasnije je jako teško odrediti tko je zapravo bio napadač, te je teško prepoznati legitimnu poruku od maliciozne. Postupak se također može koristiti u reflektiranim napadima, gdje manje poruke sa žrtvinom adresom kao pošiljateljevom šalju sustavima koji na te poruke odgovaraju većim porukama, te tako bez korištenja većih resursa dobivamo višestruko jači napad kao na slici 3.4. Slika 3.4 - Primjer spoofing napada
IP spoofing se ne može spriječiti, no kao zaštita od takvih napada se može koristiti ingress filtriranje. Ingress filtriranje prilikom provjere pristiglih IP paketa pregledava adresu pošiljatelja u zaglavlju, te odbacuje pakete koji ne odgovaraju svom području dolaska.
U računalnoj komunikaciji nikada nije moguće biti potpuno siguran, no postoje dobre prakse i tehnike koje mitigiraju ili u potpunosti otklanjaju opasnosti.
Osnovni, no i vrlo djelotvorni način zaštite je postavljanje firewalla. Firewall može biti u obliku hardware-a poput rutera ili u obliku software-a instaliranog na računalu. Firewallu postavljamo pravila, koja on potom koristi prilikom pregledavanja dolaznih i odlaznih paketa, te odbacuje pakete koji ih ne zadovoljavaju. Pravila se postavljaju na razini IP adresa i protokola. Firewall može biti postavljen da inicijalno propušta sve pakete, osim onih koje se eksplicitno zabrani u pravilima, ili da ih sve zaustavlja osim ako ne zadovoljavaju pravila. Kada napadač počne pregledavati sustav, sama činjenica da je pravilno postavljen firewall će odagnati većinu napadača od daljnjih pokušaja.
Firewall je učinkovit za spriječavanje nedopuštenih poruka, no firewall ne pomaže kada maliciozna poruka dolazi iz naizgled dopuštenog prostora. Takve poruke mogu koristiti malverzacije na razini protokola ili sigurnosne propuste u aplikaciji. Kod takvih poruka nam pomažu sustavi za otkrivanje napada (eng. Intrusion detection system, IDS) i sustavi za zaustavljanje napada (eng. Intrusion prevention system, IPS). Oni pregledavaju pakete koji su propušteni kroz firewall te korisniku javljaju ili logiraju detektirane pokušaje napada, te ih u slučaju IPS-a zaustavljaju. Neki primjeri su otkrivanje pokušaja njuškanja mreže i DoS na TCP protokolu.
Zbog prirode internetske komunikacije također može biti teško osigurati da poruke neće biti presretane, ili potpunim uskraćivanjem propusnosti paketa ili napadom čovjeka u sredini. Za zaštitu od takvih napada se koristi kriptiranje poslanih paketa, kako ih napadač ne bi mogao pročitati. Virtualne privatne mreže (eng. Virtual Private Network, VPN) koriste tuneliranje enkriptiranih paketa koji se na pošiljateljevoj strani kriptiraju javnim ključem te po primitku dekriptiraju privatnim ključem. Primjeri protokola koji se koriste za takvu komunikaciju su PPTP, L2PT, IPSEC, TLS i HTTPS.
Za računalnu sigurnost podrške nije dovoljno samo postaviti sigurnosne mjere i smatrati sustav potpuno sigurnim. Napadi se konstantno odvijaju te napadači napreduju u svojim tehnikama. Uz osnovne sigurnosne značajke, jako je bitna stalna kontrola i pregledavanje sustava za moguće upade i propuste. Postavljanje sustava za dojavu mogućih napada, pregledavanja logova i održavanje dijelova sustava na najnovijim verzijama su nužni za održavanje sigurnosti. Na žalost, u organizacijama se sigurnost često zna ostavljati po strani dok ne bude prekasno, zato je važno članovima menadžmenta podići svijest o bitnosti sigurnosnih aspekata sustava.
TCP protokol sadrži razne ranjivosti u samom protokolu, koje omogućavaju malicioznim korisnicima da napadima na server napadima uskraćivanja usluge, napadima na komunikacijske kanale prisilnim zatvaranjem veza, krađom sesija veza, lažnim predstavljanjem ili prisluškivanjem narušavaju sigurnost i ruše kvalitetu usluge.
Zato je bitno svim informatičkim stručnjacima da posvete dovoljno pažnje sistemskoj sigurnosti. Firewall sa pravilno postavljenim pravilima, sustav za detekciju i sustav za sprječavanje upada, virtualna privatna mreža i enkripcija komunikacijskih paketa su samo neki od osnovnih koraka koje je potrebno poduzeti na sustavu za osnovnu razinu zaštite. No, naravno to nije dovoljno jer sigurnost nije nešto što se može “obaviti” nego je to kontinuiran proces. Uz postavljene zaštitne korake, potrebno je konstantno nadgledanje sustava, pregledavanje logova, ažuriranje na najnovije verzije i praćenje za moguće sigurnosne propuste su nužni za održavanje sigurnosti.
[1] D. Wenliang: Computer Security: A Hands-on Approach, Oct. 12, 2017, 1st Edition
[3] B. Harris, R. Hunt: Computer Communications, June 10, 1999, Volume 22, Issue 10
[4] P. Paganini: Possible attacks on the TCP/IP protocol stack and countermeasures, May 7, 2021
[5] R. Myers : Attacks on TCP/IP Protocols CPSC4620: Computer Network Security
[6] https://www.cloudflare.com/learning/ddos/glossary/ip-spoofing/