sql >> Base de Datos >  >> NoSQL >> MongoDB

Una lista de verificación de seguridad para implementaciones de producción de MongoDB

Cuando una aplicación requiere una gran área geográfica para funcionar, una organización a menudo se ve obligada a almacenar sus datos en la nube. Las aplicaciones creadas en MongoDB no son una excepción a este concepto. Si no se protegen los datos confidenciales, la empresa puede sufrir serios contratiempos, como arruinar su reputación, incoherencias en los datos, pérdidas financieras y, a veces, la pérdida total de datos.

Los datos almacenados en la nube son propensos al interés de elementos criminales. Las personas con malas intenciones pueden acceder más fácilmente cuando no se han establecido procedimientos estándar para garantizar la seguridad de la base de datos. Algunos de estos procedimientos deficientes incluyen...

  • Administración deficiente de contraseñas:algunos desarrolladores terminan codificando las contraseñas en los archivos fuente del proyecto, por lo tanto, si un pirata informático descompila la aplicación, puede recuperar fácilmente el contenido.
  • Renuencia o falla al actualizar la base de datos y complementos complementarios. Las versiones más nuevas de la base de datos tienen características nuevas que pueden ser en términos de seguridad o más bien tienen algunas características corregidas de las predecesoras.
  • Configuraciones de bases de datos deficientes, por ejemplo, que no utilizan claves de descifrado cifradas o, mejor dicho, no utilizan ningún protocolo de seguridad.

Los ataques a bases de datos aumentan día tras día (y se espera que la tendencia continúe), pero es posible que no sea víctima a menos que emplee las consideraciones de seguridad adecuadas. En este artículo, vamos a discutir algunos de los procedimientos que se pueden verificar con la instalación de MongoDB en la nube. No es necesario que los aplique todos, pero al menos haga el mejor esfuerzo por elegir aquellos que, si se evitan, podrían poner sus datos en una situación desastrosa.

Consideraciones de seguridad de preproducción de MongoDB

Estas son consideraciones que uno debe asegurarse de que estén bien configuradas cuando vaya a implementar MongoDB en el entorno de producción. Incluyen: 

  1. Habilitar y hacer cumplir la autenticación para el control de acceso
  2. Configurar control de acceso basado en funciones
  3. Limitar la exposición a la red
  4. Cifrar comunicaciones
  5. Cifrar datos
  6. Actividades del sistema de auditoría 
  7. Usar usuario dedicado para ejecutar MongoDB
  8. Utilizar paquetes oficiales y actualizados de MongoDB
  9. Deshabilitar las ejecuciones de Javascript si no es necesario
  10. Actualizarse con correcciones de seguridad de MongoDB

1. Habilitación y aplicación de la autenticación para el control de acceso

El control de acceso no está habilitado en MongoDB de forma predeterminada, pero esto no significa que también implemente su base de datos sin esta opción habilitada. En realidad, algunos paquetes de bases de datos como Bitnami requerirán que configure algún control de acceso antes de usar su base de datos. Si no lo hace, cualquiera puede tener acceso a la base de datos y, por lo tanto, exponerse incluso a datos muy confidenciales. Especifique algún mecanismo de autenticación como SCRAM para que los clientes que se conectarán deban proporcionar algunas credenciales válidas antes de poder conectarse a la base de datos.

La cadena de conexión debería verse como:

mongodb://[username:[email protected]]host[:port1][/[defaultauthdb]and not just

mongodb://host[:port1]/[defaultauthdb]

2. Configurar el control de acceso basado en roles

Después de agregar usuarios con permisos administrativos, limite las funciones asignadas a estos usuarios mediante el control de acceso basado en funciones (RBAC). Los roles que un usuario puede tener incluyen:leer, escribir o ambos para colecciones específicas o para todas. Por lo tanto, un usuario no puede desempeñar una función que no se le haya asignado o puede realizar operaciones solo en colecciones asignadas.

El administrador de usuarios se crea primero y luego los usuarios adicionales. Si un usuario tiene privilegios en diferentes bases de datos, puede crear un solo usuario con roles que otorgan privilegios de base de datos aplicables en lugar de crear el usuario varias veces en diferentes bases de datos.

Es recomendable tener un pequeño número de usuarios accediendo a la base de datos donde los usuarios pueden ser personas o aplicaciones cliente.

Para crear y otorgar permisos de usuario para ciertos roles en MongoDB, puede usar este ejemplo en el shell de 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" }

    ]

  }

)

 También, opta por opciones de autenticación externa como LDAP y Kerberos.

3. Limite la exposición de la red

