it-swarm-vi.com

Làm thế nào để bảo mật một cá thể MongoDB?

Có ai có kinh nghiệm với việc bảo mật/làm cứng máy chủ MongoDB không? Kiểm tra danh sách hoặc hướng dẫn sẽ được chào đón.

28
AaronS

Cơ sở dữ liệu NoQuery tương đối mới (mặc dù có thể là một khái niệm cũ), tôi chưa thấy bất kỳ hướng dẫn làm cứng MongoDB cụ thể nào và những nơi thông thường mà tôi tìm ( CISSecurity , các ấn phẩm của nhà cung cấp, Sans, v.v. Đề xuất nó sẽ là một dự án tốt cho một tổ chức, sinh viên đại học, cộng đồng infosec để viết và duy trì nó.

Có một số thông tin cơ bản trong Mongodb.org. Tất cả các bước ở đây nên được thực hiện bao gồm cả cho phép bảo mật. Bản thân trang này tuyên bố MongoDB chỉ có mức bảo mật rất cơ bản. http://www.mongodb.org/display/DOCS/Security+and+Authentication

MongoDB và các cơ sở dữ liệu NoQuery khác cũng có ít tính năng (đặc biệt là bảo mật) hơn so với cơ sở dữ liệu SQL trưởng thành, do đó bạn không thể tìm thấy các quyền hoặc mã hóa dữ liệu chi tiết, nó sử dụng MD5 để băm mật khẩu với tên người dùng làm hạt giống. Cũng có những hạn chế như xác thực không có sẵn với shending trước phiên bản 1.9.1, vì vậy, luôn luôn thực hiện đánh giá rủi ro và xây dựng mô hình mối đe dọa để giải quyết các nhu cầu bảo mật và các mối đe dọa phải đối mặt là ý tưởng tốt. Dựa trên cơ sở dữ liệu này, cơ sở dữ liệu MongoDB hoặc NoQuery nói chung có thể không phù hợp với nhu cầu của bạn hoặc bạn có thể cần sử dụng nó theo cách khác để tối đa hóa các ưu điểm của nó và giảm thiểu các điểm yếu của nó (ví dụ như trích xuất dữ liệu thay vì thông tin nhạy cảm nhất của bạn, hoặc đằng sau một số lớp điều khiển mạng thay vì được kết nối trực tiếp với ứng dụng web của bạn).

Điều đó nói rằng, tôi tin chắc rằng các nguyên tắc bảo mật là bất khả tri công nghệ. Nếu bạn phân tích ngay cả các cuộc tấn công mới nhất và một danh sách tốt trên datalossdb.org, thật đáng ngạc nhiên khi có nhiều người vẫn liên quan đến mật khẩu mặc định và các bản vá bị thiếu. Với chiều sâu phòng thủ nếu bạn tuân theo các thực tiễn sau đây sẽ có đủ bảo mật để bảo vệ hầu hết các tài sản (ví dụ: cá nhân, thương mại) có thể không phải là quân sự.

Nguyên tắc làm cứng cơ sở dữ liệu:

  • Xác thực - yêu cầu xác thực, đối với người quản trị hoặc người dùng đặc quyền có hai yếu tố nếu có thể (thực hiện việc này ở cấp nền tảng hoặc thông qua thiết bị mạng vì cơ sở dữ liệu không hỗ trợ). Sử dụng xác thực dựa trên khóa để tránh mật khẩu nếu có thể.
  • Ủy quyền - số lượng tài khoản bắt buộc tối thiểu với quyền yêu cầu tối thiểu, tài khoản chỉ đọc được hỗ trợ để sử dụng chúng. Vì kiểm soát truy cập chi tiết không tồn tại, nên sử dụng thay thế có nghĩa là một dịch vụ web trước cơ sở dữ liệu chứa logic nghiệp vụ bao gồm các quy tắc kiểm soát truy cập hoặc trong ứng dụng. Giảm thiểu các quyền mà Mongodb chạy như trên nền tảng, ví dụ: không nên chạy như root.
  • Tài khoản mặc định và hệ thống - thay đổi mật khẩu của tất cả các tài khoản mặc định, xóa/khóa/vô hiệu hóa những gì bạn có thể, vô hiệu hóa đăng nhập ở nơi bạn có thể.
  • Ghi nhật ký và giám sát - cho phép ghi nhật ký và xuất chúng sang hệ thống giám sát trung tâm. Xác định cảnh báo cụ thể và quy trình điều tra cho nhân viên giám sát của bạn
  • Xác thực đầu vào - Cơ sở dữ liệu NoQuery vẫn dễ bị tấn công tiêm chích, do đó, chỉ cần chuyển qua xác thực đầu vào đã được xác thực, sử dụng tham số trong khung ứng dụng của bạn, tất cả các thực hành tốt để chuyển đầu vào không đáng tin cậy vào cơ sở dữ liệu là bắt buộc
  • Mã hóa - tùy thuộc vào độ nhạy cảm của dữ liệu, vì bạn không thể mã hóa ở cấp cơ sở dữ liệu, mã hóa hoặc băm bất kỳ dữ liệu nhạy cảm nào ở lớp ứng dụng là bắt buộc. Mã hóa vận chuyển cũng thông qua lớp mạng (ví dụ: VPN).
  • Thu nhỏ dịch vụ và thay đổi cổng nghe mặc định
  • Xóa mọi mẫu hoặc cơ sở dữ liệu kiểm tra
  • Có một quy trình quản lý bản vá để xác định, đánh giá và cài đặt tất cả các bản vá bảo mật có liên quan một cách kịp thời
  • Làm cứng nền tảng và nền tảng ảo hóa nếu được sử dụng
  • Định cấu hình các điều khiển mạng thích hợp, ví dụ: Tường lửa, Vlan để giảm thiểu quyền truy cập vào cơ sở dữ liệu, từ chối dịch vụ lọc dịch vụ ngược dòng, DNS đủ điều kiện, tách biệt cơ sở dữ liệu sản xuất và không sản xuất
  • Môi trường an toàn về mặt vật lý
  • Có quy trình quản lý thay đổi
25
Rakkhi

Dưới đây là danh sách kiểm tra bảo mật MongoDB

Bật auth - Ngay cả khi bạn đã triển khai các máy chủ Mongodb của mình trong một mạng đáng tin cậy, đó là cách thực hành bảo mật tốt để bật auth. Nó cung cấp cho bạn hệ thống phòng thủ sâu sắc nếu mạng của bạn bị xâm phạm. Chỉnh sửa tập tin cấu hình mongod của bạn để bật auth

Don Tiết lộ db sản xuất của bạn với internet - Hạn chế quyền truy cập vật lý vào cơ sở dữ liệu của bạn là một khía cạnh quan trọng của bảo mật. Nếu không cần thiết, đừng để lộ cơ sở dữ liệu sản xuất của bạn lên internet. Trong trường hợp có bất kỳ thỏa hiệp nào nếu kẻ tấn công không thể kết nối vật lý với máy chủ MongoDB của bạn, dữ liệu của bạn an toàn hơn nhiều. Nếu bạn đang ở trên AWS, bạn có thể đặt db của bạn vào mạng con riêng tư VPC. Đọc bài đăng trên blog Triển khai MongoDB trong VPC để biết thêm thông tin.

Sử dụng tường lửa - Sử dụng tường lửa để hạn chế những thực thể khác được phép kết nối với máy chủ mongodb của bạn. Thực hành tốt nhất là chỉ cho phép các máy chủ ứng dụng của bạn truy cập vào cơ sở dữ liệu. Nếu bạn được lưu trữ trên AWS, hãy sử dụng Nhóm bảo mật để hạn chế quyền truy cập. Nếu bạn được lưu trữ trên một nhà cung cấp không hỗ trợ các cấu trúc tường lửa, bạn có thể dễ dàng tự cấu hình nó bằng cách sử dụng ‘iptables. Tham khảo tài liệu mongodb để định cấu hình iptables cho kịch bản của bạn.

Sử dụng các tệp chính để thiết lập bộ bản sao - Chỉ định tệp khóa được chia sẻ để cho phép liên lạc giữa các phiên bản mongodb của bạn trong một bộ bản sao. Để kích hoạt tính năng này, hãy thêm tham số keyfile vào tệp cấu hình như bên dưới. Nội dung của tệp cần giống nhau trên tất cả các máy.

Vô hiệu hóa giao diện trạng thái HTTP Mongodb theo mặc định cung cấp giao diện http chạy theo mặc định trên cổng 28017, cung cấp trang trạng thái của nhà ở nhà. Giao diện này không được khuyến khích sử dụng cho sản xuất và bị vô hiệu hóa tốt nhất. Sử dụng cài đặt cấu hình của nohttpinterface trực tiếp để vô hiệu hóa giao diện http.

Vô hiệu hóa giao diện REST Giao diện monogdb REST không được khuyến nghị để sản xuất. Nó không hỗ trợ bất kỳ xác thực nào. Nó bị tắt theo mặc định. Nếu bạn đã tắt theo mặc định. tùy chọn này bằng cách sử dụng tùy chọn cấu hình của phần còn lại, bạn nên tắt nó cho các hệ thống sản xuất.

Định cấu hình Bind_ip Nếu hệ thống của bạn có nhiều giao diện mạng, bạn có thể sử dụng tùy chọn ràng buộc của mối liên kết, để hạn chế máy chủ mongodb của bạn chỉ nghe trên các giao diện có liên quan. Theo mặc định mongodb sẽ liên kết với tất cả các giao diện

Kích hoạt SSL - Nếu bạn không sử dụng SSL, dữ liệu của bạn sẽ di chuyển giữa máy khách Mongo và máy chủ Mongo không được mã hóa và dễ bị nghe lén, giả mạo và người đàn ông trong các cuộc tấn công trung gian. Điều này đặc biệt quan trọng nếu bạn đang kết nối với máy chủ Mongodb của mình qua các mạng không an toàn như internet.

Ủy quyền dựa trên vai trò - MongoDB hỗ trợ xác thực dựa trên vai trò để cung cấp cho bạn quyền kiểm soát chi tiết đối với các hành động có thể được thực hiện bởi mỗi người dùng. Sử dụng các cấu trúc dựa trên vai trò để hạn chế quyền truy cập thay vì tạo tất cả quản trị viên người dùng của bạn. Tham khảo tài liệu về vai trò để biết thêm chi tiết.

Enterprise mongodb & Kerberos Enterprise mongodb tích hợp với Kerberos để xác thực. Tham khảo tài liệu mongodb để biết thêm chi tiết. Hệ thống tên người dùng/mật khẩu vốn không an toàn - sử dụng xác thực dựa trên lề đường nếu có thể.

https://scalegrid.io/blog/10-tips-to-improve-your-mongodb-security/

Tuyên bố miễn trừ trách nhiệm: Tôi là người sáng lập của scalegrid.io

Ngoài ra, tôi cũng khuyên bạn nên mã hóa dữ liệu mongodb của mình khi nghỉ ngơi như các bình luận khác đã chỉ ra. Bạn có thể sử dụng LUKS (thiết lập khóa hợp nhất Linux) để thiết lập mã hóa mức âm lượng.

2
Dharshan

Vài điều rất cần nhớ ban đầu là:

  • Xóa IP Binding khỏi tất cả để chỉ IP (private hoặc localhost), bạn sẽ nhận được Yêu cầu kết nối
  • Thay đổi các ràng buộc cổng mặc định
  • Chỉ cung cấp quyền yêu cầu (như không có quyền cập nhật/xóa để chọn người dùng truy vấn)
  • Thiết lập các khóa ssh cho kết nối master-Slave cần thiết, loại bỏ sự liên quan của mật khẩu
  • Bạn thậm chí có thể thiết lập một đường hầm được mã hóa để kết nối giữa ứng dụng của bạn và mongodb

thực tế chúng được áp dụng trên tất cả các Dịch vụ DataStorage

PS: kinh nghiệm mongodb rất hạn chế

2
AbhishekKr