sql >> Database >  >> RDS >> Mysql

Hoe u ervoor kunt zorgen dat uw MySQL-database beveiligd is?

Enkele basisinformatie voordat we beginnen:

Bron:Center for Internet Security's (CIS) Oracle MySQL Community Server 5.7

Besturingssysteem: Windows 10

Waar uitvoeren: opdrachtregel

mysql -u USERNAME -p

Doeltoepassing: Oracle MySQL Community Server 5.7

Auditing en logging voor informatiesystemen

Logboeken spelen een cruciale rol voor de beveiliging wanneer er een vermoedelijke cyberaanval is. Een handmatige beoordeling van logboeken is moeizaam voor beveiligingspersoneel en ze moeten hulpmiddelen voor logboekbeoordeling gebruiken om informatie te extraheren en te analyseren. Logboeken moeten een WORM (write once read many) opslagtechnologie en encryptie gebruiken om corruptie en verlies van loggegevens te voorkomen. Logboeken moeten ook een gestandaardiseerd formaat hebben voor eenvoudig onderhoud, toegang en vergelijking.

Zorg ervoor dat "log_error" niet leeg is

opdracht:

SHOW variables LIKE ‘log_error’;

Foutlogboeken bevatten gegevens over gebeurtenissen wanneer mysqld start of stopt. Het laat ook zien wanneer een tafel beoordeeld of gerepareerd moet worden. Het moet een "waarde" genereren. De reden voor het inschakelen van foutregistratie is dat het de mogelijkheid vergroot om kwaadwillende pogingen tegen MySQL en andere essentiële berichten te detecteren.

Zorg ervoor dat logbestanden worden opgeslagen op een niet-systeempartitie

opdracht:

SELECT @@global.log_bin_basename;

Logbestanden van MySQL kunnen overal in het bestandssysteem worden opgeslagen en ingesteld met behulp van de MySQL-configuratie. Het is ook een best practice om ervoor te zorgen dat de logboeken in het bestandssysteem niet vol staan ​​met andere logboeken, zoals toepassingslogboeken. U moet ervoor zorgen dat de geretourneerde waarde niet aangeeft dat deze zich in de hoofdmap "('/')", "/var" of "/usr" bevindt. De reden hiervoor is dat partitionering de kans op denial of service verkleint als de beschikbare schijfruimte voor het besturingssysteem op is.

Zorg ervoor dat "log_error_verbosity" niet is ingesteld op "1"

opdracht:

SHOW GLOBAL VARIABLES LIKE ‘log_error_verbosity’;

Deze controle geeft aanvullende informatie over welke functionaliteiten het MySQL-logboek heeft of heeft ingeschakeld bij foutmeldingen. Een waarde van 1 maakt het loggen van foutmeldingen mogelijk. Een waarde van 2 maakt het loggen van fout- en waarschuwingsberichten mogelijk. Een waarde van 3 maakt het loggen van fout-, waarschuwings- en notitieberichten mogelijk. Dit helpt bij het detecteren van kwaadaardig gedrag door communicatiefouten en afgebroken verbindingen te registreren.

Zorg ervoor dat auditregistratie is ingeschakeld

Het inschakelen van auditlogging is cruciaal voor een productieomgeving voor interactieve gebruikerssessies en applicatiesessies. Met auditlogging helpt het te identificeren wie wat heeft gewijzigd en wanneer. Het kan ook helpen om te identificeren wat een aanvaller heeft gedaan en kan zelfs worden gebruikt als bewijs in onderzoeken.

commando:

SELECT NAME FROM performance_schema.setup_instruments WHERE NAME LIKE ‘%/alog/%’;

opdracht:

SET GLOBAL general_log = ‘ON’ ;

opdracht: MAAK GEBRUIKER 'gebruiker1'@'localhost' GEDENTIFICEERD DOOR WACHTWOORD 'niet-zo-geheim';

Het pad van het logboek in Windows 10 kan worden gevonden door de Services-toepassing te gebruiken, te kijken of MySQL actief is en door met de rechtermuisknop op eigenschappen te klikken.

Het log in het systeem van de auteur bevond zich in:C:\ProgramData\MySQL\MySQL Server 5.7\Data\DJ-JASON-CLARK.log

Verificatie voor informatiesysteem

Authenticatie zorgt ervoor dat de referenties die door de gebruiker of machine worden verstrekt, overeenkomen met de database van geautoriseerde gebruikers in een lokaal besturingssysteem of in een authenticatieserver. Authenticatie wordt dan gevolgd door autorisatie, die door een beheerder wordt verleend aan gebruikers of machines. Een authenticatie die vaak wordt gebruikt in zowel particuliere als openbare netwerken, is authenticatie op basis van wachtwoorden.

