Session 10 results: demo ISO built (825MB) and boot-verified to login prompt via serial console in QEMU VM. STATUS updated from "ready to build" to "built and boot-verified." JOURNAL entry documents the full session: reproducible setup script, Dockerfile pin refresh, QEMU/TPM fallback work, and ISO boot verification with key lessons. 💘 Generated with Crush Assisted-by: GLM-4.7 via Crush <crush@charm.land>
122 lines
5.5 KiB
Markdown
122 lines
5.5 KiB
Markdown
# KNEL-Football Project Status Report
|
|
|
|
> **Last Updated**: 2026-07-30 (Session 10 - ISO built and verified)
|
|
> **Maintained By**: AI Agent (Crush)
|
|
> **Purpose**: Quick-glance status for project manager
|
|
|
|
---
|
|
|
|
## Current Status: ✅ ISO BUILT AND BOOT-VERIFIED
|
|
|
|
### Executive Summary
|
|
Demo ISO built successfully (825MB) and verified booting to login prompt in QEMU VM.
|
|
Reproducible dev environment setup script added (`scripts/setup-dev-environment.sh`).
|
|
VM testing tooling now supports QEMU fallback when KVM is unavailable.
|
|
|
|
### Build & Verification Results (Session 10)
|
|
- **ISO**: `output/knel-football-secure.iso` (825MB, demo mode)
|
|
- **SHA256**: `c9b11932ce0fe015274c81a13bc3202ec4b52178e8fbbe146f9d0010a09b7559`
|
|
- **Boot test**: PASS — kernel, systemd init, live-config, reached login prompt
|
|
- **Serial console**: `Debian GNU/Linux 13 debian ttyS0` / `debian login:`
|
|
- **Tests**: 788 pass, 0 fail (6 new KVM/QEMU fallback tests)
|
|
- **Lint**: 0 warnings
|
|
|
|
### Immediate Action: Build the ISO
|
|
```bash
|
|
./run.sh iso # Build production ISO (prompts for credentials during install)
|
|
```
|
|
|
|
---
|
|
|
|
## Remediation Progress — All Findings Addressed
|
|
|
|
| # | Finding | Severity | Status | How Fixed |
|
|
|---|---------|----------|--------|-----------|
|
|
| C-01 | Argon2id KDF not enforced | CRITICAL | ✅ | preseed early_command patches partman-crypto |
|
|
| C-02 | Host FDE check never called | CRITICAL | ✅ | Removed — host FDE no longer required, guest-only |
|
|
| C-03 | Docker --privileged | CRITICAL | ✅ | Fine-grained caps (SYS_ADMIN,MKNOD,etc) |
|
|
| C-04 | SB keys unencrypted | CRITICAL | ✅ | chmod 700 dir, chmod 600 keys (all paths) |
|
|
| C-05 | USB noexec/nosuid/nodev | CRITICAL | ✅ | All mount options added + input validation |
|
|
| C-06 | Plaintext creds in git | CRITICAL | ⬜ HUMAN | Needs git-filter-repo (destructive) |
|
|
| H-01 | StrictHostKeyChecking ask | HIGH | ✅ | Changed to yes |
|
|
| H-02 | sshd_config written | HIGH | ✅ | Removed from both live hook AND src/ |
|
|
| H-03 | src/firewall missing ct state | HIGH | ✅ | Added established,related |
|
|
| H-04 | QR temp file insecure | HIGH | ✅ | chmod 600 |
|
|
| H-05 | cryptsetup broken syntax | HIGH | ✅ | printf pipe instead of echo+heredoc |
|
|
| H-06 | Hardcoded /dev/sda3 | HIGH | ✅ | lsblk discovery + fallback in validation |
|
|
| H-07 | sbverify returns success on fail | HIGH | ✅ | Now returns 1 (fatal) |
|
|
| H-08 | Missing module.sig_enforce | HIGH | ✅ | Added to all 3 UKI build paths |
|
|
| H-09 | Build cache no integrity | HIGH | ✅ | Cache manifest + SHA256 verification (no file cap) |
|
|
| M-01 | apply_security_hardening missing calls | MEDIUM | ✅ | Now calls FIM + SSH client |
|
|
| M-02 | Sudo group conflict | MEDIUM | ✅ | Removed football from sudo group |
|
|
| M-03 | PAM not configured | MEDIUM | ✅ | enforce_for_root in common-password |
|
|
| M-04 | Recovery key generation | MEDIUM | ✅ | Fixed bs=32 count=1 |
|
|
| M-05 | Firewall allows any WG endpoint | MEDIUM | ⚠️ | Port limited to 51820; live hook allows any endpoint IP |
|
|
| M-06 | AIDE not initialized | MEDIUM | ✅ | aideinit + daily cron |
|
|
| M-07 | Mount hardening fstab only | MEDIUM | ✅ | Auto-adds missing entries |
|
|
| M-08 | USB no audit logging | MEDIUM | ✅ | logger -t usb-automount |
|
|
| M-09 | Build not reproducible | MEDIUM | ✅ | SOURCE_DATE_EPOCH + BUILD-INFO.txt |
|
|
| M-10 | No GPG signing | MEDIUM | ✅ | Ephemeral or persistent GPG signing |
|
|
| M-11 | Docker base not digest-pinned | MEDIUM | ✅ | sha256:1d3c8111... in Dockerfile |
|
|
| M-12 | WiFi blacklist incomplete | MEDIUM | ✅ | Synced src/ with live hook (27 drivers) |
|
|
| L-01 | Serial console all builds | LOW | ⬜ | Demo only, not a blocker |
|
|
| L-02 | Root login in preseed | LOW | ✅ | boolean false in production preseed |
|
|
| L-03 | Legacy DH kex | LOW | ⬜ | Fallback only, not broken |
|
|
| L-04 | VNC no auth | LOW | ⬜ | Localhost-only, test VM only |
|
|
| L-05 | Build mode spoofing | LOW | ✅ | Derived from $1, not env |
|
|
| L-06 | Hooks in repo tree | LOW | ⬜ | Standard shared hooks pattern |
|
|
| L-07 | Predictable /tmp path | LOW | ⬜ | Low risk for build tool |
|
|
|
|
**Legend**: ✅ Done | ⬜ Deferred | ⚠️ Partial
|
|
|
|
---
|
|
|
|
## What Was Done This Session (Session 9)
|
|
|
|
- Removed host FDE requirement entirely (PRD FR-011 redefined, check_host_fde removed)
|
|
- Fixed C-04: SB key chmod in inline build hook
|
|
- Fixed H-06: encryption-validation.sh now uses lsblk discovery
|
|
- Fixed H-09: Cache manifest no longer capped at 20 files
|
|
- Fixed M-12: src/ WiFi blacklist synced with live hook
|
|
- Fixed COMPLIANCE.md: removed fraudulent ✅ summary table
|
|
- Updated all tests, docs, AGENTS.md for host FDE removal
|
|
|
|
---
|
|
|
|
## Build Verification
|
|
|
|
| Item | Status |
|
|
|------|--------|
|
|
| Docker image | ✅ Built with refreshed pins |
|
|
| Lint (shellcheck) | ✅ 0 warnings |
|
|
| Tests | ✅ 788 pass, 0 fail |
|
|
| ISO build | ✅ Built (demo, 825MB) |
|
|
| ISO boot test | ✅ Reached login prompt via serial console |
|
|
|
|
---
|
|
|
|
## What You Need To Do
|
|
|
|
### Step 1: Build the ISO
|
|
```bash
|
|
./run.sh iso
|
|
```
|
|
|
|
### Step 2: Scrub Git History (C-06)
|
|
```bash
|
|
pip install git-filter-repo
|
|
git filter-repo --path config/includes.installer/demo.preseed.cfg --invert-paths
|
|
git push --force origin main
|
|
```
|
|
|
|
### Step 3: Validate on Real Hardware
|
|
- Install the ISO
|
|
- Run `cryptsetup luksDump /dev/sda3` — verify KDF shows argon2id
|
|
- Try `ssh localhost` — should be refused (no server)
|
|
- Insert USB — verify mount has noexec,nosuid,nodev
|
|
- Check `grep StrictHostKeyChecking /etc/ssh/ssh_config` — should be "yes"
|
|
|
|
---
|
|
|
|
*This file is maintained by the AI agent. For AI memory and insights, see JOURNAL.md.*
|