Etenkin aloittelevat penetraatiotestaajat painottavat vähemmän tietokannan turvallisuutta yleensä. Sovellus ilman tietokantakokoonpanoa ja suojaustestejä ei voi olla turvallinen. Saatat jo käyttää MySQL-ohjelmistoa, tietokannan hallintajärjestelmää, joten kuinka voit tehdä siitä turvallisemman? Tässä on seitsemän vaihetta, jotka sinun on noudatettava.
1. Käytä SSH-tunnelointia etäyhteyden sijaan
MySQL-palvelu toimii oletuksena portissa 3306. Kun asennat MySQL: n, näet, että portti 3306 on kuuntelutilassa kaikille yhteyksille. Nykyisellään MySQL-portti on avoin ulkomaailmalle. Siksi sinun tulee asettaa MySQL-palvelu kuuntelemaan vain paikallista osoitetta.
Koska palvelimia käytetään yleensä Linux-jakelussa, alla olevat esimerkit perustuvat Debian-jakeluun. Tiedosto, jota tarvitset SSH-tunnelointiin etäyhteyden sijaan ja oletusportin sulkemiseen ulkomaailmaan, on
/etc/mysql/my.cnf. Tässä tiedostossa sinun on avattava kenttä nimeltä [mysqld] ja kirjoita seuraava komento:[mysqld]
sitoa-osoite = 127.0.0.1
Tämän prosessin jälkeen älä unohda tallentaa tätä tiedostoa ja käynnistää palvelu uudelleen seuraavalla komennolla:
sudo systemctl käynnistä mysqld uudelleen
# tai
sudosystemctluudelleenkäynnistäämariadb.palvelu
Tällä MySQL-palvelu kuuntelee vain paikallista osoitetta.
Jos käytät MariaDB: tä, voit myös tutkia /etc/mysql/mariadb.conf.d/50-server.cnf ja tarkista, onko sille määritelmää sidos-osoite.
Nyt kun sidososoite on asetettu 127.0.0.1, joka on localhost, voit suorittaa Nmap-skannauksen ja tarkistaa tulosteen:
Voit nähdä MySQL-portin, koska 127.0.0.1 edustaa paikallista isäntäkonetta, jota näet. Voit yrittää muuttaa sidososoitetta uudelleen varmistaaksesi, että tämä toimii:
[mysqld]
sitoa-osoite = 127.5.5.1
Tallenna sitten /etc/mysql/my.cnf tiedosto ja käynnistä MySQL-palvelu uudelleen. Jos suoritat Nmap-skannauksen jälleen tässä vaiheessa, sinun ei pitäisi nähdä tätä sidososoitetta localhostissa.
Kun tiedät tämän toimivan, palaa asetuksiin ensimmäisestä vaiheesta ja aseta sidososoitteeksi takaisin 127.0.0.1 ja tallenna uudelleen.
2. Aseta paikallinen tiedostojen käytön esto
MySQL voi kommunikoida paikallisen tiedostojärjestelmän kanssa. Kyselyillä voit nähdä tekstin sisällön paikallisessa tiedostojärjestelmässä tai polttaa kyselyn tuloksen levylle. Estäksesi haitallisia hyökkääjiä käyttämästä tätä ominaisuutta, sinun on estettävä MySQL kommunikoimasta paikallisen tiedostojärjestelmän kanssa.
Voit käyttää toimintoa nimeltä local-infile ryhtyäksesi varotoimiin. Kuvittele esimerkiksi, että sinulla on tiedosto nimeltä "/etc/secretfile.txt" ja sinulla on salasana tässä tiedostossa. Jos /etc/mysql/my.cnf-tiedoston local-infile-funktion arvo on 1, käyttöoikeus on auki. Voit siis käyttää secretfile.txt-tiedostoa.
Local-infile-funktion arvo on 1. Käynnistä MySQL-tietokanta uudelleen, jotta muutokset tapahtuvat. Yhdistä nyt MySQL: ään seuraavalla komennolla ja tarkista, näetkö secretfile.txt-tiedoston:
VALITSELOAD_FILE("/etc/salainen tiedosto.txt");
Tietojen tallentaminen mihin tahansa tietokoneesi tiedostoon ei ole vaikeaa.
Ratkaise tämä ongelma muuttamalla /etc/mysql/my.cnf-tiedoston local-infile-arvoa seuraavasti:
[mysqld]
paikallinen-tiedosto=0
Käynnistä MySQL-palvelu uudelleen. Yhdistä uudelleen MySQL: ään ja toista edellinen vaihe; sinun ei pitäisi enää nähdä tiedoston sisältöä.
Jos käyttäjillä ei vielä ole luku- ja kirjoitusoikeuksia paikallisille tiedostoille, he eivät voi nähdä tätä tiedostoa. Se on kuitenkin asia, jota sinun tulee tarkistaa läpäisytesteissä ja tietokannan suojauksessa.
3. Aseta sovelluksen käyttäjät ja salasanat
Tietokannan hallintakäyttäjän ja tietokantaan käyttävän MySQL-käyttäjän on oltava erilaisia. Toisin sanoen sovellusten yhdistäminen MySQL: ään root-käyttäjien kanssa on erittäin vaarallista. Jos mahdollista, määritä sellaisten sovellusten käyttäjät, jotka eivät toimi UPDATE tai INSERT -toiminnot erikseen.
Toinen huomioitava asia tässä vaiheessa ovat käyttäjien salasanat. Kuten lähes kaikilla aloilla, MySQL-käyttäjien salasanojen on oltava monimutkaisia ja arvaamattomia. Jos tarvitset apua tässä, voit käyttää upeita salasanan luontijärjestelmiä.
4. Poista nimettömät käyttäjät
Kun asennat MySQL: n oletusarvoisesti, joitain anonyymejä käyttäjiä esiintyy. Sinun on poistettava nämä ja estettävä niiden pääsy. Jos kyseessä on suojattu MySQL-palvelin, sinun ei pitäisi saada mitään vastausta seuraavan kyselyn seurauksena:
VALITSE * FROM mysql.user MISSÄKÄYTTÄJÄ="";
# Esimerkkilähtö
Tyhjä aseta (0,001 s)
Jos tuloksia on, poista nämä nimettömät käyttäjät. Jos esimerkiksi ympäristössä nimeltä "localhost" oli anonyymi tili nimeltä "anonuser", sinun on käytettävä seuraavanlaista komentoa tämän tilin poistamiseen:
PUDOTA KÄYTTÄJÄ 'anonuser'@'paikallinen isäntä';
5. Tarkista MySQL Local File Permissions
Kuvittele, että olet tietokannan järjestelmänvalvoja ja haluat palata viikon takaisiin tietoihin. Tässä tapauksessa saatat joutua muodostamaan yhteyden tietokantapalvelimeen SSH: n kautta ja muuttamaan haluamasi MySQL-tiedostot. Tätä tehdessäsi olet saattanut käyttää Linuxin pääkäyttäjän oikeuksia; eli datatiedostojen omistajuus ja käyttöoikeudet voivat muuttua. Et halua sitä.
Tarkista myönnetyt käyttöoikeudet hakemistosta /var/lib/mysql. Sinun on tarkistettava, onko kaikkien tiedostojen omistaja MySQL-käyttäjä. Seuraava komento tekee tempun:
sudo ls -al /var/lib/mysql
Tiedostojen luku- ja kirjoitusoikeudet tulee olla vain MySQL-käyttäjälle. Muilla käyttäjillä ei saa olla käyttöoikeuksia.
6. Käytä MySQL SSL: ää
Konkreettisen esimerkin ajatteleminen on paras tapa ymmärtää MySQL: n ja SSL: n käyttöä. Kuvittele, että yksi ABC-alueen palvelimista, jossa on monia erilaisia palvelimia, on ilkivaltaisten hakkereiden vallassa. Hakkerit suorittavat sisäisen skannauksen ABC-alueella. Tällä tavalla he keräävät tietoja palvelimista.
Jos he havaitsevat MySQL-palvelimen tämän prosessin aikana, he voivat suorittaa a Man-in-the-Middle (MitM) -hyökkäys kohdepalvelimeen, mikä tarkoittaa, että he voivat varastaa tähän palvelimeen yhteyden muodostavien sovellusten ja käyttäjien istuntotiedot. Yksi parhaista tavoista välttää tämä on Ota SSL käyttöön MySQL-palvelimella.
7. Loki- ja historiatiedostot
Käytät MySQL-lokeja virheiden analysointiin ja etsimiseen. Voit muokata lokien säilytyspaikkaa kirjoittamalla my.cnf seuraavasti:
# /etc/mysql/my.cnf
[mysqld]
Hirsi =/var/Hirsi/mylogfiles
Voit muuttaa mylog-tiedostojen nimeä tai sijaintia haluamallasi tavalla. On vielä yksi tiedosto, joka sinun on tarkistettava. Kun muodostat yhteyden MySQL-palvelimeen Linux-päätteessä ja kirjoitat erilaisia komentoja, nämä kyselyt tallennetaan mysql_history-tiedostoon. Jos suoritat seuraavan komennon, voit nähdä käyttämäsi kyselyt MySQL-päätteessä:
cat ~/.mysql_history
Sinun on poistettava tämän tiedoston sisältö, jos et halua antaa tietoja siitä, millaisia kyselyitä teet palvelimen sisällä. Käytä seuraavaa komentoa poistaaksesi tiedoston sisällön:
sudo echo "puhdistettu"> ~/.mysql_history
Voit sitten tarkistaa tiedoston sisällön uudelleen.
Kuka omistaa tietokannan, omistaa järjestelmän
Ei ole väliä millä alalla työskentelet, tietokanta sisältää aina tärkeitä tietoja. Nämä voivat olla asiakkaitasi, pankkitilejäsi ja salasanojasi. Haitalliset hyökkääjät tietävät näiden tärkeyden ja arvon. Tietokannan kehittäjien ja ylläpitäjien on tiedettävä ainakin perusasiat, jotka he kohtaavat tunkeutumistesteissä voittaakseen hakkerit.