MySQL er et av de mest populære relasjonsdatabasehåndteringssystemene som er en jackpot for angripere som prøver å snike seg inn i databasene. En nyinstallert MySQL-databaseserver kan ha mange sårbarheter og smutthull. Siden datasikkerhet er av stor betydning, er det obligatorisk å forstå alle aspekter av MySQL-sikkerhet.

Denne artikkelen fokuserer på revisjonen og sikkerheten til MySQL-databasen din og gir ni tips for å styrke sikkerheten.

1. Unngå unødvendige privilegietilskudd

MySQL tillater flere rettighetsutsagn som når de tildeles unødvendig til en underprivilegert bruker kan føre til lesing/skriving av filer og undergraving av andre brukerprivilegier. Noen av de mest potensielt risikable privilegieerklæringene er FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN, og så videre. Du kan lese mer om disse fra MySQL offisielle dokumentasjon. Ikke tilordne superbrukerprivilegier som FILE, GRANT, SUPER og PROCESS til ikke-administrative kontoer. Du kan tilbakekalle disse unødvendige tillatelsene på globalt, database- og tabellnivå som følger:

instagram viewer
REVOKE ALL ON *.* FROM 'user_name'@'vert_name'; #Globale privilegier
REVOKE CREATE, DROP ON database_name.* FRA 'brukernavn'@'vertsnavn'; #Databaserettigheter
REVOKE INSERT, UPDATE, SLETTE ON database_name.table_name FRA 'brukernavn'@'vertsnavn'; #Bordprivilegier
skyllerettigheter;

2. Begrens ekstern pålogging

Fjerntilgang letter jobben for databaseadministratorer, men det risikerer serveren for potensielle sårbarheter og utnyttelser. Du kan deaktivere fjerntilgang for alle typer MySQl-brukerkontoer ved å legge til en hopp over nettverksvariabel til hovedkonfigurasjonsfilen og starte tjenesten på nytt.

[mysqld]
hoppe over nettverk
sudo service mysql omstart

På samme måte må du deaktivere root-kontotilgang, om ikke alt for å begrense ekstern pålogging for root-kontoen. Denne forholdsregelen forhindrer bruteforcing av MySQL-rotkontoen.

mysql> slett fra mysql.user der user='root' og vert ikke er med ('localhost', '127.0.0.1', '::1'); mysql> flush-privilegier; 

3. Deaktiver funksjoner (load_file, outfile, dumpfile)

En annen forholdsregel for å sikre MySQL mot lokal filinjeksjon er å deaktivere funksjoner som kun er tilgjengelige via FILE grant-privilegiet. FILEN er et alternativ som gjør det mulig for brukere med lav privilegium med globale kommandoalternativer å lese eller skrive filer på serveren.

  • last_fil

load_file-funksjonen laster filinnholdet fra serveren som en streng. For eksempel vil følgende kommando laste alt innhold fra /etc/passwd fil som følger:

velg load_file('/etc/passwd')
  • utfil

På samme måte skriver utfilfunksjonen innhold til de lokale serverfilene. Angripere kan bruke denne funksjonen til å skrive en nyttelast til filen på serveren, som følger:

velg 'Local File SQL Injection' inn i outfilen '/tmp/file.txt';
cat /tmp/fil.txt

Produksjon:

Lokal fil SQL-injeksjon
  • dumpfil

Denne funksjonen bruker valgårsaken til å skrive til filen uten å returnere utdata til skjermen.

cat /tmp/fil.txt
velg 'Hei verden!' inn i dumpfilen '/tmp/world';

Produksjon:

Søk OK, 1 rad påvirket (0,001 sek)

Du kan deaktivere disse funksjonene ved å tilbakekalle FILE-privilegiet som følger:

tilbakekall FIL på *.* fra 'brukernavn'@'localhost';

I slekt: En nybegynnerveiledning til metasploit i Kali Linux (med praktiske eksempler)

4. Deaktiver standardport

Vi vet at MySQL-tjenester kjører på port 3306, og angripere skanner portene for å sjekke tjenester som kjører på nettverket. For å legge til sikkerhet ved uklarhet og endre standard MySQL-port ved å redigere portsystemvariabelen i hovedkonfigurasjonsfilen, må du skrive inn følgende:

vim /etc/mysql/my.cnf
port=XXXX
sudo service mysql omstart

5. Unngå jokertegn i kontonavn

Kontonavn i MySQL består av to deler som er en bruker og et vertsnavn "brukernavn"@"vertsnavn". Det gjør det mulig for administratoren å opprette kontoer for brukere med samme navn som kobler til fra forskjellige verter. Vertsdelen av et kontonavn tillater imidlertid jokertegn-konvensjoner som kan være et tilgangspunkt til databasen fra hvor som helst.

Den valgfrie bruken av vertsnavnet eller IP-adresseverdien tilsvarer 'brukernavn'@'%' der % samsvarer med MySQL-mønsteret som samsvarer med LIKE-operasjonen, og % betyr et hvilket som helst vertsnavn. I mellomtiden betyr tilgang fra '192.168.132.%' ethvert forsøk fra klasse C-nettverket. Dessuten kan hvem som helst få tilgang til databasen ved å navngi vertsdelen som '192.18.132.mysql.com'.

