Securitatea serverelor web - Securitatea Informatica

Securitatea serverelor web

Făcând o descriere metaforică, un server web poate fi comparat cu un chelner dintrun restaurant. Chelnerul va fi serverul web, restaurantul va fi mediul în care acesta lucrează (in special sistemul de operare), bucătăria restaurantului va fi sistemul de fişiere din care serverul web va alege fişierele cerute de clienţi. Această comparaţie este posibilă deoarece şi serverul web şi chelnerul au aceeaşi funcţie principală: aceea de a servi.
Un server web este un program care rulează pe un calculator, aşteaptă pe un port o conexiune TCP venită de la un client şi serveşte acestuia pagini web folosind protocolul HTTP.
Schema de principiu a funcţionării unui server web

Această definitie este foarte principială şi specifică toate caracteristicile obligatorii ale unui web server.
Serverul web este un software, un program de sine stătător, un executabil cu o funcţie bine stabilită: acea de a servi la cerere pagini de Internet într-un mod bine determinat. Acest software poate fi: Apache HTTP Server, Microsoft Internet Information Services (IIS), iPlanet Web Server, Roxen WebServer, Zeus WebServer, s.a. Există numeroase alte implementări de web server, cele numite mai sus ocupând primele locuri în topul celor mai folosite servere web. Intern, procesul de funcţionare al acestor programe este foarte complex, ele urmărind în special performanţă, securitatea şi scalabilitatea. Trebuie menţionat ca o aplicaţie de tip web server poate fi scrisă în mai puţin de 500 linii de cod C. Bineînţeles aceasta va avea o funcţionare foarte limitată, dar va corespunde definiţiei de mai sus, aceea de a transmite pagini web (pagini HTML şi imagini) către clienţi. Aplicaţiile mature, ca cele enumerate mai sus, dispun de o multitudine de funcţionalităţi extinse, în jurul lor operând tehnologii precum codurile externe de generare de pagini PHP, JSP sau ASP, administrarea sesiunilor de utilizator de către un server de aplicaţii care foloseşte Enterprise Java Beans (EJBs) sau Microsoft Component Object Model (COM+), extensii Microsoft FrontPage, interogări Lightweight Directory Access Protocol (LDAP) sau Microsoft Active Directory.
Fiecare server web dispune de un set caracteristic de astfel de tehnologii, care alături de capacitatea şi scalabilitatea să îl individualizează printre celelalte produse. Alegerea unui server este de aceea puternic influenţată de tehnologia pe care acesta o suportă, câştig de cauza având de aceea probabil servere proiectate modular cum ar fi Apache, lider consacrat pe piaţa serverelor web. Acest succes se bazează în mare parte pe faptul ca crearea de aplicaţii suplimentare este influenţată de întreaga comunitate Open Source precum şi datorită gratuităţii şi extensibilităţii sale. Printre criteriile de diferenţiere între produsele existente pe piaţă se mai numărăşi instalarea, configurarea şi administrarea procesului general de web-serving.
Un server web rulează pe un calculator. Prin calculator trebuie să înţelegem platforma pe care va rula programul descris anterior. Platforma este caracterizată de hardware-l şi de sistemul de operare pe care va fi instalat serverul web. Platforma hardware este în general un calculator ale cărui performanţe încep de la cele mai minimale până la servere de tip mainframe. Acest calculator va fi cel mai probabil un server dedicat, conectat permanent la o reţea (Intranet sau Internet). Pentru alegerea tipului de hardware dispunem de o gama foarte largă de sisteme, însa un criteriu necesar alegerii este compatibilitatea cu softul ales ca web server. Asta deoarece serverele web sunt dependente de arhitectura pe care vor rula şi mai ales de sistemul de operare instalat pe acea arhitectură. De exemplu, IIS rulează numai pe Windows, Zeus necesită Unix, Roxen şi iPlanet rulează fie pe Unix, fie pe Windows, Apache se găseşte ca open-source, putând fi compilat pe o largă varietate de versiuni Unix/Linux, dar se găseşte şi în versiuni precompilate pentru Windows sau Mac OS
X. Capacitatea de a rula pe mai multe tipuri de sisteme de operare le conferă acestora o răspândire mai largă, cu toate că performanţele sunt superioare în cazul rulării pe Unix. Aşadar, între serverul web şi sistemul de operare folosit este o legătura strânsa, alegerea unei configuraţii rămânând o problema comercială.
Un server web aşteaptă pe un port o conexiune TCP. Serverul web -ca orice aplicaţie server -va asculta un port. Acest port este în mod standard portul 80, acesta fiind cel folosit implicit la introducerea unei adrese normale de web. Dacă serverul web a fost configurat să asculte alt port, de exemplu 8080, atunci adresa va trebui să conţinăşi numărul portului la care trebuie să se facă conexiunea (exemplu: http://www.niculaantoniu.tk:8080/). Folosirea altui port decât 80 poate fi datorată rulării simultane pe aceeaşi maşină a mai multor servere web: de exemplu, Apache poate fi instalat pentru teste pe portul 8080, pe când portul 80 să fie folosit de IIS. Odată stabilit portul şi pornit serverul, un client se poate conecta la serverul web folosind adresa maşinii în cauza. Această adresă se numeşte URL (Uniform Resource Locator) şi este folosită exclusiv pentru a localiza şi determina maşina gazdă, protocolul folosit şi fişierul dorit. De exemplu, orice adresă din spaţiul de adrese românesc are forma:
[http[s]://]subdomeniu.domeniu.ro [:n][/localizare/fisier]
De asemenea, se poate folosi adresa IP a maşinii gazdă în mod direct sau aliasul localhost dacă conexiunea se face direct de pe maşina gazdă. Datorită folosirii protocolului TCP -protocol orientat pe conexiuni, în care o conexiune se creează la cerere şi se închide de îndată ce nu mai este nevoie de ea -conexiunea între client şi serverul web se va termina de îndată ce fişierul a fost trimis de către web-server. Starea conexiunii, în cazul fişierelor mai mari decât un pachet TCP, se păstrează activat atât de către client, cât şi de către server.
Exemple de accesare a web-serverelor: http://www.niculaantoniu.tk/ : cel mai simplu mod de adresare
http://www.niculaantoniu.tk/index.htm: adresarea fişierului index.htm aparţinând subdomeniului niculaantoniu
http://localhost:8080/test/test1.htm: pentru a accesa fişierul test1.htm din directorul test de pe maşina locală prin intermediul serverului care ascultă pe portul 8080
https://80.97.33.1/test.php: adresarea securizată a fişierului test.php folosind IP-ul maşinii gazdă
Clientul folosit pentru accesarea serverului web este cel mai probabil un browser (sau "navigator") web, dar poate fi şi alt program capabil să se conecteze la un port TCP (de exemplu: telnet). Browserul web este programul folosit la afişarea de conţinut web. Trebuie deci săştie să interpreteze pagini HTML, să afişeze imagini şi alte forme de conţinut multimedia, să folosească referinţe (linkuri) etc. Cea mai importantă caracteristică asă este probabil capacitatea de a se conecta prin protocolul TCP la un server web. Metoda de conectare am prezentat-o anterior. Mai trebuie menţionat că introducerea unei adrese web (de exemplu: http://www.niculaantoniut.tk/fisier.htm) în browser, produce următorul lanţ de acţiuni:
Browserul determină protocolul pe care îl va folosi în dialogul cu serverul web (http:// = HTTP -HyperText Transfer Protocol).
Browserul determină adresa web a serverului (www.niculaantoniu.tk).
Browserul determină ce anume trebuie să ceară de la serverul web (fisier.htm).
Pe baza adresei web, browserul determină adresa IP a maşinii pe care rulează serverul web prin interogări DNS (Domain Name Service).
Pe baza adresei IP determinată anterior, browserul instaurează o conexiune TCP pe portul specificat în URL sau implicit pe portul 80.
Browserul trimite o cerere GET către server specificând fişierul dorit: GET /fisier.htm.
Serverul web răspunde trimiţând fişierul dorit sau o eroare corespunzătoare în cazul în care trimiterea nu este posibilă (lipsa fişierului, drepturi de acces insuficiente etc.). Aici conexiunea dintre client şi server se încheie.
Browserul analizează fişierul primit şi îl afişează corespunzător.
Un server web serverşte pagini web. După cum am mai spus, rolul dedicat al serverului web este acela de a servi fişiere. În principal aceste fişiere sunt fişiere în format HTML, dar nu numai. Serverul web poate să serveascăşi alte fişiere: imagini, sunete, animaţii, arhive etc. Fişierele care sunt puse la dispoziţia navigatorului se află stocate într-un director văzut ca rădăcină de către web server (exemplu: C:\Inetpub\wwwroot pentru IIS sau /var/www/html/ pentru Apache). Acest director se specifică în configuraţia serverului şi în el se vor stoca fişierele şi structura de subdirectoare pe care le va folosi serverul web în căutarea unui fişier cerut de către un client ("bucătăria restaurantului"). Servirea unui fişier se efectuează dacă fişierul specificat există, dacă este accesibil de către serverul web şi dacă drepturile de acces nu interzic acest lucru. În cazul neîndeplinirii uneia dintre aceste condiţii, serverul va trimite un cod de eroare sau o pagină predefinită care să informeze despre eroarea apărută.
De multe ori, fişierele pe care trebuie să le servească depind de alte programe externe de generare de cod (PHP, ASP, JSP, PHP). Fişierele care necesită astfel de prelucrări vor fi generate de programul extern, a cărui rezultat va fi un fişier HTML nou creat. Acest fişier va fi transferat serverului web, pe care acesta poate să-l servească ca pe orice alt fişier. Acest proces stă la baza tuturor siturilor dinamice şi este absolut necesar pentru pagini al căror conţinut necesită modificări în funcţie de anumite criterii.
Un server web foloseşte protocolul HTTP. "Dialogul" dintre client şi server se efectuează prin protocolul HTTP, care este un protocol la nivel de aplicaţie. "Transportul" comunicaţiei dintre client şi server se efectuează folosind protocolul TCP, protocol la nivel de reţea. Protocolul HTTP defineste modul prin care se înţeleg clientul şi serverul. Clientul va trimite o cerere (o comandă HTTP în mod text simplu, (exemplu: GET, POST, HEAD, PUT) prin care informează serverul despre acţiunea pe care vrea să o întreprindă. Dacă, spre exemplu, serverul va primi o cerere de tip GET /index.htm, el va răspunde cu un status code prin care informează browserul despre succesul cererii sau eventualele erori apărute (de exemplu: codul 404 indica faptul ca fişierul specificat în URL nu există, codul 200 indica succesul cererii). În caz de succes, serverul va transmite un antet (header) către browser, cu informaţii ca: tipul şi versiunea protocolului folosit, limba conţinutului, dacă este necesară salvarea în cache-ul browserului sau nu, tipul conţinutului transmis (MIME type), data serverului, numele serverului etc. După antet, va fi transmis conţinutul fişierului cerut (in cazul unei cereri HEAD, doar antetul va fi trimis, nu şi conţinutul fişierului). Un exemplu de dialog intre server şi client :

2. Securitatea serverelor web

Datorită faptului că serverul web are acces direct la fişiere din sistemul pe care rulează, securitatea este un punct de maxim interes şi a necesitat multe versiuni ale serverelor web pentru a ajunge la un anumit nivel de siguranţa.
Securitatea serverelor web presupune o cunoaştere a modului de accesare al clienţilor la datele de pe server. Unele din problemele care trebuie avute în vedere sunt:

2.1. Amplasarea datelor

O problemă majoră este aplasarea datelor private în directoarele publice ale serverului de web. Mulţi dintre cei care oferă servicii internet oferă doar spaţiu pe web. Soluţia lor de găzduire mapează directorul de root al serverului ftp pe directorul de root al serverului web, în comcluzie directorul „/home/www/servers/www.customer.com/" va fi accesibil clienţilor folosind ftp-ul cu „/”, directorul rădăcină, deasemenea este accesibil folosind URL-ul „http: //www.customer.com/”.
Multe dintre site-urile comerciale îşi inregistrează comenzile şi informaţiile pentru depanarea „aplicaţiei” în unul sau mai multe fişiere de log, sau au fişiere de configuraţii parolate. Dacă aceste date sunt salvate în fişiere care se află mai jos de directorul de root al serverului web, atunci automat vor avea un URL asociat, deci utilizatorul va avea acces la date. Treaba unui atacator este doar de a ghici care este numele fisierului , acest lucru putânduse realiza prin folosirea de aplicaţii care scanează serverul web.
Aceste lucruri nu se întâmplă pentru soluţii de găzduire care au fost proiectate pentru a oferi stocare privată a datelor. Aici serverul de web şi cel de ftp se află în directoare separate aflate sub directorul clientului. De exemplu directorul principal este "/home/www/servers/www.customer.com/", directorul de ftp este "/home/www/servers/www.customer.com/public_ftp" iar directorul pentru documente html este "/home/www/servers/www.customer.com/public_html". Folosind această configurare se pot creea directoare care nu vor fi accesibile publicului.
O modalitate de a combate accesul la directoare , deşi sunt amplasate în directoare public, este restricţionarea accesului prin folosirea fişierelor .htaccess. De exeemplu pentru serverul Apache pentru a limita accesul la directorul „/shop” se poate folosi:
$ cat /shop/.htaccess order deny, allow deny from all

2.2. Accesul la servicii private

Mulţi dintre cei care oferă servicii de găzduire nu au avut niciodată curiozitatea de aşi privi sistemul din afară, de a folosi un program pentru scanarea porturilor accesibile de la
o adresă IP. Un exemplu este serverul celor de la Heise. Acesta nu folosea un firewall (din motive de performanţă), lucru ce a dus la posibilitatea accesării serviciilor private de către oricine. În consecinţă exista posibilitatea accesării serverului bazelor de date Oracle. Parolele pentru conexiunea cu acest server erau stocate in scripturi aflate in directoare care erau accesibile publicului.
Aceasta greşeală este combinată cu folosirea serviciilor nesecurizate. De exemplu mulţi dintre cei care oferă servicii de găzduire oferăşi servicii POP3 precum şi access FTP sau access la baze de date, pentru upload-are. Aceste protocoale pot oferi autentificare securizată sau transmisie securizată (de exemplu versiunea SSL a protocolului POP sau FTP), dar mulţi folosesc versiuni nesecurizate. Unele protocoale, cum ar fi serverul de baze de date MySQL, nu oferă nici ometodă de autentificare.

2.3. Securizarea conexiunii

Pentru a oferi o comunicare securizată între client şi serverul web se poat folosi module de criptare. Unul dintre aceste module este mod_ssl folosit petru serverul Apache. Să presupunem că dorim să facem un transfer de bani, comunicarea cu bancă să se realizeze într-un mod privat, doarece inlcud informaţii private.

2.3.1. Criptarea datelor

Un mod de a realiza acest lucru este criptarea mesajului care urmează a fi trimis la bancă. Există 2 categorii de algoritmi de criptare:
criptare convenţională – această metodă presupune schimbarea de chei între client şi server. Dacă această cheie este privată nimeni nu poate citi mesajul. Modul de alegere al acestor chei poate fi o problemă.
criptare folosindu-se o cheie publică – rezolvă problema trimiterii de chei prin definirea unui algoritm care foloseşte 2 chei; dacă o cheie este folosită pentru a crista mesajul, cea de a 2-a cheie este folosită petru a decripta mesajul. Oricine poate cripta un mesaj folosind o cheie public, însă doar acela care deţine cheia privată poate citi mesajul.

2.3.2. Semnatura digitala

Când se doreşte trimiterea unui mesaj la o bancă, aceasta trebuie să se asigure că mesajul este trimis de către persoana care sunsţine că la trimis. Pentru acest lucru se foloseşte semnătura digitală. Aceasta trebuie inclusă în mesajul trimis serverului.

2.3.3 Certificate

Pricipalul obiectiv al certificatelor este acela de a garanta ca o anumită cheie publica aparţine unei anumite identităţi. (persoana, organizaţie, server/serviciu). Certificatele sunt “eliberate” (issued) sau au semnătura digitală a unei autorităţi numite Certificate Authority (CA).
Dacă clientul recunoaşte certificatul primit de la server atunci are loc validarea certificatului. Dacă clientul nu recunoaşte certificatul verifică de cine a fost semnat acesta. Acest ciclu se repetă până se ajunge la un certifica care este recunoscut. Dacă nu s-a găsit nici un certifica recunoscut atunci conexiunea este anulată.
Pentru verificarea certificatelor clientul trebuie să deţină o listă cu certificate CA.

Twitter Digg Delicious Stumbleupon Technorati Facebook


4 Raspunsuri la “Securitatea serverelor web”

  1. Felicitari pentru site. Sper ca veti sta pe piata mult si bine. Aveti un cititor in plus. V-am pus si la blogroll. Spor!

  2. cand o sa puneti sa va putem urmari si prin email?

  3. Oricum felicitari pentru site si mi-am pus ampitia sa il citesc tot. Foarte tare

  4. Intr-un timp am fost pasionat de securitatea sistemelor,primul lucru pe care l-ar face un atacator ar fi sa obtina informatii despre servarul pe este gazduit site-ul(un exemplu).
    al vostru e> Server: Apache/2.2.16 (Debian), uite si sistemul de operare
    Cum sunteti specialisti in securitatea serverelor poate doriti sa mascati servarul, ce ziceti?

Lasa un raspuns

This site is protected by Comment SPAM Wiper. This site is protected by WP-CopyRightPro