Câteva informații de bază înainte de a începe:

Sursă: Centrul pentru securitatea Internetului (CIS) Oracle MySQL Community Server 5.7

Sistem de operare: Windows 10

Unde se execută: Linie de comanda

mysql -u USERNAME -p

Aplicație țintă: Oracle MySQL Community Server 5.7

Auditarea și înregistrarea sistemelor informatice

Jurnalele joacă un rol crucial pentru securitate atunci când se suspectează un atac cibernetic. O revizuire manuală a jurnalelor este minuțioasă pentru personalul de securitate și trebuie să utilizeze instrumente de revizuire a jurnalelor pentru a extrage informații și a le analiza. Jurnalele ar trebui să utilizeze o tehnologie de stocare și criptare WORM (scrie odată citite multe) pentru a evita corupția și pierderea datelor din jurnal. De asemenea, jurnalele ar trebui să aibă un format standardizat pentru facilitarea întreținerii, accesului și comparării.

Asigurați-vă că „log_error” nu este gol

comanda:

SHOW variables LIKE ‘log_error’;
Cum sa va asigurati ca baza de date MySQL este
înregistrarea erorilor

Jurnalele de erori conțin date despre evenimentele când MySQL începe sau se oprește. De asemenea, arată când un tabel trebuie evaluat sau reparat. Trebuie să genereze o „valoare”. Motivul pentru activarea înregistrării erorilor este că ajută la creșterea capacității de detectare a încercărilor rău intenționate împotriva MySQL și a altor mesaje vitale.

Asigurați-vă că fișierele jurnal sunt stocate pe o partiție non-sistem

comanda:

SELECT @@global.log_bin_basename;

Fișierele jurnal MySQL pot fi stocate oriunde în sistemul de fișiere și setate utilizând configurația MySQL. De asemenea, este o bună practică să vă asigurați că jurnalele din sistemul de fișiere nu sunt aglomerate cu alte jurnale, cum ar fi jurnalele aplicațiilor. Trebuie să vă asigurați că valoarea returnată nu indică faptul că se află în rădăcina „(‘/’)”, „/ var” sau „/ usr”. Motivul pentru aceasta este că partiționarea va scădea probabilitatea refuzului de serviciu dacă spațiul disponibil pe sistemul de operare este epuizat.

1611440348 999 Cum sa va asigurati ca baza de date MySQL este
Înregistrați fișierele în partiția non-sistem

Asigurați-vă că „log_error_verbosity” nu este setat la „1”

comanda:

SHOW GLOBAL VARIABLES LIKE ‘log_error_verbosity’;

Această verificare oferă informații suplimentare cu privire la funcționalitățile pe care jurnalul MySQL le are sau le-a activat în mesajele de eroare. O valoare 1 permite înregistrarea mesajelor de eroare. O valoare 2 permite atât înregistrarea mesajelor de eroare, cât și avertismentelor. O valoare 3 permite înregistrarea mesajelor de eroare, avertisment și notă. Aceasta ajută la detectarea comportamentului rău intenționat prin înregistrarea erorilor de comunicare și a conexiunilor întrerupte.

1611440349 978 Cum sa va asigurati ca baza de date MySQL este
Verificați eroarea jurnalului

Asigurați-vă că jurnalul de audit este activat

Activarea înregistrării auditului este crucială pentru mediul de producție pentru sesiuni interactive de utilizator și sesiuni de aplicații. Cu jurnalul de audit, ajută la identificarea cine a schimbat ce și când. De asemenea, poate ajuta la identificarea a ceea ce a făcut un atacator și poate fi folosit chiar ca dovadă în investigații.

comanda:

SELECT NAME FROM performance_schema.setup_instruments WHERE NAME LIKE ‘%/alog/%’;
1611440349 966 Cum sa va asigurati ca baza de date MySQL este
Jurnal de audit 1
1611440349 993 Cum sa va asigurati ca baza de date MySQL este
Jurnalul de audit 2
1611440350 400 Cum sa va asigurati ca baza de date MySQL este
Nu există pluginuri de jurnal de audit

