MySQL je jedným z najpopulárnejších systémov na správu relačných databáz, ktorý predstavuje jackpot pre útočníkov, ktorí sa snažia preniknúť do databáz. Novo nainštalovaný databázový server MySQL môže mať veľa slabín a medzier. Keďže bezpečnosť údajov je veľmi dôležitá, je nevyhnutné pochopiť každý aspekt zabezpečenia MySQL.

Tento článok sa zameriava na auditovanie a zabezpečenie vašej databázy MySQL a poskytuje deväť tipov na posilnenie jej zabezpečenia.

1. Vyhnite sa zbytočným privilégiám

MySQL umožňuje niekoľko príkazov privilégií, ktoré, ak sú zbytočne pridelené neprivilegovanému používateľovi, môžu viesť k čítaniu/zápisu súborov a podkopávaniu privilégií iných používateľov. Niektoré z potenciálne najrizikovejších príkazov privilégií sú FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN atď. Viac si o nich môžete prečítať v oficiálnej dokumentácii MySQL. Nepriraďujte preto privilégiá superužívateľov ako FILE, GRANT, SUPER a PROCESS k neadministrátorským účtom. Tieto nepotrebné globálne povolenia, povolenia na úrovni databázy a tabuľky môžete zrušiť takto:

instagram viewer
REVOKE ALL ON *.* FROM 'user_name'@'host_name'; #Globálne privilégiá
ZRUŠIŤ VYTVORENIE, ODLOŽIŤ názov_databázy.* Z 'používateľské_meno'@'názov_hostiteľa'; #Oprávnenia k databáze
REVOKE INSERT, UPDATE, DELETE ON database_name.table_name FROM 'user_name'@'host_name'; #Privilégiá tabuľky
flush privilégiá;

2. Obmedziť vzdialené prihlásenia

Vzdialený prístup uľahčuje prácu administrátorom databáz, ale ohrozuje server potenciálnymi zraniteľnosťami a zneužitím. Vzdialený prístup pre všetky typy používateľských účtov MySQl môžete zakázať pridaním premennej skip-networking do hlavného konfiguračného súboru a reštartovaním služby.

[mysqld]
skip-networking
reštart služby sudo mysql

Podobne musíte zakázať prístup k účtu root, ak nie všetky, aby ste obmedzili vzdialené prihlásenia účtu root. Toto opatrenie zabraňuje hrubému vynúteniu koreňového účtu MySQL.

mysql> delete from mysql.user kde user='root' a host nie je v ('localhost', '127.0.0.1', '::1'); mysql> flush privilégiá; 

3. Zakázať funkcie (load_file, outfile, dumpfile)

Ďalším opatrením na zabezpečenie MySQL pred lokálnym vkladaním súborov je deaktivácia funkcií prístupných iba prostredníctvom privilégia FILE grant. FILE je voľba, ktorá umožňuje používateľom s nízkymi právami s globálnymi možnosťami príkazov čítať alebo zapisovať súbory na server.

  • načítať_súbor

Funkcia load_file načíta obsah súboru zo servera ako reťazec. Napríklad nasledujúci príkaz načíta všetok obsah z /etc/passwd súbor takto:

select load_file('/etc/passwd')
  • výstupný súbor

Podobne funkcia outfile zapisuje obsah do súborov lokálneho servera. Útočníci môžu pomocou tejto funkcie zapísať užitočné zaťaženie do súboru na serveri takto:

vyberte 'Local File SQL Injection' do výstupného súboru '/tmp/file.txt';
cat /tmp/file.txt

Výkon:

Lokálny súbor SQL Injection
  • dumpfile

Táto funkcia používa výber príčiny na zápis do súboru bez návratu výstupu na obrazovku.

cat /tmp/file.txt
vyberte „Ahoj svet!“ do dumpfile '/tmp/world';

Výkon:

Dopyt je v poriadku, ovplyvnený 1 riadok (0,001 s)

Tieto funkcie môžete zakázať zrušením privilégia FILE takto:

odvolať FILE na *.* z 'user_name'@'localhost';

Súvisiace: Sprievodca pre začiatočníkov po Metasploit v Kali Linuxe (s praktickými príkladmi)

4. Zakázať predvolený port

Vieme, že služby MySQL bežia na porte 3306 a útočníci skenujú porty, aby skontrolovali služby bežiace v sieti. Ak chcete pridať zabezpečenie nejasnosťou a zmeniť predvolený port MySQL úpravou systémovej premennej portu v jej hlavnom konfiguračnom súbore, budete musieť zadať nasledovné:

vim /etc/mysql/my.cnf
port=XXXX
reštart služby sudo mysql

5. Vyhnite sa zástupným znakom v názvoch účtov

Názvy účtov v MySQL sa skladajú z dvoch častí, ktorými sú používateľ a názov hostiteľa "user_name"@"host_name". Umožňuje správcovi vytvárať účty pre používateľov s rovnakým menom, ktorí sa pripájajú z rôznych hostiteľov. Hostiteľská časť názvu účtu však povoľuje konvencie zástupných znakov, ktoré môžu byť bodom prístupu k databáze odkiaľkoľvek.

Voliteľné použitie hodnoty názvu hostiteľa alebo adresy IP je ekvivalentné 'názov_používateľa'@'%', kde % zodpovedá operácii LIKE so vzorom MySQL a % znamená ľubovoľný názov hostiteľa. Medzitým prístup z '192.168.132.%' znamená akýkoľvek pokus zo siete triedy C. Okrem toho, ktokoľvek môže pristupovať k databáze pomenovaním hostiteľskej časti ako „192.18.132.mysql.com“.

