MySQL е една от най-популярните системи за управление на релационни бази данни, която е джакпот за нападателите, които се опитват да се промъкнат в базите данни. Новоинсталиран MySQL сървър на база данни може да има много уязвимости и вратички. Тъй като сигурността на данните е от голямо значение, е задължително да се разбере всеки аспект на сигурността на MySQL.

Тази статия се фокусира върху одита и сигурността на вашата MySQL база данни и предоставя девет съвета за укрепване на нейната сигурност.

1. Избягвайте ненужното предоставяне на привилегии

MySQL позволява няколко изявления за привилегии, които, когато са присвоени ненужно на потребител с по-непривилегировани права, могат да доведат до четене/запис на файлове и подкопаване на други потребителски привилегии. Някои от най-потенциално рисковите изявления за привилегии са FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN и т.н. Можете да прочетете повече за тях от официалната документация на MySQL. Следователно, не присвоявайте привилегии на суперпотребител като FILE, GRANT, SUPER и PROCESS на неадминистративни акаунти. Можете да отмените тези ненужни глобални, база данни и разрешения на ниво таблица, както следва:

instagram viewer

ОТМЕНИ ВСИЧКО НА *.* ОТ 'user_name'@'host_name'; #Глобални привилегии
REVOKE CREATE, DROP ON database_name.* FROM 'user_name'@'host_name'; #Привилегии на база данни
REVOKE INSERT, UPDATE, DELETE ON database_name.table_name FROM 'user_name'@'host_name'; #Привилегии за маса
flush привилегии;

2. Ограничаване на отдалечени влизания

Отдалеченият достъп улеснява работата на администраторите на бази данни, но рискува сървъра от потенциални уязвимости и експлоати. Можете да деактивирате отдалечения достъп за всички типове потребителски акаунти на MySQl, като добавите променлива за пропускане на мрежа към основния конфигурационен файл и рестартирате услугата.

[mysqld]
пропускане на мрежа
sudo service mysql рестартиране

По същия начин трябва да деактивирате достъпа до root акаунт, ако не всички, за да ограничите отдалечените влизания в root акаунт. Тази предпазна мярка предотвратява грубата употреба на root акаунта на MySQL.

mysql> изтрийте от mysql.user, където потребител='root' и хостът не е в ('localhost', '127.0.0.1', '::1'); mysql> flush привилегии; 

3. Деактивиране на функции (load_file, outfile, dumpfile)

Друга предпазна мярка за защита на MySQL срещу локално инжектиране на файлове е да деактивирате функции, достъпни само чрез привилегията за предоставяне на FILE. FILE е опция, която позволява на потребителите с ниски привилегии с глобални командни опции да четат или записват файлове на сървъра.

  • файл_зареждане

Функцията load_file зарежда съдържанието на файла от сървъра като низ. Например, следната команда ще зареди цялото съдържание от /etc/passwd файл, както следва:

изберете load_file('/etc/passwd')
  • outfile

По подобен начин функцията outfile записва съдържание в файловете на локалния сървър. Нападателите могат да използват тази функция, за да запишат полезен товар във файла на сървъра, както следва:

изберете 'Local File SQL Injection' в outfile '/tmp/file.txt';
котка /tmp/file.txt

Изход:

Локален файл SQL инжекция
  • dumpfile

Тази функция използва причината за избор за запис във файла, без да връща изхода на екрана.

котка /tmp/file.txt
изберете „Здравей свят!“ в dumpfile '/tmp/world';

Изход:

Заявката ОК, засегнат е 1 ред (0,001 сек)

Можете да деактивирате тези функции, като отмените привилегията FILE, както следва:

отменете FILE на *.* от 'user_name'@'localhost';

Свързани: Ръководство за начинаещи за Metasploit в Kali Linux (с практически примери)

4. Деактивирайте порта по подразбиране

Знаем, че MySQL услугите работят на порт 3306 и нападателите сканират портовете, за да проверят услугите, работещи в мрежата. За да добавите сигурност чрез неизвестност и промените MySQL порта по подразбиране, като редактирате системната променлива на порта в основния конфигурационен файл, ще трябва да въведете следното:

vim /etc/mysql/my.cnf
порт = XXXX
sudo service mysql рестартиране

5. Избягвайте заместващи знаци в имената на акаунти

Имената на акаунти в MySQL се състоят от две части, които са потребител и име на хост "user_name"@"host_name". Той позволява на администратора да създава акаунти за потребители с едно и също име, които се свързват от различни хостове. Въпреки това, хост частта на името на акаунт позволява конвенции за заместващи знаци, които могат да бъдат точка за достъп до базата данни отвсякъде.

Незадължителното използване на името на хоста или стойността на IP адреса е еквивалентно на 'user_name'@'%', където % съответства на модел на MySQL, съответстващ на операция LIKE, а % означава всяко име на хост. Междувременно достъп от „192.168.132.%“ означава всеки опит от мрежата от клас C. Освен това всеки може да получи достъп до базата данни, като наименува хост частта като '192.18.132.mysql.com'.

