MySQL database is secured

MySQL database is secured

Operating System : Centos 7
Mysql Community Server 5.7

1 – Auditing vs logging for information systems

Logging đóng một vai trò quan trọng đối với hệ thống khi có một cuộc tấn công mạng bị nghi ngờ. Việc xem xét đầu tiên thủ công các bản ghi là cần thiết cho nhân viên hệ thống và họ phải sử dụng các công cụ xem xét nhật ký log để trích xuất thông tin và phân tích nó. Nhật ký log nên sử dụng công nghệ lưu trữ và mã hóa WORM (ghi một lần đọc nhiều) để tránh mất dữ liệu nhật ký log. Ngoài ra, nhật ký log nên có định dạng chuẩn để dễ bảo trì, truy cập và so sánh.

Ensure “log_error” is not empty

command:

SHOW variables LIKE ‘log_error’;

Nhật ký log lỗi chứa dữ liệu về các sự kiện khi mysqld bắt đầu hoặc dừng. Nó cũng cho thấy khi một bảng cần được đánh giá hoặc repaired . Nó phải tạo ra một giá trị thành công. Lý do cho phép ghi nhật ký log lỗi là vì nó giúp tăng khả năng phát hiện các lỗi vs phát hiện độc hại đối với MySQL và các thông báo quan trọng khác.

Ensure log files are stored on a non-system partition

command:

SELECT @@global.log_bin_basename;

Các tệp nhật ký logs của MySQL có thể được lưu trữ ở bất cứ đâu trong hệ thống filesystem và được cấu hình bằng MySQL. Ngoài ra, cách tốt nhất là đảm bảo rằng các bản ghi trong hệ thống không bị lộn xộn với các bản ghi khác như nhật ký log ứng dụng. Bạn phải đảm bảo rằng giá trị được trả về không nằm trong thư mục gốc “(‘/’)”, “/var”, or “/usr”.
Lý do cho điều này là phân vùng sẽ làm giảm khả năng và có thể bị từ chối dịch vụ nếu không gian đĩa cho hệ điều hành bị cạn kiệt.

Ensure “log_error_verbosity” is not set to “1”

command:

SHOW GLOBAL VARIABLES LIKE ‘log_error_verbosity’;

Chúng ta thực hiện kiểm tra và cung cấp thông tin bổ sung cho các chức năng mà nhật ký log MySQL có hoặc đã bật trên các thông báo lỗi. Giá trị 1 cho phép ghi nhật ký thông báo lỗi. Giá trị là 2 cho phép ghi nhật ký lỗi và thông báo cảnh báo. Giá trị 3 cho phép ghi nhật ký lỗi, cảnh báo và thông báo ghi chú. Điều này giúp phát hiện hành vi nguy hiểm bằng cách ghi nhật ký lỗi giao tiếp và hủy kết nối.

Ensure audit logging is enabled

Kích hoạt nhật ký logs là rất quan trọng đối với môi trường production cho các phiên ứng dụng và phiên ứng dụng tương tác với nhau . Với audit logging , nó giúp chúng ta xác định ai đã thay đổi cái gì và khi nào. Nó cũng có thể giúp xác định những gì kẻ tấn công đã làm và thậm chí có thể được sử dụng làm bằng chứng trong các cuộc điều tra.

SELECT NAME FROM performance_schema.setup_instruments WHERE NAME LIKE ‘%/alog/%’;
Audit log 1
Audit log 2
No audit log plugins

command:

SET GLOBAL general_log = ‘ON’ ;

command: CREATE USER ‘user1’@’localhost’ IDENTIFIED BY PASSWORD ‘not-so-secret’;


Authentication for information system

Xác thực nhằm đảm bảo thông tin đăng nhập do người dùng hoặc máy tính cung cấp khớp với cơ sở dữ liệu của người dùng được ủy quyền trong hệ điều hành cục bộ hoặc trong máy chủ xác thực. Xác thực sau đó được ủy quyền, được cấp bởi quản trị viên cho người dùng hoặc máy tính. xác thực thường được sử dụng trong cả mạng riêng và mạng công cộng là xác thực dựa trên mật khẩu.