Aby sa predišlo takýmto pokusom, MySQL umožňuje definovať sieťovú masku s hodnotou hostiteľa na identifikáciu sieťových bitov IP adresy:

client-ip_add & netmask = názov_hostiteľa

Syntax na vytvorenie názvu hostiteľa je host_ip/netmask:

VYTVORIŤ POUŽÍVATEĽA 'jhon'@'192.168.132.0/255.255.255.0'; 

Vyššie uvedená hodnota hostiteľa umožňuje užívateľovi John na prístup k databáze z akejkoľvek IP adresy v rozsahu 192.168.132.0-192.168.132.255. Podobne hodnoty hostiteľa 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 povolia hostiteľov zo sietí triedy A a B. Zatiaľ čo 192.168.132.5 umožní prístup iba z konkrétnej IP.

6. Zakázať explicitný prístup

Používateľské meno v MySQL je buď meno, s ktorým databázy prijímajú prichádzajúce pripojenia, alebo prázdne používateľské meno "@"host_name", ktoré vytvára anonymného používateľa. Prítomnosť anonymného používateľa však môže využiť útočníkov na prístup k databázovému serveru. Okrem toho verzie MySQL pred MySQL 5.7 vytvárajú anonymnú skupinu používateľov a inštalácia po aktualizácii verzie stále pridáva týchto používateľov.

vyberte používateľa, hostiteľa, heslo z mysql.user, kde používateľ ako '';

Môžete si všimnúť, že stĺpce používateľa a hesla sú prázdne a prístup je obmedzený na localhost. Nechcete však, aby sa niekto dostal do databázy. Na odstránenie anonymných používateľov použite nasledujúci príkaz:

zahodiť používateľa " "@"localhost"
flush privilégiá;

7. Nastavte iný ako root účet ako vlastníka alebo skupinu

Nastavenie užívateľského účtu iného ako root nesúvisí s užívateľom root MySQL. Inštalácia MySQL v systémoch Linux/Unix z balíčkov tar a tar.gz umožňuje, aby server spustil akýkoľvek neprivilegovaný používateľ. Toto je bezpečnostná nevýhoda, pretože každý používateľ s možnosťou udelenia FILE môže upravovať alebo vytvárať súbory na serveri. Vracia však chybu, keď sa k nej používateľ pokúsi pristupovať bez -user=root chyba.

Tomuto sa môžete vyhnúť precvičovaním palcového pravidla prístupu k databázovému serveru ako samostatného užívateľa Linuxu. Ak chcete spustiť mysqld ako bežný používateľ Linuxu, zastavte server a zmeňte ho oprávnenia na čítanie/zápis servera MySQl na mysql, a to takto:

chown -R mysql /cesta/k/mysql/datadir

Otvorte hlavný konfiguračný súbor MySQL, pridajte nového používateľa mysql a reštartujte službu, aby ste predišli nevyžiadanému prístupu na server:

vim /etc/mysql/my.cnf
user=mysql
reštart služby sudo mysql

8. Nastavte heslo pre koreňový účet

Inštalácia MySQL cez interaktívny shell v linuxových distribúciách založených na Debiane vytvorí užívateľský účet root a požiada vás o nastavenie hesla. To sa však nestáva v neinteraktívnych shellových inštaláciách a distribúciách založených na Red-Hat. Ako je uvedené vyššie, používateľ počítača so systémom Linux bez oprávnenia root môže pristupovať k používateľskému účtu root mysql pomocou -user=root možnosť. Môžete tomu zabrániť nastavením hesla takto:

heslo sudo mysqladmin
vim /etc/mysql/my.cnf
heslo =
reštart služby sudo mysql

9. Zabezpečte šifrovanie údajov počas prenosu a odpočinku

Predvolená nešifrovaná komunikácia medzi klientom a serverom predstavuje riziko zachytenia údajov ľubovoľným mužom v strede. Podobne nešifrované používateľské údaje v databáze ohrozujú dôvernosť a integritu používateľa. MySQL podporuje šifrovanie dát medzi klientom a serverom cez protokol TLS/SSL, zatiaľ čo nešifrovaná komunikácia je prijateľná len vtedy, keď sú obe komunikujúce strany v rovnakej sieti.

MySQL teraz podporuje šifrovanie v pokoji na ochranu údajov uložených na serveri, aj keď je systém narušený.

Pokročilé zabezpečenie MySQL: Chráňte sa

Zabezpečenie najvyššej úrovne online bezpečnosti je rozhodujúce a tento článok vám poskytne niekoľko užitočných rád správnym smerom. Vyššie uvedené kroky sú užitočné na zabezpečenie vášho databázového servera, ale je tiež nevyhnutné naučiť sa prideľovať minimálne oprávnenia používateľom bez správcu.

Príručka pre začiatočníkov k písaniu schém databázy mySQL

Vytvorte si vlastnú databázu mySQL iba pomocou textového editora a tohto základného náčrtu štruktúry alebo „schémy“.

Prečítajte si ďalej

zdieľamTweetujteEmail
Súvisiace témy
  • Programovanie
  • Bezpečnosť
  • Programovanie
  • Bezpečnostné tipy
  • Bezpečnosť
O autorovi
Rumaisa Niazi (15 publikovaných článkov)

Rumaisa je spisovateľkou na voľnej nohe v MUO. Nosila veľa klobúkov, od matematičky až po nadšenca informačnej bezpečnosti, a teraz pracuje ako analytička SOC. Medzi jej záujmy patrí čítanie a písanie o nových technológiách, distribúciách Linuxu a všetkom okolo informačnej bezpečnosti.

Viac od Rumaisa Niaziho

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné e-knihy a exkluzívne ponuky!

Ak sa chcete prihlásiť na odber, kliknite sem