it-swarm-id.com

Bagaimana cara mengamankan instance MongoDB?

Apakah ada yang punya pengalaman dengan pengamanan/pengerasan server MongoDB? Daftar periksa atau panduan akan diterima.

28
AaronS

Basis data NoSQL relatif baru (walaupun bisa dibilang konsep lama), saya belum melihat panduan pengerasan MongoDB spesifik dan tempat-tempat yang biasa saya lihat ( CISSecurity , publikasi vendor, Sans, dll.). Menyarankan itu akan menjadi proyek yang bagus untuk organisasi, uni mahasiswa, komunitas infosec untuk menulis dan memeliharanya.

Ada beberapa informasi dasar di Mongodb.org. Semua langkah di sini harus diikuti termasuk mengaktifkan keamanan. Situs itu sendiri menyatakan MongoDB hanya memiliki tingkat keamanan yang sangat dasar. http://www.mongodb.org/display/DOCS/Security+and+Authentication

MongoDB dan database NoSQL lainnya juga memiliki fitur yang jauh lebih sedikit (terutama keamanan) daripada database SQL dewasa, jadi Anda tidak mungkin menemukan izin berbutir halus atau enkripsi data, menggunakan MD5 untuk hashing kata sandi dengan nama pengguna sebagai seed. Ada juga batasan seperti otentikasi yang tidak tersedia dengan sharding sebelum versi 1.9.1 sehingga selalu melakukan penilaian risiko dan membangun model ancaman untuk memenuhi kebutuhan keamanan Anda dan ancaman yang dihadapi adalah ide yang baik. Berdasarkan output ini, database MongoDB atau NoSQL secara umum mungkin tidak cocok untuk kebutuhan Anda, atau Anda mungkin perlu menggunakannya dengan cara berbeda yang memaksimalkan keuntungan dan meminimalkan kelemahannya (misalnya untuk mengekstrak data daripada informasi Anda yang paling sensitif, atau di belakang sejumlah lapisan kontrol jaringan daripada langsung terhubung ke aplikasi web Anda).

Yang mengatakan, saya sangat percaya prinsip keamanan adalah teknologi agnostik. Jika Anda menganalisis bahkan serangan terbaru, dan daftar yang bagus di datalossdb.org, sungguh menakjubkan betapa banyak yang masih terkait dengan kata sandi default dan tambalan yang hilang. Dengan pertahanan yang mendalam jika Anda mengikuti praktik berikut ini harus memiliki keamanan yang cukup untuk melindungi sebagian besar aset (mis. Individu, komersial) mungkin mungkin bukan militer.

Prinsip pengerasan basis data:

  • Otentikasi - memerlukan otentikasi, untuk admin atau pengguna istimewa memiliki dua faktor jika memungkinkan (lakukan ini di tingkat platform atau melalui perangkat jaringan karena database itu sendiri tidak mendukungnya). Gunakan otentikasi berbasis kunci untuk menghindari kata sandi jika memungkinkan.
  • Otorisasi - jumlah minimal akun yang diperlukan dengan izin minimal yang diperlukan, hanya akun yang didukung yang didukung, jadi gunakan. Karena kontrol akses granular tidak ada, gunakan sarana alternatif mis. Layanan web di depan basis data yang berisi logika bisnis termasuk aturan kontrol akses atau dalam aplikasi. Minimalkan izin yang dijalankan Mongodb di platform, mis. seharusnya tidak dijalankan sebagai root.
  • Akun default dan sistem - ubah kata sandi semua akun default, hapus/kunci/nonaktifkan apa yang Anda bisa, nonaktifkan login di mana Anda bisa.
  • Penebangan dan pemantauan - aktifkan logging dan ekspor ini ke sistem pemantauan pusat. Tetapkan peringatan spesifik dan prosedur investigasi untuk staf pemantauan Anda
  • Validasi input - Basis data NoSQL masih rentan terhadap serangan injeksi sehingga hanya melewatinya yang memvalidasi input yang dikenal, penggunaan paramaterisasi dalam kerangka kerja aplikasi Anda, semua praktik yang baik untuk meneruskan input yang tidak tepercaya ke database diperlukan
  • Enkripsi - tergantung pada kepekaan data, karena Anda tidak dapat mengenkripsi pada tingkat basis data, diperlukan enkripsi atau hashing data sensitif pada lapisan aplikasi. Enkripsi transportasi juga melalui lapisan jaringan (mis. VPN).
  • Minimalkan layanan dan ubah porta mendengarkan standar
  • Hapus sampel atau basis data uji apa pun
  • Siapkan proses manajemen tambalan untuk mengidentifikasi, mengevaluasi, dan memasang semua tambalan keamanan yang relevan secara tepat waktu
  • Perketat platform dan platform virtualisasi jika digunakan
  • Konfigurasikan kontrol jaringan yang sesuai mis. firewall, VLAN untuk meminimalkan akses ke database, penolakan layanan penyaringan layanan hulu, DNS yang sepenuhnya memenuhi syarat, memisahkan produksi dan basis data non-produksi
  • Lingkungan yang aman secara fisik
  • Memiliki proses manajemen perubahan
