MySQL er et af de mest populære relationelle databasestyringssystemer, der er en jackpot for angribere, der forsøger at snige sig ind i databaserne. En nyinstalleret MySQL-databaseserver kan have mange sårbarheder og smuthuller. Da datasikkerhed er af stor betydning, er det obligatorisk at forstå alle aspekter af MySQL-sikkerhed.
Denne artikel fokuserer på revision og sikkerhed af din MySQL-database og giver ni tips til at hærde dens sikkerhed.
1. Undgå unødvendige privilegiebevillinger
MySQL tillader flere privilegieerklæringer, som, når de unødigt tildeles en underprivilegeret bruger, kan føre til læsning/skrivning af filer og undergravning af andre brugerprivilegier. Nogle af de mest potentielt risikable privilegieerklæringer er FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN, og så videre. Du kan læse mere om disse fra MySQL officielle dokumentation. Tildel derfor ikke superbrugerrettigheder som FILE, GRANT, SUPER og PROCESS til ikke-administrative konti. Du kan tilbagekalde disse unødvendige globale tilladelser, database- og tabeltilladelser som følger:
TILBAGE ALLE PÅ *.* FRA 'brugernavn'@'værtsnavn'; #Globale privilegier
TILBAGE OPRET, SLIP PÅ databasenavn.* FRA 'brugernavn'@'værtsnavn'; #Databaserettigheder
TILBAGE INDSÆT, OPDATERING, SLET PÅ databasenavn.tabelnavn FRA 'brugernavn'@'værtsnavn'; #Tabelprivilegier
skylleprivilegier;
2. Begræns fjernlogin
Fjernadgang letter jobbet for databaseadministratorer, men det risikerer serveren for potentielle sårbarheder og udnyttelser. Du kan deaktivere fjernadgang for alle typer MySQl-brugerkonti ved at tilføje en spring-netværksvariabel til hovedkonfigurationsfilen og genstarte tjenesten.
[mysqld]
skip-netværk
sudo service mysql genstart
På samme måde skal du deaktivere root-kontoadgang, hvis ikke alle, for at begrænse fjernlogin til root-konto. Denne forholdsregel forhindrer bruteforcing af MySQL root-kontoen.
mysql> slet fra mysql.user hvor user='root' og vært ikke er med ('localhost', '127.0.0.1', '::1'); mysql> flush privilegier;
3. Deaktiver funktioner (load_file, outfile, dumpfile)
En anden forholdsregel for at sikre MySQL mod lokal filinjektion er at deaktivere funktioner, der kun er tilgængelige via FILE-tildelingsprivilegiet. FILE er en mulighed, der gør det muligt for lavprivilegerede brugere med globale kommandomuligheder at læse eller skrive filer på serveren.
- indlæs_fil
Funktionen load_file indlæser filindholdet fra serveren som en streng. For eksempel vil følgende kommando indlæse alt indhold fra /etc/passwd fil som følger:
vælg load_file('/etc/passwd')
- outfile
På samme måde skriver outfile-funktionen indhold til de lokale serverfiler. Angribere kan bruge denne funktion til at skrive en nyttelast til filen på serveren, som følger:
vælg 'Local File SQL Injection' i outfilen '/tmp/file.txt';
kat /tmp/fil.txt
Produktion:
Lokal fil SQL-injektion
- dumpfil
Denne funktion bruger valgårsagen til at skrive til filen uden at returnere output til skærmen.
kat /tmp/fil.txt
vælg 'Hej verden!' ind i dumpfilen '/tmp/world';
Produktion:
Forespørgsel OK, 1 række påvirket (0,001 sek.)
Du kan deaktivere disse funktioner ved at tilbagekalde FILE-privilegiet som følger:
tilbagekald FIL på *.* fra 'brugernavn'@'localhost';
Relaterede: En begyndervejledning til Metasploit i Kali Linux (med praktiske eksempler)
4. Deaktiver standardport
Vi ved, at MySQL-tjenester kører på port 3306, og angribere scanner portene for at kontrollere tjenester, der kører på netværket. For at tilføje sikkerhed ved uklarhed og ændre standard MySQL-porten ved at redigere portsystemvariablen i dens hovedkonfigurationsfil, skal du indtaste følgende:
vim /etc/mysql/my.cnf
port=XXXX
sudo service mysql genstart
5. Undgå jokertegn i kontonavne
Kontonavne i MySQL består af to dele, der er en bruger og et værtsnavn "brugernavn"@"værtsnavn". Det gør det muligt for administratoren at oprette konti til brugere med samme navn, som forbinder fra forskellige værter. Værtsdelen af et kontonavn tillader dog jokertegn-konventioner, der kan være et adgangspunkt til databasen hvor som helst.
Den valgfri brug af værtsnavnet eller IP-adresseværdien svarer til 'brugernavn'@'%', hvor % matcher MySQL-mønsteret, der matcher LIKE-operationen, og % betyder et hvilket som helst værtsnavn. I mellemtiden betyder adgang fra '192.168.132.%' ethvert forsøg fra klasse C-netværket. Desuden kan alle få adgang til databasen ved at navngive værtsdelen som '192.18.132.mysql.com'.
For at undgå sådanne forsøg tillader MySQL at definere en netmaske med værtsværdien for at identificere netværksbits af en IP-adresse:
client-ip_add & netmask = værtsnavn
Syntaksen til at oprette et værtsnavn er host_ip/netmask:
OPRET BRUGER 'jhon'@'192.168.132.0/255.255.255.0';
Ovenstående værtsværdi aktiverer brugeren John for at få adgang til databasen fra enhver IP inden for området 192.168.132.0-192.168.132.255. På samme måde vil værtsværdierne 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 tillade værter fra klasse A- og B-netværkene. Mens 192.168.132.5 kun vil tillade adgang fra den specifikke IP.
6. Deaktiver eksplicit adgang
Brugernavnet i MySQL er enten et navn, som databaserne accepterer indgående forbindelser med, eller et tomt brugernavn "@"værtsnavn", der opretter en anonym bruger. Tilstedeværelsen af en anonym bruger kan dog udnytte angribere til at få adgang til databaseserveren. Desuden opretter MySQL-versioner før MySQL 5.7 et anonymt sæt brugere, og installation efter versionsopgradering tilføjer stadig disse brugere.
vælg bruger, vært, adgangskode fra mysql.user, hvor brugeren kan lide '';
Du kan bemærke, at bruger- og adgangskodekolonnerne er tomme, og adgangen er begrænset til localhost. Du ønsker dog ikke, at nogen skal have adgang til databasen. Brug følgende kommando til at slette anonyme brugere:
drop bruger " "@"localhost"
skylleprivilegier;
7. Indstil ikke-root-konto som en ejer eller gruppe
Indstilling af en ikke-rootbrugerkonto er ikke relateret til MySQL-rootbrugeren. MySQL-installation i Linux/Unix-systemer fra tar- og tar.gz-pakker tillader serveren at køre af enhver underprivilegeret bruger. Dette er en sikkerhedsulempe, fordi enhver bruger med muligheden FILE grant kan redigere eller oprette filer på serveren. Det returnerer dog en fejl, når en bruger forsøger at få adgang til det uden -bruger=rod fejl.
Du kan undgå dette ved at øve tommelfingerreglen for at få adgang til databaseserveren som en separat Linux-bruger. For at køre mysqld som en almindelig Linux-bruger skal du stoppe serveren og ændre læse/skrive tilladelser af MySQl-serveren til mysql, som følger:
chown -R mysql /sti/to/mysql/datadir
Åbn MySQL-hovedkonfigurationsfilen, tilføj en ny mysql-bruger, og genstart tjenesten for at undgå unødvendig serveradgang:
vim /etc/mysql/my.cnf
bruger=mysql
sudo service mysql genstart
8. Indstil adgangskode til root-konto
MySQL-installation via en interaktiv skal i Debian-baserede Linux-distributioner opretter root-brugerkontoen og beder dig om at angive en adgangskode. Dette sker dog ikke i ikke-interaktiv skalinstallation og Red-Hat-baserede distributioner. Som nævnt ovenfor kan en ikke-root-bruger af en Linux-maskine få adgang til mysql root-brugerkontoen ved at bruge -bruger=rod mulighed. Det kan du undgå ved at indstille adgangskoden som følger:
sudo mysqladmin adgangskode
vim /etc/mysql/my.cnf
adgangskode=
sudo service mysql genstart
9. Sørg for datakryptering i transit og i hvile
Den ukrypterede standardkommunikation mellem klienten og serveren udgør en risiko for dataopsnapning af enhver mand i midten. Tilsvarende risikerer ukrypterede brugerdata i databasen brugerens fortrolighed og integritet. MySQL understøtter datakryptering mellem klienten og serveren over TLS/SSL-protokol, mens ukrypteret kommunikation kun er acceptabel, når begge kommunikerende parter er inden for samme netværk.
MySQL understøtter nu kryptering i hvile for at beskytte data, der er lagret på serveren, selv når systemet er brudt.
MySQL Advanced Security: Beskyt dig selv
Det er afgørende at sikre, at du har det højeste niveau af onlinesikkerhed, og denne artikel vil have givet dig nogle nyttige tips i den rigtige retning. Ovenstående trin er nyttige til at sikre din databaseserver, men det er også vigtigt at lære, hvordan man tildeler minimumstilladelser til ikke-administrative brugere.
Opret din egen mySQL-database med kun en teksteditor og denne grundlæggende strukturoversigt eller "skema".
Læs Næste
- Programmering
- Sikkerhed
- Programmering
- Sikkerhedstips
- Sikkerhed
Rumaisa er freelanceskribent på MUO. Hun har båret mange hatte, fra en matematiker til en informationssikkerhedsentusiast, og arbejder nu som SOC-analytiker. Hendes interesser inkluderer at læse og skrive om nye teknologier, Linux-distributioner og alt omkring informationssikkerhed.
Abonner på vores nyhedsbrev
Tilmeld dig vores nyhedsbrev for tekniske tips, anmeldelser, gratis e-bøger og eksklusive tilbud!
Klik her for at abonnere