Zorg ervoor dat wachtwoorden niet worden opgeslagen in de algemene configuratie

De sectie [client] van een MySQL-configuratiebestand maakt het mogelijk om een ​​gebruiker en wachtwoord in te stellen. De controle is belangrijk omdat het toestaan ​​van een gebruiker en wachtwoord in het configuratiebestand de vertrouwelijkheid van het wachtwoord van de gebruiker negatief beïnvloedt.

Om te controleren, opent u het MySQL-configuratiebestand en onderzoekt u het gedeelte [client] - er mag geen wachtwoord zijn opgeslagen. Er is geen wachtwoord ingesteld in het auteurssysteem (zie onderstaande afbeelding). Als er een wachtwoord is ingesteld in het configuratiebestand, gebruik dan mysql_config_editor om wachtwoorden in gecodeerde vorm op te slaan in .mylogin.cnf.

Zorg ervoor dat 'sql_mode' 'NO_AUTO_CREATE_USER' bevat

De "no_auto_create_user" is een optie om het automatisch aanmaken van een gebruiker te voorkomen wanneer er geen authenticatie-informatie wordt verstrekt.

opdracht:

SELECT @@global.sql_mode;

opdracht:

SELECT @@session.sql_mode;

Zorg ervoor dat wachtwoorden zijn ingesteld voor alle MySQL-accounts

Een gebruiker kan een leeg wachtwoord aanmaken. Het hebben van een blanco wachtwoord is riskant omdat iedereen gewoon de identiteit van de gebruiker kan aannemen, de login-ID van de gebruiker kan invoeren en verbinding kan maken met de server. Dit omzeilt authenticatie, wat slecht is.

opdracht:

SELECT User,host FROM mysql.user WHERE authentication_string=’’;

Zorg ervoor dat 'default_password_lifetime' kleiner is dan of gelijk is aan '90'

Als de levensduur van het wachtwoord wordt gewijzigd in 90 dagen, is er minder tijd voor de aanvaller om het wachtwoord te compromitteren, waardoor de kans kleiner wordt dat hij wordt aangevallen.

opdracht:

SHOW VARIABLES LIKE ‘default_password_lifetime’;

opdracht:

SET GLOBAL default_password_lifetime=90;

Zorg ervoor dat wachtwoordcomplexiteit aanwezig is

Wachtwoordcomplexiteit voegt beveiligingskracht toe aan authenticaties en omvat het toevoegen of vergroten van lengte, hoofdletters, cijfers en speciale tekens. Hoe complexer het wachtwoord, hoe moeilijker het voor aanvallers is om brute kracht te gebruiken om het wachtwoord te verkrijgen. Zwakke wachtwoorden zijn gemakkelijk te vinden in een wachtwoordwoordenboek.

opdracht:

SHOW VARIABLES LIKE ‘validate_password%’;

Zorg ervoor dat geen enkele gebruiker wildcard-hostnamen heeft

Gebruikers met hostnamen met jokertekens (%) krijgen toestemming voor elke locatie. U kunt het maken van hostnamen met jokertekens het beste vermijden. Maak in plaats daarvan gebruikers aan en geef ze specifieke locaties van waaruit een bepaalde gebruiker verbinding kan maken met en interactie kan hebben met de database.

opdracht:

SELECT user, host FROM mysql.user WHERE host = ‘%’;

Zorg ervoor dat er geen anonieme accounts bestaan

Gebruikers kunnen een anonieme (lege of lege) gebruikersnaam hebben. Deze anonieme gebruikersnamen hebben geen wachtwoord en elke andere gebruiker kan die anonieme gebruikersnaam gebruiken om verbinding te maken met de MySQL-server. Het verwijderen van deze anonieme accounts zorgt ervoor dat alleen geïdentificeerde en vertrouwde gebruikers toegang hebben tot de MySQL-server.

opdracht:

SELECT user,host FROM mysql.user WHERE user = ‘’;

Netwerkverbinding met MySQL-server

De netwerkverbinding speelt een belangrijke rol voor de communicatie tussen de gebruiker en de MySQL-server. Onveilige netwerkverbindingen zijn erg kwetsbaar voor aanvallen. Hieronder volgen controles voor de beveiliging van de netwerkverbinding.

Zorg ervoor dat 'have_ssl' is ingesteld op 'YES'

Om te voorkomen dat kwaadwillende aanvallers in uw systeem gluren, kunt u het beste SLL/TLS gebruiken voor al het netwerkverkeer bij gebruik van niet-vertrouwde netwerken.

opdracht:

WHERE variable_name = ‘have_ssl’;

Zorg ervoor dat 'ssl_type' is ingesteld op 'ANY', 'X509', of 'GESPECIFICEERD' voor alle externe gebruikers

