MySQL este unul dintre cele mai populare sisteme de gestionare a bazelor de date relaționale, care este un jackpot pentru atacatorii care încearcă să se strecoare în bazele de date. Un server de baze de date MySQL nou instalat poate avea multe vulnerabilități și lacune. Deoarece securitatea datelor este de mare importanță, este obligatoriu să înțelegeți fiecare aspect al securității MySQL.
Acest articol se concentrează pe auditarea și securitatea bazei de date MySQL și oferă nouă sfaturi pentru a-și întări securitatea.
1. Evitați acordarea de privilegii inutile
MySQL permite mai multe declarații de privilegii care, atunci când sunt atribuite în mod inutil unui utilizator defavorizat, pot duce la citirea/scrierea fișierelor și subminarea altor privilegii de utilizator. Unele dintre declarațiile de privilegii cele mai potențial riscante sunt FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN și așa mai departe. Puteți citi mai multe despre acestea din documentația oficială MySQL. Prin urmare, nu atribuiți privilegii de superutilizator precum FILE, GRANT, SUPER și PROCESS conturilor neadministrative. Puteți revoca aceste permisiuni globale, baze de date și la nivel de tabel inutile, după cum urmează:
REVOCA TOTUL PE *.* FROM 'user_name'@'host_name'; #Privilegii globale
REVOKE CREATE, DROP ON database_name.* FROM 'user_name'@'host_name'; #Privilegii baze de date
REVOKE INSERT, UPDATE, DELETE ON database_name.table_name FROM 'user_name'@'host_name'; #Privilegii de masă
privilegii de golire;
2. Restricționați conectările de la distanță
Accesul de la distanță ușurează munca administratorilor de baze de date, dar riscă serverul la potențiale vulnerabilități și exploatări. Puteți dezactiva accesul la distanță pentru toate tipurile de conturi de utilizator MySQl adăugând o variabilă de ignorare a rețelei la fișierul principal de configurare și repornind serviciul.
[mysqld]
skip-networking
sudo service mysql restart
În mod similar, trebuie să dezactivați accesul la contul root, dacă nu tot pentru a restricționa conectările de la distanță la contul root. Această precauție previne forțarea brută a contului rădăcină MySQL.
mysql> șterge din mysql.user unde user='root' și host not in ('localhost', '127.0.0.1', '::1'); privilegii mysql> de golire;
3. Dezactivați funcții (load_file, outfile, dumpfile)
O altă precauție pentru a securiza MySQL împotriva injectării de fișiere locale este dezactivarea funcțiilor accesibile numai prin privilegiul de acordare FILE. FILE este o opțiune care permite utilizatorilor cu privilegii reduse cu opțiuni globale de comandă să citească sau să scrie fișiere pe server.
- load_file
Funcția load_file încarcă conținutul fișierului de pe server ca șir. De exemplu, următoarea comandă va încărca tot conținutul din /etc/passwd fișier după cum urmează:
selectați fișierul_încărcare('/etc/passwd')
- outfile
În mod similar, funcția outfile scrie conținut în fișierele serverului local. Atacatorii pot folosi această funcție pentru a scrie o sarcină utilă în fișierul de pe server, după cum urmează:
selectați „Injectare SQL fișier local” în fișierul de ieșire „/tmp/file.txt”;
cat /tmp/file.txt
Ieșire:
Injecție SQL fișier local
- dumpfile
Această funcție folosește cauza selectată pentru a scrie în fișier fără a returna rezultatul pe ecran.
cat /tmp/file.txt
selectați „Bună lume!” în dumpfile „/tmp/world”;
Ieșire:
Interogare OK, 1 rând afectat (0,001 sec)
Puteți dezactiva aceste funcții revocând privilegiul FILE, după cum urmează:
revocați FILE pe *.* de la „nume_utilizator”@”localhost”;
Legate de: Un ghid pentru începători pentru Metasploit în Kali Linux (cu exemple practice)
4. Dezactivați Portul implicit
Știm că serviciile MySQL rulează pe portul 3306, iar atacatorii scanează porturile pentru a verifica serviciile care rulează în rețea. Pentru a adăuga securitate prin obscuritate și pentru a schimba portul implicit MySQL prin editarea variabilei de sistem de port în fișierul său principal de configurare, va trebui să introduceți următoarele:
vim /etc/mysql/my.cnf
port=XXXX
sudo service mysql restart
5. Evitați metacaracterele în numele conturilor
Numele de cont în MySQL constau din două părți care sunt un utilizator și un nume de gazdă „nume_utilizator”@”nume_gazdă”. Acesta permite administratorului să creeze conturi pentru utilizatorii cu același nume care se conectează de la gazde diferite. Cu toate acestea, partea gazdă a unui nume de cont permite convențiile metacaracterelor care pot fi un punct de acces la baza de date de oriunde.
Utilizarea opțională a numelui de gazdă sau a valorii adresei IP este echivalentă cu „nume_utilizator”@”%”, unde % se potrivește cu operația LIKE de potrivire a modelului MySQL, iar % înseamnă orice nume de gazdă. Între timp, accesul de la „192.168.132.%” înseamnă orice încercare din rețeaua de clasă C. În plus, oricine poate accesa baza de date denumind partea gazdă ca „192.18.132.mysql.com”.
Pentru a evita astfel de încercări, MySQL permite definirea unei măști de rețea cu valoarea gazdei pentru a identifica biții de rețea ai unei adrese IP:
client-ip_add & netmask = nume_gazdă
Sintaxa pentru a crea un nume de gazdă este host_ip/netmask:
CREATE USER 'jhon'@'192.168.132.0/255.255.255.0';
Valoarea gazdă de mai sus permite utilizatorului Ioan pentru a accesa baza de date de pe orice IP în intervalul 192.168.132.0-192.168.132.255. În mod similar, valorile gazdei 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 vor permite gazde din rețelele de clasă A și B. În timp ce 192.168.132.5 va permite accesul numai de la IP-ul specific.
6. Dezactivați accesul explicit
Numele de utilizator în MySQL este fie un nume cu care bazele de date acceptă conexiuni de intrare, fie un nume de utilizator gol „@”host_name” care creează un utilizator anonim. Cu toate acestea, prezența unui utilizator anonim poate influența atacatorii să acceseze serverul bazei de date. În plus, versiunile MySQL înainte de MySQL 5.7 creează un set anonim de utilizatori, iar instalarea după actualizarea versiunii încă adaugă acești utilizatori.
selectați utilizator, gazdă, parolă din mysql.user unde utilizatorul place '';
Puteți observa că coloanele utilizator și parolă sunt goale, iar accesul este limitat la localhost. Cu toate acestea, nu doriți ca nimeni să acceseze baza de date. Utilizați următoarea comandă pentru a șterge utilizatori anonimi:
elimină utilizatorul " "@"localhost"
privilegii de golire;
7. Setați un cont non-root ca proprietar sau grup
Setarea unui cont de utilizator non-root nu are legătură cu utilizatorul root MySQL. Instalarea MySQL în sistemele Linux/Unix din pachetele tar și tar.gz permite serverului să ruleze de către orice utilizator defavorizat. Acesta este un dezavantaj de securitate deoarece orice utilizator cu opțiunea de acordare FILE poate edita sau crea fișiere pe server. Cu toate acestea, returnează o eroare atunci când un utilizator încearcă să o acceseze fără -utilizator=rădăcină eroare.
Puteți evita acest lucru prin practicarea regulii de accesare a serverului de baze de date ca utilizator Linux separat. Pentru a rula mysqld ca utilizator Linux obișnuit, opriți serverul și schimbați permisiuni de citire/scriere a serverului MySQL la mysql, după cum urmează:
chown -R mysql /path/to/mysql/datadir
Deschideți fișierul de configurare principal MySQL, adăugați un nou utilizator mysql și reporniți serviciul pentru a evita accesul nenecesar la server:
vim /etc/mysql/my.cnf
utilizator=mysql
sudo service mysql restart
8. Setați parola pentru contul root
Instalarea MySQL printr-un shell interactiv în distribuțiile Linux bazate pe Debian creează contul de utilizator root și vă solicită să setați o parolă. Cu toate acestea, acest lucru nu se întâmplă în instalațiile shell non-interactive și în distribuțiile bazate pe Red-Hat. După cum sa menționat mai sus, un utilizator non-root al unei mașini Linux poate accesa contul de utilizator root mysql folosind -utilizator=rădăcină opțiune. Puteți evita acest lucru setând parola după cum urmează:
parola sudo mysqladmin
vim /etc/mysql/my.cnf
parola=
sudo service mysql restart
9. Asigurați criptarea datelor în tranzit și în repaus
Comunicarea implicită necriptată între client și server prezintă un risc de interceptare a datelor de către orice om din mijloc. În mod similar, datele utilizatorului necriptate din baza de date riscă confidențialitatea și integritatea utilizatorului. MySQL acceptă criptarea datelor între client și server prin protocolul TLS/SSL, în timp ce comunicarea necriptată este acceptabilă numai atunci când ambele părți care comunică sunt în aceeași rețea.
MySQL acceptă acum criptarea în repaus pentru a proteja datele stocate pe server chiar și atunci când sistemul este încălcat.
Securitate avansată MySQL: Protejați-vă
Este esențial să vă asigurați că aveți cele mai înalte niveluri de securitate online, iar acest articol vă va oferi câteva indicații utile în direcția corectă. Pașii de mai sus sunt utili pentru securizarea serverului dumneavoastră de baze de date, dar este, de asemenea, esențial să învățați cum să atribuiți permisiuni minime utilizatorilor care nu sunt administrativi.
Creați-vă propria bază de date mySQL doar cu un editor de text și această structură de bază, sau „schemă”.
Citiți în continuare
- Programare
- Securitate
- Programare
- Sfaturi de securitate
- Securitate
Rumaisa este un scriitor independent la MUO. Ea a purtat multe pălării, de la un matematician la un pasionat de securitate a informațiilor, iar acum lucrează ca analist SOC. Interesele ei includ citirea și scrierea despre noile tehnologii, distribuțiile Linux și orice despre securitatea informațiilor.
Aboneaza-te la newsletter-ul nostru
Alăturați-vă buletinului nostru informativ pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!
Click aici pentru a te abona