WWDC

[WWDC23] Verify app dependencies with digital signatures

Phililip
728x90

안녕하세요.

 

이번엔 WWDC23 'Verify app dependencies with digital signatures' 세션에 대한 내용 정리해 볼게요.

 


# 개요

Xcode에서의 의존성 서명 검증(Dependency signature verification)은 앱 개발자의 앱을 보호하며 SDK 개발자가 배포한 SDK를 보호합니다.

 

 

앱 개발하면 개발 편의성을 위해 외부 SDK를 사용하는 경우가 많은데요.

 

아래처럼 사용하는 외부 SDK 중 하나에 문제가 있다면 앱에도 영향이 갈 수 있습니다.

 

 

앱 개발자 또는 SDK 개발자는 코드 내에서 사용하고 있는 외부 SDK에 문제가 없는지 확인 및 검증을 해야 할 책임이 있어요.

 

Xcode 15부터 의존성 서명 검증 기능을 제공하고, 외부 SDK 확인 및 검증 작업을 자동으로 해줍니다.

(이 기능을 Supply chain security라고 부르는 것 같아요.)

 

 

 

# Dependency signatures

SDK를 사용하는 앱 개발자 입장에선 SDK가 배포된 상태 그대로 인지, 혹은 누가 악의적으로 수정한 SDK 인지 판단하고 싶을 거예요.

 

Code signing은 바이너리, Info.plist, 소스코드, Privacy 정보와 같은 메타데이터를 개발자 identity로 암호화하는 것을 의미합니다.

 

 

Code signing 방법에 대해 간략하게 설명하자면.

 

우선, 컴파일된 바이너리의 Code Directory Hash(=CDHash)를 생성하구요.

 

 

 

그다음 개발자 인증서(안에 있는 개발자 identity)로 CDHash와 timestamp를 서명함으로써, 이후 서명된 정보를 토대로 SDK가 변조되었는지를 알 수 있습니다.

 

 

서명된 결과는 _CodeSignature 폴더에 보관됩니다.

 

 

Code signature를 가지고 직접 검증을 할 수도 있지만, Xcode 15부턴 검증을 자동으로 해주는 기능이 추가되었습니다.

 

 

또한, Xcode Inspector에서 서명 상태와 같은 정보를 보여주는 기능도 추가되었어요.

 

 

어떤 인증서로 서명하냐에 따라 Xcode가 검증하는 수준(level?)이 달라집니다.

 

Apple Developer Program 인증
- 인증서가 revoked 되었는지를 포함해서 인증서 유효성 검사
- 여러 개발자가 동일한 이름으로 등록할 수 없도록 제한
- 인증서가 만료될 경우, 새로운 인증서가 동일한 개발자에 의해 발급된 것인지 자동 검증
- 서명이 유효하지 않거나 identity가 변경되었거나 인증서가 만료된 후에 서명했을 경우, Xcode 빌드 시 경고 표시

자체 서명(Self-signed) 인증서
- 앱 개발자가 직접 유효성 및 신뢰성 확인
- 여러 개발자가 동일한 이름으로 등록할 수 있음
- 인증서가 만료될 경우, 새로운 인증서가 동일한 개발자에 의해 발급된 것인지 Apple이 알 수 없기 때문에 추가 검증이 필요함
- identity가 변경되거나 SDK가 수정된 경우, Xcode 빌드 시 경고 표시
[참고] 자체 서명 인증서 생성 방법
여기를 참고해 주세요!

 

 

# App developers

이제부터 앱 개발자 관점에서 얘기해 볼게요.

아래처럼 xcframework를 프로젝트에 추가할 경우, Xcode 15부턴 Inspector에서 서명 정보를 볼 수 있어요.

 

 

이때, xcframework의 개발자 identity는 프로젝트에 저장됩니다.

 

그리고 빌드하는 동안 Xcode는 저장한 개발자 identity를 기반으로 xcframework를 검증합니다.

 

 

만약 아래처럼 동일한 이름의 xcframework를 신뢰할 수 없는 어떤 개발자 identity로 서명된 것으로 교체할 경우 Inspector에서 'Signature changed'라는 문구가 뜹니다.

 

 

그리고 빌드하면 에러가 발생하는데요.

 

xcframework를 교체하기 전의 개발자 identity와 교체된 xcframework의 개발자 identity가 동일하지 않기 때문입니다.

 

 

에러 메시지를 클릭하면 교체한 xcframework를 지울지 혹은 교체할지 선택할 수 있습니다.

 

 

 

# SDK authors

이제부턴 SDK 개발자 관점에서 얘기해 볼게요.

 

SDK를 서명하는 행위는 SDK 개발자의 신원을 확인할 수 있고 SDK가 서명 이후 변경되지 않았음을 보장합니다.

 

Apple 인증서엔 여러 종류가 있는데, 각 인증서 별로 성격이 조금 다릅니다.

 

Apple Developer Program Apple Distribution Certificates SDK 배포 시 사용
  Apple Development Certificates 테스트 버전 배포 시 사용
Enterprise Program iOS Distribution Certificates 기업용 SDK 배포 시 사용
  App Development Certificates 기업용 테스트 버전 배포 시 사용

 

만약 SDK 서명에 사용된 인증서를 수동으로 revoke 시킬 경우, 유효한 인증서로 다시 서명해서 배포해야 합니다.

[참고] xcframework 서명
xcframework를 서명하는 방법은 여기를 참고해 주세요.

 

 

# 참고

https://developer.apple.com/videos/play/wwdc2023/10061

 

Verify app dependencies with digital signatures - WWDC23 - Videos - Apple Developer

Discover how you can help secure your app's dependencies. We'll show you how Xcode can automatically verify any signed XCFrameworks you...

developer.apple.com

 


이번 글은 여기서 마무리.

 

 

 

반응형