¿Qué debo considerar como una opción de seguridad?

0

Estoy desarrollando update4j , un marco de lanzamiento y actualización basado en Java. Hace poco tuve una pequeña disputa con un colaborador y quiero aclarar las cosas.

Yo como pocas palabras posibles; hay un actualizador del lado del cliente que lee un archivo de "configuración" remota. Ese archivo contiene toda la información necesaria para descargar los archivos de la aplicación.

Además, hay una función de suscripción para firmar archivos y verificar cada descarga con una clave pública. Esto debería evitar que los piratas informáticos cambien los archivos en la configuración o modifiquen los archivos reales de aplicaciones remotas. En la configuración, al lado de cada archivo, el actualizador del lado del cliente agrega y usa un campo signature para verificar una clave pública conocida proporcionada en la instalación.

Ahora, consideré la inclusión del desarrollador si el certificado / clave pública se usa en el actualizador cuando solicito realizar una actualización. De lo contrario, el actualizador ignora completamente el campo signature . Pero afirman que si la configuración contiene firmas, esto por sí solo se considera una opción de inclusión y debe obligar al actualizador a verificar, y si el actualizador nunca tuvo conocimiento de ninguna clave pública y nunca la solicitó, debería fallar.

Para citar :

  

No se proporciona certificado local

     

Si la configuración contiene firmas (por lo que el proveedor intenta asegurar la actualización), pero no se proporciona un certificado local, update4j descarga la configuración, los archivos y la ejecuta. En mi opinión, esto no es seguro.   Ver src/test/java/org.update4j.integration.SigningTest.noCertificateWithSignatureTest()

Desde mi perspectiva, esto se siente innecesario. El "proveedor" suele ser el mismo equipo de desarrollo del actualizador del lado del cliente (al menos decidieron cómo configurar el actualizador). Si un pirata informático puede acceder a los archivos o la configuración misma y modificarlos, el "proveedor" ya no busca seguridad. Si cambian las cosas a sabiendas de que el actualizador nunca requiere firmas, ¿por qué en el mundo ese pirata informático agregaría el campo signature ? Además, hace que sea muy difícil agregar seguridad solo para algunas instalaciones (por ejemplo, una función de prueba) ya que tendría que agregar una firma pero ahora hará explotar a los antiguos clientes.

El único caso en el que podría estar de acuerdo es que la configuración en sí no fue pirateada, solo los archivos remotos. Aquí el proveedor todavía querría verificar los archivos. Pero recuerde, el equipo de desarrollo nunca buscó seguridad ya que no configuraron el actualizador para verificar las firmas.

¿Cómo manejaría tal caso?

    
pregunta Mordechai 10.10.2018 - 19:45
fuente

1 respuesta

1

Proporcionaría una opción de configuración del lado del usuario para controlar qué hacer, con tres configuraciones posibles:

  • Marque solo si hay un campo signature presente. Esta opción debería ser la predeterminada, y permite al usuario ceder al editor si debe verificar o no la firma si está presente.
  • Siempre verifique y emita un error si no hay un campo signature . Esta opción es para aquellos usuarios que desean (o necesitan) garantizar la integridad del código y no confían en que el editor lo requiera.
  • Nunca lo compruebes. Esta opción es principalmente para desarrolladores o para uso interno, y probablemente debería tener una gran advertencia.

La mayoría de los usuarios dejarán las cosas por defecto y, por lo tanto, obtendrán una verificación si la actualización proporciona una firma, y ninguna si no lo hace, mientras que aquellos que necesitan forzar o deshabilitar la verificación pueden hacerlo.

También podría considerar proporcionar algo equivalente al encabezado Strict-Transport-Security en HTTP. Esencialmente, si se establece algún indicador en una actualización que se ha firmado, las futuras actualizaciones para la misma pieza de datos también deben firmarse o no se aceptarán, incluso si no tienen un campo signature válido.

    
respondido por el Austin Hemmelgarn 10.10.2018 - 20:52
fuente

Lea otras preguntas en las etiquetas