Jedním z bezpečnostních aspektů správy databáze je pochopit, kdo, kdy a co dělal k databázi. Přestože jsme již službu MongoDB zabezpečili, stále chceme vědět, kdo co dělá, a zjistit, zda se neděje něco divného. Při vyšetřování narušení dat nám protokol auditu umožňuje analyzovat historickou aktivitu, pochopit, ze kterého koncového bodu útočník přišel a jaké operace provedl, když byl v databázi.
V tomto blogu zkontrolujeme protokolování auditu pro MongoDB a implementaci.
Povolení protokolování auditu v MongoDB
Chcete-li povolit protokolování auditu v MongoDB, musíme přejít do konfiguračního souboru mongod.conf, sekce auditLog:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
Existují 3 typy cílů protokolu, kterými jsou:soubor, syslog a konzola. V ideálním případě můžeme protokol auditu odeslat do souboru v podporovaném formátu JSON nebo BSON. Můžeme také povolit protokol auditu během spouštění služby MongoDB, jak je znázorněno níže:
mongod --dbpath /var/lib/mongodb --auditDestination file --auditFormat BSON --auditPath /var/lib/mongodb/audit_mongodb.bson
Filtr auditu v MongoDB
Stále v sekci auditLog je parametr zvaný filtr. Vzor akce, který chceme protokolovat, můžeme filtrovat. Například, pokud chceme přihlásit ověření do konkrétní databáze, můžeme použít níže uvedený příkaz:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: '{ atype: "authenticate", "param.db": "user_profile" }'
Bude sledovat každé ověření do databáze uživatelského profilu. Další příklad:chceme sledovat akce; zrušit index, přejmenovat kolekci a odstranit kolekci v databázi uživatelského_profilu. Příkaz by byl:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { atype: { $in: [ "dropIndex", "renameCollection", "dropCollection" ] }, "param.ns": /^user_profile\\./ } }
Můžeme také sledovat proces auditu pro konkrétní role, museli bychom definovat role a databázi ve filtru:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
Zaznamená každou akci související s uživatelem, který má v databázi user_profile role readWrite.
Pro auditní protokolování operací zápisu a čtení musíme nejprve povolit auditAuthorizationSuccess v MongoDB. Můžeme spustit níže uvedený příkaz:
db.adminCommand( { setParameter: 1, auditAuthorizationSuccess: true } )
Nebo další možností je změnit následující v mongod.conf, jak je uvedeno níže:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
setParameter: { auditAuthorizationSuccess: true }
Percona Server pro MongoDB poskytuje funkce protokolování auditu zdarma, zatímco v MongoDB je k dispozici pouze v Enterprise Edition. Vezměte prosím na vědomí, že povolení parametru ovlivní výkon databáze vašeho MongoDB, zejména v produkčním prostředí.
Co bude dál?
Můžeme odeslat protokol auditu MongoDB do systému správy protokolování, například:zásobník ELK (Elasticsearch, Logstash a Kibana), nebo můžeme pro účely analýzy použít systém správy protokolů od poskytovatele.
Nejjednodušším způsobem je použití nástroje jq tools v prostředí Linuxu ke čtení protokolu ve formátu JSON nebo BSON.