
オペレーティングシステムの整合性
Appleは、セキュリティを中核としてオペレーティングシステムソフトウェアを設計しています。この設計には、セキュアブートを可能にするハードウェア信頼ルートと、迅速かつ安全なソフトウェアアップデートプロセスが含まれます。Appleのオペレーティングシステムでは、オペレーティングシステムの実行時の悪用を防ぐため、専用のシリコンベースのハードウェア機能も使用されます。これらの実行時の機能により、オペレーティングシステムの実行時に信頼できるコードの整合性が保護されます。Appleのオペレーティングシステムソフトウェアでは、悪質なアプリ、Web、またはその他のチャネルから実行される攻撃や悪用テクニックによる影響を軽減できます。これらの保護機能は、対応するApple設計のSoCを搭載したデバイスで利用できます。これにはiOS、iPadOS、Appleシリコン搭載Mac上のmacOS、tvOS、visionOS、watchOSが含まれます。
機能 | A10 | A11、S3 | A12-A14 S4-S10 | A15-A18 | M1 | M2-M4 | A19 M5 |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
1 |
2 |
|
| |
|
|
|
|
|
2 |
2 | |
|
|
|
|
|
|
|
1: SPTM(Secure Page Table Monitor)はA15以降およびM2以降のSOCで対応していて、対応するプラットフォームでページ保護レイヤーに代わるものです。
2: ページ保護レイヤー(PPL)とSecure Page Table Monitor(SPTM)は、すべてのプラットフォームで署名済みの信頼できるコードの実行を適用します。ただし、macOSはあらゆるコードを実行するように設計されているため、例外です。ページテーブルの保護を含む他のすべてのセキュリティ特性は、対応するすべてのプラットフォームに組み込まれています。
カーネル整合性保護
オペレーティングシステムのカーネルで初期化が完了すると、カーネルおよびドライバのコード改ざんを防ぐために、カーネル整合性保護(KIP)が有効になります。メモリコントローラは保護された物理メモリ領域を割り当て、iBootはこれを使用してカーネルおよびカーネル拡張機能を読み込みます。起動が完了したあとは、メモリコントローラによって、この保護された物理メモリ領域への書き込みが拒否されます。アプリケーションプロセッサのメモリ管理ユニット(MMU)が構成され、保護メモリ領域外の物理メモリからの特権コードのマッピング、およびカーネルメモリ領域内での物理メモリの書き込み可能なマッピングが禁止されます。
構成変更を防ぐため、KIPの有効化に使用されるハードウェアはブートプロセス完了後にロックされます。
高速許可制限
Apple A11 BionicおよびS3 SoCから、新しいハードウェアプリミティブが導入されました。このプリミティブ、高速許可制限には、スレッドごとに権限を素早く制限するCPUレジスタが採用されています。高速許可制限(APRRレジスタとも呼ばれます)により、サポートされているオペレーティングシステムは、システムコールおよびページテーブルのウォーク/フラッシュのオーバーヘッドを発生させずに実行権限をメモリから削除できます。これらのレジスタは、Webからの攻撃、特に実行時にコンパイル(ジャストインタイムコンパイル)されたコードによる攻撃による影響を軽減するもう1つの手段となります。これは、メモリが読み取りおよび書き込みされているときにメモリを効果的に実行できないためです。
システムコプロセッサ整合性保護
コプロセッサのファームウェアによって、Secure Enclave、イメージセンサープロセッサ、モーションコプロセッサなどの多数の重要なシステムタスクが処理されます。したがって、そのセキュリティはシステム全体のセキュリティを大きく左右します。コプロセッサファームウェアの変更を防ぐために、Appleはシステムコプロセッサ整合性保護(SCIP)と呼ばれるメカニズムを使用しています。
SCIPはKIPと同様に機能します。起動時に、iBootによって、KIP領域とは別の予約済み保護メモリ領域に各コプロセッサのファームウェアが読み込まれます。また、各コプロセッサのメモリユニットが構成され、以下の操作が禁止されます:
保護メモリ領域の該当部分外での実行可能なマッピング
保護メモリ領域の該当部分内での書き込み可能なマッピング
また、ブート時に、Secure EnclaveのSCIPを構成するためにSecure Enclaveオペレーティングシステムが使用されます。SCIPの有効化に使用されるハードウェアはブートプロセス完了後にロックされます。これは構成変更を防ぐためです。
ポインタ認証コード
ポインタ認証コード(PAC)は、メモリ破壊バグの悪用を防ぐために使用されます。システムソフトウェアおよび内蔵アプリは、PACを使用して関数ポインタとリターンアドレス(コードポインタ)の改ざんを防止します。PACでは、5つの128ビットシークレット値を使用してカーネル命令とデータに署名し、ユーザ領域プロセスごとに固有のBキーが生成されます。項目は以下のようにソルト化され、署名されます。
項目 | キー | ソルト |
|---|---|---|
関数のリターンアドレス | IB | ストレージアドレス |
関数ポインタ | IA | 0 |
ブロック呼び出し関数 | IA | ストレージアドレス |
ブロック記述子ポインタ | DA | ストレージアドレス + 0xC0BB |
Objective-Cメソッドキャッシュ | IB | ストレージアドレス + クラス + セレクタ |
Objective-C Isaポインタ | DA | ストレージアドレス + 0x6AE1 |
Objective-C Superポインタ | DA | ストレージアドレス + 0xB5AB |
セレクタ型Objective-C ivar | DB | ストレージアドレス + 0x57C2 |
Objective-C読み取り専用クラスデータポインタ | DA | ストレージアドレス + 0x61F8 |
C++ Vテーブルエントリ | IA | ストレージアドレス + ハッシュ(マングルされたメソッド名) |
C++ Vテーブルポインタ | DA | ストレージアドレス + ハッシュ(マングルされたベースVテーブル名) |
計算済みGotoラベル | IA | ハッシュ(関数名) |
カーネルスレッドの状態 | GA | • |
ユーザスレッドの状態レジスタ | IA | ストレージアドレス |
署名値は、64ビットポインタの最上位にある未使用のパディングビットに格納されます。署名は使用される前に検証され、ポインタアドレスが機能するようにパディングが復元されます。検証に失敗すると、中止されます。この検証によって、ROP(Return-Oriented Programming)攻撃などの多くの攻撃の難易度が高まります。ROP攻撃は、スタックに格納された関数のリターンアドレスを改ざんすることによって既存のコードを不正に実行させようとするものです。
ページ保護レイヤー
iOS、iPadOS、visionOS、watchOSのページ保護レイヤー(PPL)は、コード署名の検証が完了したあと、ユーザ領域のコードが改ざんされるのを防ぐように設計されています。PPLは、KIPおよび高速許可制限を基盤として、ページテーブルへのアクセス権の無効化を管理し、ユーザコードとページテーブルを含む保護されたページをPPLのみが変更できるようにします。このシステムでは、カーネルが侵害された場合でもシステム全体でのコードの整合性が確保されるため、攻撃対象領域が大幅に狭まります。PPLは実行されるすべてのコードが署名されている必要があるシステムにのみ適用されるため、この保護はmacOSでは提供されていません。
Secure Page Table MonitorとTrusted Execution Monitor
iOS、iPadOS、macOS、visionOSのSecure Page Table Monitor(SPTM)とTrusted Execution Monitor(TXM)は、ユーザとカーネルプロセスの両方のページテーブルを改ざんから保護するために連携するよう設計されています。これは、攻撃者がカーネル書き込み権限を持ち、制御フロー保護をバイパスできる場合も含みます。SPTMは、カーネルより高い権限レベルを利用し、権限がより低いTXMを利用してコード実行を統治するポリシーを実際に適用することで、これを実行します。このシステムは、この権限分離と両者の間の信頼の統治によって、TXMの侵害がSPTMバイパスに自動的に変換されないように設計されています。A15以降およびM2以降のSOCでは、SPTM(とTXM)がPPLに置き換わり、攻撃対象領域を小さくして防御しやすく、初期ブート時でもカーネルの信頼性に依存しないようになっています。SPTMは、PPLが利用する高速許可制限を進化させた、新しいシリコンプリミティブに依存し、上記の表に記載されているプロセッサでのみ利用可能です。
メモリ整合性保証
メモリ整合性保証(MIE)は、Appleプラットフォームの包括的なメモリ安全性保護技術で、A19以降およびM5以降のプロセッサで使用できます。MIEは、Appleの安全なメモリアロケータが提供する堅牢な基盤を土台に、同期モードの拡張メモリタグ付け拡張(EMTE)と広範なタグ機密保証ポリシーを組み合わせて構築されています。Appleシリコンに内蔵されているMIEは、ユーザが期待する能力と性能を維持しつつ、カーネルを含む主要な攻撃対象領域に対して、常時オンの比類のないメモリ安全性保護を提供します。詳しくは、Apple Security Researchブログのメモリ整合性保証: Appleデバイスのメモリ安全性に向けた包括的ビジョン(英語)を参照してください。
メモリタグ付け拡張
Armは2019年に、メモリ破損バグを見つける際に役立つハードウェア用ツールとして、メモリタグ付け拡張(MTE)仕様を公開しました。MTEはメモリのタグ付けおよびタグ確認を行うシステムで、すべてのメモリ割り当てにシークレット付きのタグを付けます。ハードウェアは、のちのメモリアクセスリクエストにおいて、正しいシークレットを持つリクエストのみが許可されることを保証します。シークレットが一致しない場合は、アプリがクラッシュし、イベントがログに記録されます。これにより、デベロッパは、メモリ破損バグが発生したときに即座に認識できるようになります。
拡張メモリタグ付け拡張
EMTEは、MTEが能動的な防御を行うことを妨げていた穴を防ぎます。例えば、より安全な同期モードのみに対応します。さらに、領域のタグを知らなければ、タグ付けされたメモリ領域からタグ付けされていないメモリにアクセスできなくなっています。これにより、攻撃者が動的にタグ付けされたメモリの領域外バグを使い、タグ付けされていない割り当てを直接変更してEMTEを回避するのは大幅に難しくなります。
タグ機密性保証
タグ機密性保証は、安全なアロケータの実装を技術的脅威から守り、EMTEタグの機密性を保護します。これには、サイドチャネル攻撃や投機的実行攻撃などからの保護が含まれます。Secure Page Table Monitorは、カーネルアロケータのバッキングストアとタグストレージを保護します。また、カーネルがアプリケーションに代わってメモリにアクセスする場合は、ユーザ空間と同じタグ確認ルールに従うことも保証されます。さらに、タイミング攻撃や投機攻撃によるタグ漏洩も緩和できるように設計されており、Spectre V1に対する保護も組み込まれています。