/ / 9 Mẹo bảo mật MySQL nâng cao

9 Mẹo bảo mật MySQL nâng cao

MySQL là một trong những hệ quản trị cơ sở dữ liệu quan hệ phổ biến nhất, là giải pháp độc đắc cho những kẻ tấn công cố gắng xâm nhập vào cơ sở dữ liệu. Máy chủ cơ sở dữ liệu MySQL mới được cài đặt có thể có nhiều lỗ hổng và lỗ hổng. Vì bảo mật dữ liệu có tầm quan trọng lớn, nên bắt buộc phải hiểu mọi khía cạnh của bảo mật MySQL.

Bài viết này tập trung vào việc kiểm tra và bảo mật cơ sở dữ liệu MySQL của bạn và cung cấp chín mẹo để tăng cường bảo mật cho nó.

1. Tránh Trợ cấp Đặc quyền Không cần thiết

MySQL cho phép một số câu lệnh đặc quyền khi được gán một cách không cần thiết cho người dùng có đặc quyền có thể dẫn đến việc đọc / ghi tệp và lật đổ các đặc quyền của người dùng khác. Một số câu lệnh đặc quyền tiềm ẩn rủi ro cao nhất là FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN, v.v. Bạn có thể đọc thêm về những điều này từ tài liệu chính thức của MySQL. Do đó, không chỉ định các đặc quyền của người dùng cấp cao như FILE, GRANT, SUPER và PROCESS cho các tài khoản không phải quản trị viên. Bạn có thể thu hồi các quyền cấp bảng, cơ sở dữ liệu và toàn cục không cần thiết này như sau:

REVOKE ALL ON *.* FROM 'user_name'@'host_name'; #Global privileges
REVOKE CREATE,DROP ON database_name.* FROM 'user_name'@'host_name'; #Database privileges

REVOKE INSERT, UPDATE,DELETE ON database_name.table_name FROM 'user_name'@'host_name'; #Table privileges
flush privileges;

2. Hạn chế đăng nhập từ xa

Truy cập từ xa giúp giảm bớt công việc của các quản trị viên cơ sở dữ liệu, nhưng nó có nguy cơ khiến máy chủ gặp phải các lỗ hổng và việc khai thác tiềm ẩn. Bạn có thể vô hiệu hóa quyền truy cập từ xa cho tất cả các loại tài khoản người dùng MySQl bằng cách thêm biến bỏ qua mạng vào tệp cấu hình chính và khởi động lại dịch vụ.

[mysqld]
skip-networking
sudo service mysql restart

Tương tự, bạn phải vô hiệu hóa quyền truy cập tài khoản root, nếu không phải tất cả để hạn chế đăng nhập từ xa của tài khoản root. Biện pháp phòng ngừa này ngăn chặn việc ép buộc tài khoản gốc MySQL.

mysql> delete from mysql.user where user='root' and host not in ('localhost', '127.0.0.1', '::1'); mysql> flush privileges; 

3. Vô hiệu hóa các chức năng (load_file, outfile, dumpfile)

Một biện pháp phòng ngừa khác để bảo mật MySQL chống lại việc tiêm tệp cục bộ là tắt các chức năng chỉ có thể truy cập thông qua đặc quyền cấp FILE. FILE là một tùy chọn cho phép người dùng có đặc quyền thấp với các tùy chọn lệnh chung có thể đọc hoặc ghi tệp trên máy chủ.

Hàm load_file tải nội dung tệp từ máy chủ dưới dạng một chuỗi. Ví dụ: lệnh sau sẽ tải tất cả nội dung từ / etc / passwd tập tin như sau:

select load_file('/etc/passwd')

Tương tự, hàm outfile ghi nội dung vào các tệp máy chủ cục bộ. Những kẻ tấn công có thể sử dụng chức năng này để ghi tải trọng vào tệp trong máy chủ, như sau:

select 'Local File SQL Injection' into outfile '/tmp/file.txt';
cat /tmp/file.txt

Đầu ra:

Local File SQL Injection

