¿Cuáles son las restricciones de la firma de código ad-hoc?

8

Es posible firmar el código o las aplicaciones "ad-hoc" utilizando codesign . La página del manual nos dice lo siguiente sobre la firma de código ad-hoc:

  

Si la identidad es la única letra "-" (guión), se realiza la firma ad-hoc. La firma ad-hoc no utiliza ninguna identidad e identifica exactamente una instancia de código. Se aplican restricciones importantes al uso del código firmado ad-hoc; Consulte la documentación antes de usar esto.

(énfasis añadido por mí)

Quería saber más e intenté encontrar dicha documentación, pero no pude encontrar ningún detalle. He encontrado una nota técnica llamada "MacOS Code Signing In Depth" , pero lo hace no mencionar la firma ad-hoc en absoluto.

¿Qué son estas "restricciones significativas" y dónde están documentadas?

    
pregunta not2savvy 29.06.2017 - 16:29

1 respuesta

4

Básicamente, la firma ad-hoc en este contexto significa que el binario está firmado sin ninguna prueba criptográfica.

En esencia, normalmente los binarios se firman agregando un llamado CMS (un mensaje criptográfico) donde el hash de CodeDirectory es el mensaje firmado por la identidad de firma. Esto significa que un forastero puede verificar que el código fue firmado por alguien que tiene la clave privada para esa identidad.

Al ejecutar programas, el sistema macOS puede verificar que estas firmas son válidas y que confía en la identidad de la firma, y si lo hace, ejecute el programa. Esto es lo básico de la funcionalidad GateKeeper.

Los binarios firmados ad-hoc son muy diferentes ya que no contienen ningún CMS. En su lugar, simplemente retiene el valor hash SHA-1 del CodeDirectory sin ninguna prueba criptográfica de su validez, y no hay una ruta de acceso de certificados / identidades con las que se pueda verificar.

El CodeDirectory es un objeto que describe una instancia particular de código estático al tener valores hash para varias piezas de código de las que está hecha la aplicación. Al asegurarse de que el CodeDirectory no se vea afectado al verificar la firma criptográfica y que los distintos bits de código de la aplicación coincidan con los valores de hash almacenados en el directorio, puede asegurarse de que el código no fue manipulado.

Sin la prueba criptográfica, esta comprobación "no controlada" no se puede realizar de la forma habitual.

En cambio, los binarios firmados ad-hoc se verifican comparando el valor de hash SHA-1 con una lista de valores de hash "conocidos" almacenados en el caché de confianza estática dentro del kernel.

En esencia, esto significa que las "restricciones significativas" que se aplican a cualquier aplicación que usted mismo adh hoc firme es que no pasará ningún tipo de verificación en ninguna parte. Básicamente, es lo mismo que un binario no firmado.

Sin embargo, si eres Apple, puedes crear aplicaciones que no están codificadas de forma ordinaria y, en cambio, el kernel confía en ellas de forma explícita. Es decir. Si, por ejemplo, Apple desea asegurarse de que una aplicación no se vea afectada cuando se ejecuta en una etapa temprana en el inicio del sistema, donde la verificación de identidad de firma completa no está en funcionamiento (o no está disponible), pueden usar la firma ad-hoc. Estas aplicaciones siempre pueden ser verificadas por la memoria caché de confianza estática, sin importar si el repositorio de certificados está abierto o algo por el estilo.

En la práctica, crear binarios firmados ad-hoc es solo de valor práctico para los desarrolladores de Apple.

Puede encontrar documentación menor sobre la firma ad-hoc en la sección de desarrolladores de Apple. Por ejemplo:

enlace

Pero también puede encontrar fragmentos de documentos en el código fuente para la utilidad de diseño de código en sí, y en el código fuente para libsecurity.

    
respondido por el jksoegaard 02.03.2018 - 01:34

Lea otras preguntas en las etiquetas