この項目「IBoot」は翻訳されたばかりのものです。不自然あるいは曖昧な表現などが含まれる可能性があり、このままでは読みづらいかもしれません。(原文:https://en.wikipedia.org/w/index.php?title=IBoot&oldid=1301143276 at 08:33, 18 July 2025) 修正、加筆に協力し、現在の表現をより自然な表現にして下さる方を求めています。ノートページや履歴も参照してください。(2025年8月) |
| iBoot | |
|---|---|
| Developer(s) | Apple |
| Initial release | June 29, 2007 |
| Stable release | iBoot-11881.80.57~171 (RELEASE, iOS 18.3 RC and iOS 18.3.1) |
| Preview release | iBoot-11881.80.57~107 (RELEASE, iOS 18.3 beta 1) |
| Operating system | Darwin, macOS, iPadOS and iOS |
| Platform | X64, AArch64 |
| Type | ブートローダ |
| License | Proprietary software |
iBootは、ステージ2 ブートローダである。iPhone, iPad, Appleシリコン Mac, およびApple T2を搭載したインテルMacで採用されている。 iBootは、前モデルと比較して、ブートチェーンで実行される認証を改善する。Apple T2を搭載したIntel Mac では、ブートプロセスはboot ROMからT2チップ上でコードを実行することから始まる。そのboot ROMは、iBootをT2チップにロードして実行する。その次にiBootはbridgeOSをT2チップにロードし、起動する。そしてbridgeOSはUEFIファームウェアをロードする。UEFIファームウェアはメインIntelプロセッサを起動し、Power-On Self Testプロセスを完了させる。UEFIファームウェアはboot.efiをロードし、macOSカーネルをロードして起動する。
iPhone、iPad、Appleシリコン搭載Macの場合、ブートプロセスはデバイスのブートROMを実行することから始まる。Apple A9またはそれ以前のAシリーズプロセッサを搭載したiPhoneやiPadでは、ブートROMはステージ1ブートローダであるLLB(Low-Level Bootloader)をロードし、iBootをロードする。Apple A10以降のSoCを搭載したデバイスやAppleシリコン搭載Macでは、ブートROMはiBootをロードする。すべてがうまくいくと、iBootはiOS、iPadOS、macOSのカーネルと、オペレーティングシステムのその他のロードを進める。iBootがiOS、iPadOS、macOSのロードに失敗したり、検証に失敗した場合、ブートローダはDFU(デバイスファームウェアアップデート)モードにジャンプする。
カーネルと起動に必要なドライバ全てがロードされると、ブートローダはカーネルの初期化手順を開始する。この時点で、カーネルがルートデバイスを見つけるために必要なドライバがロードされる。
Apple A7以降を搭載したiPhoneやiPadでは、LLBとiBootはNANDフラッシュに保存される。Apple M1以降を搭載したMacでは、LLBは内蔵SSDに保存される。
流出したiBootのソースコード(2018年2月7日)によると、apps/iBoot/iBoot.mkでは、iBootのコピーをビルドする際に有効なビルドスタイルを「RELEASE」、「DEVELOPMENT」、「DEBUG」、「SECRET」と定義している。これらのビルドスタイルは、ブートローダがコンパイルされる際に特定の情報を定義する。例えば、開発中のデバイスの問題を見つけるためにデバッグコマンドを追加したり、シリアル経由でiBootコマンドプロンプトを使用してハードウェアテストを実行したりできる。
RELEASE - リリース版
DEVELOPMENT - 開発用ハードウェアで使用されるビルドでは、「diags」コマンドなど、いくつかの開発用ツールにアクセスできる
DEBUG - iOSやその他の下位コンポーネントのデバッグに使用されるビルド
iBootは、リカバリ、DFU、またはリストアモード時にコマンドプロンプトを表示する(iBootの「DEBUG」ビルドにも表示されるが、将来のビルドでは表示されなかった)。コマンドの使用可否は、使用するiBootのタイプ、特にビルドスタイル(RELEASE、DEVELOPMENT、DEBUG、SECRETなど)に依存する[要出典]。
iBootのコマンドプロンプトを使用する場合、含まれるコマンドは、ブート引数(NVRAMで内部的に「boot-args」と呼ばれる)や、iBootが自動的にロードされたときにスタートアップコマンド(fsboot)を使用するかどうか(自動ブートとして知られている)などの動作を管理するために使用される。
AppleはiOS 14以降、メモリ安全性を向上させるため、iBootのビルドに使用されるCコンパイラのツールチェーンを変更した。この改良は、バッファオーバーフロー、ヒープ悪用、型混同の脆弱性、use-after-free攻撃など、一般的なメモリ破壊の脆弱性のクラス全体を軽減するように設計されている。これらの修正により、攻撃者が特権を不正に昇格させて、任意のコード実行を伴う攻撃など、悪意のあるコードの実行を防止できる可能性がある。
2018年、iOS 9のiBootソースコードの一部がGitHubに流出し、当時のiPhone、iPad、iPod touch、Apple Watchの各モデルが被害を受けた。 その後、AppleはGitHubに対し、リポジトリの削除を求める著作権削除要請(DMCA)を出した。この流出にはAppleの従業員が関与していると考えられていた。しかし、Appleによって確認されたわけではない。iBootのソースコードの公開に関与したのは「ZioShiba」という名前のユーザであることがわかっている。

iBootの最も古いバージョンはiBoot-87.1で、2006年から2007年にかけ製造された、最初期のプロトタイプiPhoneに搭載されたものである。このバージョンは、iBootの最初のバージョン(iBoot-99)と同じ機能を持っていたが、最終リリース前の機能は持っていなかった。このバージョンのiBootは、iBootの「最初期ベータ版」と考えられる。初代iPhoneとiPhone OS 1のリリースに伴い、最初にリリースされたiBootのバージョンはiBoot-159だった。