ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
電子署名によるアプリの依存関係の検証
アプリの依存関係の保護に役立つ方法をご紹介します。Xcodeがプロジェクトに含まれ署名されたXCFrameworkを自動的に検証する方法についてご説明します。コード署名の仕組み、電子署名がソフトウェアサプライチェーンの保護にいかに役立つか、SDKデベロッパが自身のXCFrameworkに署名して、アプリを保護する方法について学んでください。
関連する章
- 2:18 - Dependency signatures
- 9:00 - App developers
- 12:11 - SDK authors
リソース
関連ビデオ
WWDC23
-
ダウンロード
♪ ♪
プライバシーエンジニアリングの Kayです 本日は 依存関係の完全性を 自動的に確認できる Xcodeの新しいプライバシー およびセキュリティ機能をご紹介します Appleでは プライバシーは 当社の製品の中核であるとともに 皆さんの開発プロセスにおいて 中核であるべきだと信じています Xcodeの依存関係の署名検証は アプリのデベロッパが 自身のアプリを保護し 依存関係の作成者が配信する SDKを保護するのに役立ちます
アプリはさまざまなSDKを 使用して開発されます たとえばiOS SDKがそうです Appleが作成したものもあれば アプリのデベロッパが自身で開発し 自身のアプリ全体で使用することもあります デベロッパが別のソースから 取得する場合もあります これらはアプリのサプライチェーンを形成し Swiftソースファイルやその他の依存関係の フレームワークを含むこともできます サードパーティSDKを使用すると アプリ開発が非常に簡単になり さまざまな機能を提供できるようになります しかしこれにはリスクが伴います サプライチェーンセキュリティは これらのリスクを低減するプロセスです 皆さんには アプリに含む 依存関係に対し 選択的になることでユーザーを保護し 悪意を持って変更されたバージョンを うっかりと使用しないための責任があります 自身の開発の一環として他のSDKを含む SDK作者も同じ責任を負います これらのリスクを低減するために 利用可能なプロセスやツールは手間がかかり また手動でやるには複雑である 場合があります
依存関係の署名検証は このタスクを容易にし自動化する Xcodeの新しい機能です サプライチェーンセキュリティが 何かを理解したところで デベロッパを保護し この負担を軽減する 電子署名の役割について説明します まずAppleのコード署名技術の 仕組みの概要を説明し Xcodeが依存関係の署名を 検証する方法について 説明します 次に依存関係が不正侵入を受けないように アプリのデベロッパが この機能を使用できる方法を説明します 最後にエコシステムの セキュリティを改善するために SDK作者ができることについて説明します Appleのコード署名技術の仕組みから 始めましょう
アプリのデベロッパが使用できる SDKを開発する場合 SDKクライアントへの配信中に 誰かがそれを変更したり改ざんしたり するのを防止する必要があります コード署名は最終的に コンパイルされたバイナリと Info.plist またはフレームワークの プライバシーマニフェスト または特定の配信タイプ デベロッパIDが付いたソースコードなど 関連メタデータを 暗号学的にリンクするメカニズムです
大まかに説明すると コード署名は まず CDHashとしても知られる Code Directoryハッシュ値を生成します
次にデベロッパIDを使用して このハッシュ値に署名します このIDはデベロッパ証明書により 表現されます これはコード署名に使用される プライベートキーと 署名の一部として配信される パブリックキーから構成されます この署名はIDに結び付けることができます 次にこのIDはハッシュ値の署名に使用され 署名が特定の時間に生成されたことを 検証するのに使用されるタイムスタンプと 組み合わせることができます これにより 誰かがSDKを改ざんした場合 署名は無効になります また アプリのデベロッパは 署名に組み込まれた証明書を使用して 自身が署名したことを 確認することもできます
アプリで使用する一般的な依存関係は XCFrameworkです XCFrameworksでは 署名は _CodeSignatureディレクトリ内に 存在します コード署名は WWDC23の動画 「Get started with privacy manifests」で 言及された プライバシーマニフェストを含む 最終のXCFramework内に存在する すべてのファイルの完全性を保護します
アプリ内に含んだすべてのXCFrameworkの すべてのバージョンを手動で 検証することは可能ですが これはセキュリティの利点を得るための 時間と手間がかかるプロセスとなります 署名検証はXcodeの新機能で アプリの依存関係の検証を 自動的に行い 問題が検知された場合は 通知を送信して アプリの完全性を保護します Xcode 15に追加された新しいツールは プロジェクトに含んだXCFrameworkの 署名に使用されたIDを自動的に確認します
XcodeのInspectorには 新しいセクションが表示され アプリ内に含まれたXCFrameworkの 署名のステータスが 表示されるようになりました このセクションには作者のIDなど 署名に関する情報が含まれます 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 Developer Programの 証明書がAppleにより取り消された場合にも アラートを発信します これはAppleがデベロッパのアカウントが 不正なものだと判断した場合におこります このようなアラートは稀ですが この問題が解決されるまで アプリが構築されないことを 確実にします これが起こった場合 XcodeはXCFrameworkを プロジェクトから削除するよう通知します 自己署名のIDに関しては Xcodeは引き続き 証明書のSHA-256 fingerprintを 以前にプロジェクトに 追加されたものと比較します IDが変更された場合や 依存関係のコンテンツが変更された場合は アラートが発信されます その場合 XCFramework作成者に連絡し fingerprintが以前に使用されたものと 一致することを確認してください またはXCFrameworkの作成者は この情報を公開できます XCFrameworksの電子署名の 仕組みについては以上です 次はアプリのデベロッパが この機能をXcodeで使用する 方法をお見せします それには「Backyard Birds」の サンプルアプリを使用します これは複数の裏庭から デジタル野鳥観察体験ができるアプリで 鳥に餌や水を与えることができ 訪れる鳥を観察することができます BirdFeederと呼ばれる XCFrameworkを使用して 餌と水の充填プロセスを自動化します BirdFeeder XCFrameworkの作者は 最新のリリースに署名しています ここでBirdFeederを 私のプロジェクトに追加しました XCFrameworksでは Xcode 15には 「署名」ビューが表示されます これには証明書の署名に関する情報と チームの詳細が表示されます XCFrameworkデベロッパのIDは 最初に表示されたときに プロジェクトに保存されます ビルド中 Xcodeは 使用されたIDを検証して プロジェクトの期待されるIDに一致する BirdFeeder XCFrameworkに署名します 正常にビルドされました サプライチェーン攻撃を シミュレートするために 誰かから パフォーマンスが向上する さまざまな機能が追加された アップデートされた BirdFeeder XCFrameworkを 受け取ったことにします これは完全に信用できないウェブサイトから XCFrameworkをダウンロードした場合に 起こる可能性があります こちらでは以前のバージョンを 更新されたバージョンに置き換えました
アプリをビルドする際 Xcodeはアプリ内のすべての XCFrameworksの署名を検証します ビルドは失敗し BirdFeederデベロッパのIDは このプロジェクトで以前に記録された IDと一致しないと示されています エラーを選択すると デベロッパのIDが 変更されたことを説明する アラートが表示され 期待されるIDと新しいバージョンで 提示されたIDの比較が表示されます この場合 期待される証明書は Apple Developer Programの証明書ですが プロジェクトでは自己署名の証明書が 使用されています これはXCFrameworkが不正に使用されたか 変更が合法であることを示します たとえば XCFrameworkの所有権が 別のデベロッパに譲渡された 可能性があります 確かでない場合はいつでもキャンセルでき 変更が正当なものであるか 調査することができます Xcodeはこの変更が起こった場合に 自動的に通知することで 皆さんや皆さんのアプリを保護します
この例では 変更は期待されていなかったため この新しいバージョンを Xcodeのごみ箱に移動します ただし 変更がただしいもので あることが確かである場合 たとえば認証済みの 公開チャネルを通じて デベロッパから通知を受けた場合は その変更を承認できます 最後にSDK作者にとって この機能が どういう役割を果たすか説明します SDK作者がSDKを暗号学的に 署名することは重要です なぜならアプリのデベロッパは IDを確認できるようになり 署名後にコードが変更または 改ざんされていないことが 保証されるからです これらのプロパティは 信頼性が高く安全に配信できる SDKを構築するために非常に重要です 先述のように使用できるIDは Apple Developer Programと 自己署名の2種類があります
Apple Developer Programのメンバーは このプログラムの一部として 含まれる証明書を使用して SDKクライアントの信頼を確保しましょう
SDKを公開する場合は Apple Distribution証明書を 使用してください テスト版を配信する場合は Apple Development証明書を使用します Enterprise Programのメンバーは iOS Distribution証明書 またはApp Development証明書を 使用してください Appleが証明書を発行するということは 皆さんがApple Developer Programの 正当なメンバーで 証明書を取得するために必要な すべての要件を満たしていることを Appleが保証するということです これはに皆さんの身元を検証し プライバシーとセキュリティに関する Appleのポリシーとガイダンスに 遵守することが含まれています SDKの署名に使用した証明書を 手動で取り消した場合 デベロッパがアプリのビルドを試みた際に Xcodeは署名を検証できなくなるため 有効な証明書を使用して署名された アップデートされたバージョンを リリースする必要があります Apple Developer Programの 証明書を使用して署名されたSDKには 基準となる信頼性があり SDKが改ざんされていないことを 保証します さらに Appleは信頼できる機関であるため 証明書の検証は 新しい証明書が生成されたときに 自動的に行われます この動画の始めでは コード署名の仕組みと デベロッパのIDを使用して SDK内に署名を含む方法を 説明しました それではコード署名ツールを使って これを行う方法を説明します
こちらのコマンドと Apple Developer Program IDを 使用するとXCFrameworksに 署名できます Appleが保証する安全な タイムスタンプを含む 署名を確実にする タイムスタンプフラグが 含まれています しかしApple Developer Programの メンバーでない場合は 自己署名の証明書を生成して コード署名コマンドでそれを使用できます この証明書の指紋を SDKクライアントと共有するのは 皆さんの責任となり 皆さんが署名したXCFrameworkを 検証することができます アプリのSDKを含むデベロッパは Xcodeに含まれている新機能を使用して XCFrameworkが皆さんによって 署名されたことを確認できます 配信するSDKに常に署名する場合は Xcodeのこの新機能はSDKクライアントが 自身のサプライチェーンに対して 自信を持つのに役立ちます これを行うのは簡単です 公開済みのフレームワークのバージョンで すぐに開始することができ 新しいビルドは必要ありません 現在Apple Developer Programの メンバーでなくても 自己署名の証明書を使用して 行うことができます ビルドスクリプトの コード署名コマンドを含むことで XCFrameworksのすべての新バージョンで これを行うことができるので 心配する必要がなくなります Xcode 15はアプリデベロッパ向けに アプリの基礎的なSDKの 完全性と安全性を自動的に確保します すべてのSDK署名が検証されることは 責任あるアプリ開発と ユーザーの保護における 重要な側面です サプライチェーンのデベロッパに 自身が公開するSDKに署名することを 奨励しましょう SDK作者は SDKの署名を始めて 安全性と正当性を確保しましょう コードに署名することで SDKクライアントの信頼を確立し セキュリティとプライバシーを 真剣に捉えていることを示すことができます
よいアプリ開発を! Kayでした 以上です ♪ ♪
-
-
14:37 - Signing an XCFramework
codesign --timestamp -v --sign "Apple Distribution: Truck to Table (UA527FUGW7)" BirdFeeder.xcframework
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。