Mongodb uri với tên người dùng và mật khẩu

Các hướng dẫn này dành cho Oracle Linux 7. Các lệnh cho các bản phân phối khác sẽ khác. Đầu tiên cài đặt và khởi động MongoDB

Cài đặt

sudo tee /etc/yum.repos.d/mongodb-org-4.0.repo 100 tài liệu mỗi giây. Hãy bám vào cấu hình này cho ba loại xác thực mà chúng ta đang xem xét

Thông tin đăng nhập MongoDB trong các bài tập

Trong phần này, chúng tôi muốn phát triển một trình phát hiện để bắt máy chủ, tên người dùng và mật khẩu, tất cả đều được đặt trong cùng một tài liệu

Giới thiệu về Bài tập

Phép gán là bất kỳ cấu trúc mã nào trong đó một giá trị được gán cho một biến. GitGuardian đã phát triển một công cụ so khớp bài tập duy nhất có thể phát hiện nhiều loại bài tập khác nhau, bất kể chúng được viết bằng ngôn ngữ nào. Đây là một danh sách nhỏ các nhiệm vụ có thể chúng tôi sẽ phát hiện

mongo
use admin;
db.createUser[
  {
    user: "admin",
    pwd: "PASSWORD",
    roles: [
      "userAdminAnyDatabase",
      "dbAdminAnyDatabase",
      "readWriteAnyDatabase"
    ]
  }
];
2
mongo
use admin;
db.createUser[
  {
    user: "admin",
    pwd: "PASSWORD",
    roles: [
      "userAdminAnyDatabase",
      "dbAdminAnyDatabase",
      "readWriteAnyDatabase"
    ]
  }
];
3
mongo
use admin;
db.createUser[
  {
    user: "admin",
    pwd: "PASSWORD",
    roles: [
      "userAdminAnyDatabase",
      "dbAdminAnyDatabase",
      "readWriteAnyDatabase"
    ]
  }
];
4
mongo
use admin;
db.createUser[
  {
    user: "admin",
    pwd: "PASSWORD",
    roles: [
      "userAdminAnyDatabase",
      "dbAdminAnyDatabase",
      "readWriteAnyDatabase"
    ]
  }
];
5

máy dò rộng

Vì chúng tôi có thể phát hiện các mẫu này, hãy tinh chỉnh một chút và thêm một số ràng buộc để tạo phiên bản đầu tiên của trình phát hiện của chúng tôi

Đối với mỗi trận đấu [máy chủ, tên người dùng và mật khẩu], chúng tôi muốn biến được chỉ định có db hoặc cơ sở dữ liệu hoặc mongo làm tiền tố và máy chủ, tên người dùng hoặc mật khẩu làm hậu tố. Lưu ý rằng việc có db làm tiền tố là đủ để thông tin xác thực được coi là thông tin đăng nhập mongoDB vì “mongo” phải có trong nội dung tệp.
Biến cũng phải tuân theo biểu thức chính quy chuyên dụng.

  • Máy chủ phải là tên máy chủ thông thường hoặc địa chỉ IPv4. Chúng tôi sử dụng các phương pháp regex tiêu chuẩn cho việc này
  • Tên người dùng và mật khẩu có độ dài và bộ ký tự tùy chỉnh mà chúng tôi đã cẩn thận xác định là có liên quan bằng cách thử nghiệm các thuật toán của chúng tôi trên lịch sử GitHub

CHÚNG TÔI SẼ TRẬN GÌ

mongo
use admin;
db.createUser[
  {
    user: "admin",
    pwd: "PASSWORD",
    roles: [
      "userAdminAnyDatabase",
      "dbAdminAnyDatabase",
      "readWriteAnyDatabase"
    ]
  }
];
6

NHỮNG GÌ CHÚNG TÔI SẼ KHÔNG HỢP LỆ

