# Security Logging Infrastructure This document describes the structured security logging system implemented in RedFlag v0.2.x. ## Overview The security logging system provides structured, JSON-formatted logging for security-related events across both the server and agent components. It enables: - Audit trail of security events - Real-time monitoring of potential threats - Historical analysis of security incidents - Privacy-respecting logging (IP address hashing) ## Architecture ### Server-Side Components 1. **Security Event Model** (`internal/models/security_event.go`) - Defines the structure of all security events - Includes timestamp, severity, event type, agent ID, and contextual data - Supports IP address hashing for privacy 2. **Security Logger** (`internal/logging/security_logger.go`) - Handles event logging to both files and database - Supports log rotation with lumberjack - Asynchronous processing with buffered events - Configurable log levels and event filtering 3. **Configuration** (`internal/config/config.go`) - Added SecurityLogging section with comprehensive options - Environment variable support for all settings - Default values optimized for production ### Agent-Side Components 1. **Security Logger** (`internal/logging/security_logger.go`) - Simplified implementation for agent constraints - Local file logging with batching - Optional forwarding to server - Minimal dependencies 2. **Configuration** (`internal/config/config.go`) - Security logging configuration embedded in agent config - Environment variable overrides supported - Sensible defaults for agent deployments ## Event Types The system tracks the following security events: | Event Type | Description | Default Severity | |------------|-------------|------------------| | CMD_SIGNATURE_VERIFICATION_FAILED | Command signature verification failed | CRITICAL | | CMD_SIGNATURE_VERIFICATION_SUCCESS | Command signature verification succeeded | INFO | | UPDATE_NONCE_INVALID | Update nonce validation failed | WARNING | | UPDATE_SIGNATURE_VERIFICATION_FAILED | Update signature verification failed | CRITICAL | | MACHINE_ID_MISMATCH | Machine ID change detected | WARNING | | AUTH_JWT_VALIDATION_FAILED | JWT authentication failed | WARNING | | PRIVATE_KEY_NOT_CONFIGURED | Private signing key missing | CRITICAL | | AGENT_REGISTRATION_FAILED | Agent registration failed | WARNING | | UNAUTHORIZED_ACCESS_ATTEMPT | Unauthorized API access attempt | WARNING | | CONFIG_TAMPERING_DETECTED | Configuration file tampering detected | WARNING | | ANOMALOUS_BEHAVIOR | Anomalous agent behavior detected | WARNING | ## Configuration ### Server Configuration Environment variables: - `REDFLAG_SECURITY_LOG_ENABLED`: Enable/disable security logging (default: true) - `REDFLAG_SECURITY_LOG_LEVEL`: Minimum log level (none, error, warning, info, debug) (default: warning) - `REDFLAG_SECURITY_LOG_SUCCESSES`: Log success events (default: false) - `REDFLAG_SECURITY_LOG_PATH`: Log file path (default: /var/log/redflag/security.json) - `REDFLAG_SECURITY_LOG_MAX_SIZE`: Maximum log file size in MB (default: 100) - `REDFLAG_SECURITY_LOG_MAX_FILES`: Number of rotated log files (default: 10) - `REDFLAG_SECURITY_LOG_RETENTION`: Retention period in days (default: 90) - `REDFLAG_SECURITY_LOG_TO_DB`: Store events in database (default: true) - `REDFLAG_SECURITY_LOG_HASH_IP`: Hash IP addresses for privacy (default: true) ### Agent Configuration JSON configuration fields: ```json { "security_logging": { "enabled": true, "level": "warning", "log_successes": false, "file_path": "security.log", "max_size_mb": 50, "max_files": 5, "batch_size": 10, "send_to_server": true } } ``` Environment variables: - `REDFLAG_AGENT_SECURITY_LOG_ENABLED` - `REDFLAG_AGENT_SECURITY_LOG_LEVEL` - `REDFLAG_AGENT_SECURITY_LOG_SUCCESSES` - `REDFLAG_AGENT_SECURITY_LOG_PATH` ## Usage Examples ### Server Integration ```go // Initialize in main.go securityLogger, err := logging.NewSecurityLogger(config.SecurityLogging, db) if err != nil { log.Fatal(err) } defer securityLogger.Close() // Log verification failure securityLogger.LogCommandVerificationFailure( agentID, commandID, "signature mismatch", ) // Create custom event event := models.NewSecurityEvent( "WARNING", models.SecurityEventTypes.AnomalousBehavior, agentID, "Agent check-in frequency changed dramatically", ) event.WithDetail("previous_interval", "300s") event.WithDetail("current_interval", "5s") securityLogger.Log(event) ``` ### Agent Integration ```go // Initialize in main.go securityLogger, err := logging.NewSecurityLogger(config, dataDir) if err != nil { log.Fatal(err) } defer securityLogger.Close() // Log signature verification failure securityLogger.LogCommandVerificationFailure( commandID, "signature verification failed", ) // Get and send batch to server events := securityLogger.GetBatch() if len(events) > 0 { if sendToServer(events) { securityLogger.ClearBatch() } } ``` ## Log Format Events are logged as JSON objects: ```json { "timestamp": "2025-12-13T10:30:45.123456Z", "level": "WARNING", "event_type": "CMD_SIGNATURE_VERIFICATION_FAILED", "agent_id": "550e8400-e29b-41d4-a716-446655440000", "message": "Command signature verification failed", "trace_id": "trace-123456", "ip_address": "192.168.1.100", "details": { "command_id": "cmd-123", "reason": "signature mismatch" }, "metadata": { "source": "api", "user_agent": "redflag-agent/0.2.0" } } ``` ## Database Schema When database logging is enabled, events are stored in the `security_events` table: ```sql CREATE TABLE security_events ( id SERIAL PRIMARY KEY, timestamp TIMESTAMP WITH TIME ZONE NOT NULL, level VARCHAR(20) NOT NULL, event_type VARCHAR(100) NOT NULL, agent_id UUID, message TEXT NOT NULL, trace_id VARCHAR(100), ip_address VARCHAR(100), details JSONB, metadata JSONB ); -- Indexes for efficient querying CREATE INDEX idx_security_events_timestamp ON security_events(timestamp); CREATE INDEX idx_security_events_agent_id ON security_events(agent_id); CREATE INDEX idx_security_events_level ON security_events(level); CREATE INDEX idx_security_events_event_type ON security_events(event_type); ``` ## Privacy Considerations 1. **IP Address Hashing**: When enabled, IP addresses are SHA256 hashed (first 8 characters shown) 2. **Minimal Data**: Only essential security data is logged 3. **Configurable Scope**: Can disable logging of successes to reduce noise 4. **Retention Configurable**: Automatic cleanup of old log files ## Monitoring and Alerting The structured JSON format enables easy integration with monitoring tools: - **Elasticsearch + Kibana**: Index logs for searching and visualization - **Splunk**: Forward logs for SIEM analysis - **Prometheus + Alertmanager**: Count events by type and trigger alerts - **Grafana**: Create dashboards for security metrics Example Prometheus queries: ```promql # Rate of critical security events increase(security_events_total{level="CRITICAL"}[5m]) # Top event types by count topk(10, increase(security_events_total[1h])) # Agents with most security events topk(10, increase(security_events_total[5m]) by (agent_id)) ``` ## Performance Considerations 1. **Asynchronous Processing**: Server uses buffered channel to avoid blocking 2. **Batch Writing**: Agent batches events before sending to server 3. **Log Rotation**: Automatic rotation prevents disk space issues 4. **Level Filtering**: Events below configured level are dropped early ## Troubleshooting ### Common Issues 1. **Permission Denied**: Ensure log directory exists and is writable ``` sudo mkdir -p /var/log/redflag sudo chown redflag:redflag /var/log/redflag ``` 2. **Missing Database Table**: The logger creates tables automatically, but ensure DB user has CREATE privileges 3. **High CPU Usage**: Increase batch sizes or reduce log level in high-traffic environments 4. **Large Log Files**: Adjust retention policy and max file size settings ### Debug Mode Set log level to "debug" for verbose logging: ```bash export REDFLAG_SECURITY_LOG_LEVEL=debug ``` ## Future Enhancements 1. **Structured Metrics**: Export counts by event type to Prometheus 2. **Event Correlation**: Link related events with correlation IDs 3. **Remote Logging**: Support for syslog and remote log aggregation 4. **Event Filtering**: Advanced filtering rules based on agent, type, or content 5. **Retention Policies**: Per-event-type retention configurations 6. **Encryption**: Encrypt sensitive log fields at rest