Khi một ứng dụng yêu cầu một khu vực địa lý lớn để thực hiện, tổ chức thường buộc phải lưu trữ dữ liệu của mình trên đám mây. Các ứng dụng được xây dựng trên MongoDB không phải là một ngoại lệ đối với khái niệm này. Việc không bảo vệ dữ liệu nhạy cảm có thể gây ra một số thất bại nghiêm trọng cho doanh nghiệp bao gồm danh tiếng bị hủy hoại, dữ liệu không nhất quán, tổn thất tài chính và đôi khi mất toàn bộ dữ liệu.
Dữ liệu được lưu trữ trên đám mây dễ bị các phần tử tội phạm quan tâm. Những người có mục đích xấu có thể dễ dàng truy cập hơn khi không có quy trình tiêu chuẩn nào được đưa ra để đảm bảo an ninh cơ sở dữ liệu. Một số thủ tục không tiêu chuẩn này bao gồm ...
- Quản lý mật khẩu kém:một số nhà phát triển cuối cùng phải mã hóa mật khẩu trong các tệp nguồn của dự án, do đó nếu tin tặc dịch ngược ứng dụng, họ có thể dễ dàng truy xuất nội dung.
- Bất đắc dĩ hoặc không cập nhật được cơ sở dữ liệu và các phần bổ trợ miễn phí. Các phiên bản cơ sở dữ liệu mới hơn có các tính năng mới có thể là về bảo mật hoặc đúng hơn là có một số tính năng được sửa chữa từ phiên bản trước.
- Các cấu hình cơ sở dữ liệu dưới tiêu chuẩn, chẳng hạn như không sử dụng khóa giải mã được mã hóa hoặc hoàn toàn không sử dụng bất kỳ giao thức bảo mật nào.
Các cuộc tấn công cơ sở dữ liệu đang gia tăng ngày này qua ngày khác (và xu hướng này dự kiến sẽ tiếp tục), nhưng bạn có thể không trở thành nạn nhân trừ khi bạn thực hiện các cân nhắc bảo mật thích hợp. Trong bài viết này, chúng ta sẽ thảo luận về một số quy trình mà người ta có thể kiểm tra khi cài đặt MongoDB trên đám mây. Bạn không cần phải áp dụng tất cả chúng, nhưng ít nhất hãy cố gắng tốt nhất để chọn những cái mà nếu tránh, có thể khiến dữ liệu của bạn rơi vào tình huống thảm hại.
Những Cân nhắc về Bảo mật Trước khi Sản xuất MongoDB
Đây là những điều cần cân nhắc để đảm bảo chúng được cấu hình tốt khi sắp triển khai MongoDB vào môi trường sản xuất. Chúng bao gồm:
- Bật và thực thi xác thực cho Kiểm soát truy cập
- Định cấu hình Kiểm soát truy cập dựa trên vai trò
- Hạn chế tiếp xúc mạng
- Mã hóa thông tin liên lạc
- Mã hóa dữ liệu
- Hoạt động của Hệ thống Kiểm toán
- Sử dụng Người dùng Chuyên dụng để chạy MongoDB
- Sử dụng các gói MongoDB chính thức và cập nhật
- Tắt các thực thi Javascript nếu không cần thiết
- Được cập nhật các bản sửa lỗi bảo mật MongoDB
1. Kích hoạt và thực thi xác thực cho kiểm soát truy cập
Kiểm soát truy cập không được bật trong MongoDB theo mặc định nhưng điều này không có nghĩa là bạn cũng triển khai cơ sở dữ liệu của mình mà không bật tùy chọn này. Trên thực tế, một số gói cơ sở dữ liệu như Bitnami sẽ yêu cầu bạn thiết lập một số kiểm soát truy cập trước khi sử dụng cơ sở dữ liệu của mình. Nếu không làm như vậy, bất kỳ ai cũng có thể có quyền truy cập vào cơ sở dữ liệu do đó có thể tiếp xúc với ngay cả những dữ liệu rất nhạy cảm. Chỉ định một số cơ chế xác thực chẳng hạn như SCRAM để các máy khách sẽ được kết nối phải cung cấp một số thông tin xác thực hợp lệ trước khi họ có thể kết nối với cơ sở dữ liệu.
Chuỗi kết nối sẽ trông giống như sau:
mongodb://[username:[email protected]]host[:port1][/[defaultauthdb]and not just
mongodb://host[:port1]/[defaultauthdb]
2. Định cấu hình Kiểm soát truy cập dựa trên vai trò
Sau khi thêm người dùng có quyền quản trị, hãy giới hạn vai trò được chỉ định cho những người dùng này bằng cách sử dụng Kiểm soát truy cập dựa trên vai trò (RBAC). Các vai trò mà người dùng có thể có bao gồm:đọc, ghi hoặc cả hai đối với một số bộ sưu tập cụ thể hoặc tất cả. Do đó, người dùng không thể thực hiện một vai trò không được chỉ định cho họ hoặc chỉ có thể thực hiện các hoạt động đối với các bộ sưu tập được chỉ định.
Quản trị viên người dùng được tạo trước rồi mới đến người dùng bổ sung. Nếu người dùng có đặc quyền trên các cơ sở dữ liệu khác nhau, bạn có thể tạo một người dùng duy nhất có vai trò cấp các đặc quyền cơ sở dữ liệu hiện hành thay vì tạo người dùng nhiều lần trong các cơ sở dữ liệu khác nhau.
Nên có một số lượng nhỏ người dùng truy cập vào cơ sở dữ liệu, theo đó người dùng có thể là người hoặc ứng dụng khách.
Để tạo và cấp quyền người dùng cho một số vai trò nhất định trong MongoDB, bạn có thể sử dụng ví dụ này trong mongo shell
use finance
db.createUser(
{
user: "manager",
pwd: passwordPrompt(), // or cleartext password
roles: [
{ role: "read", db: "loans" },
{ role: "read", db: "interests" },
{ role: "read", db: "useraccounts" },
{ role: "readWrite", db: "wages" }
]
}
)
Ngoài ra, hãy chọn các tùy chọn xác thực bên ngoài như LDAP và Kerberos.
3. Hạn chế tiếp xúc mạng
Cấu trúc liên kết mạng lưu trữ cơ sở dữ liệu cần được bảo mật rộng rãi và quan trọng nhất là chỉ lắng nghe giao diện localhost. Điều này là để tránh bị lộ từ các kết nối bên ngoài giống như trường hợp của MongoDB các phiên bản cũ hơn. Đảm bảo rằng MongoDB chạy trong môi trường mạng đáng tin cậy với tường lửa bảo mật được bật. Kiểm soát lưu lượng vào và ra bằng các nhóm bảo mật có thể không được sử dụng với các trường hợp khác. Sử dụng danh sách trắng IP để cho phép truy cập từ các địa chỉ IP đáng tin cậy, do đó cho phép kết nối với các phiên bản MongoDB có giao diện mạng và cổng chỉ từ các máy khách đáng tin cậy.
Ngoài ra, hãy tắt quyền truy cập trực tiếp vào gốc SSH.
4. Mã hóa thông tin liên lạc
Cấu hình MongoDB chỉ nên hạn chế các kết nối đến và đi đối với TLS / SSL. TLS / SSL mã hóa giao tiếp giữa các thành phần mongod và mongos của triển khai MongoDB và tất cả các ứng dụng được kết nối với nó.
Trong môi trường sản xuất, việc triển khai MongoDB phải sử dụng các chứng chỉ hợp lệ được tạo và ký bởi một tổ chức phát hành chứng chỉ duy nhất.
5. Mã hóa dữ liệu
Dữ liệu cơ sở dữ liệu có hai dạng:dữ liệu ở trạng thái nghỉ và đang chuyển. Dữ liệu khi chuyển tiếp có thể được bảo mật bằng cách sử dụng Mã hóa mức trường phía máy khách nhưng chỉ có sẵn trong phiên bản 4.2. Mã hóa TLS / SSL cũng xử lý dữ liệu khi chuyển tiếp.
Công cụ lưu trữ WiredTiger từ phiên bản 3.2 Enterprise cung cấp dữ liệu trong mã hóa lớp lưu trữ. Điều này khẳng định rằng chỉ những người dùng đã được xác thực bằng khóa giải mã mới có thể truy cập vào dữ liệu. Nếu bạn hiện không sử dụng mã hóa của WiredTiger, hãy sử dụng mã hóa Hệ thống tệp. Mã hóa dữ liệu ở trạng thái nghỉ ngăn người ta truy cập vào nội dung cơ sở dữ liệu của bạn nếu họ có quyền truy cập vào máy chủ vật lý, do đó, một phần quan trọng trong việc bảo mật MongoDB.
6. Hoạt động của Hệ thống Kiểm toán
Đây là một tùy chọn dành cho doanh nghiệp cho phép theo dõi tất cả các thay đổi đối với dữ liệu và cấu hình cơ sở dữ liệu. Các sự kiện được ghi vào kết nối nhật ký hệ thống hoặc một số tệp nhật ký. Nhật ký có thể chứa các lần xác thực DB bao gồm địa chỉ IP nguồn và thông tin có thể giúp xác định máy chủ nào sẽ bị tường lửa chặn truy cập cơ sở dữ liệu. Bên cạnh đó, người ta có thể xác định rõ những sự kiện nào cần ghi lại.
Nhật ký kiểm tra nói chung sẽ giúp quản trị viên thực hiện một số phân tích pháp y và do đó thiết lập các biện pháp kiểm soát bảo mật tiêu chuẩn.
7. Sử dụng Người dùng Chuyên dụng để chạy MongoDB
Quy trình MongoDB phải được chạy bằng tài khoản người dùng hệ điều hành chuyên dụng phải được bật quyền truy cập.
8. Sử dụng các gói MongoDB chính thức &cập nhật
Vượt qua kiểm tra tính xác thực trên các gói của bạn để đảm bảo chúng là gói chính thức của MongoDB. Sử dụng trình điều khiển MongoDB mới nhất và phiên bản mới nhất của cơ sở dữ liệu mang lại sự ổn định bảo mật hơn so với các phiên bản tiền nhiệm. Ví dụ:phiên bản 4.2 cung cấp Mã hóa mức trường phía máy khách. Do đó, hãy đảm bảo rằng bạn chuyển sang phiên bản MongoDB mới nhất.
9. Tắt Thực thi Javascript nếu không cần thiết
mapReduce và $ là một số mã JavaScript thực thi trong MongoDB và nếu không được quản lý tốt, chúng có thể dẫn đến một số mâu thuẫn dữ liệu không mong muốn hoặc cho phép một người truy cập dữ liệu gián tiếp và áp dụng một số thay đổi nếu họ muốn .
Nói chung, mã JavaScript này sẽ cho phép đưa từ bên ngoài vào do đó dữ liệu chưa được kiểm chứng vào cơ sở dữ liệu của bạn. Bạn cũng có thể chọn sử dụng các gói như mongoose để xác thực và kết nối với cơ sở dữ liệu của mình. Sử dụng toán tử MongoDB thay vì các biểu thức JavaScript.
10. Được cập nhật với các bản sửa lỗi bảo mật của MongoDB
Các giao thức bảo mật có thể bị kẻ tấn công phá vỡ theo thời gian, do đó cần có một giao thức liên quan đến các quy trình nâng cao. Luôn cập nhật các bản cập nhật bảo mật hàng đầu và các bản sửa lỗi từ ghi chú phát hành MongoDB là rất quan trọng. Về cơ bản, trang cảnh báo MongoDB đã được tạo cho mục đích như vậy.
Yêu cầu hướng dẫn triển khai kỹ thuật bảo mật nếu có thể và đảm bảo rằng việc triển khai của bạn phù hợp với các tiêu chuẩn bảo mật.
Kết luận
Cơ sở dữ liệu trong quá trình sản xuất dễ bị tấn công bảo mật, do đó cần đầu tư nhiều vào việc bảo vệ dữ liệu nhạy cảm. Các quy trình bảo mật bao gồm từ dữ liệu trong quá trình truyền, dữ liệu ở trạng thái nghỉ và các ứng dụng khách được kết nối. Bên cạnh các phương pháp được đề cập ở trên, các cam kết tăng cường máy chủ sẽ cung cấp một lớp bảo vệ dữ liệu khác.
Điều quan trọng là sử dụng các phiên bản MongoDB và plugin mới nhất bên cạnh việc cập nhật các bản sửa lỗi và bảo mật mới nhất liên quan đến phiên bản của bạn.