A MySQL az egyik legnépszerűbb relációs adatbázis-kezelő rendszer, amely főnyeremény az adatbázisokba besurranó támadók számára. Egy újonnan telepített MySQL adatbázis-kiszolgáló számos sebezhetőséget és kiskapukat tartalmazhat. Mivel az adatbiztonság nagyon fontos, ezért kötelező megérteni a MySQL biztonság minden aspektusát.

Ez a cikk a MySQL-adatbázis ellenőrzésére és biztonságára összpontosít, és kilenc tippet ad a biztonság fokozásához.

1. Kerülje a szükségtelen privilégium-támogatásokat

MySQL lehetővé tesz számos privilégium-utasítást, amelyek szükségtelenül hozzárendelve egy hátrányos helyzetű felhasználóhoz fájlok olvasásához/írásához és más felhasználói jogosultságok felforgatásához vezethetnek. A potenciálisan legkockázatosabb kiváltságnyilatkozatok közül néhány a FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN és így tovább. Ezekről bővebben a MySQL hivatalos dokumentációjában olvashat. Ezért ne rendeljen olyan szuperfelhasználói jogosultságokat, mint a FILE, GRANT, SUPER és PROCESS, nem adminisztrátori fiókokhoz. Ezeket a szükségtelen globális, adatbázis- és táblaszintű engedélyeket az alábbiak szerint vonhatja vissza:

MINDEN VISSZAVONÁSA *.* FROM 'felhasználónév'@'host_name'-ből; #Globális kiváltságok
REVOKE CREATE, DROP ON adatbázis_neve.* FROM 'felhasználónév'@'host_name'; #Adatbázis-jogosultságok
REVOKE INSERT, UPDATE, DELETE ON adatbázis_neve.tábla_neve FROM 'felhasználónév'@'gazdanév'; #Asztaljogok
öblítési jogosultságok;

2. A távoli bejelentkezés korlátozása

A távoli hozzáférés megkönnyíti az adatbázis-adminisztrátorok munkáját, de a szervert potenciális sebezhetőségekkel és kizsákmányolással fenyegeti. A távoli hozzáférést a MySQL felhasználói fiókok összes típusánál letilthatja, ha a fő konfigurációs fájlhoz hozzáad egy kihagyó hálózati változót, és újraindítja a szolgáltatást.

[mysqld]
skip-networking
sudo szolgáltatás mysql újraindítás

Hasonlóképpen le kell tiltania a root fiókhoz való hozzáférést, ha nem az összeset, hogy korlátozza a root fiók távoli bejelentkezését. Ez az óvintézkedés megakadályozza a MySQL gyökérfiók bruteforce-ját.

mysql> delete from mysql.user, ahol user='root' és a gazdagép nincs benne ('localhost', '127.0.0.1', '::1'); mysql> flush jogosultságok; 

3. Funkciók letiltása (load_file, outfile, dumpfile)

Egy másik óvintézkedés a MySQL helyi fájlbefecskendezéssel szembeni védelmére az, hogy tiltsa le a csak a FILE engedélyezési jogosultságon keresztül elérhető funkciókat. A FÁJL egy olyan beállítás, amely lehetővé teszi az alacsony jogosultságokkal rendelkező felhasználók számára, hogy globális parancsokkal olvassanak vagy írhassanak fájlokat a kiszolgálón.

  • load_file

A load_file függvény karakterláncként tölti be a fájl tartalmát a szerverről. Például a következő parancs az összes tartalmat betölti a /etc/passwd fájl a következőképpen:

válassza a load_file('/etc/passwd')
  • outfile

Hasonlóképpen, az outfile függvény tartalmat ír a helyi szerver fájljaiba. A támadók ezt a funkciót használhatják a kiszolgálón lévő fájlba való hasznos terhelés írásához, az alábbiak szerint:

a '/tmp/file.txt' kimenőfájlba válassza a 'Helyi fájl SQL-befecskendezése' lehetőséget;
cat /tmp/file.txt

Kimenet:

Helyi fájl SQL-befecskendezés
  • dumpfile

Ez a funkció a kiválasztási okot használja a fájlba íráshoz anélkül, hogy a kimenetet visszaküldené a képernyőre.

cat /tmp/file.txt
válassza a "Hello world!" a '/tmp/world' dumpfile-ba;