SSL/TLS moet per gebruiker worden geconfigureerd. Dit voorkomt verder afluisteren van kwaadwillende aanvallers.

opdracht:

SELECT user, host, ssl_type FROM mysql.user WHERE NOT HOST IN (‘::1’, ‘127.0.0.1’, ‘localhost’);

Replicatie

Door te controleren op de replicatiestatus kunt u prestatie- en beveiligingskwetsbaarheden bewaken. Microsoft SQL Server Management Studio heeft de volgende tools om replicatie te bewaken:

  1. status momentopname agent bekijken,
  2. de status van de logboeklezer-agent bekijken, en
  3. bekijk de synchronisatiestatus.

Zorg ervoor dat het replicatieverkeer is beveiligd

Replicatie verkeer tussen servers moet worden beveiligd. Tijdens replicatieoverdrachten kunnen wachtwoorden lekken.

Controleer of ze het volgende gebruiken:een privénetwerk, een VPN, SSL/TLS of een SSH-tunnel. Hopelijk gebruikt het systeem van de auteur een privénetwerk. Corrigeer indien anders en beveilig door gebruik te maken van het privénetwerk, een VPN, SSL/TLS of een SSH-tunnel.

Zorg ervoor dat 'MASTER_SSL_VERIFY_SERVER_CERT' is ingesteld op 'YES' of '1'

‘MASTER_SSL_VERIFY_SERVER_CERT’ controleert of de replica het certificaat van de primaire moet verifiëren of niet. De replica moet het certificaat van de primaire verifiëren om de primaire te verifiëren voordat de verbinding wordt voortgezet.

opdracht:

SELECT ssl_verify_server_cert FROM mysql.slave_master_info;

Zorg ervoor dat 'master_info_repository' is ingesteld op 'TABLE'

De 'master_info_repository' bepaalt waar de replica de status en verbindingsinformatie van de primaire logt. Het wachtwoord wordt opgeslagen in de primaire info-repository die een tekstbestand is. Het wachtwoord opslaan in de TABLE master_info is veiliger.

opdracht:

SHOW GLOBAL VARIABLES LIKE ‘master_info_repository’;

Zorg ervoor dat 'super_priv' niet is ingesteld op 'Y' voor replicatiegebruikers

De Het "SUPER"-privilege ('super_priv') in de tabel "mysql.user" heeft functies als "CHANGE", "MASTER TO", "KILL", "mysqladmin kill", "PURGE BINARY LOGS", "SET GLOBAL", "mysqladmin debug" en andere besturingselementen voor loggen. Door een gebruiker het "SUPER"-privilege te geven, kan de gebruiker de momenteel uitgevoerde SQL-instructies bekijken en beëindigen, zelfs voor wachtwoordbeheer. Als de aanvaller misbruik maakt en het "SUPER"-privilege verkrijgt, kan hij loggegevens uitschakelen, wijzigen of vernietigen.

opdracht:

SELECT user, host FROM mysql.user WHERE user=’repl’ and Super_priv = ‘Y’;

Zorg ervoor dat gebruikers die geen replicatie hebben wildcard-hostnamen hebben

Met MySQL kunt u machtigingen verlenen aan hostnamen met jokertekens. Hostnamen met jokertekens moeten worden vermeden en u moet gebruikers maken of wijzigen en ze specifieke locaties geven van waaruit een bepaalde gebruiker verbinding kan maken met en interactie kan hebben met de database.

Conclusie

De volgende controles worden uitgevoerd voor een enkele werkomgeving met MySQL als informatiesysteem aan zowel de applicatie- als de gebruikerskant.

De beoordeling is noodzakelijk om te controleren op standaard logboekregistratie van MySQL en het inschakelen van extra logboekfuncties (het maakt ook controle op authenticatiekwetsbaarheden mogelijk). Netwerkcontroles zijn belangrijk om te voorkomen dat andere gebruikers met kwade bedoelingen in uw netwerk gluren. Implementeer altijd SSL/TLS om te coderen. Het beveiligen van eenrichtingsverkeer is noodzakelijk. Het beveiligen van replicatieverkeer voegt een defensieve laag toe.

Het resultaat van de beoordeling kan u informeren of het systeem op een vertrouwensniveau kan werken.

Bedankt voor het lezen van mijn blog! U bent nu aan het pad begonnen om uw MySQL-database te beveiligen.=)



  1. Hoe waarden in een tabel in te voegen met een externe sleutel met behulp van MySQL?

  2. Beste SQL Recovery Tool voor 2020 om cruciale SQL-database te herstellen

  3. Meest populaire databasebeheersystemen ter wereld

  4. SQLite kan databasebestand (code 14) niet openen bij frequente SELECT-query