¿Cómo asegurar una instancia de MongoDB? [cerrado]

28

¿Alguien tiene experiencia en asegurar / fortalecer el servidor MongoDB? Las listas de verificación o guías serían bienvenidas.

    
pregunta AaronS 27.09.2011 - 13:26
fuente

3 respuestas

25

Las bases de datos NoSQL son relativamente nuevas (aunque podría decirse que son un concepto antiguo), no he visto ninguna guía específica de fortalecimiento de MongoDB y los lugares habituales que veo ( CISSecurity , las publicaciones de los proveedores, Sans, etc., se quedan cortas). Sugiere que sería un buen proyecto para una organización, uni student, infosec community para escribir uno y mantenerlo.

Hay algo de información básica en Mongodb.org. Deben seguirse todos los pasos aquí, incluida la habilitación de la seguridad. El propio sitio indica que MongoDB solo tiene un nivel de seguridad muy básico. enlace

MongoDB y otras bases de datos NoSQL también tienen muchas menos características (especialmente de seguridad) que las bases de datos SQL maduras, por lo que es poco probable que encuentres permisos específicos o cifrado de datos, usa MD5 para el hashing de contraseñas con el nombre de usuario como valor inicial. También hay limitaciones, como que la autenticación no esté disponible con fragmentación antes de la versión 1.9.1, por lo que realizar una evaluación de riesgos y construir un modelo de amenazas para resolver sus necesidades de seguridad y amenazas es una buena idea. En base a esta salida, las bases de datos MongoDB o NoSQL en general pueden no ser adecuadas para sus necesidades, o puede que necesite usarlas de una manera diferente que maximice sus ventajas y minimice sus debilidades (por ejemplo, para extractos de datos en lugar de su información más sensible) o detrás de una serie de capas de controles de red en lugar de estar directamente conectado a su aplicación web).

Dicho esto, creo firmemente que los principios de seguridad son agnósticos en tecnología. Si analiza incluso los ataques más recientes y una buena lista en datalossdb.org, es sorprendente la cantidad de personas que aún están relacionadas con las contraseñas predeterminadas y los parches faltantes. Con la defensa en profundidad, si sigue las siguientes prácticas, debería tener suficiente seguridad para proteger la mayoría de los activos (por ejemplo, individual, comercial), probablemente no sea militar.

Principios de fortalecimiento de la base de datos:

  • Autenticación: la autenticación requerida, ya que los administradores o usuarios privilegiados tienen dos factores, si es posible (haga esto a nivel de plataforma o a través de un dispositivo de red, ya que la base de datos en sí no lo admite). Utilice la autenticación basada en claves para evitar contraseñas si es posible.
  • Autorización: un número mínimo de cuentas requeridas con los permisos mínimos requeridos, las cuentas de solo lectura son compatibles, así que úselas. Como el control de acceso granular no existe, utilice medios alternativos, por ejemplo, un servicio web frente a la base de datos que contenga lógica de negocios, incluidas las reglas de control de acceso o dentro de la aplicación. Minimice los permisos que Mongodb ejecuta como en la plataforma, por ejemplo. No debe ejecutarse como root.
  • Cuentas predeterminadas y del sistema: cambie las contraseñas de todas las cuentas predeterminadas, elimine / bloquee / deshabilite lo que pueda, deshabilite el inicio de sesión donde pueda.
  • Registro y supervisión: habilite registro y expórtelos a un sistema de supervisión central. Defina alertas específicas y procedimientos de investigación para su personal de monitoreo
  • Validación de entrada: las bases de datos NoSQL aún son vulnerables a los ataques de inyección, por lo que solo se requiere la validación de la entrada de información validada, el uso de la paramaterización en los marcos de sus aplicaciones, todas las buenas prácticas para pasar una entrada no confiable a una base de datos es obligatoria.
  • Cifrado: dependiendo de la sensibilidad de los datos, ya que no puede cifrar en el nivel de la base de datos, se requiere el cifrado o hashing de cualquier información confidencial en la capa de aplicación. El cifrado de transporte también se realiza a través de la capa de red (por ejemplo, VPN).
  • Minimice los servicios y cambie el puerto de escucha predeterminado
  • Eliminar cualquier base de datos de muestra o prueba
  • Implementar un proceso de administración de parches para identificar, evaluar e instalar todos los parches de seguridad relevantes de manera oportuna
  • Endurece la plataforma y la plataforma de virtualización si se usa
  • Configure los controles de red apropiados, por ejemplo. firewalls, VLAN para minimizar el acceso a la base de datos, servicio de filtrado de denegación de servicio ascendente, DNS completamente calificado, producción separada y bases de datos no productivas
  • Ambiente físicamente seguro
  • Tener un proceso de gestión de cambios
respondido por el Rakkhi 03.10.2011 - 11:35
fuente
2

Algunas cosas muy iniciales para recordar son:

  • Eliminar el enlace de IP de todos a solo el IP (privado o localhost), espera obtener una solicitud de conexión
  • Cambiar el puerto predeterminado Enlaces
  • Dar solo los permisos necesarios (como no actualizar / eliminar permisos para seleccionar usuarios de consulta)
  • Configure las claves ssh para la conexión requerida maestro-esclavo, eliminando la participación de contraseñas
  • Incluso puede configurar un túnel cifrado para la conexión entre su aplicación y mongodb

en realidad son aplicables en todos los servicios DataStorage

PS: experiencia mongodb muy limitada

    
respondido por el AbhishekKr 28.09.2011 - 16:32
fuente
2

Aquí hay una lista de verificación para la seguridad de MongoDB

Habilitar autenticación: incluso si ha implementado sus servidores Mongodb en una red confiable, es una buena práctica de seguridad habilitar la autenticación. Le proporciona "Defensa en profundidad" si su red está comprometida. Edite su archivo de configuración mongod para habilitar la autenticación

No exponga su base de datos de producción a Internet: restringir el acceso físico a su base de datos es un aspecto importante de la seguridad. Si no es necesario, no exponga su base de datos de producción a Internet. En caso de cualquier compromiso si un atacante no puede conectarse físicamente a su servidor MongoDB, sus datos son mucho más seguros. Si está en AWS, puede colocar su base de datos en una subred privada de VPC. Lea la publicación del blog Implementación de MongoDB en una VPC para obtener más información.

Use firewalls: use firewalls para restringir qué otras entidades pueden conectarse a su servidor mongodb. La mejor práctica es permitir que solo los servidores de aplicaciones accedan a la base de datos. Si está alojado en AWS, use "Grupos de seguridad" para restringir el acceso. Si está alojado en un proveedor que no admite construcciones de firewall, puede configurarlo usted mismo fácilmente usando "iptables". Consulte la documentación de mongodb para configurar iptables para su escenario.

Use los archivos de clave para configurar el conjunto de réplicas: especifique un archivo de clave compartido para habilitar la comunicación entre sus instancias de mongodb en un conjunto de réplicas. Para habilitar esto, agregue el parámetro del archivo de claves al archivo de configuración como se muestra a continuación. El contenido del archivo debe ser el mismo en todas las máquinas.

Deshabilitar la interfaz de estado HTTP Mongodb de forma predeterminada proporciona una interfaz http que se ejecuta de forma predeterminada en el puerto 28017 que proporciona la página de estado "inicial". Esta interfaz no se recomienda para uso de producción y se deshabilita mejor. Use la configuración de configuración "nohttpinterface" para deshabilitar la interfaz http.

Deshabilitar la interfaz REST La interfaz REST monogdb no se recomienda para la producción. No admite ninguna autenticación. Por defecto viene apagado. Si lo ha activado utilizando la opción de configuración "resto", debe desactivarlo para los sistemas de producción.

Configure Bind_ip Si su sistema tiene varias interfaces de red, puede usar la opción “bind_ip” para restringir su servidor mongodb para escuchar solo las interfaces que sean relevantes. Por defecto, mongodb se unirá a todas las interfaces

Habilitar SSL: si no usa SSL, sus datos viajan entre su cliente Mongo y el servidor Mongo sin cifrar y son susceptibles de espionaje, manipulación y ataques de "personas en el medio". Esto es especialmente importante si se conecta a su servidor Mongodb a través de redes no seguras como Internet.

Autorización basada en roles: MongoDB admite la autenticación basada en roles para brindarle un control detallado sobre las acciones que puede realizar cada usuario. Use construcciones basadas en roles para restringir el acceso en lugar de hacer que todos los usuarios sean administradores. Consulte la documentación de roles para obtener más detalles.

Enterprise mongodb & Kerberos Enterprise mongodb se integra con Kerberos para la autenticación. Consulte la documentación de mongodb para más detalles. Los sistemas de nombre de usuario / contraseña son intrínsecamente inseguros; utilice la autenticación basada en bordillos si es posible.

enlace

Descargo de responsabilidad: soy el fundador de scalegrid.io

Además, le recomendaría que también cifrara sus datos de mongodb en reposo, como lo han indicado otros comentarios. Puede usar LUKS (configuración de clave unificada de Linux) para configurar el cifrado de nivel de volumen.

    
respondido por el Dharshan 31.03.2014 - 06:58
fuente

Lea otras preguntas en las etiquetas