sql >> Databáze >  >> RDS >> Mysql

Jak se ujistit, že je vaše databáze MySQL zabezpečená

Několik základních informací, než začneme:

Zdroj:Oracle MySQL Community Server 5.7

společnosti Center for Internet Security (CIS).

Operační systém: Windows 10

Kde provést: příkazový řádek

mysql -u USERNAME -p

Cílová aplikace: Oracle MySQL Community Server 5.7

Audit a protokolování pro informační systémy

Protokoly hrají klíčovou roli pro bezpečnost, když existuje podezření na kybernetický útok. Ruční kontrola protokolů je pro bezpečnostní personál náročná a musí používat nástroje pro kontrolu protokolů k získávání informací a jejich analýze. Protokoly by měly používat technologii ukládání a šifrování WORM (zapis jednou přečteno), aby se zabránilo poškození a ztrátě dat protokolu. Protokoly by také měly mít standardizovaný formát pro snadnou údržbu, přístup a srovnání.

Ujistěte se, že „log_error“ není prázdné

příkaz:

SHOW variables LIKE ‘log_error’;

Protokoly chyb obsahují data o událostech při spuštění nebo zastavení mysqld. Také ukazuje, kdy je potřeba stůl posoudit nebo opravit. Musí generovat „hodnotu“. Důvodem pro povolení protokolování chyb je, že pomáhá zvýšit schopnost detekovat škodlivé pokusy proti MySQL a dalším důležitým zprávám.

Zajistěte, aby soubory protokolu byly uloženy na nesystémovém oddílu

příkaz:

SELECT @@global.log_bin_basename;

Log soubory MySQL lze uložit kdekoli v souborovém systému a nastavit pomocí konfigurace MySQL. Nejlepším postupem je také zajistit, aby protokoly v souborovém systému nebyly přeplněné jinými protokoly, jako jsou protokoly aplikací. Musíte zajistit, aby vrácená hodnota neoznačovala, že je v kořenovém adresáři „(‘/‘)“, „/var“ nebo „/usr“. Důvodem je to, že rozdělení na oddíly sníží pravděpodobnost odmítnutí služby, pokud se vyčerpá dostupné místo na disku pro operační systém.

Ujistěte se, že „log_error_verbosity“ není nastaveno na „1“

příkaz:

SHOW GLOBAL VARIABLES LIKE ‘log_error_verbosity’;

Tato kontrola poskytuje další informace o tom, jaké funkce má nebo povolil protokol MySQL pro chybové zprávy. Hodnota 1 umožňuje protokolování chybových zpráv. Hodnota 2 umožňuje protokolování chybových i varovných zpráv. Hodnota 3 umožňuje protokolování chybových, varovných a poznámkových zpráv. To pomáhá odhalit škodlivé chování protokolováním komunikačních chyb a přerušených připojení.

Ujistěte se, že je povoleno protokolování auditu

Povolení protokolování auditu je zásadní pro produkční prostředí pro interaktivní uživatelské relace a relace aplikací. Díky protokolování auditu pomáhá identifikovat, kdo co změnil a kdy. Může také pomoci identifikovat, co útočník udělal, a může být dokonce použit jako důkaz při vyšetřování.

příkaz:

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

příkaz:

SET GLOBAL general_log = ‘ON’ ;

příkaz: VYTVOŘIT UŽIVATELE ‘user1’@’localhost’ IDENTIFIKOVANÉHO HESLEM ‘ne příliš tajné’;

Cestu k protokolu ve Windows 10 lze najít pomocí aplikace Služby, kde se podíváte, zda běží MySQL, a klikněte pravým tlačítkem na vlastnosti.

Přihlášení do systému autora bylo umístěno v:C:\ProgramData\MySQL\MySQL Server 5.7\Data\DJ-JASON-CLARK.log

Ověření pro informační systém

Autentizace zajišťuje, že pověření poskytnutá uživatelem nebo strojem jsou shodná s databází oprávněných uživatelů v místním operačním systému nebo na ověřovacím serveru. Po autentizaci pak následuje autorizace, kterou uživatelům nebo strojům uděluje administrátor. Autentizace, která se běžně používá v soukromých i veřejných sítích, je autentizace založená na hesle.

