Việc vi phạm dữ liệu phổ biến không còn là điều đáng ngạc nhiên. Dựa trên báo cáo tội phạm mạng của FBI vừa được công bố, các nạn nhân của tội phạm mạng đã mất tích lũy 4,2 tỷ đô la vào năm 2020, nhiều hơn 700 triệu đô la so với số thiệt hại được báo cáo vào năm 2019. Đặc biệt, cơ sở dữ liệu MongoDB không an toàn là một phần của vấn đề dẫn đến vi phạm dữ liệu đáng kể. . Vào tháng 2 năm 2019, một công ty cung cấp dịch vụ xác minh email đã vi phạm cơ sở dữ liệu MongoDB của họ và nó làm lộ 763 triệu bản ghi bao gồm địa chỉ email, số điện thoại, địa chỉ IP và ngày sinh. Lý do là, một phiên bản MongoDB công khai mà không có mật khẩu.
Thiếu xác thực, không có giới hạn cổng trên tường lửa hoặc không bảo mật dữ liệu khi truyền có thể dẫn đến vi phạm dữ liệu. Trong blog này, chúng ta sẽ thảo luận về cách chuẩn bị và bảo mật cơ sở dữ liệu MongoDB của bạn trong môi trường sản xuất.
Xác thực và Ủy quyền
Xác thực và ủy quyền là hai việc khác nhau, nhưng chúng có mối tương quan với nhau. Xác thực có nghĩa là người dùng có quyền truy cập vào cơ sở dữ liệu MongoDB trong khi ủy quyền cho phép người dùng truy cập tài nguyên bên trong cơ sở dữ liệu.
Cài đặt mặc định để xác thực trong MongoDB bị tắt. MongoDB hỗ trợ nhiều xác thực, ví dụ:SCRAM, x.509 Chứng thực Xác thực. Cơ chế mặc định trong MongoDB là SCRAM (Cơ chế xác thực phản hồi thử thách muối), xác minh quyền truy cập thông tin xác thực được cung cấp bằng tên người dùng, mật khẩu và cơ sở dữ liệu xác thực.
Trước khi bật xác thực, vui lòng tạo siêu người dùng trong MongoDB với vai trò userAdminAnyDatabase. Sau khi hoàn tất, chúng ta chỉ cần mở tệp /etc/mongod.conf và tìm phần bảo mật. Mặc định bị tắt, chúng tôi chỉ cần bật.
security:
authorization: "disabled"
Khởi động lại dịch vụ MongoDB để áp dụng các thay đổi cấu hình. Chúng tôi cũng có thể định cấu hình RBAC (Kiểm soát truy cập dựa trên vai trò) bên trong cơ sở dữ liệu MongoDB để bảo mật tốt hơn liên quan đến người dùng. Vì vậy, chúng tôi tách biệt quyền truy cập vào cơ sở dữ liệu dựa trên người dùng và các đặc quyền.
Phân đoạn Mạng
Phân đoạn mạng là một khía cạnh quan trọng khi chúng ta thiết kế kiến trúc cơ sở dữ liệu, nó áp dụng cho tất cả các cơ sở dữ liệu, không chỉ cho MongoDB. Cách tốt nhất là chúng tôi tách riêng mạng cho cơ sở dữ liệu. Chúng tôi thiết lập máy chủ cơ sở dữ liệu trong một mạng riêng, nơi không thể kết nối nó từ internet.
Giao tiếp với cơ sở dữ liệu xảy ra trên mạng riêng và khi người dùng muốn truy cập cơ sở dữ liệu, họ có thể sử dụng VPN hoặc jumphost. Bên cạnh việc phân đoạn mạng, hạn chế cổng cũng đóng một vai trò quan trọng, chúng ta mở cổng cơ sở dữ liệu cụ thể cho mạng được phân đoạn để kiểm soát lưu lượng mạng đến và ra. Vì vậy, chúng tôi biết rằng lưu lượng truy cập đến là từ địa chỉ nguồn đáng tin cậy.
Mã hóa Dữ liệu
Một lĩnh vực khác mà chúng ta cần xem xét là mã hóa dữ liệu. Mã hóa dữ liệu là một phương pháp mà thông tin được mã hóa sang một dạng khác trong quá trình truyền và được lưu trữ trong cơ sở dữ liệu.
Mã hóa dữ liệu bao gồm:
-
Dữ liệu đang chuyển:dữ liệu ở trạng thái truyền
-
Dữ liệu ở trạng thái nghỉ:dữ liệu được lưu trữ trên đĩa. Có nhiều loại mã hóa dữ liệu khác nhau, chúng ta có thể sử dụng mã hóa ở cấp độ cơ sở dữ liệu hoặc chúng ta có thể sử dụng mã hóa trong lớp lưu trữ.
Bật SSL / TLS từ máy khách và máy chủ MongoDB và giữa các nút MongoDB (trong kiến trúc cụm bản sao và phân đoạn), sẽ bảo mật dữ liệu khi truyền. Việc chuyển dữ liệu sẽ không ở dạng văn bản thuần túy.
Có nhiều công cụ và tính năng mã hóa khác nhau dành cho dữ liệu khi mã hóa phần còn lại; AWS cung cấp mã hóa đĩa EBS kết hợp với KMS (Dịch vụ quản lý khóa) trên bộ lưu trữ, trong khi trên lớp cơ sở dữ liệu, phiên bản Enterprise của MongoDB cung cấp mã hóa cơ sở dữ liệu ở chế độ nghỉ.
Kiểm tra Cơ sở dữ liệu
Việc triển khai cơ sở dữ liệu kiểm tra cho MongoDB cung cấp khả năng hiển thị về những gì đang chạy bên trong cơ sở dữ liệu; ví dụ:từ người dùng nào và lệnh nào đã thực thi, và nguồn của địa chỉ ip. Chúng tôi có thể kết hợp các nhật ký đó và tạo quy tắc dựa trên quyền truy cập ủy quyền. Chúng tôi có thể phát hiện nếu có bất kỳ người dùng ngoài ý muốn nào đang chạy một số tập lệnh trong MongoDB. Chúng ta có thể thấy phần AuditLog.
auditLog:
destination: syslog
Chúng tôi có thể gửi nhật ký kiểm tra MongoDB vào tệp nhật ký hệ thống và đẩy nhật ký vào Quản lý nhật ký. Bạn muốn có thêm mẹo về bảo mật MongoDB? Xem video này để hiểu rõ hơn về các phương pháp hay nhất để bảo mật cơ sở dữ liệu MongoDB của bạn
Kết luận
Thực hiện các tiêu chuẩn bảo mật cho MongoDB là điều bắt buộc, đặc biệt là đối với môi trường sản xuất. Chúng tôi không thể chấp nhận mọi mất mát và vi phạm dữ liệu được lưu trữ trong cơ sở dữ liệu.