MySQL je jeden z nejpopulárnějších systémů pro správu relačních databází, který je jackpotem pro útočníky, kteří se snaží proniknout do databází. Nově nainstalovaný databázový server MySQL může mít mnoho zranitelností a mezer. Vzhledem k tomu, že zabezpečení dat je velmi důležité, je nutné porozumět všem aspektům zabezpečení MySQL.
Tento článek se zaměřuje na auditování a zabezpečení vaší databáze MySQL a poskytuje devět tipů, jak posílit její zabezpečení.
1. Vyhněte se zbytečným udělováním privilegií
MySQL umožňuje několik příkazů oprávnění, které, pokud jsou zbytečně přiřazeny neprivilegovanému uživateli, mohou vést ke čtení/zápisu souborů a podvracení dalších uživatelských oprávnění. Některé z potenciálně nejrizikovějších příkazů oprávnění jsou FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN a tak dále. Více si o nich můžete přečíst v oficiální dokumentaci MySQL. Nepřidělujte proto oprávnění superuživatele jako FILE, GRANT, SUPER a PROCESS neadministrativním účtům. Tato nepotřebná globální oprávnění, oprávnění na úrovni databáze a tabulky můžete zrušit následovně:
REVOKE ALL ON *.* FROM 'user_name'@'host_name'; #Globální privilegia
REVOKE CREATE, DROP ON database_name.* FROM 'user_name'@'host_name'; #Oprávnění k databázi
REVOKE INSERT, UPDATE, DELETE ON database_name.table_name FROM 'user_name'@'host_name'; #Oprávnění ke stolu
splachovací oprávnění;
2. Omezit vzdálené přihlášení
Vzdálený přístup usnadňuje práci správcům databází, ale ohrožuje server potenciálními zranitelnostmi a zneužitím. Vzdálený přístup pro všechny typy uživatelských účtů MySQl můžete zakázat přidáním proměnné skip-networking do hlavního konfiguračního souboru a restartováním služby.
[mysqld]
skip-networking
restart služby sudo mysql
Podobně musíte zakázat přístup k účtu root, pokud ne všechny, abyste omezili vzdálená přihlášení k účtu root. Toto opatření zabraňuje hrubému vynucení kořenového účtu MySQL.
mysql> delete from mysql.user kde user='root' a hostitel není v ('localhost', '127.0.0.1', '::1'); mysql> flush oprávnění;
3. Zakázat funkce (load_file, outfile, dumpfile)
Dalším opatřením k zabezpečení MySQL proti vkládání lokálních souborů je deaktivace funkcí přístupných pouze prostřednictvím oprávnění FILE grant. FILE je volba, která umožňuje uživatelům s nízkými oprávněními s globálními volbami příkazů číst nebo zapisovat soubory na serveru.
- načíst_soubor
Funkce load_file načte obsah souboru ze serveru jako řetězec. Například následující příkaz načte veškerý obsah z /etc/passwd soubor takto:
select load_file('/etc/passwd')
- výstupní soubor
Podobně funkce outfile zapisuje obsah do souborů místního serveru. Útočníci mohou tuto funkci použít k zápisu užitečného zatížení do souboru na serveru, a to následovně:
vyberte 'Local File SQL Injection' do výstupního souboru '/tmp/file.txt';
cat /tmp/file.txt
Výstup:
Místní soubor SQL Injection
- dumpfile
Tato funkce používá výběr příčiny k zápisu do souboru bez návratu výstupu na obrazovku.
cat /tmp/file.txt
vyberte 'Ahoj světe!' do dumpfile '/tmp/world';
Výstup:
Dotaz je v pořádku, ovlivněn 1 řádek (0,001 s)
Tyto funkce můžete zakázat odebráním oprávnění FILE takto:
revoke FILE on *.* from 'user_name'@'localhost';
Příbuzný: Průvodce pro začátečníky Metasploit v Kali Linuxu (s praktickými příklady)
4. Zakázat výchozí port
Víme, že služby MySQL běží na portu 3306 a útočníci skenují porty, aby zkontrolovali služby běžící v síti. Chcete-li přidat zabezpečení pomocí nejasností a změnit výchozí port MySQL úpravou systémové proměnné portu v jejím hlavním konfiguračním souboru, budete muset zadat následující:
vim /etc/mysql/my.cnf
port=XXXX
restart služby sudo mysql
5. Vyhněte se zástupným znakům v názvech účtů
Názvy účtů v MySQL se skládají ze dvou částí, kterými jsou uživatel a název hostitele "user_name"@"host_name". Umožňuje správci vytvářet účty pro uživatele se stejným jménem, kteří se připojují z různých hostitelů. Hostitelská část názvu účtu však povoluje konvence zástupných znaků, které mohou být bodem přístupu k databázi odkudkoli.
Volitelné použití hodnoty názvu hostitele nebo adresy IP je ekvivalentní 'uživatelské_jméno'@'%', kde % odpovídá operaci LIKE se vzorem MySQL a % znamená jakýkoli název hostitele. Mezitím přístup z '192.168.132.%' znamená jakýkoli pokus ze sítě třídy C. Kromě toho může kdokoli přistupovat k databázi pojmenováním hostitelské části jako „192.18.132.mysql.com“.
Aby se předešlo takovým pokusům, MySQL umožňuje definovat síťovou masku s hodnotou hostitele pro identifikaci síťových bitů IP adresy:
client-ip_add & netmask = název_hostitele
Syntaxe pro vytvoření názvu hostitele je host_ip/netmask:
CREATE USER 'jhon'@'192.168.132.0/255.255.255.0';
Výše uvedená hodnota hostitele umožňuje uživateli John pro přístup k databázi z libovolné IP adresy v rozsahu 192.168.132.0-192.168.132.255. Podobně hodnoty hostitele 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 umožní hostitelům ze sítí třídy A a B. Zatímco 192.168.132.5 umožní přístup pouze z konkrétní IP.
6. Zakázat Explicitní přístup
Uživatelské jméno v MySQL je buď jméno, se kterým databáze přijímají příchozí spojení, nebo prázdné uživatelské jméno "@"host_name", které vytváří anonymního uživatele. Přítomnost anonymního uživatele však může využít útočníky k přístupu k databázovému serveru. Kromě toho verze MySQL před MySQL 5.7 vytvářejí anonymní sadu uživatelů a instalace po aktualizaci verze tyto uživatele stále přidává.
vyberte uživatele, hostitele, heslo z mysql.user, kde uživatel jako '';
Můžete si všimnout, že sloupce uživatele a hesla jsou prázdné a přístup je omezen na localhost. Nechcete však, aby kdokoli přistupoval k databázi. Chcete-li odstranit anonymní uživatele, použijte následující příkaz:
zahodit uživatele " "@"localhost"
splachovací oprávnění;
7. Nastavte jiný než root účet jako vlastníka nebo skupinu
Nastavení účtu uživatele bez oprávnění root nesouvisí s uživatelem root MySQL. Instalace MySQL v systémech Linux/Unix z balíčků tar a tar.gz umožňuje, aby server běžel jakémukoli neprivilegovanému uživateli. Toto je bezpečnostní nevýhoda, protože každý uživatel s možností udělení FILE může upravovat nebo vytvářet soubory na serveru. Vrátí však chybu, když se k ní uživatel pokusí přistupovat bez -user=root chyba.
Tomu se můžete vyhnout tím, že budete praktikovat základní pravidlo přístupu k databázovému serveru jako samostatný uživatel Linuxu. Chcete-li spustit mysqld jako běžný uživatel Linuxu, zastavte server a změňte jej oprávnění ke čtení/zápisu serveru MySQl na mysql, a to následovně:
chown -R mysql /cesta/k/mysql/datadir
Otevřete hlavní konfigurační soubor MySQL, přidejte nového uživatele mysql a restartujte službu, abyste se vyhnuli nevyžádanému přístupu k serveru:
vim /etc/mysql/my.cnf
uživatel=mysql
restart služby sudo mysql
8. Nastavte heslo pro účet root
Instalace MySQL pomocí interaktivního shellu v distribucích Linuxu založených na Debianu vytvoří uživatelský účet root a požádá vás o nastavení hesla. To se však nestane v neinteraktivní shellové instalaci a distribucích založených na Red-Hat. Jak je uvedeno výše, uživatel počítače se systémem Linux bez oprávnění root může získat přístup k uživatelskému účtu root mysql pomocí -user=root volba. Tomu se můžete vyhnout nastavením hesla následovně:
heslo sudo mysqladmin
vim /etc/mysql/my.cnf
heslo=
restart služby sudo mysql
9. Zajistěte šifrování dat při přenosu a v klidu
Výchozí nešifrovaná komunikace mezi klientem a serverem představuje riziko zachycení dat libovolným mužem-in-the-middle. Podobně nešifrovaná uživatelská data v databázi ohrožují důvěrnost a integritu uživatele. MySQL podporuje šifrování dat mezi klientem a serverem přes protokol TLS/SSL, zatímco nešifrovaná komunikace je přijatelná pouze v případě, že jsou obě komunikující strany ve stejné síti.
MySQL nyní podporuje šifrování v klidu pro ochranu dat uložených na serveru, i když je systém narušen.
Pokročilé zabezpečení MySQL: Chraňte se
Zajištění nejvyšší úrovně online zabezpečení je zásadní a tento článek vám poskytne několik užitečných rad správným směrem. Výše uvedené kroky jsou užitečné pro zabezpečení databázového serveru, ale je také nezbytné naučit se přidělovat minimální oprávnění uživatelům bez oprávnění správce.
Vytvořte si vlastní databázi mySQL pouze pomocí textového editoru a tohoto základního obrysu struktury neboli „schéma“.
Přečtěte si další
- Programování
- Bezpečnostní
- Programování
- Bezpečnostní tipy
- Bezpečnostní
Rumaisa je spisovatelkou na volné noze v MUO. Nosila mnoho klobouků, od matematičky po nadšence pro informační bezpečnost, a nyní pracuje jako analytička SOC. Mezi její zájmy patří čtení a psaní o nových technologiích, linuxových distribucích a všem kolem Information Security.
Přihlaste se k odběru našeho newsletteru
Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné e-knihy a exkluzivní nabídky!
Chcete-li se přihlásit k odběru, klikněte sem