mongo
use admin;
db.createUser[
  {
    user: "admin",
    pwd: "PASSWORD",
    roles: [
      "userAdminAnyDatabase",
      "dbAdminAnyDatabase",
      "readWriteAnyDatabase"
    ]
  }
];
7

Các cải tiến với bước xác thực sau

Tại thời điểm đó, mặc dù kết quả rất thú vị, chúng tôi muốn chọn thêm các bí mật bằng cách xóa một số giá trị. Hãy nhớ rằng cuối cùng, chúng tôi muốn xuất ra nhiều bí mật khớp được tạo từ sự kết hợp của tất cả máy chủ, tên người dùng và mật khẩu bị bắt. Để tránh bùng nổ tổ hợp, chúng tôi muốn loại bỏ các trận đấu không liên quan càng sớm càng tốt

Đối với điều này, nhóm kỹ thuật của GitGuardian đã đưa ra một loạt các trình xác thực bài đăng rất hiệu quả

Chẳng hạn, chúng tôi đã phát triển bước xác thực sau để loại bỏ mọi giá trị không liên quan phổ biến cho máy chủ lưu trữ. Nhờ quét trực tiếp luồng GitHub, chúng tôi có thể tự động điều chỉnh danh sách này dựa trên kết quả chúng tôi nhận được. Nó chứa nhiều giá trị vô dụng như. thí dụ. com, đồ giả. com,. mặc định, IP cục bộ và nhiều thứ khác. Chúng tôi áp dụng cùng một loại heuristic cho tên người dùng và mật khẩu đã khớp trước đó

Chúng tôi có thể cấm các giá trị tùy chỉnh khác khỏi kết quả. Chẳng hạn, trong khi chạy trình phát hiện hiện tại, chúng tôi đã thấy nhiều giá trị dương tính giả ở dạng sau

mongo
use admin;
db.createUser[
  {
    user: "admin",
    pwd: "PASSWORD",
    roles: [
      "userAdminAnyDatabase",
      "dbAdminAnyDatabase",
      "readWriteAnyDatabase"
    ]
  }
];
8

Do đó, config được thêm vào danh sách các giá trị của chúng tôi

Cuối cùng, chúng tôi cũng cấm các giá trị dựa trên entropy Shannon của chúng để loại bỏ một số trình giữ chỗ. Chẳng hạn, một

mongo
use admin;
db.createUser[
  {
    user: "admin",
    pwd: "PASSWORD",
    roles: [
      "userAdminAnyDatabase",
      "dbAdminAnyDatabase",
      "readWriteAnyDatabase"
    ]
  }
];
02 sẽ không có entropy đủ cao để được coi là một máy chủ hợp lệ. Ngưỡng sử dụng được xác định theo kinh nghiệm bằng cách kiểm tra thuật toán trong điều kiện thực tế

Khi các kết quả khớp chính xác cho máy chủ, tên người dùng và mật khẩu được thu thập, chúng tôi tính toán tất cả các kết hợp có thể có để có các ứng cử viên bí mật. Mặc dù chúng ta có thể dừng lại ở đây, nhưng GitGuardian có vũ khí cuối cùng để dọn dẹp mọi thứ và chỉ mang lại kết quả phù hợp nhất. Chúng tôi đã phát triển các chiến lược khác nhau để thu hẹp các ứng cử viên bí mật có thể có trong một tài liệu. Các chiến lược này có thể dựa trên khoảng cách giữa các kết quả phù hợp trong tài liệu, nhưng cũng có thể dựa trên sự giống nhau giữa các biến gán chẳng hạn

Nói cách khác, điều này tránh đưa ra cảnh báo khi chúng tôi tìm thấy máy chủ lưu trữ ở đầu tài liệu, tên người dùng ở giữa và mật khẩu ở cuối, vì ba giá trị này hầu như không liên quan đến cùng một tài nguyên. Hoặc, điều này cho phép loại bỏ một bí mật trong đó máy chủ được gán cho một

