Läsare som du hjälper till att stödja MUO. När du gör ett köp med hjälp av länkar på vår webbplats kan vi tjäna en affiliate-provision. Läs mer.

I synnerhet nybörjarpenetrationstestare lägger mindre vikt vid databassäkerhet i allmänhet. En applikation utan databaskonfiguration och säkerhetstester kan inte vara säker. Du kanske redan använder MySQL-programvara, ett databashanteringssystem, så hur kan du göra det säkrare? Här är sju steg du måste följa.

1. Använd SSH-tunneling istället för fjärranslutning

MySQL-tjänsten körs på port 3306 som standard. När du installerar MySQL ser du att port 3306 är i lyssningsläge för alla anslutningar. Som det ser ut är MySQL-porten öppen för omvärlden. Det är därför du bör ställa in MySQL-tjänsten så att den bara lyssnar på den lokala adressen.

Eftersom servrar vanligtvis körs på en Linux-distribution, är exemplen nedan baserade på en Debian-distribution. Filen du behöver använda för SSH-tunnling istället för fjärranslutning och för att stänga standardporten till omvärlden är

instagram viewer
/etc/mysql/my.cnf. I den här filen måste du öppna ett fält som heter [mysqld] och skriv följande kommando:

[mysqld]
binda-adress=127.0.0.1

Efter denna process, glöm inte att spara den här filen och starta om tjänsten med följande kommando:

sudo systemctl starta om mysqld
# eller
sudosystemctlomstartmariadb.service

Med detta kommer MySQL-tjänsten bara att lyssna på den lokala adressen.

Om du använder MariaDB kan du också undersöka /etc/mysql/mariadb.conf.d/50-server.cnf och kolla om det finns en definition för bind-adress.

Nu när du har ställt in bindningsadressen på 127.0.0.1, som är lokal värd, kan du köra en Nmap-skanning och kontrollera resultatet:

Du kan se MySQL-porten eftersom 127.0.0.1 representerar den lokala värd som du ser. Du kan försöka ändra bindningsadressen igen för att se till att detta fungerar:

[mysqld]
binda-adress=127.5.5.1

Spara sedan /etc/mysql/my.cnf fil och starta om MySQL-tjänsten. Om du gör en Nmap-skanning igen i detta skede bör du inte se denna bindningsadress på localhost.

När du vet att detta fungerar, gå tillbaka till inställningarna från det första steget och ställ tillbaka bindningsadressen till 127.0.0.1 och spara igen.

2. Konfigurera en lokal filåtkomstbarriär

MySQL kan kommunicera med det lokala filsystemet. Med frågor kan du se innehållet i en text i det lokala filsystemet eller bränna frågeresultatet till en disk. För att förhindra att illvilliga angripare använder den här funktionen måste du förhindra MySQL från att kommunicera med det lokala filsystemet.

Du kan använda en funktion som kallas lokal-infil för att vidta försiktighetsåtgärder. Tänk dig till exempel att du har en fil som heter "/etc/secretfile.txt" och att du har ett lösenord i den här filen. Om värdet på funktionen local-infile i din /etc/mysql/my.cnf-fil är 1, är åtkomsten öppen. Så du kan komma åt filen secretfile.txt.

Värdet på lokal-infil-funktionen är 1. Starta om MySQL-databasen för att ändringarna ska ske. Anslut nu till MySQL med följande kommando och kontrollera om du kan se filen secretfile.txt:

VÄLJLOAD_FILE("/etc/secretfile.txt");

Det är inte svårt att fånga informationen i vilken fil som helst på din dator.

För att lösa det här problemet, ändra värdet för local-infile i filen /etc/mysql/my.cnf enligt följande:

[mysqld]
lokal-infil=0

Starta om MySQL-tjänsten. Återanslut till MySQL och upprepa föregående steg; du bör inte längre kunna se filens innehåll.

Om användare inte redan har läs- och skrivbehörigheter för lokala filer, kommer de inte att kunna se den här filen. Det är dock fortfarande något du bör kontrollera i penetrationstester och databassäkerhet.

