Firma de código del lado del servidor

5

Actualmente estoy implementando un par de mejoras de seguridad en un sitio web de comercio de divisas criptográficas que maneja todos los datos del lado del cliente y utiliza un enfoque de archivos estáticos.

Una de las cosas que me pidieron fue agregar un mecanismo para permitir a los usuarios verificar si la página fue modificada por un lado del servidor de terceros. Tenga en cuenta que no me estoy refiriendo al servidor < - > eve < - > manipulación de tipo de cliente, ya que CSP, HSTS y otras protecciones están en su lugar.

Mi primer enfoque fue firmar cada archivo con una clave privada (que nunca llega a los servidores de producción) y distribuir la clave pública mediante un canal diferente. El hash firmado se alojaría en el mismo directorio que el archivo, con el nombre del archivo como .key. Alternativamente, todos los archivos podrían ser bloqueados y firmados. El usuario deberá realizar las comprobaciones manualmente (esto no es un problema).

Sé que se puede usar un watchdog del servidor para verificar cambios en los archivos, pero por lo que entendí, las condiciones de alojamiento son extremadamente volátiles.

Finalmente, no puedo crear una aplicación independiente para esto.

¿Es esto razonable? ¿Hay alguna solución propuesta para esta solicitud?

    
pregunta J. Doe 19.11.2016 - 01:44
fuente

1 respuesta

1

Esto se convierte en un problema difícil debido a los dos requisitos concurrentes de que un atacante puede controlar el servidor, y el contenido que se sirve (es decir, las páginas generadas por la aplicación) no es finito ni estático (supongo).

Si solo tenía unos pocos archivos para hospedar, puede distribuir un archivo de suma de comprobación fuera de banda, o en el mismo canal pero firmado con una clave PGP de confianza. Esto es bastante común con los instaladores distribuidos a través de un CDN o espejos. Pero desea verificar que el código que genera dinámicamente los archivos servidos es algo constante.

Si el usuario está ejecutando el código en su propia máquina, puede descargar el código fuente (posiblemente se haya firmado, ya sea como se indica arriba o con el soporte de git gpg o similar) y compilarlo ellos mismos. Pero en su situación, tienen que confiar en una infraestructura de servicio de red completa controlada por un adversario.

Es fácil para alguien que controla el servidor agregar un MitM intermedio que modifique sus solicitudes a la aplicación, o simplemente pedirle a la aplicación que haga una firma para lo que el atacante ya haya generado. Estoy empezando a pensar en métodos para combatirlos (está bien, firmemos todas las solicitudes del usuario y la aplicación verificada lo comprueba antes de emitir una respuesta), pero todos van a estar tapando agujeros, y los sistemas de seguridad complejos son criaderos de vulnerabilidad. Me parece mucho más honesto no intentar hacer este reclamo a sus usuarios.

    
respondido por el Xiong Chiamiov 19.11.2016 - 17:09
fuente

Lea otras preguntas en las etiquetas