Salah satu aspek keamanan dalam mengelola database adalah memahami siapa yang mengakses database, kapan, dan apa yang mereka lakukan. Meskipun kami telah mengamankan layanan MongoDB, kami masih ingin tahu siapa yang melakukan apa, dan mendeteksi jika ada sesuatu yang aneh. Dalam investigasi pelanggaran data, log audit memungkinkan kami menganalisis aktivitas historis, memahami dari titik akhir mana penyerang berasal, dan operasi apa yang mereka lakukan begitu mereka berada di dalam database.
Di blog ini, kami akan meninjau log audit untuk MongoDB dan implementasinya.
Mengaktifkan Audit Logging di MongoDB
Untuk mengaktifkan audit logging di MongoDB, kita perlu membuka file konfigurasi mongod.conf, bagian auditLog:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
Ada 3 jenis tujuan log, yaitu:file, syslog, dan console. Idealnya, kami dapat mengirim log audit ke file, dalam format yang didukung JSON atau BSON. Kami juga dapat mengaktifkan log audit saat memulai layanan MongoDB seperti yang ditunjukkan di bawah ini:
mongod --dbpath /var/lib/mongodb --auditDestination file --auditFormat BSON --auditPath /var/lib/mongodb/audit_mongodb.bson
Filter Audit di MongoDB
Masih di bagian auditLog, ada parameter yang disebut filter. Kita dapat memfilter pola tindakan yang ingin kita log. Misalnya, jika kita ingin melakukan otentikasi log ke database tertentu, kita dapat menggunakan perintah di bawah ini:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: '{ atype: "authenticate", "param.db": "user_profile" }'
Ini akan melacak setiap otentikasi ke database user_profile. Contoh lain:kami ingin melacak tindakan; drop index, rename collection, dan drop collection di database user_profile. Perintahnya adalah :
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { atype: { $in: [ "dropIndex", "renameCollection", "dropCollection" ] }, "param.ns": /^user_profile\\./ } }
Kami juga dapat memantau proses audit untuk peran tertentu, kami perlu menentukan peran dan database di filter:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
Ini akan mencatat setiap tindakan yang terkait dengan pengguna yang memiliki peran readWrite dalam database user_profile.
Untuk audit logging operasi tulis dan baca, kita harus mengaktifkan auditAuthorizationSuccess di MongoDB terlebih dahulu. Kita dapat menjalankan perintah di bawah ini :
db.adminCommand( { setParameter: 1, auditAuthorizationSuccess: true } )
Atau opsi lain adalah mengubah yang berikut di mongod.conf seperti di bawah ini:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
setParameter: { auditAuthorizationSuccess: true }
Percona Server for MongoDB memberikan fitur audit logging secara gratis, sedangkan di MongoDB hanya tersedia di Enterprise Edition. Harap perhatikan bahwa mengaktifkan parameter akan memengaruhi kinerja database MongoDB Anda, terutama di lingkungan produksi.
Apa selanjutnya?
Kita bisa mengirimkan log audit MongoDB ke Logging Management System, contoh :ELK (Elasticsearch, Logstash, dan Kibana) stack atau kita bisa menggunakan Log Management System dari provider untuk keperluan analisis.
Cara paling sederhana adalah dengan menggunakan utilitas jq tools di lingkungan Linux untuk membaca log dalam format JSON atau BSON.