mongo
use admin;
db.createUser[
  {
    user: "admin",
    pwd: "PASSWORD",
    roles: [
      "userAdminAnyDatabase",
      "dbAdminAnyDatabase",
      "readWriteAnyDatabase"
    ]
  }
];
03, trong khi tên người dùng và mật khẩu được gán tương ứng cho
mongo
use admin;
db.createUser[
  {
    user: "admin",
    pwd: "PASSWORD",
    roles: [
      "userAdminAnyDatabase",
      "dbAdminAnyDatabase",
      "readWriteAnyDatabase"
    ]
  }
];
04 và
mongo
use admin;
db.createUser[
  {
    user: "admin",
    pwd: "PASSWORD",
    roles: [
      "userAdminAnyDatabase",
      "dbAdminAnyDatabase",
      "readWriteAnyDatabase"
    ]
  }
];
05

Cuối cùng, máy dò này bắt được 30 bí mật mỗi tuần với độ chính xác rất cao. Nhờ các mô hình trực tiếp và vòng phản hồi của chúng tôi, chúng tôi có thể lặp lại nhanh chóng để tinh chỉnh kết quả

Thông tin đăng nhập MongoDB trong chuỗi kết nối URI

Mẫu URI

Loại xác thực thứ hai có vẻ rất phổ biến là sử dụng chuỗi kết nối URI để cung cấp máy chủ, tên người dùng và mật khẩu [và thậm chí cả cổng, cơ sở dữ liệu hoặc truy vấn] cho trình điều khiển

Vì định dạng chuỗi kết nối URI được chuẩn hóa cho MongoDB nên việc phát triển trình phát hiện khá đơn giản. Chúng tôi đang tìm kiếm một chuỗi có định dạng sau

mongo
use admin;
db.createUser[
  {
    user: "admin",
    pwd: "PASSWORD",
    roles: [
      "userAdminAnyDatabase",
      "dbAdminAnyDatabase",
      "readWriteAnyDatabase"
    ]
  }
];
00

Trong trường hợp của chúng tôi, lược đồ mà chúng tôi đang tìm kiếm thường được thêm vào trước bởi “mongodb” và biểu thức chính quy tổng thể đảm bảo mức độ tin cậy khá cao

xác thực sau

Không có bất kỳ bước xác thực nào, kết quả vẫn cần một chút công việc

  • 20% kết quả có mật khẩu bằng hoặc gần với “mật khẩu”

    mongo
    use admin;
    db.createUser[
      {
        user: "admin",
        pwd: "PASSWORD",
        roles: [
          "userAdminAnyDatabase",
          "dbAdminAnyDatabase",
          "readWriteAnyDatabase"
        ]
      }
    ];
    
    06

  • Gần 10% giá trị được liên kết với “máy chủ cục bộ” hoặc IP cục bộ

    mongo
    use admin;
    db.createUser[
      {
        user: "admin",
        pwd: "PASSWORD",
        roles: [
          "userAdminAnyDatabase",
          "dbAdminAnyDatabase",
          "readWriteAnyDatabase"
        ]
      }
    ];
    
    07

  • Và 2-3% chứa “xxx” hoặc các hình thức giữ chỗ khác

    mongo
    use admin;
    db.createUser[
      {
        user: "admin",
        pwd: "PASSWORD",
        roles: [
          "userAdminAnyDatabase",
          "dbAdminAnyDatabase",
          "readWriteAnyDatabase"
        ]
      }
    ];
    
    08
    mongo
    use admin;
    db.createUser[
      {
        user: "admin",
        pwd: "PASSWORD",
        roles: [
          "userAdminAnyDatabase",
          "dbAdminAnyDatabase",
          "readWriteAnyDatabase"
        ]
      }
    ];
    
    09
    mongo
    use admin;
    db.createUser[
      {
        user: "admin",
        pwd: "PASSWORD",
        roles: [
          "userAdminAnyDatabase",
          "dbAdminAnyDatabase",
          "readWriteAnyDatabase"
        ]
      }
    ];
    
    10

Chủ Đề