iOS 18.1に搭載された「非アクティブ時再起動」機能の仕組みをリバースエンジニアリングで解明


2024年10月28日に正式リリースされたiOS 18.1で、ロック状態にあるiPhoneが一定時間経過すると自動的に再起動する「非アクティブ時再起動」機能が搭載されました。ホワイトハッカーでマルウェアアーティストを名乗るJiska氏が、この非アクティブ時再起動機能の技術的解析を試みています。
Reverse Engineering iOS 18 Inactivity Reboot
https://naehrdine.blogspot.com/2024/11/reverse-engineering-ios-18-inactivity.html
非アクティブ時再起動機能は、iPhoneが72時間、すなわち3日間ロック解除されない状態が続くと自動的に再起動するというセキュリティ機能です。この機能の主な目的は、盗難されたiPhoneからのデータ抽出や不正アクセスを防ぐことです。


Jiska氏によれば、iPhoneのセキュリティ状態が再起動後の初回ロック解除の前後で大きく異なるとのこと。
初回ロック解除前は、Face IDやTouch IDは機能せず、パスコードの入力が必要です。また、Wi-Fiのパスワードも暗号化されているため、Wi-Fi接続はできません。さらに、SIMがPINロックされていない場合は携帯電話の通信ネットワークに接続できますが、着信があっても連絡先名は表示されず、メッセージ通知は受信できますがプレビュー表示はされません。
一方、初回ロック解除後は、システムが特定のキーにアクセスできる状態が維持され、ロック画面が表示されていても、Wi-Fi接続が維持されます。また、メッセージ通知のプレビューが表示され、連絡先情報が参照可能になります。
ただし、初回ロック解除後にはセキュリティ上の弱点があります。例えば、ロック画面をバイパスする脆弱性が発見された場合、攻撃者は復号化されたデータにアクセスできる可能性があります。特に物理的なアクセスが可能な場合、USB接続やワイヤレス通信、ハードウェアへの直接的な攻撃など、攻撃者が利用できる手段が増えることになります。
法執行機関にとって、初回ロック解除後のiPhoneから得られるデータは、捜査上非常に高い価値があります。そこで、法執行機関はエクスプロイトが利用可能になるまでの時間や、令状取得などの法的手続きに必要な時間を確保するため、押収したiPhoneの電源を切らずにインターネットから隔離した状態で保管することがよくあるとのこと。しかし、非アクティブ時再起動機能が実装されたことで、法執行機関が3日以上iPhoneを放置すると自動で再起動することで初回ロック解除前に戻ってしまい、内部データを抽出することが極めて困難になります
通常、Appleは新機能を完全に隠蔽することはせず、デバッグ文字列として残していることが多いことから、Jiska氏は、GitHubにあるiOS各バージョンにある文字列をまとめたリポジトリを利用して、まず「reboot」という単語で検索。その結果、「inactivity_reboot」という文字列がkeybagdデーモン内で発見されました。keybagdは、初回ロック解除時に解除される鍵に関連するデーモンです。
さらなる調査で、この文字列はiOS 18.1とiOS 18.2で確認され、iOS 18.2では「inactivity_reboot」から「inactivity_reboot_enabled」に変更されていることが判明しました。これは機能に何らかの変更が加えられた可能性を示唆しています。


非アクティブ時再起動機能が実際にどのように動作するのか、特に再起動までの時間を確認するため、Jiska氏はiOS 18.2 beta 2にアップデートした検証用デバイスを使用してタイムラプス撮影による検証を行いました。その結果、以下のムービーを見ると分かる通り、72時間後にデバイスが自動で再起動することが確認されました。Jiska氏によれば、この再起動はWi-Fi接続の有無に関係なく発生したとのこと。
iOS Inactivity Reboot Timelapse - YouTube

さらなる解析で、非アクティブ時再起動機能がどういう仕組みなのかがわかってきたとJiska氏は述べています。
まず、最後にロックが解除されてから経過した時間を、iPhone内部にあるSecure Enclaveプロセッサ(SEP)が計測します。この時間が72時間のしきい値を超えると、SEPがAppleSEPKeyStoreカーネルモジュールに通知を送信します。通知を受けたカーネルモジュールは、ユーザー空間に再起動の必要性を通知し、SpringBoardがすべてのユーザー空間プロセスを正常終了させます。これにより、データ損失を防ぎながら安全な再起動が実行されます。
Jiska氏によれば、AppleSEPKeyStoreカーネルモジュールには安全機構が組み込まれており、再起動が必要とされた後もiPhoneの電源が入ったままの場合、カーネルパニックが発生するように設計されているとのこと。これは非アクティブ時再起動機能への改ざんを防ぐための防御機構だとJiska氏は推測しています。


さらに、AppleSEPKeyStoreカーネルモジュールは「aks-inactivity」というNVRAM変数を書き込みます。再起動後、keybagdがこの変数を読み取り、iPhoneが最後のロック解除からどれだけの時間経過していたかを含む分析データをAppleに送信します。
Jiska氏がSEPを解析した結果、72時間(259200秒)という時間値はSEPファームウェア内には見つからず、コンパイラの最適化により分割された形で実装されていることが判明しました。


さらに、SEPのファームウェアを解析したところ、「sks」というアプリケーションが2.5時間、1日、2日、3日という複数の時間値を比較し、その結果に基づいてカーネル拡張へメッセージを送信する機能を持っていたことがわかりました。


SEPはすべてのロック解除操作に関与し、メインカーネルへの攻撃に対しても堅牢な保護を持つため、理想的なセキュリティ機能の基盤となっていることがわかりました。これにより、カーネルレベルの攻撃を受けても、非アクティブ時再起動機能は保護されるとJiska氏は述べています。
多くのメディアは、この非アクティブ時再起動機能が法執行機関の活動を制限するものとして報じていましたが、Jiska氏はデバイス盗難に対する重要なセキュリティ改善としての側面もあると指摘しています。窃盗犯はiPhoneを入手してから3日以内に解除するための資金や法的手段を持っておらず、内部のデータへのアクセスはかなり困難になります。一方で、法執行機関はフォレンジック調査企業と緊密な連携を取ることで、72時間以内にデータを抽出することが可能です。Jiska氏は、法執行機関が時間的制約の中で合法的な調査を行うことができるのに対して、犯罪者は事実上iPhoneに保存された銀行口座情報やその他の価値あるデータへのアクセスができなくなったため、非アクティブ時再起動機能は一般ユーザーのプライバシーとセキュリティを大きく向上させると評価しました。

ジャンルで探す