Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

Zejména začínající penetrační testeři kladou menší důraz na bezpečnost databází obecně. Aplikace bez konfigurace databáze a bezpečnostních testů nemůže být bezpečná. Možná již používáte software MySQL, systém správy databází, tak jak jej můžete zvýšit zabezpečení? Zde je sedm kroků, které musíte dodržet.

1. Místo vzdáleného připojení použijte tunelování SSH

Služba MySQL standardně běží na portu 3306. Když nainstalujete MySQL, uvidíte, že port 3306 je v režimu poslechu pro všechna připojení. V současné době je port MySQL otevřený vnějšímu světu. Proto byste měli nastavit službu MySQL tak, aby naslouchala pouze místní adrese.

Protože servery jsou obvykle provozovány na distribuci Linuxu, níže uvedené příklady jsou založeny na distribuci Debian. Soubor, který potřebujete použít pro tunelování SSH namísto vzdáleného připojení a pro uzavření výchozího portu pro vnější svět, je

/etc/mysql/my.cnf. V tomto souboru musíte otevřít pole s názvem [mysqld] a napište následující příkaz:

[mysqld]
svázat-adresa=127.0.0.1

Po tomto procesu nezapomeňte tento soubor uložit a restartovat službu následujícím příkazem:

sudo systemctl restart mysqld
# nebo
sudosystemctlrestartovatmariadb.servis

Díky tomu bude služba MySQL naslouchat pouze místní adrese.

Pokud používáte MariaDB, můžete také zkoumat /etc/mysql/mariadb.conf.d/50-server.cnf a zkontrolujte, zda existuje definice pro vazba-adresa.

Nyní, když máte nastavenou adresu vazby na 127.0.0.1, což je localhost, můžete spustit sken Nmap a zkontrolovat výstup:

Port MySQL můžete vidět, protože 127.0.0.1 představuje místního hostitele, kterého vidíte. Můžete zkusit změnit adresu vazby znovu, abyste se ujistili, že to funguje:

[mysqld]
svázat-adresa=127.5.5.1

Poté uložte /etc/mysql/my.cnf soubor a restartujte službu MySQL. Pokud provedete skenování Nmap opět v této fázi byste neměli vidět tuto vazebnou adresu na localhost.

Jakmile zjistíte, že to funguje, vraťte se do nastavení z prvního kroku a nastavte adresu vazby zpět na 127.0.0.1 a znovu uložte.

2. Nastavte místní bariéru přístupu k souborům

MySQL umí komunikovat s lokálním souborovým systémem. Pomocí dotazů můžete zobrazit obsah textu v místním systému souborů nebo vypálit výsledek dotazu na disk. Chcete-li zabránit útočníkům se zlými úmysly používat tuto funkci, musíte zabránit MySQL v komunikaci s místním souborovým systémem.

K provedení opatření můžete použít funkci nazvanou local-infile. Představte si například, že máte soubor s názvem „/etc/secretfile.txt“ a v tomto souboru máte heslo. Pokud je hodnota funkce local-infile ve vašem souboru /etc/mysql/my.cnf 1, pak je přístup otevřený. Takže máte přístup k souboru secretfile.txt.

Hodnota funkce local-infile je 1. Aby se změny projevily, restartujte databázi MySQL. Nyní se připojte k MySQL pomocí následujícího příkazu a zkontrolujte, zda vidíte soubor secretfile.txt:

VYBRATLOAD_FILE("/etc/secretfile.txt");

Není těžké zachytit informace v jakémkoli souboru na vašem počítači.

Chcete-li tento problém vyřešit, změňte hodnotu local-infile v souboru /etc/mysql/my.cnf následovně:

[mysqld]
místní-infile=0

Restartujte službu MySQL. Znovu se připojte k MySQL a opakujte předchozí krok; již byste neměli vidět obsah souboru.

Pokud uživatelé ještě nemají oprávnění ke čtení a zápisu do místních souborů, nebudou moci tento soubor zobrazit. Stále je to však něco, co byste měli zkontrolovat v penetračních testech a zabezpečení databáze.

3. Nastavte uživatele a hesla aplikací