Kimenet:

Lekérdezés OK, 1 sor érintett (0,001 mp)

Ezeket a funkciókat a FILE jogosultság visszavonásával tilthatja le:

visszavonja a FILE fájlt a *.*-on innen: 'felhasználónév'@'localhost';

Összefüggő: Útmutató kezdőknek a Metasploit használatához Kali Linuxban (gyakorlati példákkal)

4. Az alapértelmezett port letiltása

Tudjuk, hogy a MySQL szolgáltatások a 3306-os porton futnak, és a támadók átvizsgálják a portokat, hogy ellenőrizzék a hálózaton futó szolgáltatásokat. Ha a fő konfigurációs fájlban a portrendszer-változó szerkesztésével kívánja módosítani az alapértelmezett MySQL-portot, meg kell adnia a következőket:

vim /etc/mysql/my.cnf
port=XXXX
sudo szolgáltatás mysql újraindítás

5. Kerülje a helyettesítő karaktereket a fióknevekben

A fióknevek a MySQL-ben két részből állnak, egy felhasználóból és egy gazdagépnévből: "felhasználónév"@"host_name". Lehetővé teszi az adminisztrátor számára, hogy fiókokat hozzon létre az azonos nevű felhasználók számára, akik különböző gazdagépekről csatlakoznak. A fióknév gazdagép része azonban lehetővé teszi a helyettesítő karakterek használatát, amelyek bárhonnan elérhetik az adatbázist.

A gazdagépnév vagy IP-cím értékének opcionális használata egyenértékű a 'felhasználói_név'@'%' értékkel, ahol a % megfelel a LIKE műveletnek megfelelő MySQL-mintának, a % pedig bármilyen gazdagépnevet jelent. Eközben a '192.168.132.%'-ról való hozzáférés a C osztályú hálózatról érkező bármilyen próbálkozást jelent. Emellett bárki hozzáférhet az adatbázishoz, ha a gazdagép részt „192.18.132.mysql.com”-nak nevezi el.

Az ilyen próbálkozások elkerülése érdekében a MySQL lehetővé teszi egy hálózati maszk meghatározását a gazdagép értékkel az IP-cím hálózati bitjei azonosításához:

client-ip_add & netmask = gazdagép_neve

A gazdagépnév létrehozásának szintaxisa: host_ip/netmask:

FELHASZNÁLÓ LÉTREHOZÁSA 'jhon'@'192.168.132.0/255.255.255.0'; 

A fenti gazdagép érték lehetővé teszi a felhasználó számára János az adatbázis eléréséhez bármely IP-ről a 192.168.132.0-192.168.132.255 tartományon belül. Hasonlóképpen, a 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 hosztértékek lehetővé teszik az A és B osztályú hálózatokból származó gazdagépeket. Míg a 192.168.132.5 csak az adott IP-ről engedélyezi a hozzáférést.

6. Az explicit hozzáférés letiltása

A MySQL-ben a felhasználónév vagy egy név, amellyel az adatbázisok fogadják a bejövő kapcsolatokat, vagy egy üres "@"host_name" felhasználónév, amely névtelen felhasználót hoz létre. Egy névtelen felhasználó jelenléte azonban kihasználhatja a támadókat, hogy hozzáférjenek az adatbázis-kiszolgálóhoz. Emellett a MySQL 5.7 előtti MySQL-verziók névtelen felhasználói csoportot hoznak létre, és a verziófrissítés utáni telepítés továbbra is hozzáadja ezeket a felhasználókat.

válassza ki a felhasználót, a gazdagépet, a jelszót a mysql.user webhelyről, ahol a felhasználó, mint a '';

Megjegyzendő, hogy a felhasználó és jelszó oszlopok üresek, és a hozzáférés a localhostra korlátozódik. Azonban nem szeretné, hogy bárki hozzáférjen az adatbázishoz. A névtelen felhasználók törléséhez használja a következő parancsot:

"@"localhost" felhasználó eldobása
öblítési jogosultságok;

7. Állítsa be a nem root fiókot tulajdonosként vagy csoportként

