MySQL po Įsilaužimo

Kaip jau žinome, įsilaužimų yra papraščiausiai per daug. Įvykus įsilaužimui esame pripratę matyti saugumo ekspertus, įmonės darbuotojus ir kitus žmones patariančius mums kaip geriau apsaugoti savo duomenis ir infrastruktūrą.

Dauguma programuotojų tai ir daro – mes saugome savo infrastruktūrą, galbūt pasamdome keletą informacijos saugumo ekspertų ir klausiame jų patarimų kaip apsaugoti savo infrastruktūrą, kaip išvengti įsilaužimų ateityje ir pan.

Bet ar mes kada pagalvojome kaip apsaugoti MySQL įvykus įsilaužimui? Šiame straipsnyje bandysime tai aptarti.

MySQL Saugumas 101

Kai kalbame apie su MySQL susijusias saugumo galimybes, turime platų pasirinkimo galimybių spektrą:

  1. Mūsų MySQL instaliacijos saugumas – ar mes pagalvojome apie savo MySQL serverių saugą diegdami MySQL pirmąjį kartą? Jei ne, kodėl?
  2. MySQL prieigos kontrolė – kiek vartotojų turėjo tam tikras privilegijas? Kiek vartotojų turėjo galimybę vykdyti administracines užklausas? Kada vartotojams buvo suteikta prieiga? Ar kada nors prieiga buvo atimta?
  3. Saugos įskiepių naudojimas – ar įdiegta MySQL sistema naudojo galimus saugos papildinius? Jei taip, kokius? Ar jie buvo atnaujinti?
  4. Bendras duomenų bazės saugumas – ar mes laikėmės bendros duomenų bazių saugumo praktikos? Ar leidome savo vartotojams pasirinkti stiprius ir saugius slaptažodžius? Ar mes stengėmės apsaugoti savo programinę įrangą nuo SQL injekcijos? Koks duomenų saugojimo variklis buvo naudojamas mūsų duomenų bazėje? Kodėl?
  5. Atsarginės kopijos – ar mes turėjome duomenų atsargines kopijas? Ar jos buvo atnaujinamos? Ar mes jas išbandėme?

Tai yra vieni pagrindinių klausimų į kuriuos turėtume atsakyti jei norime suprasti kaip geriau apsaugoti MySQL – dabar pažvelgsime į juos detaliau.

Įdiegtos MySQL Infrastruktūros Apsauga

Jei įtariame, kad mūsų informacinė sistema patyrė įsilaužimą, verta apsvarstyti ar neturėtume iš naujo įdiegti MySQL savo serveriuose – taip pat pravartu pradėti nuo paties MySQL įdiegimo apsaugojimo, kas reiškia, kad iš naujo įdiegę MySQL į savo serverį turėtume pažvelgti į šiuos dalykus:

  1. Priskirkite slaptažodį pagrindiniam (“root“) MySQL vartotojui – tai turėtų atrodyti akivaizdu, tačiau kartais pamirštame papraščiausius dalykus. Įsitikinkite, kad slaptažodį sudaro didžiosios, mažosios raidės, skaičiai ir specialieji simboliai.
  2. Apsvarstykite galimybę pakeisti MySQL įdiegimo aplanką – norėdami tai padaryti, galite nukopijuoti esamą MySQL duomenų bazės įdiegimo aplanką į naują vietą:
    sudo rsync -a /var/lib/mysql /mount/volume-01, tada į savo /var/lib/mysql/my.cnf failą įrašykite:
    socket=/mount/volume_01/mysql/mysql.sock
    datadir=/mount/volume_01/mysql. Pakeiskite direktoriją pagal savo nuožiūrą.
  3. Kintamasis secure_file_priv nustato katalogą, iš kurio leidžiama vykdyti importo ir eksporto operacijas – jei operacijos nekils iš šio katalogo, failai nebus importuoti į serverį.
    Norėdami nustatyti kintamąjį į norimą katalogą, eikite į /var/lib/mysql/my.cnf failą ir pakeiskite secure_file_priv kintamojo reikšmę į kitą katalogą.

Aukščiau aprašyti pagrindiniai MySQL apsaugojimo veiksmai turėtų padėti apsaugoti jūsų MySQL instaliaciją, tačiau tai yra tik viena MySQL saugumo dalis. Dabar pažiūrėsime į MySQL prieigos kontrolę.

MySQL Prieigos Kontrolė

Norėdami užtikrinti tinkamą MySQL prieigos kontrolę apribokite tam tikrų užklausų naudojimą tik tam tikriems vartotojams – pasverkite savo galimybes ir vartotojams suteikite prieigą tik prie tų užklausų, kurios yra būtinos tam, kad jie atliktų reikalingas užduotis.

Pavyzdžiui, jei vartotojui reikia tik skaityti iš duomenų bazės, jam turėtų būti leidžiama naudoti tik SELECT teiginius – vartotojams gali reikėti priskirti ir prieigą prie kelių užklausų, pavyzdžiui ALTER, UPDATE ir kitų.

Taip pat apsvarstykite galimybę atšaukti prieigą prie tam tikrų užklausų – jei matote, kad tam tikram vartotojui nebereikia pavyzdžiui, pridėti indeksų prie lentelės, apsvarstykite galimybę atšaukti jo prieigą prie ALTER užklausų ir pan.

MySQL Saugumo Įskiepiai