Uživatel správy databáze a uživatel MySQL přistupující k databázi se musí navzájem lišit. Jinými slovy, připojování aplikací k MySQL s uživateli root je extrémně nebezpečné. Pokud je to možné, definujte uživatele aplikací, které nefungují Operace UPDATE nebo INSERT odděleně.

Další věcí, kterou je v tomto bodě třeba zvážit, jsou uživatelská hesla. Jako téměř v každém oboru musí být hesla pro uživatele MySQL složitá a nepředvídatelná. Pokud s tím potřebujete pomoci, existují skvělé systémy generátoru hesel, které můžete použít.

4. Smazat anonymní uživatele

Při výchozí instalaci MySQL se objeví někteří anonymní uživatelé. Musíte je smazat a zablokovat jim přístup. U zabezpečeného serveru MySQL byste neměli obdržet žádnou odpověď v důsledku následujícího dotazu:

VYBRAT * Z mysql.user KDEUŽIVATEL="";
# Příklad výstupu
Prázdný soubor (0,001 s)

Pokud jsou nějaké výsledky, měli byste tyto anonymní uživatele smazat. Pokud by například existoval anonymní účet s názvem „anonuser“ v prostředí s názvem „localhost“, museli byste k odstranění tohoto účtu použít následující příkaz:

DROP USER 'anonuser'@'localhost';

5. Zkontrolujte oprávnění k místním souborům MySQL

Představte si, že jste správce databáze a chcete se vrátit k datům před týdnem. V tomto případě se možná budete muset připojit k databázovému serveru přes SSH a změnit požadované soubory MySQL. Při tom jste možná použili uživatelská oprávnění root Linuxu; to znamená, že vlastnictví a oprávnění datových souborů se mohou změnit. To nechceš.

Podívejte se do adresáře /var/lib/mysql a zkontrolujte udělená oprávnění. Zde musíte zkontrolovat, zda vlastníkem všech souborů je uživatel MySQL. Následující příkaz udělá trik:

sudo ls -al /var/lib/mysql

Oprávnění ke čtení a zápisu souborů by mělo být pouze pro uživatele MySQL. Žádní jiní uživatelé by neměli mít žádná oprávnění.

6. Použijte MySQL SSL

Přemýšlení o konkrétním příkladu je nejlepší způsob, jak porozumět používání MySQL a SSL. Představte si, že jeden ze serverů v regionu ABC, kde je mnoho různých serverů, převezmou zákeřní hackeři. Hackeři provedou vnitřní sken v oblasti ABC. Tímto způsobem shromažďují informace o serverech.

Pokud během tohoto procesu detekují server MySQL, mohou provést a Man-in-the-Middle (MitM) útok na cílový server, což znamená, že mohou ukrást informace o relaci aplikací a uživatelů připojujících se k tomuto serveru. Jedním z nejlepších způsobů, jak se tomu vyhnout, je povolit SSL na serveru MySQL.

7. Soubory protokolu a historie

Protokoly MySQL používáte k analýze a hledání chyb. Umístění těchto protokolů můžete upravit zadáním my.cnf následovně:

# /etc/mysql/my.cnf
[mysqld]
log =/var/log/mylogfiles

Název nebo umístění mylogfiles můžete libovolně změnit. Je ještě jeden soubor, který musíte zkontrolovat. Když se připojíte k serveru MySQL v terminálu Linux a zadáte různé příkazy, tyto dotazy se uloží do souboru mysql_history. Pokud spustíte následující příkaz, můžete vidět dotazy, které používáte v terminálu MySQL:

cat ~/.mysql_history

Pokud nechcete poskytovat informace o tom, jaké dotazy na serveru provádíte, musíte obsah tohoto souboru smazat. K odstranění obsahu souboru použijte následující příkaz:

sudo echo "vyčištěno"> ~/.mysql_history

Poté můžete znovu zkontrolovat obsah souboru.

Kdo vlastní databázi, vlastní systém

Bez ohledu na to, v jakém odvětví pracujete, vaše databáze vždy obsahuje důležité informace. Mohou to být vaši zákazníci, bankovní účty a hesla. Škodliví útočníci znají jejich důležitost a hodnotu. Vývojáři a správci databází potřebují znát alespoň základy, se kterými se setkají při penetračních testech, aby porazili hackery.