Install, license, and run your first engagement — recon, scan, remediate, signed evidence — in about 30 minutes.
sudo dpkg -i ForteFide_Setup_26.07.27.1120_linux.deb — native ELF, no Python runtime needed on the hostForteFide_Setup_26.07.27.1120_Windows.exe as Administrator (Inno Setup wizard; installs to C:\Program Files\ForteFide)http://127.0.0.1:5000 — first launch, set a password for the built-in ForteFideAdmin account (loopback-only; sign-in remembered 30 days)license.key onto the LICENSE panel top-right, or use the claim link in your purchase emailForteFide runs on one machine and reaches out to your CMMC-scoped systems over SSH (Linux) or WinRM (Windows). It does not need internet connectivity once licensed.
| Item | Linux host | Windows host |
|---|---|---|
| OS | Ubuntu 22.04 / 24.04, Debian 12 (or compatible) | Windows 10 / 11, Server 2016–2025 |
| RAM | 1 GB free | 1 GB free |
| Disk | 500 MB | 500 MB |
| Privileges | sudo / root for install | Administrator for install |
| Inbound | TCP 5000 (loopback only) | TCP 5000 (loopback only) |
| Outbound | TCP 22 to Linux targets, TCP 5985/5986 to Windows targets | Same |
127.0.0.1:5000. Nothing is exposed to your
network until you explicitly change the bind address. Browse from the same machine
ForteFide is installed on.license.key file (sent by email after purchase)ForteFide v26.07.27.1120 ships a single self-contained Linux .deb bundling Layer 1 airgap packages for the major distro families (Windows + RHEL + Ubuntu + Debian + SUSE + Arch). One download, every supported distro covered.
sudo dpkg -i ForteFide_Setup_26.07.27.1120_linux.deb
/opt/fortefide, with state under /var/lib/fortefide
and logs under /var/log/fortefideDEBIAN_FRONTEND=noninteractive) installs accept the EULA implicitly;
otherwise you'll be promptedIf you installed CORE and your fleet has Debian, SUSE, or Arch hosts, ForteFide detects this during recon and tells you which expansion to download.
/api/expansions/required in the dashboard, or via curl — ForteFide
enumerates uncovered distros and emits exact download URLs.sig from
densedefense.com/expansions/.tar.xz onto the dashboard (or POST /api/expansions/install).
ForteFide verifies the Ed25519 signature locally and extracts to /opt/fortefide/packages/Supported: Windows Server 2012 R2, 2016, 2019, 2022, 2025; Windows 10 (Pro / Enterprise); Windows 11. The .exe is Nuitka-compiled and Inno Setup wrapped, ships the full Layer 1 distro packages bundle, and has zero Python runtime dependency on the host.
ForteFide_Setup_26.07.27.1120_Windows.exe
and "Run as Administrator". The wizard prompts for the install path (default
C:\Program Files\ForteFide), then completes; the browser auto-opens to
http://localhost:5000.ForteFide_Setup_26.07.27.1120_Windows.exe
/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /LOG=ff-install.log. Append
/DIR="D:\Apps\ForteFide" to override the binary path. Exit code 0 = success.C:\Program Files\ForteFide\fortefide.exe.
State (license, scans.db, keys, journal, reversion, certs) under
C:\ProgramData\ForteFide\. Logs at C:\ProgramData\ForteFide\logs\.Stop-Process -Name fortefide -Force. For
boot-survival, wrap with Task Scheduler ("Run whether user is logged on or not") or NSSM.fortefide.exe on the chosen port. Loopback-only by default.dpkg -i (which preserves /var/lib/fortefide during upgrade), the
Windows installer is a fresh install every time — it proactively deletes any
license.key from C:\ProgramData\ForteFide\,
C:\Program Files\ForteFide\, and %USERPROFILE%\.fortefide\ before
extracting the new build. Keep license.key off the scanner host — USB stick,
password manager, wherever — before running the installer a second time.If you're scripting the install or running it from a CI runner:
sudo mkdir -p /var/lib/fortefide
sudo bash -c 'date > /var/lib/fortefide/.eula_accepted'
# Liveness — the login page is public (no token needed); expect HTTP 200:
curl -s -I http://127.0.0.1:5000/login | head -1
# Health + version — /api/* is for automation; pass the internal API token:
TOKEN=$(sudo fortefide --show-token)
curl -s -H "X-Auth-Token: $TOKEN" http://127.0.0.1:5000/api/health
# Expect: {"status":"ok","version":"26.07.27.1120",...}The dashboard is protected by a login. Every action — scan, remediate, rollback, license import — is behind it, so neither a second person on your network nor a website you happen to visit can drive ForteFide even though it's running.
http://127.0.0.1:5000 on the scanner host
and set a password for the built-in ForteFideAdmin account (at least 12
characters). You don't pick a username — there's one account. One-time step.ssh -L 5000:localhost:5000 <scanner-host> — then browse
to http://localhost:5000 and sign in as ForteFideAdmin with the same password.Your license.key file is the literal cryptographic anchor that makes evidence
verifiable — not a license number you copy somewhere. Treat it like a private key, because it
is one. Three ways to activate; pick whichever matches what you got:
license.key onto the dashed box, or click it to open a file
picker.?claim=<token> URL parameter, POSTs to
/api/claim-license, exchanges your machine fingerprint + token with license-api,
and the signed key arrives automatically.Verification happens locally on your machine for the file path — no outbound network call required.
/var/lib/fortefide/license.keyC:\ProgramData\ForteFide\license.keylicense.key is the trust anchor for
every signed evidence package you generate — the math simply fails if it's used anywhere else.
Before any uninstall, back up two things to durable storage: (1) license.key,
(2) the signed evidence package(s) you need to retain. Uninstall (dpkg --remove
or --purge) wipes both by design — leave-no-trace doctrine. Upgrade
(dpkg -i over existing) preserves everything.ForteFide is offline by default. If your environment allows outbound HTTPS and you'd like the dashboard to surface license status changes from DenseDefense (cancellation, refund, warranty withdrawal), enable Online license verification in Settings.
verify.densedefense.com whether your
license is still activeverify.densedefense.com on HTTPS / port 443ForteFide is structured around a single end-to-end flow. You walk it once per engagement. Every step is reversible, and the host is left in its original state when you're done — the leave-no-trace doctrine.
| # | Step | What happens |
|---|---|---|
| 1 | Recon | Three modes in one panel: Active Directory (LDAP query against your DC — recommended), Network Scan (CIDR probe), or Jump Host (proxy through a bastion). Results render in the same panel for review before you advance. |
| 2 | Prep | Create a service account on each target and deploy a cert + SSH key. One-time use of the admin password. The click to advance from Recon is explicit ("Continue to Prepare →"). |
| 3 | Scan | Run the 79-control technical scan over the prepared (or manually-credentialed) targets. Authenticated mode auto-flips to Certificate (Zero Trust) once Prep succeeds. |
| 4 | Remediate | Apply automated fixes for failed controls. Smart ordering runs safe controls first, connectivity-affecting ones last. |
| 5 | Evidence | Baseline is auto-collected after the first scan; after the rescan you click COLLECT FINAL EVIDENCE for the Ed25519-signed final package — SSP, POA&M, SPRS scorecard, per-control evidence, 14 family policies, and signed attestation PDFs. Sealed for C3PAO. |
| 6 | Out (rollback / teardown) | Rollback restores any remediated control to its baseline. No-op rollbacks (target already at baseline) are labeled "no-op" instead of "FAIL". Auto-rescan runs after rollback so the scorecard reflects current state. |
Three discovery modes in one panel. Pick the tab that matches where your authoritative inventory lives:
| Tab | Use when | What you provide |
|---|---|---|
| Active Directory | Your fleet is domain-joined (the common case for any CMMC contractor). AD has the authoritative computer list. | DC IP + domain name + admin username + password |
| Network Scan | AD is not the source of truth, or you want a port-and-OS sweep across a subnet to find unmanaged endpoints. | CIDR range (e.g. 10.0.0.0/24) or comma-separated host list |
| Jump Host | Targets are behind a bastion / not directly reachable from the scanner. ForteFide tunnels discovery through SSH. | Jump host address + SSH creds, then a remote CIDR or AD config to enumerate behind it |
Prep sets up ForteFide's 3-tier auth chain on each target. ForteFide deploys all three and tries them in order on every subsequent operation, falling back automatically:
| Tier | Linux order | Windows order | Used when |
|---|---|---|---|
| 1 | SSH client cert (FF CA) | SSH key over OpenSSH + PowerShell | Default for all post-Prep ops |
| 2 | SSH key (authorized_keys) | WinRM certificate (HTTPS 5986) | When the Tier-1 method is rejected |
| 3 | Password (SSH) | Password (WinRM NTLM) | Bootstrap during Prep; fallback when 1+2 fail |
fortefide-svc, deploy Tier 1 (cert) + Tier 2 (ssh key), arm the watchdog,
then drops back to its installed identity. Your admin password doesn't transit the network again
after Prep.POST /api/firewall-ack before they'll run./var/lib/fortefide/journal/remediation.jsonl so it
can be rolled back later (durable across restarts)| Coverage | Count |
|---|---|
| Automated technical scan | 79 of 110 |
| Manual attestation only (AT / PE / PS) | 31 |
| Safe auto-remediation available on Linux | 67 |
| Safe auto-remediation available on Windows | 66 |
| Auto-remediable on both Linux and Windows | 51 |
| Auto-remediable on at least one OS | 82 |
Four Linux controls — SSH cipher hardening (SC.L2-3.13.8), SHA512 password hashing (IA.L2-3.5.10), password expiry (IA.L2-3.5.8), and session-locking (AC.L2-3.1.11) — could lock you out of the target if applied wrong. ForteFide pauses with a prominent modal:
If this change is made, you will lose rollback option
These four controls intentionally have no rollback path — because if they break access, ForteFide can't roll them back for you either. Read the prompt. If you're sure, click ACKNOWLEDGE. If not, skip the four and remediate them by hand later. Rollback works for every other auto-control.
When the journal has open entries, the topbar shows a ROLLBACK button with a count badge. Click it for a side-panel with per-target breakdown and "Rollback all" or per-target rollback. Survives restart; the count is read from the durable journal, not browser state.
The topbar REPORT button opens the Failure Report modal: every failure ForteFide has recorded
(across scan, remediate, prepare, watchdog deploy) bucketed into 11 categories — timeout,
ssh-fail, auth-fail, sudo-fail, command-not-found, network, layer1-missing, exit-code, permission,
watchdog-deploy, license. Download as CSV. Backed by GET /api/failure-report (also
reachable via the standalone lab_tools/failure_report.py without the FF service
running).
POST /api/teardown-endpoint, when the engagement is done.sudo /var/lib/fortefide/emergency-revert.sh. The script restores the pre-engagement
snapshot ForteFide took during Prepare, reload-restarts sshd, verifies port 22 is listening,
disarms the watchdog, and prints a status summary — pure POSIX shell, no ForteFide running
required, no network required, no hypervisor adapter required. After SSH is back, click ROLLBACK
in the dashboard to flush the journal.When the scan finishes, the asset scorecard above the tab nav fills in. Each prepared host is one asset scorecard; the overall fleet roll-up sits across the top. These are your top-line numbers.
| Card | What it tells you |
|---|---|
| Compliance % | Pass rate across the 79 scanned controls in scope for this scan. SPRS-aligned: each NOT MET deducts 1, 3, or 5 points by severity. |
| Controls Passed | Raw count out of 110. |
| Total Findings | Number of failed-control + manual-attestation rows. |
| Critical | 5-point deductions. Address these first. |
| High | 3-point deductions. |
| Medium | 1-point deductions. |
| Low | Informational; usually no SPRS impact. |
/var/lib/fortefide/scans.db (C:\ProgramData\ForteFide\scans.db on
Windows). Browser refresh, service restart, even reboot — everything reloads on next dashboard
open.Step 2 (Prep) asks how ForteFide should authenticate to your targets going forward. There are three options. Higher tier = stronger; ForteFide falls back automatically if a higher tier is unavailable on a given target.
| Tier | Mechanism | When to use | Long-term role |
|---|---|---|---|
| 1 | Certificate (recommended) | Default. Per-target 30-day cert signed by your license-derived CA. | Steady-state. Auto-renews. |
| 2 | SSH key (Ed25519) | Cert path unavailable; legacy SSH-only targets. | Steady-state fallback. |
| 3 | Password | Bootstrap only — only used to install the cert + key in Step 2. | Not a steady-state mode. |
It removes the ForteFide service account from every target you prepared, deletes the per-target cert directory, and closes out the local journal entries. After teardown the targets look exactly as they did before Prep — leave-no-trace, both sides of the wire.
Wipes the scanner's in-memory engagement state: scans, inventory, prepared service-account records, self-heal/watchdog state, customer-action banners, and the activity log. Your license file is preserved. Two-step confirmation; if you still have prepared endpoints out there, it'll warn you that clearing without Teardown orphans those accounts on the targets. The right rhythm is Teardown first (cleans the targets), then Clear History (cleans the scanner).
After remediation, ForteFide runs a verification scan to confirm each control actually moved
from NOT MET to MET. Most of the time that scan authenticates as the fortefide-svc
service account. Occasionally a hardening control locks that account out for the next connection
— the verification scan falls back one step and retries using the admin credential you supplied
at Prepare time. The evidence package marks the affected controls as
verified-via-admin-fallback so a C3PAO auditor sees the full provenance; on the dashboard the
host renders with an orange border and a "Verified-by-Admin" label.
One per (engagement, Linux target). The scan and the remediation engine share a single already-authenticated SSH session that covers preflight, every control executed, every post-control liveness probe, every auto-rollback, and the post-remediation verification scan. On the wire, your network team sees a single TCP connection on port 22 per target, alive for the duration of the engagement, closed at the end — this avoids tripping sshd MaxStartups, connection -rate firewall rules, and fail2ban-style IDS, and lets remediation keep working through controls that restart sshd. Windows targets currently use one WinRM session per call.
/var/log/fortefide/fortefide.log%ProgramData%\ForteFide\logs\fortefide.log--debug for verbose logging (default level is INFO)/var/lib/fortefide/ (license.key, scans.db, keys/, journal/, reversion/)%ProgramData%\ForteFide\# Back up first
sudo cp /var/lib/fortefide/license.key ~/license.key.bak
# Then upgrade in place (preserves state):
sudo dpkg -i ForteFide_Setup_<version>_linux.deb
Use dpkg -i (upgrade), not dpkg --purge, when reinstalling. Purge
wipes /var/lib/fortefide and your license.key with it. The PRERM gate
refuses uninstall when the journal has open entries unless you set
FORTEFIDE_UNINSTALL_ACK to rollback / abandon /
cancel — the leave-no-trace doctrine self-enforcing at the OS level.
ForteFide ships airgap-clean Layer 1 packages for Ubuntu 20/22/24, Debian 11/12, RHEL 7/8/9 (incl. Rocky/Alma/Oracle/CentOS), SUSE 15/16, and Windows. Amazon Linux 2023 is supported in connected-only mode (EC2 hosts always reach AWS internal repos — no Layer 1 staging needed). SUSE 12 and Arch Linux have partial Layer 1 today; install may succeed but specific controls might fall through to Customer Action Required. Email support@densedefense.com to request a thicken-up roadmap entry for your distro variant.
You haven't set the vault upload token yet. Sign in to densedefense.com, navigate to Account →
Vault, copy your vault upload token, and POST it to /api/vault/configure on this
scanner. DDWitness is optional — you can also skip the cloud handoff entirely and use sneakernet
for evidence delivery.
Network or DNS issue between your scanner and the vault. ForteFide built the signed package
locally — it's still in /tmp/fortefide_vault_upload/. Retry the POST manually, or
switch to sneakernet evidence delivery for this engagement. The vault is optional; failing to
reach it does not block your assessment.
Bad news: any signed evidence package they produced under that license is now cryptographically unverifiable. The packages still exist as files; the signature chain has no key to anchor against. DenseDefense does not escrow license files — this is doctrine, not an oversight. Restore from their backup if available. If not: import a new license and re-run the full prepare → scan → remediate → evidence cycle to rebuild the chain under the new license.
ForteFide is 100% standalone. No admin accounts beyond your existing bootstrap user. No outbound network. Licensing and updates are sneakernet.
license.key file.license.key to authorized removable media (USB stick, encrypted external
drive, optical media — whatever your CUI environment policy allows).license.key to
/var/lib/fortefide/license.key (Linux) or
C:\ProgramData\ForteFide\license.key (Windows). Or POST it via
/api/import-license.license.key file is the trust anchor
for every signed evidence package you produce. Back it up to durable storage outside the scanner.
Lose it and your assessor cannot cryptographically verify your evidence. DenseDefense does not
escrow license files.ForteFide_Setup_<version>_linux.deb
(or .exe) from densedefense.com.dpkg -i ForteFide_Setup_<version>_linux.deb (Linux) or run
the installer (Windows). Existing license.key, scan history, and journal are
preserved across upgrade.