Conducător științific Absolvent Ș.L. Pupezescu Valentin Istudor Laurențiu-Cosmin Anul 2017 Declaratie de onestitate CUPRINS Listă figuri Figura 3.1… [310182]
[anonimizat] “MariaDB”
Conducător științific Absolvent
Ș.L. [anonimizat] 2017
Declaratie de onestitate
CUPRINS
Listă figuri
Figura 3.1 Sistemul Linux
Figura 3.2 Diagrama bazei de date ddbase
Figura 3.3 Arhitectura pe 2 nivele
Figura 3.4 Arhitectura pe 3 nivele
Figura 3.5 Diagrama deployment a aplicației
Figura 3.6 Diagrama user case a aplicației
Figura 4.1 Formular de logare în aplicație
Figura 4.2 Formular de înregistrare a contului de utilizator
Figura 4.3 Conectarea la baza de date
Figura 4.4 Preluarea datelor din formular
Figura 4.5 Inserare date în baza de date
Figura 4.6 Inserare date în baza de date folosind declarații pregătite
Figura 4.7 Verificare username și parolă
Figura 4.8 Protecție împotriva SQL Injection folosind funcții
Figura 4.9 Protecție împotriva SQL Injection folosind declarațoo pregătite
Figura 4.10 Delogarea de pe site
Figura 4.11 Meniu site utilizator neînregistrat
Figura 4.12 Meniu site utilizator înregistrat
Figura 4.13 Pagina Home a aplicației
Figura 4.14 Personal feed
Figura 4.15 Inserare postare în baza de date
Figura 4.16 Inserare postare în baza de date folosind declarații pregătite
Figura 4.17 Pagina Public
Figura 4.18 Încărcare avatar personal
Figura 4.19 Pagina Contact
Figura 4.20 Bara de adrese a unui site care foloseste SSL
Figura 6.1 URL posibil vulnerabil la SQL Injection
Figura 6.2 Funcții utilizate în realizarea injectării manuale
Figura 6.3 [anonimizat] 6.4 Decriptare parolă
Figura 6.5 Rezultat decriptare parolă
Figura 6.6 Configurare port forward
Figura 6.7 Logare abuzivă
Figura 6.8 Pagina Profile accesată abuziv
Figura 6.9 Sqlmap – lista baze de date
Figura 6.10 Sqlmap – lista utilizatori
Figura 6.11 Sqlmap – lista tabele
Figura 6.12 Sqlmap – descriere tabela users
Figura 6.13 Sqlmap – afișare conținut tabelă
Figura 6.14 Rezultat OWASP Zap
Figura 6.15 Conturi create automat OWASP Zap
Figura 6.16 Tabela posts după scanarea cu skipfish
Figura 6.17 Rezultat rulare skipfish aplicație nesecurizată
Figura 7.1 Pagina de eroare
Figura 7.2 Apelarea funcției de generare captcha
Figura 7.3 Funcția de generare captcha
Figura 7.4 Formular înregistrare aplicație sigură
Figura 7.5 Rezultat OWASP Zap aplicație sigură
Figura 7.6 Rezultat sqlmap aplicație sigură
Figura 7.7 [anonimizat] e [anonimizat] – [anonimizat] – [anonimizat] – [anonimizat] – [anonimizat] – [anonimizat]: [anonimizat] a [anonimizat] – [anonimizat] – Cross-[anonimizat] a [anonimizat]. [anonimizat], inovativitate, accesibilitate și nu în ultimul rând securitate. Se dorește creșterea nivelului de trai prin tehnologizarea tuturor lucrurilor care ne înconjoară. Aceasta atrage după sine pericolul securității oamenilor din cauza creșterii numărului de posibile ținte cibernetice. Atacatorii au prin intermediul electronicelor o varietate de modalități de a obține date confidențiale pentru victimă sau pot altera integritatea acestor informații.
Omul este parte integrantă a sistemelor tehnologice datorită faptului că nu am ajuns încă la momentul în care sistemele informatice se pot dezvolta și functiona integral autonom. Astfel, una din cele mai mari probleme apărute la adresa securității este reprezentată de factorul uman.
Nu numai utilizatorii de rând întâmpină probleme când vine vorba de asigurarea unui spațiu informatic sigur; problemele de securitate apar și în cadrul firmelor. Peste 70% din companii au parte de pierderi financiare din cauza incidentelor de securitate. Țintele majore ale acestor atacuri informatice îl constituie în principal bazele de date datorită importanței și volumului mare de date pe care îl conțin. O bază de date vulnerabilă poate fi exploatată în variate moduri, iar o firmă care încearcă să creeze o relație client – ofertant bazată pe încredere nu își permite să devină victima unui atac. Pe lânga pierderile financiare ar urma o pierdere a clienților care vor alege contracandidatul cu o reputație superioară, fapt ce va declanșa declinul afacerii.
Pentru a menține securitatea, fiecare companie trebuie să aibă în vedere instruirea personalului folosind o serie de politici și proceduri. Educarea angajatilor pentru recunoașterea potențialelor amenințări la adresa securității reprezintă un pas important pentru diminuarea influenței factorului uman. De asemenea este necesară și protecția împotriva atacurilor de tip fizic prin modalități de limitare a accesului în spațiul destinat serverelor și introducerea unor reguli de siguranță stricte.
În urma acestor atacuri nu au de suferit doar utilizatorii normali sau firmele ci și reputația brandurilor care se ocupă cu protecția datelor. Periodic dezvoltatorii adaugă patch-uri care să rezolve eventualele breșe de securitate ale aplicațiilor sau să prevină apariția acestora.
În contextul actual, datorită ritmului alert în care s-a dezvoltat tehnologia și odată cu ea numarul de atacuri cibernetice, securitatea a devenit o prioritate. Este nevoie de instruirea unui număr mare de specialiști în domeniul securității care să poată ține pasul cu creșterea numarului de hackeri și asigurarea celor 2 cerințe majore: integritatea datelor și confidențialitatea acestora.
1. Sisteme de gestiune a bazelor de date relaționale
Societatea modernă a zilelor noastre a devenit dependentă de utilizarea sistemelor de baze de date în activități diverse. Pe parcursul unei zile o persoană interacționează deseori cu bazele de date în realizarea unor acțiuni de tipul: cumpărături online, înregistrarea pe un site de socializare, rezervarea unor bilete la film, depunerea unei sume de bani într-un cont bancar, accesarea unui motor de căutare, verificarea emailului.
Exemplu: presupunem situația în care ne aflăm într-un supermarket de unde cumpărăm diferite produse. Ajunși la casă, vânzătorul scanează codul de bare al fiecărui produs. Aceste produse sunt căutate în baza internă de date a magazinului și se verifică prețul fiecărui produs.
Un sistem de baze de date este o modalitate virtuală prin care se menține pe un calculator evidența unei aplicații sau a unei activități folosind baze de date [1]. Aceste sisteme de baze de date pot avea marimi variabile. Astfel unele sisteme pot avea înregistrări de ordinul milioanelor (conturile de pe un site de socializare cum este facebook), iar altele pot avea dimensiuni mult mai mici (evidența elevilor unei clase).
Sistemul de gestiune al bazei de date (SGBD) reprezintă un ansamblu de programe specializate destinate creării, întreținerii și accesării bazelor de date.
Principalele modele de organizare a bazelor de date sunt [1]:
ierarhic
rețea
relațional
obiect-orientat
Cel mai utilizat model dintre cele menționate este modelul relațional în care datele sunt organizate în tabele conectate. Aceste model corespunde noțiunii de relație din matematică, unde relație se refera la o mulțime de entități de același tip.
Încă de la apariție a avut un succes imens care continuă și în prezent dacă ținem cont de faptul că majoritatea aplicațiilor actuale folosesc un sistem bazat pe modelul relațional.
Pe lânga avantajele conferite de simplitatea și precizia acestui model beneficiem și de un limbaj standardizat, limbajul SQL, care vine și cu un suport teoretic substanțial. [1]
Modelul relațional presupune structurarea datelor sub forma unor tabele care definesc relații. Fiecare relație are un nume și atribute, coloanele tabelei, pentru care avem un domeniu de valori posibile. Domeniul poate fi același pentru fiecare atribut sau poate avea valori diferite. Un element al unei relații se numeste tuplu. Aceasta este echivalentul unei linii din tabelă. [2]
O relație are urmatoarele proprietăți [2]:
– numele relației o identifică în mod unic
– fiecare atribut are denumire unică în cadrul relației
– într-o celula putem pune doar valori singulare
– toate valorile tuplurilor aparțin domeniului de definire al atributelor
– ordinea atributelor nu contează
– toate tuplurile sunt distincte
Mulțimea tuturor câmpurilor care definesc un subiect formează o înregistrare. Totalitatea înregistrărilot formează baza de date.
2. Probleme de securitate într-o aplicație WEB
Conform unui studiu realizat de Ofcom – Media and Analyst Center un adult petrece aproximativ 20 ore saptămânal pe internet. Inevitabil, acesta va intra în contact cu o sumedenie de aplicații WEB care stochează date importante sau confidențiale pentru utilizator. Aceste date reprezintă ținta răufăcătorilor cibernetici, iar deținătorii site-urilor trebuie să le asigure securitatea.
Nevoia de securitate a apărut odată cu modernizarea tehnologiilor. Companiile au realizat că informația de multe ori este mai valoroasă decât bunurile materiale așa că furtul, modificarea, ștergerea sau împiedicarea accesului la aceasta ar aduce prejudicii majore individului și firmei.
2.1 Probleme de securitate ale serverului WEB
Un server WEB este un sistem care stochează pagini WEB și le pune la dispoziția clienților folosind protocolul HTTP. Legătura client-server se realizează pe baza unei aplicații instalate pe server și care transferă paginile WEB găzduite către client în functie de cerințele utilizatorului. [3]
Prin intermediul serverului WEB, un utilizator poate avea acces la fișierele salvate pe sistemul pe care rulează. Astfel, trebuie acordată o atenție sporită securității.
Un atacator poate obține acces neautrizat la anumite fișiere conținând date importante cum ar fi parole sau informatii confidențiale prin exploatarea unor bug-uri din serverul WEB sau din script-uri.
A. CGI este un protocol care permite unei pagini WEB sa ruleze un program CGI pe un server. Aceste scripturi CGI rulează în timp real și se folosesc în paralel cu scripturile HTML pentru a-i imbunătăți funcționalitatea; le putem asemăna cu niște mini-servere care preiau cereri de la client, accesează baza de date și întoarce informații către browser [4]. Problema cu aceste scripturi este că pot contine bug-uri care pot face serverul vulnerabil pentru atacatori:
– pot afișa informații relevante pentru atacator despre host
– atacatorul poate introduce date care se pot transforma în comenzi executabile care ar dăuna host-ului
B. Atacurile de tip DDoS (Distributed Denial of Service) sunt cele mai răspândite modalități de atac asupra unui server deoarece sunt greu de combătut și provoacă daune majore. Principiul acestui tip de atac este reprezentat de trimiterea unei cantități mari de date către server folosind o multitudine de conexiuni la server. Astfel se suprasolicită rețeaua prin efectuarea unui număr mare de cereri de la atacatori și răspunsuri de la server și poate scoate din funcțiune un site pentru câteva ore. Problema cu aceste atacuri este că orice client poate deveni “atacator” fără voia sa; atacatorii pot accesa oricând calculatoarele infectate în prealabil de aceștia și pot lansa un atac DDoS fară acceptul clientului.
C. Drepturile de acces – o configurare eronată a permisiunilor pe un server poate determina portițe de acces pentru atacatori.
D. TCP/IP este un protocol de transmitere a datelor pe internet. Acest protocol permite comunicarea între sisteme indiferent de sistemul de operare instalat. Problema acestui protocol este că nu a fost gândit inițial pentru securitate ci aveau nevoie de funcționalitatea lui. Astfel, un atacator îi poate exploata vulnerabilitățile prin interpunerea între client și server și urmarirea traficului generat. [4]
Acest tip de atac se numește “man in the middle”. Pe lângă vizualizarea traficului generat, atacatorul poate intercepta un mesaj, să îl modifice și să îl trimită mai departe către destinație fără ca utilizatorul să își dea seama.
2.2 Probleme de securitate ale serverului de baze de date
Țintele preferate ale atacurilor informatice sunt reprezentate de bazele de date datorită conținutului acestora și al volumului de date pe care îl stochează. Astfel trebuie să se asigure îndeplinirea următoarelor cerințe [5]:
integritatea fizică și logică a bazei de date
integritatea elementelor din baza de date
controlul accesului
identificare
disponibilitate
Toate Sistemele de Gestionare a Bazelor de Date au funcționalități care implică limitarea accesului la anumite date. Astfel se pot atribui fiecărui utilizator drepturi de acces pentru a efectua operații specifice activității sale. Putem asigura confidențialitatea datelor și totodata alterarea lor accidentală prin blocarea utilizatorilor la porțiuni din tabelă ce nu le sunt adresate.
Atacatorii pot exploata anumite vulnerabilități pe care le are site-ul folosind diverse metode:
A. SQL Injection reprezintă una din cele mai eficiente tehnici de atac asupra bazei de date a aplicației deoarece există o multitudine de aplicații care realizează automat acest tip de atac. Această tehnică presupune modificarea sau crearea unor comenzi SQL pentru dezvăluirea sau alterarea unor informații din baza de date. Această vulnerabilitate apare atunci când prelucrarea datelor de la utilizatori nu se realizează corect, nu se face validarea parametrilor. [6]
B. Criptarea reprezintă tehnica prin care un text clar este transfigurat în alt text, numit text criptat având ca scop păstrarea unei anumite informații. În cazul în care aceasta ajunge pe mâini nedorite ideal ar fi să nu se poată obține textul clar dacă nu se cunoaște tehnica de criptare sau cheia folosită.
Folosirea unei metode nesigure de criptare poate determina aflarea parolelor prin diferite tehnici de atac criptanalitic. Presupunând că atacatatorul a reușit sa obțină câmpul username și parolă din baza de date, avem nevoie de o metodă de criptare suficient de bună pentru a nu permite aflarea acesteia prin nicio metodă. Deoarece puterea de calcul a sistemelor informatice a ajuns la un nivel foarte ridicat este nevoie ca tehnicile de criptare să evolueze proporțional pentru a fi capabile să mențină cantitatea de secret pe care o ascund.
C. Cross-Site Scripting sau XSS este de asemenea o metodă de injectare a unui cod personal într-o pagina WEB care în mod normal nu prezintă probleme de securitate. Ținta atacului nu este serverul WEB, codul malițios executându-se direct în browserul utilizatorului. Aceste atacuri se pot desfășura dacă sursa datelor ce intră în aplicație nu este verificată sau dacă sunt introduse într-o secvență care este transmisă clientului fară a fi verificată în prealabil de prezența unui malware. [7]
D. Atacurile de tip brute force reprezintă un tip de atac criptanalitic care presupune o cautare exhaustivă a parolei prin încercarea tuturor combinațiilor și testarea lor pentru a vedea dacă este cea corectă. Cu cât lungimea parolei este mai mare cu atât este mai greu de aflat folosind această metodă. De asemenea se recomandă folosirea unei metode de criptare eficientă.
E. Omul reprezintă unul din cele mai mari riscuri asupra securității. În majoritatea cazurilor, factorul uman este reprezentat de angajații firmelor care întreprind acțiuni în mod deficitar sau incorect ducând la probleme se securitate.
Astfel trebuie să existe o politică de securitate bine pusă la punct și o serie de instruiri a angajaților pentru respectarea regulilor și corectarea acțiunilor conform normelor pentru a diminua cât mai mult riscurile.
Un pericol foarte mare îl reprezintă și acordul firmelor ca angajații să își aducă propriile dispozitive la locul de muncă pe care le pot folosi în cadrul sistemelor interne ale companiei (stick-uri USB, CD-uri, laptopuri etc.). Un sistem de operare cum este Linux Kali poate fi cu ușurință instalat pe un stick și folosit în cadrul firmei. O soluție la această problemă este dezactivarea port-urilor USB.
O atenție deosebită trebuie acordată și integrității fizice a serverului. Un individ ar putea atenta asupra bunei funcționări sau ar putea produce o deteriorare a acestuia. Soluția la această problemă o reprezintă controlul accesului în incinta serverelor și asigurarea unui server de backup situat în alt spațiu. Cel de-al doilea server trebuie să preia funcționalitatea serverului principal atunci când acesta este indisponibil. De asemenea backup-ul ar trebui sa fie făcut la perioade scurte de timp pentru ca atunci când este nevoie de acesta să folosească date de actualitate.
3. Descierea aplicației
Dear Diary este un site WEB de tip rețea de socializare. Oferă posibilitatea creării unui jurnal online, putând astfel fi accesat de oriunde doar pe baza unui cont de utilizator depășind funcționalitatea unui jurnal fizic și oferind numeroase alte avantaje.
3.1 Prezentare specific aplicație
Dear Diary este organizat pe 2 nivele de securitate: public și privat. Utilizatorul îți poate alege ca postările sale să fie private și sa le poată vizualiza doar el sau poate alege ca unele sau toate sa fie publice, iar ceilalți utilizatori sa le poată citi și aprecia. De asemenea postările publice pot fi citite și de clienții care nu au cont pe site.
Beneficiile acestui site cu specific social sunt multiple și cuprind:
– utilizatorul poate ține o evidență a amintirilor pe care le poate revedea peste luni sau ani fără a întâmpina problemele unui jurnal fizic care se poate deteriora odata cu trecerea timpului
– un jurnal clasic se poate pierde, dar Dear Diary se va găsi mereu în același loc
– utilizatorul își poate publica rutina zilnică sau poate împărtăși păreri, impresii sau orice fel de gând cu cititorii
– utilizatorul poate citi postările altor persoane
3.2 Tehnologii folosite
În realizarea proiectului s-au folosit:
Hardware: – procesor Intel Core i5 – 5200U
– memorie RAM DDR3 8GB
– placa video Nvidia GeForce 940M
– hard-disk 1TB
Software: – sisteme de operare: Linux Kali, Ubuntu
– editor de text: Sublime Text
– server: Apache
– baza de date: MariaDB
– limbaje folosite: PHP, CSS, HTML, SQL
– mașină virtuală: VirtualBox
Kali este o distribuție Linux bazată pe Debian concepută în special pentru securitate. Avantajul acestei distribuții este că vine cu peste 300 de programe preinstalate pentru testarea vulnerabilităților cum ar fi: Armitage, Nmap, Aircrack-ng, Grabber sau WireShark. Kali se poate rula direct de pe un live CD/USB sau poate fi instalat fie nativ fie într-o masină virtuală [8].
Sublime Text este un editor de text care suportă o varietate de limbaje de programare și markup. L-am preferat în detrimentul altora pentru compatibilitatea cu platforma și limbajele folosite la proiect, stabilitate, rapiditate, o multitudine de plugin-uri.
Apache este un server web open-source apărut în anul 1995. Conform estimărilor este cea mai folosită versiune de server fiind utilizată în găzduirea a peste 65% din site-urile WEB din lume. Wikipedia, spre exemplu, rulează pe un server Apache, iar Google folosește o versiune modificată numită Google Web Server. Popularitatea acestui server a crescut atât de mult datorită gratuității și pentru că permite găzduirea virtuală, lucru ce conferă posibilitatea de a ține mai multe site-uri pe același server. De asemenea Apache permite “content negotiation” ce constă în redarea unor versiuni diferite pentru un document în același URL. Un alt avantaj este că permite autentificarea bazelor de date care se bazează pe DBMS (Database Management System), asa cum este și MariaDB.[9]
MariaDB este un sistem de gestiune a bazelor de date relaționale open source derivat din MySQL. După ce Sun Microsystems a cumpărat MySQL în anul 2008, iar mai apoi Oracle a achiziționat Sun Mycrosystems în 2009, MySQL a devenit proprietatea Oracle. Principalii dezvoltatori au plecat de la MySQL și au înființat o nouă companie pe care au numit-o MariaDB.
Cu Oracle refuzând prelungirea termenului de menținere a MySQL ca bază de date gratuită și open source, MariaDB a devinit alegerea cea mai potrivită. Acest lucru pare susținut și de marile companii care au adoptat acest SGBD: Google, Wikipedia, Tumblr, booking.com, dar și de unele distribuții de linux: Ubuntu, Debian, Fedora, Red Hat devenind baza de date implicită în defavoarea MySQL.[10]
MariaDB a avut cea mai rapidă creștere a popularității pentru o bază de date open source. Fondatorii au gândit-o ca o alternativă la MySQL, astfel, dacă versiunea celor două SGBD-uri este aceeași, se pot substitui fară a apărea probleme de compatibilitate[11]:
– datele și definițiile tabelelor sunt binar compatibile
– toate API, protocoalele și structurile coincid
– conectorii MySQL (PHP, Perl, Python, Java, .NET etc.) functionează pe MariaDB fară a fi nevoie de vreo schimbare
– pachetul mysql-client functionează și cu MariaDB
Astfel, respectând coincidența versiunilor, pentru substituția celor doua SGBD-uri pur și simplu se dezinstaleaza una și se instalează cealaltă fară a aparea probleme la compatibilitate.
Cel mai mare avantaj al SGBD-ului MariaDB este plusul de viteză pe care îl are față de MySQL, lucru resimțit în operațiunile cu volum de date foarte mare.
PHP este un limbaj de scripting, open source, folosit în special pentru dezvoltarea aplicațiilor WEB dinamice și interactive. De cele mai multe ori acesta se folosește integrat în cod HTML, dar poate fi folosit și independent permițând crearea aplicațiilor din linia de comandă. PHP este un limbaj de programare server-side a cărui popularitate a crescut datorită urmatoarelor caracteristici [12]:
– simplu: codul este inclus între marcaje speciale <?php cod ?> fară a fi nevoie de includerea unor biblioteci sau directive de compilare
– securitate: programatorii au la dispoziție o serie de măsuri de siguranță
– familiar: poate fi comparat cu limbaje ca C sau Perl în privința sintaxei
– eficient: alocarea resurselor se face optim
– flexibil: poate fi integrat în majoritatea serverelor WEB
– gratuit
Codul PHP se execută pe server și se generează un cod HTML care este trimis clientului. Clientul primește rezultatul rulării script-ului PHP fară a putea vedea codul. Ca mijloc de securitate se poate configura ca serverul să proceseze toate fișierele HTML folosind PHP.
De asemenea PHP permite și folosirea sa ca limbaj de programare orientată pe obiecte, unde datele și funcțiile sunt tratate ca obiecte. Această metodă de a folosi PHP conferă o eficiență crescută în organizarea programelor complexe.
HTML (HyperText Markup Language) este un limbaj de marcare care stă la baza oricărui site WEB. Paginile HTML sunt formate de obicei din perechi de etichete: una de deschidere <tag> și una de închidere </tag>, dar există și etichete singulare (exemplu: <br> este o etichetă care introduce un sfârșit de linie). Browserul recunoaște aceste etichete, le interpretează și afișează rezultatul. Toate fișierele HTML încep cu eticheta <html> și se termina cu eticheta </html> și au extensia .html sau .htm. [13]
Un document HTML este format din:
versiunea documentului
head-ul delimitat de etichetele <head> și </head> conținând titlul, descrieri de tip meta, script-uri și legături externe
body-ul inclus între etichetele <body> și </body> care conține corpul documentului, ceea ce browserul va afișa pe ecran
Vizualizarea paginior HTML se face folosind un browser. Acesta recunoaște codul HTML și afișează pe ecran rezultatul.
CSS (Cascading Style Sheets) este un limbaj de stilizare folosit pentru formatarea unei pagini WEB. Îmbunătățește aspectul paginii și ajută la obținerea unui cod HTML mult mai ordonat și mai simplu. A fost creat în primul rând pentru a face o separare între prezentare și conținut. De asemenea produce și o încărcare mai rapidă a paginii deoarece folosirea CSS are ca rezultat o micșorare a codului HTML. [14]
Codul CSS se poate stoca folosind trei modalități [14]:
folosind un fișier extern cu extensia .css
intern, în head
inline, în interiorul tag-ului HTML
Cea mai folosită metodă este fișierul extern datorită simplității cu care se realizează o eventuală modificare a site-ului. Pentru aplicarea fișierului .css asupra paginii se inserează între tag-urile <head> o trimitere folosind tag-ul <link>.
CSS-ul intern se folosește doar în condițiile în care pagina are caracteristici proprii pe care nu le împarte cu celelalte pagini. Este identic cu cel extern doar că se folosește în interiorul paginii HTML folosind tag-ul <style> și atributul <type = “text/css”>. De obicei nu este recomandată folosirea sa.
CSS inline se referă la introducerea codului CSS în interiorul tag-urilor HTML, dar folosind această metodă pierdem avantajele CSS-ului extern cum ar fi simplitatea, lizibilitatea sau încărcarea mai rapidă a paginilor.
SQL (Structured Query Language) este un limbaj de programare folosit pentru managementul datelor în sistemele de gestiune a bazelor de date relaționale. Inițial a fost lansat de IBM apoi standardizat de ANSI și ISO. Pe lângă varianta standardizată există o mulțime de versiuni și dialecte.
SQL a fost creat având ca scop îndeplinirea urmatoarelor caracteristici:
– crearea bazelor de date și structurilor relaționale
– inserare, modificare și stergere a datelor din relatii
– interogări în baza de date
SQL are 2 componente majore [15]:
1) un limbaj de definire a datelor pentru definirea structurii bazelor de date și controlul accesului la date:
CREATE TABLE – pentru crearea unui tabel
ALTER TABLE – modificarea structurii unui tabel existent
TRUNCATE TABLE – șterge toate datele din tabel
DROP TABLE – șterge tabelul
2) un limbaj de manipulare a datelor care permite o serie de operații:
INSERT – pentru inserarea datelor in tabel
SELECT – pentru afisarea datelor
UPDATE – actualizarea unui set de date
DELETE – șterge un set de date
În proiectarea unui tabel trebuie avută în vedere definirea structurii sale: definirea coloanelor, definirea constrângerilor de integritate, definirea parametrilor și definirea spațiului unde se creează tabela.
Constrângerile de integritate sunt reguli care se aplică în cadrul tabelului reprezentând norme de funcționare. Aceste reguli se verifică automat atunci când se execută o operație și în cazul în care nu se validează, se generează o eroare și se întrerupe operația.
Constrângerile de integritate pot fi [16]:
– NOT NULL – câmpul nu poate avea valoarea null
– UNIQUE – mai multe inregistrări nu pot avea aceeași valoare
– PRIMARY KEY – se defineste o cheie primară (unică)
– FOREIGN KEY – definește o cheie străină (stabilește o relație între o cheie primară și una unică în același tabel sau în tabele diferite)
– CHECK – forțează verificarea unei condiții
Pentru testarea și vizualizarea aplicației folosind un mediu din afara rețelei am ales utilizarea Ubuntu pe o mașină virtuală, VirtualBox.
VirtualBox este un soft gratuit și open source deținut de Oracle folosit pentru managementul mașinilor virtuale. Acesta poate fi instalat pe o varietate de sisteme de operare incluzând Linux sau Windows. VirtualBox permite instalarea unei multitudini de sisteme de operare pe același computer.
3.3 Kali Linux și uneltele sale
Linux este un grup de sisteme de operare de tip Unix care folosesc nucleul Linux. Linux oferă suport și poate fi instalat pe o mare varietate de hardware cum ar fi: computere, telefoane mobile, tablete sau console video, dar cea mai largă utilizare o are în cadrul serverelor. Dezvoltarea primului sistem Linux a fost începută de Linus Torvalds, un inginer finlandez, care și-a dorit un sistem similar cu Minix, dar cu limitări mai putine. Astfel Linux este un sistem open source sub licență publică generală GNU GPL. [17]
Componentele unui sistem Linux sunt [18]:
– hardware (memorie, hard-disk)
– nucleu (kernel)
– shell
– utilitare
Figura 3.1 Sistemul Linux [19]
Nucleul este componenta sistemului de operare care se încarcă în memorie atunci cand se pornește computerul. Acesta controlează accesul la dispozitivele hardware ale calculatorului, gestionează procesele ( deoarece Linuxul este un sistem de operare multitasking ) și memoria. Nucleul rămâne încărcat în memorie până la oprirea calculatorului.
Shell-ul este interfața cu nucleul. Acesta ascunde complexitatea kernel-ului și preia comenzile de la utilizator care sunt executate de kernel.
Utilitarele sunt programe care descriu funcționalitățile unui sistem de operare. În momentul lansării lor în execuție sunt încărcate de pe hard-disk în memorie, iar dupa terminarea execuției memoria este eliberată.
Printre avantajele folosirii unui sistem bazat pe linux se numără [20]:
– portabil ( poate rula pe siseme hardware diferite)
– open source (este gratuit și se lucrează constant la îmbunătățirea lui prin contribuția echipelor de dezvoltare)
– utilizatori multiplii pot accesa resurse comune în același timp
– programe multiple pot rula pe sistem în același timp
– securitate ( Linux dispune de măsuri de securitate cum ar fi autentificarea sau criptarea datelor)
– shell ( program special de interpretare a comenzilor )
Sistemele de operare Linux sunt disponibile sub variante numite distribuții. Unele din cele mai populare distribuții sunt: Ubuntu, Mint, Arch, Kali.
Kali este distribuția de Linux creată și dezvoltată de Offensive Security. Această distribuție este bazată pe Debian GNU/Linux și a fost concepută în special pentru informatica criminalistică și pentru testarea securității. Kali este versiunea mai nouă și îmbunătățită a binecunoscutului sistem de operare BackTrack Linux, folosit de pentestări și atacatori în trecut și vine cu o mulțime de cateva sute de unelte preinstalate utile în testare.[8]
Pentru a face din Kali o distribuție cât mai apropiată de nevoile utilizatorilor acesta vine cu o serie de modificări:
– utilizator unic ( deoarece majoritatea programelor care rulează pe Kali au nevoie de drepturi de execuție de la “root” s-a ales varianta conectării cu acest utilizator care are drepturi asupra întregului sistem de operare)
– în mod implicit, serviciile de internet și bluetooth-ul sunt dezactivate
– Kali Linux dispune de un nucleu modificat specializat pe wireless injection
– sursele de descărcare a uneltelor sunt menținute într-un număr cât mai mic din motive de securitate
Linux Kali dispune de o varietate de unelte folosite pentru testarea vulnerabilităților sau analiza traficului dintr-o rețea. Unele din cele mai folosite dintre acestea sunt:
Sqlmap este o unealtă open source de testare foarte puternică care automatizează sistemul de detectare a vulnerabilităților unui site la sql injection și preluare a bazelor de date. Sqlmap nu se folosește doar la testare ci și pentru a exploata SQL Injection prin extragerea datelor din baza de date sau chiar modificarea tabelelor. Pentru linux kali nu este nevoie de instalare pentru sqlmap deoarece vine preinstalat, dar pentru celelalte poate fi procurat de la link-ul http://sqlmap.org . Deoarece este conceput în python sistemul de operare trebuie să aibă python instalat. [21]
Nmap este un scanner de securitate folosit pentru crearea unei hărți a rețelei utilizat în descoperirea host-urilor și serviciilor din rețea. Funcționarea acestui instrument se bazează pe trimiterea unor pachete speciale către host și interpretarea rezultatelor. Avantajul acestui scaner de porturi este că ia in considerare diferite particularități ale rețelei cum ar fi traficul din rețea la acel moment sau latența.[22]
Wireshark este un instrument gratuit folosit pentru capturarea și analizarea traficului din rețea. Acesta are o interfață grafică care simplifică lucrul cu utilizatorul și o varietate de funcționalități incluzând filtrarea și sortarea informației.
Nikto este un scanner open source pentru servere WEB folosit pentru testarea a peste 6500 fișiere potențial periculoase sau CGI-uri, aplicații depășite de pe server și alte teste asupra serverului.
BeEF este un instrument de testare conceput pentru a lansa atacuri și testa vulnerabilitățile browserului WEB. De asemenea este o unealtă excelentă pentru testarea slăbiciunilor browser-ului la atacurile de tip XSS sau alte atacuri ce implică injectarea.
Metasploit sau Proiectul Metasploit este folosit pentru a afla vulnerabilitățile în securitatea aplicațiilor și are un rol important în dezvoltarea testelor de securitate.
Ubuntu este cel mai cunoscut sistem de operare bazat pe Linux. Succesul de care se bucură provine din asemanarea grafică cu binecunoscutul Windows și din ușurința în instalare și utilizare. Inițial Ubuntu a apărut ca o copie a altei distribuții, Debian, și și-a propus să fie compus mai ales din software open source.
3.4 Baza de date a aplicației. Diagrama bazei de date
Baza de date a aplicației se numeste ddbase și are în componență două tabele legate între ele printr-o cheie străină. Prima tabelă, users, este tabela care ține evidența conturilor de utilizator, iar cea de-a doua este tabela posts care gestionează postările utilizatorilor conectați. Pentru crearea bazei de date s-a folosit terminalul din Kali Linux, iar pentru vizualizarea grafică MySQL Workbench.
După logarea în sistemul de operare se deschide terminalul și se porneste serverul MariaDB prin rularea comenzii:
service mysql start
Pentru acest proiect am creat un utilizator nou pentru baza de date căruia i-am atribuit toate drepturile pe care le are un root (administrator). Înainte de a face asta este nevoie de conectarea la baza de date folosind ca utiliator root, nefiind necesară introducerea unei parole. Implicit baza de date MariaDB nu are parolă, dar pentru securitate îi vom atribui ulterior una.
Pentru conectarea la MariaDB rulăm în terminal comanda:
mysql –u root –p
Următoarea etapă constă în crearea unui utilizator nou, stringdot, căruia îi atribuim parola Ninja123, parolă ce conține litere mici, litere mari și numere din considerente de securitate.
CREATE USER ‘stringdot’@’localhost’ IDENTIFIED BY ‘Ninja123’;
Crearea bazei de date ddbase se face rulând urmatoarea comandă:
CREATE DATABASE ddbase;
Acum că avem baza de date vom atribui utilizatorului creat, stringdot, toate permisiunile necesare execuției operațiilor într-o bază de date.
GRANT ALL PRIVILEGES ON *.* TO ‘stringdot’@’localhost’;
După setarea permisiunilor avem nevoie de o reactualizare a privilegiilor.
FLUSH PRIVILEGES;
În continuare vom parcurge urmatoarele etape pentru crearea bazei de date:
logarea folosid userul nou creat
mysql –u stringdot –p Ninja123
afișare baze de date
show schemas;
selectare baza de date ddbase
use ddbase;
crearea tabelei users
CREATE TABLE users(
id_user int(11) NOT NULL auto_increment,
name varchar(45) NOT NULL,
username varchar(45) NOT NULL,
password varchar(45) NOT NULL,
email varchar(45) NOT NULL,
gender varchar(45) NOT NULL,
avatar varchar(100),
UNIQUE (username),
PRIMARY KEY(id_user)
);
crearea tabelei posts
CREATE TABLE posts(
id_post int(11) NOT NULL auto_increment,
username varchar(45) NOT NULL,
postare varchar(1000) NOT NULL,
date_post datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
viewz varchar(10),
id int(11),
PRIMARY KEY(id_post),
FOREIGN KEY(id) REFERENCES users(id_user)
);
Pentru crearea diagramei bazei de date se pornește MySQL Workbench apoi se selectează din secțiunea “Models” opțiunea “Create EER Model from Database”. Introducem parola utilizatorului stringdot, selectăm baza de date ddbase și obținem urmatoarea diagramă care exemplifică în mod vizual structura tabelelor și tipul relației dintre acestea:
Figura 3.2 Diagrama bazei de date ddbase
3.5 Arhitectura aplicației. Diagrama UML
Calitatea unei aplicații este influențată major de arhitectura acesteia. O arhitectură neadecvată duce la performanțe scăzute, dezvoltare greoaie, probleme în cazul modificării aplicației, întreținere dificilă sau lipsa scalabilității. Pe langă acestea este nevoie și de o analiză a constrângerilor tehnice cum ar fi serverele sau conexiunea.
Atunci când se începe dezvoltarea unei aplicații WEB trebuie luat în calcul un număr mare de de cerințe cum ar fi: calitatea, funcționalitatea sau posibilitatea integrării acesteia. Un impact important asupra aplicației îl are alegerea tipului de arhitectură utilizat.
Dacă serverul și clientul sunt amplasate pe același sistem spunem ca avem de-a face cu o arhitectură cu un singur nivel. Avantajele acestei arhitecturi constau în simplitatea și eficiența sa, dar presupune costuri ridicate deoarece este nevoie de un echipament performant.
Arhitectura pe 2 nivele sau arhitectura client-server presupune existența unui server care oferă servicii unui utilizator. Comunicarea este realizată direct fară a exista intermediari. Într-o aplicație normală clientul vizualizează informația în browser, procesează aplicațiile și trimite cereri către server, iar aplicația server controlează accesul la date. Cele două părți componente logica aplicației. Problema arhitecturii cu 2 nivele o reprezintă stabilirea unui plan de executare a prelucrărilor pentru obținerea unui echilibru astfel încât să nu avem o încărcare excesivă a serverului sau a clientului.[23]
Figura 3.3 Arhitectura pe 2 nivele
Faptele au confirmat că acest model pe 2 nivele are situații când este depășit și a apărut necesitatea introducerii celui de-al 3-lea nivel. Modelul pe 3 nivele introduce între client și baza de date un server de aplicație prin a cărui introducere i se ușurează activitatea prin distribuirea sarcinilor pe mai multe sisteme. În acest model clientului îi revine doar interfața de sistem cu utilizatorul, logica aplicației revenind nivelului nou introdus, serverul de aplicație, iar ultimul nivel se ocupă cu accesul la informația stocată în baza de date.
Figura 3.4 Arhitectura pe 3 nivele
Dear Diary este o aplicație care folosește modelul arhitectural cu un singur nivel, dar a fost testată cu succes și pentru cazul folosirii arhitecturii cu două nivele prin legarea în rețea a sistemului conținând întreaga aplicație și a unui laptop. Pentru conectarea la site avem nevoie de IP-ul sistemului pe care se află aplicația. Acest IP il vom introduce în URL-ul browserului laptopului.
Ideal pentru o aplicație de acest tip este folosirea unei arhitecturi pe 3 nivele datorită beneficiilor oferite:
scalabilitate (este superioară deoarece codul aplicației și baza de date sunt separate)
micșorarea traficului în rețea
flexibilitate (fiecare componentă poate fi înlocuită fară a le afecta pe celalalte)
UML este un limbaj de modelare vizual, orientat pe obiect, care definește structura și proprietățile dinamice ale unei aplicații. Acest limbaj tratează aspecte ca proiectarea bazelor de date sau interacțiunea porțiunilor de cod și este deosebit de important pentru proiectele cu o complexitate mare deoarece eficientizează și clarifică elementele abstracte. [24]
UML pune la dispoziție o gamă variată de diagrame de modelare pentru acoperirea întregului proiect software [25]:
– diagrame de activitate (reprezentarea comportării unei activități la rularea programului)
– diagrame de clase (reprezentarea vizuală a claselor și a legăturilor dintre ele)
– diagrame de componente (se folosesc când părți ale sistemului software comunică între ele prin intermediul interfețelor)
– diagrame use case (sunt folosite în cadrul întâlnirilor dintre dezvoltator și client pentru a explica interacțiunea dintre actor, element extern, și sistem)
– diagrame deployment (reprezentarea componentelor fizice ale sistemului și componentele software din acestea )
– diagrame de secvențe ( reprezentarea relației între obiecte în timpul desfășurării unei operații)
– diagrame package (reprezentarea dependențelor între pachetele din componența sistemului)
Figura 3.5 Diagrama deployment a aplicației
Figura 3.6 Diagrama user case a aplicației
Diagrama use case și diagrama deployment a aplicației Dear Diary a fost creată folosind mediul de editare de pe siteul https://creately.com/diagram-type/use-case .
4. Prezentarea aplicației. Functionalități principale și măsuri luate pentru securizarea aplicației
Dear Diary este o aplicație WEB destinată utilizatorilor de orice vârstă care caută un loc pentru a-și expune gândurile, pentru a stoca amintiri sau pentru a citi frânturi din viața altora. Într-o societate guvernată de tehnologie am oferit posibilitatea utilizatorilor de a beneficia de avantajele unui jurnal online. Acesta poate fi accesat cu ușurință de oriunde atâta timp cât există o conexiune la internet. De asemenea înlocuiește vechiul jurnal fizic care ar fi putut fi descoperit și citit de alte persoane decât deținătorul.
Un vizitator al siteului are drepturi limitate în ceea ce privește vizualizarea conținutului. De asemenea deoarece nu are acces la vizualizarea paginii Profile acesta nu poate face nici un fel de postare. Pentru a beneficia de toate funcționalitățile de care dispune siteul este recomandată înregistrarea unui cont de utilizator.
Figura 4.1 Formular de logare în aplicație
Vizitatorul își poate crea un cont apasând butonul “Sign Up” din bara de logare și completarea formularului de înregistrare aferent. Toate câmpurile formularului sunt obligatorii.
4.2 Formular de înregistrare a contului de utilizator
După ce vizitatorul completează toate câmpurile și apasă butonul “Sign Up” se verifică dacă adresa de email este validă, iar username-ul să nu fie folosit de alt utilizator. În cazul în care este deja folosit apare un mesaj de eroare și posibilitatea de a se intoarce la formular pentru introducerea unui alt nume de utilizator.
Pentru varianta aplicației nesecurizate corespunzător s-a folosit pentru criptarea parolei functia md5 care livrează ca rezultat o valoare fixă de 128 biți. Această funcție de hash nu mai este sigură și poate fi relativ ușor de spart folosind un instrument de decriptare.
Pentru varianta aplicației sigure am ales ca metodă de hash SHA256. Dacă un atacator ar încerca o tehnică de atac de tip brute force având la dispoziție un calculator performant, pentru o lungime a parolei de 10 semne alcătuită din caractere alfanumerice, ar dura 5 ani pentru descoperirea sa. De asemenea am introdus pentru câmpul parolă o lungime minimă de 6 caractere.
Ca protecție suplimentară s-ar fi putut introduce funcționalitatea ca după un număr de încercări eronate consecutive de logare ale aceluiași IP să fie nevoit să aștepte un anumit timp pentru a putea reîncerca. Aceasta ar fi o măsură suficientă pentru eliminarea atacurilor de tip brute force.
Înainte de a începe crearea formularului de înregistrare se deschide sesiunea folosind funcția session_start(), apoi se realizează conectarea la baza de date folosind funcția require_once(dbconnect.php).
Sesiunile în PHP reprezintă o modalitate prin care anumite informații se pot menține de la o pagină la alta. O sesiune începe atunci când un script apelează funcția session_start() și se încheie atunci când se închide browserul.
Figura 4.3 Conectarea la baza de date
În cazul în care conectarea nu a reușit se declanșează un mesaj de eroare.
După conectarea la baza de date se verifică dacă formularul conține date la apăsarea butonului “Sign Up” sau dacă există vreun câmp necompletat, iar dacă toate condițiile sunt îndeplinite se preiau datele din formular.
Figura 4.4 Preluarea datelor din formular
Pentru varianta aplicației sigure pentru hash-uirea parolei se folosește funcția hash().
$password = hash( ‘sha256’, $_POST[‘register_password’]);
Inserarea datelor în baza de date se face prin formarea și execuția query-ului de inserare folosind funcția mysqli_query() care primește ca argumente numele conexiunii și numele query-ului. În cazul în care nu s-a putut face inserarea apare un mesaj de eroare, iar daca a reușit afișează succes și posibilitatea de a reveni la pagina principală pentru logare.
Figura 4.5 Inserare date în baza de date
Pentru a proteja formularul de înregistrare împotriva atacurilor de tip SQL Injection pentru aplicația sigură putem folosi declarații pregătite sau funcția mysqli_real_escape_string() care este utilizată pentru filtrarea caracterelor speciale. În practică este de preferat folosirea declarațiilor pregătite deoarece sunt considerate mai sigure. Inserarea datelor din formular se realizează în tabela users în câmpurile sugerate în paranteză.
Figura 4.6 Inserare date în baza de date folosind declarații pregătite
După crearea contului de utilizator clientul este gata pentru logarea și accesarea tuturor funcționalităților oferite de aplicație. Logarea se realizează folosind numele de utilizator (username) și parola alese la înregistrare.
Formularul de logare implică conectarea la baza de date și compararea datelor preluate din formular cu cele folosite la înregistrare. Dacă acestea coincid se pornește sesiunea și se face o redirecționare către pagina “Public”. În cazul în care numele de utilizator nu a fost găsit în baza de date sau parola nu coincide se generează un mesaj de eroare și opțiunea de revenire la pagina principală.
Pentru a compara parola din formular cu cea din baza de date trebuie realizată o criptare a parolei folosind md5 pentru varianta nesecurizată a aplicației și sha256 pentru varianta sigură.
Figura 4.7 Verificare username și parola
Pentru varianta sigură putem folosi funcțiile mysqli_real_escape_string() care filtrează caracterele speciale și stripslashes()care elimină backslashurile simple și transformă backslashurile duble în backslashuri simple asupra datelor preluate din formular.
Figura 4.8 Protecție împotriva SQL Injection folosind funcții
La fel ca și în cazul formularului de înregistrare vom alege însă declarațiile pregătite deoarece sunt mai sigure.
Figura 4.9 Protecție împotriva SQL Injection folosind declarații pregătite
Delogarea se realizează apăsând butonul Log Out amplasat în parte de sus a paginilor. La apăsarea acestuia se produce distrugerea sesiunii folosind funcția session_destroy(). De asemenea la închiderea browserului se produce o delogare automată din aplicație a utilizatorului.
Figura 4.10 Delogarea de pe site
După logarea în contul de utilizator meniul siteului se modifică în felul urmator:
Figura 4.11 Meniu site utilizator neînregistrat
Figura 4.12 Meniu site utilizator înregistrat
Home reprezintă pagina de pornire cu care este întâmpinat un vizitator al siteului. Aceasta conține informații despre specificul aplicației și funcționalitățile oferite de site. După logarea utilizatorului această pagină lasă locul paginii de profil a utilizatorului.
Figura 4.13 Pagina Home a aplicației
Profile reprezintă pagina personală a fiecărui utilizator. Aceasta conține informațiile despre utilizator introduse la înregistrare, un formular prin care se pot face postări (publice sau private), un formular de upload pentru avatarul personal și postările personale ale utilizatorului. Dacă utilizatorul se află pe profilul propriu acesta vede atât postările publice cât și cele private, iar daca se află pe profilul unui alt utilizator acesta poate vedea doar postările de natură publică.
Postările pe site se fac prin intermediul unui textarea. Implicit postările sunt publice; pentru postarea unui text privat se bifează căsuța “private”. Inserarea textului se face în tabela posts în câmpul post, tipul postării se inserează în câmpul viewz, iar pentru identificare se inserează numele de utilizator în coloana username.
Figura 4.14 Personal feed
De asemenea utilizatorul are posibilitatea de a șterge postările pe care nu le mai dorește pe pagina personală. În dreptul fiecăreu postări există un ” X ” care execută ștergerea din baza de date a tuplului corespunzător. Această operație este ireversibilă, iar utilizatorul nu poate recăpăta postările șterse. Se recomandă introducerea unei ferestre pentru confirmarea acestei operații.
Pentru varianta nesecurizată a aplicației se verifică daca postarea conține text, iar dacă aceasta conține se verifică tipul postării (privat sau public) și se face inserarea. Numele de utilizator transmis în tabela posts este username-ul cu care este conectat clientul .
Figura 4.15 Inserare postare în baza de date
Această variantă nu este numai nesigură ci este și generatoare de erori atunci când se încearcă introducerea unui text conținând apostof. Pentru a securiza postarea mesajelor vom folosi declarațiile pregătite.
Figura 4.16 Inserare postare în baza de date folosind declarații pregătite
Afișarea postărilor se face în ordine descrescătoare în funcție de timpul la care s-a făcut postarea. La momentul postării unui mesaj se preia automat data și ora curentă a serverului bazei de date folosind funcția CURRENT_TIMESTAMP din SQL.
Afișarea pe pagina Public se face în funcție de conținutul coloanei viewz din tabela posts; se vor afișa doar postările publice ale tuturor utilizatorilor. Același lucru se întâmplă și la vizitarea profilului altui utilizator; se pot vizualiza doar mesajele publice. Pe profilul personal clientul va vedea tot conținutul, fie el public sau privat.
Figura 4.17 Pagina Public
În teorie folosirea declarațiilor pregatite doar pentru porțiunile care preiau date de la utilizator este suficientă pentru blocarea atacurilor de tip SQL Injection, dar pentru a fi siguri că nu trec neintenționat cu vederea anumite scenarii și să lase loc unei vulnerabilități, dezvoltatorii aleg să securizeze toate interogările către baza de date.
Pagina Profile, personală fiecăruia din utilizatori, oferă posibilitatea încărcării unei folografii de profil sau a unui avatar. Limitările acestei funcționalități obligă utilizatorul la încărcarea unui avatar având extensia .jpg, .jpeg sau .png având o dimensiune de 200×200 pixeli și nu mai mult de 2MB.
Figura 4.18 Încărcare avatar personal
Utilizatorul intra pe un site sau folosește o aplicație de redimensionare a fotografiilor pentru a creea un avatar având înălțimea și lățimea de exact 200 pixeli după care o salvează. Deschide aplicația noastră, intră pe profilul personal, apasă butonul Browse, și caută în computerul personal imaginea creată mai devreme. Dupa ce o selectează și apasă upload, aplicația dă un refresh automat al paginii și va apărea imaginea aleasă în locul celei implicite.
Această funcționalitate presupune și apariția unor posibile vulnerabilități la SQL Injection prin numele imaginii. Pentru a ne proteja de acest tip de atac putem filtra numele imaginii sau se poate face o redenumire în momentul încărcării în baza de date unde se stochează calea către fișier.
De asemenea un atacator poate încărca un fișier malițios care să infecteze serverul sau baza de date. Pentru a împiedica acest tip de atac am introdus verificarea extensiei fișierului pentru a permite doar încărcarea imaginilor.
În dreptul avatarului găsim informațiile despre utilizator. Indiferent că ne aflăm pe pagina noastră personală sau pe pagina personală a altui utilizator avem permisiunea de a vedea informațiile.
Atunci când ne aflăm pe pagina personală a altui utilizator observăm prezența text box-ului pentru postare. Dacă introducem un mesaj și apăsăm butonul POST postarea se va face pe pagina personală, nu pe cea a utilizatorului pe care il vizităm.
Pagina Contact este disponibilă atât vizitatorilor cât și utilizatorilor înregistrați. Reprezintă modalitatea prin care clienții pot contacta administratorul siteului pentru a oferi sugestii cu privire la aplicație sau a semnala nereguli.
La apăsarea butonului Send mesajul e trimis la adresa de email cosmin@kali.com. Înainte de trimiterea emailului utilizatorul sau viziatorul trebuie să completeze câmpurile obligatorii.
Figura 4.19 Pagina Contact
Dear Diary este o aplicație unde autentificarea și autorizarea accesului se face pe baza unui username și a unei parole. Problema cu acest tip de securitate este că datele transmise între client (browser) și server nu sunt protejate și pot fi interceptate. O altă problemă este că utilizatorul nu are nici o modalitate de a stabili dacă serverul WEB este cel corect.
Rezolvarea acestei probleme o reprezintă Protocolul SSL. Acest protocol asigură un canal de comunicații sigur între utilizator și serverul WEB. Pentru a asigura clienții că serverul la care se conectează este cel corect se folosesc certificate SSL semnate digital.[26]
Protocolul SSL folosește doua tipuri de criptare:
– simetrică: se folosește aceeași cheie pentru criptare și decriptare. Este utilă în criptarea cantităților mari de date deoarece este mai rapidă.
– asimetrică: utilizează o pereche de chei diferite (o cheie publică folosită pentru criptare și o cheie privată folosită la decriptare; cele două chei se pot utiliza și vice-versa)
Pentru utilizarea acestui protocol serverul are nevoie de un certificat SSL de la autoritatea care se ocupă cu furnizarea acestui serviciu. Browserul verifică automat aceste certificate și semnalează utilizatorul în cazul in care validarea eșuează.
Certificatele SSL conțin cheia publică din setul de chei asimetrice. Cu această cheie publică se codifică cheia sesiunii și se transmite serverului care o decodifică folosind cheia sa privată. După stabilirea conexiunii sesiunea de comunicații între server și client este criptată și decriptată folosind cheia sesiunii.
SSL previne atacurile de tipul man in the middle (interpunerea atacatorului între client și server și ascultarea traficului) deoarece traficul care ar ajunge la hacker este criptat.
Site-urile care posedă certificat SSL sunt accesate folosind prefixul HTTPS. Acestea conțin în bara de adrese un lacăt verde care identifică conexiunea ca fiind sigură.
Figura 4.20 Bara de adrese a unui site care foloseste SSL
5. Prezentarea instrumentelor folosite în testare
Sqlmap
Sqlmap este o unealtă gratuită și open source care automatizează procesul de detecție și exploatare a vulnerabilităților la SQL Injection. Un mare avantaj al acestui tool este faptul că este independent de platformă și poate deci rula pe Linux, Unix, Windows sau chiar Mac. În distribuția de Linux Kali vine preinstalat și poate fi folosit imediat după instalarea sistemului de operare. Sqlmap vine pe lângă un mecanism puternic de detecție și cu o serie de caracteristici care îl transformă unul din cele mai folosite unelte pentru analiza aplicațiilor WEB.[28]
Pentru rularea pe Linux Kali a aplicației se folosește comanda sqlmap -h, iar pentru Ubuntu, după instalarea pachetelor pentru limbajul Python, se schimbă folderul de lucru cu cel al sqlmap apoi se rulează comanda python sqlmap.py -h . Această comandă va deschide meniul de ajutor conținând o listă cu restul comenzilor și rezultatul utilizării acestora.
Pentru aflarea bazelor de date de pe un server care deservește un site vulnerabil se folosește comanda: sqlmap –u “url_site_vulnerabil” –dbs. Dacă în timpul rulării comenzii apare eroarea [CRITICAL] unable to retrieve the database names se poate încerca adăugarea comenzii –no-cast pentru micșorarea lungimii sarcinilor și obținerea numelor bazelor de date.
Numele tabelelor se pot afla prin folosirea opțiunii –tables și a numelui bazei de date.
sqlmap –u “url_site_vulnerabil” –D nume_baza_de_date –tables
După aflarea numelor tabelelor se află numele coloanelor folosind:
sqlmap –u “url_site_vulnerabil” –D nume_baza_de_date –T nume_tabel –columns
Faza finală, aflarea conținutului tabelei, presupune rularea comenzii:
sqlmap –u “url_site_vulnerabil” –D nume_baza_de_date –T nume_tabel –C nume_coloane –dump
După aflarea conținutului, sqlmap verifică automat valorile din tabel și dacă se identifică date posibil obținute prin hash atunci o să se încerce decriptarea acestora.
OWASP Zap
Zap este o unealtă de securitate gratuită și open source menținută sub tutela OWASP, dar la dezvoltarea căreia participă sute de voluntari. Această aplicație este un tool care automatizează procesul de descoperire a vulnerabilităților și a problemelor de securitate. [29]
La bază, Zap este de fapt un ”interceptor”. Se situează între browserul testerului și aplicația WEB, captează traficul dintre acestea, modifică pachetele și le trimite mai departe către destinație. Astfel, Zap poate fi folosit pentru atacuri de tip “man in the middle” sau poate fi o aplicație de sine stătătoare, fiind apreciat de începători, dar și de profesioniști.
Zap vine cu o serie de versiuni pentru instalat care asigură compatibilitatea cu toate sistemele de operare majore. În Linux Kali acesta vine preinstalat și se poare rula folosind comanda: zaproxy.
Spre deosebire de alte instrumente asemanătoare acesta dispune de o interfață grafică care îi asigură plusul de simplitate pe care îl preferă începătorii. De asemenea este ușor de instalat și dispune de o documentație consistentă.
Înainte de a folosi acest tool trebuie să configurăm browser-ul pentru a folosi Zap ca proxy. Implicit acesta folosește:
Adresa: localhost
Portul: 8080
Zap este un proxy amplasat între browser și aplicația WEB așa că folosirea SSL-ului va provoca o eroare în validarea certificatului și terminarea conexiunii deoarece acest instrument criptează și decriptează traficul folosind certificatul original al aplicației.
Pentru a preveni terminarea conexiunii în acest mod, Zap creează automat un certificat SSL pentru fiecare server accesat folosind autoritatea proprie de eliberare a certificatelor.
După configurarea browser-ului pentru folosirea Zap ca și proxy, ne putem conecta la aplicația care urmează a fi testată.
Cea mai simplă cale pentru a rula un test Zap este Quick Start Test. Se introduce link-ul de acces la aplicație în spațiul pentru URL și se apasă Attack.
Rezultatele constau într-o hartă a siteului cu paginile vizitate și o listă cu alerte separate în categorii de grade de risc.
Skipfish
Skipfish reprezintă un instrument creat de Google ideal pentru dezvoltatorii de aplicații WEB sau pentru deținătorii unor siteuri pentru a-i ghida în detectarea problemelor de securitate pe care le-ar putea avea aplicația.[30]
Sistemele de operare suportate sunt Linux, Windows și MacOS X. Pe Linux Kali acesta vine preinstalat și se poate rula din terminal folosind comanda:
skipfish –url=”http://ip_site”
Modul de funcționare al acestui tool se bazează pe crearea unei hărți interactive a siteului, după care se rulează o varietate de teste asupra acesteia.
La finalul scanării se produce generarea unei pagini WEB de vizualizare a rezultatelor.
Skipfish a fost dezvoltat în limbajul de programare C ceea ce îi conferă o viteză superioară altor instrumente asemănatoare. Un alt avantaj important este posibilitatea întreruperii scanării în orice moment și obținerea unor rezultate parțiale.
6. Testarea aplicației nesecurizate
Deoarece SQL Injection este una din cele mai comune probleme ale aplicațiilor WEB vom începe testarea Dear Diary cu aceasta. Principiul pe care se bazează acest tip de atac este inserarea unei secvențe SQL într-o intrare a siteului pentru a determina execuția anumitor operații asupra bazei de date. În anumite circumstanțe un hacker poate chiar afla conținutul întregii baze de date.
Testarea manuală reprezită pentru majoritatea atacatorilor sau testărilor o tehnică ineficientă și consumatoare de timp pentru testarea aplicației, dar este recomandată pentru începători datorită câștigării unui grad de întelegere mai bun al funcționării și configurării instrumentelor automate pentru testare.
Un prim test pentru identificarea unui site vulnerabil la SQL Injection este adăugarea în bara de adrese a browserului a unui apostrof la sfârșitul URL-urilor de forma http://site.xyz/index.php?id=1.
Un URL cu structură asemănătoare se găsește și pe pagina Profile a aplicației noastre:
Figura 6.1 URL posibil vulnerabil la SQL Injection
După introducerea apostrofului în URL am primit eroarea: Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/profile.php on line 100 ceea ce indică că pagina e vulnerabilă și putem continua testarea aplicației .
Înainte de a afla mai multe informații despre baza de date avem nevoie de numărul de coloane. Pentru a face asta vom adăuga URL-ului structura order by 1–. Se incrementează acel număr până la primirea unei erori. Caracterele “ – “ transformă tot ce urmează după ele în comentarii.
Pentru Dear Diary primim eroarea Unknown column ‘8’ in ‘order clause’ ceea ce semnifică că tabela noastră are 7 coloane și putem trece la verificarea funcției UNION (funcție ce combină rezultatul mai multor select-uri) ce ne va fi de ajutor în selectarea mai multor informații din baza de date în aceeași declarație.
Vom folosi urmatoarea construcție pentru a vedea care din coloane afișează un rezultat:
http://localhost/profile.php?user=-COSMIN union all select 1,2,3,4,5,6,7–
Observăm apariția numărului 3 pe ecran deci coloana 3 este utilizată pentru a face afișări pe pagină și ne putem folosi de asta și de tabelul de funcții pentru a afla informațiile dorite din baza de date a aplicației.
Figura 6.2 Funcții utilizate în realizarea injectării manuale [31]
Pentru a obține numele bazei de date:
http://localhost/profile.php?user=-COSMIN union all select 1,2,database(),4,5,6,7–
După rularea comenzii aflăm că numele bazei de date este “ddbase” și putem incepe extragerea numelor tabelelor.
http://localhost/profile.php?user=-COSMIN union select 1,2,table_name,4,5,6,7 from information_schema.tables where table_schema=database()–
Aflăm de existența a două tabele: users și posts. Avem nevoie doar de conținutul tabelei users așa ca vom rula codul pentru aflarea numelor coloanelor doar pentru ea.
http://localhost/profile.php?user=-COSMIN union select 1,2,column_name,4,5,6,7 from information_schema.columns where table_schema=database() and table_name=”users”–
Urmează ultimul pas și anume extragerea datelor din tabela. Dorim doar username-ul și parola deoarece restul informațiilor sunt publice, așa că vom extrage doar acele coloane.
http://localhost/profile.php?user=-COSMIN union select 3,4 from users
După extragerea datelor din tabel vom avea două coloane: una cu username-uri și cealaltă cu parolele corespunzătoare. Alegem de exemplu rândul cu numele de utilizator COSMIN.
Pentru decriptarea parolei care îi corespunde avem nevoie în primul rând să cunoaștem funcția cu care s-a realizat hash-ul. Pentru aceasta folosim o unealtă preinstalată în Linux Kali: hash-identifier.
Figura 6.3 Rezultat hash-identifier
După rularea hash-identifier am aflat că s-a folosit funcția MD5 pentru a face criptarea parolei. Pentru decriptarea acesteia vom utiliza un alt utilitar prezent în Linux Kali și anume findmyhash.
Figura 6.4 Decriptare parolă
Figura 6.5 Rezultat decriptare parolă
În urma rulării utilitarului folosit pentru decriptare am aflat parola pentru utilizatorul COSMIN. Parola este cosmin. Se procedează similar și pentru restul intrărilor din tabelă.
Remarcăm greșeala clientului de a folosi aceeași parolă ca și numele de utilizator. O măsură de securitate suplimentară pe care o poate lua dezvoltatorul este de a impune folosirea unei parole diferite de numele de utilizator la înregistrarea unui cont nou pentru utilizatorii care ignoră riscurile.
O parolă puternică ar trebui să conțină minim 10 caractere, să includă numere, simboluri, litere mici și litere mari.
Exemplu parolă slabă: 123456
Exemplu parolă puternică: C12ax$roB5
Pentru urmatorul set de teste a vulnerabilității am ales folosirea unei surse externe. Pentru accesarea aplicației de la distanță vom folosi port forwarding.
Port forward este modalitatea prin care un computer/server poate fi accesat de la distanță de alte calculatoare din alte rețele. Pentru a configura port forward am realizat următorii pași:
– logarea pe router folosind IP-ul 192.168.0.1
– selectarea opțiunii forwarding din meniu
– completare cu datele din figură
– salvare
Figura 6.6 Configurare port forward
După configurarea port forward pentru a accesa aplicația avem nevoie de IP-ul computerului folosit pentru găzduire. Acesta se poate afla folosind comanda ifconfig în terminal. Acum putem accesa aplicația introducând în browser IP-ul găsit.
Deschiderea unui port implică și riscuri, dar dacă serverul are un firewall bine pus la punct acesta va bloca toate tentativele de atac. Pentru vizualizarea porturilor deschise putem folosi nmap.
O altă posibilă vulnerabilitate la SQL Injection se află în formularul de logare. Pentru a testa această vulnerabilitate intrăm pe pagina Public a aplicației noastre luăm un nume de utilizator la întâmplare și ne întoarcem la formularul de logare.
Numele de utilizator ales este ANDREEA. Acesta îl vom trece în formular în câmpul username, iar la parolă vom scrie ’ OR ’1’ = ’1 .
Figura 6.7 Logare abuzivă
Interogarea din formularul de logare:
SELECT * from users where username=’$username’ AND password=’$password’;
După înlocuirea în interogarea din formular a username-ului ales și a parolei obținem:
SELECT * from users where username='ANDREEA' AND password = ’ ’ OR ’1’ = ’1’;
Aceasta sintagmă este adevarată și va determina logarea în contul de utilizator ANDREEA.
Figura 6.7 Logare reușită abuzând de vulnerabilități
Acum putem intra pe pagina Profile și citi postările private sau șterge postările utilizatorului ANDREEA. Se procedează similar pentru a ne conecta în contul altor utilizatori ce apar pe pagina publică.
O altă vulnerabilitate prezentă este accesarea URL-ului http://localhost/profile.php de către vizitatori.
Figura 6.8 Pagina Profile accesată abuziv
Un atacatot poate profita de această vulnerabilitate pentru a umple baza de date cu informații inutile sau pentru lansarea atacurilor de tip DDoS prin suprasolicitarea conexiunii cu lansarea de interogări multiple folosind formularul de postare.
Injectarea manuală necesită un efort susținut din partea atacatorului și nu este garantat succesul găsirii unei vulnerabilități. Din fericire există numeroase instrumente de injectare automată a codului SQL care care îmbunătățesc extrem de mult posibilitatea succesului în privința atacului.
Testarea aplicației pentru găsirea vulnerabilităților la SQL Injection implică 2 etape [27]:
– scanarea pentru găsirea vulnerabilităților (căutarea intrărilor din aplicație care pot fi exploatate sau alte ”găuri” specifice. Exemple: Acunetix, Arachni, Grabber )
– SQL Injection propriu-zis ( după identificarea vulnerabilităților începe exploatarea lor )
Cea mai folosită unealtă automată este sqlmap. Pentru a scana vulnerabilitățile introducem urmatoarea comandă care va returna bazele de date de pe server:
sqlmap –u ”http://localhost/profile.php?user=COSMIN“ –dbs –no-cast
Figura 6.9 Sqlmap – lista baze de date
De asemenea se poate obține și o listă a utilizatorilor care gestionează baza de date:
sqlmap –u ”http://localhost/profile.php?user=COSMIN“ –users –no-cast
Figura 6.10 Sqlmap – lista utilizatori
Baza de date de interes pentru noi este ddbase asupra căreia vom rula următoarea comandă:
sqlmap –u ”http://localhost/profile.php?user=COSMIN“ -D ddbase –tables
Figura 6.11 Sqlmap – lista tabele
Vom începe analiza tabelelor cu tabela users deoarece presupunem ca aceasta conține conturile de utilizator datorită numelui ales pentru tabelă.
sqlmap –u ”http://localhost/profile.php?user=COSMIN“ -D ddbase -T users –columns
Figura 6.12 Sqlmap – descriere tabela users
Pasul final constă în afișarea numelui de utilizator, a parolei și a emailului.
sqlmap –u ”http://localhost/profile.php?user=COSMIN“ -D ddbase -T users -C username,password –dump
Figura 6.13 Sqlmap afișare conținut tabelă
Pentru decriptarea parolei se poate folosi hash-identifier pentru a descoperi funcția cu care s-a făcut hashul parolei și findmyhash pentru decriptarea propriu-zisă.
OWASP Zap reprezintă un instrument automat de analiză a vulnerabilităților privind siguranța aplicațiilor WEB. Rularea acestuia se face folosind comanda zaproxy în terminal care determină pornirea interfeței grafice a aplicației.
Pentru lansarea unui test mergem la Quick Start Test și introducem adresa aplicației în spațiul pentru URL.
Figura 6.14 Rezultat OWASP Zap
În urma scanării a rezultat o serie de alerte având un grad diferit de risc, cea mai importantă fiind vulnerabilitatea la SQL Injection. Celelalte alerte, încadrate ca fiind minore presupun atacuri asupra cookie ( neimportante pentru noi deoarece am folosit sesiuni ), vulnerabilitate la atacurile de tip XSS și prezența posibilității completării automate a numelui de utilizator și parolei.
Funcționarea OWASP Zap a dezvăluit o altă vulnerabilitate importantă a aplicației: posiblilitatea creării unui număr foarte mare de conturi de pe același IP. În urma rulării Zap s-a produs o umplere a bazei de date cu conturi create automat folosind formularul de înregistrare.
Figura 6.15 Conturi create automat OWASP Zap
O altă unealtă pentru scanarea vulnerabilităților pe care o vom folosi este skipfish. Pentru lansarea testului vom folosi comanda:
skipfish –o rezultat http://188.27.192.131
În timpul scanării skipfish abuzează de vulnerabilitatea posibilității accesului la pagina Profile deși nu suntem logați și produce o încărcare a tabelei posts cu spam.
Figura 6.16 Tabela posts după scanarea cu skipfish
De asemenea se creează automat o pagină WEB conținând recultatele testării. Această pagină se găsește în folderul rezultat care s-a creat la rularea comenzii de testare.
6.17 Rezultat rulare skipfish aplicație nesecurizată
Observăm prezența unor atenționări cu risc maxim (bulina roșie) care necesită atenția imediată a dezvoltatorului. Acestea reprezintă vulnerabilitățile aplicației nesecurizate la SQL Injection.
7. Testarea aplicației securizate
După descoperirea unei multitudini de vulnerabilități în securitatea aplicației Dear Diary s-a luat măsura aplicării declarațiilor pregătite pentru interogările care lucrează cu date de intrare de la utilizatori pentru protejarea împotriva injectării de cod SQL.
Similar testării aplicației vulnerabile vom începe cu o testare manuală a siteului. La adăugarea apostrofului în URL-ul browserului suntem redirecționați catre o pagină de eroare care oferă posibilitatea întoarcerii la pagina anterioară.
Figura 7.1 Pagina de eroare
De asemenea am eliminat posibilitatea accesării paginii Profile de către clienții care nu sunt logați în contul de utilizator. Încercarea de a accesa această pagină va redirecționa clientul către pagina de eroare.
Securizarea formularului de logare s-a produs prin folosrea declarațiilor pregătite. Orice încercare de a scrie altceva în formular în afara username-ului și parolei corecte provoacă apariția erorii care anunță clientul că username-ul sau parola sunt greșite. Tentativele de injectare manuală asupra formularului a eșuat.
Testarea aplicației nesecurizate a produs o umplere a tabelei users cu conturi automate create de OWASP Zap. Pentru a combate această vulnerabilitate avem două soluții:
– filtrarea pe IP ( nu se poate crea mai mult de un cont de utilizator de pe același IP )
– introducerea unui captcha în formularul de înregistrare
Captcha este o metodă automată prin care se poate determina dacă utilizatorul unei aplicații este o persoana sau un script. Cele mai puternice captcha sunt determinate de distorsiunea unui text într-o imagine.
Pentru simplitate am ales introducerea unui captcha în formularul de înregistrare care să ateste identitatea unui utilizator. Crearea acestuia constă în generarea unui text la întâmplare contituit din 6 caractere: cifre, litere mari și litere mici.
Figura 7.2 Apelarea funcției de generare captcha
Figura 7.3 Funcția de generare captcha
Figura 7.4 Formular înregistrare aplicație sigură
Pentru a elimina acțiunea unora din instrumentele de recunoaștere a caractarelor am introdus o regulă în codul CSS al paginii care taie textul.
text-decoration: line-through;
Această modificare a formularului de înregistrare a blocat Zap din a crea conturi automate.
După rularea OWASP Zap pe aplicația considerată sigură rezultă o serie de alerte considerate minore și între care nu se numără vulnerabilitatea la SQL Injection.
De asemenea am eliminat completarea automată a numelui de utilizator și a parolei considerată problemă de securitate: autocomplete = “off”.
Figura 7.5 Rezultat OWASP Zap aplicație sigură
Testarea aplicației folosind sqlmap are ca finalitate imposibilitatea aplicației de a găsi vreo vulnerabilitate la SQL Injection
Figura 7.6 Rezultat sqlmap aplicație sigură
Rezistența aplicației la vulnerabilitățile de tip SQL Injection este confirmată și de instrumentul skipfish. Atenționările de risc maxim au dispărut, iar cele cu risc mediu s-au înjumătățit.
Figura 7.7 Rezultat skipfish aplicație sigură
8. Concluzii
Dear Diary este o aplicație creată în totalitate de mine având în minte ideea dezvoltării unei aplicații WEB care să înlocuiască jurnalul clasic și care să aducă aminte de o rețea socială.
Avantajele pe care le oferă față de varianta clasică sunt: mobilitatea sporită, accesul jurnalului la distanță, securitate maximă, posibilitatea publicării unora din scrieri, posibilitatea citirii publicațiilor altor utilizatori.
Aplicația rulează pe o distribuție de Linux Kali pe care am instalat-o în paralel cu Windows 10 și folosește o baza de date open source, MariaDB. Pentru testarea aplicației, datorită incompatibilității unora din instrumentele de analiză cu URL-ul conținând localhost, s-a decis instalarea unei mașini virtuale cu Ubuntu și realizarea port forward. Conectarea la aplicație s-a făcut folosind IP-ul extern al sistemului introdus în browser.
Pentru securizarea aplicației aveam nevoie să cunoașem în primul rând problemele. Pentru detectarea vulnerabilităților am folosit atât testarea manuală, cât și automată folosind instrumentele: sqlmap, skipfish și OWASP Zap.
În demonstrațiile vulnerabilităților aplicației slab securizate am folosit MariaDB 5.5 care este o versiune mai veche și este mult mai ușor de exploatat. Odată cu securizarea aplicației am realizat și un update al sistemului de operare care a instalat ultima versiune de MariaDB la momentul actual, 10.2. Aceasta prezintă noi caracteristici care o fac mai stabilă și mai sigură.
Pe parcursul implementării aplicației Dear Diary am realizat o serie de observații care ar servi drept model unui dezvoltator aflat la început:
– cu cât aplicația prezintă mai multe intrări cu atât creste riscul de a avea vulnerabilități în aplicație deoarece dezvoltatorul poate trece neintenționat una din ele cu vederea atunci când realizează securizarea site-ului
– este recomandată folosirea unor parole puternice atunci când se realizează înregistrarea unui cont de utilizator. Ideal aceasta ar trebui să aibă minim 12 caractere, să conțină litere mici, litere mari, numere și simboluri și să nu fie reprezentată de cuvinte din dicționar
– o bună practică este existența celei de-a doua baze de date a sistemului folosită pentru backup în condițiile in care un atacator ar reuși să spargă baza de date și să modifice sau chiar să șteargă conținutul acesteia
– la crearea formularului de logare / înregistrare se va folosi atributul autocomplete = “off“ care înlătură sugestiile de completare
– pentru realizarea interogărilor în baza de date care implică date de intrate de la utilizatori se vor folosi declarații pregătite pentru securizarea împotriva SQL Injection
– trebuie sa se asigure integritatea fizică a serverului și un alt server de backup
– realizarea update-urilor periodice oferite de dezvoltatori sistemului și ale bazei de date
9. Bibliografie
[1] Prof. Felicia Ionescu , Curs de prelucrare a bazelor de date
[2] Modelul de date relațional, http://contabilitatesiinformaticadegestiune.blogspot.ro/2011/11/modelul-de-date-relational.html,
accesat la data: 23.05.2017
[3] Server Web, https://ro.wikipedia.org/wiki/Server_web, accesat la data: 28.05.2017
[4] Sonia Jahid and Imranul Hoque, Security issues of Web Server, https://www.academia.edu/472431/SECURITY_ISSUES_OF_WEB_SERVER,
accesat la data: 29.05.2017
[5] Diana Bărbat, Securitatea bazelor de date – Atacuri și metode de control,
http://asociatia-profesorilor.ro/securitatea-bazelor-de-date-atacuri-si-metode-de-control.html
accesat la data: 01.06.2017
[6] Michael Mimoso, Top Web application security problems identified,
http://searchsecurity.techtarget.com/news/873823/Top-Web-application-security-problems-identified
accesat la data: 28.05.2017
[7] Ghid de securizare a aplicațiilor WEB,
https://www.cert.ro/vezi/document/ghid-securizare-aplicatii-web
accesat la data: 05.06.2017
[8] Kali Linux, https://en.wikipedia.org/wiki/Kali_Linux, accesat la data: 08.06.2017
[9] Apache HTTP Server, http://clubtech.ro/viewtopic.php?t=1746, accesat la data: 08.06.2017
[10] MariaDB vs MySQL, http://www.iulianhalac.com/adio-mysql-a-ajuns-la-sfarsit/
[11] Moving to MariaDB, https://mariadb.com/kb/en/mariadb/moving-to-mariadb/
[12] PHP, https://ro.wikipedia.org/wiki/PHP, accesat la data: 09.06.2017
[13] HTML, https://ro.wikipedia.org/wiki/HyperText_Markup_Language, accesat la data de 09.06.2017
[14] CSS, https://en.wikipedia.org/wiki/Cascading_Style_Sheets, accesat la data de 09.06.2017
[15] Thomas Cannolly and Carolyn Begg, Database Systems – A practical approach to Design, Implementation, and Management, Fourth Edition, pp 113
[16] Limbajul SQL, http://www.runceanu.ro/adrian/wp-content/cursuri/bd2013/C9-BD.pdf,
accesat la data de 13.06.2017
[17] Linux, https://ro.wikipedia.org/wiki/Linux, accesat la data de 12.06.2017
[18] Linux, http://vega.unitbv.ro/~jipa/ui/linux/comp_login.html, accesat la data de 12.06.2017
[19] Figura 3.1, http://vega.unitbv.ro/~jipa/ui/img/compon.jpg
[20] Linux, https://www.tutorialspoint.com/operating_system/os_linux.htm,
accesat la data de 12.06.2017
[21] Sqlmap, http://tools.kali.org/vulnerability-analysis/sqlmap, accesat la data de 12.06.2017
[22] Nmap, https://ro.wikipedia.org/wiki/Nmap, accesat la data de 18.06.2017
[23] Arhitectura Client Server, https://ro.scribd.com/doc/43124974/Arhitectura-Client-Server, accesat la data de 13.06.2017
[24] Unified Modeling Language, https://ro.wikipedia.org/wiki/Unified_Modeling_Language, accesat la data de 14.06.2017
[25] UML diagram types, http://creately.com/blog/diagrams/uml-diagram-types-examples, accesat la data de 14.06.2017
[26] Ce este SSL?, https://www.domreg.ro/ce-este-ssl.shtml, accesat la data de 18.06.2017
[27] SQL Injection tools for automated tests, http://searchsqlserver.techtarget.com/tip/SQL-injection-tools-for-automated-testing, accesat la data de 19.06.2017
[28] Sqlmap, https://github.com/sqlmapproject/sqlmap/wiki/FAQ, accesat la data de 24.06,2017
[29] OWASP ZAP 2.6 Getting Started Guide, https://github.com/zaproxy/zaproxy/releases/download/2.6.0/ZAPGettingStartedGuide-2.6.pdf
[30] Skipfish Documentation, https://code.google.com/archive/p/skipfish/wikis/SkipfishDoc.wiki, accesat la data de 27.06.2017
[31] Figura 6.2, http://securityidiots.com/Web-Pentest/SQL-Injection/Basic-Union-Based-SQL-Injection.html
Anexa 1
index.php navbar1.php
navbar2.php mail.php
register.php login.php
profile.php public.php
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Conducător științific Absolvent Ș.L. Pupezescu Valentin Istudor Laurențiu-Cosmin Anul 2017 Declaratie de onestitate CUPRINS Listă figuri Figura 3.1… [310182] (ID: 310182)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
