Predvsem začetniki preizkuševalci penetracije dajejo manj poudarka varnosti baze podatkov na splošno. Aplikacija brez konfiguracije baze podatkov in varnostnih testov ne more biti varna. Morda že uporabljate programsko opremo MySQL, sistem za upravljanje baz podatkov, kako jo lahko naredite bolj varno? Tukaj je sedem korakov, ki jih morate upoštevati.
1. Uporabite tuneliranje SSH namesto oddaljene povezave
Storitev MySQL privzeto deluje na vratih 3306. Ko namestite MySQL, boste videli, da so vrata 3306 v načinu poslušanja za vse povezave. V sedanjem stanju so vrata MySQL odprta za zunanji svet. Zato bi morali nastaviti storitev MySQL tako, da posluša samo lokalni naslov.
Ker se strežniki običajno izvajajo v distribuciji Linuxa, spodnji primeri temeljijo na distribuciji Debian. Datoteka, ki jo morate uporabiti za tuneliranje SSH namesto oddaljene povezave in za zapiranje privzetih vrat za zunanji svet, je
/etc/mysql/my.cnf. V tej datoteki morate odpreti polje z imenom [mysqld] in napišite naslednji ukaz:[mysqld]
vezati-naslov=127.0.0.1
Po tem postopku ne pozabite shraniti te datoteke in znova zagnati storitve z naslednjim ukazom:
sudo systemctl znova zaženite mysqld
# oz
sudosystemctlponovni zagonmariadb.storitev
S tem bo storitev MySQL poslušala samo lokalni naslov.
Če uporabljate MariaDB, lahko tudi pregledate /etc/mysql/mariadb.conf.d/50-server.cnf in preverite, ali obstaja definicija za povezovalni naslov.
Zdaj, ko imate vezavni naslov nastavljen na 127.0.0.1, ki je lokalni gostitelj, lahko zaženete skeniranje Nmap in preverite rezultat:
Vrata MySQL lahko vidite, saj 127.0.0.1 predstavlja lokalnega gostitelja, ki ga vidite. Poskusite znova spremeniti povezovalni naslov, da zagotovite, da to deluje:
[mysqld]
vezati-naslov=127.5.5.1
Nato shranite /etc/mysql/my.cnf datoteko in znova zaženite storitev MySQL. Če opravite skeniranje Nmap spet na tej stopnji ne bi smeli videti tega povezovalnega naslova na lokalnem gostitelju.
Ko ugotovite, da to deluje, se vrnite na nastavitve iz prvega koraka in nastavite povezovalni naslov nazaj na 127.0.0.1 ter znova shranite.
2. Nastavite lokalno oviro za dostop do datotek
MySQL lahko komunicira z lokalnim datotečnim sistemom. S poizvedbami si lahko ogledate vsebino besedila v lokalnem datotečnem sistemu ali rezultat poizvedbe zapišete na disk. Če želite zlonamernim napadalcem preprečiti uporabo te funkcije, morate MySQL preprečiti komunikacijo z lokalnim datotečnim sistemom.
Za previdnost lahko uporabite funkcijo, imenovano local-infile. Na primer, predstavljajte si, da imate datoteko z imenom "/etc/secretfile.txt" in da imate v tej datoteki geslo. Če je vrednost funkcije local-infile v vaši datoteki /etc/mysql/my.cnf 1, je dostop odprt. Tako lahko dostopate do datoteke secretfile.txt.
Vrednost funkcije local-infile je 1. Znova zaženite bazo podatkov MySQL, da bodo spremembe uveljavljene. Zdaj se povežite z MySQL z naslednjim ukazom in preverite, ali vidite datoteko secretfile.txt:
IZBERILOAD_FILE("/etc/secretfile.txt");
Informacij ni težko zajeti v katero koli datoteko v računalniku.
Če želite rešiti to težavo, spremenite vrednost lokalne datoteke v datoteki /etc/mysql/my.cnf na naslednji način:
[mysqld]
lokalni-infile=0
Znova zaženite storitev MySQL. Ponovno se povežite z MySQL in ponovite prejšnji korak; ne bi smeli več videti vsebine datoteke.
Če uporabniki še nimajo dovoljenj za branje in pisanje za lokalne datoteke, te datoteke ne bodo mogli videti. Vendar je to še vedno nekaj, kar bi morali preveriti pri testih prodora in varnosti baze podatkov.
3. Nastavite uporabnike in gesla aplikacije
Uporabnik za upravljanje baze podatkov in uporabnik MySQL, ki dostopa do baze podatkov, se morata razlikovati drug od drugega. Z drugimi besedami, povezovanje aplikacij z MySQL s korenskimi uporabniki je izjemno nevarno. Če je mogoče, definirajte uporabnike aplikacij, ki ne delujejo Operacije UPDATE ali INSERT ločeno.
Druga stvar, ki jo je treba upoštevati na tej točki, so uporabniška gesla. Kot na skoraj vsakem področju morajo biti gesla za uporabnike MySQL zapletena in nepredvidljiva. Če pri tem potrebujete pomoč, lahko uporabite odlične sisteme za ustvarjanje gesel.
4. Izbriši anonimne uporabnike
Ko privzeto namestite MySQL, se pojavi nekaj anonimnih uporabnikov. Te morate izbrisati in blokirati njihov dostop. Za varen strežnik MySQL ne bi smeli dobiti nobenega odgovora kot rezultat naslednje poizvedbe:
IZBERI * OD mysql.user KJEUPORABNIK="";
# Primer izhoda
Prazno set (0,001 s)
Če so rezultati, morate te anonimne uporabnike izbrisati. Na primer, če bi obstajal anonimni račun z imenom "anonuser" v okolju z imenom "localhost", bi morali uporabiti ukaz, kot je naslednji, da izbrišete ta račun:
IZBRIŠITE UPORABNIKA 'neuporabnik'@'lokalni gostitelj';
5. Preverite dovoljenja za lokalne datoteke MySQL
Predstavljajte si, da ste skrbnik baze podatkov in se želite vrniti na podatke izpred enega tedna. V tem primeru se boste morda morali povezati s strežnikom baze podatkov prek SSH in spremeniti želene datoteke MySQL. Pri tem ste morda uporabili privilegije korenskega uporabnika Linuxa; to pomeni, da se lahko lastništvo in dovoljenja podatkovnih datotek spremenijo. Tega si ne želiš.
Poglejte imenik /var/lib/mysql, da preverite podeljena dovoljenja. Tukaj morate preveriti, ali je lastnik vseh datotek uporabnik MySQL. Naslednji ukaz bo pomagal:
sudo ls -al /var/lib/mysql
Dovoljenja za branje in pisanje datotek bi morala biti samo za uporabnika MySQL. Noben drug uporabnik ne sme imeti nobenih dovoljenj.
6. Uporabite MySQL SSL
Razmišljanje o konkretnem primeru je najboljši način za razumevanje uporabe MySQL in SSL. Predstavljajte si, da enega od strežnikov v regiji ABC, kjer je veliko različnih strežnikov, prevzamejo zlonamerni hekerji. Hekerji bodo izvedli notranji pregled v regiji ABC. Na ta način zbirajo podatke o strežnikih.
Če med tem postopkom zaznajo strežnik MySQL, lahko izvedejo a Napad Man-in-the-Middle (MitM) na ciljni strežnik, kar pomeni, da lahko ukradejo podatke o seji aplikacij in uporabnikov, ki se povezujejo s tem strežnikom. Eden najboljših načinov, da se temu izognete, je omogočite SSL na strežniku MySQL.
7. Datoteke dnevnika in zgodovine
Dnevnike MySQL uporabljate za analizo in iskanje napak. Kje se ti dnevniki hranijo, lahko uredite tako, da vnesete my.cnf na naslednji način:
# /etc/mysql/my.cnf
[mysqld]
dnevnik =/var/dnevnik/mylogfiles
Po želji lahko spremenite ime ali lokacijo datoteke mylogfiles. Preveriti morate še eno datoteko. Ko se povežete s strežnikom MySQL v terminalu Linux in vnesete različne ukaze, se te poizvedbe shranijo v datoteko mysql_history. Če zaženete naslednji ukaz, si lahko ogledate poizvedbe, ki jih uporabljate v terminalu MySQL:
cat ~/.mysql_history
Vsebino te datoteke morate izbrisati, če ne želite posredovati informacij o tem, kakšne vrste poizvedb izvajate znotraj strežnika. Za brisanje vsebine datoteke uporabite naslednji ukaz:
sudo echo "očiščen"> ~/.mysql_history
Nato lahko znova preverite vsebino datoteke.
Kdor je lastnik baze podatkov, je lastnik sistema
Ne glede na to, v kateri industriji delate, vaša zbirka podatkov vedno vsebuje pomembne informacije. To so lahko vaše stranke, bančni računi in gesla. Zlonamerni napadalci se zavedajo njihovega pomena in vrednosti. Razvijalci in skrbniki baz podatkov morajo poznati vsaj osnove, s katerimi se bodo srečali pri testih prodora, da lahko premagajo hekerje.