8 votos

¿Cómo identifica MacOS el estado de la firma de una aplicación descargada de Internet?

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?

16voto

Steve Evans Puntos 155

La información se almacena dentro de atributos extendidos, con información adicional potencialmente incrustada dentro de una aplicación.

Atributos ampliados

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.

Portero y firmas de código

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.

7voto

klanomath Puntos 19587

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:

  1. Certificado root: Apple Root CA
  2. Certificado de desarrollador intermedio de Apple: Autoridad de certificación de ID de desarrollador
  3. Certificado de desarrollador: Google, Inc. (EQHXZ8M8AV)

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):

  • No hay atributo com.apple.quarantine/no hay certificado de Apple Developer (Ejemplo: brew cask instaló Apache CouchDB )
  • No hay atributo com.apple.quarantine/un certificado Apple Developer (Ejemplo: barril de cerveza instalado Google Chrome )
  • Un certificado com.apple.quarantine attribute/no Apple Developer (Ejemplo: Apache CouchDB se instala descargando el zip del sitio web y copiando la aplicación descomprimida en /Applications/ )
  • Un atributo com.apple.quarantine/un certificado Apple Developer (Ejemplo: Google Chrome se instala descargando el dmg del sitio web y copiando la aplicación que contiene en /Applications/ )

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?"

5voto

duskwuff Puntos 227

¿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.com

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.

Powered by:

X