File Integrity Monitor
Cryptographic proof a host has not been tampered with since the last scan, on a cadence the assessor cannot dispute.
The problem
3.14.5 requires periodic scans of organizational systems. 3.14.6 requires monitoring to detect attacks and indicators of attack. Both controls are written to be solved with file integrity monitoring, since FIM is the technical evidence that a system has not been tampered with between assessments rather than a procedural claim that nobody touched it.
Persistence mechanisms are visible to FIM that nothing else catches. A modified SSH host key is the setup for a man-in-the-middle. A new SUID binary is privilege escalation infrastructure waiting to be used. A kernel module added to /lib/modules/ is a near-certain rootkit indicator. None of these get detected by AV in the general case; all of them get detected by file hashing in the specific case.
Performance is the operational constraint. A naive scanner hashes hundreds of thousands of files on every run and burns the host's IO budget. The agent uses mtime as a pre-filter, so if mtime has not changed since the last scan it skips the re-hash and trusts the recorded hash. Subsequent scans complete in seconds rather than minutes, with no measurable load on production systems.
What CMMC requires
NIST SP 800-171 Rev 2 controls this agent verifies. Primary mappings drive the gap assessment; secondary mappings provide supporting evidence in the SSP.
Provides the periodic-scan mechanism for system file integrity required by 3.14.5,the canonical use case for FIM in CMMC environments.
Read in NIST 800-171 r2↗Binary modifications, kernel module changes, and unexpected SUID binaries are direct indicators of attack,surfaces them with cryptographic certainty.
Read in NIST 800-171 r2↗Detects modification of audit binaries (auditd, auditctl) and audit config files,protection of audit information requires knowing when it changes.
Read in NIST 800-171 r2↗The FIM baseline IS the configuration baseline for file state. Drift from the baseline is configuration drift by definition.
Read in NIST 800-171 r2↗Unauthorized binary modification is a primary indicator of unauthorized system use. FIM converts a procedural concept into measurable evidence.
Read in NIST 800-171 r2↗How it works
Per-platform detection logic. The agent runs unprivileged where possible and falls back gracefully when raw access is unavailable.
Monitors /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin, /lib, /lib64, /usr/lib, /etc/passwd, /etc/shadow, /etc/sudoers and sudoers.d, /etc/ssh/sshd_config and host keys, /etc/pam.d, /etc/audit, all /etc/cron* paths, /boot/grub*/grub.cfg, /boot/vmlinuz*, and /lib/modules. Tracks SUID binaries via find / -perm -4000 -o -perm -2000. Hashes with SHA-256 in streaming chunks for files larger than 100MB. Stores fim.db at /var/lib/tolerance/fim.db with HMAC-SHA256 authentication on the database itself.
Monitors C:\Windows\System32, SysWOW64, System32\drivers, System32\wbem, and the Program Files trees. Hashes exported registry hives for HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, RunOnce, SYSTEM\CurrentControlSet\Services, and Winlogon so persistence-relevant changes are caught at the same cadence as binary changes. Stores fim.db under %ProgramData%\Tolerance\ with the same HMAC integrity check as Linux.
Monitors /usr/bin, /usr/sbin, /bin, /sbin, /System/Library, /Library/LaunchDaemons, /Library/LaunchAgents, and /etc/pam.d. Uses the same SHA-256 hashing model as Linux with the same mtime pre-filter, so subsequent scans finish in seconds even on machines with hundreds of thousands of system files.
What it finds
Concrete findings written to the assessor's mental model,not abstract categories. Severity drives POA&M priority and SPRS deduction.
- CRITICALCritical binary modified in /bin or /sbinHash mismatch on a system binary. High rootkit likelihood,investigate immediately. Trojaned ls, ps, netstat, or sshd are well-documented attack patterns.
- CRITICALKernel module added or modifiedNew or changed file under /lib/modules/. Strong rootkit indicator. Kernel-mode persistence is the highest-risk change a system can experience.
- CRITICALWindows System32 binary modifiedHash mismatch on a System32 file outside an authorized Windows Update window. Service hijacking or rootkit pattern.
- HIGH/etc/sudoers modifiedPrivilege escalation policy changed since last scan. Verify against approved configuration management,this should never happen outside a tracked change.
- HIGHSSH host key modifiedHost key replaced. Either an admin operation that needs documentation or a man-in-the-middle setup. Both demand explanation.
- HIGHNew SUID binary detectedBinary with SUID bit added since baseline. Privilege escalation infrastructure,investigate origin and authorize or remove.
- HIGHNew cron job in /etc/cron.d/Cron file created since baseline. Persistence mechanism,verify the source of the change.
3.14.5 and 3.14.6 are 5-point and 5-point controls respectively, and their combined evidence is what FIM produces. Without FIM, 3.14.5 evidence relies on whatever the AV product runs, which is not periodic scans of system file integrity in any meaningful sense. A FIM-detected rootkit indicator is an incident the contractor can investigate before damage is done. A FIM database with no findings across multiple scans is the single strongest piece of evidence a contractor can place in front of an assessor on these controls.
How it hooks into the platform
The platform initializes the SHA-256 hash database on first discovery of each host and re-hashes on a cadence calibrated to the host's CUI tier. You choose whether the database, diffs, and finding metadata stay on-prem or sync up; the database itself can remain local even when findings sync. The signed FIM database is the SSP's cryptographic file-state baseline under 3.4.1, and the recurring re-scan satisfies 3.14.5 and 3.14.6 directly. Findings link to path, hash before, hash after, and time of change. POA&M items capture investigations of unauthorized modification.
How we know it's working
Acceptance criteria from the engineering spec,what the agent must do to ship.
- Detects modifications anywhere under /etc/ within the next scan cycle
- Surfaces kernel module changes against any added or replaced .ko file
- Flags newly added SUID binaries on the next scan automatically
- Skips re-hashing of files whose mtime is unchanged for fast subsequent scans
- Detects tampering of the FIM database via HMAC-SHA256 on every read
- Hashes /bin, /sbin, and /usr/bin in under 30 seconds on first run
- Excludes /proc, /sys, and /dev unconditionally to avoid pseudo-fs noise
Run this agent against your environment.
Book a 30-minute scoping call. We'll deploy the agent on your systems and walk through the findings together.