Læsere som dig hjælper med at støtte MUO. Når du foretager et køb ved hjælp af links på vores websted, kan vi optjene en affiliate-kommission. Læs mere.

Især begynder-penetrationstestere lægger mindre vægt på databasesikkerhed generelt. En applikation uden en databasekonfiguration og sikkerhedstest kan ikke være sikker. Du bruger måske allerede MySQL-software, et databasestyringssystem, så hvordan kan du gøre det mere sikkert? Her er syv trin, du skal følge.

1. Brug SSH Tunneling i stedet for fjernforbindelse

MySQL-tjenesten kører som standard på port 3306. Når du installerer MySQL, vil du se, at port 3306 er i lyttetilstand for alle forbindelser. Som det står, er MySQL-porten åben for omverdenen. Det er derfor, du skal indstille MySQL-tjenesten til kun at lytte til den lokale adresse.

Da servere normalt kører på en Linux-distribution, er eksemplerne nedenfor baseret på en Debian-distribution. Filen du skal bruge til SSH-tunneling i stedet for fjernforbindelse og for at lukke standardporten til omverdenen er

instagram viewer
/etc/mysql/my.cnf. I denne fil skal du åbne et felt kaldet [mysqld] og skriv følgende kommando:

[mysqld]
binde-adresse=127.0.0.1

Efter denne proces, glem ikke at gemme denne fil og genstarte tjenesten med følgende kommando:

sudo systemctl genstart mysqld
# eller
sudosystemctlgenstartmariadb.service

Med dette vil MySQL-tjenesten kun lytte til den lokale adresse.

Hvis du bruger MariaDB, kan du også undersøge /etc/mysql/mariadb.conf.d/50-server.cnf og tjek om der er en definition for binde-adresse.

Nu hvor du har indstillet bindingsadressen til 127.0.0.1, som er localhost, kan du køre en Nmap-scanning og kontrollere outputtet:

Du kan se MySQL-porten, da 127.0.0.1 repræsenterer den lokale vært, du ser. Du kan prøve at ændre bindingsadressen igen for at sikre, at dette virker:

[mysqld]
binde-adresse=127.5.5.1

Gem derefter /etc/mysql/my.cnf fil og genstart MySQL-tjenesten. Hvis du udfører en Nmap-scanning igen på dette tidspunkt, bør du ikke se denne bindeadresse på localhost.

Når du ved, at dette virker, skal du gå tilbage til indstillingerne fra første trin og indstille bindeadressen tilbage til 127.0.0.1 og gemme igen.

2. Konfigurer en lokal filadgangsbarriere

MySQL kan kommunikere med det lokale filsystem. Med forespørgsler kan du se indholdet af en tekst i det lokale filsystem eller brænde forespørgselsresultatet til en disk. For at forhindre, at ondsindede angribere bruger denne funktion, skal du forhindre MySQL i at kommunikere med det lokale filsystem.

Du kan bruge en funktion kaldet lokal-infil til at tage forholdsregler. Forestil dig for eksempel, at du har en fil med navnet "/etc/secretfile.txt", og du har en adgangskode i denne fil. Hvis værdien af ​​funktionen local-infile i din /etc/mysql/my.cnf fil er 1, så er adgangen åben. Så du kan få adgang til filen secretfile.txt.

Værdien af ​​funktionen lokal-infil er 1. Genstart MySQL-databasen for at ændringerne kan finde sted. Forbind nu til MySQL med følgende kommando og kontroller, om du kan se filen secretfile.txt:

VÆLGLOAD_FILE("/etc/secretfile.txt");

Det er ikke svært at fange oplysningerne i enhver fil på din computer.

For at løse dette problem skal du ændre local-infile-værdien i din /etc/mysql/my.cnf-fil som følger:

[mysqld]
lokal-infil=0

Genstart MySQL-tjenesten. Genopret forbindelse til MySQL og gentag det forrige trin; du burde ikke længere kunne se filens indhold.

Hvis brugere ikke allerede har læse- og skrivetilladelser på lokale filer, vil de ikke kunne se denne fil. Det er dog stadig noget du bør tjekke i penetrationstest og databasesikkerhed.

3. Indstil applikationsbrugere og adgangskoder