25
Rakkhi

Berikut adalah daftar periksa untuk keamanan MongoDB

Aktifkan auth - Meskipun Anda telah menggunakan server Mongodb di jaringan tepercaya, ini merupakan praktik keamanan yang baik untuk mengaktifkan auth. Ini memberi Anda "Pertahanan mendalam" jika jaringan Anda terganggu. Edit file konfigurasi mongod Anda untuk mengaktifkan auth

Jangan memaparkan db produksi Anda ke internet - Membatasi akses fisik ke basis data Anda adalah aspek penting keamanan. Jika tidak perlu jangan biarkan database produksi Anda ke internet. Dalam hal terjadi kompromi jika penyerang tidak dapat terhubung secara fisik ke server MongoDB Anda, data Anda jauh lebih aman. Jika Anda menggunakan AWS, Anda dapat menempatkan db di subnet pribadi VPC. Baca posting blog Menyebarkan MongoDB dalam VPC untuk informasi lebih lanjut.

Gunakan firewall - Gunakan firewall untuk membatasi entitas lain yang diizinkan untuk terhubung ke server mongodb Anda. Praktik terbaik adalah dengan hanya mengizinkan server aplikasi Anda mengakses ke database. Jika Anda di-host pada AWS gunakan ‘Grup keamanan’ untuk membatasi akses. Jika Anda di-host pada penyedia yang tidak mendukung konstruksi firewall, Anda dapat dengan mudah mengonfigurasinya sendiri menggunakan ‘iptables’. Lihat dokumentasi mongodb untuk mengkonfigurasi iptables untuk skenario Anda.

Gunakan file kunci untuk mengatur set replika - Tentukan file kunci bersama untuk memungkinkan komunikasi antara instance mongodb Anda dalam set replika. Untuk mengaktifkannya, tambahkan parameter keyfile ke file config seperti di bawah ini. Isi file harus sama di semua mesin.

Nonaktifkan antarmuka status HTTP Mongodb secara default menyediakan antarmuka http yang berjalan secara default pada port 28017 yang menyediakan halaman status "home". Antarmuka ini tidak disarankan untuk penggunaan produksi dan sebaiknya dinonaktifkan. Gunakan pengaturan konfigurasi "nohttpinterface" untuk menonaktifkan antarmuka http.

Nonaktifkan antarmuka REST Monogdb REST antarmuka tidak disarankan untuk produksi. Tidak mendukung otentikasi apa pun. Ini dinonaktifkan secara default. Jika Anda telah mengubah pada penggunaan opsi konfigurasi "istirahat" Anda harus mematikannya untuk sistem produksi.

Konfigurasikan Bind_ip Jika sistem Anda memiliki banyak antarmuka jaringan, Anda dapat menggunakan opsi "bind_ip" untuk membatasi server mongodb Anda hanya untuk mendengarkan pada antarmuka yang relevan. Secara default mongodb akan mengikat semua antarmuka

Aktifkan SSL - Jika Anda tidak menggunakan SSL, data Anda bepergian antara klien Mongo dan server Mongo Anda tidak terenkripsi dan rentan terhadap serangan penyadapan, gangguan, dan serangan "man in the middle". Ini sangat penting jika Anda terhubung ke server Mongodb Anda melalui jaringan tidak aman seperti internet.

Otorisasi berbasis peran - MongoDB mendukung otentikasi berbasis peran untuk memberikan Anda kendali yang baik atas tindakan yang dapat dilakukan oleh setiap pengguna. Gunakan konstruksi berbasis peran untuk membatasi akses alih-alih menjadikan semua pengguna Anda admin. Lihat dokumentasi peran untuk detail lebih lanjut.

Enterprise mongodb & Kerberos Enterprise mongodb terintegrasi dengan Kerberos untuk otentikasi. Lihat dokumentasi mongodb untuk lebih jelasnya. Sistem nama pengguna/kata sandi pada dasarnya tidak aman - gunakan otentikasi berbasis trotoar jika memungkinkan.

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

Penafian: Saya adalah pendiri scalegrid.io

Selain itu saya akan merekomendasikan Anda juga mengenkripsi data mongodb Anda saat istirahat seperti komentar lain telah ditunjukkan. Anda dapat menggunakan LUKS (Linux unified key setup) untuk mengatur enkripsi level volume.

2
Dharshan

Beberapa hal awal yang perlu diingat adalah:

  • Hapus IP Binding dari semua hanya IP (host pribadi atau lokal), Anda mengharapkan untuk mendapatkan Permintaan Koneksi
  • Ubah Binding Port default
  • Berikan hanya izin yang diperlukan (seperti tidak ada izin perbarui/hapus untuk memilih pengguna kueri)
  • Atur kunci ssh untuk koneksi master-slave yang diperlukan, dengan menghapus keterlibatan kata sandi
  • Anda bahkan dapat mengatur terowongan terenkripsi untuk koneksi antara aplikasi Anda dan mongodb

sebenarnya mereka berlaku di semua Layanan DataStorage

PS: pengalaman mongodb sangat terbatas

2
AbhishekKr