Nogle grundlæggende oplysninger, før vi går i gang:
Kilde:Center for Internet Security's (CIS) Oracle MySQL Community Server 5.7
Operativsystem: Windows 10
Hvor skal udføres: kommandolinje
mysql -u USERNAME -p
Målapplikation: Oracle MySQL Community Server 5.7
Revision og logning for informationssystemer
Logs spiller en afgørende rolle for sikkerheden, når der er mistanke om et cyberangreb. En manuel gennemgang af logfiler er omhyggelig for sikkerhedspersonale, og de skal bruge loggennemgangsværktøjer til at udtrække information og analysere den. Logfiler bør bruge en WORM (write once read many) lagringsteknologi og kryptering for at undgå korruption og tab af logdata. Logfiler bør også have et standardiseret format for nem vedligeholdelse, adgang og sammenligning.
Sørg for, at "log_error" ikke er tom
kommando:
SHOW variables LIKE ‘log_error’;
Fejllogs indeholder data om hændelser, når mysqld starter eller stopper. Det viser også, hvornår et bord skal vurderes eller repareres. Det skal generere en "værdi". Grunden til at aktivere fejllogning er, at det hjælper med at øge evnen til at opdage ondsindede forsøg mod MySQL og andre vitale beskeder.
Sørg for, at logfiler er gemt på en ikke-systempartition
kommando:
SELECT @@global.log_bin_basename;
Logfiler af MySQL kan gemmes hvor som helst i filsystemet og indstilles ved hjælp af MySQL-konfigurationen. Det er også en bedste praksis at sikre, at logfilerne i filsystemet ikke er rodet med andre logfiler, såsom applikationslogfiler. Du skal sikre dig, at den returnerede værdi ikke angiver, at den er i roden "('/')", "/var" eller "/usr". Årsagen til dette er, at partitionering vil mindske sandsynligheden for lammelsesangreb, hvis den tilgængelige diskplads til operativsystemet er opbrugt.
Sørg for, at "log_error_verbosity" ikke er sat til "1"
kommando:
SHOW GLOBAL VARIABLES LIKE ‘log_error_verbosity’;
Dette tjek giver yderligere information til hvilke funktioner MySQL-loggen har eller har aktiveret på fejlmeddelelser. En værdi på 1 muliggør logning af fejlmeddelelser. En værdi på 2 muliggør både logning af fejl- og advarselsmeddelelser. En værdi på 3 muliggør logning af fejl-, advarsels- og notemeddelelser. Dette hjælper med at opdage ondsindet adfærd ved at logge kommunikationsfejl og afbrudte forbindelser.
Sørg for, at revisionslogning er aktiveret
Aktivering af revisionslogning er afgørende for produktionsmiljøet for interaktive brugersessioner og applikationssessioner. Med revisionslogning hjælper det med at identificere, hvem der har ændret hvad og hvornår. Det kan også hjælpe med at identificere, hvad en angriber har gjort og kan endda bruges som bevis i efterforskning.
kommando:
SELECT NAME FROM performance_schema.setup_instruments WHERE NAME LIKE ‘%/alog/%’;
kommando:
SET GLOBAL general_log = ‘ON’ ;
kommando: OPRET BRUGER 'user1'@'localhost' IDENTIFICERET MED ADGANGSKODE 'ikke-så-hemmeligt';
Logstien i Windows 10 kan findes ved at bruge Services-applikationen, se om MySQL kører, og højreklikke på egenskaber.
Loggen i forfatterens system var placeret i:C:\ProgramData\MySQL\MySQL Server 5.7\Data\DJ-JASON-CLARK.log
Godkendelse for informationssystem
Godkendelse sørger for, at legitimationsoplysningerne fra brugeren eller maskinen matches med databasen over autoriserede brugere i et lokalt operativsystem eller i en godkendelsesserver. Godkendelse efterfølges derefter af autorisation, som gives af en administrator til brugere eller maskiner. En godkendelse, der almindeligvis bruges i både private og offentlige netværk, er adgangskodebaseret godkendelse.
Sørg for, at adgangskoder ikke er gemt i den globale konfiguration
[klient]-sektionen af en MySQL-konfigurationsfil tillader oprettelse af en bruger og adgangskode. Kontrollen er vigtig, fordi det at tillade en bruger og adgangskode i konfigurationsfilen påvirker fortroligheden af brugerens adgangskode negativt.
For at revidere skal du åbne MySQL-konfigurationsfilen og undersøge [klient]-sektionen - den må ikke have nogen adgangskode gemt. Der blev ikke angivet en adgangskode i forfatterens system (se figuren nedenfor). Hvis en adgangskode blev angivet i konfigurationsfilen, skal du bruge mysql_config_editor til at gemme adgangskoder i den krypterede form i .mylogin.cnf.
Sørg for, at 'sql_mode' indeholder 'NO_AUTO_CREATE_USER'
"no_auto_create_user" er en mulighed for at forhindre automatisk oprettelse af bruger, når godkendelsesoplysninger ikke er angivet.
kommando:
SELECT @@global.sql_mode;
kommando:
SELECT @@session.sql_mode;
Sørg for, at adgangskoder er indstillet til alle MySQL-konti
En bruger kan oprette en tom adgangskode. Det er risikabelt at have en tom adgangskode, da enhver bare kan antage brugerens identitet, indtaste brugerens loginID og oprette forbindelse til serveren. Dette omgår godkendelse, hvilket er dårligt.
kommando:
SELECT User,host FROM mysql.user WHERE authentication_string=’’;
Sørg for, at 'default_password_lifetime' er mindre end eller lig med '90'
Ændring af adgangskodens levetid til 90 dage reducerer den tid, der er til rådighed for angriberen til at kompromittere adgangskoden og mindsker dermed sandsynligheden for at blive angrebet.
kommando:
SHOW VARIABLES LIKE ‘default_password_lifetime’;
kommando:
SET GLOBAL default_password_lifetime=90;
Sørg for, at adgangskodekompleksiteten er på plads
Adgangskodekompleksitet tilføjer sikkerhedsstyrke til godkendelser og inkluderer tilføjelse eller forøgelse af længde, store og små bogstaver, tal og specialtegn. Jo mere kompleks adgangskoden er, jo sværere er det for angribere at bruge brute force for at få adgangskoden. Svage adgangskoder fås nemt i en adgangskodeordbog.
kommando:
SHOW VARIABLES LIKE ‘validate_password%’;
Sørg for, at ingen brugere har wildcard-værtsnavne
Brugere med jokertegn-værtsnavne (%) får tilladelse til enhver placering. Det er bedst at undgå at oprette joker-værtsnavne. Opret i stedet brugere og giv dem specifikke lokationer, hvorfra en given bruger kan oprette forbindelse til og interagere med databasen.
kommando:
SELECT user, host FROM mysql.user WHERE host = ‘%’;
Sørg for, at der ikke findes anonyme konti
Brugere kan have et anonymt (tomt eller tomt) brugernavn. Disse anonyme brugernavne har ingen adgangskoder, og enhver anden bruger kan bruge det anonyme brugernavn til at oprette forbindelse til MySQL-serveren. Fjernelse af disse anonyme konti sikrer, at kun identificerede og betroede brugere kan få adgang til MySQL-serveren.
kommando:
SELECT user,host FROM mysql.user WHERE user = ‘’;
Netværksforbindelse til MySQL-server
Netværksforbindelsen spiller en vigtig rolle for kommunikationen mellem brugeren og MySQL-serveren. Usikre netværksforbindelser er meget sårbare over for angreb. Følgende er kontroller for netværksforbindelsessikkerhed.
Sørg for, at 'have_ssl' er indstillet til 'JA'
For at undgå, at ondsindede angribere kigger ind i dit system, er det bedst at bruge SLL/TLS til al netværkstrafik, når du bruger ikke-pålidelige netværk.
kommando:
WHERE variable_name = ‘have_ssl’;
Sørg for, at 'ssl_type' er indstillet til 'ANY', 'X509', eller 'SPECIFICERET' for alle fjernbrugere
SSL/TLS skal konfigureres pr. bruger. Dette forhindrer yderligere aflytning af ondsindede angribere.
kommando:
SELECT user, host, ssl_type FROM mysql.user WHERE NOT HOST IN (‘::1’, ‘127.0.0.1’, ‘localhost’);
Replikering
Ved at tjekke for replikeringsstatus kan du overvåge ydeevne og sikkerhedssårbarheder. Microsoft SQL Server Management Studio har følgende værktøjer til at overvåge replikering:
- se status for øjebliksbilledeagent,
- se loglæseragentstatus og
- se synkroniseringsstatus.
Sørg for, at replikeringstrafik er sikret
Replikering trafik mellem servere skal sikres. Under replikeringsoverførsler kan adgangskoder lække.
For at auditere skal du kontrollere, om de bruger:et privat netværk, en VPN, SSL/TLS eller en SSH-tunnel. Forhåbentlig bruger forfatterens system et privat netværk. Ret hvis andet, og sørg for at bruge det private netværk, en VPN, SSL/TLS eller en SSH-tunnel.
Sørg for, at 'MASTER_SSL_VERIFY_SERVER_CERT' er indstillet til 'YES' eller '1'
'MASTER_SSL_VERIFY_SERVER_CERT' kontrollerer, om replikaen skal verificere den primære certifikat eller ej. Replikaen skal bekræfte den primære certifikat for at godkende den primære, før forbindelsen fortsættes.
kommando:
SELECT ssl_verify_server_cert FROM mysql.slave_master_info;
Sørg for, at 'master_info_repository' er indstillet til 'TABLE'
'master_info_repository' bestemmer, hvor replikaen logger primærens status og forbindelsesoplysninger. Adgangskoden gemmes i det primære infolager, der er en almindelig tekstfil. Det er mere sikkert at gemme adgangskoden i TABLE master_info.
kommando:
SHOW GLOBAL VARIABLES LIKE ‘master_info_repository’;
Sørg for, at 'super_priv' ikke er sat til 'Y' for replikeringsbrugere
"SUPER" privilegium ('super_priv') placeret i "mysql.user" tabellen har funktioner som "CHANGE", "MASTER TO", "KILL", "mysqladmin kill", "PURGE BINARY LOGS", "SET GLOBAL", "mysqladmin debug" og andre logningskontroller. At give en bruger "SUPER"-privilegiet giver brugeren mulighed for at se og afslutte aktuelt eksekverende SQL-sætninger, selv for adgangskodeadministration. Hvis angriberen udnytter og opnår "SUPER"-privilegiet, kan de deaktivere, ændre eller ødelægge logdata.
kommando:
SELECT user, host FROM mysql.user WHERE user=’repl’ and Super_priv = ‘Y’;
Sørg for, at ingen replikeringsbrugere har wildcard-værtsnavne
MySQL giver dig mulighed for at give tilladelser til wildcard-værtsnavne. Wildcard-værtsnavne bør undgås, og du bør oprette eller ændre brugere og give dem specifikke lokationer, hvorfra en given bruger kan oprette forbindelse til og interagere med databasen.
Konklusion
Følgende kontroller udføres for et enkelt arbejdsmiljø, der bruger MySQL som informationssystem på både applikationssiden og brugersiden.
Vurderingen er bydende nødvendig for at kontrollere for standardlogning af MySQL og aktivere yderligere logningsfunktioner (det muliggør også kontrol for autentificeringssårbarheder). Netværkstjek er vigtigt for at forhindre andre brugere med ondsindet hensigt i at kigge ind på dit netværk. Implementer altid SSL/TLS for at kryptere. Det er nødvendigt at sikre envejsoverførsel. Sikring af replikeringstrafik tilføjer et defensivt lag.
Resultatet af vurderingen kan informere dig om, hvorvidt systemet er i stand til at fungere på et tillidsniveau.
Tak fordi du læser min blog! Du har nu startet vejen til at sikre din MySQL-database.=)