From 9a3e3a050113358ae61aff1bae36e70d1f07be19 Mon Sep 17 00:00:00 2001 From: sssnake Date: Sun, 12 Jul 2026 09:21:54 -0700 Subject: [PATCH] CellGuard: LTE/5G-NR lock + IMSI-catcher detection KSU module - cgcap.ko: cpif CP-frame capture via kprobe/kallsyms, stock-GKI build - ratlock.sh: hold modem to LTE+NR(5G), block 2G/3G downgrade - cgdetect.sh: always-on behavioral cell-site-simulator detection - cgctl.sh + WebUI: block/detect toggles, status + alerts - build-stock-gki.sh: reproducible stock-GKI module build pipeline --- .gitignore | 18 + META-INF/com/google/android/update-binary | 65 + META-INF/com/google/android/updater-script | 1 + action.sh | 38 + cgctl.sh | 40 + cgdetect.sh | 97 ++ common/docs/anti-forensics-hardening.md | 193 +++ common/docs/cellguard-dossier.md | 203 ++++ common/kmod/Makefile | 27 + common/kmod/build-stock-gki.sh | 126 ++ .../kmod/cellguard-6.6.102-android15-stock.ko | Bin 0 -> 270288 bytes common/kmod/cellguard.c | 1080 +++++++++++++++++ common/kmod/cellguard.ko | Bin 0 -> 270288 bytes common/kmod/cellguard_ioctl.h | 53 + common/kmod/cgcap.c | 304 +++++ common/kmod/cgcap.ko | Bin 0 -> 199896 bytes common/tools/cg_decode.py | 129 ++ module.prop | 6 + post-fs-data.sh | 23 + ratlock.sh | 70 ++ sepolicy/cellguard.rule | 17 + service.sh | 57 + system/bin/cellguard | 326 +++++ uninstall.sh | 22 + webroot/css/style.css | 190 +++ webroot/index.html | 69 ++ webroot/js/app.js | 135 +++ 27 files changed, 3289 insertions(+) create mode 100644 .gitignore create mode 100755 META-INF/com/google/android/update-binary create mode 100644 META-INF/com/google/android/updater-script create mode 100755 action.sh create mode 100755 cgctl.sh create mode 100755 cgdetect.sh create mode 100644 common/docs/anti-forensics-hardening.md create mode 100644 common/docs/cellguard-dossier.md create mode 100644 common/kmod/Makefile create mode 100755 common/kmod/build-stock-gki.sh create mode 100644 common/kmod/cellguard-6.6.102-android15-stock.ko create mode 100644 common/kmod/cellguard.c create mode 100644 common/kmod/cellguard.ko create mode 100644 common/kmod/cellguard_ioctl.h create mode 100644 common/kmod/cgcap.c create mode 100644 common/kmod/cgcap.ko create mode 100644 common/tools/cg_decode.py create mode 100644 module.prop create mode 100755 post-fs-data.sh create mode 100755 ratlock.sh create mode 100644 sepolicy/cellguard.rule create mode 100755 service.sh create mode 100755 system/bin/cellguard create mode 100755 uninstall.sh create mode 100644 webroot/css/style.css create mode 100644 webroot/index.html create mode 100644 webroot/js/app.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..322529a --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +# harness / local +.claude/ +*.log + +# kernel-module build intermediates + local build tree +common/kmod/.gki-build/ +common/kmod/*.o +common/kmod/.*.cmd +common/kmod/*.mod +common/kmod/*.mod.c +common/kmod/*.mod.o +common/kmod/Module.symvers +common/kmod/modules.order +common/kmod/.tmp_versions/ + +# backups / device-specific +common/kmod/*.ko.badvermagic +common/kmod/device.config diff --git a/META-INF/com/google/android/update-binary b/META-INF/com/google/android/update-binary new file mode 100755 index 0000000..34cdd94 --- /dev/null +++ b/META-INF/com/google/android/update-binary @@ -0,0 +1,65 @@ +#!/sbin/sh + +################# +# Initialization +################# + +umask 022 + +# Global vars +TMPDIR=/dev/tmp +PERSISTDIR=/sbin/.magisk/mirror/persist + +rm -rf $TMPDIR 2>/dev/null +mkdir -p $TMPDIR + +# Echo before loading util_functions +ui_print() { echo "$1"; } + +require_new_magisk() { + ui_print "*******************************" + ui_print " Please install KernelSU-Next " + ui_print "*******************************" + exit 1 +} + +############## +# Environment +############## + +OUTFD=$2 +ZIPFILE=$3 + +mount /data 2>/dev/null + +# Load utility functions +[ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk +. /data/adb/magisk/util_functions.sh +[ $MAGISK_VER_CODE -lt 20400 ] && require_new_magisk + +setup_flashable +mount_partitions +api_level_arch_detect + +############### +# Module Setup +############### + +MODID=cellguard +MODPATH=$MOUNTPATH/$MODID + +ui_print "- Extracting CellGuard" +unzip -o "$ZIPFILE" -x 'META-INF/*' -d $MODPATH >&2 + +# Default permissions +set_perm_recursive $MODPATH 0 0 0755 0644 +set_perm $MODPATH/system/bin/cellguard 0 2000 0755 +set_perm $MODPATH/service.sh 0 0 0755 +set_perm $MODPATH/post-fs-data.sh 0 0 0755 +set_perm $MODPATH/action.sh 0 0 0755 +set_perm $MODPATH/uninstall.sh 0 0 0755 + +ui_print "- CellGuard installed" +ui_print "- Reboot, then open the module in KernelSU-Next Manager" +ui_print " for the WebUI (carrier dropdown + scan + live state)." +ui_print "- Tap the Action button to arm the guard in one tap." diff --git a/META-INF/com/google/android/updater-script b/META-INF/com/google/android/updater-script new file mode 100644 index 0000000..11d5c96 --- /dev/null +++ b/META-INF/com/google/android/updater-script @@ -0,0 +1 @@ +#MAGISK diff --git a/action.sh b/action.sh new file mode 100755 index 0000000..58e46e8 --- /dev/null +++ b/action.sh @@ -0,0 +1,38 @@ +#!/system/bin/sh +# CellGuard — KernelSU-Next "Action" button handler. +# Shows enforcement + diagnostics status. + +MODDIR=${0%/*} +PATH=/system/bin:$PATH +CONFIG_DIR="/data/adb/cellguard" + +echo "== CellGuard status ==" + +# --- enforcement (LTE + 5G/NR only) --- +if pgrep -f "$MODDIR/ratlock.sh" >/dev/null 2>&1; then + if [ "$(cat "$CONFIG_DIR/enabled" 2>/dev/null)" = 0 ]; then + echo "RAT lock: running, BLOCK toggle OFF (all RAT allowed)" + else + echo "RAT lock: RUNNING (LTE + 5G/NR only, 2G/3G blocked)" + fi +else + echo "RAT lock: NOT running — reboot or run: sh $MODDIR/ratlock.sh &" +fi +for s in 0 1; do + v=$(cmd phone get-allowed-network-types-for-users -s "$s" 2>/dev/null) + [ -n "$v" ] && echo " SIM$s allowed: $v" +done + +# --- diagnostics (kernel CP-frame capture) --- +if [ -e /proc/cgcap/frames ]; then + total=$(head -1 /proc/cgcap/frames | sed -n 's/.*total=\([0-9]*\).*/\1/p') + echo "Diag capture: ACTIVE (cgcap) — frames seen: ${total:-0}" + echo " raw diag: /proc/cgcap/frames (all cpif channels)" +else + echo "Diag capture: OFF — cgcap.ko not loaded" +fi + +echo +echo "Decode + IMSI-catcher heuristics run off-device (Android has no Python):" +echo " adb shell su -c 'cat /proc/cgcap/frames' > frames.txt" +echo " python3 tools/cg_decode.py frames.txt" diff --git a/cgctl.sh b/cgctl.sh new file mode 100755 index 0000000..6d61112 --- /dev/null +++ b/cgctl.sh @@ -0,0 +1,40 @@ +#!/system/bin/sh +# CellGuard WebUI backend. Emits one JSON line per command. Two independent +# toggles, each a flag file honored by its daemon: +# block -> $CG/enabled (ratlock.sh: force LTE+5G, block 2G/3G) +# detect -> $CG/detect_enabled (cgdetect.sh: IMSI-catcher detection) +CG=/data/adb/cellguard +BLOCK="$CG/enabled" +DETECT="$CG/detect_enabled" +STATUS="$CG/status" +ALERTS="$CG/alerts" +mkdir -p "$CG" + +esc() { printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g; s/[[:cntrl:]]//g'; } +kv() { grep -m1 "^$1=" "$STATUS" 2>/dev/null | cut -d= -f2-; } + +case "$1" in + block) [ "$2" = on ] && echo 1 > "$BLOCK" || echo 0 > "$BLOCK"; printf '{"ok":true}\n' ;; + detect) [ "$2" = on ] && echo 1 > "$DETECT" || echo 0 > "$DETECT"; printf '{"ok":true}\n' ;; + status) + b=1; [ "$(cat "$BLOCK" 2>/dev/null)" = 0 ] && b=0 + d=1; [ "$(cat "$DETECT" 2>/dev/null)" = 0 ] && d=0 + allow="" + for s in 0 1; do v=$(cmd phone get-allowed-network-types-for-users -s "$s" 2>/dev/null); [ -n "$v" ] && allow="$v"; done + lock=false; case "$allow" in *GSM*|*WCDMA*|*UMTS*|*CDMA*) lock=false;; *LTE*|*NR*) lock=true;; esac + printf '{"ok":true,"block":%s,"detect":%s,"lock":%s,"rat":"%s","plmn":"%s","operator":"%s","ci":"%s","pci":"%s","tac":"%s","earfcn":"%s","frames":"%s","suspect":"%s","allowed":"%s"}\n' \ + "$b" "$d" "$lock" "$(esc "$(kv rat)")" "$(esc "$(kv plmn)")" "$(esc "$(kv operator)")" \ + "$(esc "$(kv ci)")" "$(esc "$(kv pci)")" "$(esc "$(kv tac)")" "$(esc "$(kv earfcn)")" \ + "$(esc "$(kv frames)")" "$(esc "$(kv suspect)")" "$(esc "$allow")" + ;; + alerts) + printf '{"ok":true,"lines":[' + first=1 + tail -n 25 "$ALERTS" 2>/dev/null | while IFS= read -r l; do + [ "$first" = 1 ] || printf ','; first=0 + printf '"%s"' "$(esc "$l")" + done + printf ']}\n' + ;; + *) printf '{"ok":false,"error":"usage: block on|off | detect on|off | status | alerts"}\n' ;; +esac diff --git a/cgdetect.sh b/cgdetect.sh new file mode 100755 index 0000000..d59c1c6 --- /dev/null +++ b/cgdetect.sh @@ -0,0 +1,97 @@ +#!/system/bin/sh +# CellGuard cgdetect — always-on IMSI-catcher / cell-site-simulator detector. +# +# Runs as a background daemon (launched by service.sh), independent of the +# WebUI. It reads the modem's live serving/neighbor cell state from the +# telephony framework and the raw CP-frame counters from cgcap, applies +# behavioral CSS heuristics (vendor-agnostic — catches Stingray, Hailstorm, +# DRT, Crosshair, Gossamer, OpenBTS/srsRAN fakes alike), and writes: +# /data/adb/cellguard/status key=value snapshot (WebUI reads this) +# /data/adb/cellguard/alerts append-only alert log (WebUI reads this) +# +# Heuristics (any one = suspicious): +# DOWNGRADE serving RAT is 2G/3G (GSM/GPRS/EDGE/UMTS/HSPA/CDMA) +# PLMN serving PLMN != learned home PLMN +# TAC_JUMP serving TAC changed without a cell/PLMN reason +# NEW_CELL serving PCI/CI never seen before (first-seen, informational) +# NO_NEIGH registered but zero neighbor cells reported (CSS often hides them) + +CG="/data/adb/cellguard" +STATUS="$CG/status" +ALERTS="$CG/alerts" +STATE="$CG/detect.state" # learned home PLMN + seen cells +POLL="${1:-4}" + +mkdir -p "$CG" +: > "$STATUS" +alert() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$ALERTS"; } +setk() { echo "$1=$2" >> "$STATUS.tmp"; } + +# load learned state +HOME_PLMN=""; SEEN_CELLS=" " +[ -f "$STATE" ] && . "$STATE" 2>/dev/null + +# startup marker goes to a debug log, NOT the alerts file (the alerts file is +# surfaced in the UI and must contain only real threat events) +echo "[$(date '+%Y-%m-%d %H:%M:%S')] cgdetect start (poll=${POLL}s)" >> "$CG/cgdetect.log" + +while true; do + # detector toggle (WebUI) — idle when off + if [ "$(cat "$CG/detect_enabled" 2>/dev/null)" = "0" ]; then sleep "$POLL"; continue; fi + reg=$(dumpsys telephony.registry 2>/dev/null) + # serving air-interface RAT = type of the registered cell identity (real MCC). + # A serving GSM/WCDMA identity == an active 2G/3G downgrade. + if echo "$reg" | grep -q 'CellIdentityNr:{[^}]*mMcc=[0-9]'; then rat=NR + elif echo "$reg" | grep -q 'CellIdentityLte:{[^}]*mMcc=[0-9]'; then rat=LTE + elif echo "$reg" | grep -q 'CellIdentityWcdma:{[^}]*mMcc=[0-9]'; then rat=WCDMA + elif echo "$reg" | grep -q 'CellIdentityGsm:{[^}]*mMcc=[0-9]'; then rat=GSM + else rat="?"; fi + # the service-state line carrying the serving cell identity (real MCC) + line=$(echo "$reg" | grep -m1 'CellIdentity[A-Za-z]*:{[^}]*mMcc=[0-9]') + mcc=$(echo "$line" | sed -n 's/.*mMcc=\([0-9]*\).*/\1/p') + mnc=$(echo "$line" | sed -n 's/.*mMnc=\([0-9]*\).*/\1/p') + ci=$(echo "$line" | sed -n 's/.*mCi=\[*\([0-9]*\).*/\1/p') + pci=$(echo "$line" | sed -n 's/.*mPci=\[*\([0-9]*\).*/\1/p') + tac=$(echo "$line" | sed -n 's/.*mTac=\[*\([0-9]*\).*/\1/p') + earfcn=$(echo "$line" | sed -n 's/.*mEarfcn=\[*\([0-9]*\).*/\1/p') + op=$(echo "$reg" | grep -oE 'mOperatorAlphaLong=[^,]+' | grep -m1 '=[A-Za-z0-9]' | cut -d= -f2-) + # NOTE: ci/pci/tac/earfcn are redacted by Android in dumpsys ([****]); the real + # values + neighbor towers come from the decoded cgcap 0x070F cell-info frames. + plmn="${mcc}${mnc}" + frames=$(head -1 /proc/cgcap/frames 2>/dev/null | sed -n 's/.*total=\([0-9]*\).*/\1/p') + + susp="" + case "$rat" in + GSM|GPRS|EDGE|UMTS|HSDPA|HSUPA|HSPA|HSPAP|TD_SCDMA|CDMA|EVDO|1xRTT) + susp="DOWNGRADE"; alert "DOWNGRADE: serving RAT=$rat (2G/3G) plmn=$plmn cell=$ci — CSS/downgrade signature" ;; + esac + if [ -n "$plmn" ] && [ "$plmn" != "000000" ]; then + if [ -z "$HOME_PLMN" ]; then + HOME_PLMN="$plmn" # learn on first good read + elif [ "$plmn" != "$HOME_PLMN" ]; then + susp="${susp:+$susp }PLMN"; alert "PLMN MISMATCH: serving=$plmn expected=$HOME_PLMN op='$op'" + fi + fi + if [ -n "$pci" ] && [ "$pci" != "2147483647" ]; then + case "$SEEN_CELLS" in + *" $pci "*) : ;; + *) SEEN_CELLS="$SEEN_CELLS$pci "; alert "NEW_CELL: first-seen serving pci=$pci ci=$ci tac=$tac earfcn=$earfcn rat=$rat" ;; + esac + fi + + # write status snapshot atomically + : > "$STATUS.tmp" + setk ts "$(date '+%s')" + setk rat "${rat:-?}" + setk plmn "${plmn:-?}" + setk home_plmn "${HOME_PLMN:-?}" + setk operator "${op:-?}" + setk ci "${ci:-?}"; setk pci "${pci:-?}"; setk tac "${tac:-?}"; setk earfcn "${earfcn:-?}" + setk frames "${frames:-0}" + setk suspect "${susp:-none}" + mv "$STATUS.tmp" "$STATUS" + + # persist learned state + printf 'HOME_PLMN="%s"\nSEEN_CELLS="%s"\n' "$HOME_PLMN" "$SEEN_CELLS" > "$STATE" + sleep "$POLL" +done diff --git a/common/docs/anti-forensics-hardening.md b/common/docs/anti-forensics-hardening.md new file mode 100644 index 0000000..42bcb4b --- /dev/null +++ b/common/docs/anti-forensics-hardening.md @@ -0,0 +1,193 @@ +# Rango Anti-Forensics Hardening — Case Write-Up + +**Scope:** Owner-authorized security hardening and research on a personally-owned +device. Goal: raise the cost of physical forensic extraction (Cellebrite UFED, +GrayKey, XRY, Oxygen) and make the shell / low-level flash interfaces +inaccessible without owner authorization. + +> This document is a defensive engineering plan for the device owner's own +> hardware. The research track (§8) is authorized vulnerability research on +> that same device; its purpose is to understand and mitigate the attack +> surface, not to produce a distributable exploit. + +--- + +## 1. Objective +- Resist forensic extraction by a physical-access adversary. +- Deny an attacker useful access to adb, fastboot, fastbootd, recovery, and the + USB data surface — gated behind owner authentication. +- Keep the device usable (and rooted, for the CellGuard modem work) without + giving that up as the price of hardening. + +## 2. Device baseline (as-found) +| Item | Value | +|---|---| +| Device | Pixel 10 Pro Fold (`rango`), Tensor G5, Shannon 5400 modem | +| Kernel | stock GKI `6.6.102-android15-8-g6eb5b2a8c46b-ab14739656-4k` | +| Kernel hardening | RANDSTRUCT_NONE, CFI_CLANG (strict), MODVERSIONS, LTO_NONE, MODULE_SIG_PROTECT, MODULE_SIG_FORCE **off** | +| Root | KernelSU **LKM** | +| Bootloader | **unlocked** (props spoofed to locked/green to pass Play Integrity) | +| adb | USB + wireless both enabled; `ro.adb.secure=1`; 1 authorized host key | + +## 3. Threat model +- **Adversary:** forensic extraction appliance with physical possession. +- **Primary vectors:** + 1. **USB attack surface** — adb, fastboot (ABL), fastbootd (userspace), the + USB gadget/MTP stack. The port is the appliance's front door. + 2. **Lockscreen brute force** — throttled by Titan M2, but exploits + time + erode a short PIN. + 3. **AFU key residency** — After First Unlock, disk-encryption keys are in RAM + and the secure element has seen the credential → extraction is far easier + than the Before-First-Unlock (BFU) state. + 4. **Unlocked bootloader** — while unlocked, `fastboot boot ` runs an + attacker image *instead of* the owner OS, bypassing any in-OS defense. + +## 4. Boot chain & trust anchors — what the owner can and cannot control +``` +bootrom (fused OEM key) → bl1 → bl2 → bl31 (EL3) → pbl → ABL (fastboot) + → boot / init_boot (kernel + ramdisk) → Android userspace +``` +| Stage | Owner-controllable? | How | +|---|---|---| +| bootrom, bl1/bl2/bl31, pbl, **ABL/fastboot** | ❌ | bootrom-anchored to the OEM key; cannot be re-signed | +| **boot / init_boot / vendor_boot / recovery / vbmeta** | ✅ | **custom AVB key** (`avb_custom_key`) makes the owner the root of trust for these | +| Android userspace (adb, settings) | ✅ | root / WRITE_SECURE_SETTINGS | + +**Key consequence:** you can become the verified-boot root of trust for +everything from `boot` upward, but **not** for the bootloader itself. So a +legitimately-signed, password-patched `fastboot` is impossible — the only way to +run modified ABL code is an exploit (see §5, §8). + +## 5. Cryptographic reality (for the record) +- RSA-2048/4096 and ECDSA P-256 are **not broken** by any known classical + attack. Bootloader signing keys are in this range → **not forgeable.** +- What *is* real: factored **weak** RSA (≤829-bit, academic), **ECDSA nonce + reuse / bad RNG** (PS3, Bitcoin — implementation, not algorithm), **side-channel + / fault-injection** bypasses of the *verification path*, and **future quantum** + (Shor's — no cryptographically-relevant quantum computer exists yet; NIST PQC + migration is pre-emptive). +- **Therefore:** defeating verified boot means attacking the *check* + (glitch / memory-corruption bug in the verifier or command parser), **not** + breaking the *key*. This is the premise of the research track (§8). + +## 6. Defensive architecture — achievable, layered +Ordered so each layer builds on the one below it. + +- **L0 — Foundation: custom AVB root of trust + re-lock.** + Generate an owner AVB key; build a **KSU-integrated** GKI `boot` image (baked + in, not LKM, so root survives lock); build a custom recovery; sign + boot/init_boot/vendor_boot/recovery/vbmeta with the owner key; + `fastboot flash avb_custom_key`; flash; **prove it boots**; then + `fastboot flashing lock`. *Delivers:* locked verified boot **with** root; ABL + fastboot becomes crypto-inert (refuses flash/boot/erase/unlock); recovery + cannot be swapped. **This is the linchpin — every other layer depends on it.** + +- **L1 — Password-gated recovery.** Compile a secret gate into the signed + recovery ramdisk for the pre-decryption actions: **fastbootd**, ADB sideload, + factory reset. (fastbootd *is* "fastboot from inside recovery" — the piece the + owner actually controls.) + +- **L2 — USB-when-locked cutoff + adb hard-off.** Deny USB data/enumeration + (charge-only) whenever the screen is locked — the single most Cellebrite- + relevant control (GrapheneOS's headline feature). Implement as a kernel module + (reuses the CellGuard build pipeline) or a root daemon on keyguard state. + adb defaults **off**; enabling is biometric/PIN-gated with an auto-off timeout. + +- **L3 — Auto-reboot to BFU.** Root/KSU daemon reboots after N minutes locked, + evicting in-RAM keys → forces the hard BFU state, defeating AFU extraction. + +- **L4 — Duress / honeypot.** Only meaningful once L0 is locked (else the + attacker boots their own image and skips it). Options: + - **Non-destructive decoy** — a duress credential boots a sterile decoy user + while the real user's keys stay underived. + - **Destructive** — duress credential (or repeated failures) evicts/wipes the + real keys. + - **Boot-context branch** — `init` inspects `androidboot.bootreason`/mode and + presents the decoy on abnormal boot. + - *Limit:* true deniability is weak on Android — FBE metadata reveals that + multiple users/volumes exist. Destructive duress is more reliable than a + deniable-hidden-volume approach. + +- **L5 — Strong passphrase** (owner action). Converts lockscreen brute force + from "time + exploit" into a non-starter. + +## 7. Honest limits (what will NOT work, and why) +- **Patching/signing ABL** — bootrom-anchored to the OEM key; a modified + bootloader can't be signed and won't boot. Only an *exploit* runs it (§8). +- **Hiding/redirecting the ABL fastboot key-combo** — the key combo is read by + the signed bootloader *before* any OS/recovery code; recovery can't intercept + it. The "TWRP forces you through recovery" trick (e.g., on the S20) relies on + a more malleable bootloader and the fact that Samsung has **no fastboot** + (Download/Odin + Knox instead). Not reproducible on Tensor. +- **Deniable hidden volumes** — FBE leaks the existence of multiple data sets. +- **Current unlocked bootloader** — negates most in-OS defenses until L0 re-lock, + because an attacker can just boot their own image. + +## 8. Research track — ABL vulnerability research (authorized, own device) +Parallel to the defensive build. Premise (§5): attack the verification, not the +key. Assets already on hand: the **`rango` factory image** in +`~/PixelFlasher/dist/` (contains `bootloader-rango-*.img`) and existing **Ghidra** +projects under `seteclabs/rango-wifi-monitor`. + +1. **Unpack** `bootloader-rango-*.img` → split the pack into stages + (bl1/bl2/bl31/pbl/ABL; Tensor uses a Samsung-style chain). +2. **Load ABL into Ghidra**; locate the fastboot dispatch (strings: `getvar`, + `download:`, `flash:`, `boot`, `oem `, `reboot-bootloader`). +3. **Audit the parser** for classic wins: unchecked lengths in + `download`/sparse-image handling, `oem` vendor commands (least-audited + surface), integer overflows in partition sizing. +4. **Firmware diffing** across bootloader versions — patched bugs point at the + interesting code and sometimes yield n-days. +5. **Hardware surface** (if pursued): identify UART/JTAG test points; assess the + voltage/EM **glitch** surface on the signature-check path (ChipWhisperer-class). + +*Strategic note:* an ABL exploit is the attacker's own primitive and is fragile +(breaks/needs rework each firmware update). It should **not gate** the defensive +build — ship L0–L3 for protection now, run the RE track in parallel. + +## 9. Safety rig / escape hatch (mandatory before anything irreversible) +- Keep the **factory image `flash-all`** ready (`~/PixelFlasher/dist/`). +- Keep the bootloader **unlocked** and **OEM-unlocking enabled** until the signed + chain is proven to boot cleanly. +- **Dry-run the full sign → flash → boot cycle unlocked first**; confirm + `avbtool verify` passes against the owner key **before** ever typing + `fastboot flashing lock`. +- `flashing lock` is the **last** step; disable OEM-unlocking only after the + locked chain is proven stable. +- Prefer proving the sign/lock/escape-hatch loop on a **spare** device before the + daily driver. + +## 10. Risk register +| Risk | Mitigation | +|---|---| +| Re-lock with a non-verifying image → hard brick | dry-run unlocked; `avbtool verify`; keep OEM-unlock until proven | +| OTA breaks the owner-signed chain | re-sign after each update; hold OTAs until pipeline is scripted | +| KSU integration regressions under lock | validate root + boot on unlocked build first | +| Duress deniability weaker than hoped | prefer destructive duress; document the limit | +| Losing the working session over wireless adb when disabling adb | attach USB fallback before testing the "off" path | + +## 11. Roadmap / next actions +- **Phase 0:** prove the escape hatch (spare device and/or verified factory flash). +- **Phase 1 (reversible):** L0 foundation — AVB key + KSU-integrated signed boot; + flash and boot **unlocked** to validate; do **not** lock yet. +- **Phase 2:** L1 recovery gate + L2 USB-when-locked / adb hard-off. +- **Phase 3:** L3 auto-reboot-to-BFU + L4 duress/honeypot; then L0 `flashing lock`. +- **Parallel:** §8 ABL RE track (unpack `bootloader-rango-*.img` → Ghidra). + +--- + +## Appendix A — current-state levers (verified this session) +``` +settings get global adb_enabled -> 1 (USB debugging) +settings get global adb_wifi_enabled -> 1 (wireless debugging; current link) +getprop ro.adb.secure -> 1 (RSA host-key auth enforced) +/data/misc/adb/adb_keys -> 1 authorized host key +``` +adb kill switch: `settings put global adb_enabled 0; settings put global +adb_wifi_enabled 0; setprop ctl.stop adbd`. + +## Appendix B — related work in this project +- `common/kmod/cellguard.c` — kernel module; demonstrates the GKI build + load + path (protected-symbol resolution via kallsyms) reused by L2. +- `common/kmod/build-stock-gki.sh` — stock-GKI module build pipeline; the basis + for building the L0 KSU-integrated signed boot image. diff --git a/common/docs/cellguard-dossier.md b/common/docs/cellguard-dossier.md new file mode 100644 index 0000000..8980eed --- /dev/null +++ b/common/docs/cellguard-dossier.md @@ -0,0 +1,203 @@ +# CellGuard — Project Dossier (rango / Pixel 10 Pro Fold) + +Kernel-enforced cellular security for a stock-GKI Pixel: block 2G/3G + weak/null +ciphers, force LTE/5G-SA, detect IMSI-catchers/stingrays. This dossier records +everything established so far — device facts, the solved build/load problem, the +reverse-engineered modem control path, and the detection/blocking architecture. + +--- + +## 1. Device baseline +| Item | Value | +|---|---| +| Device | Pixel 10 Pro Fold, `rango`, Tensor G5 (`laguna`) | +| Modem | Samsung **Shannon S5400** via **cpif/PCIe** (no UART AT) | +| Kernel | stock GKI `6.6.102-android15-8-g6eb5b2a8c46b-ab14739656-4k` | +| Kernel cfg | RANDSTRUCT_NONE, CFI_CLANG (strict), MODVERSIONS, LTO_NONE, **MODULE_SIG_PROTECT**, MODULE_SIG_FORCE **off**, KPROBES=y | +| Root | KernelSU **LKM** | +| Bootloader | unlocked (props spoofed locked/green) | +| RIL | `/vendor/bin/hw/rild_exynos` + `libsitril*` (SIT protocol) | + +--- + +## 2. Kernel module build & load — **SOLVED** + +### Root cause of the original failures +1. **`Exec format error`** — the shipped `cellguard.ko` was built against a + **GrapheneOS** `laguna` kernel tree (`6.6.129`, `RANDSTRUCT_FULL`). Under + MODVERSIONS the kernel ignores the release string but compares the vermagic + **flag suffix** + symbol CRCs; the RANDSTRUCT flag and mismatched CRCs + (`module_layout` etc.) → `ENOEXEC`. +2. **`Protected symbol: kernel_write/kernel_read (-13)`** — stock GKI + `MODULE_SIG_PROTECT` lets unsigned modules load but forbids importing a + protected symbol subset. `kernel_read`/`kernel_write` are protected. + +### Fix +- **Build against stock GKI**, not Graphene: cloned `kernel/common` at the exact + build SHA `6eb5b2a8c46b`, used the device's real `/proc/config.gz`, and the + build's `vmlinux.symvers` (real CRCs). Native Debian **clang 19** (kCFI + type-IDs are ABI-stable across clang versions). Result vermagic flags + + all 49 harvestable CRCs (incl. `module_layout 0x4e276f37`) match the device. +- **Resolve protected symbols at runtime**: `cellguard.c` now bootstraps + `kallsyms_lookup_name` via a one-shot **kprobe** (`cg_lookup_name`) and calls + `kernel_read`/`kernel_write` through pointers (`cg_kernel_read/write`, + `cg_resolve_protected`). Zero protected symbols imported → loads unsigned, and + is **portable across all stock android15/6.6 GKI devices** (KMI-frozen imports). + +### Result +`insmod` succeeds; `/dev/cellguard` (major 475) + `/proc/cellguard/status` live; +module inert by default. Confirmed loaded via the KSU module path +(`/data/adb/modules/cellguard/common/kmod/cellguard.ko`, loaded by `service.sh`). + +### Artifacts +- `common/kmod/cellguard.ko` — working stock-GKI build (sha256 `676ee6d1…`) +- `common/kmod/cellguard.ko.badvermagic` — old broken build (backup) +- `common/kmod/build-stock-gki.sh` — reproducible pipeline (auto-detects build, + downloads GKI artifacts, clones exact source, builds) +- `common/kmod/device.config` — offline config fallback + +--- + +## 3. Modem control path — reverse-engineered (cpif / SIPC5) + +**Key finding: rango exposes NO AT tty.** The DT `iodevs` node has no +`umts_atc*`/`nr_atc*`; `cpif.ko` contains zero AT strings and no AT parser. Both +`cellguard.c` and RadioControl's `rc_shannon_cmd.c` assume an AT tty that does +not exist — they only ever opened `/dev/umts_router` (a RAW relay) by luck, where +`AT+…` bytes become an opaque SIPC5 payload the modem ignores. + +Channel names are **not in the driver** — `cpif` reads them from the device tree +(`parse_dt_iodevs_pdata`). Extracted from the decompiled DTB (dtbo → `iodevs`): + +### rango channel map (DT `iodevs`, enums proven vs `cpif.ko`) +| /dev node | iod,ch | format | io_type | attrs | role | +|---|---|---|---|---|---| +| `umts_ipc0/1` | 0xf5 | FMT | MISC | 0x6000 | primary control — **held by RIL** | +| **`oem_ipc0..7`** | **0x81** | **FMT** | MISC | 0x2000 | **OEM/SIT control (best for us)** | +| `oem_test` | 0x89 | RAW | MISC | 0 | OEM test sink | +| `umts_router` | 0x15 | RAW | MISC | 0 | opaque relay (no command parser) | +| `umts_dm0` | 0x51 | RAW/DIAG | MISC | 0x4000 | **CP diagnostic egress (detection)** | +| `rmnet` | 0xb5 | RAW | NET | 0x2000 | packet data (30 ch) | +| `umts_rfs0` | 0x29 | RAW | MISC | 0 | remote fs | +| `umts_boot0` | 0xf1 | BOOT | BOOTDUMP | 0x4200 | modem boot/flash | +| `umts_rcs0/1`,`umts_wfc0/1`,`gnss_*`,`esim_tracer` | … | … | … | … | misc | + +Enum decodings (proven in `cpif.ko`): `iod,format {0=FMT,1=RAW,3=MULTI_RAW,4=BOOT}`; +`iod,io_type {0=BOOTDUMP,1=MISC(char dev),2=NET,3=DUMMY}` (jump table +`sipc5_init_io_device` @0xce78); `attrs` bit8 `0x100`=NO_LINK_HEADER, +bit13 `0x2000`=MULTI_CHANNEL. + +### Framing contract — **PROVEN** from `cpif.ko` (non-stripped) +cpif frames/deframes **SIPC5 itself**; userspace exchanges **bare payloads**: +- **TX** `ipc_write@0x1ad8`: `_copy_from_user` the buffer verbatim as payload, + `skb_push(4)`, then `sipc5_build_config@0xccc8` (config base **0xF8**) + + `sipc5_build_header@0xcd80` (`hdr[1]=iod,ch` from DT). On the wire a small + frame = **`F8 `**. The channel byte + header come + from the kernel — **never prepend your own**. +- **RX** `rx_fmt_ipc@0xd87c` / `rx_raw_misc@0xdde0`: `skb_pull` the SIPC5 header, + queue bare payload to `iod->rxq (+0x138)`; `ipc_read@0x18c4` returns **bare + binary payload** (no `\r\n`, no `OK/ERROR`). +- FMT channels carry a 7-bit transaction id (`sipc5_build_config` @0xcd60) → + request/reply correlation. RAW channels don't (why `oem_ipc` FMT beats + `umts_router` RAW for control). + +### Corrected driver design (proposed patch, not yet applied) +- `modem_paths[]` → `{umts_dm0, oem_ipc, umts_router}` (drop nonexistent AT ttys) +- `at_cmd()` → bare-payload I/O; **no** CRLF, **no** OK/ERROR scan +- add `sit_tx_enabled` gate, **default false** = passive/read-only, **zero + baseband TX** (honors the modem-sensitivity rule) +- same fix for `rc_shannon_cmd.c`; note it also needs the kprobe/kallsyms + bootstrap before it can load on stock GKI + +--- + +## 4. IMSI-catcher detection + band blocking — architecture + +Maximum control = a kernel module at the **cpif SIPC5 layer**, three stacked +capabilities: + +1. **Detection — DIAG (`umts_dm0`, ch 0x51), passive/read-only.** CP diagnostic + stream carries layer-3 (RRC/NAS), cell measurements, cipher/auth params, + paging. Flag: forced 2G/3G downgrade, null/weak cipher (A5/0, EEA0/NEA0), + IMSI/IMEI identity requests, silent paging/SMS, abnormal cell (LAC/TAC without + handover, MCC/MNC mismatch, implausible signal), skipped AKA. Reference: + **P1sec SCAT** parses Samsung/Shannon DM. +2. **Blocking — SIT over `oem_ipc` 0x81 / `umts_ipc` 0xf5 (FMT).** + `SET_ALLOWED_NETWORK_TYPE` → LTE+NR only; band-lock; null-cipher-off. Needs + the SIT opcodes (RE in progress). +3. **Max control — kprobe-hook `cpif`** (symbols in kallsyms): hook RX + (`rx_fmt_ipc`,`rx_raw_misc`) to see *all* AP↔CP frames; hook TX + (`ipc_write`/`sipc5_build_header`) to **veto/rewrite** commands so 2G/3G can't + be re-enabled behind us — a baseband IDS/firewall at the driver boundary. + +Build order: (1) passive DIAG detector now → (2) SIT blocking after opcode RE → +(3) cpif kprobe hooks. + +--- + +## 5. SIT / DIAG RE — in progress +Pulled read-only to `/home/snake/re/`: `rild_exynos`, `libsitril.so`, +`libril_sitril.so`, `libsit_oem.so`, `libsit_oem_proto.so`, +`libsitril-client.so`, `vendor.radio.protocol.sit.{base,stream}.so`. + +Control handlers confirmed in `libsitril.so` strings: +- RAT: `NETWORK_TYPE_BITMAP_LTE_ONLY` / `_LTE_WCDMA` / `_GSM_ONLY` … + (setAllowedNetworkType) +- Band: `DoSetBandMode` / `DoSetManualBandMode` / `DoQueryAvailableBandMode` +- Cipher: `IsNullCipherAndIntegrityEnabledHandler` (+ Set) + +**Fable RE workflow running** (`rango-sit-diag-re`) to extract: the on-wire SIT +frame layout (`vendor.radio.protocol.sit.stream.so`), the main/sub command IDs + +param encoding for RAT/band/cipher, and the Shannon DM/DIAG record framing (SCAT). +Output: SIT encoder spec + DIAG parser spec + proposed cellguard code blocks. + +--- + +## 6. Toolchain & artifact locations +| What | Where | +|---|---| +| cellguard source | `/home/snake/CellGuard/common/kmod/cellguard.c` | +| build pipeline | `/home/snake/CellGuard/common/kmod/build-stock-gki.sh` | +| stock kernel src (KDIR) | scratchpad `src/common` (@ SHA `6eb5b2a8c46b`) | +| cpif driver (RE, non-stripped) | scratchpad `re/cpif_factory.ko` | +| decompiled DT | scratchpad `re/alldts.txt` (`iodevs` @ line 4911) | +| SIT/RIL binaries | `/home/snake/re/` | +| Ghidra | `/home/snake/tools/samsung-dev/ghidra_12.0.4_PUBLIC/` (headless in `support/`) | +| RadioControl twin module | `/home/snake/RadioControl/common/kmod/rc_shannon_cmd.c` | + +--- + +## 7. Constraints (standing rules) +- **No device ops (adb/insmod/push) without explicit per-action permission.** +- **Never TX to the baseband without consent** — malformed OEM/FMT frames can + reset the modem; `setenforce` also bounces RIL. Default builds are passive. +- No AI attribution in any code/output. No stubs. `/home/snake` not `/tmp` + (Pi `/tmp` is RAM). Surgical edits, one change at a time. + +--- + +## 8. Next steps +1. Finish SIT/DIAG RE (workflow) → SIT encoder + DIAG parser specs. +2. Apply the corrected-channel/framing patch (passive/read-only default) → + rebuild → load via KSU path. +3. Add the Shannon-DIAG detector (SCAT-derived) → real IMSI-catcher detection. +4. After opcode verification, gate-enable SIT blocking (RAT/band/cipher). +5. Optional: cpif kprobe RX/TX hooks for full monitor + veto enforcement. +6. Port `rc_shannon_cmd.c` to the same I/O layer + kallsyms bootstrap. + +## 9. Backlog (deferred) +- **IMSI-paging blocker (toggle).** No exposed modem command suppresses IMSI-paged + responses (paging is baseband-autonomous). Buildable tiers: + 1. Force **IMSI/SUPI encryption** via SIT `DoSetCarrierInfoImsiEncryption` + (stops IMSI harvesting at the source) — available command, needs capture/verify. + 2. **Detect + react**: flag IMSI paging from captured frames → toggle triggers + detach / RAT-relock / alert. + 3. **True suppression**: modem.bin firmware patch to drop IMSI-paged responses + (deep, risky — separate effort). + +- **Full modem diagnostic-features access** (interactive DIAG/engineering mode, + band control, signaling readouts) is a **separate app** (RadioControl scope), + not CellGuard. CellGuard's raw CP-frame capture (`cgcap`) exists only to feed + detection. + +Related: device anti-forensics hardening plan → `docs/anti-forensics-hardening.md`. diff --git a/common/kmod/Makefile b/common/kmod/Makefile new file mode 100644 index 0000000..d943df8 --- /dev/null +++ b/common/kmod/Makefile @@ -0,0 +1,27 @@ +# CellGuard kernel module +# +# Cross-compile against the rango (Pixel 10 Pro Fold, Tensor G5) kernel. +# Expects KDIR pointing at a prepared kernel tree (6.6.x). +# +# export KDIR=/home/snake/RadioControl/build/rango-kernel +# export CROSS_COMPILE=aarch64-linux-gnu- +# export ARCH=arm64 +# make +# +# Output: cellguard.ko +# +# If KDIR is unset, falls back to the running kernel's build dir +# (only useful on a dev machine for sanity-compile). + +obj-m += cellguard.o + +KDIR ?= /lib/modules/$(shell uname -r)/build + +all: + $(MAKE) -C $(KDIR) M=$(PWD) modules + +clean: + $(MAKE) -C $(KDIR) M=$(PWD) clean + +install: + @echo "Copy cellguard.ko to device then 'insmod cellguard.ko'" diff --git a/common/kmod/build-stock-gki.sh b/common/kmod/build-stock-gki.sh new file mode 100755 index 0000000..5671631 --- /dev/null +++ b/common/kmod/build-stock-gki.sh @@ -0,0 +1,126 @@ +#!/usr/bin/env bash +# build-stock-gki.sh — build cellguard.ko against the STOCK Google GKI kernel +# that the target device is running, on an aarch64 build host (e.g. RPi5). +# +# Why this exists +# --------------- +# The device is a stock Pixel (rango / Tensor G5) running a stock GKI kernel: +# 6.6.102-android15-8-g6eb5b2a8c46b-ab14739656-4k (RANDSTRUCT_NONE, CFI_CLANG, +# MODVERSIONS, MODULE_SIG_PROTECT, LTO_NONE) +# +# For an out-of-tree module to LOAD there: +# 1. It must match the kernel ABI: same vermagic *flags* (the release string is +# ignored under MODVERSIONS) and matching symbol CRCs. => build against the +# exact stock source @ the build's git SHA + the build's vmlinux.symvers. +# 2. It must not import GKI *protected* symbols (kernel_read/kernel_write). The +# module resolves those at runtime via a kprobe->kallsyms bootstrap instead +# (see cellguard.c: cg_resolve_protected). Nothing to do here, just noting it. +# +# This does NOT require Google's signing key: MODULE_SIG_FORCE is off, so an +# unsigned module loads as long as it imports no protected symbols. +# +# Usage +# ----- +# ./build-stock-gki.sh # auto-detect build info from adb device +# BID=14739656 KREL=6.6.102-android15-8-g6eb5b2a8c46b-ab14739656-4k \ +# KSHA=6eb5b2a8c46b6393ccde67a51f2e2f56277791c6 KBRANCH=android15-6.6-2025-10 \ +# ./build-stock-gki.sh # or pin everything explicitly +# +# Requires (Debian/RPiOS): clang lld llvm bc bison flex libssl-dev libelf-dev git curl +set -euo pipefail + +# ---- locations ------------------------------------------------------------- +HERE="$(cd "$(dirname "$0")" && pwd)" # .../CellGuard/common/kmod +WORK="${WORK:-$HERE/.gki-build}" # persistent build workspace +SRC="$WORK/common" # kernel source tree +ART="$WORK/artifacts" # downloaded GKI artifacts +mkdir -p "$WORK" "$ART" + +# ---- 1. determine target build -------------------------------------------- +# KREL = full kernel release; BID = ci.android.com build number; KSHA = kernel +# common git sha; KBRANCH = the kernel/common branch to fetch the sha from. +if [ -z "${KREL:-}" ] && command -v adb >/dev/null && adb get-state >/dev/null 2>&1; then + KREL="$(adb shell 'uname -r' | tr -d '\r')" + echo "[*] device kernel release: $KREL" +fi +: "${KREL:?set KREL (e.g. 6.6.102-android15-8-g-ab-4k) or connect adb}" + +# derive BID (ab#######) and short sha (g############) from the release string +BID="${BID:-$(printf '%s' "$KREL" | sed -nE 's/.*-ab([0-9]+)-.*/\1/p')}" +GSHORT="$(printf '%s' "$KREL" | sed -nE 's/.*-g([0-9a-f]{12,}).*/\1/p')" +: "${BID:?could not derive BID from KREL; pass BID=...}" +: "${KBRANCH:=android15-6.6}" # override if the build used a dated branch, e.g. android15-6.6-2025-10 + +echo "[*] BID=$BID gsha=$GSHORT branch=$KBRANCH" + +# ---- 2. download stock GKI artifacts for this exact build ------------------ +# kernel-headers.tar.gz (source headers), vmlinux.symvers (symbol CRCs = our +# Module.symvers), abi_symbollist.raw (KMI allow-list), manifest (pins KSHA). +RAW="https://ci.android.com/builds/submitted/${BID}/kernel_aarch64/latest/raw" +fetch() { # fetch -> $ART/ + [ -s "$ART/$1" ] && { echo " cached $1"; return; } + echo " download $1" + curl -fsSL -o "$ART/$1" "$RAW/$1" +} +echo "[*] fetching GKI artifacts for ab$BID" +fetch "vmlinux.symvers" +fetch "abi_symbollist.raw" +fetch "manifest_${BID}.xml" +fetch "kernel-headers.tar.gz" # not strictly needed (we clone full source) but handy + +# exact kernel/common sha: prefer manifest, fall back to KSHA env +if [ -z "${KSHA:-}" ]; then + KSHA="$(sed -nE 's/.*path="common"[^>]*revision="([0-9a-f]{40})".*/\1/p' "$ART/manifest_${BID}.xml" | head -1)" +fi +: "${KSHA:?could not determine kernel sha; pass KSHA=<40hex>}" +echo "[*] kernel/common sha: $KSHA" + +# ---- 3. get the exact stock source ---------------------------------------- +if [ ! -d "$SRC/.git" ]; then + echo "[*] cloning kernel/common (shallow) ..." + git clone --depth 1 -b "$KBRANCH" \ + https://android.googlesource.com/kernel/common "$SRC" +fi +if [ "$(git -C "$SRC" rev-parse HEAD)" != "$KSHA" ]; then + echo "[*] fetching exact sha $KSHA ..." + git -C "$SRC" fetch --depth 1 origin "$KSHA" + git -C "$SRC" checkout -q "$KSHA" +fi +echo "[*] source at $(git -C "$SRC" rev-parse HEAD)" + +# ---- 4. configure with the DEVICE's real .config -------------------------- +# Pull /proc/config.gz from the device for a byte-exact config (RANDSTRUCT off, +# CFI on, MODVERSIONS on, etc). Fall back to a saved copy if adb is unavailable. +if command -v adb >/dev/null && adb get-state >/dev/null 2>&1; then + echo "[*] pulling device .config" + adb exec-out 'su -c "cat /proc/config.gz"' 2>/dev/null | zcat > "$SRC/.config" \ + || adb exec-out 'cat /proc/config.gz' | zcat > "$SRC/.config" +elif [ -s "$HERE/device.config" ]; then + cp "$HERE/device.config" "$SRC/.config" +else + echo "!! no .config: connect adb or place device.config next to this script" >&2 + exit 1 +fi +cp "$ART/vmlinux.symvers" "$SRC/Module.symvers" # real CRCs for MODVERSIONS + +# ---- 5. prepare + build ---------------------------------------------------- +# Native aarch64 clang (Debian) — kCFI type-IDs are ABI-stable across clang +# versions, so this interoperates with the device's clang-18 GKI kernel. +export ARCH=arm64 LLVM=1 +JOBS="${JOBS:-$(nproc)}" +echo "[*] olddefconfig + modules_prepare (-j$JOBS) ..." +make -C "$SRC" -j"$JOBS" olddefconfig >/dev/null +make -C "$SRC" -j"$JOBS" modules_prepare + +echo "[*] building module ..." +make -C "$SRC" -j"$JOBS" M="$HERE" modules + +echo +echo "[✓] built: $HERE/cellguard.ko" +modinfo "$HERE/cellguard.ko" | grep -E 'vermagic|name' +echo +echo "Load it via the KernelSU module path (service.sh does this on boot):" +echo " adb push $HERE/cellguard.ko /data/local/tmp/cellguard.ko" +echo " adb shell su -c 'cp /data/local/tmp/cellguard.ko \\" +echo " /data/adb/modules/cellguard/common/kmod/cellguard.ko && \\" +echo " insmod /data/adb/modules/cellguard/common/kmod/cellguard.ko'" diff --git a/common/kmod/cellguard-6.6.102-android15-stock.ko b/common/kmod/cellguard-6.6.102-android15-stock.ko new file mode 100644 index 0000000000000000000000000000000000000000..246c0849d07aa15e4148878f436389eb71982ab0 GIT binary patch literal 270288 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 m7#{-OLD%_Om$qdv?32FdPREd11XA82&ws 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 literal 0 HcmV?d00001 diff --git a/common/kmod/cellguard.c b/common/kmod/cellguard.c new file mode 100644 index 0000000..805db6e --- /dev/null +++ b/common/kmod/cellguard.c @@ -0,0 +1,1080 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * cellguard.ko — Kernel-enforced cellular security policy + * + * Blocks 2G (GERAN) and null-cipher connections, forces the modem to + * register only on LTE (E-UTRAN) and 5G-SA (NR). A watchdog kthread + * polls registration/cipher state and re-asserts the lock within ~1s + * of any downgrade attempt. + * + * /dev/cellguard — character device (write: "on" | "off" | + * "release" | "scan"; ioctls below) + * /proc/cellguard/status — human-readable state + * /proc/cellguard/cells — last scan result (from AT+COPS=?) + * + * Target: Pixel 10 Pro Fold (rango), Tensor G5, Shannon 5400 modem. + * The module opens the tertiary Shannon AT channel (/dev/umts_atc1) + * so it does not race RIL (umts_router) or RadioControl (umts_atc0). + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("snake"); +MODULE_DESCRIPTION("Block 2G / null-cipher cellular; force highest-security RAT"); +MODULE_VERSION("1.0"); + +MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver); + +#define DEVICE_NAME "cellguard" +#define CLASS_NAME "cellguard" + +#define CMD_BUF_SIZE 512 +#define RESP_BUF_SIZE 8192 +#define SCAN_BUF_SIZE 16000 + +/* ioctl */ +#define CG_MAGIC 'C' +#define CG_IOC_ENABLE _IO(CG_MAGIC, 1) +#define CG_IOC_DISABLE _IO(CG_MAGIC, 2) +#define CG_IOC_RELEASE _IO(CG_MAGIC, 3) +#define CG_IOC_GET_STATUS _IOR(CG_MAGIC, 4, struct cg_status) +#define CG_IOC_SCAN _IOR(CG_MAGIC, 5, struct cg_scan) +#define CG_IOC_SET_POLICY _IOW(CG_MAGIC, 6, struct cg_policy) + +struct cg_status { + int32_t enabled; + int32_t modem_ok; + char modem_path[64]; + char rat[16]; /* "LTE", "NR", "UTRAN", "GERAN", "?" */ + int32_t rat_code; /* 0=UNK 2=GSM 3=UTRAN 7=LTE 13=NR */ + int32_t cipher_known; + int32_t cipher_null; + char operator_name[32]; + char mcc_mnc[16]; + int32_t rsrp; /* LTE/NR dBm (0 if unknown) */ + int32_t tx_pwr; + uint64_t downgrades_blocked; + uint64_t relocks; + uint64_t polls; + }; +struct cg_scan { + char data[SCAN_BUF_SIZE]; + uint32_t data_len; + int32_t status; /* 0=OK, negative=error */ +}; + +struct cg_policy { + int32_t block_2g; /* 1=block GERAN (default) */ + int32_t block_3g; /* 1=block UTRAN (default) */ + int32_t block_null_cipher; /* 1=block A5/0 (default) */ + int32_t poll_interval_ms; /* default 1500 */ +}; + +/* + * Per-carrier LTE/NR band profile. Band numbers terminate with 0. + * Masks are built from these at push time. + */ +struct carrier_profile { + char name[16]; + int lte_bands[32]; + int nr_bands[32]; +}; + +/* US carriers. Band sets as of 2026 deployment data. */ +static const struct carrier_profile carrier_profiles[] = { + { "none", {0}, {0} }, + { "tmobile", {2,4,5,12,25,41,66,71,0}, {25,41,66,71,258,260,261,0} }, + { "verizon", {2,4,5,13,46,48,66,0}, {2,5,66,77,260,261,0} }, + { "att", {2,4,5,12,14,17,29,30,66,0}, {2,5,14,30,66,77,260,261,0} }, + { "uscellular", {2,4,5,12,25,26,66,71,0}, {66,71,77,0} }, + { "dish", {29,66,70,71,0}, {29,66,70,71,0} }, + { "cricket", {2,4,5,12,14,17,29,30,66,0}, {2,5,14,30,66,77,260,261,0} }, + { "metro", {2,4,5,12,25,41,66,71,0}, {25,41,66,71,258,260,261,0} }, + { "googlefi", {2,4,5,12,25,41,66,71,0}, {25,41,66,71,258,260,261,0} }, + { "generic_us", {2,4,5,12,13,14,17,25,26,29,30,41,46,48,66,71,0}, + {2,5,14,25,30,41,66,70,71,77,78,260,261,0} }, +}; +#define N_CARRIERS ARRAY_SIZE(carrier_profiles) + +/* Shannon AT channels, in order of preference. + * umts_atc1 is tertiary — not claimed by RIL or RadioControl. + */ +static const char *modem_paths[] = { + "/dev/umts_atc1", + "/dev/nr_atc0", + "/dev/umts_atc0", + "/dev/umts_router", + "/dev/umts_router0", + NULL +}; + +static int major; +static struct class *cg_class; +static struct cdev cg_cdev; +static struct device *cg_dev; +static struct file *modem_filp; +static char modem_path_used[64]; +static DEFINE_MUTEX(at_mutex); + +static struct task_struct *watchdog_thread; +static struct cg_policy policy = { + .block_2g = 1, + .block_3g = 1, + .block_null_cipher = 1, + .poll_interval_ms = 1500, +}; +static bool guard_enabled; + +/* Current carrier + band-lock state */ +static int current_carrier; /* index into carrier_profiles; 0=none */ +static int bands_locked; /* 1 if last push returned OK */ +static char bands_push_method[32]; /* which AT form the modem accepted */ + +/* Cached state (updated by watchdog) */ +static char cur_rat[16] = "?"; +static int cur_rat_code; +static int cur_cipher_known; +static int cur_cipher_null; +static char cur_operator[32] = ""; +static char cur_mcc_mnc[16] = ""; +static int cur_rsrp; +static int cur_tx_pwr = -140; +static int cur_pwr_known; +static uint64_t stat_downgrades; +static uint64_t stat_relocks; +static uint64_t stat_polls; + +/* Last AT+COPS=? scan result (raw) */ +static char scan_buf[SCAN_BUF_SIZE]; +static int scan_len; +static DEFINE_MUTEX(scan_mutex); + +/* Global AT response buffer to avoid stack frame overflow */ +static char *at_resp_buf; +#define AT_RESP_SIZE RESP_BUF_SIZE + +/* ---------- GKI protected-symbol resolution ---------- + * + * Stock GKI (CONFIG_MODULE_SIG_PROTECT) refuses to load an *unsigned* + * module that link-imports a protected core symbol. kernel_read() and + * kernel_write() are both protected, so importing them yields + * "Protected symbol: kernel_write (err -13)" at insmod time. + * + * Instead we resolve them at load time via kallsyms. The only link-time + * dependency this adds is the kprobe API (register/unregister_kprobe), + * which is part of the stable vendor KMI. Net effect: the module loads + * unsigned on any stock GKI build, and is portable across devices/builds + * because nothing protected is bound at link time. + */ +typedef ssize_t (*cg_kernel_read_t)(struct file *, void *, size_t, loff_t *); +typedef ssize_t (*cg_kernel_write_t)(struct file *, const void *, size_t, + loff_t *); +static cg_kernel_read_t cg_kernel_read; +static cg_kernel_write_t cg_kernel_write; + +/* Obtain kallsyms_lookup_name() (itself unexported) via a one-shot kprobe. */ +static unsigned long cg_lookup_name(const char *name) +{ + static unsigned long (*kln)(const char *name); + + if (!kln) { + struct kprobe kp = { .symbol_name = "kallsyms_lookup_name" }; + int ret = register_kprobe(&kp); + + if (ret < 0) { + pr_err("cellguard: kprobe bootstrap failed (%d)\n", ret); + return 0; + } + kln = (void *)kp.addr; + unregister_kprobe(&kp); + } + return kln ? kln(name) : 0; +} + +static int cg_resolve_protected(void) +{ + cg_kernel_read = (cg_kernel_read_t) cg_lookup_name("kernel_read"); + cg_kernel_write = (cg_kernel_write_t)cg_lookup_name("kernel_write"); + if (!cg_kernel_read || !cg_kernel_write) { + pr_err("cellguard: failed to resolve kernel_read/kernel_write\n"); + return -ENOENT; + } + return 0; +} + +/* ---------- modem I/O ---------- */ + +static struct file *open_modem(void) +{ + struct file *f; + struct path path; + int i, ret; + + for (i = 0; modem_paths[i]; i++) { + ret = kern_path(modem_paths[i], LOOKUP_FOLLOW, &path); + if (ret) + continue; + + f = dentry_open(&path, O_RDWR | O_NONBLOCK, current_cred()); + path_put(&path); + + if (!IS_ERR(f)) { + strscpy(modem_path_used, modem_paths[i], + sizeof(modem_path_used)); + pr_info("cellguard: using AT channel %s\n", + modem_paths[i]); + return f; + } + } + return ERR_PTR(-ENODEV); +} + +/* + * Send one AT command, collect response up to OK/ERROR or timeout. + * Must be called with at_mutex held. + */ +static int at_cmd(const char *cmd, char *resp, int resp_size, int timeout_ms) +{ + char fullcmd[CMD_BUF_SIZE]; + loff_t pos = 0; + ssize_t w, r; + int elapsed = 0, total = 0; + int clen; + + if (!modem_filp || IS_ERR(modem_filp)) + return -ENODEV; + + clen = scnprintf(fullcmd, sizeof(fullcmd), "%s\r\n", cmd); + w = cg_kernel_write(modem_filp, fullcmd, clen, &pos); + if (w < 0) + return (int)w; + + memset(resp, 0, resp_size); + pos = 0; + + while (elapsed < timeout_ms && total < resp_size - 1) { + r = cg_kernel_read(modem_filp, resp + total, + resp_size - 1 - total, &pos); + if (r > 0) { + total += r; + resp[total] = '\0'; + if (strstr(resp, "\r\nOK\r\n") || + strstr(resp, "\r\nERROR\r\n") || + strstr(resp, "+CME ERROR:") || + strstr(resp, "+CMS ERROR:")) + break; + } else { + msleep(50); + elapsed += 50; + } + } + + if (total == 0) + return -ETIMEDOUT; + return total; +} + +/* ---------- band mask helpers ---------- */ + +/* + * Build a hex bitmap from a zero-terminated band list. Band N maps to + * bit (N-1). Output is up to 64 hex digits (256 bits), leading zeros + * trimmed. Returns the length written. + */ +static int hex_mask_from_bands(const int *bands, char *out, int out_sz) +{ + uint64_t mask[4] = { 0, 0, 0, 0 }; + int i, top, written; + + for (i = 0; bands[i]; i++) { + int b = bands[i] - 1; + if (b < 0 || b >= 256) + continue; + mask[b >> 6] |= 1ULL << (b & 63); + } + + /* Find highest non-zero word to trim leading zeros */ + for (top = 3; top > 0 && mask[top] == 0; top--) ; + + if (top == 0) + written = scnprintf(out, out_sz, "%llx", mask[0]); + else if (top == 1) + written = scnprintf(out, out_sz, "%llx%016llx", + mask[1], mask[0]); + else if (top == 2) + written = scnprintf(out, out_sz, "%llx%016llx%016llx", + mask[2], mask[1], mask[0]); + else + written = scnprintf(out, out_sz, "%llx%016llx%016llx%016llx", + mask[3], mask[2], mask[1], mask[0]); + return written; +} + +/* + * Build a comma-separated list of band numbers (for AT forms that + * accept a list instead of a bitmap). + */ +static int list_from_bands(const int *bands, char *out, int out_sz) +{ + int i, n = 0; + out[0] = '\0'; + for (i = 0; bands[i]; i++) { + int w = scnprintf(out + n, out_sz - n, + i == 0 ? "%d" : ",%d", bands[i]); + if (w <= 0) + break; + n += w; + } + return n; +} + +/* + * Try several known Shannon band-lock AT command forms in order. Stops + * at the first that returns OK. Records which form worked so status + * output can show it. + * + * Returns 1 if any form was accepted, 0 otherwise. Called with + * at_mutex held. + */ +static int try_band_lock(const char *rat_tag, int rat_id, + const int *bands) +{ + char mask_hex[80]; + char mask_list[256]; + char cmd[320]; + int i, n; + + /* Empty band list -> nothing to do. */ + if (!bands[0]) + return 0; + + hex_mask_from_bands(bands, mask_hex, sizeof(mask_hex)); + list_from_bands(bands, mask_list, sizeof(mask_list)); + + struct variant { + const char *fmt; + bool use_list; + bool use_property; + }; + static const struct variant lte_variants[] = { + { "AT+GOOGSETPROPERTY=\"NASU.LTE Band Priority\",\"%s\"", true, true }, + { "AT+LBANDSEL=0x%s", false, false }, + { "AT+LBANDSEL=%s", false, false }, + { "AT+BANDIND=%s", false, false }, + { "AT$BANDSEL=7,%s", false, false }, + { "AT$BANDLOCK=7,%s", false, false }, + { "AT+BANDSEL=7,%s", true, false }, + { "AT+QCFG=\"band\",0,%s,0,1", false, false }, + { NULL, false, false } + }; + static const struct variant nr_variants[] = { + { "AT+NRBANDSEL=0x%s", false, false }, + { "AT+NRBANDSEL=%s", false, false }, + { "AT+NRBANDIND=%s", false, false }, + { "AT$BANDSEL=12,%s", false, false }, + { "AT$BANDLOCK=12,%s", false, false }, + { "AT+BANDSEL=12,%s", true, false }, + { "AT+QCFG=\"nr5g_band\",%s", false, false }, + { NULL, false, false } + }; + const struct variant *variants = + (rat_id == 12) ? nr_variants : lte_variants; + + for (i = 0; variants[i].fmt; i++) { + const char *arg = variants[i].use_list ? mask_list : mask_hex; + scnprintf(cmd, sizeof(cmd), variants[i].fmt, arg); + + n = at_cmd(cmd, at_resp_buf, AT_RESP_SIZE, 3000); + if (n > 0 && (strstr(at_resp_buf, "\r\nOK\r\n") || + strstr(at_resp_buf, "\nOK\n"))) { + pr_info("cellguard: %s band-lock via '%s' accepted\n", + rat_tag, variants[i].fmt); + snprintf(bands_push_method, sizeof(bands_push_method), + "%s:%s", rat_tag, variants[i].fmt); + return 1; + } + } + return 0; +} + +static void push_band_lock(void) +{ + const struct carrier_profile *p; + int lte_ok, nr_ok; + + bands_locked = 0; + bands_push_method[0] = '\0'; + + if (current_carrier <= 0 || current_carrier >= N_CARRIERS) + return; + if (!modem_filp) + return; + + p = &carrier_profiles[current_carrier]; + + /* at_mutex is held by the caller (push_lock_policy). */ + lte_ok = try_band_lock("LTE", 7, p->lte_bands); + nr_ok = try_band_lock("NR", 12, p->nr_bands); + + if (lte_ok || nr_ok) + bands_locked = 1; +} + +/* ---------- policy push ---------- */ + +/* + * Lock modem to LTE+NR, enable ciphering-indication URCs, and keep + * the 2G/3G RATs disabled. The commands below are 3GPP-standard + * where possible, with Shannon-specific fallbacks. + * + * AT+WS46=28 — select E-UTRAN + NR (TS 27.007) + * AT+CEMODE=2 — LTE/NR PS+CS only (Samsung NVRAM hint) + * AT+CGDCONT... — not touched + * AT$CIPHERINGIND=1 — enable URC on cipher-algorithm change + * AT+CSCS="GSM" — ensure ASCII responses + * + * We do NOT modify SIM/network search lists; user can still roam. + */ +static void push_lock_policy(void) +{ + int ws46; + + if (!modem_filp) + return; + + /* Compose WS46 value from policy: + * 25 = UTRAN+E-UTRAN+NR (3G allowed) + * 28 = E-UTRAN+NR only (hardened, default) + * 29 = GERAN+UTRAN+E-UTRAN (2G allowed) + * 30 = E-UTRAN only + * 31 = NR only + */ + if (policy.block_2g && policy.block_3g) + ws46 = 28; + else if (policy.block_2g && !policy.block_3g) + ws46 = 25; + else + ws46 = 22; /* default (all) */ + + mutex_lock(&at_mutex); + + at_cmd("ATE0", at_resp_buf, AT_RESP_SIZE, 1000); + at_cmd("AT+CMEE=1", at_resp_buf, AT_RESP_SIZE, 1000); + at_cmd("AT+CSCS=\"GSM\"", at_resp_buf, AT_RESP_SIZE, 1000); + + { + char cmd[32]; + scnprintf(cmd, sizeof(cmd), "AT+WS46=%d", ws46); + at_cmd(cmd, at_resp_buf, AT_RESP_SIZE, 3000); + } + + /* Shannon-specific: ciphering indication URC */ + at_cmd("AT$CIPHERINGIND=1", at_resp_buf, AT_RESP_SIZE, 1000); + at_cmd("AT+CIPHERINGIND=1", at_resp_buf, AT_RESP_SIZE, 1000); + + /* Google/Pixel specific: Null cipher kill switch */ + if (policy.block_null_cipher) + at_cmd("AT+GOOGSETPROPERTY=\"NASU.NULL.CIPHER.INTEGRITY.CTRL\",\"0\"", at_resp_buf, AT_RESP_SIZE, 1000); + else + at_cmd("AT+GOOGSETPROPERTY=\"NASU.NULL.CIPHER.INTEGRITY.CTRL\",\"1\"", at_resp_buf, AT_RESP_SIZE, 1000); + + /* Enable registration URCs so we see RAT changes fast */ + at_cmd("AT+CREG=2", at_resp_buf, AT_RESP_SIZE, 1000); + at_cmd("AT+CGREG=2", at_resp_buf, AT_RESP_SIZE, 1000); + at_cmd("AT+CEREG=2", at_resp_buf, AT_RESP_SIZE, 1000); + at_cmd("AT+C5GREG=2", at_resp_buf, AT_RESP_SIZE, 1000); + + /* Apply carrier band lock BEFORE the CFUN cycle so the radio + * comes back up with the restricted band set active. + */ + push_band_lock(); + + /* Kick the radio so the new WS46 takes effect */ + at_cmd("AT+CFUN=4", at_resp_buf, AT_RESP_SIZE, 3000); + msleep(300); + at_cmd("AT+CFUN=1", at_resp_buf, AT_RESP_SIZE, 5000); + + stat_relocks++; + mutex_unlock(&at_mutex); +} + +/* + * Release the lock: reselect all RATs so normal user preference + * resumes. Called on disable/unload. + */ +static void release_lock_policy(void) +{ + if (!modem_filp) + return; + + mutex_lock(&at_mutex); + at_cmd("AT+WS46=22", at_resp_buf, AT_RESP_SIZE, 3000); + at_cmd("AT+CFUN=4", at_resp_buf, AT_RESP_SIZE, 3000); + msleep(300); + at_cmd("AT+CFUN=1", at_resp_buf, AT_RESP_SIZE, 5000); + mutex_unlock(&at_mutex); +} + +/* ---------- state polling ---------- */ + +static int parse_int_field(const char *s, int field, int *out) +{ + int i = 0; + const char *p = s; + + while (*p && i < field) { + if (*p++ == ',') + i++; + } + while (*p == ' ' || *p == '"') + p++; + if (!isdigit(*p) && *p != '-') + return -1; + *out = simple_strtol(p, NULL, 10); + return 0; +} + +/* + * +CREG AcT codes (TS 27.007): + * 0 GSM (2G) + * 1 GSM Compact (2G) + * 2 UTRAN (3G) + * 3 EDGE (2G) + * 4 UTRAN/HSDPA (3G) + * 5 UTRAN/HSUPA (3G) + * 6 UTRAN/HSPA+ (3G) + * 7 E-UTRAN (4G) + * 8 EC-GSM-IoT (2G IoT) + * 9 E-UTRAN NB-S1 (4G IoT) + * 10 E-UTRAN (4G) + * 11 NR connected to 5GC (5G-SA) + * 13 NR (5G-SA) + */ +static void classify_rat(int act, char *name, int name_sz, int *is_2g, int *is_3g) +{ + *is_2g = 0; + *is_3g = 0; + switch (act) { + case 0: case 1: case 3: case 8: + strscpy(name, "GERAN", name_sz); *is_2g = 1; break; + case 2: case 4: case 5: case 6: + strscpy(name, "UTRAN", name_sz); *is_3g = 1; break; + case 7: case 9: case 10: + strscpy(name, "LTE", name_sz); break; + case 11: case 13: + strscpy(name, "NR", name_sz); break; + default: + strscpy(name, "?", name_sz); break; + } +} + +/* + * One poll cycle. Returns 1 if a downgrade was detected and relock + * should be pushed, 0 otherwise. + */ +static int poll_once(void) +{ + char *p; + int act = -1, stat = -1; + int is_2g = 0, is_3g = 0; + int downgraded = 0; + int n; + + if (!modem_filp) + return 0; + + mutex_lock(&at_mutex); + stat_polls++; + + /* Prefer +C5GREG, fall back to +CEREG, then +CREG */ + n = at_cmd("AT+C5GREG?", at_resp_buf, AT_RESP_SIZE, 1500); + if (n > 0 && (p = strstr(at_resp_buf, "+C5GREG:"))) { + if (parse_int_field(p + 8, 0, &stat) == 0 && + parse_int_field(p + 8, 3, &act) == 0 && + (stat == 1 || stat == 5)) { + /* got NR registration */ + } else { + act = -1; + } + } + if (act < 0) { + n = at_cmd("AT+CEREG?", at_resp_buf, AT_RESP_SIZE, 1500); + if (n > 0 && (p = strstr(at_resp_buf, "+CEREG:"))) { + if (parse_int_field(p + 7, 0, &stat) == 0 && + parse_int_field(p + 7, 3, &act) == 0 && + (stat == 1 || stat == 5)) { + /* registered */ + } else { + act = -1; + } + } + } + if (act < 0) { + n = at_cmd("AT+CREG?", at_resp_buf, AT_RESP_SIZE, 1500); + if (n > 0 && (p = strstr(at_resp_buf, "+CREG:"))) { + if (parse_int_field(p + 6, 0, &stat) == 0 && + parse_int_field(p + 6, 3, &act) == 0 && + (stat == 1 || stat == 5)) { + /* registered on legacy */ + } else { + act = -1; + } + } + } + + if (act >= 0) { + classify_rat(act, cur_rat, sizeof(cur_rat), &is_2g, &is_3g); + cur_rat_code = act; + if ((policy.block_2g && is_2g) || + (policy.block_3g && is_3g)) + downgraded = 1; + } else { + strscpy(cur_rat, "?", sizeof(cur_rat)); + cur_rat_code = 0; + } + + /* Operator name + MCC/MNC */ + n = at_cmd("AT+COPS?", at_resp_buf, AT_RESP_SIZE, 2000); + if (n > 0 && (p = strstr(at_resp_buf, "+COPS:"))) { + char *q = strchr(p, '"'); + if (q) { + char *e; + q++; + e = strchr(q, '"'); + if (e) { + int len = min_t(int, (int)(e - q), + (int)sizeof(cur_operator) - 1); + memcpy(cur_operator, q, len); + cur_operator[len] = '\0'; + } + } + } + n = at_cmd("AT+COPS=3,2", at_resp_buf, AT_RESP_SIZE, 1500); + (void)n; + n = at_cmd("AT+COPS?", at_resp_buf, AT_RESP_SIZE, 1500); + if (n > 0 && (p = strstr(at_resp_buf, "+COPS:"))) { + char *q = strchr(p, '"'); + if (q) { + char *e; + q++; + e = strchr(q, '"'); + if (e) { + int len = min_t(int, (int)(e - q), + (int)sizeof(cur_mcc_mnc) - 1); + memcpy(cur_mcc_mnc, q, len); + cur_mcc_mnc[len] = '\0'; + } + } + } + /* Restore long alpha format for next poll */ + at_cmd("AT+COPS=3,0", at_resp_buf, AT_RESP_SIZE, 1000); + + /* Signal (LTE/NR): +CESQ rsrp is field 5 (0..97), dBm = -140 + v */ + n = at_cmd("AT+CESQ", at_resp_buf, AT_RESP_SIZE, 1500); + if (n > 0 && (p = strstr(at_resp_buf, "+CESQ:"))) { + int rsrp_raw; + if (parse_int_field(p + 6, 5, &rsrp_raw) == 0 && rsrp_raw < 97) + cur_rsrp = -140 + rsrp_raw; + } + + /* Google specific: TX power */ + cur_pwr_known = 0; + cur_tx_pwr = -140; + n = at_cmd("AT+GOOGGETTXPWR", at_resp_buf, AT_RESP_SIZE, 1500); + if (n > 0 && (p = strstr(at_resp_buf, "+GOOGGETTXPWR:"))) { + /* Format: +GOOGGETTXPWR: " -12.5" or similar */ + char *q = strchr(p, '"'); + if (q) { + cur_pwr_known = 1; + cur_tx_pwr = (int)simple_strtol(q + 1, NULL, 10); + } + } + + /* Cipher check — Shannon $CIPHERINGIND or 3GPP (rarely supported). + * We mark "unknown" if the modem doesn't expose it; downgrade to + * 2G is the practical null-cipher indicator we care about. + */ + cur_cipher_known = 0; + cur_cipher_null = 0; + n = at_cmd("AT$CIPHERINGIND?", at_resp_buf, AT_RESP_SIZE, 1500); + if (n > 0 && (p = strstr(at_resp_buf, "$CIPHERINGIND:"))) { + int ind; + if (parse_int_field(p + 14, 0, &ind) == 0) { + cur_cipher_known = 1; + /* ind==0 => no ciphering / weak cipher */ + if (ind == 0) { + cur_cipher_null = 1; + if (policy.block_null_cipher) + downgraded = 1; + } + } + } + + if (downgraded) + stat_downgrades++; + + mutex_unlock(&at_mutex); + return downgraded; +} + +static int watchdog_fn(void *data) +{ + while (!kthread_should_stop()) { + if (guard_enabled) { + if (poll_once()) + push_lock_policy(); + } + msleep(policy.poll_interval_ms > 0 ? + policy.poll_interval_ms : 1500); + } + return 0; +} + +/* ---------- scan ---------- */ + +static int run_scan(void) +{ + char *buf; + int n; + + buf = kmalloc(SCAN_BUF_SIZE, GFP_KERNEL); + if (!buf) + return -ENOMEM; + + mutex_lock(&at_mutex); + /* AT+COPS=? is slow (up to 180s on cold SIM) */ + n = at_cmd("AT+COPS=?", buf, SCAN_BUF_SIZE, 180000); + mutex_unlock(&at_mutex); + + if (n > 0) { + mutex_lock(&scan_mutex); + memcpy(scan_buf, buf, n); + scan_len = n; + mutex_unlock(&scan_mutex); + } + kfree(buf); + return n; +} + +/* ---------- chardev / ioctl ---------- */ + +static ssize_t cg_write(struct file *f, const char __user *u, size_t n, loff_t *ppos) +{ + char cmd[32]; + size_t len = min(n, sizeof(cmd) - 1); + + if (copy_from_user(cmd, u, len)) + return -EFAULT; + cmd[len] = '\0'; + while (len > 0 && (cmd[len-1] == '\n' || cmd[len-1] == '\r' || + cmd[len-1] == ' ')) + cmd[--len] = '\0'; + + if (!strcmp(cmd, "on")) { + guard_enabled = true; + push_lock_policy(); + } else if (!strcmp(cmd, "off") || !strcmp(cmd, "release")) { + guard_enabled = false; + release_lock_policy(); + } else if (!strcmp(cmd, "scan")) { + run_scan(); + } else if (!strcmp(cmd, "relock")) { + push_lock_policy(); + } else if (!strncmp(cmd, "carrier ", 8)) { + const char *name = cmd + 8; + int i, found = -1; + for (i = 0; i < N_CARRIERS; i++) { + if (!strcmp(name, carrier_profiles[i].name)) { + found = i; + break; + } + } + if (found < 0) + return -EINVAL; + current_carrier = found; + if (guard_enabled) { + /* Re-push full policy so bands apply immediately + * (CFUN cycle is needed for band changes). */ + push_lock_policy(); + } + } else { + return -EINVAL; + } + return (ssize_t)n; +} + +static long cg_ioctl(struct file *f, unsigned int cmd, unsigned long arg) +{ + switch (cmd) { + case CG_IOC_ENABLE: + guard_enabled = true; + push_lock_policy(); + return 0; + case CG_IOC_DISABLE: + guard_enabled = false; + release_lock_policy(); + return 0; + case CG_IOC_RELEASE: + release_lock_policy(); + return 0; + case CG_IOC_GET_STATUS: { + struct cg_status s; + + memset(&s, 0, sizeof(s)); + s.enabled = guard_enabled ? 1 : 0; + s.modem_ok = (modem_filp && !IS_ERR(modem_filp)) ? 1 : 0; + strscpy(s.modem_path, modem_path_used, sizeof(s.modem_path)); + strscpy(s.rat, cur_rat, sizeof(s.rat)); + s.rat_code = cur_rat_code; + s.cipher_known = cur_cipher_known; + s.cipher_null = cur_cipher_null; + strscpy(s.operator_name, cur_operator, sizeof(s.operator_name)); + strscpy(s.mcc_mnc, cur_mcc_mnc, sizeof(s.mcc_mnc)); + s.rsrp = cur_rsrp; + s.tx_pwr = cur_pwr_known ? cur_tx_pwr : -140; + s.downgrades_blocked = stat_downgrades; + s.relocks = stat_relocks; + s.polls = stat_polls; + if (copy_to_user((void __user *)arg, &s, sizeof(s))) + return -EFAULT; + return 0; + } + case CG_IOC_SCAN: { + struct cg_scan *sc; + int n; + + sc = kmalloc(sizeof(*sc), GFP_KERNEL); + if (!sc) + return -ENOMEM; + memset(sc, 0, sizeof(*sc)); + + n = run_scan(); + if (n < 0) { + sc->status = n; + } else { + mutex_lock(&scan_mutex); + sc->data_len = min_t(uint32_t, scan_len, + SCAN_BUF_SIZE - 1); + memcpy(sc->data, scan_buf, sc->data_len); + sc->data[sc->data_len] = '\0'; + mutex_unlock(&scan_mutex); + sc->status = 0; + } + + if (copy_to_user((void __user *)arg, sc, sizeof(*sc))) { + kfree(sc); + return -EFAULT; + } + kfree(sc); + return 0; + } + case CG_IOC_SET_POLICY: { + struct cg_policy p; + if (copy_from_user(&p, (void __user *)arg, sizeof(p))) + return -EFAULT; + if (p.poll_interval_ms < 200 || p.poll_interval_ms > 60000) + return -EINVAL; + policy = p; + if (guard_enabled) + push_lock_policy(); + return 0; + } + default: + return -ENOTTY; + } +} + +static const struct file_operations cg_fops = { + .owner = THIS_MODULE, + .write = cg_write, + .unlocked_ioctl = cg_ioctl, + .compat_ioctl = compat_ptr_ioctl, +}; + +/* ---------- /proc/cellguard/{status,cells,policy} ---------- */ + +static int status_show(struct seq_file *m, void *v) +{ + seq_printf(m, "enabled: %d\n", guard_enabled ? 1 : 0); + seq_printf(m, "modem: %s (%s)\n", + (modem_filp && !IS_ERR(modem_filp)) ? "up" : "down", + modem_path_used); + seq_printf(m, "rat: %s (act=%d)\n", cur_rat, cur_rat_code); + seq_printf(m, "operator: %s [%s]\n", cur_operator, cur_mcc_mnc); + seq_printf(m, "rsrp_dbm: %d\n", cur_rsrp); + seq_printf(m, "tx_pwr_dbm: %d\n", cur_pwr_known ? cur_tx_pwr : -140); + seq_printf(m, "cipher_known: %d\n", cur_cipher_known); + seq_printf(m, "cipher_null: %d\n", cur_cipher_null); + seq_printf(m, "block_2g: %d\n", policy.block_2g); + seq_printf(m, "block_3g: %d\n", policy.block_3g); + seq_printf(m, "block_null: %d\n", policy.block_null_cipher); + seq_printf(m, "poll_ms: %d\n", policy.poll_interval_ms); + seq_printf(m, "carrier: %s\n", + (current_carrier >= 0 && current_carrier < N_CARRIERS) ? + carrier_profiles[current_carrier].name : "none"); + seq_printf(m, "bands_locked: %d\n", bands_locked); + seq_printf(m, "bands_method: %s\n", + bands_push_method[0] ? bands_push_method : "none"); + seq_printf(m, "downgrades: %llu\n", stat_downgrades); + seq_printf(m, "relocks: %llu\n", stat_relocks); + seq_printf(m, "polls: %llu\n", stat_polls); + return 0; +} +static int status_open(struct inode *i, struct file *f) +{ return single_open(f, status_show, NULL); } +static const struct proc_ops status_pops = { + .proc_open = status_open, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_release = single_release, +}; + +static int cells_show(struct seq_file *m, void *v) +{ + mutex_lock(&scan_mutex); + if (scan_len > 0) + seq_write(m, scan_buf, scan_len); + else + seq_puts(m, "(no scan yet — echo scan > /dev/cellguard)\n"); + mutex_unlock(&scan_mutex); + return 0; +} +static int cells_open(struct inode *i, struct file *f) +{ return single_open(f, cells_show, NULL); } +static const struct proc_ops cells_pops = { + .proc_open = cells_open, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_release = single_release, +}; + +static struct proc_dir_entry *proc_root; + +/* ---------- module init / exit ---------- */ + +static int __init cellguard_init(void) +{ + int ret; + dev_t dev; + + pr_info("cellguard: init\n"); + + /* Resolve GKI-protected symbols before any modem I/O. */ + ret = cg_resolve_protected(); + if (ret) + return ret; + + at_resp_buf = kmalloc(AT_RESP_SIZE, GFP_KERNEL); + if (!at_resp_buf) + return -ENOMEM; + + modem_filp = open_modem(); + if (IS_ERR(modem_filp)) { + pr_warn("cellguard: no Shannon AT channel found — loaded " + "but inert until modem appears\n"); + modem_filp = NULL; + } + + ret = alloc_chrdev_region(&dev, 0, 1, DEVICE_NAME); + if (ret < 0) + goto err_chrdev; + major = MAJOR(dev); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 4, 0) + cg_class = class_create(CLASS_NAME); +#else + cg_class = class_create(THIS_MODULE, CLASS_NAME); +#endif + if (IS_ERR(cg_class)) { ret = PTR_ERR(cg_class); goto err_class; } + + cdev_init(&cg_cdev, &cg_fops); + cg_cdev.owner = THIS_MODULE; + ret = cdev_add(&cg_cdev, MKDEV(major, 0), 1); + if (ret < 0) goto err_cdev; + + cg_dev = device_create(cg_class, NULL, MKDEV(major, 0), NULL, DEVICE_NAME); + if (IS_ERR(cg_dev)) { ret = PTR_ERR(cg_dev); goto err_dev; } + + proc_root = proc_mkdir("cellguard", NULL); + if (proc_root) { + proc_create("status", 0444, proc_root, &status_pops); + proc_create("cells", 0444, proc_root, &cells_pops); + } + + watchdog_thread = kthread_run(watchdog_fn, NULL, "cellguard_wd"); + if (IS_ERR(watchdog_thread)) { + ret = PTR_ERR(watchdog_thread); + watchdog_thread = NULL; + goto err_kth; + } + + pr_info("cellguard: /dev/%s ready (major=%d)\n", DEVICE_NAME, major); + return 0; + +err_kth: + if (proc_root) { + remove_proc_entry("status", proc_root); + remove_proc_entry("cells", proc_root); + proc_remove(proc_root); + } + device_destroy(cg_class, MKDEV(major, 0)); +err_dev: + cdev_del(&cg_cdev); +err_cdev: + class_destroy(cg_class); +err_class: + unregister_chrdev_region(MKDEV(major, 0), 1); +err_chrdev: + if (modem_filp) filp_close(modem_filp, NULL); + kfree(at_resp_buf); + return ret; +} + +static void __exit cellguard_exit(void) +{ + if (watchdog_thread) + kthread_stop(watchdog_thread); + + if (guard_enabled) + release_lock_policy(); + + if (proc_root) { + remove_proc_entry("status", proc_root); + remove_proc_entry("cells", proc_root); + proc_remove(proc_root); + } + device_destroy(cg_class, MKDEV(major, 0)); + cdev_del(&cg_cdev); + class_destroy(cg_class); + unregister_chrdev_region(MKDEV(major, 0), 1); + + if (modem_filp) + filp_close(modem_filp, NULL); + + kfree(at_resp_buf); + + pr_info("cellguard: unloaded (downgrades=%llu, relocks=%llu)\n", + stat_downgrades, stat_relocks); +} + +module_init(cellguard_init); +module_exit(cellguard_exit); diff --git a/common/kmod/cellguard.ko b/common/kmod/cellguard.ko new file mode 100644 index 0000000000000000000000000000000000000000..246c0849d07aa15e4148878f436389eb71982ab0 GIT binary patch literal 270288 zcmeFa3tUZG_dmS$E_6dkLbTnxp_0h09U+8N?w4I^t8~9`Tq}g42qEFf^%S|3+&Ky* zmHRE^2ysFj5~ry4JI2~`W}bCU&*S`l@ALfM_wzsN^I5I6zH7|y7<0@q$DC`fRfP|A z7$z2pIJ$|r6Wq5eigKKGbJe;FDSsyA`f$DLFj2&}`&~KJx{Lp}aBZSVw7`iIEov`n zt7X8U9eM;WX#gj7-R+v(5V>fzlWq{lt8Q$#No})6g4T~swrgvs*o(9b;9e6Dx_#&F zz59i~Jhs#1I8!J#jc}CV5jiCGTJ0oA@ngg7YT^Pd1Btz|+%J#qK_rIAyQmR)*GXFK zTv?S{nj~s(ZN5$CN8Rmu8V*_pu9Lp$eem#6ky3YGC|*dod{royqgFdJ%Jrkhb}bE+ zNHE>ikuoUDT7tL^X{aJvwpirA7_OlbFV->ujM|R%MV$_$T!y%Qoe@w}s1tn^Mam|? zIp_E%U-`1WLK{y~8&Mv8YX&AN>!-%oPMoY|U`9;5tE`(Dh`uM~^zitnHqj8DWEDZh zuw6Q1ePGk7tJlA57nNM}>tD1Cas?7DJL=ni-Nq_s(O-YTg+4n=xQfs?5AcDuomM;T zAH~~MHN=rx2HJMmK+39fh9FW##J{-3}SsggGguMmq31=dl+QP97 z>{H-gYdFFqsZOzq?taukWxd4GQwAa~h|5XQDUieidb4@(0~i-tSDsdDSoIH|R|$iTuTnhT0hC|nGV!I9%!)Uvp723@!yLlw^Dsfxk= z!J-H!v@I9xs!-wfdx<#9SKy<(_R_uvXjKY=Z!2W!6@*o}4is!+80uhgRxQx7=*t9oqzclFTw zKVOf`_TTE^jpxu7uNp--{SNJ`F5>3*<{-WRgE&2S< z5TiQ#*_caG;WBJhm9Zm*b6sd3yr!|7B<3>IINedNR3e-V7IQ)RY0+(VtmJ~kT{xFY zl{WjosI=XW{b(Wdp{EeH&miWD0mE2Cz2QCs`qKXQm6zAUdweWC1zTu5^#?my+p*7B zF}CMJoC|H2Ft%rcokH6s)OP3_1_O!h!?~c22Aqo?*Z}Jlyv@Zbdc57#W&_4%p{**5 zBb>B}t@IwPg9hN}XPS2~$Dq%J{TzL+<}2+>`>2NgU-Z$I-}upBDp;=^kdtx%5E4`rgbh~`mZwN;S+ zKZx!_?iW{D9shT7MGBWv$jworN~_2JM)qm3QZ~6*(Z@iK3-X1wFwo+HOd*~O)F3t* zaxR(RC&Y?jERjMkr){AD^->c_PmKVdf?tD5TWoCed&3=VqAD9%*@IpKOD-r1%JV+C z0lA|?W*Y;M`fOX!q0TLL!gCI|kq`X1?#hT&P6p~6j6>Y~#-IoNW(0VydW4gqIyWEX z_ODvyggRkt)rpRVbHGy6l7gWOAA6XqFi&xCeIIR*a6xXozCUxlPLATaMj9sv8-qOR zlfW?w#;#Am(+7BRfP->ggmct~IT39vf$@dL8n#tZlUa#4uTU%#-K<&2%qK2FJlXcW z`%y)_|C5Snzgn{)RkB6ghvH7$y3epDFEgktg}mot7M1u6^ePmh6pUGgf=fYOlzXbu z5^{&m{%nX7SB}d#DvDS?41Dlpwq;*uh*`~u$Xnp+o3B9D80-cZf7!Cqcip@iy!W@puzrD{UvtD@t2P=fAod>-5@0YON+xAE_qN zFg9$!S(a)_PpNI0JkH=;>mUil#fU>Ow@MpHtD+C4mK*tAD^JlXE{C>!BZam^S#SRs zr`Nrt)dITFzq8c(%E8n++mkgp%jiR~x1erSuSP?i zW3SfLxmb;Jxq|+Hdn0-rEFbaP)$%Kii9g^Ta;mkPKF(lyvmg$x_xrC=^7OK;oSm9l zz6!YZuXzh~)OeE|6MHM_;Gy!U?gi!cO^VCGCts4F{~$-SsnRa*Cf|Ij2KmL?LCI(2 zms;)({)&cjSZ7!0t5|OTLGZVUbpEO_hm`(q9N~n%PJ(uPRi>=dYj>&jtGB7;(NO-1 z>DzK>vpi_~{kbrHyiQft?G@OYcQCblWRI)mv&-Hn?FHS2pttnEwQ?_F@6&RHiy@4I z+R!f8@0-BU9*$aY^nxSg44o)ALO;?;hGRoG=E4zPp6Qgr5$B3(P#*gt<`*N8)Y=~U zqz%k}B_9+n(a=s3PI3qP#Z@((Vr73*f&QiibN9wDcUR&2nvrXi6Q>ff9^=4 zW(x5Y1-M$PBf&PDnolvrR5D)QJi%W_w18X%*Ld$~Gi6@FF$d!c*81b4!8Utx-&LD) z@gnC^IL}2MaWc;%f@|Q0J}cfY7DqTK!nu_D5SJ2NE+Yy0?L4d_)D7#Hr&zKc@>vzu z6Y9jzS43(NPM9ko#y=<&8Y$vtBflsV>M5n&cC=9_)KV0RMzA-8y#eg1u&cl>hFt_Z zmjXG!2>oNAD*7O93AvktqiRH=46dK)KwN-rb#t>0%4dQ)-C!?Y){gto5&U5w<&;D{fDy6#D8U%HQ05^2j(SU+o`AE1I!6HZlV3+RuN7{%~rR8XEPkrs$T!p z+z8uewz6%iN=-CUUQOky6p$;Dp$!c<$loeai8TLUJ`zD2!}H>PVgAX2eqS+mG(0mp zK;BWQ%RAi7l}@6BC45_>UnC8=3>f>3#en0p6=KbiQ(W1H`T;St_tkYM3&#%dtOWL+ z!Z|DSdmpiRbepA12l0N6S{imreev+yHlIX6OCcXnjvccN@s%jrY8FBC4vK?eD$O~P~OF5^4@YAnU)YwX+Duan{VIJY^> z%K^jZ@O+5j+^$mW1AKqNHZE%s{I`1WSM}h} z0Y`n<7Bn9`5p&kyYio5QZk$aQ&io?e;S{hn8s;tP9r-bVkB^o{DO;&upF-ZWm*>Hrh%U;U_NV(nOPx*-dnvy< z_IH@0L(a!G{?lCIDa3kx^9Wv^_qDXj3)WaLerp!~4C9iBUsJ;Mpb&^p>~ARhmoWx5 zuZMeovK4T6*7}!qiG=%=r|rAzV_hHSj}e_ z;4pWsYeVG0`xqxw9=_|~a~8E9`ixGfD55#!Ay|JK40cPaY8GCss}C)QJVHNX{#9>n zYmH+l=Fw=*u#X0`>noUh&*pAe85PaDZ6t|arJHBcb^PVxvSPdT4gNhd-sis+Wt}Jq(@C8dUw@ee`13&ZSQudw1+&Y z1M_rc{a`(UFK+^+1Fv-S>5NveUfu=>`JcbbK*H%EB#Xc8mD5J+D-Hou1$^?M>Oa2sft0RJv_fF z8gW%#T3m)f18JI}7U%L=MQmIF{`(!rh9UejxUpD@^Ar_q*Kauv?uh_@uF|Tmjm3+k z8=eA=eG9ptL#`_ZADU&!PNsF*9GrIYNU(vpnU56umSm{e9f`>1o~v5riDxRh5MMfc z{ZU6a#2DH&suAb%M1u>`gd;wueTBWKAvccZe;8Qeeup@wYcH+gI$EXWC_~UKg?-6| z-m5z<6E~=XG-m73DLH8$8QF-!q0bTu1X!ee2Vx``^aG5KTT7XbgBG&-m>JNKA*sWpjn*!^A zu!~?9!>$6mD(nqlZwPxM*wtWHhg}19P1vXcQ=G%VJvxVZTC3QMc8-EL{S5bTeo5DQBly09>s-pQ1N)MF_@WJ{2ZG6E zM7VUrltx@L^%m-@dqK|l_*DUY%fR?geE@Q_VuIRMwZueuLvVEhC0`KaO2!JK{7RaeSgO@R?nlJI;$S zmSCJw-6H*hve38Ib%Z#jW$WbOIfu3tmcje<9>rNsVR^8Lf7YQm+C!&Fn9kG*5uC^??-073^tz< z>QaX}w1E+<)q;OIn#cdiheG?&*Hkx*&wSl%p#Dq6fA&9=t)eyy>i%zW<$KgW&Po3_ zG4~PXvG|^r#2DYVX-2{kNjNo+uV6ojiOZo?CqeR zz=K<>ec5SN82gGLxbCD5?}ats{jes?^R-fHhKTv~C(22mQDNS~&u_84@Hrp~a$+gW z2kLC;1i2G(G}Zy11@Y+Gva(NUTjjH1lvw#Zg5`2y?4kTPfBE1S8GLi>u|LgUP}UX7 z8Nyry`iBlY%h&Zi{&`cNFGBmT_1SBGpFS_phkZ&S;;KrUa2c7ftHCv{ap1VXLHuC7 zaGsV4wiHACLtu_ym)FU9ty?FY+q8grzXSMn6!>=}Jj;wo0e^p6I{^;hTK5cm)dBJ} zeU`>?4CYzAkyG5vj(@JU<(BY%#aN-f4R0t-Gt&I_yh3?+zkg5pTAQ?G>i@g)DzGj@ z+wp&-AJ&HdH|14eO~@YBZAz7~Ro4e#jjO63#LH9Wxf}h0Z3$z3-B^lPFL*x{2Yo^) z3;k%nE8rOKIH$ll5j{T!&+oV%Os_w|HE`Em_lETwoKw>K@ND9woNFuR3kF=vH!yDS z>zW;!E01EbzA1)l>J#BOPp`4L=JWqzf6YKwK8 zp&#=780Sa^)i!BKz_S}{f!H#h05;=s5*+EXeqH}2<5d(H3s8@!yOuNh6mzhbg|dH3 z)hh9uk5fs|m%s;c@JtWu$OikL!!8DSv<>4J%NeLj(>Q1kLnaPT7G-cg3G*uKV;Rqs z<1pX8w7yF^E9)tSIU&gZxy#CISxL9m9oFlTunAhMP7_Dn2k$VU4=V+eCF&Axu@_gNBJG1~B z0R#IDjGuu#o>Lj&xt6DN?_bSvFpo(=Kgy#HoIBv!rY*z)V%YX>V3W`nh{1i{9+Yz> zcB8xw>|S7V1Ym#V6U4C$%CNrR>j?I^GX9_#%HuiaWH?v)0c1PEj`xJ?4Zhy)a{mzd zz~PP#oZFmGuYllzA^vVYa?V2@;vVcB80sD1KX9;bfV+>xVz{KI#D9*jZ+Ca^KreZ) z#9i*|JIB{8xW8mpK(M=9;^pn>B@YSh9wK+26YL#2U*crz!p)TjhaiV}4>Qi&FEAiD zROTNtaKbQWnYVwaJlNmOS2jZC<|hl5yZQRgm$}JidHc#k=7)sJ{bX+b9(ZfaSQo%O zg1vzY`TX2Gz1;^|^|0z;Zf4Ql(xvNgfSU)N5?ewfZf?QuURIWzznh zNN8|~d*FN&9OHzd&O;prn#}`Yxxd>?U%5v=3BPsm&_J2tW5*769_r%gG}dvblgs3R z9mm)@kMA*Nyn{oJAtM~^hdT8bF~()+aHkP2lY0ztadPNr+R>~dHxq4i7JTtJexV_<;D9;M&SoIdS!wEsF~iX>=G>e>E+9}I z>=qgjtgJ1lo7yF0x&|@4mnVV2a1%7KA6IAKw=>xf9;kgt@8M2EhYz&i{N#S4*x(4H-6kV8@wov!kgQvd9AR#OZTaW$CBe*v&XWcH5G?bU$$J_D z%-tyoOwsC zu?FwN#(Xo=dMcd=q2TW;_vau%$lXGCPYfA0e#}5i4vfWa$@vHP%fSN>PkdmZ1;dBB zxJ+`K=)}8-#5Wkn7vx)1+0y>Oy**{h<_4!Kvor1XSYKsQs`CIJ^dd_pWc>pq&R%Z* zV1dNeMdFU9a$m^mb0EB)MZ`-mfkFh&oD(YX_Lm2TO6K^7di!EZmHSED0t4l4!O+rw z=mjL`Ljxd#gar7`l}nhY?#Tv)1{dH@<3<8596Jj9hqVcj`N?5Kf>elc1URT*QxtS+ z6zk59PIJB8B;C4%bd$KbyUPPZ8;@?S)=a`VDpC5Q25ac)^a)%hc?T?(_Ed4kecHi5hG( zXZiwf>KF_?J|AFaS4J`tIuCIk*m1b?Xg=LwHi5(o__v`9JZuVqtsH?Ym_&}Hv352b z-^XZ#_v3~S#asYc?HdspKCuX&-EIDI$o&WW#{>Uk4~XC);Xk?khw1;V>EElLAAJ5T z+y6ZRp?(1~Vb)exVR$~};MtsmwL}iqF}T*S8^Jyp_TjMqr#GQKF*K|y>Omj;pV&OSL%dkM z7zbz*e82r)sXwb5&;L*BhqWY_l78zm!ua^Vt-rvNO>h9yNJ4)I^F1T_A2}83`)`jg zo&f=#zVcb#v~vH~`$G=T+1~ClSPkMgp+9iUrG19xRyx+;yrc*0bUgllBj2Ka9B)x4 z>ccUH&VOi5!(2NC_W#6KjME&t7oj2l;Z69c8LEJFAsH#4F6K_*d8N$EJWUJ z{q6GouLt801+M};z2V(zuuS=u>brT~rp<#-m^p5a|No3(S&Lcx3#B{f=TDa{tia z`7(HK>Hi(2zKM9tr=7$rR4ogf^X)cuw~f1@ml7L9mVj7Pq_n}-LU|DA2ry1buJ9@N7Z6Mw$~ukstO#`5rP*j?u5 zC6&S(`W@lx{{ws*B!iDWupQ+g-=DzqKi9lRCYcPrae$9f+`W8c z_=@;@O^J!VlaI3SrBSH&toe|_{k`44w=l@{Uj5rG6sPeY5*iTrH;Qxq9={*`LwT=& zIldlHneU`ImpA?`miL2?Vdn9lB*9lge`Bj!x~GaSAL1*Q|1HavO1>`Ke3viJ>&N%Q ze?vKlCU^D2M}GdhrO>~byRh8-o}rq2dH4p*R}Ov)4h{J3#)pE-Pj9p2%ZI|3TmJ+7 z_B$R$VR;!uo*d#YVCHPOd#EhLd%^eh21$>bKVo@0|A2*V&+jXVr8w@O#|i$=BE$SG zgjohv-u#ZAE0#oVLa`8ce|`oz>pRM@BER`f+lSX~zM(SrnK%P-_kz?P_`N+?J+s&Z z%gbc=>72|xAaK5HR&anHEKte6r#aRnTjO#ON51TH51ixf_T9>%oc~DpI0noA&#KRz zdAB?f%d_@}27Ise@C(QDFX0jxhu>U4{Qm9v->0S@o%r(dAmt;#-)z86*VGMZdF7{6 zc=i3;oU~|Xlnz1tb3(tj+3OT!557AYFWdwCAa-Pdp}{im0Qb=E?!vzPN>Z^r>gT^} z!;8PM4QRx_QsT?|hREfAGktL%L)r~Qb)^01S6JU|L7#wbxU`9%70!Y7_jQ{OpEZ7W zY32H$4#?vmJbcV}uH)_}iUzdjlc|hfKuy;Dcjl z*l}wMYmFzAr~FSxat_}*bAE7+9JskC4_r$D&QFHm9?Hj}9DJ;g+cf2YmuGQTf}=e8 zp8tFGaP$!1YUG+eUr~Fs2u_DC$|I2~Z%|)Sd-%Z?Zp|a*(0;Us;)@7QdB`QlCwaI) z|L_l7|fd6F`j8Z zv?RDb_=CjVSDZ#N{usHw!BS22*pGibsho*smv%_Tc|N2wc!)hKKcYB*BICiedO!f5tKVEFLeAUr+KwfR=<2B`pBDm0= z1OdMZ8F#h`_$i)5aG^g_8Jz7G84N$hKdo;r!G(S(V0hSexj}HD{dX9C)^CLb7y5y| zGpFr)hxEr{h6nvTn)D0)|4hL(^)tmwi9EHR@{}<=Sl>dzUoDWQxE9ePtd};yX};P^ z@}LgEsXY|eBe<|#CNVhcPgjN??WFd55L{TVK!LoT6bivMkKojPibvFgM-m+EWap(( zLVl7@VgxvyA0{(AY`t#OgICvsOG&(=pD}(YzdeJq?dU*o8dp@_k>J#Cw0+|k9^|L< zjd+4%JF<9kJ@Tpb$e$F*lk~u45}eve@dAN7wdamNp5ld!JoT#u1w_3AV7EIxpdXYH{gxNyGbz{tmf(xoI09SKhR9mQP; zj`5s9jf7(=gYz#;$h}N;=ymIM$awgCY<7oh*K%{M3Fkf(!X01@gpQT$BK(JaGi4d4|fz*TbJ6 z;3-s^$894xwj@@fPZ@@Nwrd6JYx`JXxrj~^hkf9Wwi zEG{9q&>ktl(H>Ubj^M)n<-qW;_Bb*;=m*-bT?9BC7bXdCn%|}ooW=>|aV0oycgo`- zz$uTHfS*2(_!6A@nc|BGF7(f~dU%rR;YntASpTF7ceE{2FLcL^VJH1({`ael?12xHUdd-Yoa{R_N6@91gHIi zj{EuoTmo^5n}p!B|5ABFp}dqA=S&6il*den6M6V|nfz8~577(%0F>WoeQ7?4CpgB> zd8G*dGnv6N89amGM?Xu+y^{o|{f^>i8J^Qb77v*W54KAInIGl~aQZ(x3mATsr}zzm z({`aeB?QNMvCof{3_ojsHN(&1s!h?_Kd&DeGI*L&g#YP5aH0Qw2`==1AR~`@=@v?G z>Q9PC5ghBqjyo|7Pb>(xCKH`FhKI%D86I}LP7v@I62;pDJQPo=hvyQ*gY8AfsT%~R z@lWwWMxOOU5y6FiC>6+S6FbWU@)Vbl6Z9J!hn)#d+l$a}h768=n@^rQObL$mu(%n) zX}u_qv>x0}z)#oR;O{K)8|A0?q)dK#Rgr94!)KBA?;@SkK`IgRS zbQs(Zijr={=`lPku1|1UU&_I~H^|L;~h5k2Wc-Z-X8N-AAj3#;B zlHp--M}~*Ba~i{g_DGdxbFK^zi+eCUtUdD>9(LZlh~Z)JNQQ@<_eKeL=sY=w!C8Ca z7=9MVKWv5@&9{^%f#AaamBip_%A)+wO9ZF!K-ZCS2~P6{#S0i7cE0MNqa;PW7a9Ju z44%p0xdcbOml(W&;MiYSys#emqI%@D;g161hWywrG(SiPPWvOp9SM&1XJSFJxiCDj zfc;3;%_k9@`iJ6P3{Ms%fuk?OgZAW-d-DiR?VfymZnu!~&7yN$#eoGMWP&`Q>-;2zD_6X!DewN@ue-<%3IG?m9?NZF}uy~0;zL3b5 z3gjuS(^^>%tQYnRy6G`E+kf>5PUC_0Ux`3|3hD2i1@aVkB)G7?E(E9jk=hej559=u zVf$lDJ$MDdX*Izk=O$_l9MuR;{YIY`vcf}@{VT(zyTuuxu&;6iyrMqUm@?a8$% zIiep}+>+o}ugi>`lNcWK8(oK-#^C6m!K92U!_VR#1gFnIl*gCgsF#juNEOKNqh6Zl zLm3?T;s3z$+dP8PIHC9=g44LAJP`t(XwZ*aq=1LwQH(s=Q^-qmTnr=6;@cQ`w3EhL z5+l#z$pjbrA(i1le)^u`2!kU}9F?5yp-TVJIe$-T2fFB+j|B_J3Yy~ zrGnvS@k)YIe^MS!pQq#JA#6OW5}f8GZK+aDjlul@icrFw7K5YScVxWKCOD0Ait7-Z z_Akn>M{u;0X2N0avLwW27F4Sw!@bmqM zykBr&aMTNbyPDq|2~PD=+=bv&FMUrpjo?DPt_(l=hi)DWKZ|=Y@@P*}GT-oJL-C|~c#;J?8%X@83V0}JlNla%o_2%b@dF;Bmb=67uy`TEa~kC7R>bh2ALx2fF~Mnnqr#q}7TlMGL1 za*q8j7S4Yp{o0V=)Ea-{J?X;g9(G;PgTWKXIUYjExlr#sf+Nosa*l^Z2ng*n@Qy8c!)e0SGfeId5+3coQ@ADp9r#EM7}Rv1SR4=_{M{uf_;*pFz_M@p>r3$jf}`GTlmw337#^&z8o8Ij$Zu!lGa39x z1}|WE(4JPro*M+G_E5Zt;bHBmU~pD1N8%mrXZ30koVI%=(W^~xs+Z#W3=gZmSNN}o`;?o!&R&OYSvw9;KoYhNzzlrKqBmRmL=%x5JhKJRg!Qiak zOa^E5(%+w=aY*BYu8&fCQdE^eLD$=;A1GeL@U!{6nBYSGGJ;e7&!oQZ2~PPbUQrJ} z{v%7=kcaKp)dZ({X}_lPR;ss})Jv7LGu2CRHG*S&vh~sI--%E~$sdRKP>~ zwV8m2;(Z13wBHR7$Wz>2AW!>?gFv3*^!-1rS6!S7SsN2PmAERz7%JFpAPMm5PA0Z=~ m7#{-OLD%_Om$qdv?32FdPREd11XA82&ws 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 literal 0 HcmV?d00001 diff --git a/common/kmod/cellguard_ioctl.h b/common/kmod/cellguard_ioctl.h new file mode 100644 index 0000000..ad9af71 --- /dev/null +++ b/common/kmod/cellguard_ioctl.h @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * cellguard userspace ioctl header. + * Shared with /system/bin/cellguard helper and any app that wants + * to drive the kernel-enforced cellular policy directly. + */ +#ifndef _CELLGUARD_IOCTL_H +#define _CELLGUARD_IOCTL_H + +#include +#include + +#define CG_MAGIC 'C' +#define CG_IOC_ENABLE _IO(CG_MAGIC, 1) +#define CG_IOC_DISABLE _IO(CG_MAGIC, 2) +#define CG_IOC_RELEASE _IO(CG_MAGIC, 3) +#define CG_IOC_GET_STATUS _IOR(CG_MAGIC, 4, struct cg_status) +#define CG_IOC_SCAN _IOR(CG_MAGIC, 5, struct cg_scan) +#define CG_IOC_SET_POLICY _IOW(CG_MAGIC, 6, struct cg_policy) + +#define CG_SCAN_BUF_SIZE 16000 + +struct cg_status { + __s32 enabled; + __s32 modem_ok; + char modem_path[64]; + char rat[16]; + __s32 rat_code; + __s32 cipher_known; + __s32 cipher_null; + char operator_name[32]; + char mcc_mnc[16]; + __s32 rsrp; + __s32 tx_pwr; + __u64 downgrades_blocked; + __u64 relocks; + __u64 polls; +}; + +struct cg_scan { + char data[CG_SCAN_BUF_SIZE]; + __u32 data_len; + __s32 status; +}; + +struct cg_policy { + __s32 block_2g; + __s32 block_3g; + __s32 block_null_cipher; + __s32 poll_interval_ms; +}; + +#endif /* _CELLGUARD_IOCTL_H */ diff --git a/common/kmod/cgcap.c b/common/kmod/cgcap.c new file mode 100644 index 0000000..7d25f20 --- /dev/null +++ b/common/kmod/cgcap.c @@ -0,0 +1,304 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * cgcap.ko — Shannon SIT/RCM frame capture (read-only) + * + * Kprobes cpif's ipc_write() — the .write of the FMT/RAW char devices + * (/dev/umts_ipc0 ch 0xf5, /dev/oem_ipc0 ch 0x81, ...). rild/libsitril + * write the BARE SIT frame there and cpif prepends the SIPC5 link header + * in-kernel, so the buffer handed to ipc_write IS the exact SIT payload. + * + * We copy that payload out (nofault, atomic-safe), tag it with the io_device + * channel id, and expose a decoded ring at /proc/cgcap/frames. This lets us + * learn the real on-wire command bytes for setAllowedNetworkType / band-lock / + * null-cipher by triggering those operations from Android and reading what + * rild actually sent — no transmission, no guessing. + * + * SIT/RCM header (LE), proven from vendor.radio.protocol.sit.base.so: + * off0 u8 type 0=REQ 1=RESP 2=IND + * off2 u16 id (hi=group/main, lo=sub-cmd) + * off4 u16 len total frame length incl header + * off6 u32 token transaction id (REQ/RESP only) + * off10 u8 error (RESP only) + * off12 params + * io_device->ch lives at struct offset 0x114 (proven from cpif_probe). + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("snake"); +MODULE_DESCRIPTION("Shannon SIT/RCM frame capture via cpif ipc_write kprobe"); +MODULE_VERSION("1.0"); + +#define IOD_CH_OFFSET 0x114 /* io_device->ch (u8/u16), cpif_probe RE */ +#define CAP_DATA 160 /* bytes of payload kept per frame */ +#define CAP_RING 512 /* ring capacity */ + +struct cap_ent { + u64 seq; + u64 ns; + u32 ch; + u32 len; /* full byte count of the transfer */ + u32 n; /* bytes actually captured */ + u8 dir; /* 0 = TX (ipc_write), 1 = RX (ipc_read) */ + u8 data[CAP_DATA]; +}; + +static struct cap_ent ring[CAP_RING]; +static u32 ring_head; +static u64 ring_seq; +static DEFINE_SPINLOCK(ring_lock); + +/* Optional channel filter: 0 = capture all; else only this iod->ch. */ +static int cap_ch = 0; +module_param(cap_ch, int, 0644); +MODULE_PARM_DESC(cap_ch, "capture only this cpif channel id (0=all)"); + +/* nofault readers, resolved via kallsyms (may be GKI-protected). */ +static long (*p_cfu_nofault)(void *dst, const void __user *src, size_t size); +static long (*p_cfk_nofault)(void *dst, const void *src, size_t size); + +static unsigned long cg_lookup_name(const char *name) +{ + static unsigned long (*kln)(const char *name); + + if (!kln) { + struct kprobe kp = { .symbol_name = "kallsyms_lookup_name" }; + int ret = register_kprobe(&kp); + + if (ret < 0) { + pr_err("cgcap: kprobe bootstrap failed (%d)\n", ret); + return 0; + } + kln = (void *)kp.addr; + unregister_kprobe(&kp); + } + return kln ? kln(name) : 0; +} + +/* iod = file->private_data; iod->ch @0x114 (proven from cpif_probe). */ +static u32 iod_ch(struct file *f) +{ + u16 v; + + if (f && f->private_data && + !get_kernel_nofault(v, (u16 *)((char *)f->private_data + IOD_CH_OFFSET))) + return v; + return 0xffffffff; +} + +static void store_frame(u8 dir, u32 ch, size_t count, const void __user *ubuf) +{ + unsigned long flags; + struct cap_ent *e; + u32 n = min_t(u32, (u32)count, CAP_DATA); + + if (cap_ch && ch != (u32)cap_ch) + return; + + spin_lock_irqsave(&ring_lock, flags); + e = &ring[ring_head]; + e->seq = ++ring_seq; + e->ns = ktime_get_ns(); + e->ch = ch; + e->len = (u32)count; + e->dir = dir; + e->n = n; + if (!p_cfu_nofault || p_cfu_nofault(e->data, ubuf, n)) + e->n = 0; + ring_head = (ring_head + 1) % CAP_RING; + spin_unlock_irqrestore(&ring_lock, flags); +} + +/* TX: ipc_write(file, user_buf, count, pos): arm64 x0=f, x1=buf, x2=count. */ +static int cap_pre(struct kprobe *p, struct pt_regs *regs) +{ + struct file *f = (struct file *)regs->regs[0]; + const void __user *ubuf = (const void __user *)regs->regs[1]; + size_t count = (size_t)regs->regs[2]; + + if (f && ubuf && count) + store_frame(0, iod_ch(f), count, ubuf); + return 0; +} + +static struct kprobe kp_ipc_write = { + .symbol_name = "ipc_write", + .pre_handler = cap_pre, +}; + +/* Store from a KERNEL buffer (skb->data), read as system — no user copy. */ +static void store_kframe(u8 dir, u32 ch, const void *kbuf, u32 len) +{ + unsigned long flags; + struct cap_ent *e; + u32 n = min_t(u32, len, CAP_DATA); + + if (cap_ch && ch != (u32)cap_ch) + return; + + spin_lock_irqsave(&ring_lock, flags); + e = &ring[ring_head]; + e->seq = ++ring_seq; + e->ns = ktime_get_ns(); + e->ch = ch; + e->len = len; + e->dir = dir; + e->n = n; + if (!p_cfk_nofault || p_cfk_nofault(e->data, kbuf, n)) + e->n = 0; + ring_head = (ring_head + 1) % CAP_RING; + spin_unlock_irqrestore(&ring_lock, flags); +} + +/* RX: io_dev_recv_skb_single_from_link_dev(x0 = mld, x1 = iod, x2 = skb) — + * the common CP->AP entry for BOTH FMT and RAW channels, skb in kernel memory. + * Read skb->data directly (as root/system), no copy_from_user. */ +static int rx_pre(struct kprobe *p, struct pt_regs *regs) +{ + void *iod = (void *)regs->regs[1]; + struct sk_buff *skb = (struct sk_buff *)regs->regs[2]; + u16 v; + u32 ch = 0xffffffff; + + if (!skb) + return 0; + if (iod && !get_kernel_nofault(v, (u16 *)((char *)iod + IOD_CH_OFFSET))) + ch = v; + store_kframe(1, ch, skb->data, skb->len); + return 0; +} + +static struct kprobe kp_rx = { + .symbol_name = "io_dev_recv_skb_single_from_link_dev", + .pre_handler = rx_pre, +}; + +/* ---- /proc/cgcap/frames ---- */ + +static const char *sit_type(u8 t) +{ + switch (t) { + case 0: return "REQ"; + case 1: return "RSP"; + case 2: return "IND"; + default: return "???"; + } +} + +static int frames_show(struct seq_file *m, void *v) +{ + static struct cap_ent snap[CAP_RING]; + unsigned long flags; + u32 i, cnt; + + spin_lock_irqsave(&ring_lock, flags); + memcpy(snap, ring, sizeof(snap)); + cnt = ring_head; /* not strictly needed; we sort by seq */ + (void)cnt; + spin_unlock_irqrestore(&ring_lock, flags); + + seq_printf(m, "# total=%llu fields: seq dir ch type id(grp/cmd) len token err payload\n", + ring_seq); + for (i = 0; i < CAP_RING; i++) { + struct cap_ent *e = &snap[i]; + u8 type, err = 0; + u16 id = 0, flen = 0; + u32 tok = 0, j; + + if (!e->seq) + continue; + if (e->n == 0) { + seq_printf(m, "%llu %s ch=0x%02x len=%u [nocopy]\n", + e->seq, e->dir ? "RX" : "TX", e->ch, e->len); + continue; + } + + type = e->data[0]; + if (e->n >= 6) { + id = e->data[2] | (e->data[3] << 8); + flen = e->data[4] | (e->data[5] << 8); + } + if (e->n >= 10) + tok = e->data[6] | (e->data[7] << 8) | + (e->data[8] << 16) | (e->data[9] << 24); + if (type == 1 && e->n >= 11) + err = e->data[10]; + + seq_printf(m, "%llu %s ch=0x%02x %s id=0x%04x(%02x/%02x) len=%u tok=%u err=%u ", + e->seq, e->dir ? "RX" : "TX", e->ch, sit_type(type), id, + (id >> 8) & 0xff, id & 0xff, flen, tok, err); + for (j = 0; j < e->n; j++) + seq_printf(m, "%02x", e->data[j]); + if (e->len > e->n) + seq_printf(m, "..(+%u)", e->len - e->n); + seq_putc(m, '\n'); + } + return 0; +} + +static int frames_open(struct inode *i, struct file *f) +{ return single_open(f, frames_show, NULL); } + +static const struct proc_ops frames_pops = { + .proc_open = frames_open, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_release = single_release, +}; + +static struct proc_dir_entry *proc_root; + +static int __init cgcap_init(void) +{ + int ret; + + p_cfu_nofault = (void *)cg_lookup_name("copy_from_user_nofault"); + p_cfk_nofault = (void *)cg_lookup_name("copy_from_kernel_nofault"); + if (!p_cfu_nofault || !p_cfk_nofault) + pr_warn("cgcap: nofault reader unresolved (u=%px k=%px); some payloads empty\n", + p_cfu_nofault, p_cfk_nofault); + + ret = register_kprobe(&kp_ipc_write); + if (ret < 0) { + pr_err("cgcap: register_kprobe(ipc_write) failed (%d) — is cpif loaded?\n", ret); + return ret; + } + + ret = register_kprobe(&kp_rx); + if (ret < 0) + pr_warn("cgcap: register_kprobe(queue_skb_to_iod) failed (%d); TX-only\n", ret); + + proc_root = proc_mkdir("cgcap", NULL); + if (proc_root) + proc_create("frames", 0444, proc_root, &frames_pops); + + pr_info("cgcap: capturing cpif ipc_write @ %p (filter ch=0x%x); read /proc/cgcap/frames\n", + kp_ipc_write.addr, cap_ch); + return 0; +} + +static void __exit cgcap_exit(void) +{ + unregister_kprobe(&kp_ipc_write); + unregister_kprobe(&kp_rx); + if (proc_root) { + remove_proc_entry("frames", proc_root); + proc_remove(proc_root); + } + pr_info("cgcap: unloaded (%llu frames seen)\n", ring_seq); +} + +module_init(cgcap_init); +module_exit(cgcap_exit); diff --git a/common/kmod/cgcap.ko b/common/kmod/cgcap.ko new file mode 100644 index 0000000000000000000000000000000000000000..5251fea02e4635b05580abfc1630ee41a7af9164 GIT binary patch literal 199896 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