Zajistěte, aby hesla nebyla uložena v globální konfiguraci

Sekce [client] konfiguračního souboru MySQL umožňuje vytvoření uživatele a nastavení hesla. Kontrola je důležitá, protože povolení uživatele a hesla v konfiguračním souboru má negativní dopad na důvěrnost hesla uživatele.

Pro audit otevřete konfigurační soubor MySQL a prozkoumejte sekci [client] — nesmí mít uloženo žádné heslo. V systému autora nebylo nastaveno žádné heslo (viz obrázek níže). Pokud bylo v konfiguračním souboru nastaveno heslo, použijte mysql_config_editor k uložení hesel v zašifrované podobě do .mylogin.cnf.

Ujistěte se, že „sql_mode“ obsahuje „NO_AUTO_CREATE_USER“

„no_auto_create_user“ je možnost, jak zabránit automatickému vytvoření uživatele, když nejsou poskytnuty ověřovací informace.

příkaz:

SELECT @@global.sql_mode;

příkaz:

SELECT @@session.sql_mode;

Ujistěte se, že jsou hesla nastavena pro všechny účty MySQL

Uživatel si může vytvořit prázdné heslo. Mít prázdné heslo je riskantní, protože kdokoli může pouze převzít identitu uživatele, zadat přihlašovací jméno uživatele a připojit se k serveru. Tím se obejde ověřování, což je špatné.

příkaz:

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

Zajistěte, aby hodnota ‘default_password_lifetime’ byla menší nebo rovna ‘90’

Změna životnosti hesla na 90 dní zkracuje dobu, kterou má útočník k dispozici na prolomení hesla, a tím snižuje pravděpodobnost napadení.

příkaz:

SHOW VARIABLES LIKE ‘default_password_lifetime’;

příkaz:

SET GLOBAL default_password_lifetime=90;

Zajistěte, aby byla správná složitost hesla

Složitost hesel zvyšuje bezpečnost autentizace a zahrnuje přidávání nebo zvyšování délky, malých a velkých písmen, čísel a speciálních znaků. Čím je heslo složitější, tím je pro útočníky těžší použít k získání hesla hrubou sílu. Slabá hesla lze snadno získat ve slovníku hesel.

příkaz:

SHOW VARIABLES LIKE ‘validate_password%’;

Ujistěte se, že žádní uživatelé nemají zástupné názvy hostitelů

Uživatelé se zástupnými názvy hostitelů (%) mají oprávnění k libovolnému umístění. Nejlepší je vyhnout se vytváření zástupných názvů hostitelů. Místo toho vytvořte uživatele a dejte jim konkrétní umístění, ze kterých se daný uživatel může připojit k databázi a pracovat s ní.

příkaz:

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

Ujistěte se, že neexistují žádné anonymní účty

Uživatelé mohou mít anonymní (prázdné nebo prázdné) uživatelské jméno. Tato anonymní uživatelská jména nemají žádná hesla a jakýkoli jiný uživatel může toto anonymní uživatelské jméno použít pro připojení k serveru MySQL. Odstranění těchto anonymních účtů zajistí, že k serveru MySQL budou mít přístup pouze identifikovaní a důvěryhodní uživatelé.

příkaz:

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

Síťové připojení k serveru MySQL

Síťové připojení hraje důležitou roli pro komunikaci mezi uživatelem a MySQL serverem. Nezabezpečená síťová připojení jsou velmi zranitelná vůči útokům. Následují kontroly zabezpečení síťového připojení.

Ujistěte se, že ‘have_ssl’ je nastaveno na ‘ANO’

Aby se do vašeho systému nedostali zákeřní útočníci, je nejlepší používat SLL/TLS pro veškerý síťový provoz, když používáte nedůvěryhodné sítě.

příkaz:

WHERE variable_name = ‘have_ssl’;

Ujistěte se, že 'ssl_type' je nastaveno na 'ANY', 'X509', nebo 'SPECIFIED' pro všechny vzdálené uživatele

SSL/TLS by měl být nakonfigurován pro každého uživatele. To dále zabraňuje odposlouchávání škodlivých útočníků.

