@@ -9,10 +9,73 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
99
1010## [ Unreleased]
1111
12- ### Planned (v1.0.0)
13- - Production hardening: unconfined-process catch-all AppArmor policy,
14- EVM mode 6 (HMAC + signatures), read-only rootfs mount enforcement,
15- final security audit
12+ ---
13+
14+ ## [ 1.0.0] — 2026-02-28
15+
16+ ** Production-ready hardened image** — The first stable release of
17+ FoundationsOS. All security subsystems (TF-A, OP-TEE, TPM, RAUC, LUKS,
18+ IMA/EVM, AppArmor) are fully integrated, and the system is hardened for
19+ production deployment on both Raspberry Pi 5 and Raspberry Pi 3 Model B+.
20+
21+ ### Added
22+
23+ ** Kernel command-line hardening (both boards)**
24+ - ` lockdown=integrity ` — Kernel lockdown preventing userspace kernel modification
25+ - ` slub_debug=FZP ` — SLUB allocator poisoning, redzoning, and sanity checks
26+ - ` init_on_alloc=1 ` / ` init_on_free=1 ` — Zero heap memory on allocation and free
27+ - ` page_alloc.shuffle=1 ` — Randomize page allocator freelists
28+ - ` randomize_kstack_offset=on ` — Per-syscall kernel stack offset randomization
29+ - ` slab_nomerge ` — Prevent slab cache merging to harden heap exploitation
30+
31+ ** Sysctl security defaults** (` /etc/sysctl.d/99-foundationsos-hardening.conf ` )
32+ - ` kernel.kptr_restrict=2 ` — Hide kernel pointer addresses
33+ - ` kernel.dmesg_restrict=1 ` — Restrict dmesg to privileged users
34+ - ` kernel.perf_event_paranoid=3 ` — Disable unprivileged perf
35+ - ` kernel.kexec_load_disabled=1 ` — Disable kexec after boot
36+ - ` kernel.unprivileged_bpf_disabled=1 ` — Disable unprivileged BPF
37+ - ` kernel.yama.ptrace_scope=2 ` — Restrict ptrace to CAP_SYS_PTRACE
38+ - Network hardening: SYN cookies, disabled redirects/source routing,
39+ strict reverse path filtering, martian logging
40+
41+ ** systemd global hardening** (` /etc/systemd/system.conf.d/hardening.conf ` )
42+ - ` DefaultLimitCORE=0 ` — Disable core dumps globally
43+ - CPU/memory/tasks accounting enabled by default
44+ - Reduced service timeouts (30s)
45+
46+ ** SSH production hardening** (` /etc/ssh/sshd_config.d/hardening.conf ` )
47+ - Root login: key-only (` prohibit-password ` )
48+ - Password authentication disabled
49+ - Modern cipher suite: ChaCha20-Poly1305, AES-256-GCM
50+ - X11/TCP/agent forwarding disabled
51+ - Session limits: 3 max, 5-minute keepalive
52+
53+ ** tmpfiles.d volatile directory management** (` foundationsos.conf ` )
54+ - Ensures ` /tmp ` , ` /var/tmp ` , ` /var/log/journal ` , ` /var/lib/rauc ` ,
55+ ` /data ` exist on read-only rootfs
56+
57+ ** AppArmor catchall profile** (` foundationsos-default ` )
58+ - Complain-mode profile for unconfined processes
59+ - Logs access to sensitive resources (TPM, shadow, kcore)
60+ - Upgradeable to enforce mode after audit period
61+
62+ ** Security audit script** (` scripts/security-audit.sh ` )
63+ - Automated on-target security posture verification
64+ - Checks: kernel cmdline, sysctl, mounts, SUID, AppArmor, IMA/EVM,
65+ TPM, SSH, systemd hardening, open ports
66+ - Exit code 0 = all pass, 1 = failures detected
67+
68+ ** Documentation**
69+ - ` docs/adr/0012-production-hardening.md ` — ADR documenting all v1.0.0
70+ hardening decisions with references to KSPP, CIS, ANSSI
71+ - ` docs/deployment-guide.md ` — Production deployment: flashing,
72+ TPM provisioning, LUKS setup, SSH key deployment, OTA updates,
73+ key rotation, monitoring, troubleshooting
74+
75+ ** CI: Production Hardening Validation job**
76+ - Validates kernel cmdline, sysctl config, systemd hardening,
77+ SSH config, tmpfiles.d, AppArmor catchall, audit script,
78+ ADR-0012, deployment guide
1679
1780---
1881
0 commit comments