AppProfileSafe runs entirely on-premise. Every operation is auditable, every data flow is transparent, and no information leaves your network. This page documents the security architecture for CISOs, compliance officers, and IT security teams. The security model applies equally to Community Edition and Enterprise.
AppProfileSafe is a standalone Windows desktop application. It runs on the endpoint, reads and writes to local or network paths, and never opens a connection to an external host.
There is no cloud backend, no SaaS component, and no external API integration. The application operates fully offline. License validation uses locally available identity attributes — Active Directory domain SID or Azure tenant UUID — without network calls.
What this means for your infrastructure: No firewall rules, no proxy exceptions, no outbound allow-lists. AppProfileSafe works in air-gapped environments without modification.
AppProfileSafe collects no usage data, no crash reports, no analytics, and no hardware identifiers. There is no phone-home mechanism, no update checker, and no background service. The application runs when invoked and does nothing else.
Verifiable: The application makes zero outbound network connections. This is testable with any network monitor or packet capture tool. SIEM forwarding (Enterprise) is the only optional outbound path — configured and controlled by you.
The audit log is a hash-chained CSV where each entry’s HMAC depends on the previous entry. Any modification, deletion, or reordering of entries breaks the chain and is detected on the next integrity check. Included in all editions.

The integrity service verifies the complete audit trail on every application startup. It reads all audit CSV files in chronological order, checks sequence number continuity, and validates that each entry’s PreviousHash matches the preceding entry’s EntryHash.
Hash chain: Each entry is HMAC-SHA256 signed using a key stored in Windows Credential Manager. The hash covers timestamp, sequence number, user, action, target, and success status. Fallback to unsigned SHA-256 if no HMAC key is available.
Startup check: Integrity verification runs automatically in both Community and Enterprise editions. In Enterprise, failures are additionally dispatched as Critical severity events to SIEM.
The hash chain design means that modifying any single entry invalidates all subsequent entries. Deleting an entry creates a sequence gap. Inserting an entry breaks the hash chain. Reordering entries breaks both sequence and chain.
Detection scope: Entry modification, entry deletion, entry insertion, entry reordering, and diff CSV tampering (DiffHash= in Details field verified separately).
The AuditRetentionService manages log lifecycle with configurable retention periods. Logs past the retention window are either archived to a separate path (with a LogArchived audit entry recording the last hash and sequence) or deleted. Associated diff CSV files are cleaned up automatically.
Archival audit trail: When a log file is archived, the archival operation itself is recorded in the active audit log with the archived file’s last sequence number and hash — maintaining chain of custody.
Before audit events are forwarded to SIEM endpoints, webhooks, or external systems, the redaction engine applies per-sink policies that mask, hash, or remove sensitive fields. Policies are defined in XML with dot-notation field paths and validated against XSD.
Replaces the field value with a one-way SHA-256 hash. The original value cannot be recovered, but identical inputs produce identical hashes — enabling correlation across events without exposing the underlying data.
Use case: Hash UserName or MachineName for SIEM correlation while preventing PII from reaching external systems.
Preserves a configurable number of leading or trailing characters and replaces the rest with a mask character. Retains enough context for triage without full disclosure.
Example: john.doe becomes jo****oe. Visible prefix and suffix are configurable per rule.
Removes the field entirely from the event payload before forwarding. The field key is preserved with an empty or null value, maintaining the event schema while eliminating the sensitive content.
Use case: Suppress Details or ErrorMessage fields that may contain file paths with embedded usernames.
Redaction policies are defined per sink in XML configuration. Each SIEM endpoint, webhook, or Event Log sink can have its own redaction profile. Field paths use dot-notation (e.g. Context.UserName, Payload.Details) and are validated against the Redaction XSD at startup.
Strict policy (external SIEM): Hash all identity fields, suppress error details, mask machine names. Minimizes PII exposure to third-party systems.
Moderate policy (internal webhook): Hash usernames only, preserve details for operational triage. Balances privacy with incident response needs.
Validation: Redaction XML is validated against the Redaction XSD at application startup. Invalid field paths or unknown rule types are rejected before any events are processed.
Sink mapping: SinkMappings in the redaction config assign policies to specific sinks by name. Sinks without an assigned policy receive no redaction — explicit opt-in required.
The local audit trail provides the foundation for compliance evidence in all editions. Enterprise adds automated Compliance Reports (PDF) and SIEM forwarding for centralized audit collection.
Every GUI and CLI operation produces a structured JSON run report. The report captures the operation type, application list, manifest path, timing, per-application results, and the final exit code. Reports are saved alongside the manifest.
Content: Operation type, interface (CLI/GUI), app list, start/end timestamps, per-app success/failure, file and registry counts, total data size, exit code.
Compliance reports are generated from the audit trail as automated PDFs. Reports include generation metadata: date range, generating machine, operator identity, and report format version. Schedulable via Task Scheduler for monthly delivery.
Generation: CLI via --generateComplianceReport with optional --reportFrom / --reportTo date range. Defaults to previous month. Also available via the GUI Audit Log Viewer.
Audit events are forwarded to SIEM endpoints through a queue-based event pipeline with per-sink delivery tracking, exponential backoff, and dead-letter handling. Each sink operates independently — a webhook failure does not block SIEM delivery.
Formats: CEF, JSON, LEEF via HTTP. Syslog via UDP. Authentication: Bearer, API Key, Basic, Splunk HEC. Webhook endpoints receive HMAC-SHA256 signed payloads for replay protection.
Full audit trail, access logging, and data handling transparency support information security management requirements.
On-premise operation, no external data flows, and deterministic behavior align with baseline protection requirements.
Data redaction (Enterprise), local-only processing, and no telemetry collection support data protection by design and by default.
Machine-readable logs with timestamps, operator identity, and per-object results provide auditors exactly what they need.
Security is not a feature layer — it is embedded in the application’s operational primitives. File writes, process isolation, credential handling, and path validation are hardened by design. These protections apply to all editions.
All file writes use a write-to-temp, then atomic-move pattern. If the process is interrupted mid-write, the target file is never left in a partial or corrupted state. The audit log, event queue store, and export archives all use the same AtomicFileWriter.
Implementation: Write to a temporary file in the same directory, then File.Move with overwrite. Same-directory ensures same-volume for atomic rename. Cross-process mutex protection on shared files.
A system-wide named mutex prevents concurrent execution of multiple AppProfileSafe instances. This eliminates race conditions on shared resources: the audit log, event queue, and export archives are never accessed by competing processes.
Recovery: Abandoned mutex detection handles unclean shutdowns. If a previous instance crashed without releasing the mutex, the next instance recovers ownership instead of blocking indefinitely.
Sensitive values — HMAC signing keys, UNC credentials, SIEM authentication tokens — are stored in Windows Credential Manager and resolved at runtime through the ISecretStore interface. Secrets never appear in configuration files, log output, or event payloads.
Credential references: Configuration files reference credentials by target name (e.g. AppProfileSafe:Audit:HmacKey). The credential store resolves the actual value at runtime. First-run key generation is automatic.
Before any write operation, the import engine validates that target paths resolve within expected boundaries. Manifest entries referencing paths outside the application scope are rejected. This prevents mapping misconfigurations from writing to unintended system locations.
What it catches: Mapping rules that accidentally rewrite to system directories. Absolute paths that bypass environment variable expansion. Path traversal attempts via .. segments.
If you discover a security issue in AppProfileSafe, please report it responsibly. We take every report seriously and respond within two business days.
security@appprofilesafe.comPlease include a description of the issue, reproduction steps, and the affected version. Do not disclose vulnerabilities publicly before coordinated resolution.
Download Community Edition and run it on your infrastructure. No registration, no cloud connection, no outbound traffic. Full audit trail included.