Securizarea Serverului SSH

Posted: 06/09/2010 in Uncategorized
Tags:

SSHSecure SHell, e sistemul cel mai des intalnit pentru conectarea la distanta. Orice sistem folosit e implicit atacat, asa ca e bine sa stim care sunt principalele moduri in care se poate proteja acest serviciu. Pentru a face mai util articolul voi prezenta sfaturile punctual.
1. Schimbarea portului SSH
Portul implicit pentru ascultarea de conexiuni este 22. Oricine vrea sa atace sistemul verifica daca portul 22este deschis. O idee buna ar fi modificarea portului cu un altul care nu e folosit pe server, de preferat un port care poate deruta atacatorul. De exemplu, daca nu se foloseste un server POP3 pe masina in cauza se poate schimba portul SSH in 110. Majoritatea atacatorilor vor trece cu usurinta cu vederea peste portul 110 avand in vedere ca nu (mai) prezinta interes decat in cazuri izolate. Pentru modificarea portului se deschide fisierul de configurare ( /etc/ssh/sshd_config ) si se cauta linia:
Port 22
Modificati 22 cu 110 sau orice alt port liber si restartati serverul. E important sa verificati configuratia firewall-ului inainte de a modifica portul pentru ca nu pune din neatentie un port care este blocat din firewall si astfel blocandu-va in afara serverului fara ca acesta sa mai poata fi accesat remote.
2. Schimbarea protocolului
Serverul ssh poate comunica folosind protocoalele SSHv1 si SSHv2SSHv1 este protocolul vechi, vulnerabil, si e recomandat sa nu mai fie folosit pe nici un sistem aflat intr-un mediu care necesita securitate. In schimb serverul ssh poate fi obligat sa foloseasca doar SSHv2 astfel scazand riscul ca serverul sa fie accesat de un atacator care stie cum sa exploateze vulnerabilitatile SSHv1. Pentru a configura serverul sshsa foloseasca doar protocolul SSHv2 trebuie sa cautam in fisierul de configurare ( /etc/ssh/sshd_config ) linia urmatoare:
Protocol 2,1
Tot ce trebuie sa facem e sa stergem ,1 si sa lasam doar 2. Bineinteles, serverul ssh trebuie restartat pentru ca modificarea sa aiba efect.
3. Schimbarea adresei


In mod implicit serverul SSH asculta conexiuni pe orice adresa IP disponibila in sistem. E o optiune comoda, dar nu foarte sigura. Daca serverul dispune de mai multe adrese IP e bine ca serverul sa nu asculte conexiuni pe adresa IP principala, adresa care e atacata in majoritatea cazurilor. In schimb e de preferat ca serverul sa asculte conexini pe ultima adresa din cele alocate serverului. Pentru asta se cauta linia ListenAddress in care se adauga DOAR adresa IP pe care se doreste ascultarea de conexiuni. De exemplu, daca dorim ca serverul ssh sa asculte conexiuni doar pe adresa 1.2.3.4 vom modifica fisierul de configurare ( /etc/ssh/sshd_config ) in felul urmator:
ListenAddress 1.2.3.4
Din nou va trebui sa verificam firewallul ca nu cumva sa fie blocat accesul pe portul SSH pe IP-ul in cauza. Daca e totul in regula se restarteaza serverul ssh si se verifica daca totul functioneaza corect.

4. Blocarea accesului ca root
Scopul unui hacker este de a avea acces ca superuser pe sistem ceea ce in majoritatea cazurilor presupune cunoasterea parolei utilizatorului root. Pentru o mai buna securitate e bine sa nu permitem logarea pe ssh ca root. Daca avem nevoie de acces ca superuser pe sistem ne putem loga ca simplu utilizator iar apoi folosind comanda su ne putem schimba in root. Blocarea accesului ca root se face modificand din nou fisierul de configurare ( /etc/ssh/sshd_config ) si schimband linia:
PermitRootLogin yes
In loc de yes punem no si restartam serverul ssh. Acum utilizatorul root nu se mai poate loga direct pe sistem si pentru orice modificare importanta trebuie sa ne logam ca simplu utilizator iar apoi sa devenim root folosind comanda su. Trebuie sa fim atenti cand facem aceasta modificare sa avem cel putin un utilizator care are dreptul sa foloseasca comanda su. Asta presupune ca utilizatorul respectiv sa fie in grupul wheel.
5. Restrictionarea accesului la ssh pentru un grup restrans de utilizatori
Daca serverul are un numar mare de utilizatori din care doar o parte trebuie sa aiba acces ssh se poate folosi directiva AllowUsers care permite mentionarea utilizatorilor cu acces ssh. De exemplu, daca vom oferi acces ssh doar pentru utilizatorii administrator, tester si developer trebuie sa editam fisierul de configurare (/etc/ssh/sshd_config ) si sa adaugam o linie de forma:
AllowUsers administrator tester developer
6. Folosirea autentificarii bazata pe perechi de chei publice/private
SSH permite autentificarea bazata pe o pereche de chei: o cheie publica si una privata. Trecand peste avantajele aduse de posibilitatea de automatizare oferite de aceasta metoda exista un avantaj mare si anume se poate dezactiva optional autentificarea bazata pe parola daca e activa autentificarea bazata pe chei. Acesta e un avantaj foarte mare deoarece serverul ssh va fi practic imun la atacurile brute-force sau atacurile bazate pe dictionare. Pentru ca acest sistem sa functioneze trebuie sa editam fisierul de configurare (/etc/ssh/sshd_config ) si sa adaugam/editam urmatoarele linii:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Astfel autentificarea bazata pe chei va fi activa iar cheile cautate vor fi lute din directorul~/.ssh/authorized_keys a utilizatorului care se conecteaza. Dupa aceasta modificare restartam serverul sshpentru a verifica daca e totul in regula. Daca totul functioneaza corect si autentificarea bazata pe chei publice/private functioneaza corect putem bloca autentificarea bazata pe parola adaugand in fisierul de configurare urmatoarea linie:
PasswordAuthentication no
Acum accesul la server se poate face doar pe baza de chei. Chiar daca atacatorul cunoaste parola utilizatorului cu acces la ssh dar nu are cheia privata nu va putea face nimic pentru a se loga.
7. Restrictionarea accesului ssh de la o anumita adresa
Folosindu-ne de tcpwrappers putem restrictiona accesul la ssh doar de la anumite adrese IP sau putem bloca accesul ssh de la anumite adrese.
In Linux se foloseste sistemul vechi de configurare tcpwrappers, bazat pe doua fisiere: hosts.allow sihosts.deny. Unui numar restrans de adrese IP (ex. 192.168.0.1 si 192.168.0.2) modificam fisierul/etc/hosts.allow si adaugam cele doua adrese de forma:
sshd: 192.168.0.1
sshd: 192.168.0.2

Dupa asta modificam fisierul /etc/hosts.deny in care blocam accesul ssh pentru oricine altcineva:
sshd: ALL
Daca se foloseste FreeBSD treburile sunt putin diferite pentru ca acesta foloseste sistemul nou de configuraretcpwrappers in care toate regulile se pastreaza in acelasi fisier: hosts.allow. Daca dorim accesul doar pentru adresele de mai sus editam fisierul /etc/hosts.allow si adaugam urmatoarele 3 linii:
sshd:192.168.0.1:allow
sshd:192.168.0.2:allow
sshd:ALL:deny

Astfel se va permite accesul pentru cele doua IP-uri iar pentru orice alt IP care incearca sa se conecteze la server accesul va fi blocat.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s