Jednym z aspektów bezpieczeństwa zarządzania bazą danych jest zrozumienie, kto, kiedy i kiedy uzyskał dostęp do bazy danych i co zrobił. Mimo że zabezpieczyliśmy już usługę MongoDB, nadal chcemy wiedzieć, kto co robi i wykrywać, czy jest coś dziwnego. W dochodzeniu w sprawie naruszenia danych dziennik audytu pozwala nam przeanalizować aktywność historyczną, zrozumieć, z którego punktu końcowego pochodził atakujący i jakie operacje wykonał, gdy znalazł się w bazie danych.
W tym blogu przyjrzymy się rejestrowaniu audytów dla MongoDB i implementacji.
Włączanie rejestrowania kontrolnego w MongoDB
Aby włączyć logowanie audytu w MongoDB, musimy przejść do pliku konfiguracyjnego mongod.conf, sekcja auditLog:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
Istnieją 3 rodzaje miejsc docelowych dzienników, którymi są:plik, syslog i konsola. Idealnie możemy przesłać dziennik audytu do pliku w formacie JSON lub BSON. Możemy również włączyć dziennik audytu podczas uruchamiania usługi MongoDB, jak pokazano poniżej:
mongod --dbpath /var/lib/mongodb --auditDestination file --auditFormat BSON --auditPath /var/lib/mongodb/audit_mongodb.bson
Filtr kontroli w MongoDB
Nadal w sekcji auditLog znajduje się parametr o nazwie filter. Możemy filtrować wzorzec akcji, który chcemy zarejestrować. Na przykład, jeśli chcemy zalogować uwierzytelnianie do określonej bazy danych, możemy użyć poniższego polecenia:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: '{ atype: "authenticate", "param.db": "user_profile" }'
Śledzi każde uwierzytelnienie w bazie danych user_profile. Inny przykład:chcemy śledzić działania; upuść indeks, zmień nazwę kolekcji i upuść kolekcję w bazie danych profil_użytkownika. Polecenie to:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { atype: { $in: [ "dropIndex", "renameCollection", "dropCollection" ] }, "param.ns": /^user_profile\\./ } }
Możemy również monitorować proces audytu dla określonych ról, musielibyśmy zdefiniować role i bazę danych w filtrze:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
Zarejestruje każdą akcję związaną z użytkownikiem, który ma role readWrite w bazie danych user_profile.
W przypadku rejestrowania audytu operacji zapisu i odczytu, musimy najpierw włączyć audytAuthorizationSuccess w MongoDB. Możemy uruchomić poniżej polecenie :
db.adminCommand( { setParameter: 1, auditAuthorizationSuccess: true } )
Lub inną opcją jest zmiana następujących elementów w mongod.conf jak poniżej:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
setParameter: { auditAuthorizationSuccess: true }
Percona Server dla MongoDB udostępnia funkcje rejestrowania audytu za darmo, podczas gdy w MongoDB jest ono dostępne tylko w wersji Enterprise Edition. Należy pamiętać, że włączenie tego parametru wpłynie na wydajność bazy danych MongoDB, szczególnie w środowisku produkcyjnym.
Co dalej?
Możemy wysłać dziennik audytu MongoDB do systemu Logging Management System, na przykład:stos ELK (Elasticsearch, Logstash i Kibana) lub możemy użyć systemu Log Management System od dostawcy do celów analizy.
Najprostszym sposobem jest użycie narzędzia jq tools w środowisku Linux do odczytania dziennika w formacie JSON lub BSON.