MySQL je jedan od najpopularnijih sustava za upravljanje relacijskim bazama podataka koji je jackpot za napadače koji se pokušavaju ušuljati u baze podataka. Novoinstalirani MySQL poslužitelj baze podataka može imati mnogo ranjivosti i rupa u zakonu. Budući da je sigurnost podataka od velike važnosti, obavezno je razumjeti svaki aspekt MySQL sigurnosti.

Ovaj se članak usredotočuje na reviziju i sigurnost vaše MySQL baze podataka i nudi devet savjeta za jačanje njezine sigurnosti.

1. Izbjegnite nepotrebne dodjele privilegija

MySQL dopušta nekoliko izjava o privilegijama koje kada se nepotrebno dodijele nedovoljno privilegiranom korisniku mogu dovesti do čitanja/pisanja datoteka i podmetanja drugih korisničkih privilegija. Neke od potencijalno najrizičnijih izjava o povlasticama su FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN i tako dalje. Više o njima možete pročitati u službenoj dokumentaciji MySQL. Stoga ne dodjeljujte privilegije superkorisnika kao što su FILE, GRANT, SUPER i PROCESS neadministrativnim računima. Ova nepotrebna globalna dopuštenja, dopuštenja na razini baze podataka i tablice možete opozvati na sljedeći način:

instagram viewer

OPOZOVI SVE NA *.* FROM 'user_name'@'host_name'; #Globalne privilegije
REVOKE CREATE, DROP ON database_name.* FROM 'user_name'@'host_name'; #Privilegije baze podataka
POZOVI UMETNI, AŽURIRAJ, IZBRIŠI NA ime_baze.naziv_tablice FROM 'user_name'@'host_name'; #Privilegije za stol
flush privilegije;

2. Ograničite udaljene prijave

Daljinski pristup olakšava posao administratorima baze podataka, ali dovodi poslužitelj u opasnost od potencijalnih ranjivosti i iskorištavanja. Možete onemogućiti daljinski pristup za sve vrste MySQl korisničkih računa dodavanjem varijable skip-networking u glavnu konfiguracijsku datoteku i ponovnim pokretanjem usluge.

[mysqld]
preskočiti umrežavanje
sudo service mysql restart

Slično, morate onemogućiti pristup root računu, ako ne i sve da biste ograničili udaljenu prijavu na root račun. Ova mjera opreza sprječava bruteforaciju MySQL root računa.

mysql> izbriši iz mysql.user gdje korisnik='root' i host nije u ('localhost', '127.0.0.1', '::1'); mysql> flush privilegije; 

3. Onemogući funkcije (load_file, outfile, dumpfile)

Još jedna mjera opreza za osiguranje MySQL-a od lokalnog ubacivanja datoteke je onemogućavanje funkcija dostupnih samo putem privilegije davanja FILE. FILE je opcija koja korisnicima s niskim povlasticama s opcijama globalnih naredbi omogućuje čitanje ili pisanje datoteka na poslužitelju.

  • load_file

Funkcija load_file učitava sadržaj datoteke s poslužitelja kao niz. Na primjer, sljedeća naredba će učitati sav sadržaj iz /etc/passwd datoteku kako slijedi:

odaberite load_file('/etc/passwd')
  • outfile

Slično, funkcija outfile zapisuje sadržaj u datoteke lokalnog poslužitelja. Napadači mogu koristiti ovu funkciju za pisanje korisnog opterećenja u datoteku na poslužitelju, kako slijedi:

odaberite 'Local File SQL Injection' u outfile '/tmp/file.txt';
mačka /tmp/file.txt

Izlaz:

SQL injekcija lokalne datoteke
  • dumpfile

Ova funkcija koristi uzrok odabira za pisanje u datoteku bez vraćanja izlaza na zaslon.

mačka /tmp/file.txt
odaberite "Zdravo svijete!" u dumpfile '/tmp/world';

Izlaz:

Upit je u redu, zahvaćen 1 redak (0,001 s)

Ove funkcije možete onemogućiti opozivom privilegije FILE na sljedeći način:

opozvati FILE na *.* od 'user_name'@'localhost';

Povezano: Vodič za početnike za Metasploit u Kali Linuxu (s praktičnim primjerima)

4. Onemogući zadani priključak

Znamo da MySQL usluge rade na portu 3306, a napadači skeniraju portove kako bi provjerili servise koji rade na mreži. Da biste dodali sigurnost nejasnošću i promijenili zadani MySQL port uređivanjem varijable sustava porta u njegovoj glavnoj konfiguracijskoj datoteci, morat ćete unijeti sljedeće:

vim /etc/mysql/my.cnf
port=XXXX
sudo service mysql restart

5. Izbjegavajte zamjenske znakove u nazivima računa

Nazivi računa u MySQL sastoje se od dva dijela koji su korisnik i ime hosta "user_name"@"host_name". Omogućuje administratoru stvaranje računa za korisnike s istim imenom koji se povezuju s različitih hostova. Međutim, glavni dio imena računa dopušta konvencije zamjenskih znakova koji mogu biti točka pristupa bazi podataka s bilo kojeg mjesta.

Opcijska upotreba imena hosta ili vrijednosti IP adrese ekvivalentna je 'user_name'@'%' gdje % odgovara MySQL uzorku koji odgovara operaciji LIKE, a % znači bilo koje ime hosta. U međuvremenu, pristup s '192.168.132.%' znači svaki pokušaj iz mreže klase C. Osim toga, svatko može pristupiti bazi podataka imenovanjem glavnog dijela kao '192.18.132.mysql.com'.