Ensure passwords are not stored in the global configuration

[client] của file cấu hình MySQL cho phép tạo người dùng và mật khẩu được đặt. Việc kiểm tra rất quan trọng vì việc cho phép người dùng và mật khẩu trong file cấu hình tác động tiêu cực đến tính bảo mật của mật khẩu người dùng.

Để kiểm tra, hãy mở file cấu hình MySQL và kiểm tra phần [client] – nó không được lưu bất kỳ mật khẩu nào. Không có mật khẩu nào được đặt trong hệ thống (xem hình bên dưới). Nếu mật khẩu được đặt trong tệp cấu hình, hãy sử dụng mysql_config_editor để lưu mật khẩu ở dạng được mã hóa trong .mylogin.cnf.

Ensure ‘sql_mode’ contains ‘NO_AUTO_CREATE_USER’

“no_auto_create_user” là một tùy chọn để ngăn người dùng tự động tạo khi thông tin xác thực không được cung cấp.

SELECT @@global.sql_mode;
No auto create user in global

command:

SELECT @@session.sql_mode;

Ensure passwords are set for all MySQL accounts

Người dùng có thể tạo một mật khẩu trống. Có một mật khẩu trống là rủi ro vì bất kỳ ai cũng có thể giả sử danh tính người dùng, nhập tên người dùng để Đăng nhập và kết nối với máy chủ. Điều này bỏ qua xác thực, đó là xấu.

SELECT User,host FROM mysql.user WHERE authentication_string=’’;

Ensure ‘default_password_lifetime’ is less than or equal to ‘90’

Thay đổi thời gian tồn tại của mật khẩu thành 90 ngày sẽ giảm thời gian kẻ tấn công xâm phạm mật khẩu và do đó giảm khả năng bị tấn công.

SHOW VARIABLES LIKE ‘default_password_lifetime’;
Default password lifetime with 0 value

command:

SET GLOBAL default_password_lifetime=90;

Ensure password complexity is in place

Độ phức tạp của mật khẩu bổ sung sức mạnh bảo mật cho các xác thực và bao gồm tăng độ dài bằng cách thêm các ký tự số và ký tự đặc biệt. Mật khẩu càng phức tạp, kẻ tấn công càng khó đoán và sử dụng các tool để brufe force password để lấy mật khẩu. Mật khẩu yếu dễ dàng có được trong một từ điển mật khẩu.

SHOW VARIABLES LIKE ‘validate_password%’;
Check for password complexity

Ensure no users have wildcard hostnames

Tên máy chủ ký tự đại diện (%) được cấp quyền cho bất kỳ vị trí nào. Tốt nhất là tránh tạo tên máy chủ ký đặc biệt như (%). Thay vào đó, hãy tạo người dùng và cung cấp cho họ các vị trí cụ thể mà từ đó một người dùng nhất định có thể kết nối và tương tác với cơ sở dữ liệu.

SELECT user, host FROM mysql.user WHERE host = ‘%’;
Wildcard hostname

Ensure no anonymous accounts exist

Người dùng có thể dùng tên ẩn danh . Những tên người dùng ẩn danh này không có mật khẩu và bất kỳ người dùng nào khác cũng có thể sử dụng tên người dùng ẩn danh đó để kết nối với máy chủ MySQL. Việc xóa các tài khoản ẩn danh này đảm bảo chỉ những người dùng được xác định và tin cậy mới có thể truy cập vào máy chủ MySQL.

SELECT user,host FROM mysql.user WHERE user = ‘’;

Network connection to MySQL server

Kết nối mạng đóng vai trò quan trọng trong giao tiếp giữa người dùng và máy chủ MySQL. Kết nối mạng không an toàn rất dễ bị tấn công. Sau đây là kiểm tra bảo mật kết nối mạng.

Ensure ‘have_ssl’ is set to ‘YES’

