Phase2_UE_Android_SIM

Phase 2 - UE, Android, and SIM Security Assessment

Warning

Keep this phase focused on devices, SIMs, and applications that you own or are explicitly authorized to assess.

Purpose

This phase evaluates subscriber-side risk without requiring RF transmission. It is the fastest way to start collecting useful findings while your core lab is being stabilized.

The revamp for this cycle wires two of your own tools into the phase so that "the handset exposes X" becomes a measured, reproducible claim rather than a note: CellScope reads what the device actually reports, and mobility_lab supplies the ground truth for what the identity-privacy behavior should be.

Primary assessment questions

Area Question Typical evidence
Carrier app exposure Do carrier apps over-collect, trust weak TLS paths, or expose sensitive functions? Traffic captures, manifest review, exported component review
Device telephony exposure Are diagnostic, telephony, or local management surfaces overly permissive? Device inventory, service list, allowed/blocked interfaces
SIM and eSIM controls Are subscriber identifiers, SIM services, and OTA features appropriately constrained? SIM file inventory, enabled services, provisioning notes
Privacy posture Does the device expose more identity or cell data than expected? CellScope pixel snapshot, dumpsys output, cell inventory, settings state

Tooling for this phase

Tool Repo Role in Phase 2
CellScope ~/code/cellscope The pixel source reads a rooted Pixel 9's Android CellInfo — serving/neighbor cells, bands, identifiers the handset chooses to expose — into the dashboard. Passive, your-own-device only.
CellScope nasdiag (device-side) ~/code/cellscope Planned/under-test source that reads your own phone's pre-cipher NAS identity + auth handshake from a rooted Qualcomm/DIAG device and scores IMSI-catcher anomalies. Use offline replay today.
mobility_lab ~/code/mobility_lab Ground truth for identity privacy: make suci (Profile A concealment) vs the default null-scheme UE vs make attach-4g (LTE, IMSI in clear) tells you exactly what "concealed" and "exposed" look like.
  1. Build a device baseline: OS version, patch level, baseband version, carrier profile, root state.
  2. Inventory carrier and telephony apps and document the components worth reviewing.
  3. Validate proxying, capture, and logging on your own device before testing any workflow.
  4. Review SIM/eSIM identity and service configuration using approved lab SIM material.
  5. Snapshot the handset with CellScope (SOURCE=pixel) so device-reported cell/identity state is captured as evidence, not memory.
  6. Record findings as control weaknesses, not just interesting behaviors.

Outputs expected from this phase

Assessment themes

1. Device and carrier-app review

Focus on:

2. Telephony and local interface review

Focus on:

3. SIM and OTA posture

Focus on:

4. Evidence and decision points

Capture enough detail to answer:

Verify it with your own tools

The verification question in Phase 2 is: does the subscriber side (SIM profile + handset) actually conceal permanent identity the way policy says it should? You answer it by comparing the handset's real behavior against the lab ground truth from Phase 1.

Ground-truth reference (run once, in mobility_lab):

Lab state Identity on the wire CellScope verdict
Default 5G UE (null-scheme SUCI) SUPI sent unconcealed flags=['supi-in-clear']
make suci (Profile A / ECIES) SUCI concealed flags=[]
make epc + make attach-4g IMSI in the clear (LTE has no SUCI) flags=['imsi-in-clear']

That table is your yardstick. It tells you exactly which CellScope flag corresponds to which real-world privacy failure, calibrated on a network you own.

Device-side check (your own handset):

cd ~/code/cellscope
SOURCE=pixel ./cellscope.sh start          # rooted Pixel 9 CellInfo → dashboard, http://localhost:8000
# nasdiag (pre-cipher NAS identity/auth), offline replay of your own capture:
SOURCES=nasdiag NASDIAG_REPLAY=my_device_capture.pcap ./cellscope.sh start

Pass/fail for the phase:

Companion procedures

Exit criteria

Move on when you can clearly explain: