¿Por qué extraer la actualización del servidor de producción en lugar de empujar desde el servidor de desarrollo?

1

Estoy leyendo un libro sobre seguridad que sugiere que si tiene un servidor de desarrollo y de producción y si realiza algún cambio, debería sacarlos del servidor de producción en lugar de expulsarlos del servidor de desarrollo a través de algún medio de scripts automatizados. Aquí está el extracto completo:

  

El contenido debe moverse al servidor de producción al ser extraído de la   Servidor de desarrollo, no por ser empujado a ello. Es decir, la transferencia.   de nuevo contenido o software debe ser iniciado desde la producción   servidor. Podría solicitar actualizaciones a intervalos regulares (al igual que su   la estación de trabajo lo hace), o podría requerir que un administrador inicie sesión y   Iniciar la actualización. Y por supuesto, el proceso que tira de las actualizaciones.   debe tener acceso de lectura solo en el servidor de desarrollo.

Entonces, mi pregunta es ¿por qué se sugiere esto?

    
pregunta VarunAgw 14.02.2014 - 10:37
fuente

4 respuestas

4

La principal preocupación es no dar a los desarrolladores acceso de escritura a los sistemas de producción. Esto va bien con el principio de darle a alguien la menor cantidad de privilegios necesarios para realizar una tarea.

Dar acceso de escritura a los desarrolladores a los sistemas de producción plantea algunos riesgos. Las máquinas desarrolladoras se utilizan para navegar por la red. Se espera porque los desarrolladores necesitan navegar por la documentación, descargar software, usar Stackoverflow, etc. Existe una pequeña posibilidad de que se vean comprometidos por el malware. Por supuesto, esto deletrea el desastre si la misma máquina desarrolladora tiene acceso de escritura a la producción. En segundo lugar, otorgar a los desarrolladores acceso de escritura y producción puede abrirlos a la tentación de pasar directamente a la producción, evitando cosas como tener sistemas de revisión en su lugar, asegurar que todas las pruebas unitarias de paso de confirmaciones, etc. La solicitud de compromiso.

    
respondido por el Ayrx 14.02.2014 - 10:49
fuente
3

En caso de que el servidor de desarrollo se vea comprometido, sería más fácil acceder a la producción (el desarrollo a veces tiene menores requisitos de seguridad).

Esto también está en el espíritu de la Segregación de obligaciones. Este es un método de seguridad clásico para gestionar conflictos de intereses, la aparición de conflictos de intereses y el fraude. Restringe la cantidad de poder que posee cualquier individuo. A los desarrolladores nunca se les permite la producción, ya que habría un riesgo de fraude (desde la perspectiva de una auditoría financiera). El código nunca debe sacarse de la producción sin revisión (principio de cuatro ojos).

Hay excepciones a esta regla en caso de emergencias, pero solo se utilizan en circunstancias extremas cuando existe un riesgo para la continuidad del negocio. E incluso entonces estas cuentas serán fuertemente auditadas durante el uso y después de que el desarrollador haya tenido acceso. Normalmente, estas cuentas siempre están bloqueadas y solo se pueden desbloquear después de la aprobación formal del negocio, así como también de la aprobación de la oficina de seguridad y del gerente de TI responsable.

    
respondido por el Lucas Kauffman 14.02.2014 - 10:47
fuente
2

Aclaración de la pregunta

La mayoría de las respuestas hasta ahora asumen que el pasaje citado en la pregunta se refiere a los cambios que se originan en las estaciones de trabajo de los desarrolladores individuales.

Por el contrario, el pasaje se refiere a la propagación de cambios entre un servidor de desarrollo y un servidor de producción. El autor debería haber utilizado la terminología más apropiada para el caso de uso más común: propagar cambios de un servidor "de prueba" o "de prueba" a un servidor de producción. La redacción en el pasaje citado también es incómoda, pero lo esencial es que el proceso de propagación del cambio siempre debe iniciarse desde el servidor de producción, es decir, los cambios se "extraen" del servidor de desarrollo. , no "empujado" desde el servidor de desarrollo / prueba / puesta en escena.

La justificación

El fundamento es simple: en la mayoría de los casos, tiene mucho más sentido dar a un entorno de producción acceso a un servidor de desarrollo (o prueba / organización) que al revés. Si el servidor de producción se ve comprometido, la probabilidad de que se produzcan daños adicionales como resultado del "paso a paso" del atacante hacia el servidor de desarrollo es mínima (al menos siempre que se observen las mejores prácticas y no haya nada "sensible" en el servidor de desarrollo, particularmente en la forma de credenciales a otros sistemas o datos "reales"). No hace falta decir que las credenciales a otros sistemas internos, datos de clientes reales, etc., nunca deben propagarse a un servidor de desarrollo.

Un lado relacionado

En los casos en que un problema espinoso requiera absolutamente acceso a los datos de producción, se debe tener especial cuidado de "proteger" los datos en un sistema sin conexión, aislado con un acceso extremadamente limitado. Los datos de dicho sistema deben destruirse inmediatamente después de resolver el problema. Para los problemas que requieren acceso a otros sistemas para reproducirse, como un servidor web que requiere acceso a una instancia de almacén de datos, se debe hacer todo lo posible para "simular" la funcionalidad que proporciona la dependencia y eliminar la necesidad de conectar los sistemas. .

Excepción a la regla

Una excepción a la "regla" que describe el autor es cuando el servidor de desarrollo se encuentra dentro del firewall y el servidor de producción está en la DMZ. En tales casos, puede ser que el servidor de producción no pueda iniciar la comunicación con el servidor de desarrollo (lo que hace imposible la estrategia de "extracción"), pero el servidor de desarrollo puede iniciar la comunicación con el servidor de producción. En tales topologías, en las que esta iniciación unidireccional es un diseño secundario, puede ser necesario impulsar cambios desde el desarrollo a la producción.

En tales casos, las credenciales requeridas para conectarse desde el desarrollo hasta la producción deben estar altamente protegidas y nunca deben almacenarse en el servidor de desarrollo (por ejemplo, en la forma de una clave SSH sin una contraseña). Además, cualquier persona que esté autorizada para conectarse al servidor de desarrollo e iniciar un impulso a la producción debe ser obligada a iniciar sesión en su propia cuenta en los sistemas ambos (las cuentas nunca deben compartirse entre los usuarios, al hacerlo compromete la responsabilidad).

Si se requiere acceso a nivel de raíz en cualquiera de los sistemas para completar la propagación, se debe emplear una implementación similar a sudo si es posible, ya que tal mecanismo mejora enormemente la responsabilidad.

    
respondido por el Ben Johnson 07.12.2015 - 20:35
fuente
1

Reflexione sobre lo que sucede si alguien falsifica su servidor de desarrollo. Si el servidor prod está configurado para aceptar la actualización, es completamente de su propiedad.

Si se arrastran los cambios, en lugar de empujarlos. es más difícil de falsificar.

    
respondido por el Mark C. Wallace 14.02.2014 - 10:41
fuente

Lea otras preguntas en las etiquetas