iOSおよびiPadOSのAppコード署名プロセス
iOSおよびiPadOSでは、必須のコード署名、厳密なデベロッパによるサインインなどによってAppのセキュリティが提供されています。
必須のコード署名
iOSまたはiPadOSのカーネルが起動すると、どのユーザプロセスとAppの実行を許可するかをカーネルが制御します。すべてのAppが既知の承認済みのソースから提供されており、改ざんされていないことを保証するため、iOSおよびiPadOSでは、すべての実行コードに対して、Apple発行の証明書を使用した署名を要求しています。「メール」やSafariといったデバイスに付属するAppは、Appleによって署名されています。他社製Appも、Apple発行の証明書を使用して検証および署名される必要があります。こうしたコード署名を必須とすることで、信頼チェーンの概念をオペレーティングシステムのみならずAppにまで適用することができ、他社製Appによって未署名のコードリソースが読み込まれたり、自己書き換えコードが使用されたりするのを防ぐことができます。
デベロッパがAppに署名する方法
デベロッパは(Apple Developer Programを通じた)証明書の検証を通じてAppに署名することができます。フレームワークをAppに埋め込み、そのコードを(チーム識別文字列を通じて)Appleが発行した証明書で検証することができます。
証明書の検証: Appを開発してiOSまたはiPadOSデバイスにインストールするには、デベロッパはAppleに登録し、Apple Developer Programに参加する必要があります。個人または企業のいずれの場合でも、Appleがデベロッパの身元確認を行ったあとに証明書が発行されます。この証明書によって、デベロッパはAppに署名し、AppをApp Storeに提出して配信できるようになります。したがって、App StoreにあるすべてのAppは、身元を確認できる個人または組織によって提出されたものであり、これは悪意のあるApp開発に対する抑止力にもなります。また、Appleは、Appが通常説明の通りに動作し、明らかなバグや何らかの目立つ問題が含まれていないことを確認するための審査も行います。前述のセキュリティ技術に加え、このような選別プロセスを実施することで、ユーザはAppの品質について懸念することなく安心して購入できるようになります。
コード署名の検証: iOSおよびiPadOSでは、デベロッパがApp内にフレームワークを埋め込み、そのフレームワークをApp自体またはAppに埋め込まれた機能拡張で使用することが可能です。システムやその他のAppがそのアドレス空間内に第三者のコードを読み込むことを防止するため、プロセスがリンクするすべてのダイナミックライブラリについて、起動時にコード署名の検証が実行されます。この検証は、Apple発行の証明書から抽出されるチーム識別情報(チームID)を使って実施されます。チーム識別情報は、英数字10文字(例: 1A2B3C4D5F)で構成されます。プログラムは、システムに付属のプラットフォームライブラリや、コード署名内にメインの実行可能ファイルと同じチーム識別情報を持つライブラリにリンクできます。システムの一部として提供される実行可能ファイルにはチーム識別情報が含まれていないため、これらの実行可能ファイルはシステム自体に付属のライブラリにのみリンクできます。
独自の社内Appの検証
適格な企業は組織内で使用するための独自の社内Appを開発して、従業員に配付することもできます。企業や組織はApple Developer Enterprise Program(ADEP)に申請できます。詳しい情報や資格の要件を確認するには、Apple Developer Enterprise ProgramのWebサイトを参照してください。組織がADEPに登録されると、承認したデバイスで独自の社内Appの実行を許可するプロビジョニングプロファイルを登録して取得できます。
ユーザがこれらのAppを実行するには、プロビジョニングプロファイルをインストールする必要があります。このため、組織が意図したユーザしか、組織のAppをiOSおよびiPadOSデバイスに読み込めません。モバイルデバイス管理(MDM)でインストールされたAppは、組織とデバイス間の信頼関係がすでに確立されているため、暗黙的に信頼されます。それ以外のAppについては、ユーザが「設定」でAppのプロビジョニングプロファイルを承認する必要があります。組織は、不明なデベロッパのAppをユーザが承認しないように制限することもできます。どの独自の社内Appでも、初回起動時に、Appの実行を許可するというAppleからの許諾をデバイスで受信する必要があります。