Để tránh những kẻ tấn công nhìn trộm bên trong hệ thống của bạn, cách tốt nhất là sử dụng SSL / TLS cho tất cả lưu lượng truy cập mạng khi sử dụng các mạng không tin cậy.

WHERE variable_name = ‘have_ssl’;

Ensure ‘ssl_type’ is set to ‘ANY’, ‘X509’, or ‘SPECIFIED’ for all remote users

SSL / TLS nên được cấu hình cho mỗi người dùng. Điều này càng ngăn chặn việc nghe lén những kẻ tấn công độc hại.

SELECT user, host, ssl_type FROM mysql.user WHERE NOT HOST IN (‘::1’, ‘127.0.0.1’, ‘localhost’);

Replication

Kiểm tra trạng thái sao chép cho phép bạn theo dõi các lỗ hổng bảo mật và hiệu suất.

  1. view snapshot agent status,
  2. view log reader agent status, and
  3. view synchronization status.

Ensure replication traffic is secured

Lưu lượng truy cập sao chép giữa các máy chủ phải được bảo mật. Trong quá trình chuyển sao chép, mật khẩu có thể bị rò rỉ.

Để kiểm tra, hãy kiểm tra xem họ có sử dụng không: private network, VPN, SSL / TLS or SSH Tunnel . Hy vọng hệ thống tác giả có thể sử dụng một mạng riêng. Sửa lỗi nếu không và bảo mật bằng cách sử dụng private network, VPN, SSL / TLS or SSH Tunnel

Ensure ‘MASTER_SSL_VERIFY_SERVER_CERT’ Is Set to ‘YES’ or ‘1’

MASTER_SSL_VERIFY_SERVER_CERT Kiểm tra xem liệu slave có xác minh certificate với Master hay không. khuyến cá Slave nên xác minh certificate với máy chủ Master để xác thực trước khi tiếp tục kết nối.

SELECT ssl_verify_server_cert FROM mysql.slave_master_info;

Ensure ‘master_info_repository’ is set to ‘TABLE’

‘Master_info thông tin liên lạc xác định nơi server slave ghi lại trạng thái và thông tin kết nối. Mật khẩu được lưu trữ trong kho thông tin chính là plain text file. Lưu trữ mật khẩu trong Tables sẽ an toàn hơn.

SHOW GLOBAL VARIABLES LIKE ‘master_info_repository’;

Ensure ‘super_priv’ is not set to ‘Y’ for replication users

command:

SELECT user, host FROM mysql.user WHERE user=’repl’ and Super_priv = ‘Y’;

Ensure no replication users have wildcard hostnames

MySQL cho phép bạn cấp quyền cho máy chủ ký . Nên tránh các máy chủ ký tự đại diện và bạn nên tạo hoặc sửa đổi người dùng và cung cấp cho họ các vị trí cụ thể mà từ đó một người dùng nhất định có thể kết nối và tương tác với cơ sở dữ liệu.

Conclusion

Các kiểm tra sau đây được thực hiện cho một môi trường làm việc duy nhất sử dụng MySQL làm hệ thống thông tin ở cả phía ứng dụng và phía người dùng.

Việc đánh giá là bắt buộc để kiểm tra ghi nhật ký tiêu chuẩn của MySQL và cho phép các chức năng ghi nhật ký bổ sung (nó cũng cho phép kiểm tra các lỗ hổng xác thực). Kiểm tra mạng là rất quan trọng để ngăn chặn người dùng khác có ý định độc hại nhìn trộm vào mạng của bạn. Luôn triển khai SSL / TLS để mã hóa. Đảm bảo chuyển một chiều là cần thiết. Đảm bảo lưu lượng truy cập nhân rộng thêm một lớp phòng thủ.

Kết quả đánh giá có thể thông báo cho bạn nếu hệ thống có thể hoạt động ở mức độ tin cậy.

Cảm ơn bạn đã đọc blog của tôi! Bây giờ bạn đã bắt đầu đường dẫn để bảo mật cơ sở dữ liệu MySQL của bạn. =)

Nguồn : https://www.freecodecamp.org/