For å unngå slike forsøk tillater MySQL å definere en nettmaske med vertsverdien for å identifisere nettverksbitene til en IP-adresse:

client-ip_add & nettmaske = vertsnavn

Syntaksen for å lage et vertsnavn er host_ip/netmask:

LAG BRUKER 'jhon'@'192.168.132.0/255.255.255.0'; 

Vertsverdien ovenfor aktiverer brukeren john for å få tilgang til databasen fra hvilken som helst IP innenfor området 192.168.132.0-192.168.132.255. På samme måte vil vertsverdiene 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 tillate verter fra klasse A- og B-nettverk. Mens 192.168.132.5 bare vil tillate tilgang fra den spesifikke IP-en.

6. Deaktiver eksplisitt tilgang

Brukernavnet i MySQL er enten et navn som databasene aksepterer innkommende tilkoblinger med eller et tomt brukernavn "@"vertsnavn" som oppretter en anonym bruker. Tilstedeværelsen av en anonym bruker kan imidlertid utnytte angripere til å få tilgang til databaseserveren. Dessuten oppretter MySQL-versjoner før MySQL 5.7 et anonymt sett med brukere, og installasjon etter versjonsoppgradering legger fortsatt til disse brukerne.

velg bruker, vert, passord fra mysql.user der bruker liker '';

Du kan merke deg at bruker- og passordkolonnene er tomme, og tilgangen er begrenset til localhost. Du vil imidlertid ikke at noen skal få tilgang til databasen. Bruk følgende kommando for å slette anonyme brukere:

slipp bruker " "@"localhost"
skyllerettigheter;

7. Angi ikke-root-konto som en eier eller gruppe

Å angi en ikke-root brukerkonto er ikke relatert til MySQL root-brukeren. MySQL-installasjon i Linux/Unix-systemer fra tar- og tar.gz-pakker lar serveren kjøre av enhver underprivilegert bruker. Dette er en sikkerhetsulempe fordi enhver bruker med FILE grant-alternativet kan redigere eller opprette filer på serveren. Den returnerer imidlertid en feil når en bruker prøver å få tilgang til den uten -bruker=root feil.

Du kan unngå dette ved å praktisere tommelfingerregelen for å få tilgang til databaseserveren som en separat Linux-bruker. For å kjøre mysqld som en vanlig Linux-bruker, stopp serveren og endre lese-/skrivetillatelser av MySQl-serveren til mysql, som følger:

chown -R mysql /path/to/mysql/datadir

Åpne MySQL-hovedkonfigurasjonsfilen, legg til en ny mysql-bruker og start tjenesten på nytt for å unngå unødvendig servertilgang:

vim /etc/mysql/my.cnf
bruker=mysql
sudo service mysql omstart

8. Angi passord for root-konto

MySQL-installasjon via et interaktivt skall i Debian-baserte Linux-distribusjoner oppretter root-brukerkontoen og ber deg angi et passord. Dette skjer imidlertid ikke i ikke-interaktiv skallinstallasjon og Red-Hat-baserte distribusjoner. Som nevnt ovenfor kan en ikke-root-bruker av en Linux-maskin få tilgang til mysql root-brukerkontoen ved å bruke -bruker=root alternativ. Du kan unngå det ved å angi passordet som følger:

sudo mysqladmin passord
vim /etc/mysql/my.cnf
passord=
sudo service mysql omstart

9. Sørg for datakryptering i transitt og i hvile

Standard ukryptert kommunikasjon mellom klienten og serveren utgjør en risiko for dataavskjæring av enhver mann i midten. Tilsvarende risikerer ukrypterte brukerdata i databasen brukerens konfidensialitet og integritet. MySQL støtter datakryptering mellom klienten og serveren over TLS/SSL-protokollen, mens ukryptert kommunikasjon kun er akseptabelt når begge kommuniserende parter er innenfor samme nettverk.

MySQL støtter nå kryptering i hvile for å beskytte data lagret på serveren selv når systemet brytes.

MySQL avansert sikkerhet: Beskytt deg selv

Å sikre at du har det høyeste nivået av online sikkerhet er avgjørende, og denne artikkelen vil ha gitt deg noen nyttige tips i riktig retning. Trinnene ovenfor er nyttige for å sikre databaseserveren din, men det er også viktig å lære hvordan du tildeler minimumstillatelser til ikke-administrative brukere.

Nybegynnerveiledning for å skrive mySQL-databaseskjemaer

Lag din egen mySQL-database med bare et tekstredigeringsprogram og denne grunnleggende strukturoversikten, eller "skjema".

Les Neste

DelekvitringE-post
Relaterte temaer
  • Programmering
  • Sikkerhet
  • Programmering
  • Sikkerhetstips
  • Sikkerhet
Om forfatteren
Rumaisa Niazi (15 artikler publisert)

Rumaisa er frilansskribent ved MUO. Hun har brukt mange hatter, fra en matematiker til en informasjonssikkerhetsentusiast, og jobber nå som SOC-analytiker. Hennes interesser inkluderer å lese og skrive om nye teknologier, Linux-distribusjoner og alt rundt informasjonssikkerhet.

Mer fra Rumaisa Niazi

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!

Klikk her for å abonnere