¿Debo firmar yo mismo el código de fuente abierta?

13

Utilizo macOS 10.14 y encontré un problema cuando intenté instalar un complemento de código abierto para Vim que encontré en Github. Descargué el código fuente y lo compilé, que funcionó bien, pero cuando lo ejecuté, la ejecución se interrumpió porque la "Firma del código [del ejecutable] no es válida para su uso en el proceso".

Esto me ha dado muchas preguntas que no puedo entender:

Podría firmarlo yo mismo, pero ¿no arruinaría eso el propósito de firmar el código? ¿Hay alguna diferencia cualitativa en la firma del código de Internet y en el cuadro de diálogo "Esta aplicación se descargó de Internet"?

Si no lo hago, ¿de quién es la "responsabilidad" firmar? ¿El mantenedor del repositorio? Los contribuyentes? ¿Apple espera que los desarrolladores de código abierto tengan siempre una ID de desarrollador de Apple? ¿O no he entendido bien el propósito de la firma de código?

Editar:

Para aclarar, mi pregunta es cómo debo manejar el código fuente no firmado que compilo yo mismo, ya que no espero que los contribuyentes siempre puedan, o recuerden, firmar su código, especialmente cuando se trata de pequeñas contribuciones a Proyectos de código abierto con muchos colaboradores.

    
pregunta Jacob Taxén 27.11.2018 - 10:29

3 respuestas

11

Firma de código Ad-Hoc

Para aplicaciones y binarios de terceros que compile usted mismo y que requiera firma de código, use una firma de código ad hoc .

  • Supongo que la aplicación no se ejecutará sin una firma;
  • Supongo que la aplicación no se distribuirá;
  • Supongo que no le importa que la identidad de la firma sea válida.

Una firma ad-hoc no proporciona beneficios de seguridad confiables. Se puede usar para determinar si la aplicación se ha cambiado y se puede usar para aplicar restricciones de seguridad, como derechos, a una aplicación.

Una firma ad-hoc se validará contra codesign pero no spctl . Esto puede o no importar dependiendo del binario que se firma. Para las aplicaciones y los ejecutables, es poco probable que esto importe porque spctl no se ejecuta en binarios creados localmente.

¿Por qué Code Sign?

Con respecto a la pregunta refinada:

  

Cómo debo manejar el código fuente no firmado que compilo yo mismo, ya que no espero que los contribuyentes siempre puedan, o recuerden, firmar su código, especialmente cuando se trata de pequeñas contribuciones a proyectos de código abierto con muchos contribuyentes. .

Para la mayoría de las aplicaciones autocompiladas, no es necesario firmar el código. Esto supone que confía en el código de la aplicación. En macOS, puede abrir aplicaciones que no sean de confianza desde el Finder, ver Abra una aplicación de un desarrollador no identificado de Apple.

Si no confía en el código o en los desarrolladores, no compile ni ejecute la aplicación.

Su responsabilidad

El proveedor del código fuente no tiene la responsabilidad ni la obligación de proporcionar códigos binarios firmados con código previamente creados. Al ser auto compilado, toda la firma del código es su elección y responsabilidad.

  • Apple requiere los envíos a sus tiendas de aplicaciones para que tengan el código firmado.

  • Los solicitantes de Apple que están fuera de sus tiendas de aplicaciones firman su código, pero aún no es necesario.

En ambos casos, solo se firman los binarios finales. El código fuente y los recursos originales no están firmados.

El código fuente no está firmado

El código fuente en sí no se puede firmar con código de manera significativa para macOS. Los archivos de origen y el código pueden firmarse digitalmente, como cualquier otro archivo, pero esto no tiene ningún impacto en la forma en que MacOS trata la aplicación o el binario resultante.

Cómo Ad-Hoc Code Firmar una aplicación para Mac

Para codificar una aplicación en macOS con una firma ad-hoc, establezca la identidad -s flag en - :

codesign --force -s - </path/to/application>

Todas las demás reglas, requisitos y permutaciones del comando codesign siguen siendo las mismas.

La bandera --force se usa aquí para sobrescribir cualquier firma existente.

Es posible que necesite agregar el indicador --deep al comando codesign para firmar sub-recursos como marcos y servicios integrados.

    
respondido por el Graham Miln 27.11.2018 - 13:47
5

Firmar el programa usted mismo no está arruinando el propósito de la firma de código. El propósito general de la firma de código es hacer posible verificar que el programa es una copia no modificada que fue originalmente creada por una entidad específica (persona o compañía). Cuando usted firma un programa solo para ejecutarlo en su computadora, hace posible que el sistema verifique que es usted quien creó el binario y que otros no lo han modificado.

La diferencia cualitativa entre firmar el binario de la aplicación y solo permitir aplicaciones de desarrolladores no identificados en GateKeeper es que, en el primer caso, permite que se ejecute una aplicación única y específica, mientras que el segundo se abre para la posibilidad de que pueda abra muchas aplicaciones diferentes con solo hacer clic derecho en ellas y elegir Abrir. Es decir. es más restrictivo y, por lo tanto, algo más "seguro" al firmar usted mismo el programa específico.

La responsabilidad de firmar es completamente tuya. El desarrollador de código abierto no puede firmar el código fuente, solo es posible firmar los binarios compilados. Cuando usted mismo está produciendo los binarios compilados, debe firmarlos.

Puede registrarse para obtener una cuenta de desarrollador en el sitio web de Apple que le permitirá crear un certificado que se puede usar para firmar. Si eres un desarrollador y estás compilando binarios para correr en Mac, esta es la forma preferida de hacer las cosas. Si esto es algo único que probablemente nunca volverás a hacer, es probable que pases por este proceso. YMMV.

Otras respuestas para su pregunta aquí recomienda que utilice la firma ad-hoc para su binario. Eso no funcionará. Necesitará generar una firma válida para que el binario se ejecute con GateKeeper en su configuración más segura.

    
respondido por el jksoegaard 27.11.2018 - 14:57
1
  

¿Debo firmar yo mismo el código fuente abierto?

Si no eres el desarrollador, entonces no.

Firma de código, en pocas palabras, es un método para decir que usted (el desarrollador) es quien es diga que lo es y que el código no ha cambiado desde que lo firmó por última vez.

  

¿Hay alguna diferencia cualitativa en el código de firma de Internet?   y permitir aplicaciones de desarrolladores no identificados en el "Esta aplicación fue   ¿Cuadro de diálogo "descargado de Internet?

Suena como la firma de código confusa (lo que requieren los desarrolladores para publicar aplicaciones en App Store) y Gatekeeper (lo que protege a tu Mac de instalar software de desarrolladores no identificados).

Si permites que tu Mac instale software tanto desde la App Store como desde los desarrolladores identificados, todavía obtendrás una ventana emergente que te alertará sobre el hecho de que se instalará el software

Y si es de un desarrollador no identificado, obtendrás la misma ventana emergente con un "icono de advertencia"

Todavía puede instalar el software. Esto es solo un mecanismo que obliga a la interacción del usuario a instalar realmente el software que le proporciona una capa de seguridad contra el malware autoinstalado.

    
respondido por el Allan 27.11.2018 - 10:41

Lea otras preguntas en las etiquetas