Guides
Compliance mapping
How the server's own controls map to the logging and access requirements of common frameworks, what the compliance-check tools actually test on each platform, and how to assemble an evidence pack that an assessor can verify.
Secronyx appears in a compliance programme in two roles. As a component, its authentication, authorization, redaction and audit log are controls that your assessor will want to see evidence for. As a collector, its compliance and security scope tools produce dated statements about the hosts it runs on. This page covers both, and it is careful about what it claims: the project holds no certification, the only framework mapping the repository documents is for the audit log, and the compliance-check tools implement a subset of each benchmark rather than the whole. Where the older documentation and the code disagree, this page follows the code.
What is and is not claimed
- No certification. Nothing in the repository asserts that the software, or a host running it, is SOC 2, ISO 27001, PCI DSS or HIPAA compliant. Compliance is a property of your programme, of which this software is one part.
- The audit subsystem's documentation (
docs/security/audit.md) states that it supports the audit trail requirements of SOC 2 Type II, ISO 27001, HIPAA, PCI-DSS and GDPR. That is the mapping reproduced below, and it is a statement about what the log records, not an attestation. get_compliance_checklabels its checks with CIS, PCI-DSS, HIPAA and STIG identifiers. The set of checks is small and fixed; treat the output as evidence for the controls it names, not as a benchmark scan.
The server as a control
The controls an assessor typically asks about, with the mechanism and the evidence to hand them:
| Control area | Mechanism | Evidence |
|---|---|---|
| Authentication of every access | HTTP listener refuses to start on a non-loopback address without authentication and TLS unless --allow-unauthenticated is set (HTTPConfig.Validate). Methods: static token, OIDC, OAuth introspection, API keys, mutual TLS, SSH request signing. |
Start-up log line Auth: <methods>; token_validation audit events with result success or denied. |
| Least privilege | Scopes are enforced at registration (--scopes, --enable-sensitive) and per request (IdentityAllows); a call outside the caller's grants returns JSON-RPC -32003 and is audited as denied. |
Scope policy: N tools not registered at start-up; tools/list output; audit events with result denied and error scope denied. |
| Read-only access | No tool writes. Collectors invoke a fixed set of named binaries through cmdexec with parameterised argument vectors; caller input is never concatenated into a shell command line, and a value that has to be embedded in a PowerShell script is allowlist-checked and quoted with cmdexec.PSQuote. |
Security model; the cmdexec package. |
| Protection of secrets in output | Redaction on by default in every collector that can carry a credential; key material and credential stores are refused by the path policy. | Redaction coverage inventory on the Redaction page; WARNING: output redaction is DISABLED would appear in logs if it were off. |
| Logging and monitoring | Every tool call and authentication decision is a JSON Lines event with identity, client IP, parameters, outcome and duration; SHA-256 hash chain and sequence numbers; O_APPEND writes; stderr fallback. |
audit.jsonl; secronyx --audit-verify output; Prometheus secronyx_tool_calls_total, secronyx_tool_call_errors_total and secronyx_auth_requests_total. |
| Transport security | TLS 1.2 minimum, AEAD cipher suites only, TLS 1.3 preferred; client certificates verified against --tls-client-ca when configured. |
tlsConfig in internal/mcp/http.go. |
| Resilience against abuse | Rate limiting, concurrency cap and lockout after ten authentication failures; per-query deadlines in the polling agent; result size cap. | 429 and 503 responses; result_too_large audit errors. |
| Replay resistance | JWT jti remembered until exp; introspected jti likewise; SSH signatures carry timestamp and nonce. |
Audit denials with token replayed (jti already used) or replayed nonce. |
Audit log mapping
The audit documentation maps the log to the following requirements. The wording is the project's own:
| Framework | What the audit log is documented to support |
|---|---|
| SOC 2 Type II | Complete audit trail of all access |
| ISO 27001 | Security event logging requirements |
| HIPAA | Access logging for protected health information |
| PCI-DSS | Audit trail requirements for payment systems |
| GDPR | Data access logging requirements |
The same document lists minimum retention periods to configure --audit-max-files against: one year for SOC 2 and PCI-DSS, six years for HIPAA, and the duration of processing plus three years for GDPR. Confirm these with your assessor; they are the project's reading of the frameworks, not a legal position. Rotation deletes files beyond --audit-max-files, so for long retention ship the files off-host before that happens, as described under Audit logging.
Two properties of the chain matter to an assessor. First, it is unkeyed: each hash is a SHA-256 of the event fields and prev_hash, so it detects modification, insertion or deletion by anyone who cannot rewrite the whole file, but a party with write access to the file and knowledge of the format could regenerate a consistent chain. Shipping events to a separate system as they are written is what turns tamper-evident into tamper-resistant. Second, the chain continues across rotation, so --audit-verify run against a file whose first event already carries a prev_hash — any live file that has been rotated at least once — reports hash chain broken at event 1 (seq=N); verify the concatenation of the rotated files followed by the live file instead, as the audit page shows.
The server as a collector
Five tools in the compliance scope produce the host-side evidence. All are registered by default; none need --enable-sensitive.
| Tool | Argument | What it returns |
|---|---|---|
get_compliance_check |
framework (string, default basic) |
framework, version, checks[], summary, score_percent, timestamp |
get_security_scan |
none | findings[] with id, title, description, severity, category, remediation, references; summary; score 0 to 100; grade A to F |
get_hardening_recommendations |
none | recommendations[] with id, category, title, priority, current_state; counts by_category and by_priority |
get_forensic_snapshot |
none | snapshot_id, system, users, processes, network_connections, open_files, recent_logins, collected_at |
get_audit_trail |
hours (integer, default 24) |
events[] with timestamp, type, action, subject, object; sources; time_range |
Frameworks by platform
The framework argument is matched case-insensitively in the platform collector. The tool description advertises cis, pci, hipaa, stig; the sets actually implemented are:
| Platform | Accepted values | Reported as | Check identifiers |
|---|---|---|---|
| Linux | cis, cis-benchmark |
CIS Linux Benchmark |
CIS-1.1.1, CIS-1.4.1, CIS-1.5.1, CIS-3.1.1, CIS-4.1.1, CIS-5.2.1 |
| Linux | pci, pci-dss |
PCI-DSS |
PCI-2.2.2, PCI-8.1.4, PCI-10.2.1 |
| Linux | hipaa |
HIPAA |
HIPAA-312b, HIPAA-312d |
| Windows | cis, cis-benchmark |
CIS Windows Benchmark |
CIS-1.1.1, CIS-2.2.21, CIS-9.1.1, CIS-9.2.1, CIS-9.3.1, CIS-18.9.45 |
| Windows | stig |
Windows STIG |
V-63319, V-63405, V-63597, V-63687 |
| macOS | cis, cis-benchmark |
CIS macOS Benchmark |
CIS-1.1, CIS-2.2.1, CIS-2.4.1, CIS-2.5.1, CIS-2.5.2, CIS-5.1.1, CIS-6.1.1 |
| macOS | apple |
Apple Security Guidelines |
APPLE-001 to APPLE-003 |
| any | anything else, including basic, soc2, nist |
Basic Security |
BASIC-001 onwards |
An earlier phase document described soc2 and nist frameworks; the code has no such sets and those values fall through to Basic Security. Each check carries status of pass, fail, skip or manual; score_percent is passed divided by the checks that are neither skip nor manual, so a result with only manual checks scores 100. The identifiers are the project's own labels for the benchmark items they approximate; they are not a licensed reproduction of a benchmark and should be cited as "checked by secronyx get_compliance_check", with the check's title, actual and expected fields as the evidence.
Most get_security_scan findings on macOS reference the CIS macOS Benchmark section they correspond to (for example SEC-003, "FileVault not enabled", references CIS macOS Benchmark 2.5.1); the SIP and Gatekeeper findings reference the Apple Security Guide instead. Every finding carries a remediation. The score starts at 100 and deducts 25 per critical, 15 per high, 8 per medium, 3 per low and 1 per info finding, floored at 0; the grade is A at 90 or above, then B, C and D per ten points, and F below 60.
Supporting tools in other scopes
Assessors usually want the underlying configuration alongside the check result. The security scope covers get_linux_auditd_status, get_linux_kernel_lockdown, get_linux_sysctl_security, get_linux_mac_detailed, get_linux_auto_updates, get_windows_audit_policy, get_windows_local_security_policy, get_windows_gpo_applied, get_windows_defender_status, get_bitlocker_status, get_windows_credential_guard, get_macos_filevault_status, get_macos_sip_status, get_macos_gatekeeper_status and get_macos_mdm_profiles. get_password_policy is in state; get_admin_account_summary and get_ssh_security_summary in triage. Software inventory for a supply-chain control comes from get_sbom_cyclonedx (CycloneDX 1.4), get_sbom_spdx and the package tools in software. Of the tools named here, only get_certificates, get_user_accounts, get_sudo_config and get_ssh_config require the sensitive scope.
Assembling an evidence pack
A repeatable collection has four parts, and each is verifiable independently of the person who ran it.
- The collection identity. Issue a dedicated API key (
secronyx apikey create --file /etc/secronyx/keys.json --name compliance-runner --scopes compliance,security,software,triage,state --expires 30d --cidr <scheduler>/32;--fileis required, and the key is printed once). Itsnamebecomes theidentityon that caller's audit events, so the pack is attributable to the job rather than to whoever holds a shared token. - The results. Call the tools over JSON-RPC and store the raw responses. Each carries a
timestamp;get_forensic_snapshotalso carries asnapshot_id. For a host with no HTTP listener,secronyx --query get_compliance_check --framework cis --jsonruns the same collector directly, with the caveat that direct queries are not audited astools/callevents. - The audit record. Run the collection listener with
--audit-buffer-size 0 --audit-sync-writeso the events are on disk before the response is returned;--audit-sync-writeon its own still leaves the write to the async buffer. After the run,secronyx --audit-verify --audit-output <file>printsAudit verification OK: N events verified, and the exit status is 0. - The configuration statement. Capture the server's start-up log: the
Auth:line,Scope policy: N tools not registered (sensitive=false, scopes="..."), and the absence ofWARNING: output redaction is DISABLEDandWARNING: audit logging is DISABLED. Together withtools/list, this shows the assessor what the collection could and could not have read.
# Verify the pack's audit trail
secronyx --audit-verify --audit-output /var/log/secronyx/audit.jsonl
# Audit verification OK: 1523 events verifiedLimits to state in your own documentation
- The compliance checks are a small fixed subset per framework; a full benchmark assessment needs a dedicated scanner. The tool is useful for continuous evidence on the items it covers and for feeding a model the current state.
- Checks marked
manualare reported, not evaluated. - Redaction is pattern-based and has documented limits; an assessor reviewing the audit log should know that
paramsmay contain what the caller sent, which is why redaction stays on. - Forecasts and trends from the
analyticsscope are extrapolated from in-process samples and say so; they are not a capacity record. - Nothing here substitutes for host hardening, network segmentation or a secrets manager; see the "What the server is not" list under Security model.
Related pages: Audit logging, Redaction, Scopes and authorization, Use cases, Tutorial: verify the audit chain, and the Secronyx homepage.
Built 2026-09-19. Source: levantar-ai/secronyx. Found a mistake? Tell us.