La topología de red que aloja la base de datos debe protegerse ampliamente y, lo que es más importante, escuchar solo la interfaz localhost. Esto es para evitar la exposición de conexiones externas como fue el caso de las versiones anteriores de MongoDB. Asegúrese de que MongoDB se ejecute en un entorno de red confiable con el firewall de seguridad habilitado. Controle el tráfico entrante y saliente con grupos de seguridad que no se pueden usar con otras instancias. Use la lista blanca de IP para permitir el acceso desde direcciones IP confiables, por lo tanto, permita conexiones a instancias de MongoDB con interfaces de red y puertos solo de clientes confiables.

Además, deshabilite el acceso raíz SSH directo.

4. Cifrar comunicaciones

La configuración de MongoDB debe restringir las conexiones entrantes y salientes solo a TLS/SSL. TLS/SSL cifra la comunicación entre mongod y los componentes mongos de una implementación de MongoDB y todas las aplicaciones conectadas a ella.

En el entorno de producción, la implementación de MongoDB debe usar certificados válidos generados y firmados por una única autoridad de certificación.

5. Cifrar los datos

Los datos de la base de datos toman dos formas:datos en reposo y en tránsito. Los datos en tránsito se pueden proteger utilizando el cifrado de nivel de campo del lado del cliente, pero solo está disponible en la versión 4.2. El cifrado TLS/SSL también se ocupa de los datos en tránsito.

El motor de almacenamiento WiredTiger de la versión 3.2 Enterprise proporciona datos encriptados en la capa de almacenamiento. Esto afirma que solo los usuarios autenticados con claves de descifrado pueden acceder a los datos. Si no está utilizando el cifrado de WiredTiger en reposo, utilice el cifrado del sistema de archivos. El cifrado de datos en reposo impide que uno acceda al contenido de su base de datos si obtiene acceso al servidor físico, por lo tanto, es una parte crucial para asegurar MongoDB.

6. Actividades del sistema de auditoría 

Esta es una opción empresarial que permite realizar un seguimiento de todos los cambios en las configuraciones de datos y bases de datos. Los eventos se escriben en una conexión syslog o en algún archivo de registro. Los registros pueden contener intentos de autenticación de base de datos, incluidas las direcciones IP de origen, y la información puede ayudar a determinar qué hosts deben ser bloqueados por el firewall para que no accedan a la base de datos. Además, uno puede precisar qué eventos registrar.

Estos registros de auditoría en general ayudarán al administrador a realizar algunos análisis forenses y, por lo tanto, establecer controles de seguridad estándar.

7. Usar usuario dedicado para ejecutar MongoDB

Los procesos de MongoDB deben ejecutarse con una cuenta de usuario de sistema operativo dedicada que debe tener permisos de acceso habilitados.

8. Utilice paquetes oficiales y actualizados de MongoDB

Pase los controles de autenticidad de sus paquetes para asegurarse de que sean los paquetes oficiales de MongoDB. El uso de los controladores MongoDB más recientes y la última versión de la base de datos ofrece más estabilidad de seguridad que los predecesores. Por ejemplo, la versión 4.2 ofrece el cifrado de nivel de campo del lado del cliente. Por lo tanto, asegúrese de migrar a la versión más reciente de MongoDB.

 9. Deshabilitar las ejecuciones de Javascript si no es necesario

mapReduce y  $where son algunos de los códigos JavaScript ejecutables dentro de MongoDB y, si no se administran bien, pueden generar inconsistencias de datos no deseadas o permitir el acceso a los datos indirectamente y aplicar algunos cambios si así lo desean. .

En general, este código JavaScript permitirá inyecciones externas y, por lo tanto, datos no validados que ingresan a su base de datos. También puede optar por usar paquetes como mongoose para validar y conectarse a su base de datos. Utilice operadores de MongoDB en lugar de expresiones de JavaScript.

10. Actualícese con las correcciones de seguridad de MongoDB

Los atacantes pueden descifrar los protocolos de seguridad con el tiempo, por lo que es necesario que uno involucre procedimientos avanzados. Es muy importante mantenerse al día con las principales actualizaciones de seguridad y las correcciones de errores de las notas de la versión de MongoDB. La página de alertas de MongoDB se creó básicamente con ese propósito.

Solicite una guía de implementación técnica de seguridad si es posible y asegúrese de que su implementación cumpla con los estándares de seguridad.

Conclusión

Las bases de datos en producción son propensas a sufrir ataques de seguridad, por lo que es necesario invertir mucho en la protección de datos confidenciales. Los procedimientos de seguridad van desde datos en tránsito, datos en reposo y aplicaciones cliente conectadas. Además de las prácticas mencionadas anteriormente, las empresas de fortalecimiento del servidor proporcionarán otra capa de protección de datos.

Es importante usar las versiones más recientes de MongoDB y los complementos, además de mantenerse al día con las últimas correcciones de errores y seguridad relacionadas con su versión.