Databasestyringsbrugeren og MySQL-brugeren, der får adgang til databasen, skal være forskellige fra hinanden. Med andre ord er det ekstremt farligt at forbinde applikationer til MySQL med root-brugere. Hvis det er muligt, skal du definere brugerne af applikationer, der ikke fungerer OPDATERING eller INDSÆT handlinger separat.

En anden ting at overveje på dette tidspunkt er brugeradgangskoder. Som i næsten alle felter skal adgangskoder til MySQL-brugere være komplekse og uforudsigelige. Hvis du har brug for hjælp til dette, er der gode adgangskodegeneratorsystemer, du kan bruge.

4. Slet anonyme brugere

Når du installerer MySQL som standard, opstår der nogle anonyme brugere. Du skal slette disse og blokere deres adgang. For en sikker MySQL-server bør du ikke få noget svar som et resultat af følgende forespørgsel:

VÆLG * FRA mysql.user HVORBRUGER="";
# Eksempel output
Tom sæt (0,001 sek.)

Hvis der er resultater, bør du slette disse anonyme brugere. For eksempel, hvis der var en anonym konto ved navn "anonuser" i et miljø ved navn "localhost", skulle du bruge en kommando som følgende for at slette denne konto:

DROP BRUGER 'anonuser'@'lokal vært';

5. Tjek MySQL Local File Permissions

Forestil dig, at du er databaseadministrator, og du vil vende tilbage til data fra en uge siden. I dette tilfælde skal du muligvis oprette forbindelse til databaseserveren via SSH og ændre de MySQL-filer, du ønsker. Mens du gjorde dette, har du muligvis brugt rodbrugerrettighederne i Linux; det vil sige, at datafilernes ejerskab og tilladelser kan ændres. Det ønsker du ikke.

Se på mappen /var/lib/mysql for at kontrollere de tildelte tilladelser. Det du skal tjekke her er, om ejeren af ​​alle filer er MySQL-brugeren. Følgende kommando vil gøre tricket:

sudo ls -al /var/lib/mysql

Læse- og skrivetilladelserne til filerne bør kun være for MySQL-brugeren. Ingen andre brugere bør have nogen tilladelser.

6. Brug MySQL SSL

At tænke på et konkret eksempel er den bedste måde at forstå MySQL- og SSL-brug på. Forestil dig, at en af ​​serverne i ABC-regionen, hvor der er mange forskellige servere, bliver overtaget af ondsindede hackere. Hackere vil udføre en intern scanning i ABC-regionen. På denne måde indsamler de information om serverne.

Hvis de opdager en MySQL-server under denne proces, kan de udføre en Man-in-the-Middle (MitM) angreb på målserveren, hvilket betyder, at de kan stjæle sessionsoplysningerne for applikationer og brugere, der forbinder til denne server. En af de bedste måder at undgå dette på er at aktiver SSL på MySQL-serveren.

7. Log- og historiefiler

Du bruger MySQL-logfiler til at analysere og finde fejl. Du kan redigere, hvor disse logfiler opbevares, ved at indtaste my.cnf som følger:

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

Du kan ændre mylogfiles navn eller placering, som du ønsker. Der er endnu en fil, du skal tjekke. Når du opretter forbindelse til MySQL-serveren i en Linux-terminal og skriver forskellige kommandoer, gemmes disse forespørgsler i filen mysql_history. Hvis du kører følgende kommando, kan du se de forespørgsler, du bruger, i MySQL-terminalen:

kat ~/.mysql_historie

Du er nødt til at slette indholdet af denne fil, hvis du ikke vil give oplysninger om, hvilken slags forespørgsler du laver inde på serveren. Brug følgende kommando til at slette indholdet af filen:

sudo ekko "gjort rent"> ~/.mysql_historie

Du kan derefter kontrollere filindholdet igen.

Den, der ejer databasen, ejer systemet

Uanset hvilken branche du arbejder i, indeholder din database altid vigtig information. Dette kan være dine kunder, bankkonti og adgangskoder. Ondsindede angribere kender vigtigheden og værdien af ​​disse. Databaseudviklere og -administratorer skal i det mindste kende det grundlæggende, som de vil støde på i penetrationstests for at slå hackerne.