ハイライト
Xcode 15 に依存関係の署名検証が追加され、サードパーティ XCFramework の署名状態と ID の一貫性を自動検出します。SDK の改ざんや置き換えなどのサプライチェーン攻撃時にビルドをブロックし、App のソフトウェアサプライチェーンを保護します。
主要内容
サプライチェーンのセキュリティリスク
App はいくつのサードパーティ SDK に依存していますか。各 SDK が攻撃の入口になり得ます。
(01:18)サードパーティ SDK は開発を効率化しますが、サプライチェーンのセキュリティリスクも導入します。悪意のある攻撃者が SDK 配布パッケージを改ざんし、App にバックドアを仕込む可能性があります。各 SDK の各バージョンの署名を手動検証するのは時間がかかり、開発者はしばしばスキップします。
Xcode 15 の署名検証で、これが自動かつ簡単になります。
コード署名の仕組み
(02:59)Apple のコード署名は次の手順で SDK の完全性を保護します。
- コンパイル済みバイナリの Code Directory Hash(CDHash)を生成
- 開発者証明書の秘密鍵で CDHash に署名
- 公開鍵を署名と一緒に配布し、誰でも署名者の ID を検証可能に
- セキュアタイムスタンプを付与し、特定時点での署名であることを保証
SDK が改ざんされると署名は無効になります。XCFramework の署名は _CodeSignature ディレクトリに格納され、プライバシーマニフェストを含む framework 内のすべてのファイルを保護します。
Xcode 15 の自動検証
(05:27)Xcode 15 は Inspector に “Signature” ビューを追加し、各 XCFramework の署名状態を表示します。
- Apple Developer Program の ID で署名
- 自己署名証明書で署名
- 未署名
Xcode は XCFramework を初めて導入したときに署名 ID を記録し、以降のビルドで ID が変わっていないか自動検証します。
Apple Developer Program の ID については、証明書の有効性、失効、期限切れを検証し、問題があればビルドを自動ブロックします。自己署名証明書については SHA-256 フィンガープリントを比較し、変化時に警告します。
サプライチェーン攻撃のシミュレーションデモ
(09:06)Session では Backyard Birds サンプル App で完全な攻撃シナリオをデモします。
- 開発者が BirdFeeder という署名済み XCFramework を導入
- Xcode Inspector に署名情報が表示され、ビルド成功
- 攻撃者が「機能が多くパフォーマンスが良い」新版を提供すると主張
- 開発者が改ざん版に置き換え
- ビルド失敗。Xcode が署名 ID の不一致を報告: 期待は Apple Developer Program 証明書、実際は自己署名証明書
Xcode は削除または変更を受け入れるオプションを提供します。不明な場合はキャンセルし、SDK 作者に確認してください。
SDK 作者の署名方法
(12:17)SDK 作者は Apple Developer Program の Apple Distribution 証明書で XCFramework に署名すべきです。Apple が信頼機関として開発者 ID を検証し、証明書期限切れ後も同一開発者の新証明書を Xcode が自動検証できます。
codesign コマンドで署名:
codesign --timestamp -v --sign "Apple Distribution: Truck to Table (UA527FUGW7)" BirdFeeder.xcframework
キーポイント:
--timestamp: Apple 認証のセキュアタイムスタンプを含む--sign: 署名 ID を指定(Apple Developer Program 証明書)- 署名はプライバシーマニフェストを含む XCFramework 内のすべてのファイルを保護
Apple Developer Program 会員でない場合は自己署名証明書が使えますが、SDK 利用者向けに証明書フィンガープリントを公開してください。
詳細
Xcode で署名状態を確認
(09:41)Xcode 15 のプロジェクトナビゲーターで XCFramework を選択すると、Inspector パネルに Signature セクションが表示されます。
- Signed by: 署名者 ID とチーム情報
- Certificate type: Apple Developer Program / Self-signed / Unsigned
- Status: Valid / Invalid / Changed
署名済み XCFramework を初めて追加すると、Xcode が署名 ID をプロジェクトに自動記録します。以降の各ビルドで次を検証します。
- 署名が有効か
- ID が記録と一致するか
- 証明書が期限切れまたは失効していないか
- コンテンツが改ざんされていないか
署名検証警告の対処
Xcode が署名の問題を検出するとビルドエラーを表示します。よくある警告シナリオ:
| シナリオ | Xcode の動作 | 推奨操作 |
|---|---|---|
| ID が Apple Developer から Self-signed に変化 | ビルド失敗、ID 比較を表示 | ビルドをキャンセルし SDK 作者に確認 |
| 同一 Apple Developer の新証明書 | 自動検証で通過 | 操作不要 |
| 自己署名証明書のフィンガープリント変化 | ビルド失敗 | 信頼できる経路で変更の正当性を確認 |
| Apple による証明書失効 | ビルド失敗 | XCFramework を削除し、作者に新版を依頼 |
(11:08)警告時、Xcode は2つのオプションを提供: ゴミ箱に移動、または変更を受け入れ。公式経路で変更の正当性を確認した場合のみ受け入れてください。
既存 SDK への署名の追補
(15:38)既にリリース済みの SDK バージョンに再ビルドなしで署名を追補できます。SDK 作者にとって迅速なセキュリティ対策の道です。
# リリース済み XCFramework に署名を追補
codesign --timestamp -v --sign "Apple Distribution: Your Team (TEAM_ID)" YourSDK.xcframework
# 署名を検証
codesign -vv --verify YourSDK.xcframework
ビルドスクリプトに署名を組み込み、各リリースを自動署名:
#!/bin/bash
# build_and_sign.sh
FRAMEWORK_NAME="YourSDK.xcframework"
IDENTITY="Apple Distribution: Your Team (TEAM_ID)"
# XCFramework をビルド
xcodebuild -create-xcframework \
-framework build/ios/YourSDK.framework \
-framework build/ios_simulator/YourSDK.framework \
-output $FRAMEWORK_NAME
# 署名
codesign --timestamp -v --sign "$IDENTITY" $FRAMEWORK_NAME
echo "Signed $FRAMEWORK_NAME successfully"
キーポイント:
- ビルド直後に署名し、最終成果物全体をカバー
--timestampでタイムスタンプを含め、証明書期限切れ後も署名時点の有効性を検証可能- CI/CD にスクリプトを組み込み、手動漏れを防ぐ
重要ポイント
1. すべてのサードパーティ依存関係で署名検証を有効化
- 何を作るか: プロジェクト内の各 XCFramework の署名状態を確認し、署名済み版を優先
- 価値がある理由: Xcode 15 が署名を自動検証。ゼロコストでサプライチェーンセキュリティ
- 始め方: Xcode Inspector の Signature セクションで各 XCFramework を確認。未署名は作者に署名版を依頼
2. 自社 SDK に署名を追加
- 何を作るか: 社内またはオープンソース SDK に自動署名フローを設定
- 価値がある理由: SDK 利用者が Xcode の自動保護を得られ、信頼を構築
- 始め方: ビルドスクリプトに
codesignを追加し、Apple Distribution 証明書を使用
3. SDK 導入審査プロセスを確立
- 何を作るか: 新 SDK 導入時に署名 ID を記録し、変更承認の仕組みを構築
- 価値がある理由: Xcode は署名 ID 変化時に警告するが、変化が想定内かは自分で把握する必要がある
- 始め方: SDK 署名 ID 一覧を維持し、SDK 更新時に照合
4. CI に署名検証を統合
- 何を作るか: CI がローカルと同じ Xcode バージョンを使用し、CI でも署名検証が動作するようにする
- 価値がある理由: CI 環境での改ざん依存関係の導入を防止
- 始め方: CI スクリプトでビルド前に
codesign --verifyで重要な依存関係をチェック
5. SDK 作者に署名を推進
- 何を作るか: 使用している未署名 SDK の作者に連絡し、署名追加を提案
- 価値がある理由: 署名検証エコシステムには上下游の参加が必要。推進するたびにサプライチェーン全体のセキュリティが向上
- 始め方: SDK の GitHub Issue やサポートチャネルで署名リクエストを提出し、本 Session と Apple ドキュメントを引用
関連セッション
- Get started with privacy manifests — プライバシーマニフェストがデータ収集の正確な宣言にどう役立つか
- What’s new in privacy — iOS 17 と macOS Sonoma の最新プライバシー機能
- What’s new in Xcode 15 — Xcode 15 の新機能
コメント
GitHub Issues · utterances