iOS and Apple Platform App Security — A Module
What this is. The mobile-app counterpart to Phase 04 (Android),
for Apple platforms. Phase 05 covers Apple OS internals (XNU, code signing, sandbox, TCC, Secure
Enclave); this module covers what an app security engineer reviews in an iOS application: App
Transport Security, entitlements and the Info.plist, the Data Protection classes and Keychain
accessibility, URL-scheme/universal-link handling, the pasteboard, privacy manifests and
required-reason APIs, and why jailbreak detection and pinning are not authorization boundaries.
Why it's its own module. Phase 04 is Android-specific (Binder, intents, the manifest, JADX). iOS
is a different platform with different primitives — Info.plist instead of AndroidManifest.xml,
entitlements instead of permissions, Data Protection classes instead of file modes, App Groups and
Keychain access groups instead of sharedUserId. The principles are shared (least privilege,
server-side authorization, protect the whole data lifecycle); the mechanisms are not.
Prerequisites. Phase 04 (mobile threat model), Phase 05 (Apple OS internals — sandbox, TCC,
Secure Enclave), Phase 02 (TLS/identity). Everything here is authorized-lab-only and offline —
the labs analyze app configuration metadata (Info.plist, entitlements, data-protection settings),
not live devices.
Learning Objectives
By the end you can, without notes:
- Read an iOS app's
Info.plistand entitlements and flag the dangerous ones (ATS exceptions, over-broad entitlements, hijackable URL schemes, missing data protection). - Explain App Transport Security (ATS) and why
NSAllowsArbitraryLoadsis a finding. - Choose the right Data Protection class and Keychain accessibility for a datum, and explain
the tradeoffs (
CompleteUntilFirstUserAuthenticationvsCompletevsAlways). - Explain URL-scheme hijacking and why Universal Links (verified
apple-app-site-association) are the secure alternative — the iOS mirror of Android App Links. - Reason about pasteboard, screenshots, backups, and logs as data-lifecycle leaks.
- Explain privacy manifests / required-reason APIs and App Tracking Transparency.
- State why jailbreak detection and certificate pinning are not authorization boundaries (the server is) — the iOS echo of Phase 04 Chapter 10.
The iOS review surface (read the WARMUP)
Info.plist + entitlements -> what the app is allowed to do / reach
ATS -> is network traffic forced over good TLS?
Data Protection + Keychain -> is data encrypted at rest, and unlocked when?
URL schemes / Universal Links -> who can invoke the app, with what params?
pasteboard/screenshots/backups/logs -> the lifecycle leaks around the secure store
See WARMUP.md for the full from-zero treatment.
Labs
| Lab | Builds | Focus |
|---|---|---|
| Lab 01 — ATS & Entitlements Analyzer | flag ATS exceptions, dangerous entitlements, hijackable URL schemes from Info.plist/entitlements | configuration |
| Lab 02 — Data-Protection & Privacy Evaluator | check Data Protection class & Keychain accessibility per datum; pasteboard/backup/log leaks; required-reason APIs | data lifecycle |
Pure Python (stdlib + pytest), lab.py/solution.py/test_lab.py/README.md each.
cd lab-01-ats-entitlements-analyzer
LAB_MODULE=solution pytest -q
pytest -q
Safety
Authorized-lab-only and offline; the labs reason over app configuration metadata. No device instrumentation, no App Store interaction, no targeting apps you don't own (Phase 00).