Port knocking

U računalnim mrežama, „port knocking“ je metoda eksternog otvaranja portova na firewallu  pokušavanjem povezivanja na unaprijed određene zatvorene portove (dakle portove otvara korisnik izvana tako što pristupi na točno određene zatvorene portove). Nakon što se pokušamo spojiti na ispravan slijed portova, pravila firewalla se dinamički mijenjaju kako bi firewall otvorio do tada zatvoreni port i omogućio povezivanje preko određenog porta (ili više njih, ovisno o konfiguraciji). Postoji varijanta koja se naziva „single packet authorization“ iliautorizacija jednog paketa (SPA), gdje je potreban samo jedan „knock“, odnosno pokušaj spajanja na samo jedan port, a taj pokušaj se sastoji od enkriptiranog paketa. Primarna svrha „port knocking-a“ je spriječiti napadača da skenira sustav u potrazi za servisima i portovima koji bi se mogli iskoristiti skeniranjem portova, jer ako napadač ne pošalje ispravnu „knock“ sekvencu, zaštićeni portovi će ostati zatvoreni.

Pregled

„Port knocking“ se obično implementira konfiguriranjem daemona da prati log datoteku firewalla radi pokušaja povezivanja s određenim portovima koji imaju za cilj u skladu s tim pokušajima modificirati konfiguraciju firewalla. Također se može izvesti na razini kernela (upotrebom filtera paketa na razini kernela kao što je iptables) ili procesom korisničkog prostora koji ispituje pakete na višoj razini (upotrebom interfacea za snimanje paketa kao što je pcap), dopuštajući da se već “otvoreni” TCP portovi koristite unutar „knock“ sekvence.

Knock port je sličan tajnom rukovanju (secret handshake) i može se sastojati od bilo kojeg broja paketa te TCP, UDP,ICMP i drugih protokola na target računalu. Složenost „kucanja“ može biti proizvoljna – od jednostavnog predvidljivog redosljeda (npr. TCP port 1000, TCP port 2000, UDP port 3000) do složenog kriptiranog hasha koji ovisi o vremenu, izvorišnoj IP adresi s koje dolazi kucanje i drugim faktorima.

„Portknock“ daemon na stroju firewalla osluškuje pakete na određenim portovima (bilo putem firewall loga ili hvatanjem paketa). Korisnik može iskoristiti dodatni uslužni program poput netcat-a ili modificiranog ping programa ili čak kompliciranog programa poput hash-generatora, i koristiti ga prije nego što se pokuša spojiti na target stroj na uobičajeni način.

Većina „portknock-ova“ su sustavi sa stanjem u smislu da ako je prvi dio “knock-a” uspješno primljen, netočan drugi dio ne dopušta remote korisniku da nastavi i ne daje mu nikakvu naznaku o tome koliko je daleko kroz niz uspio proći i uspješno ili neuspješno „kucati“. Obično je jedina indikacija neuspjeha ta da se na kraju „knock“ sekvence port za koji se očekuje da će se otvoriti, ne otvori. Paketi se ne šalju remote korisniku koji „kuca“ niti u jednom trenutku.

Iako ova tehnika za osiguravanje pristupa remote mrežnim daemonima nije široko prihvaćena od strane sigurnosne zajednice, aktivno se koristila u mnogim rootkitovima čak i prije 2000. godine.

Prednosti

Za probijanje port knocking zaštite potrebni su brute force napadi velikih razmjera kako bi se probile čak i jednostavne sekvence. Anonimni brute force napad na TCP sekvencu s tri kucanja (npr. port 1000, 2000, 3000) zahtijevao bi od napadača da testira svaku kombinaciju s tri porta u rasponu 1–65535, a zatim skenira svaki port između napada kako bi otkrio sve promjene u stanju portova na target sustavu. Budući da „port knocking“ po definiciji ima status, traženi port se ne bi otvorio sve dok korisnik ne pošalje, a target ne primi ispravanu sekvencu portova, ispravnim redoslijedom i bez primanja drugih intervenirajućih paketa od korisnika. Prosječan scenarij zahtijeva otprilike 141 trilijun (655353 / 2) paketa da bi se odredila točna sekvenca s tri kucanja. Ova tehnika, u kombinaciji s ograničenjem pokušaja „knocking-a“, duljim ili složenijim sekvencama i kriptografskim hashovima, iznimno otežava uspješne pokušaje neovlaštenog pristupa portu.

