Ovde cemo pricati o tome kako da se odbranite od SSH brute force napada. SSH znaci Secure SHell i skup je alata koji se uglavnom koriste za administriranje udaljenih racunara preko zasticene-enkriptovane veze. Naravno postoje i druge namene kao npr manipulisanje fajlovima koristeci SFTP ili SCP protokole, kreiranje vpn tunela itd. Jedan od najrasprostranjenijih danas je svakako OpenSSH. Napadaci uglavnom skeniraju hostove u potrazi za otvorenim portom 22, inace podrazumevani port na kome SSH slusa, i onda pokusavaju da zapocnu konekciju tako sto nasumicno isprobavaju korisnicka imena i lozinke. Ako koristite cesta imena (admin, root, backup, imena…) i lake kratke lozinke vasa masina je idealna meta. Ovaj nasilnicki pokusaj ulaska na masinu se naziva brute force napad. Navescemo nekoliko nacina da se odbranite od ovih napada:

Promena porta

Posto su vecina ovih napada ustvari skripte koje 'napadaju' tj. skeniraju port 22 jedan od nacina je da se SSH premesti na neki nestandardni port kao npr 2222. Znaci u /etc/ssh/sshd_config menjamo sledece:

Port 2222

Ova mala promena zaustavlja dobru vecinu napada, cak i preko 80%, medjutim ako imate napadaca koji je odlucan da udje na masinu sama promena porta na kojem SSH ocekuje konekciju ga nece spreciti da skenira i ostale portove. Da vidimo onda dalje kako se mozemo zastititi od besposlicara koji bolje da skidaju pr0n umesto sto skeniraju okolo. :-D:-D:-D

Restrikcija korisnika u /etc/ssh/sshd_config

Konfigurisanjem /etc/ssh/sshd_config fajla moze se dozvoliti pristup samo odredjenim korisnicima. Npr. da dozvolimo pristup korisnicima soxxx i dalibor dodajemo sledece:

AllowUsers soxxx dalibor

Ako se korisnici loguju sa ovek istih IP adresa, onda se ovo moze dodatno utegnuti:

AllowUsers soxxx@10.0.0.2 gdalibor@10.0.0.3

AKo korisnik soxxx pokusa da se poveze recimo sa IP adrese 10.10.10.10 pristup mu nece biti dozvoljen bez obzira sto njegovo korisnicko ime ima prava pristupa.

Koriscenje RSA / DSA kljuceva

Da bi dodatno osigurali SSH konekcije, mozete zabraniti da korisnici koriste lozinke i umesto toga koriste par kriptografskih RSA ili DSA kljuceva. Da bi to omogucili morate u konfiguracionom fajlu podesiti sledece:

PasswordAuthentication no

da bi onemogucili koriscenje lozinki i onda generisati kljuceve, recimo za RSA:

# ssh-keygen -t rsa

Onda vas javni kljuc ~/.ssh/id_rsa.pub distribuirate na hostovima kojima zelite da pristupite tako sto dodate kljuc u ~/.ssh/authorized_keys fajl. Sami kljucevi se dodatno mogu obezbediti koriscenjem passphrase - lozinke, tako da iako kljuc/evi padnu u pogresne ruke nemogu se iskoristiti bez znanja lozinke. Koriscenjem ssh-agent alata kljucevi se mogu ucitati u memoriju tako da ce biti potrebno samo prvi put uneti lozinku. Ovo je jedan od veoma sigurnih nacina zastite.

Ogranicavanje broja konekcija koristeci zastitni zid

Koristeci pf paket filter to se moze uraditi na nekoliko nacina. Ovo ce raditi na FreeBSD 6.x i novijim, npr:

table <losi_momci> persist
block in log quick on $ext_if proto tcp from <losi_momci>

pass in on $ext_if proto tcp to $ext_if port ssh flags S/SA \
         keep state (max-src-conn-rate 5/40, overload <losi_momci> flush global)

U slucaju da neko pokusa da ostvari 5 konekcija za 40 sekundi pf ce njegovu adresu staviti u tabelu <losi_momci> i prekinuti svaku vezu sa istim. U drugom pravilu blokiramo svaki dalji pokusaj bilo kakve konekcije sa adresa iz tabele <losi_momci>. Naravno pozeljno je da nakon nekog vremena ocistite vasu tabelu jer se moze desiti da je napadaci koristio dinamicku adresu prilikom napada koja sada moze biti dodeljena nekom legitimnom korisniku. Za to se mogu koristiti recimo experitable iz portova (security/expiretable)ili pfctl alatka ako koristite RELENG_7 granu.

  • PAZNJA! Oni koji koriste RELENG_7 granu treba da znaju da pf dolazi iz verzije OpenBSD 4.1 i da su podrazumevano ukljuceni flags S/SA i keep state opcije.

Postoji jos jedan nacin za “filtriranje” konekcija koje dolaze na SSH port koristeci pf paket filter. Statistika kaze da skoro 95% skeniranja dolazi sa Linux hostova (napadac ili kompromitovana masina). Ovde mozemo iskoristiti pf da filtriramo na osnovu operativnog sistema (OS fingerprint) i blokiramo saobracaj koji dolazi sa Linux sistema na port 22. Linux korisnicima se mozda ovo nece dopasti ali jbg …do we really care?! :-D:-D

block drop in log quick on $ext_if proto tcp from any os Linux to any port ssh

Naravno ovo uzmite sa rezervom. ;)

Skripte koje citaju ssh log

Svaki neuspeo pokusaj povezivanja na SSH port se belezi u logu koji se naziva auth.log i nalazi se u /var/log direktorijumu. Na netu postoji gomila skripti koje citaju taj log i onda, na osnovu zadatih kriterijuma kao npr broj neuspelih konekcija, informacije prosledjuju nekom drugom programu, npr zastitnom zidu koji blokira dalji saobracaj sa tih adresa. Posto je njihov princip manje vise slican (brojanje neuspelih konekcija i prosledjivanja IP adresa u pf tabelu) samo cemo navesti nekoliko:

Ime programa/skripteWeb adresa
denyhost (http://denyhosts.sourceforge.net/)
denyssh (http://code.google.com/p/denyssh/)
sshlockout (http://pfsense.com/cgi-bin/cvsweb.cgi/tools/Attic/sshlockout_pf.c?rev=1.2)
BruteForceBlocker (http://danger.rulez.sk/projects/bruteforceblocker/)
sshit (http://anp.ath.cx/sshit/)
blocksshd (http://blocksshd.sourceforge.net/)
sshguard (http://sshguard.sourceforge.net/)

Ovakve i slicne skripte mogu biti ranjive na tzv. log injection attack (slicno SQL injection) mada su se neke pokazale u praksi i nemaju problema sa tim napadima.

Naravno ovo nisu jedini nacini za odbranu od brute force napada i sam OpenSSH poseduje jos sigurnosnih opcija koje mozete iskoristiti pored recimo stare dobre dugacke motke, izdate pod BSD licencom nraravno, kojom mozete juriti one koji vas skeniraju i pokusavaju da udju na vasu masinu. :-D:-D

Pozdrav

soxxx@dalibor



 
odbrana_od_ssh_brute_force_napada_-_primeri.txt · Last modified: 2008/01/05 23:23 by soxxx
 
Recent changes RSS feed Creative Commons License Valid XHTML 1.0 Valid CSS Driven by DokuWiki