Testerii de penetrare începători, în special, pun mai puțin accent pe securitatea bazelor de date în general. O aplicație fără configurație de bază de date și teste de securitate nu poate fi sigură. Este posibil să utilizați deja software-ul MySQL, un sistem de gestionare a bazelor de date, deci cum îl puteți face mai sigur? Iată șapte pași pe care trebuie să-i urmezi.
1. Utilizați tunelul SSH în loc de conexiunea la distanță
Serviciul MySQL rulează implicit pe portul 3306. Când instalați MySQL, veți vedea că portul 3306 este în modul de ascultare pentru toate conexiunile. Așa cum este, portul MySQL este deschis către lumea exterioară. De aceea ar trebui să setați serviciul MySQL să asculte numai adresa locală.
Deoarece serverele sunt de obicei rulate pe o distribuție Linux, exemplele de mai jos se bazează pe o distribuție Debian. Fișierul pe care trebuie să îl utilizați pentru tunelul SSH în loc de conexiunea la distanță și pentru a închide portul implicit pentru lumea exterioară este
/etc/mysql/my.cnf. În acest fișier, trebuie să deschideți un câmp numit [mysqld] si scrie urmatoarea comanda:[mysqld]
lega-adresa=127.0.0.1
După acest proces, nu uitați să salvați acest fișier și să reporniți serviciul cu următoarea comandă:
sudo systemctl reporniți mysqld
# sau
sudosystemctlreporniremariadb.serviciu
Cu aceasta, serviciul MySQL va asculta doar adresa locală.
Dacă utilizați MariaDB, puteți, de asemenea, să examinați /etc/mysql/mariadb.conf.d/50-server.cnf și verificați dacă există o definiție pentru bind-adresă.
Acum că ai setat adresa de legare la 127.0.0.1, care este localhost, puteți rula o scanare Nmap și puteți verifica rezultatul:
Puteți vedea portul MySQL deoarece 127.0.0.1 reprezintă gazda locală pe care o vedeți. Puteți încerca să schimbați din nou adresa de legare pentru a vă asigura că funcționează:
[mysqld]
lega-adresa=127.5.5.1
Apoi salvați /etc/mysql/my.cnf fișier și reporniți serviciul MySQL. Dacă efectuați o scanare Nmap din nou, în această etapă, nu ar trebui să vedeți această adresă de legare pe localhost.
Odată ce știți că funcționează, reveniți la setările de la primul pas și setați adresa de legare înapoi la 127.0.0.1 și salvați din nou.
2. Configurați o barieră de acces la fișiere locale
MySQL poate comunica cu sistemul de fișiere local. Cu interogări, puteți vedea conținutul unui text în sistemul de fișiere local sau puteți arde rezultatul interogării pe un disc. Pentru a preveni atacatorii rău intenționați care folosesc această caracteristică, trebuie să împiedicați MySQL să comunice cu sistemul de fișiere local.
Puteți utiliza o funcție numită local-infile pentru a lua măsuri de precauție. De exemplu, imaginați-vă că aveți un fișier numit „/etc/secretfile.txt” și că aveți o parolă în acest fișier. Dacă valoarea funcției local-infile din fișierul dumneavoastră /etc/mysql/my.cnf este 1, atunci accesul este deschis. Deci puteți accesa fișierul secretfile.txt.
Valoarea funcției local-infile este 1. Reporniți baza de date MySQL pentru ca modificările să aibă loc. Acum, conectați-vă la MySQL cu următoarea comandă și verificați dacă puteți vedea fișierul secretfile.txt:
SELECTAȚILOAD_FILE("/etc/secretfile.txt");
Nu este dificil să captezi informațiile din orice fișier de pe computer.
Pentru a rezolva această problemă, modificați valoarea local-infile din fișierul dvs. /etc/mysql/my.cnf, după cum urmează:
[mysqld]
local-infile=0
Reporniți serviciul MySQL. Reconectați-vă la MySQL și repetați pasul anterior; nu ar trebui să mai puteți vedea conținutul fișierului.
Dacă utilizatorii nu au deja permisiuni de citire și scriere pe fișierele locale, nu vor putea vedea acest fișier. Cu toate acestea, este încă ceva ce ar trebui să verificați în testele de penetrare și securitatea bazei de date.
3. Setați utilizatorii și parolele aplicației
Utilizatorul de gestionare a bazei de date și utilizatorul MySQL care accesează baza de date trebuie să fie diferiți unul de celălalt. Cu alte cuvinte, conectarea aplicațiilor la MySQL cu utilizatori root este extrem de periculoasă. Dacă este posibil, definiți utilizatorii aplicațiilor care nu funcționează operațiuni UPDATE sau INSERT separat.
Un alt lucru de luat în considerare în acest moment sunt parolele utilizatorului. Ca în aproape orice domeniu, parolele pentru utilizatorii MySQL trebuie să fie complexe și imprevizibile. Dacă aveți nevoie de ajutor în acest sens, există sisteme excelente de generare de parole pe care le puteți utiliza.
4. Ștergeți utilizatorii anonimi
Când instalați MySQL în mod implicit, apar unii utilizatori anonimi. Trebuie să le ștergeți și să le blocați accesul. Pentru un server MySQL securizat, nu ar trebui să primiți niciun răspuns ca urmare a următoarei interogări:
SELECTAȚI * DIN mysql.user UNDEUTILIZATOR="";
# Exemplu de ieșire
Gol a stabilit (0,001 sec)
Dacă există rezultate, ar trebui să ștergeți acești utilizatori anonimi. De exemplu, dacă există un cont anonim numit „anonuser” într-un mediu numit „localhost”, ar trebui să utilizați o comandă ca următoarea pentru a șterge acest cont:
DROP UTILIZATOR 'anonimat'@'gazdă locală';
5. Verificați permisiunile pentru fișierele locale MySQL
Imaginați-vă că sunteți administrator de baze de date și doriți să reveniți la datele de acum o săptămână. În acest caz, este posibil să trebuiască să vă conectați la serverul bazei de date prin SSH și să schimbați fișierele MySQL pe care le doriți. În timp ce făceai acest lucru, este posibil să fi folosit privilegiile de utilizator root ale Linux; adică proprietatea și permisiunile fișierelor de date se pot schimba. Nu vrei asta.
Uită-te la directorul /var/lib/mysql pentru a verifica permisiunile acordate. Ceea ce trebuie să verificați aici este dacă proprietarul tuturor fișierelor este utilizatorul MySQL. Următoarea comandă va face truc:
sudo ls -al /var/lib/mysql
Permisiunile de citire și scriere ale fișierelor ar trebui să fie numai pentru utilizatorul MySQL. Niciun alt utilizator nu ar trebui să aibă permisiuni.
6. Utilizați MySQL SSL
Gândirea la un exemplu concret este cea mai bună modalitate de a înțelege utilizarea MySQL și SSL. Imaginați-vă că unul dintre serverele din regiunea ABC, unde există multe servere diferite, este preluat de hackeri rău intenționați. Hackerii vor efectua o scanare internă în regiunea ABC. În acest fel, ei colectează informații despre servere.
Dacă detectează un server MySQL în timpul acestui proces, pot efectua a Atacul Man-in-the-Middle (MitM) asupra serverului țintă, ceea ce înseamnă că pot fura informațiile de sesiune ale aplicațiilor și utilizatorilor care se conectează la acest server. Una dintre cele mai bune moduri de a evita acest lucru este activați SSL pe serverul MySQL.
7. Fișiere jurnal și istoric
Folosiți jurnalele MySQL pentru a analiza și găsi erori. Puteți edita unde sunt păstrate aceste jurnaluri introducând my.cnf după cum urmează:
# /etc/mysql/my.cnf
[mysqld]
Buturuga =/var/Buturuga/mylogfiles
Puteți schimba numele sau locația mylogfiles după cum doriți. Mai este un fișier pe care trebuie să îl verificați. Când vă conectați la serverul MySQL într-un terminal Linux și introduceți diverse comenzi, aceste interogări sunt salvate în fișierul mysql_history. Dacă executați următoarea comandă, puteți vedea interogările pe care le utilizați în terminalul MySQL:
cat ~/.mysql_history
Trebuie să ștergeți conținutul acestui fișier dacă nu doriți să oferiți informații despre ce fel de interogări faceți în interiorul serverului. Utilizați următoarea comandă pentru a șterge conținutul fișierului:
sudo echo "curățate"> ~/.mysql_history
Apoi puteți verifica din nou conținutul fișierului.
Oricine deține baza de date deține sistemul
Indiferent de industria în care lucrați, baza de date conține întotdeauna informații importante. Acestea pot fi clienții, conturile bancare și parolele dvs. Atacatorii rău intenționați cunosc importanța și valoarea acestora. Dezvoltatorii și administratorii de baze de date trebuie să cunoască cel puțin elementele de bază pe care le vor întâlni în testele de penetrare pentru a-i învinge pe hackeri.