MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Bảo mật Pre-Emptive với Ghi nhật ký Kiểm tra cho MongoDB

Bảo mật cơ sở dữ liệu là một chủ đề rộng lớn, trải dài từ các phép đo lường trước đến việc ngăn chặn những khách truy cập không mong muốn. Ngay cả khi bạn có thể bảo mật đầy đủ các máy chủ MongoDB của mình, bạn vẫn muốn biết liệu có ai đó đã cố gắng xâm nhập vào hệ thống của bạn hay không. Và nếu họ quản lý để vi phạm bảo mật của bạn và cài đặt hack MongoDB đòi tiền chuộc, bạn sẽ cần một dấu vết kiểm tra cho những lần sau khi hành xác hoặc để thực hiện các biện pháp phòng ngừa mới. Nhật ký kiểm tra sẽ cho phép bạn theo dõi bất kỳ ai cố gắng đăng nhập và xem họ đã làm gì trong hệ thống của bạn.

Phiên bản MongoDB Enterprise có khả năng bật nhật ký kiểm tra, nhưng phiên bản cộng đồng thiếu chức năng này. Percona đã tạo chức năng ghi nhật ký kiểm tra của riêng họ trong Máy chủ Percona bắt nguồn từ MongoDB cho MongoDB. Các phương pháp tiếp cận MongoDB và Percona khác nhau và chúng tôi sẽ giải thích cách định cấu hình và sử dụng cả hai phương pháp này.

Ghi nhật ký kiểm tra MongoDB

Nhật ký kiểm tra MongoDB rất dễ thiết lập:để bật ghi nhật ký kiểm tra vào tệp JSON, chỉ cần thêm phần sau vào tệp cấu hình của bạn và khởi động lại MongoDB:

auditLog:
   destination: file
   format: JSON
   path: /var/lib/mongodb/auditLog.json

MongoDB hỗ trợ tệp, bảng điều khiển và nhật ký hệ thống dưới dạng đích. Đối với các định dạng tệp, có hai tùy chọn:JSON và BSON. Trong JSON, các dòng nhật ký kiểm tra trông tương tự như sau:

{ "atype" : "authCheck", "ts" : { "$date" : "2017-02-15T22:20:08.322-0000" }, "local" : { "ip" : "127.0.0.1", "port" : 27017 }, "remote" : { "ip" : "127.0.0.1", "port" : 63357 }, "users" : [], "roles" : [], "param" : { "command" : "update", "ns" : "test.inserttest", "args" : { "update" : "preauth_case", "updates" : [ { "q" : { "createdByUserId" : -2 }, "u" : { "$set" : { "statusCode" : "Update" } }, "multi" : false, "upsert" : false } ], "ordered" : true } }, "result" : 0 }

Cấu hình ở trên sẽ kích hoạt nhật ký kiểm tra cho từng và mọi hành động của bất kỳ người dùng nào trong hệ thống của bạn. Nếu bạn có tính đồng thời cao, điều này sẽ làm giảm đáng kể hiệu suất của cụm MongoDB của bạn. May mắn thay, có tùy chọn để lọc các sự kiện sẽ được ghi lại.

Các bộ lọc cho ghi nhật ký kiểm tra có thể được đặt trên loại truy vấn, truy vấn người dùng / vai trò hoặc trên bộ sưu tập đang được truy vấn. Tài liệu về ghi nhật ký kiểm toán tại MongoDB rất rộng và dài với nhiều ví dụ. Chúng tôi sẽ đưa ra một số ví dụ quan trọng nhất bên dưới.

Xác thực dựa trên một tập hợp cụ thể:

    filter: '{ atype: "authenticate", "param.db": "test" }'

Nhật ký cho nhiều loại kiểm tra:

    filter: '{ atype: { $in [ "update", "delete" ]}, "param.db": "test" }'

Ghi nhật ký tất cả các lần kiểm tra xác thực để chèn / cập nhật / xóa trên một bộ sưu tập cụ thể:

    filter: '{ atype: "authCheck", "param.ns": "test.orders", "param.command": { $in: [ "find", "insert", "delete", "update", "findandmodify" ] } }'

Như bạn có thể thấy, các bộ lọc có thể khá linh hoạt và bạn có thể lọc các thông báo mà bạn yêu cầu cho quá trình kiểm tra của mình.

Vài người trở thành MongoDB DBA - Đưa MongoDB vào Sản xuất Tìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng MongoDBDownload miễn phí

Máy chủ Percona để ghi nhật ký kiểm tra MongoDB

Máy chủ Percona để ghi nhật ký kiểm tra MongoDB được giới hạn ở tệp JSON. Phần lớn người dùng sẽ chỉ đăng nhập vào các tệp JSON, nhưng không rõ liệu Percona có thêm các phương tiện ghi khác trong tương lai hay không.

Tùy thuộc vào phiên bản Máy chủ Percona cho MongoDB, cấu hình của bạn có thể khác nhau. Tại thời điểm viết bài, tất cả các phiên bản đều có cú pháp sau:

audit:
   destination: file
   format: JSON
   path: /var/lib/mongodb/auditLog.json

Tuy nhiên sự khác biệt về cấu hình này gần đây đã được giải quyết, nhưng vẫn phải phát hành. Sau khi phát hành, nó sẽ tuân theo chỉ thị MongoDB AuditLog một lần nữa:

auditLog:
   destination: file
   format: JSON
   path: /var/lib/mongodb/auditLog.json

