¿Authenticode aún funciona sin conexión y con un certificado "falso"

4

Aquí está nuestra historia: estamos desarrollando un software (escrito en C # / .NET) y ya estamos firmando los ensamblajes con nombres sólidos, lo hago en Visual Studio con un archivo pfx que está protegido por una contraseña.

Como paso de seguridad adicional, me gustaría firmar los ensamblados o al menos el ejecutable con Authenticode.

El problema es: los objetivos para nuestra implementación no tendrán acceso a Internet ni podemos obtener nuestro propio certificado verificado por CA en este momento. Tenemos un control completo sobre el destino de la implementación durante la fase de implementación, elegimos el hardware, instalamos el sistema operativo, etc., pero una vez que nuestro producto (que es una combinación de hardware y software) esté "disponible", nos gustaría proporcionar tanta seguridad como podamos.

Por supuesto, entendemos que no podemos controlar lo que sucede en la naturaleza, pero también hemos tomado medidas para poder ver si el hardware ha sido manipulado. Si es así, sabemos que no podemos confiar en el software y no lo veremos.

Para volver a nuestro problema principal: ¿Tiene sentido crear nuestro propio certificado "falso" (no verificable) para firmar los ensamblajes? ¿Necesitamos poner estos certificados en la tienda de Windows? Estoy tratando de evitar que nuestros ejecutables sean reemplazados por otros ejecutables, por ejemplo, a través de una unidad flash USB o algo similar.

¿Cuál es la mejor manera de lidiar con este problema? Gracias de antemano.

    
pregunta Davio 04.01.2013 - 14:51
fuente

1 respuesta

8

Cuando el código se firma con Authenticode, Windows comprueba la firma con respecto a la clave pública contenida en el certificado incorporado, y que el certificado se valida con respecto a la "CA confiable" que mantiene el sistema operativo En la tienda "Root". Agregar una CA personalizada a esa tienda es altamente factible para cualquier persona con derechos de administrador en la máquina (y esto incluye más o menos a cualquiera que tenga acceso físico a la máquina). La firma de su código protege contra cualquier cosa solo si asumimos que el atacante no podrá volver a calcular una firma falsa en relación con un certificado falso que se vincularía a una de las CA confiables.

Ergo , firmar el código no evitará las alteraciones de las personas que tienen acceso a la máquina. Esta es una situación muy genérica, por cierto: la prevención de la alteración del software por parte de las personas que poseen físicamente el hardware ha sido el Santo Grial para los vendedores de juegos y los editores de contenido multimedia. Se ha logrado un poco de éxito limitado con hardware cerrado (por ejemplo, consolas de juegos) pero en una PC, esto está condenado. (Algunas personas están trabajando en una forma de hacerlo pero resulta ser difícil, tanto técnica como políticamente.)

En el mejor de los casos, la firma del código puede evitar la alteración silenciosa de los atacantes que no se molestan en producir certificados falsos (es decir, algunos programas maliciosos de baja calidad), pero los atacantes determinados no serán disuadidos.

Nota: la firma de código puede tener beneficios legales : si se aplica la firma de código, podría ayudar a probar, durante un juicio , quien haya modificado el código era plenamente consciente de que estaba prohibido por la licencia. Sin embargo, no confíe en mi palabra, porque no soy abogado y es poco probable que cualquier respuesta relacionada con la ley sea válida para todos los sistemas legales que existen en todo el mundo (después de todo, hay alrededor de 200 estados soberanos, por lo menos al menos que muchos sistemas legales son nominalmente independientes entre sí).

    
respondido por el Thomas Pornin 04.01.2013 - 15:19
fuente

Lea otras preguntas en las etiquetas