Estrategias para firmar secciones de un archivo de texto para evitar la manipulación

4

Estoy buscando sugerencias de la comunidad sobre la mejor manera de abordar este problema de asegurar un archivo de texto y al mismo tiempo hacerlo más fácil de compartir:

  1. Tengo una colección de recetas de chef en git, que define laboratorios por ejemplo. una configuración de jenkins CI, que las personas podrán utilizar como herramienta de bifurcación y adaptar a su propio uso

  2. Sin embargo, puedo ver las circunstancias cuando alguien quiera agregar ciertas secciones inmutables del libro de cocina, por ejemplo. configuración del cortafuegos

  3. ¿Qué estrategia tendría sentido bloquear algunas secciones del archivo para validar que no se ha cambiado, al tiempo que se permiten cambios arbitrarios fuera de eso?

  4. Idealmente, también resolvería la capacidad de ofuscar las secciones si es necesario

¿Agregaría mi propio DSL al código, con una suma de comprobación para cada bloque protegido, preprocesarlo para desenvolverlo y validarlo antes de pasárselo al chef?

por ejemplo Mi primer intento en un formato, aún no resuelve el problema de que las personas eliminen todas las secciones firmadas, a menos que todos los archivos tengan que estar firmados

por supuesto que podría estar pensando en esto al revés.

#---SIGNED-FILE SHA-256 507e74380188c07bad2fa66acb8cbbeeb63f84fcee5fd639499575654239cd49

#
# Cookbook Name:: jenkins
# Recipe:: default
#

# https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu
# This is super-simple, compared to the other Chef cookbook I found
# for Jenkins (https://github.com/fnichol/chef-jenkins).
#
# This doesn't include Chef libraries for adding Jenkin's jobs via
# the command line, but it does get Jenkins up and running.

include_recipe "apt"
include_recipe "java"

#---SIGNED-SECTION-START SHA-256 e4d3d02f14ee2a6d815a91307c610c3e182979ce8fca92cef05e53ea9c90f5c7
apt_repository "jenkins" do
  uri "http://pkg.jenkins-ci.org/debian"
  key "http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key"
  components ["binary/"]
  action :add
end
#---SIGNED-SECTION-END

#---OBFUSCATED-SECTION-START SHA-256 5f536f2137dc7e2c5817de861d1329ead72b1e9d2dbb9dbe181ec7bc274dddeb
YXB0X3JlcG9zaXRvcnkgImplbmtpbnMiIGRvCiAgdXJpICJodHRwOi8vcGtnLmplbmtpbnMtY2kub3JnL2RlYmlhbiIKICBrZXkgImh0dHA6Ly9wa2cuamVua2lucy1jaS5vcmcvZGViaWFuL2plbmtpbnMtY2kub3JnLmtleSIKICBjb21wb25lbnRzIFsiYmluYXJ5LyJdCiAgYWN0aW9uIDphZGQKZW5k
#---OBFUSCATED-SECTION-END

package "jenkins"

service "jenkins" do
  supports [:stop, :start, :restart]
  action [:start, :enable]
end
    
pregunta velniukas 28.07.2012 - 13:13
fuente

1 respuesta

3

No creo entender, entiendo el problema. Para ayudarlo a pensar y explicar con más claridad lo que está tratando de lograr, le sugiero que decida: ¿Cuáles son las acciones legítimas que desea permitir? Además, ¿cuáles son algunos ejemplos de acciones ilegítimas que no desea permitir? ¿A quién desea poder modificar las secciones no bloqueadas del archivo? ¿Contra qué estás tratando de protegerte?

Mi primera sugerencia sería: dividir el archivo en varios archivos y hacer algunos modificables y otros no.

Sin embargo, realmente no entiendo cuál es tu objetivo. Cualquiera puede hacer una copia local del archivo y modificar la parte que desee. Nada de lo que hagas puede evitar eso. No veo cómo ayudan las firmas, porque cualquiera puede ignorar el hecho de que las firmas no son válidas y continuar utilizando el archivo (si es necesario, pueden modificar el código que verifica las firmas para ignorar la firma inválida). Por lo tanto, suena como primera impresión como si estuvieras tratando de resolver un problema que no se puede resolver, algo parecido a hacer que el agua no se moje.

Si está hablando de evitar la modificación de la versión del archivo almacenado en git, ¿por qué le da a las personas que no confía acceso de escritura a su repositorio de git? Parece que deberías evitar hacer eso.

Editar 9/29: En sus comentarios, aclaró la configuración del problema. Ahora puedo dar una mejor respuesta:

Divida el archivo en dos partes o dos archivos, uno que debe modificarse y otro que no debe modificarse. Etiquete cada parte claramente e indique qué parte / archivo debe cambiarse y cuál no.

Y, tenga en cuenta que ninguna medida técnica puede obligarlos a incluir las partes que no desea cambiar sin cambiarlas. Esto no es algo que puedas resolver por medios técnicos. En cambio, su objetivo debe ser elucidar sus intenciones acerca de qué partes no deben cambiarse. Luego, tendrá que confiar en medios sociales para evitar que las personas hagan lo que no quiere que hagan (es decir, confiará en la buena voluntad de otras personas o en la amenaza de consecuencias negativas si se desvían de sus recomendaciones). ).

    
respondido por el D.W. 29.07.2012 - 08:26
fuente

Lea otras preguntas en las etiquetas