309 lines
14 KiB
Markdown
309 lines
14 KiB
Markdown
# ADR-042: Security RVF — AIDefence + TEE Hardened Cognitive Container
|
|
|
|
| Field | Value |
|
|
|-------------|------------------------------------------------|
|
|
| Status | Accepted |
|
|
| Date | 2025-02-21 |
|
|
| Authors | ruv |
|
|
| Supersedes | — |
|
|
| Implements | ADR-041 Tier 1 (Security Container) |
|
|
|
|
## Context
|
|
|
|
ADR-041 identified 15 npm packages suitable for RVF cognitive containers. This ADR
|
|
specifies the **ultimate security RVF** — a single `.rvf` file that combines:
|
|
|
|
1. **AIDefence** — 5-layer adversarial defense (prompt injection, jailbreak, PII, behavioral, policy)
|
|
2. **TEE attestation** — Hardware-bound trust (SGX, SEV-SNP, TDX, ARM CCA)
|
|
3. **Hardened Linux microkernel** — Minimal attack surface boot image + KernelBinding anti-tamper
|
|
4. **Coherence Gate** — Anytime-valid permission authorization
|
|
5. **RBAC + Ed25519 signing** — Role-based access with cryptographic proof
|
|
6. **Witness chain audit** — Tamper-evident hash-chained event log
|
|
7. **Self-bootstrapping** — Dual WASM (Interpreter + Microkernel) for standalone execution
|
|
8. **Dashboard** — Embedded security monitoring UI (DASHBOARD_SEG)
|
|
9. **Quantization** — Scalar (int8, 4x) + Binary (1-bit, 32x) compression
|
|
10. **Lifecycle** — Filter deletion, compaction, and permanent freeze/seal
|
|
|
|
The result is a self-contained, bootable, cryptographically sealed security appliance
|
|
with 30 verified capabilities, end-to-end from silicon to application layer.
|
|
|
|
## Decision
|
|
|
|
Build `security_hardened.rvf` as a capstone example in `examples/rvf/examples/` that
|
|
exercises every security primitive in the RVF format.
|
|
|
|
## Architecture
|
|
|
|
```
|
|
security_hardened.rvf
|
|
├── KERNEL_SEG (0x0E) Hardened Linux 6.x + KernelBinding (128B anti-tamper)
|
|
├── EBPF_SEG (0x0F) Packet filter + syscall policy enforcer
|
|
├── WASM_SEG #1 (0x10) AIDefence engine (prompt injection, PII, jailbreak)
|
|
├── WASM_SEG #2 (0x10) Interpreter runtime (self-bootstrapping)
|
|
├── DASHBOARD_SEG (0x11) Security monitoring web UI
|
|
├── VEC_SEG (0x01) Threat signature embeddings (512-dim)
|
|
├── INDEX_SEG (0x02) HNSW index over threat vectors (m=32)
|
|
├── CRYPTO_SEG (0x0C) Ed25519 keys + TEE-bound key records
|
|
├── WITNESS_SEG (0x0A) 30-entry security lifecycle chain
|
|
├── META_SEG (0x07) Security policy + RBAC config + AIDefence rules
|
|
├── PROFILE_SEG (0x0B) Domain profile: RVSecurity
|
|
├── PolicyKernel (0x31) Gate thresholds + coherence config
|
|
├── MANIFEST_SEG (0x05) Signed manifest with hardening fields
|
|
└── Signature Footer Ed25519 over entire artifact
|
|
```
|
|
|
|
### Segment Budget
|
|
|
|
| Segment | Purpose | Size Budget |
|
|
|---------|---------|-------------|
|
|
| KERNEL_SEG | Hardened Linux bzImage | ~1.6 MB |
|
|
| EBPF_SEG | Firewall + syscall filter | ~8 KB |
|
|
| WASM_SEG | AIDefence WASM engine | ~256 KB |
|
|
| VEC_SEG | Threat embeddings (1000 x 512) | ~2 MB |
|
|
| INDEX_SEG | HNSW graph | ~512 KB |
|
|
| CRYPTO_SEG | Keys + TEE attestation records | ~4 KB |
|
|
| WITNESS_SEG | 30-entry audit chain | ~2 KB |
|
|
| META_SEG | Policy JSON + RBAC matrix | ~4 KB |
|
|
| PROFILE_SEG | Domain profile | ~512 B |
|
|
| PolicyKernel | Gate config | ~1 KB |
|
|
| MANIFEST_SEG | Signed directory | ~512 B |
|
|
| **Total** | | **~4.4 MB** |
|
|
|
|
## Security Layers
|
|
|
|
### Layer 1: Hardware Root of Trust (TEE)
|
|
|
|
```
|
|
┌─────────────────────────────────────┐
|
|
│ AttestationHeader (112 bytes) │
|
|
│ ├── platform: SGX/SEV-SNP/TDX/CCA │
|
|
│ ├── measurement: MRENCLAVE │
|
|
│ ├── signer_id: MRSIGNER │
|
|
│ ├── nonce: anti-replay │
|
|
│ ├── svn: security version │
|
|
│ └── quote: opaque attestation blob │
|
|
└─────────────────────────────────────┘
|
|
```
|
|
|
|
- Hardware TEE attestation records in CRYPTO_SEG
|
|
- TEE-bound key records: keys sealed to enclave measurement
|
|
- Platform verification: correct TEE + measurement + validity window
|
|
- Multi-platform: SGX, SEV-SNP, TDX, ARM CCA in single witness chain
|
|
|
|
### Layer 2: Kernel Hardening
|
|
|
|
```
|
|
KernelHeader flags:
|
|
KERNEL_FLAG_SIGNED = 0x0001
|
|
KERNEL_FLAG_COMPRESSED = 0x0002
|
|
KERNEL_FLAG_REQUIRES_TEE = 0x0004
|
|
KERNEL_FLAG_MEASURED = 0x0008
|
|
KERNEL_FLAG_REQUIRES_KVM = 0x0010
|
|
KERNEL_FLAG_ATTESTATION_READY = 0x0400
|
|
```
|
|
|
|
Linux tinyconfig + hardening options:
|
|
- `CONFIG_SECURITY_LOCKDOWN_LSM=y` — Kernel lockdown
|
|
- `CONFIG_SECURITY_LANDLOCK=y` — Landlock sandboxing
|
|
- `CONFIG_SECCOMP=y` — Syscall filtering
|
|
- `CONFIG_STATIC_USERMODEHELPER=y` — No dynamic module loading
|
|
- `CONFIG_STRICT_KERNEL_RWX=y` — W^X enforcement
|
|
- `CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y` — Memory init on alloc
|
|
- `CONFIG_BLK_DEV_INITRD=y` — Initramfs support
|
|
- No loadable modules, no debugfs, no procfs write, no sysfs write
|
|
|
|
### Layer 3: eBPF Enforcement
|
|
|
|
Two eBPF programs embedded:
|
|
|
|
1. **XDP Packet Filter** — Drop all traffic except allowed ports
|
|
- Allow: TCP 8443 (HTTPS API), TCP 9090 (metrics)
|
|
- Drop everything else at XDP layer (before kernel stack)
|
|
|
|
2. **Seccomp Syscall Filter** — Allowlist-only syscalls
|
|
- Allow: read, write, mmap, munmap, close, exit, futex, epoll_*
|
|
- Deny: execve, fork, clone3, ptrace, mount, umount, ioctl(TIOCSTI)
|
|
|
|
### Layer 4: AIDefence (WASM Engine)
|
|
|
|
The WASM segment contains a compiled AIDefence engine with:
|
|
|
|
| Detector | Latency | Description |
|
|
|----------|---------|-------------|
|
|
| Prompt Injection | <5ms | 30+ regex patterns + semantic similarity |
|
|
| Jailbreak | <5ms | DAN, role manipulation, system prompt extraction |
|
|
| PII Detection | <5ms | Email, phone, SSN, credit card, API keys, IP |
|
|
| Control Characters | <1ms | Unicode homoglyphs, null bytes, escape sequences |
|
|
| Behavioral Analysis | <100ms | EMA baseline deviation per user |
|
|
| Policy Verification | <500ms | Custom pattern matching + domain allowlists |
|
|
|
|
Threat levels: `none` → `low` → `medium` → `high` → `critical`
|
|
|
|
Default block threshold: `medium` (configurable via META_SEG policy)
|
|
|
|
### Layer 5: Cryptographic Integrity
|
|
|
|
- **Ed25519 signing** (RFC 8032): Every segment signed individually
|
|
- **Witness chain**: HMAC-SHA256 hash-chained audit entries
|
|
- **Content hashing**: SHAKE-256 truncated hashes in HardeningFields
|
|
- **SecurityPolicy::Paranoid**: Full chain verification on mount
|
|
- **Key rotation**: Witness entry records rotation event
|
|
|
|
### Layer 6: Access Control (RBAC + Coherence Gate)
|
|
|
|
```
|
|
Role Matrix:
|
|
┌──────────┬───────┬──────┬────────┬───────┬──────────┐
|
|
│ Role │ Write │ Read │ Derive │ Audit │ Gate │
|
|
├──────────┼───────┼──────┼────────┼───────┼──────────┤
|
|
│ Admin │ ✓ │ ✓ │ ✓ │ ✓ │ permit │
|
|
│ Operator │ ✓ │ ✓ │ ✗ │ ✓ │ permit │
|
|
│ Analyst │ ✗ │ ✓ │ ✗ │ ✓ │ defer │
|
|
│ Reader │ ✗ │ ✓ │ ✗ │ ✗ │ defer │
|
|
│ Auditor │ ✗ │ ✓ │ ✗ │ ✓ │ permit │
|
|
│ Guest │ ✗ │ ✗ │ ✗ │ ✗ │ deny │
|
|
└──────────┴───────┴──────┴────────┴───────┴──────────┘
|
|
```
|
|
|
|
Coherence Gate thresholds (PolicyKernel segment):
|
|
- `permit_threshold`: 0.85
|
|
- `defer_threshold`: 0.50
|
|
- `deny_threshold`: 0.0
|
|
- `escalation_window_ns`: 300_000_000_000 (5 min)
|
|
- `max_deferred_queue`: 100
|
|
|
|
## Capabilities Confirmed
|
|
|
|
| # | Capability | Segment | Verification |
|
|
|---|-----------|---------|-------------|
|
|
| 1 | TEE attestation (SGX, SEV-SNP, TDX, ARM CCA) | CRYPTO_SEG | Quote validation + binding check |
|
|
| 2 | TEE-bound key records | CRYPTO_SEG | Platform + measurement + validity |
|
|
| 3 | Hardened kernel boot | KERNEL_SEG | Flags: SIGNED, REQUIRES_TEE, MEASURED |
|
|
| 4 | KernelBinding anti-tamper | KERNEL_SEG | manifest_root_hash + policy_hash binding |
|
|
| 5 | eBPF packet filter | EBPF_SEG | XDP drop except allowlisted ports |
|
|
| 6 | eBPF syscall filter | EBPF_SEG | Seccomp allowlist enforcement |
|
|
| 7 | AIDefence prompt injection | WASM_SEG | 12 pattern detection |
|
|
| 8 | AIDefence jailbreak detect | WASM_SEG | DAN, role manipulation, 8 patterns |
|
|
| 9 | AIDefence PII scanning | WASM_SEG | Email, SSN, credit card, API keys |
|
|
| 10 | AIDefence code/encoding attack | WASM_SEG | XSS, eval, base64, unicode tricks |
|
|
| 11 | Self-bootstrapping | WASM_SEG x2 | Interpreter + Microkernel dual WASM |
|
|
| 12 | Security monitoring dashboard | DASHBOARD_SEG | Embedded security UI |
|
|
| 13 | Ed25519 segment signing | CRYPTO_SEG | Per-segment cryptographic proof |
|
|
| 14 | Witness chain audit trail | WITNESS_SEG | 30-entry HMAC-SHA256 chain |
|
|
| 15 | Content hash hardening | MANIFEST_SEG | SHAKE-256 content verification |
|
|
| 16 | Security policy (Paranoid) | MANIFEST_SEG | Full chain verification on mount |
|
|
| 17 | RBAC access control | META_SEG | 6 roles with permission matrix |
|
|
| 18 | Coherence Gate authorization | PolicyKernel | Anytime-valid decision with witness receipts |
|
|
| 19 | Key rotation | CRYPTO_SEG + WITNESS | Old key rejected, new key active |
|
|
| 20 | Tamper detection | WITNESS_SEG | 3/3 attacks rejected |
|
|
| 21 | Multi-tenant isolation | Store derivation | Lineage-linked derived stores |
|
|
| 22 | COW branching | Store branching | Forensic-grade immutable snapshots |
|
|
| 23 | Audited k-NN queries | WITNESS_SEG | Witness entry on every search |
|
|
| 24 | Threat vector similarity | VEC_SEG + INDEX | k-NN over 1000 threat embeddings |
|
|
| 25 | Data exfiltration detection | WASM_SEG | curl/wget/fetch/webhook patterns |
|
|
| 26 | Scalar quantization (int8) | rvf-quant | 4x compression, L2 distance preserved |
|
|
| 27 | Binary quantization (1-bit) | rvf-quant | 32x compression, Hamming distance |
|
|
| 28 | Filter deletion + compaction | Store lifecycle | Purge + reclaim dead space |
|
|
| 29 | QEMU requirements check | rvf-launch | Bootability proof (dry-run) |
|
|
| 30 | Freeze/seal | Store freeze | Permanent read-only immutability |
|
|
|
|
## MCP Tools (Security Container)
|
|
|
|
When served via MCP, the security RVF exposes these tools:
|
|
|
|
| # | Tool | Description |
|
|
|---|------|-------------|
|
|
| 1 | `aidefence_scan` | Analyze input for all threat types |
|
|
| 2 | `aidefence_sanitize` | Remove/mask dangerous content |
|
|
| 3 | `aidefence_validate_response` | Check LLM output safety |
|
|
| 4 | `aidefence_audit_log` | Get audit trail entries |
|
|
| 5 | `gate_permit` | Request action authorization |
|
|
| 6 | `gate_receipt` | Retrieve witness receipt by sequence |
|
|
| 7 | `gate_replay` | Deterministic decision replay |
|
|
| 8 | `tee_attest` | Generate TEE attestation record |
|
|
| 9 | `tee_verify` | Verify attestation quote |
|
|
| 10 | `tee_bind_key` | Create TEE-bound key record |
|
|
| 11 | `rbac_check` | Verify role permissions |
|
|
| 12 | `rbac_assign` | Assign role to principal |
|
|
| 13 | `threat_search` | k-NN over threat embeddings |
|
|
| 14 | `threat_ingest` | Add new threat signatures |
|
|
| 15 | `witness_chain` | Get/verify witness chain |
|
|
| 16 | `policy_get` | Read security policy config |
|
|
|
|
## HTTP API Endpoints
|
|
|
|
```
|
|
Port 8443 (TLS required in production)
|
|
|
|
POST /api/v1/scan AIDefence threat analysis
|
|
POST /api/v1/sanitize Input sanitization
|
|
POST /api/v1/validate Response validation
|
|
GET /api/v1/audit Audit log (paginated)
|
|
POST /api/v1/gate/permit Gate authorization request
|
|
GET /api/v1/gate/receipt/:seq Receipt by sequence
|
|
POST /api/v1/tee/attest Generate attestation
|
|
POST /api/v1/tee/verify Verify quote
|
|
POST /api/v1/rbac/check Permission check
|
|
POST /api/v1/threats/search Threat similarity search
|
|
GET /api/v1/status System health
|
|
GET /api/v1/policy Security policy config
|
|
```
|
|
|
|
## Implementation
|
|
|
|
### Files Created
|
|
|
|
| # | Path | Description |
|
|
|---|------|-------------|
|
|
| 1 | `examples/rvf/examples/security_hardened.rs` | Capstone security RVF example |
|
|
| 2 | `docs/adr/ADR-042-Security-RVF-AIDefence-TEE.md` | This ADR |
|
|
|
|
### Files Modified
|
|
|
|
| # | Path | Changes |
|
|
|---|------|---------|
|
|
| 1 | `examples/rvf/Cargo.toml` | Add `security_hardened` example entry |
|
|
|
|
## Verification
|
|
|
|
```bash
|
|
# Build the example
|
|
cd examples/rvf && cargo build --example security_hardened
|
|
|
|
# Run the example (creates + verifies the security RVF)
|
|
cargo run --example security_hardened
|
|
|
|
# Expected output (v3.0 — 30 capabilities):
|
|
# Phase 1: Threat vector knowledge base (1000 embeddings)
|
|
# Phase 2: Hardened kernel + KernelBinding (KERNEL_SEG)
|
|
# Phase 3: eBPF packet + syscall filters (EBPF_SEG)
|
|
# Phase 4: AIDefence WASM #1 Microkernel (WASM_SEG)
|
|
# Phase 4b: WASM #2 Interpreter (self-bootstrapping)
|
|
# Phase 5: Security monitoring dashboard (DASHBOARD_SEG)
|
|
# Phase 6: TEE attestation (SGX, SEV-SNP, TDX, ARM CCA)
|
|
# Phase 7: TEE-bound key records
|
|
# Phase 8: RBAC access control (6 roles)
|
|
# Phase 9: Coherence Gate policy (PolicyKernel)
|
|
# Phase 10: Scalar + Binary quantization
|
|
# Phase 11: 30-entry witness chain
|
|
# Phase 12: Ed25519 signing + Paranoid verification
|
|
# Phase 13: Tamper detection (3 tests)
|
|
# Phase 14: Filter deletion + compaction
|
|
# Phase 15: Multi-tenant isolation + COW
|
|
# Phase 16: AIDefence live tests (10 threat types)
|
|
# Phase 17: QEMU requirements check
|
|
# Phase 18: Component verification
|
|
# Phase 19: Freeze — permanent immutability seal
|
|
# All 30 capabilities verified.
|
|
```
|
|
|
|
## References
|
|
|
|
- ADR-033: Mandatory manifest signatures + HardeningFields
|
|
- ADR-041: RVF Cognitive Container identification
|
|
- ADR-041a: Detailed container implementations
|
|
- `rvf-types/src/attestation.rs`: AttestationHeader, TeePlatform
|
|
- `rvf-types/src/security.rs`: SecurityPolicy, HardeningFields
|
|
- `rvf-crypto`: Ed25519, witness chains, TEE attestation
|
|
- `ruvbot/src/security/AIDefenceGuard.ts`: AIDefence implementation
|