3. Ställ in programanvändare och lösenord

Databashanteringsanvändaren och MySQL-användaren som kommer åt databasen måste skilja sig från varandra. Med andra ord är det extremt farligt att ansluta applikationer till MySQL med root-användare. Om möjligt, definiera användarna av applikationer som inte fungerar UPDATE eller INSERT operationer separat.

En annan sak att tänka på vid det här laget är användarlösenord. Som i nästan alla områden måste lösenord för MySQL-användare vara komplexa och oförutsägbara. Om du behöver hjälp med detta finns det bra lösenordsgeneratorsystem du kan använda.

4. Ta bort anonyma användare

När du installerar MySQL som standard uppstår vissa anonyma användare. Du måste ta bort dessa och blockera deras åtkomst. För en säker MySQL-server bör du inte få något svar som ett resultat av följande fråga:

VÄLJ * FRÅN mysql.user VARANVÄNDARE="";
# Exempel utgång
Tömma uppsättning (0,001 sek)

Om det finns några resultat bör du ta bort dessa anonyma användare. Till exempel, om det fanns ett anonymt konto med namnet "anonuser" i en miljö som heter "localhost", måste du använda ett kommando som följande för att ta bort det här kontot:

SLIPPA ANVÄNDARE 'anonuser'@'lokal värd';

5. Kontrollera MySQL Local File Permissions

Föreställ dig att du är databasadministratör och vill återgå till data från en vecka sedan. I det här fallet kan du behöva ansluta till databasservern via SSH och ändra de MySQL-filer du vill ha. Medan du gjorde detta kan du ha använt root-användarprivilegierna för Linux; det vill säga äganderätten och behörigheterna för datafilerna kan ändras. Det vill du inte.

Titta på katalogen /var/lib/mysql för att kontrollera de beviljade behörigheterna. Det du behöver kontrollera här är om ägaren till alla filer är MySQL-användaren. Följande kommando kommer att göra susen:

sudo ls -al /var/lib/mysql

Läs- och skrivbehörigheterna för filerna bör endast vara för MySQL-användaren. Inga andra användare ska ha några behörigheter.

6. Använd MySQL SSL

Att tänka på ett konkret exempel är det bästa sättet att förstå MySQL- och SSL-användning. Föreställ dig att en av servrarna i ABC-regionen, där det finns många olika servrar, tas över av illvilliga hackare. Hackare kommer att utföra en intern skanning i ABC-regionen. På så sätt samlar de in information om servrarna.

Om de upptäcker en MySQL-server under denna process kan de utföra en Man-in-the-Middle (MitM) attack mot målservern, vilket innebär att de kan stjäla sessionsinformationen för applikationer och användare som ansluter till denna server. Ett av de bästa sätten att undvika detta är att aktivera SSL på MySQL-servern.

7. Logg- och historikfiler

Du använder MySQL-loggar för att analysera och hitta fel. Du kan redigera var dessa loggar förvaras genom att ange my.cnf enligt följande:

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

Du kan ändra mylogfiles namn eller plats som du vill. Det finns ytterligare en fil du måste kontrollera. När du ansluter till MySQL-servern i en Linux-terminal och skriver olika kommandon, sparas dessa frågor i filen mysql_history. Om du kör följande kommando kan du se frågorna du använder i MySQL-terminalen:

cat ~/.mysql_history

Du måste ta bort innehållet i den här filen om du inte vill ge information om vilken typ av frågor du gör på servern. Använd följande kommando för att ta bort innehållet i filen:

sudo eko "rengöras"> ~/.mysql_history

Du kan sedan kontrollera filinnehållet igen.

Den som äger databasen äger systemet

Oavsett vilken bransch du arbetar i innehåller din databas alltid viktig information. Det kan vara dina kunder, bankkonton och lösenord. Skadliga angripare vet vikten och värdet av dessa. Databasutvecklare och administratörer måste åtminstone känna till grunderna som de kommer att stöta på i penetrationstester för att slå hackarna.