Kako bi se izbjegli takvi pokušaji, MySQL dopušta definiranje mrežne maske s vrijednošću hosta za identifikaciju mrežnih bitova IP adrese:

client-ip_add & netmask = host_name

Sintaksa za stvaranje imena hosta je host_ip/netmask:

CREATE USER 'jhon'@'192.168.132.0/255.255.255.0'; 

Gornja vrijednost hosta omogućuje korisniku Ivan za pristup bazi podataka s bilo kojeg IP-a u rasponu od 192.168.132.0-192.168.132.255. Slično, vrijednosti hosta 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 omogućit će hostove iz mreža klase A i B. Dok će 192.168.132.5 dopustiti pristup samo s određenog IP-a.

6. Onemogućite eksplicitni pristup

Korisničko ime u MySQL-u je ili ime s kojim baze podataka prihvaćaju dolazne veze ili prazno korisničko ime "@"host_name" koje stvara anonimnog korisnika. Međutim, prisutnost anonimnog korisnika može utjecati na napadače da pristupe poslužitelju baze podataka. Osim toga, MySQL verzije prije MySQL 5.7 stvaraju anonimni skup korisnika, a instalacija nakon nadogradnje verzije i dalje dodaje te korisnike.

odaberite korisnika, hosta, lozinku iz mysql.user gdje korisnik voli '';

Možete primijetiti da su stupci korisnika i lozinke prazni, a pristup je ograničen na localhost. Međutim, ne želite da itko pristupa bazi podataka. Koristite sljedeću naredbu za brisanje anonimnih korisnika:

ispusti korisnika " "@"localhost"
flush privilegije;

7. Postavite ne-root račun kao vlasnika ili grupu

Postavljanje korisničkog računa koji nije root nije povezano s MySQL root korisnikom. Instalacija MySQL-a u Linux/Unix sustavima iz paketa tar i tar.gz omogućuje pokretanje poslužitelja bilo kojem korisniku s nedostatkom privilegije. To je sigurnosni nedostatak jer bilo koji korisnik s opcijom FILE grant može uređivati ​​ili stvarati datoteke na poslužitelju. Međutim, vraća pogrešku kada joj korisnik pokuša pristupiti bez -korisnik=root pogreška.

To možete izbjeći prakticiranjem pravila palca pristupa poslužitelju baze podataka kao zasebni korisnik Linuxa. Da biste pokrenuli mysqld kao običan Linux korisnik, zaustavite poslužitelj i promijenite dopuštenja za čitanje/pisanje od MySQl poslužitelja na mysql, kako slijedi:

chown -R mysql /put/do/mysql/datadir

Otvorite glavnu konfiguracijsku datoteku MySQL, dodajte novog korisnika mysql i ponovno pokrenite uslugu kako biste izbjegli nepotreban pristup poslužitelju:

vim /etc/mysql/my.cnf
korisnik=mysql
sudo service mysql restart

8. Postavite lozinku za root račun

MySQL instalacija putem interaktivne ljuske u distribucijama Linuxa baziranim na Debianu stvara root korisnički račun i traži od vas da postavite lozinku. Međutim, to se ne događa u neinteraktivnoj instalaciji ljuske i distribucijama koje se temelje na Red-Hat-u. Kao što je gore navedeno, nekorijenski korisnik Linux stroja može pristupiti mysql root korisničkom računu pomoću -korisnik=root opcija. To možete izbjeći postavljanjem lozinke na sljedeći način:

sudo mysqladmin lozinka
vim /etc/mysql/my.cnf
lozinka=
sudo service mysql restart

9. Osigurajte šifriranje podataka u prijenosu i u mirovanju

Zadana nešifrirana komunikacija između klijenta i poslužitelja predstavlja rizik presretanja podataka od strane bilo kojeg čovjeka u sredini. Slično, nekriptirani korisnički podaci u bazi podataka ugrožavaju povjerljivost i integritet korisnika. MySQL podržava enkripciju podataka između klijenta i poslužitelja preko TLS/SSL protokola, dok je nekriptirana komunikacija prihvatljiva samo kada su obje strane u komunikaciji unutar iste mreže.

MySQL sada podržava enkripciju u mirovanju radi zaštite podataka pohranjenih na poslužitelju čak i kada je sustav probijen.

MySQL Advanced Security: Zaštitite se

Osigurati da imate najvišu razinu online sigurnosti je ključno, a ovaj će vam članak dati neke korisne upute u pravom smjeru. Gore navedeni koraci korisni su za osiguranje poslužitelja baze podataka, ali je također bitno naučiti kako dodijeliti minimalne dozvole neadministrativnim korisnicima.

Vodič za početnike za pisanje mySQL shema baze podataka

Izradite vlastitu mySQL bazu podataka sa samo uređivačem teksta i ovim osnovnim nacrtom strukture, ili "shemom".

Pročitajte dalje

UdioCvrkutE-mail
Povezane teme
  • Programiranje
  • Sigurnost
  • Programiranje
  • Sigurnosni savjeti
  • Sigurnost
O autoru
Rumaisa Niazi (Objavljeno 15 članaka)

Rumaisa je slobodni pisac u MUO. Nosila je mnogo šešira, od matematičarke do entuzijasta za informacijsku sigurnost, a sada radi kao analitičarka SOC-a. Njezini interesi uključuju čitanje i pisanje o novim tehnologijama, distribucijama Linuxa i svemu oko informacijske sigurnosti.

Više od Rumaise Niazi

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e-knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu