NIST 800-53 SI-7 (Software, Firmware, and Information Integrity) requires organizations to employ integrity verification tools to detect unauthorized changes to software, firmware, and information. Axiom automates compliance evidence for SI-7 through two probes:
| Probe ID | Name | What It Checks | Pass Condition |
|---|---|---|---|
SI-7.1 |
File Integrity Tool | Presence of AIDE, Tripwire, or osquery on the system | At least 1 tool detected |
SI-7.2 |
Package Verification | Modified system packages via dpkg --audit |
10 or fewer modified packages |
AIDE (Advanced Intrusion Detection Environment) is the recommended FIM tool for Debian/Ubuntu systems. It creates a database of file checksums and detects changes on subsequent scans.
# Install AIDE
sudo apt-get install aide aide-common
# Initialize the database (takes 2-5 minutes)
sudo aideinit
# Move the new database into position
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
The default AIDE configuration (/etc/aide/aide.conf) monitors critical system paths. For Axiom integration, ensure these paths are included:
# Critical paths for SI-7 compliance
/etc p+i+u+g+sha256
/usr/bin p+i+u+g+sha256
/usr/sbin p+i+u+g+sha256
/opt/axiom-engine p+i+u+g+sha256
/var/www p+i+u+g+sha256
# Exclude volatile paths
!/var/log
!/tmp
!/var/cache
!/opt/axiom-engine/logs
# /etc/cron.d/aide-axiom
# Run AIDE check daily at 03:00 UTC, feed results to Axiom
0 3 * * * root /usr/bin/aide --check --config=/etc/aide/aide.conf > /opt/axiom-engine/logs/aide-latest.log 2>&1 && /opt/axiom-engine/tools/axiom ingest --type=fim --file=/opt/axiom-engine/logs/aide-latest.log
# Manual ingestion
axiom ingest --type=fim --file=/opt/axiom-engine/logs/aide-latest.log
# The ingestion command:
# 1. Parses AIDE output for changed/added/removed files
# 2. Mints SI-7.1 PASS anchor (tool is present and running)
# 3. Records change count as factor_b for SI-7.2 evaluation
# 4. Emits OTel span for adjudication
After authorized changes (patching, deployments), update the AIDE baseline:
# After authorized maintenance
sudo aide --update
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# Record the baseline update in the witness ledger
axiom scan --module=si_integrity --provenance
Tripwire provides enterprise-grade FIM with centralized management. Integration follows the same pattern as AIDE.
# Install Open Source Tripwire
sudo apt-get install tripwire
# Initialize (interactive - set site and local passphrases)
sudo tripwire --init
# /etc/cron.d/tripwire-axiom
0 3 * * * root /usr/sbin/tripwire --check --quiet > /opt/axiom-engine/logs/tripwire-latest.log 2>&1 && /opt/axiom-engine/tools/axiom ingest --type=fim --file=/opt/axiom-engine/logs/tripwire-latest.log
# After authorized changes
sudo tripwire --update --twrfile /var/lib/tripwire/report/latest.twr
sudo tripwire --update-policy /etc/tripwire/twpol.txt
osquery provides real-time FIM through its file_events table. It is the recommended option for environments that already use osquery for endpoint visibility.
// /etc/osquery/osquery.conf (file_paths section)
{
"file_paths": {
"critical_binaries": [
"/usr/bin/%%",
"/usr/sbin/%%",
"/opt/axiom-engine/%%"
],
"configuration": [
"/etc/%%"
]
},
"file_accesses": ["critical_binaries"],
"schedule": {
"fim_check": {
"query": "SELECT target_path, action, md5, sha256, time FROM file_events WHERE action != 'ATTRIBUTES_MODIFIED';",
"interval": 3600
}
}
}
# Query osquery for FIM events and pipe to Axiom
osqueryi --json "SELECT target_path, action, sha256, time FROM file_events WHERE time > ($(date +%s) - 86400);" > /opt/axiom-engine/logs/osquery-fim.json
# Ingest
axiom ingest --type=fim --file=/opt/axiom-engine/logs/osquery-fim.json
The SI-7 heartbeat runs every 24 hours and performs:
dpkg --audit)| STIG ID | Rule | Requirement | Axiom Probe |
|---|---|---|---|
| V-238400 | SRG-OS-000480-GPOS-00227 | The system must use a file integrity tool configured to use FIPS 140-2/140-3 approved cryptographic hashes | SI-7.1 |
| V-238401 | SRG-OS-000363-GPOS-00150 | The system must notify the ISSO when integrity violations are discovered | SI-7.1 + heartbeat FAIL route |
aide, tripwire, or osqueryi is found in PATHdpkg --audit reports 10 or fewer modified packages# SI-7.1: Install AIDE (fastest path to compliance)
sudo apt-get install aide aide-common
sudo aideinit
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# SI-7.2: Fix modified packages
sudo dpkg --audit
sudo apt-get install --reinstall $(dpkg --audit | awk '/^Package/{print $2}')
# Verify fix
axiom scan --module=si_integrity --provenance
| Issue | Cause | Resolution |
|---|---|---|
| SI-7.1 FAIL despite AIDE installed | AIDE binary not in system PATH for the probe user | Verify with which aide. Symlink to /usr/bin/aide if needed. |
| SI-7.2 shows high count after patching | AIDE baseline not updated after authorized changes | Run sudo aide --update and copy new database |
osquery file_events empty |
inotify watches exhausted or FIM not configured | Check sysctl fs.inotify.max_user_watches (increase to 524288), verify file_paths in osquery.conf |
| Heartbeat not firing | Adjudication workflow inactive or webhook deregistered after restart | Check the adjudication pipeline status, verify the heartbeat workflow is active and the cron trigger is configured |
axiom ingest rejects FIM log |
Log format not recognized | Use --type=fim flag explicitly. Supported: AIDE text output, Tripwire report, osquery JSON. |
False positives from /var/cache |
Volatile paths included in AIDE/Tripwire rules | Add exclusions for /var/cache, /var/log, /tmp in config |