gJrU3@~vO`#9RwZ|4>% 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 z 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

O5z~l&7Pz}AfZuZooDpVsWogk_5 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 YJ`WH?CThPvivB9GfXAP frames captured by cgcap.ko, and flag +IMSI-catcher / cell-site-simulator (CSS) signatures. + +Input: text from /proc/cgcap/frames (RX lines). Each RX line ends with the raw +hex of skb->data captured at io_dev_recv_skb_single_from_link_dev. + +Frame layering (RE'd + validated against 234 live frames): + 0x00 u16 magic = 0xABCD 0x08 u8 channel (0xf6 = umts_ipc1 SIT) + 0x02 u16 counter 0x09 u8 counter2 + 0x04 u16 0xC000 0x0a u16 0x0000 + 0x06 u16 length --- SIT message starts at frame byte 0x0c --- + SIT: 0x0c type | 0x0e id(hi=grp,lo=cmd) | 0x10 len | 0x12 rsvd | params @0x14 (indication) + +Cell-info list (SIT id 0x070F, NET) params (relative to params @0x14): + +0x00 u16 sit_len +0x04 u32 count +0x08 record[0] + record = u8 rat | u8 registered | u8 conn_status | struct (stride incl. header) + rat: 0=GSM 1=CDMA 2=LTE 3=WCDMA 4=TDSCDMA 5=NR ; stride LTE=0x13C NR=0x18C GSM=0xA4 +All struct offsets proven from vendor.radio.protocol.sit.stream.so fill fns. +""" +import sys, re + +def u16(b, o): return b[o] | (b[o+1] << 8) if o+1 < len(b) else 0 +def u32(b, o): return int.from_bytes(b[o:o+4], 'little') if o+4 <= len(b) else 0 +def u64(b, o): return int.from_bytes(b[o:o+8], 'little') if o+8 <= len(b) else 0 +def s32(b, o): + v = u32(b, o); return v - (1 << 32) if v & 0x80000000 else v +def astr(b, o, n): + return b[o:o+n].split(b'\x00')[0].decode('ascii', 'replace').replace('#', '') + +RAT = {0: 'GSM', 1: 'CDMA', 2: 'LTE', 3: 'WCDMA', 4: 'TDSCDMA', 5: 'NR'} +STRIDE = {0: 0xA4, 1: 0x2B, 2: 0x13C, 3: 0x114, 4: 0x110, 5: 0x18C} +WEAK_RAT = {'GSM', 'WCDMA', 'TDSCDMA', 'CDMA'} # 2G/3G = downgrade risk + +SIT_NAMES = { + 0x070C: "NET/GetCellInfoList", 0x070E: "NET/RegState", 0x070F: "NET/CellInfoList", + 0x0742: "MISC/0x42", 0x0906: "PS/0x06", 0x0702: "MISC/0x02", +} + +def parse_lte(s): + return dict(rat='LTE', mcc=astr(s,0,3), mnc=astr(s,3,3), ci=u32(s,6), pci=u32(s,0xa), + tac=u32(s,0xe), earfcn=u32(s,0x12), op=astr(s,0x1a,32), + rsrp=-s32(s,0x121) if len(s)>0x124 else None, + rsrq=s32(s,0x125) if len(s)>0x128 else None) + +def parse_nr(s): + return dict(rat='NR', mcc=astr(s,0,3), mnc=astr(s,3,3), nci=u64(s,6), pci=u32(s,0xe), + tac=u32(s,0x12), arfcn=u32(s,0x16), op=astr(s,0x1a,32), + rsrp=-s32(s,0x119) if len(s)>0x11c else None, + sinr=s32(s,0x121) if len(s)>0x124 else None) + +def parse_gsm(s): + return dict(rat='GSM', mcc=astr(s,0,3), mnc=astr(s,3,3), lac=u32(s,6), cid=u32(s,0xa), + arfcn=u32(s,0xe), bsic=s[0x12] if len(s)>0x12 else None, op=astr(s,0x13,32), + rssi=s32(s,0x95) if len(s)>0x98 else None) + +PARSER = {0: parse_gsm, 2: parse_lte, 5: parse_nr} + +def decode_cellinfo(params): + """params = SIT params (frame[0x14:]); list = len@0, count@4, records@8.""" + count = u32(params, 4) + cells, off = [], 8 + while off + 3 < len(params) and len(cells) < count and count < 64: + rat = params[off]; reg = params[off+1] + stride = STRIDE.get(rat, 0) + if not stride: + break + struct = params[off+3: off+stride] + c = PARSER.get(rat, lambda s: {'rat': RAT.get(rat, rat)})(struct) + c['registered'] = bool(reg) + cells.append(c) + off += stride + return cells + +def load_rx(text): + out = [] + for ln in text.splitlines(): + m = re.match(r'^(\d+)\s+RX\s+ch=0x([0-9a-f]+).*?\s([0-9a-f]{8,})', ln) + if m: + h = m.group(3); out.append((int(m.group(1)), bytes.fromhex(h[:len(h)-len(h)%2]))) + return out + +def heuristics(cells, serving_plmn): + """Return CSS/IMSI-catcher flags for a cell-info snapshot.""" + alerts = [] + serving = [c for c in cells if c.get('registered')] + for c in serving: + if c.get('rat') in WEAK_RAT: + alerts.append(f"DOWNGRADE: serving on {c['rat']} (2G/3G) — CSS downgrade signature") + pl = (c.get('mcc', '') + c.get('mnc', '')) + if serving_plmn and pl and pl != serving_plmn: + alerts.append(f"PLMN MISMATCH: serving cell PLMN {pl} != expected {serving_plmn}") + if serving and not [c for c in cells if not c.get('registered')]: + alerts.append("NO NEIGHBORS: empty neighbor list — CSS often suppresses neighbors") + return alerts + +def main(): + text = open(sys.argv[1]).read() if len(sys.argv) > 1 else sys.stdin.read() + frames = load_rx(text) + ids, plmns, cellframes = {}, set(), 0 + print(f"RX frames: {len(frames)}") + for seq, b in frames: + if len(b) < 16 or u16(b, 0) != 0xABCD: + continue + sid = u16(b, 0x0e) + ids[sid] = ids.get(sid, 0) + 1 + params = b[0x14:] + for p in re.findall(rb'(\d{6})', params): + plmns.add(p.decode()) + if sid == 0x070F: + cellframes += 1 + cells = decode_cellinfo(params) + sp = next(iter(plmns), None) + print(f"\n[seq {seq}] CellInfoList: {len(cells)} cells") + for c in cells: + tag = "SERVING" if c.get('registered') else "neighbor" + print(f" {tag} {c.get('rat'):6} PLMN={c.get('mcc','')}{c.get('mnc','')} " + f"pci={c.get('pci')} tac={c.get('tac')} earfcn={c.get('earfcn') or c.get('arfcn')} " + f"rsrp={c.get('rsrp')} op={c.get('op','')!r}") + for a in heuristics(cells, sp): + print(f" !! {a}") + print(f"\nPLMNs: {sorted(plmns)} 0x070F cell frames: {cellframes}") + print("SIT id counts:", {f"0x{k:04x}": v for k, v in sorted(ids.items(), key=lambda x: -x[1])[:12]}) + if cellframes == 0: + print("\n(no 0x070F cell-list frames captured yet — trigger getCellInfo to exercise it)") + +if __name__ == '__main__': + main() diff --git a/module.prop b/module.prop new file mode 100644 index 0000000..02a8aab --- /dev/null +++ b/module.prop @@ -0,0 +1,6 @@ +id=cellguard +name=CellGuard +version=v1.0.0 +versionCode=1 +author=snake +description=Hardens cellular at the kernel level: blocks 2G/GERAN and null-cipher (EEA0/NEA0/A5-0) connections, forces the modem to LTE or 5G-SA, and watchdog-relocks within ~1s of any downgrade attempt. One-tap band-lock profiles for T-Mobile, Verizon, AT&T, US Cellular, Dish, Cricket, Metro, Google Fi. Managed from the KernelSU-Next Manager (Action button + WebUI). diff --git a/post-fs-data.sh b/post-fs-data.sh new file mode 100755 index 0000000..db8951e --- /dev/null +++ b/post-fs-data.sh @@ -0,0 +1,23 @@ +#!/system/bin/sh +# CellGuard — early-boot config load +# Runs in post-fs-data context, before zygote. + +MODDIR=${0%/*} +CONFIG_DIR="/data/adb/cellguard" +CONFIG_FILE="$CONFIG_DIR/config.sh" + +mkdir -p "$CONFIG_DIR" + +if [ ! -f "$CONFIG_FILE" ]; then + cat > "$CONFIG_FILE" << 'DEFAULTS' +# CellGuard configuration — persisted across reboots. +# Edited by WebUI or /system/bin/cellguard. + +ENABLED=1 +BLOCK_2G=1 +BLOCK_3G=1 +BLOCK_NULL_CIPHER=1 +POLL_MS=1500 +CARRIER=none +DEFAULTS +fi diff --git a/ratlock.sh b/ratlock.sh new file mode 100755 index 0000000..675e835 --- /dev/null +++ b/ratlock.sh @@ -0,0 +1,70 @@ +#!/system/bin/sh +# CellGuard ratlock — hold every active SIM to LTE + 5G(NR) only. +# +# Anti-downgrade enforcement. A modem restricted to LTE+NR will not attach to +# any 2G/3G cell, including a cell-site simulator attempting a downgrade. We use +# the platform telephony API (setAllowedNetworkTypesForReason, USER reason), +# which is applied by rild to the modem — no raw baseband injection needed. +# +# NR = 5G (both NSA and SA). 5G-SA is allowed and preferred. +# +# Mask (TelephonyManager NetworkTypeBitmask, binary form): +# LTE(bit12) | LTE_CA(bit18) | NR(bit19) = 0xC1000 = 11000001000000000000 +CG_DIR="/data/adb/cellguard" +LOG="$CG_DIR/ratlock.log" +MASK_BIN="11000001000000000000" # LTE | LTE_CA | NR +POLL="${1:-5}" # seconds between checks + +mkdir -p "$CG_DIR" +log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG"; } + +# Active voice/data slots (phoneId where a subscription is IN_SERVICE-capable). +active_slots() { + # slots 0..3; a slot is active if get-allowed returns a value (has a sub) + for s in 0 1 2 3; do + v=$(cmd phone get-allowed-network-types-for-users -s "$s" 2>/dev/null) + case "$v" in + *LTE*|*NR*|*GSM*|*WCDMA*) echo "$s" ;; + esac + done +} + +apply() { # $1 = slot + cmd phone set-allowed-network-types-for-users -s "$1" "$MASK_BIN" >/dev/null 2>&1 +} + +# A downgrade attempt = any allowed RAT below LTE (GSM/WCDMA/TDSCDMA/CDMA present). +downgraded() { # $1 = current allowed-types string + case "$1" in + *GSM*|*GPRS*|*EDGE*|*WCDMA*|*HSPA*|*UMTS*|*TD_SCDMA*|*CDMA*|*EVDO*) return 0 ;; + *) return 1 ;; + esac +} + +PERMISSIVE="11111111111111111111" # all RATs (framework filters to modem-supported) +apply_all() { cmd phone set-allowed-network-types-for-users -s "$1" "$PERMISSIVE" >/dev/null 2>&1; } + +# The "Block 2G/3G" WebUI toggle writes $CG/enabled (1=on). Default on. +enabled() { [ "$(cat "$CG_DIR/enabled" 2>/dev/null)" != "0" ]; } + +log "ratlock start (poll=${POLL}s)" + +# watchdog loop: while ON, hold LTE+NR and re-assert on any 2G/3G reintroduction; +# while OFF, restore full RAT so 2G/3G work again. +while true; do + for s in $(active_slots); do + cur=$(cmd phone get-allowed-network-types-for-users -s "$s" 2>/dev/null) + if enabled; then + if downgraded "$cur"; then + log "slot $s DOWNGRADE (allowed=$cur) -> re-asserting LTE+NR(5G)" + apply "$s" + fi + else + # disabled: if still locked, restore permissive once + if ! downgraded "$cur"; then + apply_all "$s"; log "slot $s protection OFF -> restored all RAT" + fi + fi + done + sleep "$POLL" +done diff --git a/sepolicy/cellguard.rule b/sepolicy/cellguard.rule new file mode 100644 index 0000000..5217173 --- /dev/null +++ b/sepolicy/cellguard.rule @@ -0,0 +1,17 @@ +# CellGuard SELinux rules. +# KernelSU-Next usually flips SELinux to permissive, but these let the +# module coexist with enforcing mode too. + +# Shannon / modem AT channels +allow su umts_device chr_file { open read write ioctl getattr } +allow su radio_device chr_file { open read write ioctl getattr } + +# Our own /dev/cellguard char device +allow su device chr_file { open read write ioctl getattr } + +# Insmod / rmmod +allow su kernel system { module_load module_request } +allow su self capability sys_module + +# /proc/cellguard/* +allow su proc file { open read getattr } diff --git a/service.sh b/service.sh new file mode 100755 index 0000000..2a04020 --- /dev/null +++ b/service.sh @@ -0,0 +1,57 @@ +#!/system/bin/sh +# CellGuard — late service script +# +# Primary goal: (1) prevent cellular downgrade — hold the modem to LTE + 5G(NR) +# only; (2) detect IMSI-catchers / cell-site simulators from the modem's own +# CP<->AP diagnostic stream. +# +# On rango (Shannon S5400 / cpif, PCIe) there is NO raw-AT tty and no exposed +# SIT command to inject, so: +# * enforcement uses the platform telephony API (ratlock.sh) +# * diagnostics use a kernel capture module (cgcap.ko) that taps every cpif +# channel and exposes the raw frames at /proc/cgcap/frames +# * decode + CSS heuristics run in userspace (tools/cg_decode.py) + +MODDIR=${0%/*} +CONFIG_DIR="/data/adb/cellguard" +LOG="$CONFIG_DIR/cellguard.log" +KMOD="$MODDIR/common/kmod/cgcap.ko" + +mkdir -p "$CONFIG_DIR" +log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG"; } + +log "CellGuard service start" + +# --- 1. diagnostics: load the CP-frame capture module --- +if lsmod 2>/dev/null | grep -q '^cgcap '; then + log "cgcap already loaded" +elif [ -f "$KMOD" ]; then + insmod "$KMOD" 2>>"$LOG" && log "cgcap.ko loaded (diag at /proc/cgcap/frames)" \ + || log "cgcap.ko insmod FAILED — check dmesg (is cpif up?)" +else + log "cgcap.ko missing at $KMOD — build it first" +fi + +# --- 2. enforcement: hold every active SIM to LTE + 5G(NR) only --- +# ratlock runs its own watchdog loop; launch once, in background. +if ! pgrep -f "$MODDIR/ratlock.sh" >/dev/null 2>&1; then + # wait briefly for RIL/subscriptions to come up after boot + for i in $(seq 1 30); do + [ -n "$(cmd phone get-allowed-network-types-for-users -s 0 2>/dev/null)$(cmd phone get-allowed-network-types-for-users -s 1 2>/dev/null)" ] && break + sleep 1 + done + nohup sh "$MODDIR/ratlock.sh" 5 >/dev/null 2>&1 & + log "ratlock started (LTE+NR/5G enforcement watchdog)" +else + log "ratlock already running" +fi + +# --- 3. detection: always-on IMSI-catcher detector (independent of WebUI) --- +if ! pgrep -f "$MODDIR/cgdetect.sh" >/dev/null 2>&1; then + nohup sh "$MODDIR/cgdetect.sh" 4 >/dev/null 2>&1 & + log "cgdetect started (always-on IMSI-catcher detector)" +else + log "cgdetect already running" +fi + +log "CellGuard service done" diff --git a/system/bin/cellguard b/system/bin/cellguard new file mode 100755 index 0000000..b31605f --- /dev/null +++ b/system/bin/cellguard @@ -0,0 +1,326 @@ +#!/system/bin/sh +# cellguard — CLI driver for the cellguard kernel module. +# +# Invoked by the KernelSU-Next WebUI through ksu.exec("cellguard "). +# Every subcommand prints a single JSON object on stdout so the WebUI +# can JSON.parse() the result directly. + +CONFIG_DIR="/data/adb/cellguard" +CONFIG_FILE="$CONFIG_DIR/config.sh" +DEV=/dev/cellguard + +mkdir -p "$CONFIG_DIR" +[ -f "$CONFIG_FILE" ] || cat > "$CONFIG_FILE" << 'EOF' +ENABLED=1 +BLOCK_2G=1 +BLOCK_3G=1 +BLOCK_NULL_CIPHER=1 +POLL_MS=1500 +CARRIER=none +EOF + +. "$CONFIG_FILE" +[ -z "$CARRIER" ] && CARRIER=none + +VALID_CARRIERS="none tmobile verizon att uscellular dish cricket metro googlefi generic_us" + +# JSON escaping — strings are put through sed to escape \ and " +j_esc() { + printf '%s' "$1" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g' \ + -e ':a;N;$!ba;s/\n/\\n/g' +} + +emit_error() { + printf '{"ok":false,"error":"%s"}\n' "$(j_esc "$1")" + exit 1 +} + +require_dev() { + [ -c "$DEV" ] || emit_error "kernel module not loaded (/dev/cellguard missing)" +} + +save_config() { + cat > "$CONFIG_FILE" << EOF +ENABLED=$ENABLED +BLOCK_2G=$BLOCK_2G +BLOCK_3G=$BLOCK_3G +BLOCK_NULL_CIPHER=$BLOCK_NULL_CIPHER +POLL_MS=$POLL_MS +CARRIER=$CARRIER +EOF +} + +##################################################################### +# status — read /proc/cellguard/status and reformat as JSON +##################################################################### +cmd_status() { + require_dev + if [ ! -f /proc/cellguard/status ]; then + emit_error "/proc/cellguard/status missing" + fi + + # /proc/cellguard/status is key: value, one per line + awk -v cfg2g="$BLOCK_2G" -v cfg3g="$BLOCK_3G" \ + -v cfgnull="$BLOCK_NULL_CIPHER" -v cfgpoll="$POLL_MS" ' + BEGIN { FS=":"; printf "{" ; first=1 } + { + k=$1; sub(/^ +/,"",k); sub(/ +$/,"",k) + v=$2; for (i=3;i<=NF;i++) v=v ":" $i + sub(/^ +/,"",v); sub(/ +$/,"",v) + gsub(/\\/,"\\\\",v); gsub(/"/,"\\\"",v) + if (!first) printf "," + first=0 + # numeric fields + if (k=="enabled" || k=="rat_code" || k=="cipher_known" || \ + k=="cipher_null" || k=="block_2g" || k=="block_3g" || \ + k=="block_null" || k=="poll_ms" || k=="rsrp_dbm" || \ + k=="tx_pwr_dbm" || \ + k=="downgrades" || k=="relocks" || k=="polls" || \ + k=="bands_locked") { + # rat field might be mixed — strip trailing junk + n=v; sub(/[^-0-9].*/,"",n); if (n=="") n=0 + printf "\"%s\":%s", k, n + } else if (k=="modem" || k=="rat" || k=="operator" || \ + k=="carrier" || k=="bands_method") { + printf "\"%s\":\"%s\"", k, v + } else { + printf "\"%s\":\"%s\"", k, v + } + } + END { printf ",\"ok\":true}" } + ' /proc/cellguard/status + echo +} + +##################################################################### +# on / off — flip the guard, persist to config +##################################################################### +cmd_on() { + require_dev + echo "on" > "$DEV" 2>/dev/null || emit_error "write /dev/cellguard failed" + ENABLED=1 + save_config + printf '{"ok":true,"enabled":1}\n' +} + +cmd_off() { + require_dev + echo "off" > "$DEV" 2>/dev/null || emit_error "write /dev/cellguard failed" + ENABLED=0 + save_config + printf '{"ok":true,"enabled":0}\n' +} + +##################################################################### +# apply-config — push saved policy, then on/off accordingly +# (called by service.sh at boot, and by any config-change flow) +##################################################################### +cmd_apply_config() { + require_dev + # Select the carrier profile first so that when we flip the guard on, + # the kernel's full push_lock_policy() applies WS46 + band-lock in + # one CFUN cycle. When the guard is off we still record the carrier + # for next enable. + if [ -n "$CARRIER" ] && [ "$CARRIER" != "none" ]; then + echo "carrier $CARRIER" > "$DEV" 2>/dev/null + fi + if [ "$ENABLED" = "1" ]; then + echo "on" > "$DEV" 2>/dev/null + else + echo "off" > "$DEV" 2>/dev/null + fi + printf '{"ok":true,"applied":true,"enabled":%s,"carrier":"%s"}\n' \ + "$ENABLED" "$CARRIER" +} + +##################################################################### +# relock — force an immediate policy push even if state looks fine +##################################################################### +cmd_relock() { + require_dev + echo "relock" > "$DEV" 2>/dev/null || emit_error "relock write failed" + printf '{"ok":true,"relocked":true}\n' +} + +##################################################################### +# scan — trigger AT+COPS=?, parse result, emit JSON list +# +# AT+COPS=? response: +# +COPS: (stat,"long","short","numeric",AcT),(...),... +# stat: 0=unknown 1=available 2=current 3=forbidden +# AcT : 0/1/3/8 = 2G, 2/4-6 = 3G, 7/9/10 = LTE, 11/13 = NR +##################################################################### +cmd_scan() { + require_dev + # Kick the scan and wait. AT+COPS=? can take up to ~180s on a cold + # SIM; the module runs it synchronously in the ioctl path. + echo "scan" > "$DEV" 2>/dev/null || emit_error "scan write failed" + + # Poll /proc/cellguard/cells until it has a +COPS: line or we time out + n=0 + while [ $n -lt 200 ]; do + if grep -q "+COPS:" /proc/cellguard/cells 2>/dev/null; then + break + fi + sleep 1 + n=$((n + 1)) + done + + raw=$(cat /proc/cellguard/cells 2>/dev/null) + [ -z "$raw" ] && emit_error "scan produced no output" + + printf '%s' "$raw" | awk ' + BEGIN { + printf "{\"ok\":true,\"cells\":[" + first=1 + } + { + line=$0 + # Work through each (...) tuple + while (match(line, /\([^()]+\)/)) { + tup=substr(line, RSTART+1, RLENGTH-2) + line=substr(line, RSTART+RLENGTH) + + # Split tup on commas, but ignore commas inside quotes + n=0 + buf="" + inq=0 + for (i=1;i<=length(tup);i++) { + c=substr(tup,i,1) + if (c=="\"") { inq=1-inq; continue } + if (c=="," && !inq) { n++; f[n]=buf; buf=""; continue } + buf = buf c + } + n++; f[n]=buf + + # A scan tuple has 5 fields: stat,long,short,numeric,act + # The trailing "supported modes" / "supported formats" tuples + # have 1-2 numeric fields — skip those. + if (n < 4) continue + stat=f[1]; longn=f[2]; shortn=f[3]; num=f[4]; act=f[5] + if (stat !~ /^[0-9]+$/) continue + + # Map AcT to RAT name and a security-ranking score + act_n = act + 0 + rat="?"; score=0 + if (act_n==0||act_n==1||act_n==3||act_n==8) { rat="2G"; score=1 } + else if (act_n==2||act_n==4||act_n==5||act_n==6) { rat="3G"; score=2 } + else if (act_n==7||act_n==9||act_n==10) { rat="LTE"; score=3 } + else if (act_n==11||act_n==13) { rat="5G-SA"; score=4 } + + avail="unknown" + if (stat=="0") avail="unknown" + else if (stat=="1") avail="available" + else if (stat=="2") avail="current" + else if (stat=="3") avail="forbidden" + + # Escape + gsub(/\\/,"\\\\",longn); gsub(/"/,"\\\"",longn) + gsub(/\\/,"\\\\",shortn); gsub(/"/,"\\\"",shortn) + gsub(/\\/,"\\\\",num); gsub(/"/,"\\\"",num) + + if (!first) printf "," + first=0 + printf "{\"operator\":\"%s\",\"short\":\"%s\",\"mcc_mnc\":\"%s\",\"rat\":\"%s\",\"act\":%d,\"avail\":\"%s\",\"score\":%d}", \ + longn, shortn, num, rat, act_n, avail, score + } + } + END { printf "]}\n" } + ' +} + +##################################################################### +# carrier — set the band-lock profile +# cellguard carrier list +# cellguard carrier +##################################################################### +cmd_carrier() { + name="$1" + if [ -z "$name" ] || [ "$name" = "list" ]; then + printf '{"ok":true,"current":"%s","carriers":[' "$CARRIER" + first=1 + for c in $VALID_CARRIERS; do + if [ "$first" = "1" ]; then first=0; else printf ','; fi + printf '"%s"' "$c" + done + printf ']}\n' + return + fi + + ok=0 + for c in $VALID_CARRIERS; do + [ "$c" = "$name" ] && ok=1 + done + [ "$ok" = "1" ] || emit_error "unknown carrier: $name" + + require_dev + echo "carrier $name" > "$DEV" 2>/dev/null || emit_error "write failed" + CARRIER="$name" + save_config + printf '{"ok":true,"carrier":"%s"}\n' "$name" +} + +##################################################################### +# config — read/write persisted policy from the WebUI +# +# Usage: +# cellguard config get +# cellguard config set block_2g=1 block_3g=0 block_null_cipher=1 poll_ms=2000 +##################################################################### +cmd_config() { + sub="$1"; shift + case "$sub" in + get|"") + printf '{"ok":true,"enabled":%s,"block_2g":%s,"block_3g":%s,"block_null_cipher":%s,"poll_ms":%s,"carrier":"%s"}\n' \ + "$ENABLED" "$BLOCK_2G" "$BLOCK_3G" "$BLOCK_NULL_CIPHER" "$POLL_MS" "$CARRIER" + ;; + set) + while [ -n "$1" ]; do + k="${1%%=*}" + v="${1#*=}" + case "$k" in + enabled) ENABLED="$v" ;; + block_2g) BLOCK_2G="$v" ;; + block_3g) BLOCK_3G="$v" ;; + block_null_cipher) BLOCK_NULL_CIPHER="$v" ;; + poll_ms) POLL_MS="$v" ;; + *) emit_error "unknown key: $k" ;; + esac + shift + done + save_config + cmd_apply_config + ;; + *) + emit_error "config: unknown subcommand '$sub'" + ;; + esac +} + +##################################################################### +# dispatch +##################################################################### +case "$1" in + status) cmd_status ;; + on) cmd_on ;; + off) cmd_off ;; + relock) cmd_relock ;; + scan) cmd_scan ;; + carrier) shift; cmd_carrier "$@" ;; + apply-config) cmd_apply_config ;; + config) shift; cmd_config "$@" ;; + *) + cat << USAGE +cellguard — driver for /dev/cellguard + + cellguard status show current RAT, operator, cipher, counters + cellguard on enable the guard (force LTE/NR, re-lock on drop) + cellguard off disable and release the modem + cellguard relock force one relock pass now + cellguard scan full AT+COPS=? scan, JSON list of visible networks + cellguard config get|set read or update persisted policy + +All subcommands emit a single-line JSON object on stdout. +USAGE + ;; +esac diff --git a/uninstall.sh b/uninstall.sh new file mode 100755 index 0000000..a8bd532 --- /dev/null +++ b/uninstall.sh @@ -0,0 +1,22 @@ +#!/system/bin/sh +# CellGuard — cleanup on uninstall + +CONFIG_DIR="/data/adb/cellguard" +PID_FILE="$CONFIG_DIR/webui.pid" + +# Stop WebUI server +if [ -f "$PID_FILE" ]; then + kill $(cat "$PID_FILE") 2>/dev/null +fi + +# Release the kernel-enforced RAT lock before unloading so the modem +# can return to user-selected preference instead of being stuck. +if [ -c /dev/cellguard ]; then + echo "release" > /dev/cellguard 2>/dev/null +fi + +# Unload kernel module +lsmod 2>/dev/null | grep -q cellguard && rmmod cellguard 2>/dev/null + +# Remove persistent config +rm -rf "$CONFIG_DIR" diff --git a/webroot/css/style.css b/webroot/css/style.css new file mode 100644 index 0000000..edd6e05 --- /dev/null +++ b/webroot/css/style.css @@ -0,0 +1,190 @@ +:root { + --bg: #0b0f14; + --panel: #11171f; + --panel-2: #161e29; + --line: #1f2a38; + --text: #e6edf3; + --muted: #8ea0b5; + --accent: #7ee787; + --warn: #f2cc60; + --err: #ff7b72; + --ok: #7ee787; + --blue: #79c0ff; +} + +* { box-sizing: border-box; } +html, body { + margin: 0; padding: 0; + background: var(--bg); + color: var(--text); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + "Helvetica Neue", Arial, sans-serif; + font-size: 15px; + line-height: 1.4; + overscroll-behavior-y: none; +} + +/* Header */ +.bar { + position: sticky; top: 0; z-index: 10; + display: flex; align-items: center; justify-content: space-between; + padding: 14px 18px; + background: rgba(11,15,20,0.92); + backdrop-filter: blur(14px); + border-bottom: 1px solid var(--line); +} +.title { display: flex; align-items: center; gap: 10px; } +.title h1 { margin: 0; font-size: 17px; letter-spacing: 0.02em; } +.logo { color: var(--accent); font-size: 18px; } +.state { + font-size: 12px; font-weight: 600; + padding: 4px 10px; border-radius: 999px; + background: var(--panel-2); color: var(--muted); + border: 1px solid var(--line); +} +.state.on { color: var(--ok); border-color: color-mix(in srgb, var(--ok) 40%, var(--line)); } +.state.off { color: var(--muted); } +.state.err { color: var(--err); border-color: color-mix(in srgb, var(--err) 40%, var(--line)); } + +main { padding: 16px; display: flex; flex-direction: column; gap: 14px; max-width: 680px; margin: 0 auto; } + +/* Cards */ +.card { + background: var(--panel); + border: 1px solid var(--line); + border-radius: 14px; + padding: 16px 18px; +} +.card h2 { font-size: 15px; margin: 0 0 10px; } +.card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 4px; } +.card-head h2 { margin: 0; } +.hint { font-size: 12px; color: var(--muted); margin: 0 0 10px; } + +/* Toggle card */ +.toggle-card { display: flex; align-items: center; justify-content: space-between; gap: 14px; } +.toggle-copy h2 { margin: 0 0 4px; } +.toggle-copy p { margin: 0; font-size: 13px; color: var(--muted); } + +/* Toggle switch */ +.switch { + position: relative; display: inline-block; + width: 58px; height: 32px; flex-shrink: 0; +} +.switch input { opacity: 0; width: 0; height: 0; } +.slider { + position: absolute; inset: 0; + background: #2a3646; border-radius: 999px; cursor: pointer; + transition: background .2s; +} +.slider::before { + content: ""; + position: absolute; height: 24px; width: 24px; left: 4px; top: 4px; + background: #cdd9e5; border-radius: 50%; + transition: transform .2s, background .2s; +} +.switch input:checked + .slider { background: color-mix(in srgb, var(--accent) 60%, #1d2a1f); } +.switch input:checked + .slider::before { transform: translateX(26px); background: var(--accent); } +.switch input:disabled + .slider { opacity: .5; cursor: not-allowed; } + +/* Key/value rows */ +.row { + display: flex; justify-content: space-between; align-items: center; + padding: 8px 0; + border-bottom: 1px solid color-mix(in srgb, var(--line) 60%, transparent); +} +.row:last-child { border-bottom: none; } +.row.sub .k, .row.sub .v { color: var(--muted); font-size: 13px; } +.k { color: var(--muted); } +.v { font-weight: 600; } +.v.mono { font-family: ui-monospace, "SF Mono", Menlo, monospace; font-size: 12px; font-weight: 500; } + +.badge { + display: inline-block; padding: 2px 8px; border-radius: 999px; + font-size: 11px; font-weight: 600; letter-spacing: 0.02em; + border: 1px solid var(--line); +} +.badge-2g { color: var(--err); background: color-mix(in srgb, var(--err) 18%, transparent); border-color: color-mix(in srgb, var(--err) 50%, var(--line)); } +.badge-3g { color: var(--warn); background: color-mix(in srgb, var(--warn) 15%, transparent); border-color: color-mix(in srgb, var(--warn) 50%, var(--line)); } +.badge-lte { color: var(--blue); background: color-mix(in srgb, var(--blue) 15%, transparent); border-color: color-mix(in srgb, var(--blue) 50%, var(--line)); } +.badge-5g { color: var(--ok); background: color-mix(in srgb, var(--ok) 18%, transparent); border-color: color-mix(in srgb, var(--ok) 50%, var(--line)); } +.badge-unk { color: var(--muted); } + +/* Select dropdown */ +.sel { + background: var(--panel-2); + color: var(--text); + border: 1px solid var(--line); + border-radius: 10px; + padding: 8px 34px 8px 12px; + font: inherit; font-weight: 600; + cursor: pointer; + appearance: none; + background-image: url("data:image/svg+xml;utf8,"); + background-repeat: no-repeat; + background-position: right 12px center; +} +.sel:hover { background-color: #1e2838; border-color: #2a3646; } +.sel:disabled { opacity: 0.5; cursor: not-allowed; } + +/* Buttons */ +.btn { + background: var(--panel-2); + color: var(--text); + border: 1px solid var(--line); + border-radius: 10px; + padding: 8px 14px; + font: inherit; font-weight: 600; + cursor: pointer; + transition: background .15s, border-color .15s, opacity .15s; +} +.btn:hover:not(:disabled) { background: #1e2838; border-color: #2a3646; } +.btn:disabled { opacity: 0.5; cursor: not-allowed; } + +/* Cells list */ +.cells { display: flex; flex-direction: column; gap: 6px; } +.carrier-group { + background: var(--panel-2); border: 1px solid var(--line); + border-radius: 12px; overflow: hidden; +} +.carrier-head { + padding: 10px 14px; + border-bottom: 1px solid var(--line); + font-weight: 700; font-size: 14px; + display: flex; justify-content: space-between; align-items: center; +} +.carrier-head .mccmnc { color: var(--muted); font-weight: 500; font-size: 12px; font-family: ui-monospace, Menlo, monospace; } +.cell-row { + display: flex; align-items: center; justify-content: space-between; + padding: 10px 14px; + border-top: 1px solid color-mix(in srgb, var(--line) 60%, transparent); + font-size: 13px; +} +.cell-row:first-child { border-top: none; } +.cell-row .left { display: flex; align-items: center; gap: 10px; } +.cell-row .right { color: var(--muted); font-size: 12px; } + +.avail-current { color: var(--accent); } +.avail-available { color: var(--text); } +.avail-forbidden { color: var(--err); } +.avail-unknown { color: var(--muted); } + +.empty { padding: 20px; text-align: center; color: var(--muted); } + +/* Footer */ +.foot { + text-align: center; font-size: 11px; color: var(--muted); + padding: 10px 0 24px; +} +.dot { margin: 0 6px; } + +/* Scanning spinner */ +.spin { + display: inline-block; width: 12px; height: 12px; + border: 2px solid color-mix(in srgb, var(--muted) 50%, transparent); + border-top-color: var(--accent); + border-radius: 50%; + animation: spin 0.8s linear infinite; + vertical-align: -2px; + margin-right: 6px; +} +@keyframes spin { to { transform: rotate(360deg); } } diff --git a/webroot/index.html b/webroot/index.html new file mode 100644 index 0000000..c98b9e0 --- /dev/null +++ b/webroot/index.html @@ -0,0 +1,69 @@ + + + + + + +CellGuard + + + +

+
+ +

CellGuard

+
+
+
+ +
+ +
+
+

Block 2G / 3G

+

Force LTE / 5G(NR) only. Re-locks the modem on any downgrade.

+
+ +
+ + +
+
+

IMSI-catcher detection

+ +
+
Status
+
Serving RAT
+
Operator
+
PLMN
+
Cell CI / PCI / TAC
+
EARFCN
+
Diag frames0
+
RAT lock
+
+ + +
+
+

Alerts

+ +
+
+
+ +
+ cellguard + · + idle +
+
+ + + + diff --git a/webroot/js/app.js b/webroot/js/app.js new file mode 100644 index 0000000..9932cba --- /dev/null +++ b/webroot/js/app.js @@ -0,0 +1,135 @@ +// CellGuard WebUI — KernelSU-Next ksu.exec() bridge. +// +// The WebUI is a viewer/controller only. All work runs in background daemons: +// ratlock.sh — holds LTE+5G(NR) only (the 2G/3G-block toggle) +// cgdetect.sh — always-on IMSI-catcher detection -> status + alerts files +// cgcap.ko — raw CP-frame capture (diag) +// It talks to them through cgctl.sh, which emits one JSON line per command. + +(function () { + const $ = (id) => document.getElementById(id); + const MOD = "/data/adb/modules/cellguard"; + + const ui = { + toggle: $("toggle"), dToggle: $("dToggle"), headerState: $("headerState"), dVerdict: $("dVerdict"), + sRat: $("sRat"), sOp: $("sOp"), sPlmn: $("sPlmn"), sCell: $("sCell"), + sEarfcn: $("sEarfcn"), sFrames: $("sFrames"), sLock: $("sLock"), + alerts: $("alerts"), footMsg: $("footMsg"), clrBtn: $("clrBtn"), + }; + + // KernelSU-Next bridge: ksu.exec(command, optionsJson, callbackFuncName). + // Results arrive via window[callbackFuncName](errno, stdout, stderr) — the + // callback is passed BY NAME (a string), not as a function object. + function exec(cmd) { + return new Promise((resolve) => { + if (typeof ksu === "undefined" || !ksu.exec) { + resolve({ code: -1, stdout: "", stderr: "ksu bridge missing" }); + return; + } + const cb = "cg_cb_" + Math.random().toString(36).slice(2); + let done = false; + const finish = (code, stdout, stderr) => { + if (done) return; done = true; + try { delete window[cb]; } catch (_) {} + resolve({ code: (code | 0), stdout: stdout || "", stderr: stderr || "" }); + }; + window[cb] = finish; + try { + ksu.exec(cmd, "{}", cb); + } catch (e) { + // very old bridge with a direct function callback + try { ksu.exec(cmd, (c, o, er) => finish(c, o, er)); } + catch (_) { finish(-1, "", String(e)); } + } + setTimeout(() => finish(-1, "", "timeout"), 8000); + }); + } + + async function ctl(sub) { + const r = await exec("sh " + MOD + "/cgctl.sh " + sub); + try { return JSON.parse(r.stdout.trim()); } + catch (e) { return { ok: false, error: r.stderr || r.stdout || `exit ${r.code}` }; } + } + + function esc(s) { + return String(s).replace(/[&<>"']/g, c => + ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c])); + } + + function ratBadge(r) { + const cls = ({ + GSM: "badge-2g", GERAN: "badge-2g", GPRS: "badge-2g", EDGE: "badge-2g", + UMTS: "badge-3g", WCDMA: "badge-3g", HSPA: "badge-3g", HSPAP: "badge-3g", UTRAN: "badge-3g", + LTE: "badge-lte", NR: "badge-5g", + })[r] || "badge-unk"; + return `${esc(r || "?")}`; + } + + async function refresh() { + const s = await ctl("status"); + if (!s || !s.ok) { ui.footMsg.textContent = (s && s.error) || "backend unavailable"; return; } + + ui.toggle.checked = !!s.block; + ui.toggle.disabled = false; + ui.dToggle.checked = !!s.detect; + ui.dToggle.disabled = false; + + ui.sRat.innerHTML = ratBadge(s.rat); + ui.sOp.textContent = (s.operator && s.operator !== "?") ? s.operator : "no service"; + ui.sPlmn.textContent = s.plmn || "?"; + ui.sCell.textContent = `${s.ci || "?"} / ${s.pci || "?"} / ${s.tac || "?"}`; + ui.sEarfcn.textContent = s.earfcn || "?"; + ui.sFrames.textContent = s.frames || 0; + ui.sLock.innerHTML = s.lock + ? `LTE + 5G only` + : `2G/3G allowed`; + + const bad = s.suspect && s.suspect !== "none"; + ui.dVerdict.innerHTML = bad + ? `${esc(s.suspect)}` + : `clear`; + ui.headerState.textContent = bad ? "ALERT" : (s.block ? "armed" : "off"); + ui.headerState.className = "state " + (bad ? "err" : (s.block ? "on" : "off")); + ui.footMsg.textContent = `RAT ${s.rat || "?"} · ${s.frames || 0} frames`; + + const a = await ctl("alerts"); + if (a && a.ok) { + ui.alerts.innerHTML = (a.lines && a.lines.length) + ? a.lines.slice().reverse().map(l => + `
${esc(l)}
`).join("") + : `
No alerts.
`; + } + } + + async function onToggle() { + ui.toggle.disabled = true; + ui.footMsg.textContent = ui.toggle.checked ? "enabling 2G/3G block…" : "disabling…"; + const r = await ctl("block " + (ui.toggle.checked ? "on" : "off")); + if (!r || !r.ok) { ui.toggle.checked = !ui.toggle.checked; ui.footMsg.textContent = "failed"; } + ui.toggle.disabled = false; + setTimeout(refresh, 800); + } + + async function onDetectToggle() { + ui.dToggle.disabled = true; + ui.footMsg.textContent = ui.dToggle.checked ? "enabling detection…" : "pausing detection…"; + const r = await ctl("detect " + (ui.dToggle.checked ? "on" : "off")); + if (!r || !r.ok) { ui.dToggle.checked = !ui.dToggle.checked; ui.footMsg.textContent = "failed"; } + ui.dToggle.disabled = false; + setTimeout(refresh, 800); + } + + async function onClear() { + await exec("sh -c ': > /data/adb/cellguard/alerts'"); + refresh(); + } + + ui.toggle.disabled = true; + ui.dToggle.disabled = true; + ui.toggle.addEventListener("change", onToggle); + ui.dToggle.addEventListener("change", onDetectToggle); + ui.clrBtn.addEventListener("click", onClear); + + refresh(); + setInterval(refresh, 3000); +})();