Documente Academic
Documente Profesional
Documente Cultură
Pe parcursul ultimilor ani, aplicaiile web au avut parte de o dezvoltare uluitoare, odat cu
intrarea n era Web 2.0 i dezvoltarea conceptului de cloud computing. Acest fenomen a fost
sprijinit de inovaiile tehnologice din domeniu, prin care paginile web n care erau afi ate mai
nainte informaii statice au devenit pagini dinamice, interactive ce permit un nivel de
interaciune ridicat al utilizatorului cu aplicaia web.
Dezvoltarea exploziv a creat de asemenea premisa apariiei vulnerabilitilor specifice
domeniului web, iar numrul acestora este n continu cretere dei cele mai populare atacuri au
la baz tot vulnerabiliti identificate pentru prima dat cu ani n urm. Aceast lucrare va face o
scurt trecere prin cele mai comune tipuri de vulnerabiliti specifice aplicaiilor web ([Cert12]):
a. SQL Injection
b. Cross-site Scripting (XSS)
c. Mesaje de erori prea detaliate (verbose errors)
d. Eludarea restriciilor de autentificare (authentication bypass)
e. Eludarea restriciilor de autorizare (authorization bypass)
f. Erori Logice
g. Diseminarea codului surs
a. SQL Injection (Injectarea de cod SQL).
Cea mai mare parte a aplicaiilor web existente n prezent folosesc baze de date pentru a
stoca datele necesare. SQL reprezint un standard internaional pentru regulile i sintaxa
comenzilor ce pot fi transmise unui sistem de gestiune a bazelor de date (SGBD), pentru
prelucrarea datelor stocate. Printre cele mai populare SGBD-uri la ora actual se numr
MySQL, PostgreSQL, Microsoft SQL Server, Oracle.
Un atac de tip SQL Injection apare n momentul n care un atacator are posibilitatea de a
introduce orice fel de date ntr-o interogare SQL folosit pentru accesarea bazei de date sau
atunci cnd se poate introduce (injecta) n locul datelor o sintax prin care logica declaraiei s
fie modificat astfel nct s execute o aciune diferit dect cea pentru care fusese destinat.
Acest tip de atac poate avea consecine grave, de la aflarea datelor cu caracter personal pn la
tergerea ntregii baze de date din spatele aplicaiei i, n ciuda pericolului pe care l reprezint,
este cea mai frecvent ntlnit vulnerabilitate n rndul aplicaiilor web ([Cert12]).
Urmtorul exemplu, prezentat n tabelul 4.1.1, prezint codul unei funcii de autentificare
care cere ca parametri numele i parola utilizatorului ce dorete s se logheze ntr-o aplicaie.
Deoarece datele de intrare pe care utilizatorul le va furniza (numele, respectiv parola sa) nu sunt
validate, adic nu se verific dac ntr-adevr s-a introdus un nume i o parol valide de
utilizator, apare posibilitatea inserrii de cod SQL. Prin introducerea sintaxei de Mihai OR
1=1 n cmpul destinat numelui utilizatorului, atacatorul modific complet sensul interogrii
SQL care va ocoli mecanismul de autentificare prin care se verific parola i atacatorul se va loga
pe contul Mihai dei nu a introdus nicio parol, condiia 1=1 fiind ntotdeauna adevrat.
1 din 8
Cea mai bun modalitate de aprare mpotriva atacurilor de tip SQL Injection este cea de
a implementa funcii puternice de validare a datelor de intrare, naintea executrii interogrii
asupra bazei de date, astfel nct un utilizator ru voitor s nu poat introduce alte date dect cele
necesare aplicaiei. Msurile specifice care pot fi implementate n acest scop sunt urmtoarele
([Cert12]):
- Folosirea variabilelor bine definite i de definiii ale coloanelor bazei de date stocarea i manipularea numerelor ca i numere ntregi sau alte tipuri de numerice
potrivite, limitarea coninutului irurilor de caractere doar la caractere alfanumerice i
respingerea semnelor de punctuaie sau a caracterelor specifice sintaxei SQL ( , $, =, <, >
etc.) ([Cert12]).
- Atribuirea rezultatelor obinute n urma interogrii unei variabile bine definite
spre exemplu, dac aplicaia cere o valoare numeric din baza de date, aceasta trebuie
atribuit unei variabile de tip numeric, lucru care va impiedica atacatorii s extrag
informaii din baza de date (dac variabila ce urmeaz a fi afiat n browser nu accept
dect numere ntregi, atunci obinerea i afiarea unui nume sau a unei date calendaristice
sau a oricrui alt tip de date nu va fi posibil) ([Cert12]).
- Limitarea lungimii datelor irurile de caractere ar trebui ideal limitate la o lungime
potrivit scopului lor. Spre exemplu, un nume de utilizator nu ar trebui stocat ntr-un ir
care are lungimea de 200 de caractere. Limitarea numrului de caractere poate mpiedica
eficient succesul unei injecii SQL, deoarece reduce lungimea irului de caractere pe care
atacatorul il poate injecta n cod ([Cert12]).
- Evitarea concatenrii irului de caractere n interogri concatenarea irurilor de
caractere, unde interogarea este format direct din datele furnizate de utilizatori (ex:
SELECT * from nume_tabel WHERE + variabila_sir, unde variabila_sir este un ir de
caractere dat de utilizator) are cea mai mare rat de succes la atacurile SQL Injection. De
aceea, se recomand folosirea unei funcii view sau proceduri care s opereze asupra
variabilelor furnizate i care s genereze o eroare la introducerea unor date incorecte,
astfel nct s nu permit atacatorului s manipuleze ntreaga interogare ([Cert12]).
- Aplicarea separrii datelor i accesul pe baz de roluri n interiorul bazei de date o
aplicaie web ar trebui s foloseasc un cont care are privilegii de acces doar pentru
tabelele necesare funciilor atribuite utilizatorului respectiv. Tabelele interne ale bazei de
2 din 8
4 din 8
care poate fi folosit ntr-un eventual atac informatic trebuie identificat din timp. Aceste
componente nu fac referire doar la cmpurile prin care utilizatorul poate introduce date, dar i
oricare alt valoare ce poate fi modificat i trimis prin intermediul unui proxy (cmpuri
ascunse, date din cookie). Validarea corespunztoare a acestor date scad ansele unui atac reuit
cu succes. De asemenea, cu ct utilizatorul are mai puine privilegii, cu att ansele de a duce
pn la capt un atac asupra aplicaiei scad ([Cert12]).
f. Erori logice
Erorile logice sunt erori de programare care pot aprea n momentul n care la dezvoltarea
aplicaiei lucreaz un numr mare de programatori i dezvoltatori diferii. Toate aplicaiile web
folosesc o logic anume de funcionalitate. Acestea sunt descompuse n pai mici, simpli, pentru
a aduce funcionalitile necesare aplicaiei la nivelul la care pot fi executate de ctre un
dispozitiv. Chiar i n cazul aplicaiilor web simple, dezvoltarea lor presupune o cantitate mare de
logic, pentru fiecare etap de proiectare. Dei sunt trecute de multe ori cu vederea, erorile logice
ofer o baz foarte variat de atac. Din nefericire, nu pot fi dect n cazuri rare scanate cu
ajutorul unor programe specializate de identificare a vulnerabilitilor i nu prezint o semntur
specializat ca n cazul altor vulnerabiliti, ceea ce le face mult mai greu de cunoscut i
caracterizat. Deoarece nu sunt apreciate ca i vulerabiliti grave, erorile logice prezint un
interes foarte mare din partea atacatorilor ([Cert12]).
O eroare logic apare n momentul n care programatorul aplicaiei nu ia n considerare toate
efectele posibile ale codului asupra aplicaiei. Se iau n considerare doar efectele care se
intenioeaz sa fie implementate, nelund n seam sau fcnd omitere de alte efecte secundare,
posibile. Defectele de ordin logic sunt greu de explicat, definit i nvat prin teorie, ele fiind
variate de la o aplicaie la alta. Sunt descoperite de regul de ctre atacatori dup familiarizarea
cu aplicaia respectiv i dup testarea comportamentului su n diverse situaii. Totui, pentru a
se nelege mai bine importana deosebit pe care o pot avea aceste erori logice, vor fi prezentate
n continuare dou exemple concrete prin care s-a fcut exploatarea acestora.
Un prim exemplu este ocolirea funciei pentru schimbarea parolei, o eroare de logic ce a fost
gsit ntr-o aplicaie web utilizat de o societate de servicii financiare. Aceasta avea
implementat o funcie de shimbare a parolei de ctre utilizatori n care era necesar completarea
cmpurilor: nume utilizator, parol actual, noua parol i confirmarea noii parolei. De
asemenea, o alt funcie din cadrul aplicaiei permitea schimbarea parolei de ctre administratori,
prin care acetia puteau schimba parola oricrui utilizator fr a fi nevoii s introduc vechea
parol a acestuia. Aceste dou funcii au fost puse n cadrul aceluiai script pe partea serverului.
Interfeele afiate clienilor i administratorilor difereau prin faptul c cea afiat unui
administrator nu avea cmpul de introducere a vechii parole. Presupunerea fcut, din care a
provenit ulterior eroarea logic a fost aceea c un utilizator obinuit va introduce ntotdeauna
vechea parol pentru modficarea acesteia. Prin urmare, n momentul n care serverul procesa o
schimbare de parol, el verifica dac aceasta a fost cerut de un client sau de un administrator
verificnd prezena sau absena vechii parole. Dac cmpul pentru vechea parol era gol, atunci
serverul presupunea c un administrator a fcut cererea. Din acest moment, eroarea logic devine
evident, deoarece utilizatorii controleaz fiecare aspect al cererilor pe care le emit. Prin urmare,
ei pot alege dac s completeze sau nu cmpul pentru vechea parol. n acest caz, defectul logic
s-a dovedit devastator, fiecare atacator avnd oportunitatea s reseteze cu uurin parola oricrui
alt utilizator i s preia controlul asupra contului acestuia, o dat ce acest mecanism de procesare
a cererii i devenea cunoscut ([Cert12]).
6 din 8
Un alt exemplu de defect logic, descoperit ntr-un centru de telefonie, fcea referire la
tergerea intrrilor din audit. Aplicaia avea diverse funcii care permiteau gestionarea unei baze
de date de dimensiuni mari. Multe din acestea se refereau la informaii securizate, printre care i
crearea de conturi i schimbarea de parole, iar din aceast cauz se men inea o gestiune complet
de audit, unde fiecare aciune efectuat era nregistrat, mpreun cu identitatea utilizatorului
responsabil de acea aciune. De asemenea era inclus i o funcie prin care li se permitea
administratorilor s tearg anumite intrri din audit, aciune care la rndul ei era nregistrat,
pentru evitarea exploatrii n scopuri ru-voitoare. Dezvoltatorii aplicaiei au plecat de la
presupunerea c nicio tergere a vreunei nregistrri din audit nu se poate realiza fr a lsa
mcar o urm (prin testrile lor, rmnnd de fiecare dat ultima nregistrare a persoanei care a
ters datele). Aceast presupunere a fost greit, deoarece atacatorii au descoperit o modalitate de
a produce modificri asupra datelor i a terge urmele n ntregime, parcurgnd urmtorii pai:
autentificarea cu propriul cont i crearea unui nou cont de utilizator, atribuirea tuturor
privilegiilor noului cont, utilizarea noului cont pentru a duce la ndeplinire atacul, apoi utilizarea
unui nou cont pentru a terge toate nregistrrile generate de primii trei pai. n acest fel, de i
fiecare din aciuni genera nregistrri n jurnalul de audit, n ultima faz, contul nou creat tergea
toate datele legate de intrrile i aciunile precedente. Astfel, n audit rmnea doar intrarea c cel
de-al doilea nou cont a ters toate datele. Deoarece al doilea cont era creat de primul cont nou
creat, iar nregistrrile legate de cine a creat primul cont erau terse, nu mai exista practic nicio
informaie valabil care s poat face legtura ntre identitatea persoanei care a dus la capt
atacul i contul iniial al persoanei care a pornit atacul ([Cert12]).
O serie de practici care pot ajuta n reducerea erorilor logice, este urmtoarea:
- Documentarea tuturor aspectelor legate de design-ul aplicaiei pentru a putea fi nelese
uor de cineva din exterior ([Cert12]).
- Punerea accentului pe modul n care ar putea influena utilizatorii aplicaia, n timpul
recenziilor de securitate referitoare la cod ([Cert12]).
Punerea accentului pe modul de comportare a aplicaiei n momentul n care sunt introduse date
eronate i efectele produse asupra dependenelor dintre componentele diverse ale codului
([Cert12]).
Introducerea de comentarii n codul surs care s includ informaii legate de: scopul i
funcionalitatea fiecrei poriuni de cod, presupunerile fcute de fiecare component n legtur
cu elementele care nu se afl direct sub controlul ei, adugarea de comentarii care s fac
trimitere la toate componentele care folosesc acel cod ([Cert12]).
g. Diseminarea codului-surs
O eroare de codare, des ntlnit n aplicaiile web, este divulgarea codului surs care face
posibil exploatarea acestuia de ctre atacator cu scopul de a reconfigura fiiere prin intermediul
HTTP, oferind totodat o nelegere mai profund atacatorului n legtur cu logica din spatele
aplicaiei web.
Folosind un atac de tip divulgare a codului surs, atacatorul poate obine codul surs pentru
aplicaiile de pe server (precum ASP, PHP, JSP) i, implicit, o imagine asupra logicii aplica iei,
modul de gestionare a cererilor i parametrii acestora, structura bazei de date, comentariile
introduse n cod i vulnerabilitile acestuia. Aceste informaii pot fi folosite pentru realizarea
unui duplicat a aplicaiei pentru teste i pregtirea unui atac asupra celei originale. Atacul poate fi
realizat folosind vulnerabiliti cu divulgare a codului surs cunoscute, exploatarea erorilor
7 din 8
detaliate care uneori includ codul surs, folosind alte tipuri de vulnerabiliti cunoscute care se
pot dovedi utile n divulgarea codului (cum ar fi traversarea directoarelor) ([Cert12]).
Metodele de prevenire a atacurilor de acest fel sunt urmtoarele:
- Verificarea folderului de unde este cerut fiierul care urmeaz s fie descrcat
- Verificarea tipurilor de fiiere cerute de utilizatori
- Indexarea fiierelor care pot fi descrcate i afiarea doar a numrului lor din index ca i
parametru al URL-ului.
Aceste aspecte legate de securitatea aplicaiilor web, dei exist posibilitatea ca ele s nu fie
detaliate n cerinele de proiectare a aplicaiei sau menionate de ctre clientul ce dorete
proiectarea aplicaiei respective, reprezint o importan vital i trebuie luate n considerare de
ctre dezvoltatori, constituind practic punctul de plecare al construirii sistemului informatic ce se
dorete a fi proiectat.
Bibliografie:
[CERT12] - CERT-RO Ghid pentru securizarea aplicaiilor i serviciilor web 2012
8 din 8