Định dạng của Percona hơi khác một chút:

{ "atype" : "authenticate", "ts" : { "$date" : { "$numberLong" : "1487206721903" } }, "local" : { "host" : "n3", "port" : 27017 }, "remote" : { "host" : "172.16.140.10", "port" : 50008 }, "users" : [ { "user" : "admin", "db" : "admin" } ], "params" : { "user" : "admin", "db" : "admin", "mechanism" : "SCRAM-SHA-1" }, "result" : 0 }

Trái ngược với MongoDB ghi nhật ký mọi thứ, Percona chọn chỉ ghi nhật ký các lệnh quan trọng. Đánh giá từ nguồn của plugin kiểm tra Percona, các truy vấn sau được hỗ trợ:xác thực, tạo / cập nhật / xóa người dùng, thêm / cập nhật / xóa vai trò, tạo / thả cơ sở dữ liệu / chỉ mục và hầu hết các lệnh quản trị quan trọng.

Ngoài ra, việc lọc Máy chủ Percona cho nhật ký kiểm tra MongoDB dường như không tuân theo tiêu chuẩn giống như MongoDB có. Không rõ cú pháp và các tùy chọn chính xác của bộ lọc là gì vì tài liệu Percona rất ngắn gọn về nó.

Bật nhật ký kiểm toán mà không lọc sẽ cung cấp cho bạn nhiều hơn đủ mục nhập trong tệp nhật ký của bạn. Từ đây, bạn có thể thu hẹp bộ lọc xuống, vì nó tuân theo cú pháp JSON của các mục nhật ký.

Sử dụng Nhật ký kiểm tra

Để giúp bạn dễ dàng hơn, cách tốt nhất có thể là cung cấp nhật ký kiểm tra vào khung phân tích nhật ký. Ngăn xếp ELK là một môi trường tuyệt vời để thực hiện phân tích của bạn và nó cho phép bạn đi sâu vào các cấp độ chi tiết hơn một cách khá dễ dàng. Việc sử dụng máy lập bản đồ hiện trường thậm chí sẽ cho phép bạn thực hiện theo dõi kiểm tra bên trong ELK.

Như được mô tả trong phần giới thiệu, chúng tôi có thể sử dụng nhật ký kiểm tra cho các mục đích bảo mật khác nhau. Điều rõ ràng nhất là khi bạn cần nó làm tài liệu tham khảo trong quá trình khám nghiệm tử thi. Nhật ký kiểm tra MongoDB cung cấp tổng quan chi tiết về những gì đã xảy ra chính xác. Nhật ký kiểm tra Percona chứa ít thông tin hơn một chút, nhưng nó sẽ đủ cho hầu hết các lần sau khi hành xác. Việc sử dụng nhật ký kiểm tra cho những lần xử lý sau là rất tốt, mặc dù chúng tôi muốn ngăn chặn vấn đề này ngay từ đầu.

Một mục đích khác của nhật ký kiểm tra là để xem các xu hướng đang xảy ra và bạn có thể đặt bẫy trên một thông báo nhật ký kiểm tra nhất định. Một ví dụ điển hình là kiểm tra tỷ lệ (không thành công) lần thử xác thực và nếu điều này vượt quá một ngưỡng nhất định, hãy hành động theo nó. Tùy thuộc vào tình huống, hành động được thực hiện có thể khác nhau. Một hành động có thể là tự động chặn địa chỉ ip mà các yêu cầu đến, nhưng trong một trường hợp khác, bạn có thể tham khảo ý kiến ​​của người dùng về lý do quên mật khẩu. Nó thực sự phụ thuộc vào trường hợp và môi trường bạn đang làm việc.

Một phép đo lường trước nâng cao khác sẽ là sử dụng MongoDB làm honeypot và tận dụng nhật ký kiểm tra để bắt người dùng không mong muốn. Chỉ cần để lộ MongoDB và cho phép bất kỳ ai kết nối với máy chủ MongoDB của bạn. Sau đó, sử dụng nhật ký kiểm tra để phát hiện người dùng sẽ làm gì nếu họ được phép làm những việc vượt quá quyền hạn bình thường của họ và chặn họ nếu cần. Hầu hết con người thích đi theo cách dễ dàng hơn là cách khó, vì vậy honeypot có thể làm chệch hướng một cuộc tấn công và tin tặc sẽ chuyển sang mục tiêu tiếp theo.

Kết luận

Ngoài việc giải thích cách thiết lập nhật ký kiểm tra cho cả MongoDB Enterprise và Máy chủ Percona cho MongoDB, chúng tôi cũng giải thích những gì bạn có thể làm với dữ liệu đã ghi bên trong nhật ký kiểm tra.

Theo mặc định, ClusterControl sẽ không bật nhật ký kiểm tra, nhưng tương đối dễ dàng để kích hoạt nó theo cụm rộng bằng cách sử dụng Trình quản lý cấu hình của chúng tôi. Bạn cũng có thể kích hoạt nó bên trong các mẫu cấu hình, trước khi triển khai một cụm mới.

Chúc các bạn thành nhóm vui vẻ!


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb chèn tài liệu không có trường _id

  2. Làm cách nào để thực hiện truy vấn tổng hợp Mongo trong Dữ liệu mùa xuân?

  3. MongoDB, xóa đối tượng khỏi mảng

  4. Nhóm Mongodb và sắp xếp

  5. Xử lý các thay đổi giản đồ trong Mongoose