macOS는 인터넷에서 다운로드 한 응용 프로그램의 서명 상태를 어떻게 식별합니까?


8

Safari를 사용하여 인터넷에서 앱을 다운로드했습니다. 이를 실행하면 macOS는 앱이 미확인 개발자의 것임을 알립니다.

macOS는이 정보를 어떻게 확인할 수 있습니까? 앱의 서명 메타 데이터는 어디에 저장됩니까?


귀하의 질문을 이해하면 Safari에 다운로드 한 응용 프로그램이 Apple에 알려진 개발자가 서명하지 않았기 때문에이 경고가 표시됩니다. 컴퓨터에서 프로그램 xyz가 어디에 있는지 묻고 있습니까?
Jake3231

답변:


13

정보는 확장 된 속성 내에 저장되며 추가 정보는 잠재적으로 응용 프로그램에 임베드됩니다.

확장 된 속성

이 격리 정보는 확장 된 속성으로 저장됩니다 . xattr도구를 사용하여 파일 또는 애플리케이션과 연관된 속성을보십시오.

이 메시지를 발생시키는 속성은 com.apple.quarantine입니다.

Mac OS X에서 파일의 "확장 속성"을 제거하는 방법을 참조하십시오 . 그리고 이 정체 불명의 개발자에게 있기 때문에 응용 프로그램을 열 수 없습니다 자세한 내용은.

게이트 키퍼 및 코드 서명

확장 속성은 macOS의 Gatekeeper 에서 사용되며 com.apple.quarantine 속성을 설정 (복원)하는 방법에서 설명 합니다.

응용 프로그램에 포함 된 선택적 디지털 서명은 응용 프로그램 개발자를 결정하는 데 사용됩니다. 서명이 없으면 macOS는 응용 프로그램을 식별되지 않은 개발자의 것으로 표시합니다.


5
이것은 정확하지 않습니다. 검역소 데이터는 다운로드 한 파일 의 소스 를 추적하는 데 사용 되지만 서명은 다른 곳에 있습니다.
duskwuff -inactive-

1
@duskwuff가 정확합니다. 검역소에서 "XXX은 (는) 인터넷에서 다운로드했습니다.여시겠습니까?"
Barmar

1
모든 파일과 응용 프로그램이 코드 서명 된 것은 아닙니다. 많은 응용 프로그램이 아니므로 그러한 경우에는 내장 된 서명이 없습니다. "확인되지 않은 개발자"메시지의 경우입니다.
Graham Miln

7

실제로 "알 수없는 개발자 ..."라는 메시지 는 실제 서명 상태가 com.apple.quarantine 속성 확인 코드 서명 리소스 (* / Contents / _CodeSignature / CodeResources) 두 가지 작업이 결합 된 결과입니다. * / CodeResources에 의해서만 결정됩니다 .

다음을 입력하여 확장 된 속성을 얻을 수 있습니다.

$ xattr -p com.apple.quarantine /Applications/*.app

코드 서명 정보는 다음을 입력하여 액세스합니다.

$ codesign -dvvv /Applications/*.app

예:

$ 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

가장 중요한 부분은 인증서 체인 (및 신뢰 체인)입니다.

Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA

여기에 세 가지 다른 권한이 표시됩니다.

  1. 루트 인증서 : Apple Root CA
  2. 중급 Apple 개발자 인증서 : 개발자 ID 인증 기관
  3. 개발자 인증서 : Google, Inc. (EQHXZ8M8AV)

이는 앱이 개발자 인증서로 서명되고 Apple의 중간 개발자 기관에서 게시 및 서명 한 것이며, 자체 인증서는 Apple의 루트 CA에서 게시 및 서명 한 것입니다.

이 체인은 Google (또는보다 정확하게는 팀 / 단위 Google, Inc. (EQHXZ8M8AV))을 Apple 공인 개발자로 인정합니다.

직접 공동 설계하거나 다른 중간 / 루트 기관의 공동 설계 인증서로 앱을 공동 설계 할 수도 있지만 게이트 키퍼를 극복 할 수는 없습니다.

게이트 키퍼가 활성화되었다고 가정하면 (자체 서명 / 외계 서명은 고려하지 않음) 이제 네 가지 순열이 가능합니다.

  • com.apple.quarantine 속성 없음 / Apple 개발자 인증서 없음 (예 : brew cask installed Apache CouchDB )
  • com.apple.quarantine 속성 없음 / Apple 개발자 인증서 없음 (예 : brew cask installed Google Chrome )
  • com.apple.quarantine 속성 / 애플 개발자 인증서 없음 (예 : 웹 사이트에서 zip을 다운로드하고 압축이 풀린 앱을 / Applications /에 복사하여 설치된 Apache CouchDB )
  • com.apple.quarantine 속성 / Apple 개발자 인증서 (예 : 웹 사이트에서 dmg를 다운로드하고 앱을 / Applications /에 복사하여 설치된 Chrome )

처음 두 경우에는 앱이 시작됩니다. 세 번째 경우에는 Unindentified Developer 메시지가 나타납니다. 확장 된 속성 xattr -d com.apple.quarantine *(= case 1) 을 제거하여이 문제를 해결할 수 있습니다 . 네 번째 경우에는 "*는 인터넷에서 다운로드되었습니다. 열겠습니까?"라는 메시지가 나타납니다.


5

macOS는이 정보를 어떻게 확인할 수 있습니까? 앱의 서명 메타 데이터는 어디에 저장됩니까?

서명은 응용 프로그램 이진 자체 내에 저장되며 응용 프로그램 번들 (파일 Contents/_CodeSignature/CodeResources) 에 일부 추가 데이터가 있습니다.

명령 행 유틸리티를 사용하여 서명에 대한 정보를 얻을 수 있습니다 ( codesign예 :

# 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.