Някоя основна информация, преди да започнем:
Източник:Център за интернет сигурност (CIS) Oracle MySQL Community Server 5.7
Операционна система: Windows 10
Къде да се изпълни: команден ред
mysql -u USERNAME -p
Целево приложение: Oracle MySQL Community Server 5.7
Одит и регистриране на информационни системи
Регистраторите играят решаваща роля за сигурността, когато има подозрение за кибератака. Ръчният преглед на регистрационните файлове е старателен за служителите по сигурността и те трябва да използват инструменти за преглед на регистрационни файлове, за да извличат информация и да я анализират. Регистраторите трябва да използват технология за съхранение и криптиране на WORM (записване, веднъж четено много), за да се избегне повреда и загуба на данни от регистрационни файлове. Освен това регистрационните файлове трябва да имат стандартизиран формат за лесна поддръжка, достъп и сравнение.
Уверете се, че „log_error“ не е празно
команда:
SHOW variables LIKE ‘log_error’;
Дневниците за грешки съдържат данни за събития, когато mysqld стартира или спре. Той също така показва кога една таблица трябва да бъде оценена или поправена. Той трябва да генерира „стойност“. Причината за активиране на регистриране на грешки е, че помага да се увеличи възможността за откриване на злонамерени опити срещу MySQL и други важни съобщения.
Уверете се, че регистрационните файлове се съхраняват на несистемен дял
команда:
SELECT @@global.log_bin_basename;
Регистрационните файлове на MySQL могат да се съхраняват навсякъде във файловата система и да се задават с помощта на конфигурацията на MySQL. Също така, най-добрата практика е да се гарантира, че регистрационните файлове във файловата система не са претрупани с други регистрационни файлове, като регистрационни файлове на приложения. Трябва да се уверите, че върнатата стойност не показва, че е в корена „(‘/’)“, „/var“ или „/usr“. Причината за това е, че разделянето ще намали вероятността от отказ на услуга, ако наличното дисково пространство за операционната система е изчерпано.
Уверете се, че „log_error_verbosity“ не е зададено на „1“
команда:
SHOW GLOBAL VARIABLES LIKE ‘log_error_verbosity’;
Тази проверка предоставя допълнителна информация за това какви функции MySQL log има или е активирал при съобщения за грешка. Стойност 1 позволява записването на съобщения за грешки. Стойност 2 позволява както записването на съобщения за грешка, така и предупредителни съобщения. Стойност 3 позволява регистриране на съобщения за грешки, предупреждения и бележки. Това помага за откриване на злонамерено поведение чрез регистриране на комуникационни грешки и прекъснати връзки.
Уверете се, че регистрирането на одита е активирано
Активирането на регистриране на одит е от решаващо значение за производствената среда за интерактивни потребителски сесии и сесии на приложения. С регистрирането на одит помага да се идентифицира кой какво е променил и кога. Също така може да помогне да се идентифицира какво е направил нападател и дори може да се използва като доказателство при разследвания.
команда:
SELECT NAME FROM performance_schema.setup_instruments WHERE NAME LIKE ‘%/alog/%’;
команда:
SET GLOBAL general_log = ‘ON’ ;
команда: СЪЗДАДЕТЕ ПОТРЕБИТЕЛ ‘user1’@’localhost’ ИДЕНТИФИЦИРАН С ПАРОЛА ‘не е толкова секретен’;
Пътят на регистрационния файл в Windows 10 може да бъде намерен с помощта на приложението Services, като се види дали MySQL работи и щракнете с десния бутон върху свойствата.
Регистърът в системата на автора се намираше в:C:\ProgramData\MySQL\MySQL Server 5.7\Data\DJ-JASON-CLARK.log
Удостоверяване за информационна система
Удостоверяването гарантира, че идентификационните данни, предоставени от потребителя или машината, са съпоставени с базата данни с оторизирани потребители в локална операционна система или в сървър за удостоверяване. След това удостоверяването е последвано от оторизация, която се предоставя от администратор на потребители или машини. Удостоверяването, което обикновено се използва както в частни, така и в публични мрежи, е удостоверяване, базирано на парола.
Уверете се, че паролите не се съхраняват в глобалната конфигурация
Разделът [client] на конфигурационен файл на MySQL позволява да се зададе създаването на потребител и парола. Проверката е важна, защото разрешаването на потребител и парола в конфигурационния файл влияе негативно върху поверителността на паролата на потребителя.
За да извършите одит, отворете конфигурационния файл на MySQL и прегледайте секцията [клиент] - в нея не трябва да има запазена парола. В системата на автора не е зададена парола (вижте фигурата по-долу). Ако в конфигурационния файл е зададена парола, използвайте mysql_config_editor, за да съхранявате пароли в криптирана форма в .mylogin.cnf.
Уверете се, че „sql_mode“ съдържа „NO_AUTO_CREATE_USER“
„no_auto_create_user“ е опция за предотвратяване на автоматичното създаване на потребител, когато не е предоставена информация за удостоверяване.
команда:
SELECT @@global.sql_mode;
команда:
SELECT @@session.sql_mode;
Уверете се, че паролите са зададени за всички MySQL акаунти
Потребителят може да създаде празна парола. Наличието на празна парола е рисковано, тъй като всеки може просто да приеме самоличността на потребителя, да въведе идентификационния номер на потребителя и да се свърже със сървъра. Това заобикаля удостоверяването, което е лошо.
команда:
SELECT User,host FROM mysql.user WHERE authentication_string=’’;
Уверете се, че „default_password_lifetime“ е по-малко или равно на „90“
Промяната на продължителността на паролата на 90 дни намалява времето, което нападателят може да компрометира паролата и по този начин намалява вероятността от атака.
команда:
SHOW VARIABLES LIKE ‘default_password_lifetime’;
команда:
SET GLOBAL default_password_lifetime=90;
Уверете се, че паролата е сложна
Сложността на паролата добавя силата на сигурността към удостоверяванията и включва добавяне или увеличаване на дължина, регистър на буквите, числа и специални знаци. Колкото по-сложна е паролата, толкова по-трудно е за нападателите да използват груба сила, за да получат паролата. Слабите пароли се получават лесно в речник на пароли.
команда:
SHOW VARIABLES LIKE ‘validate_password%’;
Уверете се, че няма потребители със заместващи имена на хостове
Потребителите с заместващи имена на хостове (%) получават разрешение за всяко местоположение. Най-добре е да избягвате създаването на заместващи имена на хостове. Вместо това създайте потребители и им дайте конкретни местоположения, от които даден потребител може да се свързва с базата данни и да взаимодейства с нея.
команда:
SELECT user, host FROM mysql.user WHERE host = ‘%’;
Уверете се, че не съществуват анонимни акаунти
Потребителите могат да имат анонимно (празно или празно) потребителско име. Тези анонимни потребителски имена нямат пароли и всеки друг потребител може да използва това анонимно потребителско име, за да се свърже с MySQL сървъра. Премахването на тези анонимни акаунти гарантира, че само идентифицирани и доверени потребители имат достъп до MySQL сървъра.
команда:
SELECT user,host FROM mysql.user WHERE user = ‘’;
Мрежова връзка с MySQL сървър
Мрежовата връзка играе важна роля за комуникацията между потребителя и MySQL сървъра. Несигурните мрежови връзки са много уязвими за атаки. Следват проверки за сигурност на мрежовата връзка.
Уверете се, че „have_ssl“ е настроен на „ДА“
За да избегнете злонамерени нападатели да надникнат във вашата система, най-добре е да използвате SLL/TLS за целия мрежов трафик, когато използвате ненадеждни мрежи.
команда:
WHERE variable_name = ‘have_ssl’;
Уверете се, че 'ssl_type' е настроен на 'ANY', 'X509', или 'SPECIFIED' за всички отдалечени потребители
SSL/TLS трябва да се конфигурира за всеки потребител. Това допълнително предотвратява подслушването на злонамерени нападатели.
команда:
SELECT user, host, ssl_type FROM mysql.user WHERE NOT HOST IN (‘::1’, ‘127.0.0.1’, ‘localhost’);
Репликация
Проверката за състояние на репликация ви позволява да наблюдавате уязвимостите в производителността и сигурността. Microsoft SQL Server Management Studio има следните инструменти за наблюдение на репликацията:
- вижте състоянието на агента за моментна снимка,
- вижте състоянието на агента за четене на журнали и
- вижте състоянието на синхронизиране.
Уверете се, че трафикът за репликация е защитен
Репликация трафикът между сървърите трябва да бъде защитен. По време на прехвърляне на репликация паролите могат да изтекат.
За одит проверете дали използват:частна мрежа, VPN, SSL/TLS или SSH тунел. Надяваме се, че системата на автора използва частна мрежа. Коригирайте, ако е другояче, и обезопасете, като използвате частната мрежа, VPN, SSL/TLS или SSH тунел.
Уверете се, че „MASTER_SSL_VERIFY_SERVER_CERT“ е настроен на „ДА“ или „1“
„MASTER_SSL_VERIFY_SERVER_CERT“ проверява дали репликата трябва да проверява основния сертификат или не. Репликата трябва да потвърди сертификата на основния, за да удостовери основния, преди да продължи връзката.
команда:
SELECT ssl_verify_server_cert FROM mysql.slave_master_info;
Уверете се, че „master_info_repository“ е настроен на „TABLE“
„master_info_repository“ определя къде репликата регистрира състоянието и информацията за връзката на основния. Паролата се съхранява в основното информационно хранилище, което е обикновен текстов файл. Съхраняването на паролата в TABLE master_info е по-безопасно.
команда:
SHOW GLOBAL VARIABLES LIKE ‘master_info_repository’;
Уверете се, че „super_priv“ не е настроен на „Y“ за потребители с репликация
В Привилегията "SUPER" ('super_priv'), разположена в таблицата "mysql.user", има функции като "CHANGE", "MASTER TO", "KILL", "mysqladmin kill", "PURGE BINARY LOGS", "SET GLOBAL", “mysqladmin debug” и други контроли за регистриране. Даването на потребител на привилегията „SUPER“ позволява на потребителя да преглежда и прекратява изпълняваните в момента SQL оператори, дори за управление на пароли. Ако нападателят експлоатира и получи привилегията „СУПЕР“, той може да деактивира, променя или унищожава данните за регистриране.
команда:
SELECT user, host FROM mysql.user WHERE user=’repl’ and Super_priv = ‘Y’;
Уверете се, че потребителите на репликация нямат заместващи имена на хостове
MySQL ви позволява да давате разрешения на заместващи имена на хостове. Трябва да се избягват заместващи имена на хостове и трябва да създавате или променяте потребители и да им давате конкретни местоположения, от които даден потребител може да се свързва и да взаимодейства с базата данни.
Заключение
Следните проверки се правят за единична работна среда, използваща MySQL като информационна система както от страна на приложението, така и от страна на потребителя.
Оценката е наложителна за проверка за стандартно регистриране на MySQL и активиране на допълнителни функции за регистриране (то също така позволява проверка за уязвимости при удостоверяване). Проверките на мрежата са важни за предотвратяване на други потребители със злонамерени намерения да надникнат във вашата мрежа. Винаги внедрявайте SSL/TLS за криптиране. Необходимо е да се осигури еднопосочен трансфер. Осигуряването на трафик на репликация добавя защитен слой.
Резултатът от оценката може да ви информира дали системата е в състояние да работи на ниво на доверие.
Благодаря ви, че четете моя блог! Вече сте започнали пътя към защитата на вашата MySQL база данни.=)