¿Cómo mitigar el riesgo de una violación continua de la seguridad del servicio de integración?

8

Estamos utilizando un servicio de integración continua para ejecutar automáticamente nuestro conjunto de pruebas de productos. Cada vez que enviamos el código a nuestra rama de producción del repositorio Git central, se notifica a los servicios de CI y se obtiene el código para ejecutar el conjunto de pruebas.

El servicio de CI nos permite escribir un script de compilación posterior que puede enviar automáticamente el código a nuestro servidor de producción Heroku cuando pasan las pruebas.

Sin embargo, tememos que si un atacante ingresa en el servicio de CI, puede enviar cualquier cambio de código que desee a nuestro servidor de producción.

Planeamos cambiar esta arquitectura para que el servicio de CI haga ping a un servidor de "despliegue" específico nuestro cuando las pruebas pasen. Este servidor de 'despliegue' obtendría el último código de rama de producción de nuestro repositorio central de Git y el impulso a nuestro servidor de producción de Heroku.

De esta manera, si el servicio de CI se ve comprometido, un atacante no podría enviar desde el servicio de CI ningún código que quiera a nuestro servidor de producción. Tendría que irrumpir en nuestro servidor de 'despliegue'.

El objetivo de esta nueva arquitectura es trasladar el riesgo del SaaS de CI a un servidor nuestro. Las credenciales de Heroku necesarias para la implementación ya no están alojadas en el SaaS de CI, sino en un servidor nuestro.

¿Tiene sentido? ¿O hay alguna otra alternativa más simple cuando se usa un servicio de CI (aparte de configurar y asegurar el propio servidor de CI)?

    
pregunta Florent2 13.09.2012 - 23:42
fuente

2 respuestas

3

Tiene 2 puntos que se pueden comprometer: el acceso al repositorio de git y el servicio de CI. ¿Está utilizando SaaS de CI, porque cuál es la diferencia si su servidor de implementación o su máquina de CI se ven comprometidos? Ambos pueden empujar código.

Si tiene un servicio de CI que es remoto, también puede construir en su servidor de implementación y enviar esa compilación real al servicio de CI. Y cuando esa compilación pase, empuje a producción. De esa manera, usted sabe que ha probado la versión exacta que se está implementando.

Condición de carrera: CI pasa el código. Alguien comprueba el nuevo código en git. La máquina de implementación es alertada por CI y se compila con el código no probado y lo pone en producción.

    
respondido por el rox0r 14.09.2012 - 06:08
fuente
4

Parece que la mayoría de las veces está cambiando el problema. El servidor de CI solía tener las credenciales para enviar nuevas instalaciones al servidor de Heroku, ahora es el servidor de implementación.

Entonces, la gran pregunta que tengo es: ¿cuál es la diferencia en la seguridad entre el servicio de CI y el servidor de implementación? ¿Está uno alojado externamente? ¿Hay alguna razón para confiar en uno más que en el otro? Son las credenciales que dan acceso al servidor de Heroku las que dan el mayor riesgo.

En el NUEVO marco, me gustaría hacer estas preguntas:

  • ¿Cuál es la probabilidad de que el código sea manipulado en el servidor Git?

  • ¿Existe la posibilidad de que un "ping" ilegítimo al servidor de implementación cause problemas? La condición de carrera que menciona @roxOr es un caso. También está la idea de que si se manipula un servidor CI, se podría activar un envío de ping que induzca a su servidor de implementación a poner un código que no funciona en el servidor Heroku. O ... ¿cuál es el nivel de autenticación requerido en este ping? ¿Puede ser enviado desde cualquier lugar por cualquiera? Entonces, el atacante no necesita atacar el servidor de CI para desencadenar una mala implementación.

  • ¿existe la posibilidad de que el servidor de implementación pueda ser pirateado? ahora es su gran activo: puede obtener su propiedad intelectual (el código) y desplegar cualquier malware que le guste. Por eso necesita la protección más estricta.

  • ¿Hay una manera para que un agente externo obtenga las credenciales utilizadas para acceder al Heroku y acceder directamente a él? En cuyo caso, no importa cómo implemente el código, el atacante puede empujar el código como quiera.

  • ¿Existe alguna posibilidad de que las redes puedan ser manipuladas? un buen truco sería forzar al servidor de implementación a ser redirigido desde el sitio legítimo de git hub a una fuente elegida por el atacante. Luego, cuando se recibe un ping legítimo del servidor de CI, el servidor de implementación implementa un código hecho por un atacante en lugar del código probado.

Ningún sistema es "perfecto", por lo que la gran pregunta generalmente se reduce a qué tipo de atacante esperas y cuál crees que podría ser su motivo. Los empleados descontentos, el espionaje corporativo, los punks aleatorios y los cibercriminales que buscan utilizar su sitio como host de malware tendrán sus propios objetivos y cada uno tendrá capacidades diferentes. Es útil reflexionar sobre contra qué quiere protegerse antes de actualizar su arquitectura.

    
respondido por el bethlakshmi 14.09.2012 - 15:35
fuente

Lea otras preguntas en las etiquetas