Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

Početnici u ispitivanju penetracije posebno manje naglašavaju sigurnost baze podataka općenito. Aplikacija bez konfiguracije baze podataka i sigurnosnih testova ne može biti sigurna. Možda već koristite MySQL softver, sustav za upravljanje bazom podataka, pa kako ga možete učiniti sigurnijim? Evo sedam koraka koje trebate slijediti.

1. Koristite SSH tuneliranje umjesto daljinske veze

MySQL usluga radi na portu 3306 prema zadanim postavkama. Kada instalirate MySQL, vidjet ćete da je port 3306 u modu slušanja za sve veze. Kako stoji, MySQL port otvoren je vanjskom svijetu. Zato biste trebali postaviti MySQL uslugu da sluša samo lokalnu adresu.

Budući da se poslužitelji obično pokreću na distribuciji Linuxa, primjeri u nastavku temelje se na distribuciji Debiana. Datoteka koju trebate koristiti za SSH tuneliranje umjesto daljinske veze i za zatvaranje zadanog porta prema vanjskom svijetu je

instagram viewer
/etc/mysql/my.cnf. U ovoj datoteci potrebno je otvoriti polje tzv [mysqld] i napišite sljedeću naredbu:

[mysqld]
vezati-adresa=127.0.0.1

Nakon ovog postupka, ne zaboravite spremiti ovu datoteku i ponovno pokrenuti uslugu sljedećom naredbom:

sudo systemctl ponovno pokrenite mysqld
# ili
sudosystemctlponovno pokretanjemariadb.servis

Uz to, MySQL usluga će slušati samo lokalnu adresu.

Ako koristite MariaDB, također možete ispitati /etc/mysql/mariadb.conf.d/50-server.cnf i provjerite postoji li definicija za vezana adresa.

Sada kada imate adresu vezanja postavljenu na 127.0.0.1, što je lokalni host, možete pokrenuti Nmap skeniranje i provjeriti izlaz:

Možete vidjeti MySQL port jer 127.0.0.1 predstavlja lokalni host koji vidite. Možete ponovno pokušati promijeniti adresu povezivanja kako biste bili sigurni da ovo radi:

[mysqld]
vezati-adresa=127.5.5.1

Zatim spremite /etc/mysql/my.cnf datoteku i ponovno pokrenite MySQL uslugu. Ako izvršite Nmap skeniranje opet u ovoj fazi, ne biste trebali vidjeti ovu adresu vezanja na lokalnom hostu.

Kad budete sigurni da ovo radi, vratite se na postavke iz prvog koraka i vratite adresu povezivanja na 127.0.0.1 i ponovno spremite.

2. Postavite lokalnu barijeru pristupa datoteci

MySQL može komunicirati s lokalnim datotečnim sustavom. Pomoću upita možete vidjeti sadržaj teksta u lokalnom datotečnom sustavu ili rezultat upita snimiti na disk. Kako biste spriječili zlonamjerne napadače koji koriste ovu značajku, morate spriječiti MySQL da komunicira s lokalnim datotečnim sustavom.

Za poduzimanje mjera opreza možete koristiti funkciju koja se zove lokalna datoteka. Na primjer, zamislite da imate datoteku pod nazivom "/etc/secretfile.txt" i da imate lozinku u ovoj datoteci. Ako je vrijednost funkcije local-infile u vašoj datoteci /etc/mysql/my.cnf 1, tada je pristup otvoren. Tako da možete pristupiti datoteci secretfile.txt.

Vrijednost funkcije local-infile je 1. Ponovno pokrenite MySQL bazu podataka kako bi se promjene dogodile. Sada se spojite na MySQL sljedećom naredbom i provjerite vidite li datoteku secretfile.txt:

IZABERILOAD_FILE("/etc/secretfile.txt");

Nije teško uhvatiti podatke u bilo koju datoteku na vašem računalu.

Da biste riješili ovaj problem, promijenite vrijednost lokalne datoteke u datoteci /etc/mysql/my.cnf na sljedeći način:

[mysqld]
lokalni-infile=0

Ponovno pokrenite MySQL uslugu. Ponovno se spojite na MySQL i ponovite prethodni korak; više ne biste trebali moći vidjeti sadržaj datoteke.

Ako korisnici već nemaju dopuštenja za čitanje i pisanje na lokalnim datotekama, neće moći vidjeti ovu datoteku. Međutim, to je još uvijek nešto što biste trebali provjeriti u testovima prodora i sigurnosti baze podataka.

3. Postavite korisnike i lozinke aplikacije

