Files
2026-09-14 10:53:28 +00:00

279 lines
24 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Security Assessment Report (SAR) — Diskless Fleet Boot System
| Field | Value |
|---|---|
| System assessed | Diskless Fleet Boot System ("the fleet") |
| SSP version assessed | v0.3 (2026-07-10) + Annex A v0.3 |
| Assessment type | Initial IRAP security assessment (design + implementation review; limited effectiveness witnessing) |
| Assessment period | 2026-07-10 |
| Assessor | IRAP Assessor (engaged) |
| Report version | 1.0 |
| Companion outputs | [Plan of Action & Milestones](irap-poam.md) (this assessment); SSP [Annex A](ssp-annex-a-ism-residual-risk.md) risk register |
---
## 1. Executive summary and determination
The Diskless Fleet Boot System is an unusually well-architected endpoint
platform whose central security proposition — **stateless, diskless hosts that
return to a cryptographically verified known-good state on every boot, with all
host identity anchored in hardware (TPM) and no per-host secrets in any
artifact** — is sound, clearly documented, and in several areas demonstrably
implemented and bench-verified. The engineering culture evidenced by the
documentation set is a material strength: findings are recorded honestly
(including a false-clean compliance scan and an ineffective application-control
configuration, both self-identified and fixed), deviations are registered and
justified, and verification claims are dated and traceable.
**Determination: the system is NOT yet recommended for a production Authority
to Operate.** The assessor recommends the AO consider a **time-limited interim
authorisation for continued lab/pre-production operation only**, with a
production ATO contingent on closure of the conditions in §7.
The determination rests on four grounds:
1. **The assessed configuration is not the target configuration.** The system's
headline preventive controls — 802.1X EAP-TLS network authentication and
MACsec link protection — are *disabled* in the current build
(`disable_dot1x=true`), have never been bench-verified end-to-end (R-01), and
the EAP-TLS trust anchor is a placeholder (R-08). The security architecture's
value is contingent on these controls; until they are demonstrated
operating, the assessment of them is a design review only.
2. **A known privileged back-door existed in lab builds — since removed.**
`debug_shell=true` baked a passwordless root shell (R-02). *Remediated
2026-07-11 (`poam-hardening`, POA&M P-02): the `debug_shell` variable and its
`debug-shell.service` provisioner were deleted from the template — no build can
bake it.* Assessor to verify absence on the assessed digest (P-02 M2).
3. **Boot-chain signing is proven but not the standing posture.** Secure Boot
enforcement of the signed UKI (and signed iPXE chain) has been verified on
real hardware — a significant achievement — but unsigned/SB-off builds remain
possible and `db` enrolment is not fleet-wide (R-13).
4. **The governance layer required for authorisation does not yet exist.** No
Authorising Officer, System Owner, or CISO is appointed; the data
classification is unconfirmed; there is no Incident Response Plan,
continuous-monitoring plan, or approved security documentation set. An ATO
cannot be granted without an AO, and the applicable ISM control baseline
cannot be finalised without a confirmed classification.
None of these grounds indicates architectural weakness; all are completion and
assurance gaps, most already self-identified in the SSP's own risk register.
The assessor **broadly concurs with the SSP Annex A risk register** (ratings and
treatments), with the adjustments and additional findings at §5.
## 2. Scope and methodology
### 2.1 What was assessed
- The **authorisation boundary** as defined in SSP §2.3: the running
workstation host — signed UKI, dracut initramfs (802.1X/MACsec module),
dm-verity/erofs root, tmpfs overlay, TPM-backed identity, STIG-hardened OS
configuration, kiosk, and the in-image `fleet-agent` telemetry client.
- Boundary crossings (a)–(g) per SSP §2.3, including the new v0.3
management-plane interface (outbound-only mTLS to the fleet-manager).
### 2.2 What was explicitly out of scope (connected systems)
The lab serving stack (DHCP/HTTP/NVMe-oF target, audit collector), the
server-side fleet-management plane (fleet-manager, admin UI, InfluxDB,
Traefik), the TPM enrolment broker and step-ca fleet CA, the RADIUS/802.1X
authenticator infrastructure, the Wazuh SIEM node, the network fabric, and
facility physical security. **These each require their own authorisation**; the
host's dependence on them is assessed here only at the interface. See finding
F-01 and risk R-14 — the AO should note that the host system's authorisation
is materially dependent on connected systems that are currently unauthorised.
### 2.3 Method and evidence base
- **Document review:** SSP v0.3, Annex A v0.3, architecture design v2 + errata,
fleet-management design, TPM enrolment design, STIG deviation register,
secure-boot key procedure, backlog/POA&M source (TODO.md).
- **Implementation-of-record review:** the repository is the implementation
(Packer template, dracut module, provisioners, CI workflows). Control
implementation statements were checked against the code and build gates
(e.g. the roothash coupling gate, the 0-rules-evaluated STIG scan guard, the
lsinitrd content assertions).
- **Verification evidence review:** dated bench-verification records for the
test boot path (2026-06-15/17), hardened build boot/login (2026-06-19/20),
audit offload end-to-end (2026-06-20), Wazuh decode+alert (2026-06-27),
Secure Boot enforcement on hardware (2026-06-20/22), fapolicyd overlay
effectiveness (2026-07-04), and fleet-agent TPM-mTLS telemetry (2026-07-10).
- **Not witnessed by the assessor:** the bench verifications above were
reviewed as records, not independently witnessed; the secure path (802.1X/
MACsec) has no verification record to review. Witness points for the
follow-up assessment are listed in §7.2.
### 2.4 Limitations and caveats
1. **ISM control-identifier currency.** The SSP self-declares its `ISM-NNNN`
identifiers as representative of a January 2026 baseline. The reconciliation
of every identifier against the May 2026 ISM release **remains open** and is
carried as POA&M item P-17. Control *intent* mappings were assessed and are
sound; individual numbers in Annex A must not be quoted to the AO as final.
2. **Classification not confirmed.** The assessment assumes the SSP's working
classification of STARFLEET ROUTINE / STARFLEET RESTRICTED. If the kiosk
renders or the workstation can reach STARFLEET SECRET data, the control
baseline changes materially (approved cryptography becomes mandatory — R-06
escalates from Medium to a blocking finding; gateway and media controls
tighten).
3. **Point-in-time.** This SAR reflects the system at 2026-07-10, lab
configuration, pre-production.
## 3. Assessment results by ISM guideline area
Effectiveness scale: **Effective** (implemented and operating as intended, with
evidence) · **Partially effective** (implemented with material gaps or lab-only
scope) · **Ineffective** (present but not achieving the control objective) ·
**Not implemented** · **Alternative control** (objective met by a justified
compensating mechanism) · **Not assessed** (no visibility / out of scope).
| ISM guideline area | Assessed effectiveness | Basis |
|---|---|---|
| Security documentation | **Partially effective** | High-quality SSP/annex/registers exist and are maintained; but no IRP, no continuous-monitoring plan, no AO approval, roles unappointed. |
| Cyber security roles | **Not implemented** | AO / System Owner / CISO all TBA. Blocking for authorisation. |
| OS & application hardening | **Effective** (current build) | STIG applied + bench-verified with a credible tailoring and deviation register; SELinux enforcing with three minimal documented local modules; fapolicyd allow-listing verified effective on the overlay root (post-2026-07-04 fix); USBGuard enforcing + verified; minimal install; kiosk lockdown. Residual: `enable_stig` must be confirmed on in production CI (R-03). |
| File integrity / anti-malware | **Alternative control — accepted** | dm-verity continuous block-level verification of a signed, reproducible root supersedes AIDE; immutable root + allow-listing + RAM-only overlay is a justified compensating posture for endpoint AV. The assessor accepts both N/A justifications. |
| Authentication (machine) | **Partially effective** | Design (EAP-TLS, non-exportable TPM key, cert in NV, no baked credentials) is strong and the same identity is demonstrated working for agent mTLS on hardware. But the 802.1X path itself is unverified and disabled in builds (R-01) and the RADIUS trust anchor is a placeholder (R-08) — the control is not currently operating. |
| Authentication (privileged users) | **Partially effective** | Key-only single admin, root locked, `staff_u` confinement with sudo role transition — good. No human MFA on host SSH; NOPASSWD sudo; fleet-generic non-rotatable key (R-05). Management-plane admin MFA (WebAuthn passkeys) is effective but sits in a connected system. |
| System management / patching | **Partially effective** | Reproducible, digest-pinned, atomic rebuild/redeploy model is excellent change control; signing keys correctly held outside repo/build. Gaps: patch cadence/SLA undefined (R-10); debug shell (R-02); actuator path deferred (R-15). |
| Event logging & monitoring | **Partially effective** | Centralised auditd offload verified end-to-end; Wazuh SIEM decode+alert verified; health telemetry adds operational visibility. Gaps: both log-offload hops plaintext, retention/archival unconfigured, Wazuh default credentials (R-07). |
| Networking | **Partially effective** | Port-based 802.1X design + segmentation + outbound-only agent are sound but the enforcement path is unverified (R-01); host firewall disabled (R-09). |
| Communications / link protection | **Not assessed → design sound** | MACsec implementation exists but has never been observed operating (MKA survival across switch-root specifically flagged by the system's own documentation as unverified). |
| Cryptography | **Partially effective** | Modern STIG crypto policy, TPM-held keys, HSM/CI signing keys. AACA/AACP conformance not asserted, FIPS off, NVMe/TCP root and log transport plaintext (R-04, R-06, R-07). Acceptable at STARFLEET ROUTINE on an isolated LAN; not above. |
| ICT equipment & media | **Effective** | Diskless/no-remanence posture is inherent and genuine; Secure Boot + signed UKI + dm-verity verified enforcing on hardware. Residual is default posture (R-13) and no remote attestation (R-11). |
| Supply chain / artifact integrity | **Effective** | FROM-scratch artifact, SHA256SUMS, digest pinning, reproducible builds, roothash hard gate in CI. |
## 4. Strengths worth the AO's attention
1. **Statelessness as a control.** No persistent local state, RAM-only overlay,
per-boot return to a verified root — this structurally eliminates whole ISM
control families (media sanitisation, data remanence, endpoint backup) and
sharply limits persistence for an attacker.
2. **Hardware-anchored identity, one key three uses.** Non-exportable TPM key
backing 802.1X, the NVMe hostnqn, and management-plane mTLS, with
human-anchored enrolment (OOB fingerprint + admin mTLS approval, no
auto-issue). See also observation F-06 on cross-protocol key reuse.
3. **Verification culture.** The false-clean STIG scan (datastream/CPE
mismatch evaluating 0 rules) and the inert fapolicyd overlay guard were both
found by the team's own effectiveness testing and fixed with build-time
guards. This is exactly the behaviour an assessor wants to see, and it
raises confidence in the other dated verification claims.
4. **Honest deviation management.** The STIG tailoring + per-build deviations
report with a triaged register (REVIEW rows driven to 0–1) is a model
pattern; waivers carry justifications rather than hiding findings.
5. **Recovery posture.** Rollback = revert one digest-pinned manifest commit;
compromised host recovery = reboot. Respond is structurally strong even
before an IRP exists.
## 5. Assessor findings
### 5.1 Concurrence with the SSP risk register
The assessor **concurs** with the ratings, compensating controls, and
treatments for R-01 through R-15 in Annex A §3, with these adjustments:
- **R-01 (secure path unverified) — concur High, emphasise centrality.** This
is the pivotal finding of the assessment. Until the swtpm + hostapd +
FreeRADIUS bench demonstrates port authorisation, MACsec establishment, MKA
survival across switch-root, and NVMe root mount over macsec0, the system's
primary network-preventive control set is unassessed. It must be *witnessed*,
not just recorded, at the follow-up assessment.
- **R-08 (placeholder RADIUS CA) — concur Medium, but couple to R-01.** These
close together or not at all: a verified secure path against a placeholder
trust anchor is not a verified control.
- **R-06 (AACA/AACP not asserted) — concur Medium at STARFLEET ROUTINE**, with
the explicit caveat that this becomes a **blocking finding if the
classification is confirmed STARFLEET SECRET or above** (see §2.4.2).
- **R-14 (management plane unauthorised connected system) — concur Medium.**
The host-side exposure limitation (outbound-only, telemetry-only, commands
inert) is genuine and was verified on hardware; however the host now
*trusts a new CA* (step-ca) whose key protection is unassessed. The AO
should treat the fleet CA as part of the system's effective trust boundary
even though it is administratively a connected system.
- **R-15 (deferred actuators) — concur Low, with a hard condition:** enabling
any actuator (reboot/drain/kiosk_url) without a delta assessment of the
command authorisation path would invalidate this SAR's characterisation of
the agent as read-only.
### 5.2 Additional assessor findings (not in the SSP register)
| ID | Finding | Severity | Detail / recommendation |
|---|---|---|---|
| **F-01** | **Assessed build ≠ production configuration.** *Partly remediated 2026-07-11 (`poam-hardening`, POA&M P-03).* A fail-closed production profile now exists: the CI "Production build gate" aborts unless `SB_KEY`/`SB_CERT`/`FLEET_CA` are set (no unsigned fallback, no placeholder CA), `enable_stig=true` is enforced by Packer variable validation, and `debug_shell` is deleted from the template. **Two of the five toggles remain unpinned in the standing CI:** `disable_dot1x` is still `true` (blocked on the P-01 secure-path bench) and production artifacts are not yet distinctly tagged (P-03 M2). | **High** → **Medium** (residual) | Complete P-03: flip `disable_dot1x=false` after the P-01 bench and add distinct production-artifact tagging; make the follow-up assessment target *that* artifact digest. Individual toggles are tracked (R-01/02/03/08/13). |
| **F-02** | **SSH host keys regenerate every boot.** The ephemeral overlay means sshd host keys are new each boot, so administrators can never pin a host key — every connection is effectively trust-on-first-use, and a MITM of admin SSH on the LAN is undetectable by the client. *Remediation IMPLEMENTED 2026-07-11 (`poam-hardening`, POA&M P-17):* the **SSH host CA** treatment (Design A, broker-mediated) — `fleet-ssh-hostcert` gets each host's per-boot key signed by the fleet SSH CA **via the enrol-broker host plane** (TPM-identity mTLS) at boot; admins trust the fleet via one `@cert-authority` line. step-ca stays behind the single front door; fail-open (bare key if the broker/CA is unreachable). | **Medium** → **Low** (once bench-verified) | Bench-verify end-to-end (broker↔step-ca SSH-CA contract, host principal policy, SELinux for the root cert-installer) per docs/ssh-host-certificate-design.md; roll the `@cert-authority` anchor to admin workstations. A stable TPM-resident host key (Design B) is a deferred option, not required. |
| **F-03** | **Time source is unauthenticated.** chrony syncs solely from a DHCP-handed lab NTP server with no NTS or symmetric-key authentication. Certificate validity decisions (EAP-TLS, agent mTLS, future log TLS) depend on host time; an attacker on the pre-auth segment who can spoof DHCP/NTP could shift time to resurrect expired/revoked certificates. *Remediation IMPLEMENTED 2026-07-11 (`secure-ntp`, POA&M P-18):* **NTS (RFC 8915)** — the serving NTP server presents a **fleet-CA-signed** NTS-KE cert; the host (`secure_ntp=true`) verifies it against `radius-ca.pem` and syncs authenticated time (server name derived at runtime from the DHCP domain — no baked FQDN), and no longer mixes in the unauthenticated DHCP source. A DHCP/DNS spoofer can now only DoS, not shift the clock. | **Low–Medium** → **Low** (once bench-verified) | Bench-verify (`chronyc authdata` NTS cookies, tcp/4460, cold-clock `nocerttimecheck`, STIG chrony) per docs/secure-ntp-design.md; issue the per-environment NTS server cert. Compensating meanwhile: isolated LAN + cert-serial inventory gate. |
| **F-04** | **Enrolment broker pre-auth endpoint lacks abuse controls.** The one unauthenticated CSR endpoint is human-gated for *issuance* (good) but the SSP records no rate-limiting/queue-flooding controls; a flooded pending-approval queue is a plausible denial/enrolment-confusion vector. Noted inside R-14's treatment text; called out here so it is not lost in the connected-system SSP. | **Low (host) / Medium (plane)** | Carry explicitly into the management-plane SSP: rate limiting, pending-CSR TTL and queue caps, and alerting on anomalous CSR volume. |
| **F-05** | **Fleet-wide availability depends on a single NVMe/TCP target.** Every running host's root filesystem is served by one unreplicated SPDK process; its failure stalls or kills the entire fleet (the system's own analysis, TODO #6). For a fleet whose stated recovery model is "reboot", loss of the root target defeats that model. Availability of the root service is a security property of this system. | **Medium** | Add to the register (availability class). The drain-gated long-lived target design mitigates *operational* restarts; structural treatment is the already-identified multipath/ANA replica design plus documented RTO. Note `ctrl_loss_tmo` tuning as the cheap interim mitigation. |
| **F-06** | **Cross-protocol reuse of the TPM identity key.** The same key authenticates EAP-TLS, derives the NVMe hostnqn, and authenticates agent mTLS ("one identity, three stages"). This is an explicit, documented design choice with real benefits (one enrolment, one revocation point); the residual concern is cross-protocol signing-oracle exposure (a signature obtained in one protocol context being replayable in another) and a single revocation event disabling all three functions at once. | **Low (observation)** | No change required at STARFLEET ROUTINE. Document a short analysis in the SSP: confirm the protocols' signed structures are domain-separated (TLS 1.2 vs 1.3 CertificateVerify context strings largely provide this), and document the operational plan for the revocation blast radius. |
| **F-07** | **No continuous assurance that runtime posture matches assessed posture.** SELinux-permissive and version-drift are surfaced via fleet-agent telemetry (good), but nothing yet alerts on: Secure Boot state, debug-shell presence, or fapolicyd non-enforcing. The system has the telemetry channel to make assessed-posture drift visible fleet-wide. | **Low** | Extend agent facts to include SB state (`SecureBoot` EFI var), fapolicyd enforcement, and cmdline hash; alert on drift in the manager. Complements R-13. |
| **F-08** | **DNS/DHCP are untrusted inputs by design — but the pattern is undocumented and two flows escape it.** The architecture consistently authenticates endpoints *above* name resolution (manager → mTLS; NTP → NTS, post-P-18; UKI → Secure Boot signature; NVMe root → dm-verity), so DNSSEC/DoT would add little and is *not* recommended. However: (a) the **kiosk URL is plain HTTP** — a DNS or DHCP (option-15 domain) spoofer serves an arbitrary page fullscreen on every workstation's only user interface, with the Chromium policy's PNA allowance to the loopback host-info agent as reachable attack surface; (b) a spoofer can serve an **older, still-validly-signed UKI** (rollback) — Secure Boot does not prevent this; the design's anti-rollback mechanisms (dbx revocation / TPM monotonic counter, design v2 §6) are unimplemented and unmentioned in the register; (c) the plaintext **audit offload** is DNS-spoofable today — closed as a side effect of P-09's TLS, but that coverage was untraceable until now. | **Medium** (driver: kiosk content flow) | POA&M P-24. State the "DNS/DHCP untrusted; authenticate above resolution" principle explicitly in the SSP; serve the kiosk over TLS with a fleet-CA-signed cert (CA pinned via Chromium policy) rather than deploying DNSSEC; record the UKI-rollback residual against R-13 with the design-§6 anti-rollback treatment; cross-reference P-09 for the audit-stream closure. |
## 6. Essential Eight maturity (assessor view)
The SSP's self-assessment (§6) is broadly fair. Assessor adjustments:
application control is genuinely **strong post-2026-07-04** (and, notably, was
*over-claimed before* that fix — the honest correction is credited);
"restrict admin privileges" and "MFA" should both be read as **partial** until
the host SSH access model gains rotation and the management plane is
authorised; "patching" remains **process-only** until R-10 defines an SLA.
Against Essential Eight maturity levels, the system sits at approximately
**ML1–ML2 overall** with individual mitigations (application control, user
application hardening) performing at ML3-like strength — but E8 maturity
formally requires the *whole* mitigation strategy set at level, so no formal
level claim above ML1 should be made yet.
## 7. Recommendation to the Authorising Officer
### 7.1 Determination
- **Production ATO: not recommended at this time.**
- **Interim authorisation (lab/pre-production, isolated LAN, no production
data): recommended**, valid for a defined period (suggest ≤ 6 months),
conditional on the POA&M being maintained and on no production or
classified data being processed.
### 7.2 Conditions precedent for a production ATO
The following must be closed, then verified at a **delta assessment** at which
the assessor witnesses (not merely reviews) the evidence:
1. **Witness the secure-path bench test** (R-01 + R-08): real RADIUS CA; port
`Authorized`; macsec0 addressed; MKA survives switch-root; NVMe root
mounted over macsec0; lease renewal on macsec0 past expiry.
2. **Production build profile** (F-01): a signed, SB-enforcing, STIG-on,
debug-shell-off, dot1x-on build produced by CI with hard assertions;
assessor verifies `sbverify` on UKI + iPXE, `mokutil --sb-state` on sample
hosts, absence of the debug shell, and a valid STIG deviations report with
0 unjustified REVIEW rows on the assessed digest (R-02, R-03, R-13).
3. **Governance**: AO/System Owner/CISO appointed; data classification
confirmed by the System Owner; IRP, continuous-monitoring plan and
log-retention policy authored and approved (R-12, §2.1 gaps).
4. **Log transport and retention** (R-07): TLS on both offload hops; retention
configured; Wazuh credentials rotated and dashboard/API restricted.
5. **ISM reconciliation** (P-17): Annex A identifiers reconciled to the May
2026 ISM, unmapped new controls dispositioned.
6. **Management plane**: either a granted authorisation for the connected
system (R-14) or an AO-accepted interim risk position covering the fleet
CA's key protection specifically.
7. **Witness re-verifications**: reproducible build (two builds, identical
verity root hash — including post-`semanage` policy-store stability);
fapolicyd denial of a novel binary on the overlay root; USBGuard
mass-storage block with console HID intact; agent actuators inert (R-15).
Items R-04, R-05, R-09, R-10, R-11, F-02, F-03, F-05, F-08 may, at the AO's
discretion, be **accepted as residual risk with POA&M target dates** for a
production ATO at STARFLEET ROUTINE on an isolated/managed network, given the
compensating controls recorded in Annex A. They are not recommended for
indefinite acceptance.
### 7.3 Revocation triggers the AO should set
- Enabling fleet-agent actuators without a delta assessment (R-15 / §5.1).
- Processing data above the confirmed classification.
- Any unsigned or SB-off build deployed outside the lab (R-13 / F-01).
- Lapse of the POA&M review cadence (suggest quarterly).
---
*End of SAR. The consolidated remediation plan with owners, milestones and
target dates is at [irap-poam.md](irap-poam.md).*