Nakon što se uspješna sekvenca „port knock-a“ dostavi za otvaranje porta, pravila firewalla općenito otvaraju port samo za IP adresu koja je dostavila ispravnu „knock“ sekvencu, dodajući dinamičku funkcionalnost ponašanju firewalla. Umjesto korištenja prethodno konfigurirane whiteliste statičkih IP adresa dopuštenih na firewallu, ovlašteni korisnik koji se nalazi bilo gdje u svijetu mogao bi otvoriti bilo koji potrebni port bez potrebe za intervencijom administratora servera. Sustav se također može konfigurirati da omogući autentificiranom korisniku da ručno zatvori port nakon što sesija završi ili da se automatski zatvori pomoću mehanizma vremenskog ograničenja. Da bi se uspostavila nova sesija, remote korisnik bi se trebao ponovno autentificirati korištenjem ispravne sekvence portova.

Princip rada „port knocking-a“ koji se temelji na stanju omogućuje da nekoliko korisnika s različitih izvornih IP adresa budu na različitim razinama port knock autentifikacije istovremeno, dopuštajući legitimnom korisniku s ispravnom knock sekvencom otvaranje porta na firewallu dok je sam firewall usred „napada“ s više IP adresa (pod pretpostavkom da propusnost firewalla nije u potpunosti začepljena). S bilo koje druge napadačke IP adrese, portovi na firewallu i dalje će biti zatvoreni.

Korištenje kriptografskih hashova unutar „port knock“ sekvence štiti od sniffanja paketa između izvornog i ciljnog računala, sprječavajući otkrivanje „port knock“ sekvence ili korištenje informacija za stvaranje napada ponavljanjem prometa koje uključuje prethodne sekvence „port knock-a“.

„Port knocking“ koristi se kao dio strategije dubinske obrane. Čak i ako bi napadač uspješno ostvario pristup portu, drugi sigurnosni mehanizmi porta i dalje su postojani, zajedno s dodijeljenim mehanizmima provjere autentičnosti na otvorenim portovima.

Implementacija tehnike je jednostavna, koristeći minimalni shell pristup na serveru i Windows batch datoteku ili pomoćni program naredbenog retka na klijentu. Opterećenje i na serveru i na klijentu u smislu prometa, CPU-a i potrošnje memorije je minimalno. Port knock daemone nije složeno kodirati; bilo koja vrsta ranjivosti unutar koda je očita i podložna reviziji.

„Port knock“ sustav implementiran na portove kao što je SSH zaobilazi problem brute force napada na lozinku  i postupak prijave na sustav. U slučaju SSH-a, SSH daemon se ne aktivira bez ispravne port knock sekvence, a napad se filtrira TCP/IP stackom umjesto korištenjem resursa za autentifikaciju SSH-a. Napadaču je daemon nedostupan sve dok ne unese ispravnu port knock sekvencu.

Sigurnosna razmatranja

