He descargado una aplicación de Internet con Safari. Al ejecutarla, MacOS notifica que la aplicación es de un desarrollador no identificado.
¿Cómo puede MacOS determinar esta información? Dónde se almacenan los metadatos de firma de una aplicación?
He descargado una aplicación de Internet con Safari. Al ejecutarla, MacOS notifica que la aplicación es de un desarrollador no identificado.
¿Cómo puede MacOS determinar esta información? Dónde se almacenan los metadatos de firma de una aplicación?
La información se almacena dentro de atributos extendidos, con información adicional potencialmente incrustada dentro de una aplicación.
Esta información de cuarentena se almacena como un atributo extendido . Utilice el xattr
para ver los atributos asociados a un archivo o aplicación.
El atributo que provoca este mensaje es com.apple.quarantine
.
Ver ¿Cómo puedo eliminar los "atributos extendidos" de un archivo en Mac OS X? y La aplicación no se puede abrir porque es de un desarrollador no identificado para más detalles.
El atributo ampliado es utilizado por Portero en MacOS y se discute en ¿Cómo establecer (restaurar) el atributo com.apple.quarantine?
Una firma digital opcional incrustada en una aplicación se utiliza para determinar el desarrollador de la misma. Si no se encuentra una firma, MacOS presenta la aplicación como si fuera de un desarrollador no identificado.
De hecho, el mensaje "Desarrollador no identificado..." es el resultado de una combinación de ambas tareas: comprobación del atributo com.apple.quarantine y los recursos de firma de código (en */Contents/_CodeSignature/CodeResources) mientras que el estado real de la firma está determinado únicamente por */Recursos de código .
Puede obtener el atributo ampliado introduciendo:
$ xattr -p com.apple.quarantine /Applications/*.app
Se accede a la información de la firma del código introduciendo:
$ codesign -dvvv /Applications/*.app
Ejemplo:
$ codesign -dvvvv /Applications/Google\ Chrome.app/
Executable=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
Identifier=com.google.Chrome
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=273 flags=0x800(restrict) hashes=3+3 location=embedded
OSPlatform=36
OSSDKVersion=658432
OSVersionMin=657664
Hash type=sha256 size=32
CandidateCDHash sha1=bc8e3dffe7d9d5242e09ea80a220ed365d46fdf2
CandidateCDHash sha256=d7ae6211906bb17d593ce9c215d190a81f37e658
Hash choices=sha1,sha256
Page size=4096
CDHash=d7ae6211906bb17d593ce9c215d190a81f37e658
Signature size=8949
Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=20. Mar 2018 at 07:23:20
Info.plist entries=36
TeamIdentifier=EQHXZ8M8AV
Sealed Resources version=2 rules=7 files=203
Internal requirements count=1 size=240
La parte más importante es la cadena de certificados (y la cadena de confianza):
Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Aquí son visibles tres autoridades diferentes:
Esto significa que la aplicación está firmada con un certificado de desarrollador, publicado y firmado por la autoridad intermedia de desarrolladores de Apple, que a su vez está publicado y firmado por la CA root de Apple.
Esta cadena califica a Google (o más exactamente: al equipo/unidad Google, Inc. (EQHXZ8M8AV)) como desarrollador identificado por Apple.
También puedes codificar las aplicaciones tú mismo o con un certificado de codificación de otra autoridad intermedia/root, pero esto no superará a Gatekeeper.
Ahora son posibles cuatro permutaciones asumiendo que Gatekeeper está habilitado (pero sin considerar la autofirma/firma de extranjeros):
En los dos primeros casos, la aplicación simplemente se lanzará. En el tercer caso obtendrá el Desarrollador no identificado mensaje. Puede resolverlo eliminando el atributo extendido xattr -d com.apple.quarantine *
(=caso 1). En el cuarto caso obtendrá el "* se descargó de Internet, ¿está seguro de que quiere abrirlo?"
¿Cómo puede MacOS determinar esta información? Dónde se almacenan los metadatos de firma de una aplicación?
La firma se almacena dentro del propio binario de la aplicación, con algunos datos adicionales en el paquete de la aplicación (en el archivo Contents/_CodeSignature/CodeResources
).
Puede obtener información sobre la firma utilizando la utilidad de línea de comandos codesign
-- por ejemplo:
# codesign -dv /Applications/Preview.app
Executable=/Applications/Preview.app/Contents/MacOS/Preview
Identifier=com.apple.Preview
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20100 size=21314 flags=0x0(none) hashes=659+5 location=embedded
Platform identifier=4
Signature size=4485
Info.plist entries=35
TeamIdentifier=not set
Sealed Resources version=2 rules=13 files=2077
Internal requirements count=1 size=68
AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.