Um dos aspectos de segurança do gerenciamento de um banco de dados é entender quem acessou o banco de dados, quando e o que eles fizeram. Embora já tenhamos protegido o serviço MongoDB, ainda queremos saber quem está fazendo o quê e detectar se há algo estranho. Em uma investigação de violação de dados, um log de auditoria nos permite analisar a atividade histórica, entender de qual endpoint o invasor veio e quais operações eles fizeram quando estavam dentro do banco de dados.
Neste blog, revisaremos o log de auditoria para o MongoDB e sua implementação.
Ativando o log de auditoria no MongoDB
Para habilitar o log de auditoria no MongoDB, precisamos acessar o arquivo de configuração do mongod.conf, seção auditLog:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
Existem 3 tipos de destinos de log, que são:arquivo, syslog e console. Idealmente, podemos enviar o log de auditoria para um arquivo, em formato compatível com JSON ou BSON. Também podemos habilitar o log de auditoria durante a inicialização do serviço MongoDB conforme mostrado abaixo:
mongod --dbpath /var/lib/mongodb --auditDestination file --auditFormat BSON --auditPath /var/lib/mongodb/audit_mongodb.bson
Filtro de auditoria no MongoDB
Ainda na seção auditLog, existe um parâmetro chamado filter. Podemos filtrar o padrão de ação que queremos registrar. Por exemplo, se quisermos registrar a autenticação em um banco de dados específico, podemos usar o comando abaixo:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: '{ atype: "authenticate", "param.db": "user_profile" }'
Ele rastreará cada autenticação no banco de dados user_profile. Outro exemplo:queremos rastrear as ações; descartar índice, renomear coleção e descartar coleção no banco de dados user_profile. O comando seria:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { atype: { $in: [ "dropIndex", "renameCollection", "dropCollection" ] }, "param.ns": /^user_profile\\./ } }
Também podemos monitorar o processo de auditoria para os papéis específicos, precisaríamos definir os papéis e banco de dados no filtro:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
Ele registrará todas as ações relacionadas ao usuário que possui as funções readWrite no banco de dados user_profile.
Para o log de auditoria de operações de gravação e leitura, precisamos primeiro habilitar o auditAuthorizationSuccess no MongoDB. Podemos executar o comando abaixo:
db.adminCommand( { setParameter: 1, auditAuthorizationSuccess: true } )
Ou outra opção é alterar o seguinte no mongod.conf conforme abaixo:
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 fornece os recursos de log de auditoria gratuitamente, enquanto no MongoDB está disponível apenas na Enterprise Edition. Observe que habilitar o parâmetro afetará o desempenho do banco de dados do seu MongoDB, especialmente no ambiente de produção.
O que vem a seguir?
Podemos enviar o log de auditoria do MongoDB para um Logging Management System, exemplo:pilha ELK (Elasticsearch, Logstash e Kibana) ou podemos usar o Log Management System do provedor para fins de análise.
A maneira mais simples é usar o utilitário jq tools no ambiente Linux para ler o log no formato JSON ou BSON.