全部产品
Search
文档中心

Cloud Firewall:Melindungi dari akses tidak sah ke database MongoDB

更新时间:Jun 28, 2025

Akses tidak sah ke database MongoDB dapat menyebabkan kebocoran data, penghapusan data, atau bahkan pemerasan.

Informasi latar belakang

Untuk memastikan keamanan bisnis dan aplikasi Anda, Cloud Firewall menyediakan solusi untuk menangani kerentanan terkait akses tidak sah ke database MongoDB.

Setelah layanan MongoDB diinstal, database admin dibuat. Secara default, database admin kosong dan tidak berisi informasi autentikasi pengguna.

Secara default, MongoDB tidak memerlukan autentikasi pengguna. Jika parameter tidak dikonfigurasi saat memulai layanan MongoDB, autentikasi pengguna tidak diperlukan untuk mengakses database. Pengguna dapat melakukan operasi berisiko tinggi seperti menyisipkan, menghapus, memodifikasi, atau menanyakan data melalui port default dalam mode tanpa kata sandi. Selain itu, pengguna juga dapat mengakses database secara remote.

Untuk mengatasi masalah ini, tambahkan pengguna ke koleksi admin.system.users. Dengan cara ini, autentikasi pengguna akan diaktifkan untuk database MongoDB.