A nem root felhasználói fiók beállítása nem kapcsolódik a MySQL root felhasználóhoz. A MySQL telepítése Linux/Unix rendszereken tar és tar.gz csomagokból lehetővé teszi a szerver futtatását bármely hátrányos helyzetű felhasználó számára. Ez biztonsági hátrány, mivel a FILE engedélyezési opcióval rendelkező bármely felhasználó szerkeszthet vagy hozhat létre fájlokat a szerveren. Azonban hibaüzenetet ad vissza, ha a felhasználó megpróbál hozzáférni a nélkül -user=root hiba.

Ezt elkerülheti, ha betartja a hüvelykujjszabályt, miszerint külön Linux-felhasználóként éri el az adatbázis-kiszolgálót. A mysqld normál Linux-felhasználóként való futtatásához állítsa le a kiszolgálót és változtassa meg olvasási/írási engedélyek a MySQL szerverről mysql-re, az alábbiak szerint:

chown -R mysql /path/to/mysql/datadir

Nyissa meg a MySQL fő konfigurációs fájlját, adjon hozzá egy új mysql-felhasználót, és indítsa újra a szolgáltatást, hogy elkerülje a szükségtelen szerver-hozzáférést:

vim /etc/mysql/my.cnf
user=mysql
sudo szolgáltatás mysql újraindítás

8. Jelszó beállítása a root fiókhoz

A MySQL interaktív parancsértelmezőn keresztüli telepítése a Debian-alapú Linux disztribúciókban létrehozza a root felhasználói fiókot, és jelszó megadását kéri. Ez azonban nem történik meg a nem interaktív shell-telepítésben és a Red-Hat-alapú disztribúciókban. Ahogy fentebb említettük, egy Linux gép nem root felhasználója hozzáférhet a mysql root felhasználói fiókhoz a -user=root választási lehetőség. Ezt elkerülheti, ha a következőképpen állítja be a jelszót:

sudo mysqladmin jelszó
vim /etc/mysql/my.cnf
jelszó=
sudo szolgáltatás mysql újraindítás

9. Biztosítsa az adatok titkosítását szállítás közben és nyugalmi állapotban

A kliens és a szerver közötti alapértelmezett titkosítatlan kommunikáció azt a kockázatot rejti magában, hogy bármely közbeeső ember elkapja az adatokat. Hasonlóképpen, az adatbázisban található titkosítatlan felhasználói adatok veszélyeztetik a felhasználó titkosságát és integritását. A MySQL támogatja az adattitkosítást a kliens és a szerver között TLS/SSL protokollon keresztül, míg a titkosítatlan kommunikáció csak akkor elfogadható, ha mindkét kommunikáló fél ugyanazon a hálózaton belül van.

A MySQL immár támogatja a nyugalmi titkosítást, hogy megvédje a szerveren tárolt adatokat akkor is, ha a rendszer megsérül.

MySQL Advanced Security: Védje meg magát

A legmagasabb szintű online biztonság biztosítása kritikus fontosságú, és ez a cikk hasznos támpontokat ad a helyes irányba. A fenti lépések hasznosak az adatbázis-kiszolgáló biztonságossá tételéhez, de elengedhetetlen, hogy megtanulják, hogyan rendelhetnek minimális engedélyeket a nem rendszergazdai felhasználókhoz.

Útmutató kezdőknek a mySQL adatbázissémák írásához

Hozzon létre saját mySQL adatbázist csupán egy szövegszerkesztővel és ezzel az alapvető szerkezeti vázlattal vagy "sémával".

Olvassa el a következőt

RészvényCsipogEmail
Kapcsolódó témák
  • Programozás
  • Biztonság
  • Programozás
  • Biztonsági tippek
  • Biztonság
A szerzőről
Rumaisa Niazi (15 cikk megjelent)

Rumaisa a MUO szabadúszó írója. Sok kalapot viselt, a matematikustól az információbiztonság-rajongóig, és most SOC elemzőként dolgozik. Érdeklődési köre az új technológiákról, Linux disztribúciókról és az információbiztonsággal kapcsolatos bármiről való olvasás és írás.

Továbbiak Rumaisa Niazitól

Iratkozzon fel hírlevelünkre

Csatlakozzon hírlevelünkhöz műszaki tippekért, ismertetőkért, ingyenes e-könyvekért és exkluzív ajánlatokért!

Kattintson ide az előfizetéshez