ot Vladsun(12-09-2006)

reiting (22)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

Povecheto administratori vizhdat ogromni logove za neuspeshni (dai bozhe;) ) opiti za SSH login chrez izpolzvane na slabi paroli i chesto sreshtani potrebitelski imena. S uvelichavaneto na broia na potrebitelite, koito se nuzhdaiat ot SSH dostup do konzolata se uvelichava i veroiatnostta ot probiv.
Sushtestvuvat mnogo nachini za zashtita ot podoben vid ataki (bruteforce ili dictionary). Neka spomenem niakoi ot tiah:

- smiana na porta na SSH uslugata;
CHesto sreshtana praktika, no pri narochna ataka sreshtu samiia surver lesno shte se otkrie na koi port slusha sshd deamon-a. Vednaga shte se poiaviat predlozheniia za polzvane na PSD (port scan detection), no po sushtestvo PSD tehnikata "opazva" vsichki portove, a ne samo opredelen. S izpolzvaneto na podhodiashti optsii na nmap, tazi zashtita bi mogla da se prekochi. Sledvasht problem e man-in-the-middle atakite, pri koito lesno se otkriva koi port e za sshd. Sled otkrivaneto na SSH porta zapochva vtora ataka nasochena sreshtu samite paroli;

- blokirane na opredeleni IP-ta za opredeleno vreme chrez sledene na sistemnite logove;
Ima mnogo proekti bazirani na tozi metod. Na men lichno ne mi haresva ideiata za periodichnostta na proverka na logovete.

- zabrana za izpolzvane na user/pass, razreshavane samo na key-authorization;
CHudesna zashtita, stiga obstoiatelstvata da vi pozvoliavat takova reshenie.

Predlaganoto ot men reshenie se harakterizira sus slednite svoistva:
- zashtita samo na port 22;
- zashtita pri ataki ot tipa bruteforce i dictionary;
- lipsa na periodichnost na proverka za nevalidni opit za login;
- lipsa na zavisimost ot sistemnite logove;
- prostota na izpulnenieto;
- lesna promiana na parametrite na zashtitata;

Kato nuzhen softuer izpolzvam samo iptables + recent patch-a. Ne zabraviaite da kompilirate recent match-a kato modul za da mozhete da promeniate dulzhinata na tablitsite ot IP-ta.
V zashtitnata stena dobaviame:
Zashtitna stena
iptables -N SSH
 iptables -A INPUT -p tcp --dport 22 --syn -j SSH
 iptables -A SSH -p tcp -s 127.0.0.1 -j RETURN
  iptables -A SSH -p tcp --syn --dport 22 -m recent --name
bad_ssh --update --seconds 60 -j DROP
  iptables -A SSH -p tcp --syn --dport 22 -m recent --name
bad_ssh --set -j RETURN
Kakvo praviat tezi pravila?
Purvo se prihvashtat samo opitite za initsializatsiia na SSH sesiia. Sled tova se proveriava dali IP adresa ot koito se poluchava tozi opit ne e veche v spisuka (bad_ssh) sus sledeni IP-ta i ako e se proveriava dali intervala ot vremeto na posledniia mu opit za initsializirane na SSH sesiia kum tekushtoto vreme e po-maluk ot 60 sek. Ako ne, to syn-paketa se othvurlia i ednovremenno s tova se obnoviava vremeto na posledniia opit za vruzka na tova IP. Ako li da, to paketa produlzhava po verigata nadolu, kato v sushtoto vreme se pravi zapis za vremeto na opit za dostup i IP-to v spisuka. Efektut ot obnoviavaneto na vremeto pri povtoren opit e, che se iziskva pone 60 sek. sledenoto IP da ne pravi povtoren opit za dostup.
S tezi zashtitni pravila bi moglo da se schita, che zashtitata e izgradena. No sushtestvuva edno iavno neudobstvo - dori pri validen opit za dostup do SSH uslugata, triabva da se izchakat 60 sek. za suzdavane na vtora SSH sesiia (lichno az otvariam po niakolko konzoli). Za preodoliavaneto na tova neudobstvo e nuzhno da se sledi koe IP ima validen dostup do SSH sesiia i za nego gornite pravila da ne vazhat. Proverkata za validnost na sesiiata ia pravia chrez .bash_profile - izpulniava se pri vseki validen login na potrebitelia.
Suzdavame (ako ne sushtestvuva) .bash_profile vuv vsiaka home direktoriia na vseki potrebitel, koito iskame da zashtitim. V tezi failove triabva da ima reda:
Kod
sudo
/usr/local/sbin/ssh_user_allow
Zabelezhete, che se izpolzva sudo, taka che grupata (ili potrebitelite) triabva da sa opisani v /etc/sudoers faila s root prava za puskane na /usr/local/sbin/ssh_user_allow. Tova se nalaga zaradi 0644 razresheniiata na /proc/net/ipt_recent/* failovete.

Samiiat fail /usr/local/sbin/ssh_user_allow e sus slednoto sudurzhanie:

ssh_user_allow
#!/bin/bash
  user_ip=`echo $SSH_CLIENT |
awk '{print $1}'`
  echo "-$user_ip" >
/proc/net/ipt_recent/bad_ssh
Kakvo pravi toi?
Purvo namira IP-adresa na lognatiia potrebitel i vtoro premahva  IP adresa mu ot spisuka sus sledenite IP-ta. Po tozi nachin iptables pravilata opisani po-gore niama da zadeistvat zashtitata po IP/vreme.
Vuzmozhno e vmesto opisaniia nachin za razreshavane na veche lognati potrebiteli, kum iptables pravilata da se dobavi i --hitcount parametura. Po tozi nachin se ukazva kolko opita (validni ili ne) za opredelen period ot vreme (v sluchaia 60 sek.) shte se dopuskat. Proverka za validnost na login-a ne se pravi.


<< Polezni suveti za Firefox | Blokirane na avtomatizirani ataki pod Linuks i *BSD >>