За да се избегнат подобни опити, MySQL позволява дефиниране на мрежова маска със стойността на хоста за идентифициране на мрежовите битове на IP адрес:

client-ip_add & netmask = име на хост

Синтаксисът за създаване на име на хост е host_ip/netmask:

СЪЗДАВАНЕ НА ПОТРЕБИТЕЛ 'jhon'@'192.168.132.0/255.255.255.0'; 

Горната стойност на хост позволява на потребителя Джон за достъп до базата данни от всеки IP в обхвата 192.168.132.0-192.168.132.255. По същия начин стойностите на хоста 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 ще позволят хостове от мрежи от клас A и B. Докато 192.168.132.5 ще позволи достъп само от конкретния IP.

6. Деактивирайте изричния достъп

Потребителското име в MySQL е или име, с което базите данни приемат входящи връзки, или празно потребителско име "@"host_name", което създава анонимен потребител. Въпреки това, присъствието на анонимен потребител може да накара нападателите да получат достъп до сървъра на базата данни. Освен това, версиите на MySQL преди MySQL 5.7 създават анонимен набор от потребители и инсталацията след надграждане на версията все още добавя тези потребители.

изберете потребител, хост, парола от mysql.user, където потребителят харесва '';

Можете да отбележите, че колоните потребител и парола са празни, а достъпът е ограничен до localhost. Въпреки това, не искате никой да има достъп до базата данни. Използвайте следната команда, за да изтриете анонимни потребители:

махнете потребителя " "@"localhost"
flush привилегии;

7. Задайте не-Root акаунт като собственик или група

Задаването на потребителски акаунт, различен от root, не е свързано с root потребител на MySQL. Инсталацията на MySQL в Linux/Unix системи от пакети tar и tar.gz позволява на сървъра да работи от всеки потребител с ограничени права. Това е недостатък на сигурността, тъй като всеки потребител с опцията за предоставяне на FILE може да редактира или създава файлове на сървъра. Въпреки това, той връща грешка, когато потребителят се опита да получи достъп до него без -потребител=корен грешка.

Можете да избегнете това, като практикувате правилото за достъп до сървъра на базата данни като отделен потребител на Linux. За да стартирате mysqld като обикновен потребител на Linux, спрете сървъра и го променете разрешения за четене/запис от MySQl сървъра към mysql, както следва:

chown -R mysql /път/към/mysql/datadir

Отворете основния конфигурационен файл на MySQL, добавете нов потребител на mysql и рестартирайте услугата, за да избегнете ненужен достъп до сървъра:

vim /etc/mysql/my.cnf
потребител = mysql
sudo service mysql рестартиране

8. Задайте парола за Root акаунт

Инсталацията на MySQL чрез интерактивна обвивка в базирани на Debian Linux дистрибуции създава root потребителски акаунт и ви моли да зададете парола. Това обаче не се случва при неинтерактивна инсталация на обвивки и базирани на Red-Hat дистрибуции. Както беше посочено по-горе, не-root потребител на Linux машина може да получи достъп до mysql root потребителски акаунт, като използва -потребител=корен опция. Можете да избегнете това, като зададете паролата, както следва:

sudo mysqladmin парола
vim /etc/mysql/my.cnf
парола=
sudo service mysql рестартиране

9. Осигурете криптиране на данни по време на пренос и в покой

Некриптираната комуникация по подразбиране между клиента и сървъра представлява риск от прихващане на данни от всеки човек в средата. По същия начин, нешифрованите потребителски данни в базата данни рискуват поверителността и целостта на потребителя. MySQL поддържа криптиране на данни между клиента и сървъра през TLS/SSL протокол, докато нешифрованата комуникация е приемлива само когато и двете комуникиращи страни са в рамките на една и съща мрежа.

MySQL вече поддържа криптиране в покой, за да защити данните, съхранявани в сървъра, дори когато системата е нарушена.

MySQL Advanced Security: Защитете се

Гарантирането, че имате най-високите нива на онлайн сигурност, е от решаващо значение и тази статия ще ви даде някои полезни насоки в правилната посока. Горните стъпки са полезни за защитата на вашия сървър на база данни, но също така е важно да научите как да зададете минимални разрешения на неадминистративни потребители.

Ръководство за начинаещи за писане на схеми на mySQL бази данни

Създайте своя собствена база данни на mySQL само с текстов редактор и тази основна структура, или "схема".

Прочетете Следващото

Дялтуителектронна поща
Свързани теми
  • Програмиране
  • Сигурност
  • Програмиране
  • Съвети за сигурност
  • Сигурност
За автора
Румайса Ниази (публикувани 15 статии)

Румайса е писател на свободна практика в MUO. Тя е носила много шапки, от математик до ентусиаст по информационна сигурност, и сега работи като SOC анализатор. Нейните интереси включват четене и писане за нови технологии, Linux дистрибуции и всичко около информационната сигурност.

Още от Rumaisa Niazi

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, ревюта, безплатни електронни книги и ексклузивни оферти!

Щракнете тук, за да се абонирате