MySQL je eden najbolj priljubljenih sistemov za upravljanje relacijskih baz podatkov, ki je jackpot za napadalce, ki se poskušajo pritihotapiti v baze podatkov. Na novo nameščen strežnik baz podatkov MySQL ima lahko veliko ranljivosti in vrzeli. Ker je varnost podatkov zelo pomembna, je obvezno razumevanje vseh vidikov varnosti MySQL.

Ta članek se osredotoča na revizijo in varnost vaše baze podatkov MySQL ter ponuja devet nasvetov za okrepitev njene varnosti.

1. Izogibajte se nepotrebnim dodelitvam privilegijev

MySQL omogoča več izjav o privilegijih, ki lahko, če so po nepotrebnem dodeljeni privilegiranemu uporabniku, vodijo do branja/pisanja datotek in podrejanja drugih uporabniških privilegijev. Nekateri izmed najbolj potencialno tveganih stavkov o privilegijih so FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN in tako naprej. Več o tem lahko preberete v uradni dokumentaciji MySQL. Zato ne dodeljujte privilegijev superuporabnika, kot so FILE, GRANT, SUPER in PROCESS, neskrbniškim računom. Ta nepotrebna globalna dovoljenja, dovoljenja na ravni baze podatkov in tabele lahko prekličete na naslednji način:

PREKLICNI VSE NA *.* FROM 'user_name'@'host_name'; #Globalni privilegiji
REVOKE CREATE, DROP ON database_name.* FROM 'user_name'@'host_name'; #Privilegiji baze podatkov
PREKLIČI INSERT, UPDATE, DELETE ON database_name.table_name FROM 'user_name'@'host_name'; #Privilegiji mize
privilegiji za splakovanje;

2. Omejite oddaljene prijave

Oddaljeni dostop olajša delo skrbnikov baz podatkov, vendar tvega strežnik zaradi morebitnih ranljivosti in izkoriščanja. Za vse vrste uporabniških računov MySQl lahko onemogočite oddaljeni dostop tako, da v glavno konfiguracijsko datoteko dodate spremenljivko skip-networking in znova zaženete storitev.

[mysqld]
preskoči mreženje
ponovni zagon storitve sudo mysql

Podobno morate onemogočiti dostop do korenskega računa, če ne vse, da omejite oddaljene prijave v root račun. Ta previdnostni ukrep preprečuje bruteforcing korenskega računa MySQL.

mysql> izbriši iz mysql.user, kjer je uporabnik='root' in gostitelj ni v ('localhost', '127.0.0.1', '::1'); mysql> flush privilegije; 

3. Onemogoči funkcije (load_file, outfile, dumpfile)

Še en previdnostni ukrep za zaščito MySQL pred lokalnim vbrizgavanjem datotek je onemogočiti funkcije, ki so dostopne samo prek pooblastila za dodelitev FILE. FILE je možnost, ki uporabnikom z nizkimi privilegiji z možnostmi globalnih ukazov omogoča branje ali pisanje datotek na strežniku.

  • load_file

Funkcija load_file naloži vsebino datoteke s strežnika kot niz. Naslednji ukaz bo na primer naložil vso vsebino iz datoteke /etc/passwd datoteko, kot sledi:

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

Podobno funkcija outfile zapiše vsebino v datoteke lokalnega strežnika. Napadalci lahko s to funkcijo zapišejo koristno obremenitev v datoteko v strežniku, kot sledi:

izberite 'Local File SQL Injection' v outfile '/tmp/file.txt';
mačka /tmp/file.txt

Izhod:

Lokalna injekcija datoteke SQL
  • dumpfile

Ta funkcija uporablja izbirni vzrok za zapisovanje v datoteko, ne da bi se izhod vrnil na zaslon.

mačka /tmp/file.txt
izberite 'Pozdravljeni svet!' v datoteko dumpfile '/tmp/world';

Izhod:

Poizvedba v redu, prizadeta je 1 vrstica (0,001 s)

Te funkcije lahko onemogočite tako, da prekličete privilegij FILE na naslednji način:

prekliči FILE na *.* iz 'user_name'@'localhost';

Povezano: Vodnik za začetnike po Metasploit v Kali Linuxu (s praktičnimi primeri)

4. Onemogoči privzeta vrata

Vemo, da storitve MySQL delujejo na vratih 3306, napadalci pa pregledajo vrata, da preverijo storitve, ki delujejo v omrežju. Če želite dodati varnost z nejasnostjo in spremeniti privzeta vrata MySQL z urejanjem sistemske spremenljivke vrat v glavni konfiguracijski datoteki, boste morali vnesti naslednje:

vim /etc/mysql/my.cnf
vrata = XXXX
ponovni zagon storitve sudo mysql

5. Izogibajte se nadomestnim znakom v imenih računov

Imena računov v MySQL so sestavljena iz dveh delov, ki sta uporabnik in ime gostitelja "user_name"@"host_name". Skrbniku omogoča ustvarjanje računov za uporabnike z istim imenom, ki se povezujejo z različnih gostiteljev. Vendar pa gostiteljski del imena računa dovoljuje nadomestne znake, ki so lahko točka dostopa do baze podatkov od koder koli.

Izbirna uporaba vrednosti gostitelja ali naslova IP je enakovredna 'user_name'@'%', kjer se % ujema z vzorcem MySQL, ki se ujema z operacijo LIKE, % pa pomeni katero koli ime gostitelja. Medtem pa dostop iz '192.168.132.%' pomeni vsak poskus iz omrežja razreda C. Poleg tega lahko vsakdo dostopa do baze podatkov tako, da gostiteljski del poimenuje kot '192.18.132.mysql.com'.

Da bi se izognili takšnim poskusom, MySQL omogoča definiranje omrežne maske z vrednostjo gostitelja za identifikacijo omrežnih bitov naslova IP:

