Cinco Configurações de Segurança Críticas do MongoDB que Você Deve Implementar Agora
MongoDB é um banco de dados de documentos NoSQL poderoso e flexível, utilizado por milhões de desenvolvedores e empresas em todo o mundo. No entanto, a flexibilidade e a facilidade de implantação que tornam o MongoDB atraente também podem levar a vulnerabilidades de segurança significativas se as configurações padrão não forem imediatamente reforçadas. Versões anteriores do MongoDB frequentemente sofreram violações públicas de dados, principalmente porque os padrões de segurança eram excessivamente permissivos.
Proteger sua implantação do MongoDB não é opcional; é fundamental para manter a integridade, confidencialidade dos dados e conformidade regulatória. Este guia descreve cinco etapas de segurança inegociáveis que devem ser implementadas em todo ambiente de produção e pré-produção do MongoDB para evitar acesso não autorizado e roubo de dados. Ao implementar essas configurações, você transita de um estado padrão vulnerável para um cluster de banco de dados robusto e protegido.
1. Ativar Controle de Acesso Mandatório e Autenticação Forte
Um dos passos mais críticos na proteção do MongoDB é garantir que a autenticação esteja ativada globalmente. Fora da caixa, muitas implantações do MongoDB permitem conexões sem credenciais, a menos que explicitamente configuradas de outra forma. Esta prática é inerentemente perigosa.
Como Ativar a Autenticação
A autenticação é tipicamente ativada através do arquivo de configuração (mongod.conf) ou de flags de linha de comando durante a inicialização.
Arquivo de Configuração (/etc/mongod.conf):
# /etc/mongod.conf snippet
security:
authorization: enabled
Linha de Comando:
mongod --auth --dbpath /var/lib/mongodb
Criando o Usuário Administrador
Uma vez que o controle de acesso é ativado, você deve criar um usuário administrativo com a função userAdminAnyDatabase ou root. Você só pode criar este usuário antes que o serviço seja reiniciado com --auth ativado, ou desativando temporariamente a autenticação para a etapa de criação inicial se o sistema já estiver em execução.
Exemplo: Criando o Usuário Root via mongosh
Primeiro, conecte-se ao banco de dados (se já estiver rodando sem autenticação, ou usando exceção de localhost):
use admin
db.createUser(
{
user: "mongoAdmin",
pwd: passwordPrompt(), // Prompts for password securely
roles: [ { role: "root", db: "admin" } ]
}
)
⚠️ Atenção: Sempre use senhas fortes e complexas, armazenadas com segurança via um gerenciador de segredos. Nunca codifique credenciais sensíveis em scripts ou arquivos de configuração.
2. Implementar Controle de Acesso Baseado em Funções (RBAC) Granular
Após ativar a autenticação, o próximo passo é estabelecer o Princípio do Menor Privilégio (PoLP). Isso significa que cada usuário, aplicativo e conta de serviço deve ter apenas as permissões mínimas necessárias para executar suas tarefas exigidas.
Evite usar as funções root ou readWriteAnyDatabase para conexões de aplicativos. Em vez disso, defina funções personalizadas que concedem permissões específicas em bancos de dados ou coleções específicas.
Passos Práticos de RBAC
- Definir Funções Personalizadas: Se as funções integradas (
read,readWrite) forem insuficientes, crie funções com ações de acesso granulares (por exemplo, apenasinsertefindem uma coleção específica). - Separar Usuários de Aplicação: Crie usuários dedicados para diferentes camadas de aplicação (por exemplo,
app_rwpara o backend,reporting_ropara análise). - Limitar Acesso a Ferramentas Externas: Garanta que as ferramentas de administração se conectem usando contas privilegiadas apenas quando absolutamente necessário.
Exemplo: Criando um Usuário Somente Leitura para um Banco de Dados Específico
use users_db
db.createUser(
{
user: "reporting_svc",
pwd: passwordPrompt(),
roles: [ { role: "read", db: "users_db" } ] // Only read access to users_db
}
)
3. Configurar Vinculação de Rede Estrita e Firewalls
A configuração de rede é a defesa de perímetro para o seu banco de dados. Por padrão, o MongoDB frequentemente se vincula a todas as interfaces de rede disponíveis (0.0.0.0), tornando-o potencialmente acessível a toda a rede ou, pior, à internet pública se estiver rodando em uma instância de nuvem sem regras de firewall adequadas.
Restringir bindIp
A principal medida de segurança é definir a configuração bindIp em seu arquivo de configuração. Isso informa explicitamente ao MongoDB quais endereços IP ou nomes de host ele deve ouvir.
Arquivo de Configuração (/etc/mongod.conf):
# List of IPs or hostnames to bind to
# Use 127.0.0.1 for local access only
# Use internal IP(s) for access from application servers only
net:
port: 27017
bindIp: 127.0.0.1, 10.0.1.5, localhost
Implementar Firewalls Externos (Grupos de Segurança)
Além de bindIp (que restringe o processo do MongoDB), você deve usar um firewall externo (como iptables, AWS Security Groups ou Azure Network Security Groups) para filtrar o tráfego antes que ele chegue ao servidor.
Melhor Prática: Permita apenas tráfego de entrada na porta do MongoDB (padrão 27017) de seus servidores de aplicação, balanceadores de carga e jump boxes administrativas.
4. Impor Criptografia para Dados em Trânsito (TLS/SSL)
Dados transmitidos entre clientes (aplicativos, shells, drivers) e o servidor MongoDB devem ser criptografados usando Transport Layer Security (TLS) ou Secure Sockets Layer (SSL). O envio de credenciais, consultas e resultados por conexões não criptografadas expõe os dados a possíveis interceptações (ataques man-in-the-middle).
O MongoDB suporta configuração nativa de TLS/SSL para criptografia de tráfego e validação opcional de certificado do cliente.
Ativando TLS/SSL
Para ativar a criptografia, você deve gerar ou obter certificados TLS válidos e especificar sua localização no arquivo de configuração.
Arquivo de Configuração (/etc/mongod.conf):
net:
ssl:
mode: requireTLS
# Path to the combined certificate and key file
serverCertificateKeyFile: /etc/ssl/mongodb.pem
# Path to the Certificate Authority file (for client validation)
CAFile: /etc/ssl/ca.pem
Conexão do Cliente com TLS
Uma vez que o servidor exija TLS, todos os clientes devem se conectar usando as flags de segurança apropriadas:
mongosh "mongodb://[email protected]/admin?authSource=admin" --tls --tlsCAFile /path/to/ca.pem
Dica: Use
mode: requireTLSem produção para garantir que todas as conexões sejam seguras. O modopreferTLSé geralmente usado apenas durante a migração ou testes.
5. Ativar Auditoria e Monitorar Logs de Atividade
Mesmo com controle de acesso forte e criptografia, ameaças de segurança podem surgir de contas internas comprometidas ou escalonamento de privilégios. Ativar uma auditoria abrangente fornece um registro histórico de ações, o que é crucial para conformidade, análise forense e detecção de comportamento suspeito.
O recurso de Auditoria do MongoDB pode registrar ações administrativas, tentativas de autenticação, tentativas de acesso não autorizado e potencialmente leituras/escritas de dados.
Configuração para Auditoria
A auditoria é configurada através da seção auditLog no arquivo de configuração. Você pode especificar o destino (arquivo, syslog, console) e os critérios de filtro.
Arquivo de Configuração (/etc/mongod.conf):
auditLog:
destination: file
path: /var/log/mongodb/audit.log
format: JSON
# Focus on key security events like authentication and administrative changes
filter: '{ atype: { $in: [ "authenticate", "authorize", "createCollection", "createUser", "dropDatabase" ] } }'
Áreas Essenciais de Foco do Monitoramento
- Tentativas de Autenticação Falhas: Um pico repentino indica um possível ataque de força bruta.
- Criação/Exclusão de Usuários/Funções: Todas as alterações de privilégio devem ser registradas e revisadas.
- Exclusão de Banco de Dados ou Coleção: Alertas imediatos são necessários para operações destrutivas.
Integre os logs de auditoria do MongoDB com sistemas centralizados de gerenciamento de logs (por exemplo, Splunk, ELK Stack, DataDog) para alertas em tempo real e retenção a longo prazo.
Conclusão
A implementação dessas cinco configurações críticas move sua implantação do MongoDB de um estado de vulnerabilidade para um de resiliência. A segurança no MongoDB não é uma tarefa de 'configure e esqueça'; é um processo contínuo. Garanta que essas configurações – autenticação obrigatória, RBAC granular, vinculação de rede estrita, criptografia TLS e auditoria abrangente – sejam verificadas em cada implantação e revisadas regularmente. Priorizar essas etapas mitigará significativamente o risco de acesso não autorizado e comprometimento de dados.