Korisnik za upravljanje bazom podataka i MySQL korisnik koji pristupa bazi moraju se međusobno razlikovati. Drugim riječima, povezivanje aplikacija na MySQL s root korisnicima iznimno je opasno. Ako je moguće, definirajte korisnike aplikacija koje ne rade Operacije UPDATE ili INSERT odvojeno.

Još jedna stvar koju treba razmotriti u ovom trenutku su korisničke lozinke. Kao u gotovo svakom području, lozinke za MySQL korisnike moraju biti složene i nepredvidive. Ako vam je potrebna pomoć s ovim, postoje odlični sustavi za generiranje lozinki koje možete koristiti.

4. Brisanje anonimnih korisnika

Kada instalirate MySQL prema zadanim postavkama, pojavljuju se neki anonimni korisnici. Morate ih izbrisati i blokirati im pristup. Za siguran MySQL poslužitelj ne biste trebali dobiti nikakav odgovor kao rezultat sljedećeg upita:

IZABERI * IZ mysql.korisnik GDJEKORISNIK="";
# Primjer izlaza
Prazan postaviti (0,001 s)

Ako ima ikakvih rezultata, trebali biste izbrisati ove anonimne korisnike. Na primjer, ako je postojao anonimni račun pod nazivom "anonuser" u okruženju pod nazivom "localhost", morali biste upotrijebiti naredbu poput sljedeće da biste izbrisali ovaj račun:

ISPUSTI KORISNIKA 'anonuser'@'lokalni domaćin';

5. Provjerite MySQL dopuštenja za lokalne datoteke

Zamislite da ste administrator baze podataka i želite se vratiti na podatke od prije tjedan dana. U ovom slučaju, možda ćete se morati spojiti na poslužitelj baze podataka putem SSH-a i promijeniti MySQL datoteke koje želite. Dok ste to radili, možda ste koristili root korisničke povlastice Linuxa; to jest, vlasništvo i dopuštenja podatkovnih datoteka mogu se promijeniti. Ne želiš to.

Pogledajte direktorij /var/lib/mysql da provjerite dodijeljene dozvole. Ovdje morate provjeriti je li vlasnik svih datoteka MySQL korisnik. Sljedeća naredba će poslužiti:

sudo ls -al /var/lib/mysql

Dopuštenja za čitanje i pisanje datoteka trebaju biti samo za MySQL korisnika. Nijedan drugi korisnik ne bi trebao imati nikakva dopuštenja.

6. Koristite MySQL SSL

Razmišljanje o konkretnom primjeru najbolji je način za razumijevanje korištenja MySQL-a i SSL-a. Zamislite da jedan od poslužitelja u ABC regiji, gdje postoji mnogo različitih poslužitelja, preuzmu zlonamjerni hakeri. Hakeri će izvršiti interno skeniranje u ABC regiji. Na taj način prikupljaju informacije o poslužiteljima.

Ako otkriju MySQL poslužitelj tijekom ovog procesa, mogu izvesti a Man-in-the-Middle (MitM) napad na ciljni poslužitelj, što znači da mogu ukrasti podatke o sesiji aplikacija i korisnika koji se spajaju na ovaj poslužitelj. Jedan od najboljih načina da se to izbjegne je omogućiti SSL na MySQL poslužitelju.

7. Datoteke dnevnika i povijesti

Za analizu i pronalaženje pogrešaka koristite MySQL zapisnike. Možete urediti gdje se ti zapisnici čuvaju unosom my.cnf na sljedeći način:

# /etc/mysql/my.cnf
[mysqld]
log =/var/log/mylogfiles

Možete promijeniti ime ili lokaciju mylogfilesa po želji. Postoji još jedna datoteka koju morate provjeriti. Kada se povežete na MySQL poslužitelj u Linux terminalu i upišete razne naredbe, ti se upiti spremaju u datoteku mysql_history. Ako pokrenete sljedeću naredbu, možete vidjeti upite koje koristite u MySQL terminalu:

mačka ~/.mysql_povijest

Morate izbrisati sadržaj ove datoteke ako ne želite davati informacije o tome kakve upite postavljate unutar poslužitelja. Koristite sljedeću naredbu za brisanje sadržaja datoteke:

sudo odjek "očišćeni"> ~/.mysql_povijest

Nakon toga možete ponovno provjeriti sadržaj datoteke.

Tko god posjeduje bazu podataka, posjeduje i sustav

Bez obzira u kojoj industriji radite, vaša baza podataka uvijek sadrži važne informacije. To mogu biti vaši klijenti, bankovni računi i lozinke. Zlonamjerni napadači znaju njihovu važnost i vrijednost. Programeri i administratori baza podataka moraju znati barem osnove s kojima će se susresti u testovima prodora kako bi pobijedili hakere.