임시 코드 서명의 제한 사항은 무엇입니까?


14

를 사용하여 코드 또는 앱에 "ad-hoc"을 서명 할 수 있습니다 codesign. 매뉴얼 페이지는 애드혹 코드 서명에 대해 다음을 알려줍니다.

신원이 단일 문자 "-"(대시)이면 임시 서명이 수행됩니다. 임시 서명은 ID를 전혀 사용하지 않으며 정확히 하나의 코드 인스턴스를 식별합니다. 임시 서명 된 코드 사용에는 상당한 제한이 적용됩니다. 사용하기 전에 설명서를 참조하십시오.

(나에 의해 추가 된 empasis)

더 알고 싶었고 해당 문서를 찾으려고했지만 세부 사항을 찾을 수 없었습니다. "macOS Code Signing In Depth"라는 기술 노트를 찾았 지만 임시 서명은 전혀 언급하지 않았습니다.

이러한 "중요한 제한"은 무엇이며 어디에 기록되어 있습니까?

답변:


9

이 문맥에서 기본적으로 임시 서명은 바이너리가 암호화 증명없이 서명된다는 것을 의미합니다.

본질적으로 바이너리는 일반적으로 CodeDirectory의 해시가 서명 ID로 서명 된 메시지 인 CMS (암호화 메시지)를 추가하여 서명됩니다. 이는 외부인이 해당 ID의 개인 키를 보유한 사람이 실제로 코드에 서명했는지 확인할 수 있음을 의미합니다.

프로그램을 실행할 때 macOS 시스템은 이러한 서명이 유효한지, 서명 ID를 신뢰하는지 확인하고 서명 된 경우 프로그램을 실행합니다. 이것이 GateKeeper 기능의 기본입니다.

임시 서명 된 바이너리는 CMS가 없기 때문에 크게 다릅니다. 그 대신, 유효성에 대한 암호 증명없이 검증 할 인증서 / ID 경로없이 CodeDirectory의 SHA-1 해시 값을 보유합니다.

CodeDirectory는 응용 프로그램이 만들어진 다양한 코드 조각에 대한 해시 값을 사용하여 특정 정적 코드 인스턴스를 설명하는 개체입니다. 암호화 서명을 확인하여 CodeDirectory가 변경되지 않도록하고 응용 프로그램의 다양한 코드 비트가 디렉토리에 저장된 해시 값과 일치하는지 확인하여 코드가 변경되지 않았 음을 확인할 수 있습니다.

암호 증명이 없으면이 "비 암호화"검사를 일반적인 방식으로 수행 할 수 없습니다.

대신 임시 서명 된 바이너리는 SHA-1 해시 값을 커널 내부의 정적 신뢰 캐시에 저장된 "알려진 양호한"해시 값 목록과 비교하여 확인됩니다.

본질적으로 이것은 사용자가 직접 서명 한 응용 프로그램에 적용되는 "중요한 제한 사항"이 어떤 종류의 확인도 통과하지 못한다는 것을 의미합니다. 기본적으로 서명되지 않은 이진과 동일합니다.

그러나 Apple 인 경우 일반적인 방식으로 공동 설계되지 않고 커널에서 명시 적으로 신뢰하는 응용 프로그램을 만들 수 있습니다. 예를 들어, Apple은 전체 서명 신원 확인이 작동하지 않거나 실행되지 않는 (또는 사용할 수없는) 시스템 시작 초기 단계에서 실행될 때 응용 프로그램이 변경되지 않도록하려면 임시 서명을 사용할 수 있습니다. 이러한 응용 프로그램은 인증서 리포지토리가 호스로 연결되어 있는지 여부에 관계없이 항상 정적 신뢰 캐시로 확인할 수 있습니다.

실제로 임시 서명 된 바이너리를 생성하는 것은 Apple 개발자에게 실질적인 가치 일뿐입니다.

Apple 개발자 섹션에서 임시 서명에 대한 사소한 문서를 찾을 수 있습니다. 예를 들면 다음과 같습니다.

https://developer.apple.com/documentation/security/seccodesignatureflags/kseccodesignatureadhoc

그러나 codesign 유틸리티 자체의 소스 코드와 libsecurity의 소스 코드에서 문서 스 니펫을 찾을 수도 있습니다.


여기서 "애플 개발자에게는 실질적인 가치 만"이 "애플에서 근무하는 개발자에게만"또는 "애플 플랫폼에서 근무하는 개발자에게만"을 의미합니까? 이름이 정확한 경우에도 키 체인이 키를 찾을 수없는 새로운 문제가 발생하기 시작하면서 비 호환 빌드를 위해 하이픈으로 전환하는 것을 고려하면서 정말 궁금합니다.
Trejkaz

1
Apple에서 일하는 개발자에게만 해당됩니다.
jksoegaard

iOS 시뮬레이터는 임시 서명도 사용합니다. 임시 서명은 앱 외부에서 개발자가 권한 부여를 요청할 수 있도록 Apple 외부 개발자에게 유용하게 사용될 수 있습니다. 코드 서명이 없으면 확실하지 않습니다. Mac에서는 일반적으로 문제가되지 않지만 iOS에서는 많은 기능이 권한 뒤에 숨겨져 있으므로 iOS 개발자에게는 이것이 제대로 작동하는지 테스트하는 것이 바람직합니다.
milch

@milch "adhoc signing"(이 질문에 관한 것임)과 "adhoc distribution"(iOS 개발자가 자주 사용하고 권한 부여에 관한
것임

시뮬레이터 빌드가 서명되어 있음을 확신합니다 (배포되지 않음). 로 시뮬레이터 용으로 빌드 된 iOS 앱을 검사하여 확인할 수 있습니다 codesign -dv --verbose=4 /path/to/the.app. 라는 문구가 다시 Signature=adhoc표시됩니다. 이것은 의사 서명을 나타내는 것 같습니다. 특히 결석과 같은 정기적으로 서명 아이폰 OS 응용 프로그램에서 일반적으로 존재하는 다른 키입니다 AuthorityTeamIdentifier
낙농
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.