„Port knocking“ je fleksibilan, prilagodljiv sistemski dodatak. Ako administrator odluči povezati „knock“ sekvencu s aktivnošću kao što je pokretanje shell skripte, druge promjene kao što je implementacija dodatnih pravila firewalla za otvaranje portova za određene IP adrese mogu se jednostavno ugraditi u skriptu. Simultane sesije su lako prilagodljive.Korištenjem strategija kao što su dinamička duljina i skup duljina može se smanjiti vjerojatnost hakiranja knock sekvenci gotovo na nulu.Uz ublažavanje brute force napada na lozinke i neizbježnog rasta log zapisa povezanih s daemon procesom, „port knocking“ također štiti od iskorištavanja ranjivosti protokola. Ako se otkrije iskorištavanje koje bi moglo kompromitirati daemona u njegovoj zadanoj konfiguraciji, korištenje „port knocking-a“ na listening portu smanjuje mogućnost kompromitacije dok se softver ili proces ne ažuriraju. Ovlašteni korisnici bi se nastavili posluživati ​​nakon što daju točnu „knock“ sekvencu dok bi se pokušaji nasumičnog pristupa zanemarivali.Probijanje porta trebalo bi promatrati samo kao dio cjelokupne mrežne obrambene strategije koja pruža zaštitu od nasumičnih i ciljanih napada, a ne kao potpuno samostalno rješenje.Profesionalci za mrežnu sigurnost uglavnom su ignorirali „port knocking“ kao rješenje u prošlosti budući da su se rane implementacije oslanjale isključivo na pružanje ispravnih kombinacija portova za ostvarivanje pristupa. Moderni port knock sustavi uključuju značajke kao što su sigurni kriptografski hashevi, crne liste, bijele liste i dinamički odgovori na napade s ciljem povećanja sposobnosti sustava. Port knocking je učinkovit način maksimiziranja resursa servera na mrežama okrenutim prema internetu.Ispravno implementiran „port knocking“ ne smanjuje ukupnu sigurnost sustava. To je učinkovita mjera koja pruža dodatni sloj sigurnosti s minimalnim opterećenjem resursa servera. U najgorem slučaju, sustavi kao što je „port knocking“ uvode nove sigurnosne probleme kroz lošu implementaciju ili izlažu ambivalentne stavove administracije kroz situacije kao što je kompenzacija rizika.

Nedostaci

„Port knocking“ u potpunosti ovisi o robusnosti daemona „port knocking-a“. Kvar daemona uskratit će pristup portu svim korisnicima, a iz perspektive upotrebljivosti i sigurnosti, ovo je nepoželjni single point of failure. Moderne implementacije „port knocking-a“ ublažavaju ovaj problem pružanjem daemona za nadgledanje procesa koji će ponovno pokrenuti neuspjeli ili zaustavljeni „port knocking“ daemon proces.

Sustavi koji ne koriste kriptografske hashove ranjivi su na napade lažiranja IP adresa (IP spoofing). Ovi napadi su oblika uskraćivanja usluge (Denial of service), koriste funkciju „port knocking-a“ za zaključavanje poznatih IP adresa (npr. administratorske upravljačke stanice) slanjem paketa s lažnom IP adresom na nasumične portove. Serveri koji koriste statičko adresiranje posebno su ranjivi na denial of service napade jer su njihove adrese dobro poznate.

„Port knocking“ može biti problematičan na mrežama koje imaju veliku latenciju. Port knocking ovisi o paketima koji stižu ispravnim redoslijedom za pristup dizajniranoj funkcionalnosti. S druge strane TCP/IP je dizajniran da funkcionira tako što sastavlja pakete koji mu pristižu u „nasumičnom“ redoslijedu i slaže ih u koherentnu poruku. U tim je situacijama jedino rješenje da klijent nastavi slati ispravan niz paketa na periodičkoj bazi sve dok server ne potvrdi slijed. Port knocking se ne može koristiti kao jedini mehanizam provjere autentičnosti za server. Iz sigurnosne perspektive, „port knocking“ se oslanja na sigurnost kroz nejasnoću (security through obscurity); nenamjerno objavljivanje „knock“ sekvence dovodi do kompromitacije svih uređaja koji podržavaju sekvencu. Nadalje, nekriptirani„port knocking“ ranjiv je na sniffing paketa. Mrežni trag odgovarajuće duljine može detektirati ispravnu knock sekvencu iz jedne IP adrese i tako osigurati mehanizam za neovlašteni pristup serveru i proširenjem, priključenoj mreži. Jednom kompromitirane, log datoteke na uređaju izvor su drugih valjanih knock sekvenci, otkrivajući još jednu točku kvara (point of failure). Rješenja kao što je tretiranje svake knock sekvence kao jednokratne lozinke uništavaju cilj pojednostavljene administracije. U praksi, „port knocking“ mora se kombinirati s drugim oblicima autentifikacije koji nisu osjetljivi na napade ponavljanja (replay attack) ili “man-in-the-middle“ napade kako bi cijeli sustav bio učinkovit.

Komentiraj