client-ip_add & netmask = host_name

Sintaksa za ustvarjanje imena gostitelja je host_ip/netmask:

USTVARI UPORABNIKA 'jhon'@'192.168.132.0/255.255.255.0'; 

Zgornja vrednost gostitelja omogoča uporabniku Janez za dostop do baze podatkov s katerega koli IP-ja v območju 192.168.132.0-192.168.132.255. Podobno bodo vrednosti gostitelja 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 omogočile gostitelje iz omrežij razreda A in B. Medtem ko bo 192.168.132.5 dovolil dostop samo z določenega IP-ja.

6. Onemogoči eksplicitni dostop

Uporabniško ime v MySQL je bodisi ime, s katerim baze podatkov sprejemajo dohodne povezave, bodisi prazno uporabniško ime "@"host_name", ki ustvari anonimnega uporabnika. Vendar pa lahko prisotnost anonimnega uporabnika spodbudi napadalce za dostop do strežnika baze podatkov. Poleg tega različice MySQL pred MySQL 5.7 ustvarjajo anonimni nabor uporabnikov in namestitev po nadgradnji različice še vedno dodaja te uporabnike.

izberite uporabnika, gostitelja, geslo iz mysql.user, kjer je uporabnik všeč '';

Opazite lahko, da sta stolpca uporabnik in geslo prazna, dostop pa je omejen na localhost. Vendar ne želite, da bi kdorkoli dostopal do baze podatkov. Za brisanje anonimnih uporabnikov uporabite naslednji ukaz:

spusti uporabnika " "@"localhost"
privilegiji za splakovanje;

7. Nastavite nekorenski račun kot lastnika ali skupino

Nastavitev nekorenskega uporabniškega računa ni povezana s korenskim uporabnikom MySQL. Namestitev MySQL v sisteme Linux/Unix iz paketov tar in tar.gz omogoča, da strežnik zažene kateri koli privilegiran uporabnik. To je varnostna pomanjkljivost, ker lahko vsak uporabnik z možnostjo odobritve FILE ureja ali ustvarja datoteke na strežniku. Vendar pa vrne napako, ko uporabnik poskuša dostopati do nje brez -uporabnik=root napaka.

Temu se lahko izognete tako, da vadite pravilo palca za dostop do strežnika baz podatkov kot ločen uporabnik Linuxa. Če želite zagnati mysqld kot navaden uporabnik Linuxa, zaustavite strežnik in ga spremenite dovoljenja za branje/pisanje strežnika MySQl v mysql, kot sledi:

chown -R mysql /pot/do/mysql/datadir

Odprite glavno konfiguracijsko datoteko MySQL, dodajte novega uporabnika mysql in znova zaženite storitev, da se izognete nezaželenemu dostopu do strežnika:

vim /etc/mysql/my.cnf
uporabnik=mysql
ponovni zagon storitve sudo mysql

8. Nastavite geslo za root račun

Namestitev MySQL prek interaktivne lupine v distribucijah Linuxa, ki temeljijo na Debianu, ustvari uporabniški račun root in vas prosi, da nastavite geslo. Vendar se to ne zgodi pri neinteraktivni namestitvi lupine in distribucijah, ki temeljijo na Red-Hat. Kot je navedeno zgoraj, lahko nekorenski uporabnik računalnika Linux dostopa do korenskega uporabniškega računa mysql z uporabo -uporabnik=root možnost. Temu se lahko izognete tako, da nastavite geslo na naslednji način:

sudo mysqladmin geslo
vim /etc/mysql/my.cnf
geslo=
ponovni zagon storitve sudo mysql

9. Zagotovite šifriranje podatkov med prenosom in v mirovanju

Privzeta nešifrirana komunikacija med odjemalcem in strežnikom predstavlja tveganje za prestrezanje podatkov s strani katerega koli človeka v sredini. Podobno nešifrirani uporabniški podatki v bazi tvegajo zaupnost in integriteto uporabnika. MySQL podpira šifriranje podatkov med odjemalcem in strežnikom prek protokola TLS/SSL, medtem ko je nešifrirana komunikacija sprejemljiva le, če sta obe strani, ki komunicirata, znotraj istega omrežja.

MySQL zdaj podpira šifriranje v mirovanju, da zaščiti podatke, shranjene v strežniku, tudi ko je sistem vgrajen.

Napredna varnost MySQL: Zaščitite se

Zagotoviti, da imate najvišjo raven spletne varnosti, je ključnega pomena in ta članek vam bo dal nekaj koristnih napotkov v pravo smer. Zgornji koraki so uporabni za zavarovanje strežnika baz podatkov, vendar je ključnega pomena tudi učenje, kako dodeliti minimalna dovoljenja uporabnikom, ki niso skrbniški.

Vodnik za začetnike za pisanje shem baz podatkov mySQL

Ustvarite svojo bazo podatkov mySQL samo z urejevalnikom besedil in tem osnovnim orisom strukture ali "shemo".

Preberite Naprej

DelitiTweetE-naslov
Povezane teme
  • Programiranje
  • Varnost
  • Programiranje
  • Varnostni nasveti
  • Varnost
O avtorju
Rumaisa Niazi (Objavljenih 15 člankov)

Rumaisa je svobodna pisateljica pri MUO. Nosila je veliko klobukov, od matematike do navdušenca za informacijsko varnost, zdaj pa dela kot analitik SOC. Njena zanimanja vključujejo branje in pisanje o novih tehnologijah, distribucijah Linuxa in karkoli v zvezi z informacijsko varnostjo.

Več od Rumaisa Niazi

Naročite se na naše novice

Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e-knjige in ekskluzivne ponudbe!

Kliknite tukaj, da se naročite