MySQL turi kelis papildinius, galinčius sustiprinti šios programinės įrangos saugumą. Visų jų neaptarsime, tačiau kai kurie iš jų yra:

  • Autentifikacijos įskiepiai – MySQL turi daugiau nei vieną tokį įskiepį – vienas iš jų yra SHA-256 įskiepis, kuris yra įmontuotas į MySQL ir kurį galima panaudoti sukuriant vartotoją ir nurodant, kad šis vartotojas turėtų autentifikuotis naudodamasis sha256_password įskiepiu:
    CREATE USER 'demo_user'@'localhost' IDENTIFIED WITH sha256_password;
    Next, set the old_passwords variable to 2 (this will cause the PASSWORD() function to use the SHA-256 hashing algorithm):
    SET old_passwords = 2;
    SET PASSWORD FOR 'demo_user'@localhost = PASSWORD('demo_password');
  • Slaptažodžių patvirtinimo papildinys – įskiepis validate_password yra skirtas pagerinti saugumą įgalinant slaptažodžio patikimumo testus.
    Norėdami naudoti šį įskiepį, įdiekite validate_password ir, jei reikia, pakeiskite validate_password_policy reikšmę (kintamąjį galima nustatyti į skaitines reiškmes 0, 1 ir 2 arba žodines reikšmes LOW, MEDIUM ir STRONG) – nustatymas LOW tikrina tik slaptažodžio stiprumą – pagal numatytuosius nustatymus slaptažodžiai turi būti bent 8 simbolių ilgio. Šis ilgis gali būti pakeistas pakeičiant kintamąjį validate_password_length. MEDIUM nustatymas prideda tam tikras sąlygas – slaptažodžiai turi būti sudaryti ne mažiau kaip iš vieno skaičiaus, mažosios, didžiosios raidės ir specialaus simbolio. Šias reikšmes taip pat galima pakeisti modifikuojant kintamuosius validate_password_number_count, validate_password_mixed_case_count ir validate_password_special_char_count. Nustatymas STRONG prideda sąlygą, kad slaptažodžiai, kurie yra sudaryti iš arba viršija 4 simbolius, neturi sutapti su žodžiais žodyne, kurį galima nurodyti modifikuojant kintamąjį validate_password_dictionary_file.
  • MySQL ugniasienė – MySQL taip pat turi MySQL ugniasienę nuo MySQL Enterprise 5.6.24. Ugniasienės tikslas yra leisti arba neleisti SQL užklausų vykdymą pagal “baltojo sąrašo” (angl. whitelist) įvesties tikrinimą. Kiekviena ugniasienėje esanti paskyra turi savo leidžiamų teiginių sąrašą – visi kiti teiginiai yra blokuojami.
  • MySQL auditas – MySQL Enterprise taip pat apima MySQL Enterprise Audit, kuris įgyvendinamas naudojant papildinį vadinamą audit_log. MySQL auditas naudoja audito API tam, kad galėtų stebėti ir registruoti užklausas vykdomas MySQL serveriuose. Papildinys sukuria log failą, kurio turinys apima serverio veiklą tam tikru metu.

Bendri Duomenų Bazių Saugumo Aspektai

Bendri duomenų bazių saugumo aspektai yra dažniausiai susiję su pagrindinių duomenų bazių saugumo priemonių naudojimu – visoms naudojamoms paskyroms turėtume naudoti tvirtus slaptažodžius, programuotojai prie duomenų turėtų leisti prieiti tik patikimiems žmonėms, neleisti duomenų bazėms būti per daug apkrautomis, vengti fizinės žalos serveriams, vengti naudoti programinę įrangą kurioje yra saugumo spragų (pavyzdžiui, SQL injekcijos galima išvengti naudojant paruoštas užklausas), taip pat išvengti duomenų sugadinimo ar praradimo ir pan.

Atsarginės Kopijos

Duomenys yra svarbi jūsų svetainės dalis. Duomenys gali būti sugadinami. Standieji diskai genda. Kiekviena informacinė sistema gali prarasti duomenis kas reiškia, kad jei nepadarysite atsarginių kopijų, galite patirti didelių problemų.

Savo failų ir duomenų bazės atsarginių kopijų kūrimas yra ypač svarbi bet kurios saugos rutinos dalis. Yra keli įrankiai ir paslaugos, skirtos automatizuoti šią užduotį (tai galima atlikti net sukūrus bash skriptus), galite saugoti duomenis debesų saugyklose, diskuose ir kt. – disko vieta yra pigi, tad atsarginių kopijų turėjimas yra prasmingas visada.

Jei įvyktų katastrofa ir jūsų duomenys būtų sunaikinti, turimų atsarginių kopijų išbandymas irgi yra labai svarbus – tai gali padėti jums išsaiškinti, ar galite greitai ir efektyviai atkurti duomenis. Atsarginių duomenų kopijų išbandymas turėtų būti esminė bet kurios atsarginių kopijų rutinos kūrimo dalis.

Santrauka

Apibendrinant galima pasakyti, kad norint apsaugoti savo MySQL duomenų bazę nuo įsilaužimo reikėtų iš naujo įdiegti MySQL savo serveriuose ir netrukus po įdiegimo apriboti vartotojų teises. Atminkite, kad jūsų vartotojų paskyrose turėtų būti naudojami stiprūs slaptažodžiai (naudokite didžiąsias, mažąsias raides, skaičius, ir jei tik įmanoma, simbolius), apsvarstykite galimybę naudoti MySQL saugos įskiepius, būtinai laikykitės MySQL duomenų bazių saugos praktikos ir pasirūpinkite atsarginėmis duomenų kopijomis. Sukurkite visų svarbių duomenų atsargines kopijas, įsitikinkite, kad jūsų atsarginės kopijos yra atnaujinamos ir visada jas išbandykite.

Jei atlikote šios veiksmus, jūsų MySQL duomenų bazės ateitis turėtų būti geresnė.

Leave a Reply

Your email address will not be published. Required fields are marked *