Quando um aplicativo requer uma grande área geográfica para realizar uma organização, muitas vezes é forçada a armazenar seus dados na nuvem. Os aplicativos criados no MongoDB não são uma exceção a esse conceito. A falha em proteger dados confidenciais pode causar sérios reveses à empresa, incluindo uma reputação arruinada, inconsistências de dados, perdas financeiras e, às vezes, perda total de dados.
Os dados armazenados na nuvem são propensos ao interesse de elementos criminosos. Pessoas com intenção maliciosa podem obter acesso mais facilmente quando nenhum procedimento padrão foi estabelecido para garantir a segurança do banco de dados. Alguns desses procedimentos abaixo do padrão incluem...
- Gerenciamento de senha ruim:alguns desenvolvedores acabam codificando as senhas nos arquivos de origem do projeto, portanto, se um hacker descompilar o aplicativo, eles poderão recuperar facilmente o conteúdo.
- Relutância ou falha em atualizar o banco de dados e plugins complementares. As versões mais recentes do banco de dados têm novos recursos, podem ser em termos de segurança ou melhor, ter alguns recursos corrigidos dos antecessores.
- Configurações de banco de dados abaixo do padrão, por exemplo, sem usar chaves de descriptografia criptografadas ou sem usar nenhum protocolo de segurança.
Os ataques a banco de dados estão aumentando dia após dia (e espera-se que a tendência continue), mas você não pode ser vítima a menos que empregue as considerações de segurança apropriadas. Neste artigo, vamos discutir alguns dos procedimentos que podem ser verificados com a instalação do MongoDB na nuvem. Você não precisa aplicar todos eles, mas pelo menos tente escolher aqueles que, se evitados, podem colocar seus dados em uma situação desastrosa.
Considerações de segurança de pré-produção do MongoDB
Essas são as considerações que devem ser feitas para garantir que estejam bem configuradas quando estiver prestes a implantar o MongoDB no ambiente de produção. Eles incluem:
- Habilitar e aplicar autenticação para controle de acesso
- Configurar controle de acesso baseado em função
- Limitar a exposição da rede
- Criptografar comunicações
- Criptografar dados
- Atividades do sistema de auditoria
- Use o usuário dedicado para executar o MongoDB
- Utilize pacotes oficiais e atualizados do MongoDB
- Desative as execuções de Javascript se não forem necessárias
- Seja atualizado com as correções de segurança do MongoDB
1. Habilitando e aplicando autenticação para controle de acesso
O controle de acesso não está habilitado no MongoDB por padrão, mas isso não significa que você também implanta seu banco de dados sem essa opção habilitada. Na verdade, alguns pacotes de banco de dados como o Bitnami exigirão que você configure algum controle de acesso antes de usar seu banco de dados. Caso contrário, qualquer pessoa pode ter acesso ao banco de dados, portanto, exposição a dados muito confidenciais. Especifique algum mecanismo de autenticação, como o SCRAM, para que os clientes que serão conectados devam fornecer algumas credenciais válidas antes de poderem se conectar ao banco de dados.
A string de conexão deve se parecer com:
mongodb://[username:[email protected]]host[:port1][/[defaultauthdb]and not just
mongodb://host[:port1]/[defaultauthdb]
2. Configurar o controle de acesso baseado em função
Depois de adicionar usuários com permissões administrativas, limite as funções atribuídas a esses usuários usando o controle de acesso baseado em função (RBAC). As funções que um usuário pode ter incluem:ler, gravar ou ambos em coleções específicas ou em todas as coleções. Portanto, um usuário não pode desempenhar uma função não atribuída a ele ou pode realizar operações apenas em coleções atribuídas.
O administrador do usuário é criado primeiro e depois os usuários adicionais. Se um usuário tiver privilégios em bancos de dados diferentes, você poderá criar um único usuário com funções que concedam privilégios de banco de dados aplicáveis em vez de criar o usuário várias vezes em bancos de dados diferentes.
É aconselhável ter um pequeno número de usuários acessando o banco de dados onde os usuários podem ser pessoas ou aplicativos clientes.
Para criar e conceder permissões de usuário para determinadas funções no MongoDB, você pode usar este exemplo no shell do mongo
use finance
db.createUser(
{
user: "manager",
pwd: passwordPrompt(), // or cleartext password
roles: [
{ role: "read", db: "loans" },
{ role: "read", db: "interests" },
{ role: "read", db: "useraccounts" },
{ role: "readWrite", db: "wages" }
]
}
)
Além disso, opte por opções de autenticação externa, como LDAP e Kerberos.
3. Limitar a exposição da rede
A topologia de rede que hospeda o banco de dados precisa ser protegida extensivamente e, o mais importante, ouvir apenas a interface localhost. Isso é para evitar a exposição de conexões externas, como era o caso das versões mais antigas do MongoDB. Certifique-se de que o MongoDB seja executado em um ambiente de rede confiável com firewall de segurança habilitado. Controle o tráfego de entrada e saída com grupos de segurança que não podem ser usados com outras instâncias. Use a lista de permissões de IP para permitir o acesso de endereços IP confiáveis, portanto, permita conexões com instâncias do MongoDB com interfaces de rede e portas apenas de clientes confiáveis.
Além disso, desative o acesso direto à raiz SSH.
4. Criptografar comunicações
A configuração do MongoDB deve restringir as conexões de entrada e saída apenas para TLS/SSL. O TLS/SSL criptografa a comunicação entre os componentes mongod e mongos de uma implantação do MongoDB e todos os aplicativos conectados a ele.
No ambiente de produção, a implantação do MongoDB deve usar certificados válidos gerados e assinados por uma única autoridade de certificação.
5. Criptografar os dados
Os dados do banco de dados assumem duas formas:dados em repouso e em trânsito. Os dados em trânsito podem ser protegidos usando a criptografia em nível de campo do lado do cliente, mas está disponível apenas na versão 4.2. A criptografia TLS/SSL também cuida dos dados em trânsito.
O mecanismo de armazenamento WiredTiger da versão 3.2 Enterprise fornece dados na criptografia da camada de armazenamento. Isso afirma que apenas usuários autenticados com chaves de descriptografia podem acessar os dados. Se você não estiver usando a criptografia do WiredTiger em repouso, use a criptografia do sistema de arquivos. A criptografia de dados em repouso impede que alguém acesse o conteúdo do seu banco de dados se tiver acesso ao servidor físico, portanto, uma parte crucial na segurança do MongoDB.
6. Atividades do sistema de auditoria
Esta é uma opção corporativa que permite o rastreamento de todas as alterações nos dados e nas configurações do banco de dados. Os eventos são gravados em uma conexão syslog ou em algum arquivo de log. Os registros podem conter tentativas de autenticação de banco de dados, incluindo endereços IP de origem, e as informações podem ajudar a determinar quais hosts devem ser bloqueados pelo firewall para acessar o banco de dados. Além disso, pode-se definir quais eventos registrar.
Esses logs de auditoria em geral ajudarão o administrador a fazer algumas análises forenses e, portanto, definir controles de segurança padrão.
7. Use o usuário dedicado para executar o MongoDB
Os processos do MongoDB devem ser executados com uma conta de usuário de sistema operacional dedicada que deve ter permissões de acesso habilitadas.
8. Utilize pacotes oficiais e atualizados do MongoDB
Faça verificações de autenticidade em seus pacotes para garantir que eles sejam os pacotes oficiais do MongoDB. Usar os drivers MongoDB mais recentes e a versão mais recente do próprio banco de dados oferece mais estabilidade de segurança do que os predecessores. Por exemplo, a versão 4.2 oferece a criptografia em nível de campo do lado do cliente. Certifique-se, portanto, de migrar para a versão mais recente do MongoDB.
9. Desative as execuções de Javascript se não forem necessárias
mapReduce e $where são alguns dos códigos JavaScript executáveis no MongoDB e, se não forem bem gerenciados, podem resultar em alguma inconsistência de dados indesejada ou permitir que alguém acesse os dados indiretamente e aplique algumas alterações, se desejar .
Em geral, este código JavaScript permitirá injeções externas, portanto, dados não validados entrando em seu banco de dados. Você também pode optar por usar pacotes como o mangusto para validar e se conectar ao seu banco de dados. Use operadores MongoDB em vez de expressões JavaScript.
10. Fique atualizado com as correções de segurança do MongoDB
Protocolos de segurança podem ser quebrados por invasores com o tempo, portanto, é necessário envolver procedimentos avançados. Manter-se atualizado com as principais atualizações de segurança e correções de bugs das notas de versão do MongoDB é muito importante. A página de alerta do MongoDB foi criada basicamente para esse fim.
Solicite um guia de implementação técnica de segurança, se possível, e certifique-se de que sua implantação esteja alinhada com a conformidade com os padrões de segurança.
Conclusão
Bancos de dados em produção são propensos a ataques de segurança, portanto, é necessário investir fortemente na proteção de dados confidenciais. Os procedimentos de segurança variam de dados em trânsito, dados em repouso e aplicativos clientes conectados. Além das práticas mencionadas acima, os empreendimentos de proteção de servidores fornecerão outra camada de proteção de dados.
É importante usar as versões mais recentes do MongoDB e plugins, além de acompanhar as últimas correções de segurança e bugs relacionadas à sua versão.