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.
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
- Programozás
- Biztonság
- Programozás
- Biztonsági tippek
- Biztonság

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.
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