스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
디지털 서명으로 앱 종속성 검증하기
앱 종속성을 보호하는 방법을 알아보세요. Xcode가 여러분이 프로젝트에 포함한 서명된 XCFramework를 어떻게 자동으로 검증하는지 보여드리겠습니다. 코드 서명의 작동 방식과 소프트웨어 공급망 보호를 돕는 코드 서명의 이점 및 SDK 개발자가 앱을 보호하기 위해 어떻게 XCFramework에 서명하는지 배울 수 있습니다.
챕터
- 2:18 - Dependency signatures
- 9:00 - App developers
- 12:11 - SDK authors
리소스
관련 비디오
WWDC23
-
다운로드
♪ ♪
안녕하세요, 프라이버시 엔지니어링 소속 케이입니다 오늘 저는 자동으로 종속성의 무결성을 검증하는 걸 도울 Xcode의 신규 개인정보 보호 및 보안 기능을 소개하겠습니다 Apple에서는 개인정보 보호가 저희 제품의 핵심 정신인 만큼 모든 개발 과정에서도 중심이 돼야 한다고 믿습니다 Xcode 내에서의 종속성 서명 검증으로 앱 개발자들이 자기 제품을 보호하고 종속성작성자들이 자신이 배포하는 SDK를 보호하는 걸 돕습니다
앱은 다양한 SDK를 이용해 개발됩니다 iOS SDK를 예로 들어 보죠 그중 일부는 Apple이 만들고 어떤 건 앱 개발자들이 자신의 앱에 이용하려고 만들며 일부는 앱 개발자들이 다른 소스에서 얻습니다 이 다양한 SDK는 앱의 공급망을 형성하며 프레임워크, Swift 소스 파일 및 기타 종속성을 포함합니다 타사 SDK를 쓰면 앱 개발이 상당히 쉬워질 수 있고 확장된 기능을 제공할 수 있습니다 하지만 이는 위험 또한 불러옵니다 공급망 보안이란 이러한 위험을 줄이는 과정인데요 여러분은 어떤 종속성을 포함할지 신중히 선별하여 사용자를 보호하고 실수로 악의적으로 수정된 버전을 쓰지 않도록 할 책임이 있습니다 이 책임은 또한 개발 과정의 일부로서 다른 SDK를 포함하는 SDK 작성자에게도 해당합니다 이 위험을 낮추는 데 쓸 수 있는 프로세스와 도구는 수동으로 작업하기엔 부담스럽거나 복잡할 수 있죠
종속성 서명 검증은 새로운 Xcode 기능으로서 이를 손쉽고 자동적인 작업으로 만들 수 있습니다 이제 공급망 보안이 무엇인지 보았으니 개발자를 보호하고 이 부담을 덜기 위해 디지털 서명이 하는 역할에 관해 말씀드릴게요 제일 먼저, Apple의 코드 서명 기술이 작동하는 방식과 Xcode가 현재 종속성 서명을 검증할 때 하는 일을 설명하겠습니다 이후에는 앱 개발자가 어떻게 이 기능을 이용해 종속성의 손상을 막을 수 있는지 얘기하죠 마지막으로는 SDK 작성자가 생태계 보안을 개선하기 위해 할 수 있는 일을 논의하겠습니다 먼저 Apple의 코드 서명 기술 작동 방식부터 시작하죠
여러분이 앱 개발자들이 쓰는 SDK를 개발할 때는 SDK 클라이언트에 배포하는 도중에 누군가 이를 바꾸거나 함부로 건드리지 못하게 하고 싶을 겁니다 코드 서명은 최종 컴파일된 바이너리와 관련 메타데이터를 암호화하여 개발자 ID에 연결하는 메커니즘입니다 Info.plist나 프레임워크를 위한 개인정보 보호 목록이 그 예이며 특정 배포 유형의 경우 소스 코드 자체가 이에 속하죠
고급 수준에서 코드 서명은 CDHash라고도 알려진 컴파일된 바이너리의 코드 디렉토리 해시를 먼저 생성하는 것으로 작동합니다
이 해시에 서명하기 위해 개발자 ID를 사용하며 개발자 인증서가 이 ID를 대표합니다 이 인증서는 코드 서명에 쓰이는 프라이빗 키와 서명의 일부로 배포되는 공개 키로 구성됩니다 이 서명은 여러분의 ID에 다시 연결될 수 있죠 이 ID는 그 후 해시에 서명할 때 사용되고 서명이 특정 시각에 생성된 것을 검증하는 보안 타임스탬프와 결합할 수 있습니다 이 덕분에 누구라도 SDK를 조작하면 서명이 유효성을 잃게 되며 또한 서명에 삽입된 인증서로 서명한 사람이 여러분이라는 것을 앱 개발자가 확인할 수 있게 됩니다
여러분이 앱에서 쓸 수 있는 흔한 종속성 유형은 XCFramework인데요 XCFramework가 있으면 서명이 _CodeSignature 디렉토리 안에 있게 됩니다 코드 서명은 '개인정보 보호 목록 시작하기'라는 WWDC23 영상에 언급된 개인정보 보호 목록 파일을 비롯한 최종 XCFramework 내부 모든 파일의 무결성을 보호합니다
앱 안에 포함하는 모든 XCFramework의 버전 전부에 대해 이 코드 서명을 다 직접 확인할 수도 있겠지만 이는 시간이 오래 걸리는 과정일뿐더러 보안 혜택을 받기 위한 부담을 지우게 됩니다 서명 검증은 Xcode의 새 기능으로 앱의 종속성 검증을 자동으로 처리하며 문제가 감지될 때 경고를 띄워 공급망의 무결성을 보호합니다 Xcode 15은 이제 프로젝트에 포함하는 모든 XCFramework에 서명하는 데에 쓰인 ID를 자동으로 추적해 주는 도구를 갖추었습니다
Xcode는 이제 인스펙터 내의 새로운 섹션에서 여러분의 앱에 포함하는 XCFramework의 서명 상태를 보여줍니다 이 섹션은 작성자의 신원 정보처럼 서명에 대한 정보를 포함하죠 이것은 XCFramework가 Apple Developer Program ID나 자체 서명 인증서로 서명됐는지 또는 아예 서명이 안 됐는지 보여줄 겁니다 덧붙여 Xcode는 여러분이 XCFramework를 처음으로 사용할 때 ID를 기록하고 이후의 빌드에서 이것이 바뀌지 않았는지 검증할 겁니다 서로 다른 개발자 ID에 대해서 Xcode는 특정 XCFramework에 사용된 개발자 ID에 쌓인 신뢰도에 따라 다양한 층위의 기능을 제공합니다 Apple Developer Program ID의 경우 Apple은 사용된 인증서가 취소되었는지 등의 유효성을 확인할 수 있고 또 여러 개발자가 동일한 이름으로 등록하지 못하게 합니다 만일 사용된 것이 자체 서명 인증서라면 앱 개발자는 이것의 유효성과 진위성을 종속성 작성자와 직접 확인해야 합니다
XCFramework 작성자의 서명 인증서가 만료되면 Xcode는 Apple Developer Program ID의 새 인증서가 같은 개발자 소유라는 것을 자동으로 검증할 수 있습니다 자체 서명 인증서의 경우에는 이러한 변화가 타당하다는 걸 개발자가 직접 검증해야만 하는데요 이는 Apple 같은 신뢰 기관이 발급한 증명이 없기 때문입니다 종속성이 Apple Developer Program ID로 서명되면 Xcode는 이를 빌드에서 검증하고 서명이 유효하지 않거나 ID가 바뀐 경우 또는 XCFramework가 인증서 만료 후 서명된 경우에 경고를 띄울 겁니다 Xcode는 이외에도 Apple에서 Apple Developer Program 인증서를 취소했을 때도 경고를 띄울 겁니다 Apple에서 개발자 계정이 악성이라고 판단할 때 이런 일이 생길 수 있습니다 이러한 경고는 그 수가 드물 것이고 또한 문제를 해결할 때까지 자동으로 앱 제작을 막을 겁니다 실제로 이런 일이 일어날 때는 Xcode에서 프로젝트로부터 XCFramework를 제거하도록 합니다 자체 서명 ID의 경우 Xcode는 이때에도 인증서의 SHA-256 지문을 이전에 프로젝트에 추가된 것과 비교할 겁니다 이러면 ID가 바뀌었거나 종속성 내용이 수정됐을 경우 경고가 보이는데요 XCFramework 작성자에게 문의해야 할 수도 있습니다 인증서의 지문이 이전에 사용한 것과 일치하는지 확인하거나 XCFramework 작성자가 이 정보를 게시할 수 있도록 말이죠 지금까지 XCFramework에서의 디지털 서명 작동법을 보았습니다 다음으로는 앱 개발자가 이 기능을 Xcode에서 쓰는 법을 알려드릴게요 시연을 위해서 Backyard Birds 샘플 앱을 사용하겠습니다 이 앱은 디지털로 새를 관찰하는 경험을 제공하는데요 다양한 뒷마당에 새 모이와 물을 놓고 방문하는 새를 관찰할 수 있습니다 저는 BirdFeeder라는 XCFramework를 이용해 새 모이와 물을 채우는 과정을 자동화하려고 합니다 BirdFeeder XCFramework의 작성자가 가장 최신 릴리즈에 서명했네요 여기서 제 프로젝트에 BirdFeeder를 추가했습니다 XCFramework의 경우 Xcode 15은 인스펙터에 '서명' 뷰가 있죠 이 뷰는 팀의 세부 사항이 나온 인증서 서명 정보를 보여줍니다 XCFramework 개발자 ID는 이것이 처음으로 나타나는 순간에 프로젝트에 저장될 겁니다 빌드 도중에 Xcode는 BirdFeeder XCFramework가 프로젝트 속 예상 ID와 일치한다고 서명하는 데에 쓰인 ID를 검증하죠 빌드가 성공했습니다 공급망 공격을 시뮬레이션하기 위해 누군가가 제게 BirdFeeder XCFramework의 신규 버전을 주었으며 이들이 새로운 기능을 잔뜩 추가하고 더 좋은 성능을 부여했다고 가정해 보죠 완전히 신뢰할 수 없는 웹 사이트에서 XCFramework를 다운받을 경우에도 이런 일이 일어날 수 있습니다 이제 이전에 있던 버전을 업데이트된 것으로 교체했습니다
앱을 만들 때 Xcode는 앱 내부에 있는 모든 XCFramework의 서명을 검증합니다 빌드가 실패하고 BirdFeeder 개발자의 ID가 이전에 프로젝트에 기록된 것과 같지 않다는 메시지가 나옵니다 오류를 선택하면 개발자의 ID가 바뀐 것을 설명하고 예상 ID와 신규 버전 속 현재 ID를 비교하는 경고가 나오죠 이 경우에는 예상 인증서가 Apple Developer Program 인증서였지만 현재 프로젝트 내부의 인증서는 자체 서명 인증서라고 하는군요 이 말은 XCFramework가 함부로 변형되었거나 또는 타당한 변화가 있었다는 뜻입니다 예를 들어 XCFramework의 소유권을 다른 개발자에게 이전했을 수도 있죠 만일 확신이 없다면 취소하는 것이 더 안전합니다 그러면 타당한 변화였는지 조사할 시간이 생기니까요 Xcode는 이러한 변화가 있을 때 자동 알림이 가게 하여 여러분과 앱을 보호합니다
이 경우, 예상치 못한 변화가 일어났기 때문에 이 새로운 버전은 Xcode의 휴지통에 버릴 겁니다 하지만 만일 변화가 타당하다는 걸 알고 있다면 예를 들어 개발자가 검증된 공개 채널을 통해 이 내용을 전달하는 일이 있었다면 변화를 수락해도 되겠죠 마지막 내용은 이 기능이 SDK 작성자에게 미치는 영향입니다 SDK 작성자는 암호화하여 SDK 서명을 해야 하는데 그러면 앱 개발자가 ID를 확인할 수 있고 서명 후에 코드가 변형되거나 위조되지 않았다는 걸 보증하기 때문입니다 이 두 가지 특성은 신뢰를 쌓고 안전하게 SDK를 배포하는 데 극히 중요합니다 앞서 얘기했듯이 쓸 수 있는 ID는 두 가지로 Apple Developer Program과 자체 서명이 있죠
Apple Developer Program 회원들은 SDK 클라이언트의 신뢰성을 위해 이 프로그램의 일부로서 포함된 인증서를 사용해야 합니다
여러분의 SDK를 발행할 경우 Apple Distribution 인증서를 쓰고 테스트 버전을 배포할 경우 Apple Development 인증서를 써야 합니다 Enterprise Program 회원들은 iOS 배포 프로그램이나 App Development 인증서를 써야 합니다 Apple은 인증서를 발행함으로써 여러분이 Apple Developer Program의 합법적 회원이라는 것과 인증서를 얻기 위해 필요한 요구 조건을 전부 충족했음을 증명합니다 이 조건에는 여러분의 신원 확인과 개인정보 보호 및 보안과 관련된 Apple의 정책 및 지침 준수가 포함됩니다 만일 SDK에 서명하는 데 쓰는 인증서를 수동으로 취소한다면 유효한 인증서를 써서 서명한 업데이트 버전을 출시해야 할 텐데요 개발자가 앱을 만들려고 할 때 Xcode가 더 이상 서명을 확인할 수 없기 때문입니다 Apple Developer Program 인증서로 서명된 SDK는 기본적인 신뢰도를 확보하고 있으며 SDK가 위조되지 않았음을 보증합니다 게다가 Apple은 신뢰할 수 있는 기관이기 때문에 새 인증서가 생성될 때 인증서 확인이 자동으로 이루어집니다 이 영상의 초반에 저는 코드 서명의 작동법과 개발자 ID를 이용해 SDK 내에 서명을 포함하는 법에 관해 얘기했습니다 지금부터는 코드사인 도구와
Apple Developer Program ID를 이용해 이를 실행하는 법을 살펴보죠 타임스탬프 플래그의 포함 목적은 Apple이 보증하는 보안 타임스탬프가 서명에 포함된 걸 확인하기 위해서입니다 하지만 만일 Apple Developer Program 회원이 아니라면 자체 서명 인증서를 생성하여 코드사인 커맨드와 함께 쓸 수 있습니다 여러분은 SDK 클라이언트와 이 인증서의 지문을 공유할 책임이 있고 그래야 XCFramework를 여러분이 서명했다는 걸 증명할 수 있습니다 여러분의 SDK를 자기 앱에 포함하고 있는 개발자는 Xcode에 포함된 새 기능을 이용해 여러분이 XCFramework에 서명했다는 걸 확인할 수 있을 겁니다 여러분이 배포하는 SDK에 언제나 서명한다면 Xcode의 이 새 기능으로 SDK 클라이언트가 공급망에 더 신뢰를 가질 수 있게 될 겁니다 간단히 이렇게 할 수 있는데요 신규 빌드를 출시할 필요 없이 이미 게시한 프레임워크 버전을 가지고 곧바로 시작할 수 있습니다 현재 Apple Developer Program의 회원이 아니라면 자체 서명 인증서를 이용해도 가능합니다 그 후 빌드 스크립트에 코드사인 커맨드를 포함하여 여러분의 모든 XCFramework 버전에 이를 적용할 수 있고 더는 걱정하지 않아도 됩니다 앱 개발자의 경우 Xcode 15은 앱의 기반을 이루는 SDK의 무결성과 보안을 자동으로 확보하게 합니다 모든 SDK 서명을 확실히 검증하는 것은 책임 있는 앱 개발과 사용자 보호를 위해 중요한 일입니다 공급망에 있는 개발자들이 자신이 발행하는 SDK에 서명하도록 장려하여 이에 기여할 수 있습니다 SDK 작성자분들은 보안과 진위성을 보장할 수 있도록 SDK에 서명을 시작하세요 코드에 서명함으로써 SDK 클라이언트에게 여러분이 보안과 개인정보 보호를 중시한다는 것을 보여주어 신뢰를 높일 수 있습니다
즐거운 앱 개발 시간 보내세요 끝맺음 말에 서명하며 케이가 인사드립니다 ♪ ♪
-
-
14:37 - Signing an XCFramework
codesign --timestamp -v --sign "Apple Distribution: Truck to Table (UA527FUGW7)" BirdFeeder.xcframework
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.