Chức năng này sử dụng nguyên nhân chọn để ghi vào tệp mà không trả kết quả ra màn hình.

cat /tmp/file.txt
select 'Hello world!' into dumpfile '/tmp/world';

Đầu ra:

Query OK, 1 row affected (0.001 sec)

Bạn có thể tắt các chức năng này bằng cách thu hồi đặc quyền FILE như sau:

revoke FILE on *.* from 'user_name'@'localhost';

Liên quan: Hướng dẫn cho người mới bắt đầu về Metasploit trong Kali Linux (Với các ví dụ thực tế)

4. Tắt cổng mặc định

Chúng tôi biết rằng các dịch vụ MySQL chạy trên cổng 3306 và những kẻ tấn công quét các cổng để kiểm tra các dịch vụ đang chạy trên mạng. Để thêm bảo mật bằng cách che khuất và thay đổi cổng MySQL mặc định bằng cách chỉnh sửa biến hệ thống cổng trong tệp cấu hình chính của nó, bạn cần nhập như sau:

vim /etc/mysql/my.cnf
port=XXXX
sudo service mysql restart

5. Tránh ký tự đại diện trong tên tài khoản

Tên tài khoản trong MySQL bao gồm hai phần là người dùng và tên máy chủ “user_name” @ “host_name”. Nó cho phép quản trị viên tạo tài khoản cho những người dùng có cùng tên kết nối từ các máy chủ khác nhau. Tuy nhiên, phần máy chủ của tên tài khoản cho phép các quy ước về ký tự đại diện có thể là điểm truy cập vào cơ sở dữ liệu từ mọi nơi.

Việc sử dụng tùy chọn tên máy chủ hoặc giá trị địa chỉ IP tương đương với ‘user_name’ @ ‘%’ trong đó% khớp với mẫu MySQL khớp với thao tác LIKE và% có nghĩa là bất kỳ tên máy chủ nào. Trong khi đó, truy cập từ ‘192.168.132.%’ Có nghĩa là bất kỳ nỗ lực nào từ mạng lớp C. Bên cạnh đó, bất kỳ ai cũng có thể truy cập cơ sở dữ liệu bằng cách đặt tên phần máy chủ là ‘192.18.132.mysql.com’.

Để tránh những nỗ lực như vậy, MySQL cho phép xác định mặt nạ mạng với giá trị máy chủ để xác định các bit mạng của địa chỉ IP:

client-ip_add & netmask = host_name

Cú pháp để tạo tên máy chủ là host_ip / netmask:

CREATE USER 'jhon'@'192.168.132.0/255.255.255.0'; 

Giá trị máy chủ lưu trữ trên cho phép người dùng John để truy cập cơ sở dữ liệu từ bất kỳ IP nào trong phạm vi 192.168.132.0-192.168.132.255. Tương tự, các giá trị máy chủ 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 sẽ cho phép máy chủ từ mạng lớp A và B. Trong khi 192.168.132.5 sẽ chỉ cho phép truy cập từ IP cụ thể.

6. Tắt quyền truy cập rõ ràng

Tên người dùng trong MySQL là tên mà cơ sở dữ liệu chấp nhận các kết nối đến hoặc tên người dùng trống “@” host_name “tạo ra người dùng ẩn danh. Tuy nhiên, sự hiện diện của người dùng ẩn danh có thể thúc đẩy những kẻ tấn công truy cập vào máy chủ cơ sở dữ liệu. Bên cạnh đó, MySQL phiên bản trước MySQL 5.7, tạo một nhóm người dùng ẩn danh và cài đặt sau khi nâng cấp phiên bản vẫn thêm những người dùng này.

select user, host, password from mysql.user where user like '';

Bảng người dùng MySQL

Bạn có thể lưu ý rằng cột người dùng và mật khẩu trống và quyền truy cập bị giới hạn ở localhost. Tuy nhiên, bạn không muốn bất kỳ ai truy cập vào cơ sở dữ liệu. Sử dụng lệnh sau để xóa người dùng ẩn danh:

drop user " "@"localhost"
flush privileges;

7. Đặt tài khoản không phải gốc làm chủ sở hữu hoặc nhóm

Đặt tài khoản người dùng không phải root không liên quan đến người dùng root MySQL. Cài đặt MySQL trong hệ thống Linux / Unix từ các gói tar và tar.gz cho phép máy chủ chạy bởi bất kỳ người dùng có đặc quyền nào. Đây là một nhược điểm bảo mật vì bất kỳ người dùng nào có tùy chọn cấp FILE đều có thể chỉnh sửa hoặc tạo tệp tại máy chủ. Tuy nhiên, nó trả về một lỗi khi người dùng cố gắng truy cập nó mà không có -user = root lỗi.

Bạn có thể tránh điều này bằng cách thực hành quy tắc ngón tay cái khi truy cập máy chủ cơ sở dữ liệu với tư cách là một người dùng Linux riêng biệt. Để chạy mysqld như một người dùng Linux thông thường, hãy dừng máy chủ và thay đổi quyền đọc / ghi của máy chủ MySQl thành mysql, như sau:

chown -R mysql /path/to/mysql/datadir

Mở tệp cấu hình chính của MySQL, thêm người dùng mysql mới và khởi động lại dịch vụ để tránh truy cập máy chủ không cần thiết:

vim /etc/mysql/my.cnf
user=mysql
sudo service mysql restart

8. Đặt mật khẩu cho tài khoản gốc

Cài đặt MySQL thông qua một trình bao tương tác trong các bản phân phối Linux dựa trên Debian tạo tài khoản người dùng gốc và yêu cầu bạn đặt mật khẩu. Tuy nhiên, điều này không xảy ra trong cài đặt shell không tương tác và các bản phân phối dựa trên Red-Hat. Như đã nêu ở trên, người dùng không phải root của máy Linux có thể truy cập tài khoản người dùng root mysql bằng cách sử dụng -user = root Lựa chọn. Bạn có thể tránh điều đó bằng cách đặt mật khẩu như sau:

sudo mysqladmin password
vim /etc/mysql/my.cnf
password=<your_password>
sudo service mysql restart

9. Đảm bảo mã hóa dữ liệu khi chuyển tuyến và khi nghỉ ngơi

Giao tiếp không được mã hóa mặc định giữa máy khách và máy chủ có nguy cơ bị đánh chặn dữ liệu bởi bất kỳ người trung gian nào. Tương tự, dữ liệu người dùng không được mã hóa trong cơ sở dữ liệu có nguy cơ ảnh hưởng đến tính bảo mật và tính toàn vẹn của người dùng. MySQL hỗ trợ mã hóa dữ liệu giữa máy khách và máy chủ qua giao thức TLS / SSL, trong khi giao tiếp không được mã hóa chỉ được chấp nhận khi cả hai bên giao tiếp nằm trong cùng một mạng.

MySQL hiện hỗ trợ mã hóa ở trạng thái nghỉ để bảo vệ dữ liệu được lưu trữ trong máy chủ ngay cả khi hệ thống bị vi phạm.

MySQL Advanced Security: Bảo vệ chính bạn

Đảm bảo rằng bạn có mức độ bảo mật trực tuyến cao nhất là rất quan trọng và bài viết này sẽ cung cấp cho bạn một số gợi ý hữu ích để đi đúng hướng. Các bước trên rất hữu ích để bảo mật máy chủ cơ sở dữ liệu của bạn, nhưng học cách gán quyền tối thiểu cho người dùng không phải là quản trị viên cũng rất cần thiết.


Tạo một lược đồ cơ sở dữ liệu mySQL
Hướng dẫn cho người mới bắt đầu để viết lược đồ cơ sở dữ liệu mySQL

Tạo cơ sở dữ liệu mySQL của riêng bạn chỉ với một trình soạn thảo văn bản và phác thảo cấu trúc cơ bản này, hoặc “lược đồ”.

Đọc tiếp


Thông tin về các Tác giả

Similar Posts

Leave a Reply

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