Bắt đầu với MongoDB® khá dễ dàng. Tuy nhiên, bạn có thể gặp một số trục trặc với các tính năng mới xuất hiện liên tục. Một lĩnh vực đáng quan tâm là bảo mật, là trọng tâm của blog này.
Giới thiệu
Duy trì bảo mật với ứng dụng MongoDB rất quan trọng cho các ứng dụng cơ sở dữ liệu. Bạn cần xác định các lỗ hổng và biết các loại và phương pháp bảo mật cơ sở dữ liệu hoặc ứng dụng để bảo vệ cơ sở dữ liệu khỏi mối đe dọa. Tuân thủ chặt chẽ Hướng dẫn Triển khai Kỹ thuật Bảo mật (STIG) giúp bảo mật MongoDB rất lớn. Kiểm toán định kỳ cũng giúp xác định các lỗ hổng then chốt trong hệ thống hoặc cơ sở dữ liệu để bạn có thể bảo vệ hệ thống hoặc cơ sở dữ liệu khỏi các mối đe dọa khác nhau.
Blog này bao gồm mười mẹo bảo mật MongoDB để giữ cho nó an toàn và bảo mật.
Mẹo 1: Luôn bật xác thực (authentication)
Bật xác thực là thói quen tốt và cách đơn giản nhất để bảo mật MongoDB. Hãy nhớ, đôi khi tính năng bảo mật đơn giản nhất được bật có thể bảo vệ hệ thống đến mức tối đa và do đó cứu tổ chức khỏi vi phạm dữ liệu có thể tốn hàng triệu đô la.
Thêm các dòng sau vào file cấu hình mongod.conf để bật xác thực trong MongoDB:
security:
authorization: enabled
Hình sau minh họa bảo mật cấp DB:
Nguồn ảnh: https://www.slideshare.net
Mẹo 2: Sử dụng mật khẩu phức tạp
Mẹo này chỉ là sự здрав tính. Trong hầu hết các trường hợp, mật khẩu đơn giản, cơ bản nhất dùng cho bất kỳ ứng dụng hoặc cơ sở dữ liệu nào là 12345 hoặc ABC123. Tuy nhiên, những mật khẩu đơn giản này là vũ khí lựa chọn để bẻ khóa hệ thống và đánh cắp dữ liệu quý giá.
Vì MongoDB không cung cấp tùy chọn khóa tài khoản cho mật khẩu, hacker dễ dàng thử các mật khẩu đơn giản nhất để bẻ khóa cơ sở dữ liệu hoặc ứng dụng trong vài phút để xâm nhập.
Mẹo 3: Phân quyền người dùng theo vai trò (roles)
MongoDB không bật kiểm soát truy cập theo mặc định. Bạn có thể bật phân quyền bằng từ khóa --auth khi khởi tạo shell MongoDB.
Không phải ai cũng nên quản trị cơ sở dữ liệu. Ngay khi cơ sở dữ liệu đã bật xác thực, đừng cấp quyền quản trị cho mọi người. Thay vào đó, như một thực hành tốt, luôn tạo một số vai trò để phân quyền người dùng.
Thiết lập các vai trò người dùng nhất định giảm độ phức tạp cho mỗi người dùng và giảm thiểu đáng kể rủi ro vi phạm tài khoản gây thảm họa sau này.
Để tạo user với vai trò, chạy lệnh sau:
db.createUser({user:"admin", pwd:"X1eL#pM0C12", roles:[{role:"userAdminAnyDatabase", db:"admin"}]})
Mẹo 4: Thêm keyfile replication (tệp khóa sao chép)
Bật keyfile replication tự động bật xác thực trong MongoDB. Với tính năng này được bật, chỉ các host cài đặt tệp này mới có thể tham gia tập hợp replica.
Keyfile replication được bật cũng đảm bảo mã hóa dữ liệu trong MongoDB, cung cấp lớp bảo vệ bổ sung. Bạn có thể tạo keyfile bằng bất kỳ phương pháp nào bạn chọn, sao chép keyfile đến các thành viên replica set, và sau đó khởi động replica set với kiểm soát truy cập được bật.
Thêm các dòng sau vào mongod.conf để bật replication keyfile:
security:
keyFile: <Đường dẫn đến KeyFile>
Hình sau minh họa xác thực keyfile:
Nguồn ảnh: https://www.slideshare.net
Mẹo 5: Không dùng cổng mặc định (default ports)
Không bao giờ dùng các cổng mặc định để kết nối đến instance MongoDB của bạn. Hầu như lúc nào hacker cũng chỉ quét các số cổng mặc định hoặc tiêu chuẩn trước khi tấn công. Một số cổng mặc định MongoDB dùng là 27017, 27018, 27019, 2700X, v.v.
Việc thay đổi số cổng mặc định trong mongod.conf rất dễ dàng.
Mẹo 6: Có chiến lược sao lưu tốt
Luôn đảm bảo bạn có bản sao mới nhất của dữ liệu để đảm bảo nhật ký hoạt động (oplog) sẵn sàng cho khôi phục tại thời điểm (point-in-time - PIT) từ lúc tấn công xảy ra.
Sẵn sàng với thiết lập khôi phục thảm họa chắc chắn cho bất kỳ loại tấn công nào.
Mẹo 7: Vô hiệu hóa truy cập công khai vào cơ sở dữ liệu
Xem xét ứng dụng của bạn xem nó có cần truy cập tài khoản bên ngoài vào cơ sở dữ liệu không. Nếu có tài khoản như vậy, đặt chúng dùng xác thực và mã hóa.
Bạn thậm chí có thể vô hiệu hóa truy cập công khai bằng cách ràng buộc địa chỉ Internet Protocol (IP) của host trong mongod.conf.
Mẹo 8: Bật quy tắc tường lửa ở cấp hệ điều hành và dùng VPN
Tường lửa cung cấp lớp bảo mật bổ sung để lọc và kiểm soát truy cập vào hệ thống qua mạng. Trên server MongoDB, bật quy tắc tường lửa trên host hoặc security group trong cloud hosting.
Luôn đảm bảo bạn chỉ cấp quyền truy cập instance mongod cho các nguồn tin cậy. Chặn địa chỉ IP hoặc dải cổng cho server để làm cho cloud hosting an toàn hơn.
Sử dụng VPN để cung cấp truy cập được chứng thực cho hệ thống cơ sở dữ liệu của bạn cho nhiều cấp độ mã hóa, nhiều cấp độ xác thực và phân quyền cho tất cả client.
Mẹo 9: Kiểm toán hệ thống cơ sở dữ liệu định kỳ cho các vấn đề bảo mật
Kiểm toán cơ sở dữ liệu hoặc hệ thống host định kỳ để xem có vi phạm nào không hoặc tài khoản user nào đã được cấp đặc quyền nâng cao, ngoài những đặc quyền yêu cầu, dựa trên vai trò và đặc quyền của họ.
Nếu đặc quyền nâng cao được cấp cho mục đích kiểm thử, hãy chắc chắn thu hồi chúng để bảo mật lại hệ thống.
Mẹo 10: Xác thực và kiểm tra truy cập cơ sở dữ liệu từ bên ngoài
Bạn hoặc team của bạn nên kiểm tra hệ thống cơ sở dữ liệu cho các vấn đề bảo mật bằng cách dùng kiểm thử xâm nhập (penetration testing) hoặc SQL injection để xem chúng có khai thác được hệ thống không. Đảm bảo không có gì bị lộ từ thế giới bên ngoài đến cơ sở dữ liệu của bạn.
Bạn có thể dùng nhiều công cụ cho việc kiểm thử đó, như nmap, telnet, v.v.
Kết luận
Blog này giúp bạn cấu hình một số thực hành bảo mật cơ bản cho quản trị MongoDB hàng ngày. Sử dụng các mẹo và công cụ được mô tả để bảo mật ứng dụng cơ sở dữ liệu MongoDB của bạn.
Bạn cũng có thể dùng Dịch vụ Giám sát MongoDB (MMS) để giám sát và cấu hình hầu hết các tính năng liên quan đến bảo mật thay vì dùng mongo shell.
Sử dụng tab Feedback để bình luận hoặc đặt câu hỏi.
Tìm hiểu thêm về quản trị viên cơ sở dữ liệu được chứng nhận và dịch vụ cơ sở dữ liệu của chúng tôi.