Solusi

  1. Configure access control policies in Cloud Firewall.

    1. Konfigurasikan kebijakan untuk mengizinkan akses ke layanan MongoDB hanya dari server yang berada di jaringan internal.

      Masuk ke Konsol Cloud Firewall. Di panel navigasi sebelah kiri, pilih Traffic Analysis > Internet Exposure. Pada halaman Eksposur Internet, buka tab Exposure Details > Open Applications. Kemudian, periksa alamat IP publik layanan MongoDB. Jika layanan MongoDB dimaksudkan hanya untuk server jaringan internal, disarankan untuk mengonfigurasi pengaturan agar layanan MongoDB tidak diekspos ke Internet.

      Jalankan perintah berikut untuk mengikat layanan MongoDB ke alamat IP sehingga hanya mengizinkan akses dari server jaringan internal. Dalam contoh ini, alamat IP privat 192.168.XX.XX diikat ke layanan MongoDB, dan layanan tersebut hanya memantau permintaan dari alamat IP tersebut.

      mongod --bind_ip 192.168.XX.XX
    2. Konfigurasikan kebijakan kontrol akses untuk mengizinkan akses ke layanan MongoDB hanya dari sumber tepercaya.

    1. Konfigurasikan kebijakan Allow untuk mengizinkan akses ke layanan MongoDB hanya dari sumber tepercaya.

      Masuk ke Konsol Cloud Firewall. Di panel navigasi sebelah kiri, pilih Access Control > Internet Border. Pada halaman Batas Internet, klik tab Inbound dan konfigurasikan kebijakan untuk mengizinkan akses ke layanan MongoDB hanya dari server yang bergantung pada database MongoDB.

      1. Pada tab Inbound, klik Address Books. Pada tab Custom Address Book > IPv4 Address Book, buat buku alamat dan tambahkan semua sumber tepercaya layanan MongoDB ke buku alamat tersebut.

      2. Pada tab Inbound, klik Create Policy. Pada tab Create Inbound Policy > Create Policy, tentukan buku alamat untuk membuat kebijakan Allow.

        • Source: Tentukan kotak alamat yang berisi sumber tepercaya layanan MongoDB.

        • Destination: Tentukan alamat IP publik layanan MongoDB.

        • Protocol Type: Pilih TCP, yang menunjukkan trafik akses Internet.

        • Port: Tentukan 0/0, yang menunjukkan semua port dari sumber tepercaya.

    2. Konfigurasikan kebijakan Deny untuk menolak akses ke layanan MongoDB dari semua sumber.

      Di panel navigasi sebelah kiri, pilih Access Control > Internet Border. Pada halaman yang muncul, klik tab Inbound dan konfigurasikan kebijakan untuk menolak akses ke layanan MongoDB dari semua sumber.

      Pada tab Inbound, klik Create Policy. Pada tab Create Inbound Policy > Create Policy, buat kebijakan untuk menolak akses ke layanan MongoDB dari semua sumber.

      • Source: Tentukan 0.0.0.0/0, yang menunjukkan semua sumber.

      • Destination: Tentukan alamat IP publik layanan MongoDB.

      • Protocol Type: Pilih TCP, yang menunjukkan trafik akses Internet.

      • Port: Tentukan 0/0, yang menunjukkan semua port dari sumber.

  2. Aktifkan autentikasi pengguna berbasis peran.

    1. Jalankan perintah berikut untuk masuk ke database sebelum autentikasi pengguna diaktifkan:

      ./mongo 127.0.0.1:27028 (Port default tidak digunakan.)
    2. Jalankan perintah berikut untuk beralih ke database admin:

      use admin
      switched to db admin
      Catatan

      Akun administrator hanya dapat dibuat di database admin.

    3. Jalankan perintah berikut untuk membuat akun administrator di database admin. Dalam contoh ini, nama pengguna adalah su****, dan kata sandinya adalah supWDx****.

      Catatan

      Pada MongoDB V3 dan versi lebih baru, metode addUser tidak lagi didukung. Gunakan perintah db.createUser untuk membuat pengguna.

      db.addUser("su****", "supWDx****") or
      { "n" : 0, "connectionId" : 4, "err" : null, "ok" : 1 }
      db.createUser({user:"****",pwd:"***********",roles:["root"]})
      {
      "user" : "****",
      "readOnly" : false,
      "pwd" : "**************","_id"
      ObjectId("4f2bc0d357a309043c6947a4")
      }
      # Simpan akun administrator di koleksi system.users. 
      db.getCollectionNames()
      [ "system.indexes", "system.users", "system.version" ]

      Akun administrator yang dibuat disimpan di koleksi system.users.

      Catatan

      Hindari menggunakan nama pengguna umum. Gunakan kata sandi yang kompleks dengan minimal delapan karakter, mencakup huruf besar, huruf kecil, angka, dan karakter khusus.

    4. Verifikasi bahwa akun administrator telah dibuat.

      Jalankan perintah berikut. Jika 1 dikembalikan, akun administrator telah berhasil dibuat.

      db.auth("su****","supWDx****")
      1
                                      
    5. Hentikan proses MongoDB dan mulai ulang layanan MongoDB.

      db.auth("su****","supWDx****")
      exit
      bye
    6. Jalankan perintah berikut untuk mengaktifkan autentikasi pengguna.

      Setelah autentikasi pengguna diaktifkan, pengguna yang tidak masuk ke database MongoDB tidak dapat melakukan operasi apa pun.

      mongod --dbpath=/path/mongodb --bind_ip=10.0.0.1 --port=27028 --fork=true logpath=/path/mongod.log --auth&
    Catatan
    • Pengguna yang disimpan di koleksi admin.system.users memiliki izin superuser, sedangkan pengguna yang dibuat di database lain tidak. Pengguna yang dibuat di database admin dapat melakukan operasi pada data di database lain dalam sistem MongoDB saat ini.

    • Dalam sistem MongoDB, database dibuat oleh superuser. Database dapat menyimpan beberapa pengguna, tetapi satu pengguna hanya dapat disimpan di satu database. Pengguna di database yang berbeda dapat berbagi nama yang sama.

    • Sebagai contoh, User1 yang disimpan di DB1 tidak dapat mengakses DB2 tetapi dapat mengakses data yang dibuat oleh pengguna lain di DB1.

    • Pengguna yang berbagi nama yang sama di database yang berbeda hanya dapat masuk ke satu database. Sebagai contoh, jika User1 ada di DB1 dan DB2 dan masuk ke DB1, User1 tidak dapat masuk ke DB2.

    • Pengguna yang dibuat di database admin memiliki izin superuser dan dapat melakukan operasi pada data di semua database dalam sistem MongoDB saat ini.

    • Gunakan metode db.auth() untuk mengotentikasi pengguna di database. Jika otentikasi berhasil, nilai 1 dikembalikan. Jika tidak, nilai 0 dikembalikan. Metode db.auth() hanya dapat mengotentikasi pengguna di database tempat pengguna logon saat ini.

Periksa intrusi

Jika Anda adalah administrator database MongoDB, Anda dapat mengambil langkah-langkah berikut untuk memeriksa intrusi:

  • Periksa apakah log MongoDB lengkap. Kemudian, periksa alamat IP pengguna yang menghapus database dan waktu ketika database dihapus.

  • Jalankan perintah db.system.users.find() untuk memeriksa apakah kata sandi dikonfigurasi untuk setiap akun MongoDB.

  • Jalankan perintah db.fs.files.find() untuk memeriksa apakah pengguna lain menyimpan file menggunakan GridFS.

  • Jalankan perintah show log global untuk melihat file log. Kemudian, periksa apakah pengguna lain mengakses database MongoDB.