comanda:

SET GLOBAL general_log = ‘ON’ ;
1611440350 619 Cum sa va asigurati ca baza de date MySQL este
Interogare generală jurnal

comanda: CREAȚI UTILIZATORUL „utilizator1” @ „localhost” IDENTIFICAT DE PAROLĂ „nu atât de secret”;

Calea jurnalului în Windows 10 poate fi găsită utilizând aplicația Servicii, căutând să vadă dacă MySQL rulează și faceți clic dreapta pe proprietăți.

Jurnalul din sistemul autorului a fost localizat în: C: ProgramData MySQL MySQL Server 5.7 Data DJ-JASON-CLARK.log

1611440351 502 Cum sa va asigurati ca baza de date MySQL este
Conectare generală la sistem
1611440351 790 Cum sa va asigurati ca baza de date MySQL este
Procesul MySQL Enterprise Audit

Autentificare pentru sistemul informațional

Autentificarea se asigură că acreditările furnizate de utilizator sau de mașină sunt potrivite cu baza de date a utilizatorilor autorizați într-un sistem de operare local sau într-un server de autentificare. Autentificarea este apoi urmată de autorizare, care este acordată de un administrator utilizatorilor sau mașinilor. O autentificare care este utilizată în mod obișnuit atât în ​​rețelele private, cât și în cele publice este autentificarea bazată pe parolă.

Asigurați-vă că parolele nu sunt stocate în configurația globală

[client] secțiunea unui fișier de configurare MySQL permite setarea creării unui utilizator și a unei parole. Verificarea este importantă deoarece permiterea unui utilizator și a unei parole în fișierul de configurare afectează confidențialitatea parolei utilizatorului în mod negativ.

Pentru audit, deschideți fișierul de configurare MySQL și examinați fișierul [client] secțiune – nu trebuie să aibă nicio parolă stocată. Nu a fost setată nicio parolă în sistemul autorului (vezi figura de mai jos). Dacă a fost setată o parolă în fișierul de configurare, utilizați mysql_config_editor pentru a stoca parolele în forma criptată în .mylogin.cnf.

1611440351 660 Cum sa va asigurati ca baza de date MySQL este
[client] secțiunea fișierului de configurare MySQL

Asigurați-vă că „sql_mode” conține „NO_AUTO_CREATE_USER”

„No_auto_create_user” este o opțiune pentru a preveni crearea automată a utilizatorului atunci când nu sunt furnizate informații de autentificare.

comanda:

SELECT @@global.sql_mode;
1611440352 520 Cum sa va asigurati ca baza de date MySQL este
Nu există utilizator de creare automată la nivel global

comanda:

SELECT @@session.sql_mode;
1611440352 699 Cum sa va asigurati ca baza de date MySQL este
Nu există utilizator de creare automată în sesiune

Asigurați-vă că parolele sunt setate pentru toate conturile MySQL

Un utilizator poate crea o parolă necompletată. A avea o parolă necompletată este riscant, întrucât oricine poate doar să își asume identitatea utilizatorului, să introducă ID-ul utilizatorului și să se conecteze la server. Acest lucru ocolește autentificarea, ceea ce este rău.

comanda:

SELECT User,host FROM mysql.user WHERE authentication_string=’’;
1611440352 284 Cum sa va asigurati ca baza de date MySQL este
Utilizatori cu parole goale

Asigurați-vă că „default_password_lifetime” este mai mic sau egal cu „90”

Schimbarea duratei de viață a parolei la 90 de zile scade timpul disponibil pentru ca atacatorul să compromită parola și astfel scade probabilitatea de a fi atacat.

comanda:

SHOW VARIABLES LIKE ‘default_password_lifetime’;
1611440353 233 Cum sa va asigurati ca baza de date MySQL este
Durată de viață implicită a parolei cu 0 valoare