příkaz:

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

Replikace

Kontrola stavu replikace vám umožňuje sledovat výkon a zranitelnosti zabezpečení. Microsoft SQL Server Management Studio má následující nástroje pro sledování replikace:

  1. zobrazit stav agenta snímku,
  2. zobrazit stav agenta pro čtení protokolů a
  3. zobrazit stav synchronizace.

Zajistěte, aby byl replikační provoz zabezpečen

Replikace komunikace mezi servery musí být zabezpečena. Během replikačních přenosů může dojít k úniku hesel.

Chcete-li provést audit, zkontrolujte, zda používají:soukromou síť, VPN, SSL/TLS nebo SSH tunel. Doufejme, že autorův systém používá privátní síť. Opravte, pokud je to jinak, a zabezpečte pomocí privátní sítě, VPN, SSL/TLS nebo SSH tunelu.

Ujistěte se, že „MASTER_SSL_VERIFY_SERVER_CERT“ je nastaveno na „ANO“ nebo „1“

„MASTER_SSL_VERIFY_SERVER_CERT“ zkontroluje, zda má replika ověřit primární certifikát nebo ne. Replika by měla před pokračováním v připojení ověřit primární certifikát k ověření primárního certifikátu.

příkaz:

SELECT ssl_verify_server_cert FROM mysql.slave_master_info;

Ujistěte se, že „master_info_repository“ je nastaveno na „TABLE“

'master_info_repository' určuje, kam replika zaznamenává primární stav a informace o připojení. Heslo je uloženo v primárním úložišti informací, což je soubor ve formátu prostého textu. Uložení hesla do TABLE master_info je bezpečnější.

příkaz:

SHOW GLOBAL VARIABLES LIKE ‘master_info_repository’;

Ujistěte se, že atribut „super_priv“ není pro uživatele replikace nastaven na hodnotu „Y“

Oprávnění „SUPER“ („super_priv“) umístěné v tabulce „mysql.user“ má funkce jako „CHANGE“, „MASTER TO“, „KILL“, „mysqladmin kill“, „PURGE BINARY LOGS“, „SET GLOBAL“, „debug mysqladmin“ a další ovládací prvky protokolování. Udělení oprávnění „SUPER“ uživateli umožňuje zobrazit a ukončit aktuálně prováděné příkazy SQL, a to i pro správu hesel. Pokud útočník zneužije a získá oprávnění „SUPER“, může deaktivovat, změnit nebo zničit protokolovaná data.

příkaz:

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

Zajistěte, aby žádní uživatelé replikace neměli zástupné názvy hostitelů

MySQL umožňuje udělovat oprávnění zástupným názvům hostitelů. Je třeba se vyhnout názvům hostitelů se zástupnými znaky a měli byste vytvářet nebo upravovat uživatele a přidělovat jim konkrétní umístění, ze kterých se daný uživatel může připojit k databázi a pracovat s ní.

Závěr

Následující kontroly jsou prováděny pro jediné pracovní prostředí využívající MySQL jako informační systém na straně aplikace i na straně uživatele.

Hodnocení je nezbytné pro kontrolu standardního protokolování MySQL a povolení dalších funkcí protokolování (umožňuje také kontrolu zranitelností autentizace). Kontroly sítě jsou důležité, aby zabránily ostatním uživatelům se zlými úmysly nahlédnout do vaší sítě. K šifrování vždy implementujte SSL/TLS. Je nutné zajistit jednosměrný přenos. Zabezpečení replikačního provozu přidává obrannou vrstvu.

Výsledek posouzení vás může informovat, zda je systém schopen fungovat na úrovni důvěry.

Děkuji, že čtete můj blog! Nyní jste zahájili cestu k zabezpečení vaší databáze MySQL.=)



  1. Příklady JSON_MODIFY() v SQL Server (T-SQL)

  2. Chování GROUP BY, když v klauzuli SELECT nejsou přítomny žádné agregační funkce

  3. Minimální protokolování s INSERT…SELECT a Fast Load Context

  4. Hvězdné schéma vs. schéma sněhové vločky