12 KiB
Production DLP Plan for Windows 10-19
Goal
Build a reliable, easy-to-deploy, and maintainable production DLP system on top of the existing AWatch-rus platform, with Windows hosts 10-19 as the primary target scope.
This plan assumes the current baseline already exists:
- Windows collectors for endpoint/browser/email/file telemetry
- ActivityWatch-based ingestion and Web UI overlays
- Ansible deployment for AW server and Windows endpoints
- InnoSetup-based Windows install kit
Scope
In scope:
- Centralized DLP policy lifecycle
- Advanced practical content analysis for Russian personal data
- SIEM/SOAR exports and notifications
- Case management for investigations
- Compliance reporting
- Administrative tooling and health checks
Out of scope for this phase:
- Full enterprise RBAC/SoD model
- Multi-tenant administration
- Heavy ML/UEBA
- Approval workflows more complex than basic policy rollback/case review
Delivery Principles
- Keep deployment simple: Python + SQLite + systemd on server, PowerShell on endpoints.
- Default to last-known-good behavior on every critical component.
- Do not break current Phase-1/2 DLP behavior while adding server-side controls.
- Prefer additive rollout behind feature flags and config toggles.
- Every new service must have Ansible deployment, health checks, logs, and rollback notes.
Current Baseline and Gap
Current AWatch-rus DLP already provides:
- Rule-based endpoint detection
- Incident buckets and review UI
- Basic enforcement for clipboard/USB/print
- Email/file/browser collectors
- Initial reliability hardening work
Main gap to production DLP:
- Policies are still too endpoint-local
- Content analysis is not centralized or rich enough
- Incident export/investigation/reporting chain is incomplete
- Health/operations model is not yet unified
Stage 1: Policy Engine
Objective
Centralize policy management and distribution without breaking endpoint autonomy.
Files
aw-server/dlp-policy-engine/policy_service.pyaw-server/dlp-policy-engine/policy_schema.pyaw-server/dlp-policy-engine/policy_storage.pyaw-server/dlp-policy-engine/policy_distributor.pyaw-server/dlp-policy-engine/requirements.txtaw-server/dlp-policy-engine/dlp-policy-engine.serviceansible/roles/dlp-policy-engine/tasks/main.ymldocs/dlp-policy-engine.mdwindows/dlp-policy-client.ps1
Server responsibilities
- REST API:
GET /api/0/dlp/policiesPOST /api/0/dlp/policiesPUT /api/0/dlp/policies/{id}DELETE /api/0/dlp/policies/{id}GET /api/0/dlp/policies/active
- SQLite-backed storage with version history in
policy_versions - Validation through Pydantic and JSON schema before activation
- Backup and rollback of active policy versions
- Heartbeat-aware policy distribution model
Endpoint changes
Update windows/dlp-endpoint-signals-collector.ps1:
- add
-PolicyModewith valueslocalandserver - in
servermode pull active policy every 5 minutes - cache last valid server policy locally
- fallback to local cached policy if server is unavailable
Acceptance criteria
- Policy can be created, versioned, activated, and rolled back through API.
- Endpoints continue working during policy engine outage.
- Invalid policy cannot become active.
- Endpoint logs clearly show source of active policy:
local,server, orcached.
Main risks
- Breaking current local-policy-only flow
- Partial rollout where server mode is enabled before engine is healthy
- Policy drift between server and endpoints
Risk controls
- Feature flag:
aw_dlp_policy_engine_enabled - Default endpoint mode remains
localuntil validation is complete - Store active policy checksum/version on both server and endpoint
Stage 2: Advanced Content Analysis
Objective
Add practical, legally relevant detection quality without overengineering.
2.1 Dictionary packs for 152-FZ personal data
Files
aw-server/dlp-content-analysis/dictionaries/152-fz-pdn.jsonaw-server/dlp-content-analysis/checksum_validator.pyaw-server/dlp-content-analysis/dictionary_matcher.py
Required capabilities
- Detect:
- INN
- SNILS
- Russian passport patterns
- Validate checksums where applicable to reduce false positives
2.2 Regex packs
Files
aw-server/dlp-content-analysis/regex-packs/financial.jsonaw-server/dlp-content-analysis/regex-packs/contacts.jsonaw-server/dlp-content-analysis/regex-packs/secrets.json
Required capabilities
- Reusable grouped pattern packs
- Server-defined matching rules distributed via policy
- Match metadata attached to incidents
2.3 OCR for screenshots
Files
aw-server/dlp-content-analysis/ocr_processor.pyaw-server/dlp-content-analysis/requirements.txtansible/roles/dlp-content-analysis/tasks/main.yml
Required capabilities
- Tesseract wrapper for screenshots in
incident_artifacts - OCR text sent through regex and dictionary pipeline
- OCR enrichment attached to the original incident
2.4 Endpoint integration
Update:
windows/dlp-policy.example.jsonwindows/dlp-endpoint-signals-collector.ps1
Add policy fields:
dictionaryPackregexPackocrEnabled
Endpoint behavior:
- load server-delivered dictionary/regex references
- perform checksum-aware validation for supported PII
- upload screenshots for OCR when enabled by policy
Acceptance criteria
- Server can enrich incidents with dictionary, regex, and OCR findings.
- False positives are reduced through checksum validation.
- OCR can be disabled per policy without code changes.
- Screenshot upload path is explicit and logged.
Main risks
- OCR cost and latency
- Privacy overreach from over-collecting screenshots
- Regex pack sprawl and poor maintainability
Risk controls
- OCR disabled by default
- Artifact retention policy documented
- Pack ownership and naming convention enforced
Stage 3: SIEM and SOAR Integrations
Objective
Make DLP incidents operational outside the AW UI.
3.1 CEF exporter
Files
aw-server/dlp-integrations/cef_exporter.pyaw-server/dlp-integrations/cef-config.yamlaw-server/dlp-integrations/cef-exporter.serviceaw-server/dlp-integrations/cef-exporter.timer
Required capabilities
- Read normalized incidents from SQLite/PostgreSQL
- Convert incidents to CEF
- Send via syslog
- Map DLP severities to CEF severities
3.2 Webhook notifications
Files
aw-server/dlp-integrations/webhook_sender.pyaw-server/dlp-integrations/webhook-config.yaml
Required capabilities
- Notify on
severity=high - Retry with backoff
- Include incident details, source host, user, rule, and evidence link
3.3 Ansible integration
Update ansible/deploy_aw_server.yml:
- install Python dependencies
- deploy configs/services/timers
- manage enable/start state
Acceptance criteria
- High-severity incidents can be exported to SIEM and webhook endpoints.
- Export failures are visible and retry safely.
- Timers/services are idempotently managed by Ansible.
Main risks
- Duplicate exports
- Alert fatigue
- Silent delivery failure to external systems
Risk controls
- Event ID based dedupe
- Severity thresholding
- Delivery logs and health checks
Stage 4: Case Management
Objective
Provide a practical investigation workflow without introducing a heavy IR platform.
Files
aw-server/dlp-case-management/case_service.pyaw-server/dlp-case-management/case_schema.pyaw-server/dlp-case-management/case_storage.pyaw-server/dlp-case-management/case-service.serviceinstall-kit-awindows-20260427-211240/aw-server/aw-case-management-ui.js
Required capabilities
- Create a case from an incident
- Attach evidence links
- Support statuses:
openinvestigatingresolvedclosed
- Support comments
- Maintain immutable audit records in
case_audit
UI integration
Update install-kit-awindows-20260427-211240/aw-server/aw-ru-patch.js:
- add
Create caseaction in DLP review table - add
Case Managementsection in UI - show linked cases on incident views
Acceptance criteria
- An operator can create and track a case directly from a DLP incident.
- Evidence remains linked after status transitions.
- Case audit trail is append-only.
Main risks
- UI debt in current patch overlay
- Weak evidence chain semantics
- Mixing incident review and case workflow logic
Risk controls
- Keep case service isolated from core AW server
- Use immutable audit table
- Treat evidence as links/references first, not copied blobs
Stage 5: Compliance Reporting
Objective
Generate regular compliance-grade reporting for Russian personal data handling.
Files
aw-server/dlp-compliance/report_generator.pyaw-server/dlp-compliance/templates/152-fz-report.htmlaw-server/dlp-compliance/report-scheduler.serviceaw-server/dlp-compliance/report-scheduler.timer
Required capabilities
- Period incident report
- Leak-channel statistics
- User statistics
- PDF export via
weasyprint - Scheduled email delivery
Acceptance criteria
- Monthly report can be generated unattended.
- Report includes traceable source metrics.
- Output is usable by operations/compliance without manual cleanup.
Main risks
- Weak data quality in upstream incidents
- PDF rendering dependency issues
- Email delivery failures
Risk controls
- Validate report inputs before generation
- Keep HTML template under version control
- Add health check for scheduler and last successful report
Stage 6: Administrative Tooling
Objective
Make the whole stack operable without manual database edits or ad hoc scripts.
Files
scripts/dlp-admin-cli.pyscripts/dlp-health-check.py
Required CLI functions
python3 dlp-admin-cli.py policies listpython3 dlp-admin-cli.py policies push --host HOSTNAMEpython3 dlp-admin-cli.py incidents list --severity highpython3 dlp-admin-cli.py cases create --incident-id IDpython3 dlp-admin-cli.py health check
Health checks
- API endpoint availability
- endpoint reachability and policy sync state
- queue health if implemented
- disk space
- systemd service state
Acceptance criteria
- Operator can inspect policy, incident, case, and service health from CLI.
- Health check has machine-readable exit status.
- All critical services are covered by a single operational runbook.
Cross-Cutting Ansible Work
Update:
ansible/deploy_aw_server.ymlansible/group_vars/all.example.ymlansible/roles/dlp-policy-engine/tasks/main.ymlansible/roles/dlp-content-analysis/tasks/main.yml
Required variables:
aw_dlp_policy_engine_enabled: trueaw_dlp_policy_engine_port: 5601
Ansible quality bar:
- idempotent
- rollback-aware
- systemd-managed
- config templated, not hand-edited in prod
Execution Order
- Stage 1: Policy Engine
- Stage 2: Advanced Content Analysis
- Stage 6: Administrative Tooling
- Stage 3: SIEM and SOAR Integrations
- Stage 4: Case Management
- Stage 5: Compliance Reporting
Rationale:
- centralized policies are the control plane
- content analysis increases signal quality
- admin tooling is needed before broadening operations
- integrations, cases, and reports depend on stable normalized incidents
Release Strategy
Wave 1
- Deploy policy engine on AW server
- Keep endpoints in
localmode - Validate API, versioning, rollback
Wave 2
- Enable
serverpolicy mode for a pilot subset of Windows10-19 - Validate cache/fallback behavior
- Measure heartbeat and policy freshness
Wave 3
- Roll out dictionary/regex/OCR selectively
- Enable SIEM/webhook export
- Stabilize case management and reporting
Definition of Done
The plan is considered implemented only when:
- all new services are deployed by Ansible
- endpoint fallback works under server outage
- policy activation/rollback is proven
- content analysis is documented and testable
- SIEM/webhook integrations are observable
- case workflow is usable from UI
- monthly compliance report is generated automatically
- admin CLI and health checks replace ad hoc operational steps
Deliverables Checklist
- Policy engine service and API
- Endpoint policy client and cache/fallback
- SQLite policy versioning and rollback
- Dictionary packs for 152-FZ
- Regex packs for financial/contact/secret data
- OCR processing pipeline
- CEF exporter
- Webhook sender
- Case management service and UI integration
- 152-FZ report generator and scheduler
- Administrative CLI
- Unified health check
- Ansible deployment coverage
- Operational documentation