mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-28 03:20:11 +00:00
Implements comprehensive security hardening for pulse-sensor-proxy: - Privilege drop from root to unprivileged user (UID 995) - Hash-chained tamper-evident audit logging with remote forwarding - Per-UID rate limiting (0.2 QPS, burst 2) with concurrency caps - Enhanced command validation with 10+ attack pattern tests - Fuzz testing (7M+ executions, 0 crashes) - SSH hardening, AppArmor/seccomp profiles, operational runbooks All 27 Phase 1 tasks complete. Ready for production deployment.
3 KiB
3 KiB
Pulse Sensor Proxy Runbook
Quick Reference
- Binary:
/opt/pulse/sensor-proxy/bin/pulse-sensor-proxy - Unit:
pulse-sensor-proxy.service - Logs:
/var/log/pulse/sensor-proxy/proxy.log - Audit trail:
/var/log/pulse/sensor-proxy/audit.log(hash chained, forwarded via rsyslog) - Metrics:
http://127.0.0.1:9456/metrics - Limiters: per-UID token bucket (burst 2) + global concurrency (8)
Monitoring Alerts & Response
Rate Limit Hits (pulse_proxy_limiter_rejections_total)
- Check audit log entries tagged
limiter.rejectionfor offending UID. - Confirm workload legitimacy; if expected, consider increasing limits via config override.
- If malicious, block source process/user and inspect Pulse audit logs.
Penalty Events (pulse_proxy_limiter_penalties_total)
- Review corresponding validation failures in audit log (
command.validation_failed). - If repeated invalid JSON/unknown methods, inspect caller code for regressions or intrusion attempts.
Audit Log Forwarder Down
journalctl -u rsyslogto confirm transmission errors.- Ensure
/etc/pulse/log-forwardingcerts valid & remote host reachable. - Forwarding queue stored locally in
/var/log/pulse/sensor-proxy/forwarding.log; ship manually if outage exceeds 1 hour.
Proxy Health Endpoint Fails
systemctl status pulse-sensor-proxy- Check
/var/log/pulse/sensor-proxy/proxy.logfor panic or limiter exhaustion. - Inspect
/var/log/pulse/sensor-proxy/audit.logfor recent privileged method denials.
Standard Procedures
Restart Proxy Safely
sudo systemctl stop pulse-sensor-proxy
sudo apparmor_parser -r /etc/apparmor.d/pulse-sensor-proxy # if updating policy
sudo systemctl start pulse-sensor-proxy
Verify: curl -s http://127.0.0.1:9456/metrics | grep pulse_proxy_build_info.
Rotate SSH Keys
- Run
scripts/secure-sensor-files.shto regenerate keys (ensure environment locked down). - Use RPC
ensure_cluster_keysto distribute new public key. - Confirm nodes accept
sshfrom proxy host.
Adjust Rate Limits
- Update
limiter_policyenvironment overrides (future config). - Restart proxy; monitor limiter metrics to validate new thresholds.
- Document change in security runbook.
Incident Handling
- Unauthorized Command Attempt: audit log shows
command.validation_failedand limiter penalties; capture correlation ID, check Pulse side for compromised container. - Excessive Temperature Failures: refer to
pulse_proxy_ssh_requests_total{result="error"}; validate network ACLs and node health; escalate to Proxmox team if nodes unreachable. - Log Tampering Suspected: verify audit hash chain by replaying
eventHashvalues; compare with remote log store (immutable). Trigger security response if mismatch.
Postmortem Checklist
- Timeline: command audit entries, limiter stats, rsyslog queue depth.
- Verify AppArmor/seccomp status (
aa-status,systemctl show pulse-sensor-proxy -p AppArmorProfile). - Ensure firewall ACLs match
docs/security/pulse-sensor-proxy-network.md.