reverse-skills-max: initial public release (restored, redacted, hardened)

This commit is contained in:
baradok609hecl1pq6qi
2026-10-20 02:17:15 +03:00
commit da24c2bd20
2227 changed files with 443931 additions and 0 deletions

View File

@@ -0,0 +1,226 @@
# 跨系统运行模型与误判总表
**用途**:任何"现象看起来异常"的时刻,先过这张表。它的价值不在于介绍系统,而在于**阻止把某个系统的正常机制判成 bug / hook / dead code / 恶意**。
**前置**:本文件假设你已经知道"这是哪个系统"。**认不出目标时先走 [[system-fingerprints]]**(载体格式 → 家族 → 系统 → 易混淆对 → 负判据)。两者配合使用:先定身份,再查该身份允许哪些"正常异常"。
判定顺序(本文件的核心主张):
```
观察异常现象
→ 识别目标的运行模型(哪个系统、哪个构建、哪个阶段)
→ 判断该模型允许哪些"正常异常现象"
→ cross-view / 配置核对 / 运行时验证
→ 最后才判定:损坏、恶意,或真的是 bug
```
## 一、十类高频误判(先怀疑,再排除)
| 观察到的现象 | 不要直接推断 | 必须先排除 |
|---|---|---|
| 函数 0 xref | dead code | linker set、generated registry、callback、IPC dispatch、RTE、init table、AST、exception table |
| 地址变化 | hook / 不同 binary | KASLR、KARL、relocation、PAC、GPA/HPA、local handle |
| 同一个整数 | 同一个对象 | CPtr、Zircon handle、endpoint、fid、grant ref、event port、capability name |
| driver 没有 syscall / IRP handler | 没有 I/O | framework callback、user-space driver、miniport、resource manager、DDF、scheme |
| thread READY 却不运行 | scheduler bug | partition window、budget、SC、safety class、上层 scheduler、调度器被禁用 |
| 文件存在但代码没运行 | loader bug | activation state、AuxKC、Function Group、module load stage、按需发现 |
| disk code ≠ runtime code | rootkit | livepatch、ftrace、jump labels、kernel collection、runtime relocation、init 段已释放 |
| IPC 没有 syscall trace | 没发生通信 | shared-memory channel、local transport、co-located driver、VMBus、grant table |
| memory access fault | 内存坏了 | MPU zone、capability rights、cell/partition 归属、IOMMU、当前特权级 |
| 服务突然换 PID / endpoint | 劫持 | restart / live update / reincarnation / 按需加载 |
## 二、共同规律 A:本地句柄 ≠ 全局标识
跨进程、跨分区、跨域建图之前,**必须先恢复 `本地标识 → 命名空间/表 → 真实对象`**,再谈关系。
| 系统 | 本地标识 | 恢复方式 |
|---|---|---|
| seL4 | CPtr | 各自的 CSpace 映射 → kernel object |
| Fuchsia/Zircon | handle 整数 | 进程 handle 表 → 对象 + rights |
| MINIX 3 | endpoint / grant ID | label 解析、grant 表条目 + 序列号 |
| Genode | capability 局部名 | PD 局部命名 → session/对象 |
| Plan 9 | 9P fid | 连接 + walk 历史 + qid |
| Xen | grant ref / event port | grant 表条目;`shared_info` 位掩码(远端端口才稳定) |
| Bao | —— | 共享对象 identity 是配置里的 `shmem_id`,不是地址 |
| ACRN / Jailhouse | —— | 共享区归属由配置/前缀(`dm:/` vs `hv:/`)决定 |
## 三、共同规律 B:ready 不是"有资格现在占用 CPU"的充分条件
分区/安全系统(ARINC 653、PikeOS、INTEGRITY、Deos、XtratuM、LynxSecure、Jailhouse、Bao、Quest-V)**共用一条经验**:
```
资源资格(budget/quota)
→ 分区/域资格(当前窗口、调度计划、CPU 归属、safety mode)
→ 本地调度器资格
→ 线程优先级
```
**不能简化为"最高优先级 READY 者运行"。** 分析时先对齐分区级时间线,再看线程级。
## 四、共同规律 C:没有内核入口 ≠ 没有 I/O
用户态驱动/服务形态各异,但结论相同——**在 kernel 里找不到 dispatch 是常态**:
resource manager(QNX)、DriverKit/System Extension(macOS)、driver host(Fuchsia)、DDF(HelenOS)、scheme(Redox)、user-space service + RS(MINIX 3)、user-space file server(Plan 9)。
## 五、共同规律 D:没有 CFG 边 / 没有 syscall ≠ 没发生
- **注册式**:linker set(FreeBSD `set_*`)、iterable section + `SYS_INIT`(Zephyr)、generated RTE(AUTOSAR)、配置生成的 task/handler(TOPPERS、RTEMS)、autoconf(OpenBSD)、按需 autoload(NetBSD)
- **回调式**:framework callback(Windows 各模型)、SDK callback(VxWorks io-pkt、`nw_pthread_create`)
- **异步控制流**:AST(OpenVMS)、SRB(z/OS)、fault handler(seL4)
- **异常边**:`__ex_table`(Linux exception fixup)
- **共享内存式**:PV ring(Xen)、driver runtime local transport(Fuchsia)、grant(MINIX)、VMBus(Hyper-V)、VirtIO/共享页
## 六、共同规律 E:信任边界不能从指令形态推导
**在 capability / 沙箱 / 多版本 / live-update 型驱动系统里**(覆盖 seL4、Genode、Fuchsia、多内核系统、分区 hypervisor、用户态驱动 OS 等):
```
不从 CPL、地址、直接调用或 MMIO 指令推导信任边界
```
先恢复 **domain、capability、mapping、device ownership、version、lifecycle topology**,再解释控制流。四条推论:
| 看起来像 | 实际可能是 |
|---|---|
| 直接 call | 跨逻辑组件的调用(同地址空间 ≠ 同组件;同组件也可能跨隔离域) |
| 直接 MMIO | 被授权的设备映射(**"能访问 MMIO" ≠ "有整机内核权限"**) |
| 同特权级 | 靠 MMU 隔离的独立域(**Ring 0 → 全内核可寻址** 在这类系统上是 invalid assumption) |
| 整数句柄 | capability / 共享页偏移 / domain-local 标识(跨域比较无意义) |
配套要求:内存取证要区分 **VA / PA / backing frame / capability / owner domain / mapped domain**;共享内存指针要带域语义(`{domain, cap, mapping, offset, length, rights}`),否则数据流分析会把合法跨域流错误合并。具体系统分支见 [[re-kernel/hic]]、[[re-kernel/sel4-kernel]]、[[re-kernel/zircon-kernel]]、[[re-kernel/genode]]。
## 七、共同规律 F:磁盘上的 ≠ 正在跑的
livepatch / ftrace / jump label(Linux)、AuxKC 与 Kernel Collection(macOS)、runtime relocation 与 `__init` 释放(Linux)、live update(MINIX 3)、动态模块替换(Nucleus、OSE)、按需发现(Haiku)。
**动手比较前先对齐三份身份**:磁盘版本 / 加载集合中的版本 / 当前真正在跑的版本。
## 七、跨系统异常处理树
```
看到"异常"
│
├─ 函数没有 caller
│ ├─ callback registration
│ ├─ linker set
│ ├─ generated RTE / config
│ ├─ IPC dispatch
│ ├─ AST / SRB
│ ├─ exception table(__ex_table)
│ └─ init / iterable section
│
├─ 地址不一致
│ ├─ KASLR / KARL
│ ├─ PE / ELF relocation
│ ├─ PAC
│ ├─ GPA / HPA
│ ├─ local handle namespace
│ └─ runtime KC / image
│
├─ driver 没有内核入口
│ ├─ user-space driver
│ ├─ resource manager
│ ├─ DriverKit
│ ├─ Fuchsia driver host
│ ├─ Redox scheme
│ ├─ HelenOS DDF
│ └─ MINIX service
│
├─ thread 不执行
│ ├─ partition window
│ ├─ budget / quota
│ ├─ SC donation
│ ├─ safety class
│ ├─ Hwi/Swi scheduler 被禁用
│ ├─ partition mode(未进 NORMAL)
│ └─ 上层 scheduler
│
├─ IPC 没有 syscall
│ ├─ shared-memory ring
│ ├─ polling
│ ├─ co-located transport
│ ├─ VMBus / GPADL
│ ├─ grant table
│ └─ hypervisor channel
│
├─ memory access fault
│ ├─ capability rights
│ ├─ MPU zone
│ ├─ task isolation
│ ├─ cell / partition assignment
│ ├─ IOMMU
│ └─ runtime privilege level
│
├─ binary 存在但没运行
│ ├─ AUTOSAR Function Group / Machine State
│ ├─ System Extension activation
│ ├─ boot / module stage
│ ├─ partition mode
│ └─ on-demand driver discovery
│
└─ runtime 与 disk 不同
├─ livepatch
├─ jump-label / ftrace
├─ AuxKC / kernel collection
├─ dynamic module relocation
├─ init code 已释放
└─ live update / restart
```
## 八、使用方式
1. 现象命中上表任一行 → **先按"必须先排除"逐项核对**,不要跳到结论
2. 需要某个系统的细节 → 按 [[rerouting]] A 表或 [[capability-index]] 反查对应技能与分支
3. 核对手段统一是三样:**cross-view**(多视图交叉)、**configuration**(配置/清单/计划文件)、**runtime verification**(运行时状态而非磁盘内容)
4. 只有在排除完该模型允许的正常机制之后,才写"损坏 / 恶意 / bug"的结论——并在报告里写明**排除了哪些可能性、依据是什么**
## 九、异常速查表(按现象直查)
| 现象 | 优先考虑 |
|---|---|
| AUTOSAR binary 存在但 process 不存在 | Function Group State / Execution Manifest |
| AUTOSAR service 暂时发现不到 | 服务发现允许空结果 / 可用性回调生命周期 |
| AUTOSAR process 无 crash 却重启 | 平台健康监控 → 状态管理 |
| AUTOSAR 更新后仍旧数据 / 数据消失 | Persistency 更新策略(keep / overwrite / delete) |
| 分离内核里找不到 runtime 配置器 | 静态配置 + 无动态系统修改 |
| guest 直接操作真实 MMIO / IRQ | 静态 direct assignment(I/O 被导出到 guest) |
| 分区 RTOS 里高优先级 READY 不执行 | 时间窗 / 调度域资格 |
| 分区 RTOS 多出 CPU 时间 | slack 回收 |
| 分区 RTOS 的 major frame 起点缓慢漂移 | 外部时钟同步类机制(需在具体型号文档确认) |
| 认证 RTOS 里同一地址权限不同 | per-task MPU/MMU 区域 |
| 认证 RTOS 里句柄不像指针 | 间接对象 ID + 交叉引用表 |
| ISR 唤醒了 task 却不切换 | 嵌套 ISR / ISR 退出协议 / 调度器锁 |
| task 被唤醒但没有资源 | 中止等待路径(唤醒 ≠ 获取成功) |
| 线性地址下仍存在隔离 | 线性映射 + entitlement(不是每进程独立 VA) |
| module 无 reboot 被替换 | 动态 reload / restart / update |
| 遇到 "partition" 一词 | 先分:空间隔离域 vs 固定块内存池 |
| 高优先级 task READY 不跑(TI SYS/BIOS) | 禁用 Swi 调度会连带禁用 Task 调度 |
| Swi 的栈看起来像 ISR 栈 | Swi 本就运行在系统/ISR 栈上 |
| ISR 里调用的 API 效果延后 | ISR FIFO 延迟队列 |
| 同一对象不同线程权限不同 | Safety Class / MPU 保护域 |
| plan switch 延迟生效 | 普通切换要等当前计划/MAF 结束 |
| plan 瞬间切换 | 健康监控切维护计划 |
| 采样端口"丢中间值" | latest-value 覆盖语义 |
| Service VM 里设备消失又回来 | 设备所有权移交给 post-launched VM |
| 共享内存设备各自正常却互不相通 | 两种实现(dm-land / hv-land)不互通 |
| 小整数被当地址(Hyper-V) | GPADL 是句柄 |
| 删除 GPADL 时卡住 | server 仍映射,阻塞直到解除 |
| packet 回调返回但资源未释放 | 完成调用可延后 |
| 取外部数据返回"待决" | 需要分页;稍后可能在不同 IRQL 再次回调 |
| 网络 VMBus 流量突然消失但网络正常 | SR-IOV VF 直通路径切换 |
| ring 更新却没有通知(Xen) | 通知抑制(阈值未越过) |
| event unmask 行为奇怪 | pending / masked / FIFO 语义 |
| 迁移后 domid / 端口变化 | 协议需要重新协商 |
| 同一 build 里事件记账布局不同 | 两套 ABI,解析器不能混用 |
| 0 xref 的 init 函数(Unikraft) | 多级初始化表(构造/早期/平台/库/rootfs/系统/晚期) |
| 同名 syscall 出现多个符号 | libc 风格 / raw-error 风格 / shim 三层包装 |
| 缺 syscall 返回 ENOSYS 但应用照跑 | 可选 syscall 桩 |
| 同一源码的 I/O 完全不同(MirageOS) | 构建目标决定 backend |
| 全部"线程"一起卡死 | 协作式线程不让出(饿死事件循环) |
| 后台任务异常没有直接杀系统 | 异步异常处理策略 |
## 十、版本与代际提示
- **按目标做版本指纹再套条目**:规范与手册存在代际差异——例如某平台规范已推进到新版本而多数公开细节来自上一版;某 hypervisor 最完整的公开手册属于某一代(如 XM-4),**不要无条件套到其他代际**
- 同一系统的不同产品线(安全认证版与基础版)**也不是同一份二进制/内核**,机制可选项不同