comanda:

SET GLOBAL default_password_lifetime=90;
1611440353 377 Cum sa va asigurati ca baza de date MySQL este
Setarea duratei de viață implicită a parolei la 90

Asigurați-vă că complexitatea parolei este la locul său

Complexitatea parolei adaugă securitate autentificărilor și include adăugarea sau creșterea lungimii, a majusculelor, a numerelor și a caracterelor speciale. Cu cât parola este mai complexă, cu atât atacatorii folosesc forța brută mai greu pentru a obține parola. Parolele slabe sunt ușor de obținut într-un dicționar de parole.

comanda:

SHOW VARIABLES LIKE ‘validate_password%’;
1611440353 474 Cum sa va asigurati ca baza de date MySQL este
Verificați complexitatea parolei
1611440354 630 Cum sa va asigurati ca baza de date MySQL este
Implementați complexitatea parolei

Asigurați-vă că niciun utilizator nu are nume de gazdă wildcard

Utilizatorilor cu nume de gazdă wildcard (%) li se acordă permisiunea în orice locație. Cel mai bine este să evitați crearea numelor de gazdă wildcard. În schimb, creați utilizatori și dați-le locații specifice de la care un anumit utilizator se poate conecta și interacționa cu baza de date.

comanda:

SELECT user, host FROM mysql.user WHERE host = ‘%’;
1611440354 697 Cum sa va asigurati ca baza de date MySQL este
Numele gazdei wildcard
1611440354 282 Cum sa va asigurati ca baza de date MySQL este
Schimbați numele de gazdă comodin

Asigurați-vă că nu există conturi anonime

Utilizatorii pot avea un nume de utilizator anonim (gol sau gol). Aceste nume de utilizator anonime nu au parole și orice alt utilizator poate folosi acel nume de utilizator anonim pentru a se conecta la serverul MySQL. Eliminarea acestor conturi anonime garantează că numai utilizatorii identificați și de încredere pot accesa serverul MySQL.

comanda:

SELECT user,host FROM mysql.user WHERE user = ‘’;
1611440355 219 Cum sa va asigurati ca baza de date MySQL este
Fără conturi anonime

Conexiune de rețea la serverul MySQL

Conexiunea la rețea joacă un rol important pentru comunicarea dintre utilizator și serverul MySQL. Conexiunile de rețea nesigure sunt foarte vulnerabile la atacuri. Următoarele sunt verificări pentru securitatea conexiunii la rețea.

Asigurați-vă că „have_ssl” este setat la „YES”

Pentru a evita atacatorii rău intenționați să privească în interiorul sistemului dvs., cel mai bine este să utilizați SLL / TLS pentru tot traficul de rețea atunci când utilizați rețele de încredere.

comanda:

WHERE variable_name = ‘have_ssl’;
1611440355 590 Cum sa va asigurati ca baza de date MySQL este
Fără SSL

Asigurați-vă că „ssl_type” este setat la „ORICE”, „X509” sau „SPECIFICAT” pentru toți utilizatorii la distanță

SSL / TLS ar trebui să fie configurat pentru fiecare utilizator. Acest lucru previne și mai mult ascultarea atacatorilor rău intenționați.

comanda:

SELECT user, host, ssl_type FROM mysql.user WHERE NOT HOST IN (‘::1’, ‘127.0.0.1’, ‘localhost’);
1611440355 275 Cum sa va asigurati ca baza de date MySQL este
Nu ssl_type

Replicare

Verificarea stării replicării vă permite să monitorizați performanțele și vulnerabilitățile de securitate. Microsoft SQL Server Management Studio are următoarele instrumente pentru a monitoriza replicarea:

  1. vizualizați starea agentului instantaneu,
  2. vizualizați starea agentului cititorului de jurnal și
  3. vizualizați starea de sincronizare.

Asigurați-vă că traficul de replicare este securizat

Replicare traficul între servere trebuie să fie securizat. În timpul transferurilor de replicare, parolele se pot scurge.

Pentru audit, verificați dacă utilizează: o rețea privată, o rețea VPN, SSL / TLS sau un tunel SSH. Sperăm că sistemul autorului folosește o rețea privată. Corectați dacă este altfel și asigurați-vă folosind rețeaua privată, un VPN, SSL / TLS sau un tunel SSH.

1611440356 305 Cum sa va asigurati ca baza de date MySQL este
Rețea privată

Asigurați-vă că „MASTER_SSL_VERIFY_SERVER_CERT” este setat la „DA” sau „1”

„MASTER_SSL_VERIFY_SERVER_CERT” verifică dacă replica trebuie să verifice sau nu certificatul primarului. Replica ar trebui să verifice certificatul primarului pentru a autentifica primarul înainte de a continua conexiunea.

comanda:

SELECT ssl_verify_server_cert FROM mysql.slave_master_info;
1611440356 349 Cum sa va asigurati ca baza de date MySQL este
Nu există SSL pentru replică-verificare primară

Asigurați-vă că „master_info_repository” este setat la „TABLE”

„Master_info_repository” determină unde replica înregistrează starea primarului și informațiile de conexiune. Parola este stocată în depozitul principal de informații, care este un fișier text simplu. Stocarea parolei în TABLE master_info este mai sigură.

comanda:

SHOW GLOBAL VARIABLES LIKE ‘master_info_repository’;
1611440356 628 Cum sa va asigurati ca baza de date MySQL este
Valoarea primului depozit de informații

Asigurați-vă că „super_priv” nu este setat la „Y” pentru utilizatorii de replicare

Privilegiul „SUPER” („super_priv”) situat în tabelul „mysql.user” are funcții precum „CHANGE”, „MASTER TO”, „KILL”, „mysqladmin kill”, „PURGE BINARY LOGS”, „SET GLOBAL”, „Depanare mysqladmin” și alte controale de înregistrare. Acordarea unui utilizator privilegiul „SUPER” îi permite utilizatorului să vizualizeze și să oprească executarea instrucțiunilor SQL, chiar și pentru gestionarea parolelor. Dacă atacatorul exploatează și câștigă privilegiul „SUPER”, acesta poate dezactiva, modifica sau distruge datele de înregistrare.

comanda:

SELECT user, host FROM mysql.user WHERE user=’repl’ and Super_priv = ‘Y’;
1611440357 684 Cum sa va asigurati ca baza de date MySQL este
Verificarea replicării pentru utilizatorii cu privilegii SUPER

Asigurați-vă că niciun utilizator de replicare nu are nume de gazdă wildcard

MySQL vă permite să acordați permisiuni numelor de gazdă wildcard. Numele de gazdă wildcard ar trebui evitate și ar trebui să creați sau să modificați utilizatorii și să le oferiți locații specifice de la care un anumit utilizator se poate conecta și interacționa cu baza de date.

1611440357 958 Cum sa va asigurati ca baza de date MySQL este
Verificare de replicare pentru numele de gazdă wildcard

Concluzie

Următoarele verificări sunt efectuate pentru un singur mediu de lucru folosind MySQL ca sistem informațional atât pe partea aplicației, cât și pe partea utilizatorului.

Evaluarea este imperativă pentru a verifica logarea standard a MySQL și pentru a permite funcții suplimentare de logare (permite, de asemenea, verificarea vulnerabilităților de autentificare). Verificările de rețea sunt importante pentru a preveni alți utilizatori cu intenție rău intenționată să se uite în rețeaua dvs. Implementați întotdeauna SSL / TLS pentru a cripta. Este necesar să asigurați transferul într-un singur sens. Securizarea traficului de replicare adaugă un strat defensiv.

Rezultatul evaluării vă poate informa dacă sistemul este capabil să funcționeze la un nivel de încredere.

Mulțumesc că mi-ai citit blogul! Acum ați început calea către securizarea bazei de date MySQL. =)