Port knocking

From EIK wiki

Sissejuhatus

Tavaliselt süsteemse administraatori töö on seotud serveritega. Arukam ja mugavam on teha oma töö personaalse arvuti taga, aga serverid häälestada kaugadmenistreerimise eest. Mõnikord kaugadmenistreerimine on ainus viis midagi teha (n. kui administraator elab Eestis, aga on vaja portaali paigaldada Inglismaa serverile). Selles situatsioonis kaugadmenistreerimise tarkvara kasutab võrgupordid, et administraatorist serverile ühendamist ehitada. Samal ajal on vaja mõelda infoturbest – tänapäeval liiga palju inimesi Internetis tahavad serverit murda ning kasutada seda oma vajaduste jaoks. Tavaliselt administraatorid kasutavad pordid: 22 (SSH) andmete vahetuseks turvalise kanali läbi või 23 (Telnet) serveri konsole ühendamiseks. Oma kogemusest tean, et kui masinal on avatud port 23 ja hakker teab sellest – murdmine toimub kiiremini ja hakkeril on võimalus kõike teha.

Eesmärk

Tutvustada “knockd” tarkvaraga ja anda ülevaade – kuidas teha kaugadmenistreerimine ja ei anda teisele kasutada porte.

Põhiidee

Esimene element mis paigaldatakse serverile infoturbe eest on firewall. Firewall sulgeb kõik võrgupordid infoturbe eest(jäävad ainult standardsed pordid – n. port 80 “HTTP”). Kui keegi tahab serveriga koostöö teha, abiks tuleb “port knocking”(koputus pordile) printsiip. See printsep “lubab andme vahetamist suletud pordi läbi”.

Kuidas “koputus pordile” töötab?

Serveris on kõik pordid on suletud. Klient alustab ühendamist ja saab taotlusi erinevatele portidele. Kõik taotlused on visatud maha. Siis programm alustab ühendamise log faili uurimist ja kui ip aadressist koputus oli õiges järjekorras, siis server avab uut ühendust.

Näide

Näide1:tavaline võrgu skaneeremine Näide2:Koputus ja ühendust avamine


Serveri õige koputuse algoritm on 41, 22, 56, 400, 22. Kui keegi proovib avaliku porti otsida, siis tavaliselt alustab esimesest pordist kuni viimaseni. See „otsing“ ei anna kasutajale midagi. Teiselt poolt, kui kasutaja teab algoritmi, server avab ühendust kasutajale.

Kuidas kasutada „knocking“ tehnoloogiat

Serveris ja kasutaja arvutis kõik on vaja teha juurkasutaja õigusega.

sudo -i

Sel praktikaosa eesmärk – kaitsta port 22. Linux'i tuum juba sisaldab firewall'it, lihtsalt on vaja õige turbepolitikat kirjutada.

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP 

Praegu, kui inimene proovib ühendada serveriga ssh protokolli abil, siis tulemus on:

ssh: connect to host 192.168.0.12 port 22: Connection timed out

Knockd paigaldamine serverile

Ubuntu süsteemis:

sudo apt-get install knockd

Konfigureeremine

Failis /etc/knockd.conf administraator saab teha kõik konfigureeremine

[options]
   # kus kirjutada tarkvara logid. Kui on vaja süsteemlogis
   # kirjutame, siis kasutame UseSyslog
   logfile = /var/log/knockd.log
# ssh juurdepääse avamise tingimused
[openSSH]
	#pordi järjekord ühenduse avamiseks
	sequence    =  41,22,56,400,22
       # kui kasutaja teeb knocking rohkem kui 5 sekundi, siis server lõpeb ühendust
	seq_timeout = 5
	#firewall'i käsk, et ühendust avada
	command     = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
	#ühenduselipp TCP
	tcpflags    = syn
#ssh juurdepääse sulgemise tingimused
[closeSSH]
	#pordi järjekord ühendust sulgemiseks
	sequence    = 22,400,56,22,41
    	seq_timeout = 5
    	#firewall'i käsk, et ühendust lõpeda
    	command     = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    	tcpflags    = syn 

Knockd käivitamiseks:

knockd -d

Teised käivitusparameetrid

Parameeter Kirjeldus
-c võimalus valida teist config faili
-h abi
-i võimalus interface valida
-l avab DNS aadressi knocking
-v näitab detailised staatus sõnumid
-D näitab debug sõnumid
-V näitab versiooninumber

Knock paigaldamine kasutajale

Kasutaja peab omama knockd ka tarkvarat. Kui programmi pole, siis paigaldamiseks on vaja kirjutada:

apt-get install knockd

Ühenduse avamiseks on vaja kasutada käsku:

knock %serveri_ip% %port% %port% %port%

Näiteks

knock 192.168.0.12 41 22 56 400 22

Tavaliselt, et ühedust avada, kasutatakse tcp protokollit. Aga kui serveri configuratsiooni failis kirjutada porti ja tema protokollit (n. 400:udp), siis „knock“ käsul ka on vaja sama protokolli kirjutada. Vṍime proovida, kas server avab ühendust või mitte:

ssh 192.168.0.12 -l %teie_kasutajanimi_serveris%

Ühenduse sulgemiseks on vaja koputada pordid vastavsuunas (või järjekorras, mis on serveri config failis):

knock 192.168.0.12 41 22 56 400 22

Kokkuvõte

Turvalisus

Hakker võib proovida brute-force teha. Kui serveris on 65536 porti ja „knocking“ algoritm sisaldab ainult 5 elemendit, siis on vaja proovida 65536! / (5!*(65536-5)!) = 10,072,844,683,544,179,310,592 erinevat kombinatsiooni. Seepärast brute-force ei sobi, mis teeb „knocking“ turvalisem. Lisaks on vaja teada, milliste ajaperioodidega teha koputusi. See teeb hakkeritele rohkem muret.

Nõrkused

Hakker võib kasutada sniffer tehnoloogiat. See tehnoloogia püüab võrgust pakketid ja analüüsib neid. Hakker saab teada, millised pordid ja millises järjekorras on vaja koputada, et ühendust saada. Jääb üks probleem – saada aru mis ajaperiood server kasutab.

Kasutatud kirjandus

Autor

Sergei Gorjunov A21