Skip to content

Security

The Security module provides continuous visibility into the security posture of every managed device. The Breeze agent collects antivirus status, firewall state, disk encryption details, local administrator accounts, and password policy configuration from each endpoint. That data flows into the API where it is scored, trended, and surfaced through a unified dashboard. When the agent detects threats during a scan, those threats can be quarantined or removed directly from the console. A built-in recommendations engine analyzes posture data across the fleet and produces prioritized, actionable guidance to reduce risk.


Security Status

The agent reports a SecurityStatus payload on each heartbeat. The payload includes the detected AV provider, real-time protection state, definition freshness, firewall status, disk encryption status, local admin accounts, and password policy configuration.

Collected Fields

FieldDescription
providerNormalized security provider identifier (e.g. windows_defender, bitdefender)
providerVersionVersion string of the installed AV product
definitionsVersionVirus definition / signature version
definitionsDateTimestamp of the most recent definitions update
realTimeProtectionWhether real-time scanning is active
lastScanTimestamp of the most recent completed scan
lastScanTypeType of last scan: quick, full, or custom
threatCountNumber of active threats on the device
firewallEnabledWhether the host firewall is active
encryptionStatusDisk encryption state: encrypted, partial, or unencrypted
encryptionDetailsPer-volume encryption breakdown (method, mount point, protection status)
localAdminSummaryLocal administrator account inventory with issue flags
passwordPolicySummaryPassword policy settings (min length, complexity, lockout, history)
gatekeeperEnabledmacOS Gatekeeper status (macOS only)

Detection Methods by Platform

  • AV detection: Windows Security Center (root/SecurityCenter2) via CIM, with fallback to Get-MpComputerStatus for Windows Server
  • Firewall: Get-NetFirewallProfile queries all three profiles (Domain, Private, Public)
  • Encryption: Get-BitLockerVolume reads BitLocker protection status and encryption percentage per volume
  • Local admins: Get-LocalGroupMember -Group 'Administrators' enumerates the local Administrators group
  • Password policy: Win32_AccountPolicy CIM class reads min length, max age, lockout threshold, and history count

Supported Providers

The agent normalizes detected AV products to one of the following provider identifiers. On Windows, multiple AV products may be registered simultaneously through the Security Center.

Provider IDDisplay NameVendor
windows_defenderMicrosoft DefenderMicrosoft
bitdefenderBitdefenderBitdefender
sophosSophosSophos
sentineloneSentinelOne SingularitySentinelOne
crowdstrikeCrowdStrike FalconCrowdStrike
malwarebytesMalwarebytesMalwarebytes
esetESETESET
kasperskyKasperskyKaspersky
otherOtherOther

Threat Detection

Threat Types and Severity

The agent scans for known threat signatures using both filename pattern matching and file content analysis. Detected threats are classified by type and severity:

Threat TypeDescription
malwareGeneral malicious software (e.g. Mimikatz, EICAR test file)
trojanTrojan horse programs (e.g. Emotet, Trickbot)
ransomwareRansomware indicators (e.g. ransom notes, decryption instructions)
spywareSpyware and surveillance tools
pupPotentially unwanted programs
SeverityMeaning
lowMinimal risk; informational detection
mediumModerate risk; should be reviewed
highSignificant risk; prompt action recommended (e.g. Mimikatz, EICAR, ransomware notes)
criticalSevere risk; immediate action required (e.g. CobaltStrike beacons, Emotet)

Threat Status Lifecycle

Each threat progresses through a status lifecycle:

StatusDB StatusDescription
Activedetected, failedThreat is present and unresolved
QuarantinedquarantinedThreat file moved to an isolated quarantine directory
Removedremoved, allowedThreat file deleted or explicitly allowed

Threat Actions

You can take action on detected threats directly from the API:

Terminal window
# Quarantine a threat (moves file to quarantine directory)
POST /security/threats/{threatId}/quarantine
# Permanently remove a threat
POST /security/threats/{threatId}/remove
# Restore a quarantined threat (mark as allowed)
POST /security/threats/{threatId}/restore

Each action queues a command to the agent and updates the threat status in the database. The quarantine directory defaults to:

PlatformPath
Windows%ProgramData%\Breeze\quarantine
macOS/Library/Application Support/Breeze/quarantine
Linux/var/lib/breeze/quarantine

Security Scans

Triggering a Scan

Initiate an on-demand security scan on a specific device by posting to the scan endpoint:

Terminal window
POST /security/scan/{deviceId}
{
"scanType": "quick",
"paths": []
}
Scan TypeDescription
quickScans high-risk locations: temp directories, Downloads folder, startup/launch directories
fullComprehensive scan of all major system locations (entire drives on Windows, /Applications, /Library, /Users on macOS, / tree on Linux)
customScans only the paths specified in the paths array

The scan is queued as a SECURITY_SCAN command to the agent. The response returns a scan record with status queued and a 202 Accepted status code.

Scan Lifecycle

StatusDescription
queuedScan command sent to the agent, waiting for execution
runningAgent is actively scanning
completedScan finished; results include threatsFound count and durationSeconds
failedScan encountered an error

Viewing Scan History

Terminal window
GET /security/scans/{deviceId}?scanType=quick&status=completed&startDate=2026-02-01

Returns paginated scan history for the device, filterable by scanType, status, and date range.


Compliance and Posture

Security Posture Scoring

The security posture system computes a 0-100 score for each device based on eight weighted factors:

FactorLabelWeightDescription
patch_compliancePatch Compliance25%Are critical and important patches up to date?
encryptionDisk Encryption15%Is full-disk encryption active on all volumes?
av_healthAV Health15%Is AV installed, real-time protection on, and definitions fresh?
firewallFirewall Status10%Is the host firewall enabled?
open_portsOpen Ports Exposure10%Are unnecessary listening services exposed?
password_policyPassword Policy10%Does the local password policy meet baseline requirements?
os_currencyOS Currency10%Is the operating system version current and supported?
admin_exposureAdmin Exposure5%Are local admin accounts minimized and hardened?

The overall score is graded on a letter scale:

GradeScore Range
A90 - 100
B80 - 89
C70 - 79
D60 - 69
F0 - 59

Risk Levels

Each device is assigned a risk level based on its posture:

Risk LevelMeaning
lowDevice is fully protected (score high, no active issues)
mediumMinor gaps detected (e.g. firewall off or encryption missing)
highMultiple protection gaps or elevated threat count
criticalSevere exposure: unprotected with active threats

Organization-Level Posture

The posture worker runs hourly via BullMQ, computing scores for every device across all organizations. Organization-level snapshots aggregate:

  • devicesAudited — total devices scored
  • lowRiskDevices, mediumRiskDevices, highRiskDevices, criticalRiskDevices — risk distribution
  • Per-factor average scores
  • topIssues — most common compliance gaps

Password Policy Compliance

The API evaluates each device’s local password policy against baseline requirements:

RuleRequirement
Minimum length12+ characters
Complexity requiredEnabled
Maximum password age90 days or fewer
Account lockout threshold1-5 failed attempts
Password history5+ remembered passwords

A device is compliant only if all five checks pass.

Admin Account Audit

The admin audit identifies three categories of risk in local administrator accounts:

Issue TypeDescription
default_accountBuilt-in administrator accounts that are still enabled
weak_passwordAdmin accounts with passwords older than 180 days
stale_accountAdmin accounts with no login activity in 90+ days

Compliance Trend Tracking

Terminal window
GET /security/trends?period=30d

Returns time-series data points showing how the overall posture score has changed over the requested period (7d, 30d, or 90d). The response includes a summary with current score, previous score, absolute change, and directional trend (improving, declining, or stable).


Security Recommendations

The recommendations engine analyzes posture data across the fleet and generates prioritized, actionable guidance. Recommendations are computed dynamically based on how many devices fall below threshold scores for each security factor.

How Recommendations Are Generated

  1. The engine loads the latest posture snapshots for all devices in the organization.
  2. For each security factor, it counts devices scoring below the target threshold (e.g. AV health below 80, firewall below 90).
  3. If any devices are affected, a recommendation is generated with priority scaled to the percentage of the fleet impacted.
  4. Recommendations are sorted by priority (critical first), then by affected device count.

Recommendation Categories

CategoryTrigger ThresholdBaseline Priority
antivirusAV health score below 80High
vulnerability_managementActive threats + open ports/OS currency below 70Critical
firewallFirewall score below 90High
encryptionEncryption score below 90High
password_policyPassword policy score below 85Medium
admin_accountsAdmin exposure score below 85Medium
patch_compliancePatch compliance score below 90High

Priority Escalation

Priority is dynamically escalated based on what percentage of the fleet is affected:

Fleet % AffectedDynamic Priority
45%+Critical
25-44%High
10-24%Medium
Under 10%Low

The final priority is the higher of the baseline priority and the dynamic priority.

Recommendation Lifecycle

Each recommendation can be in one of three states:

StatusDescription
openActive recommendation requiring attention
completedMarked as resolved by an administrator
dismissedAcknowledged but not acted upon

Completing or dismissing a recommendation creates an audit log entry. To mark a recommendation:

Terminal window
# Mark as completed
POST /security/recommendations/{id}/complete
# Dismiss
POST /security/recommendations/{id}/dismiss

Security Dashboard

The dashboard endpoint aggregates all security data into a single response for rendering the security overview UI.

Terminal window
GET /security/dashboard?orgId={orgId}

Dashboard Response Fields

FieldDescription
totalDevicesTotal number of devices with posture data
protectedDevicesDevices with low risk and online status
atRiskDevicesDevices with medium or high risk
unprotectedDevicesDevices with critical risk level
offlineDevicesDevices not currently reporting
totalThreatsDetectedTotal threat count across all devices
activeThreatsThreats in active status
quarantinedThreatsThreats currently quarantined
removedThreatsThreats that have been removed
securityScoreFleet-wide average posture score (0-100)
providersAV provider distribution with device counts and coverage percentages
firewallEnabled / firewallDisabledFirewall state counts
encryptionBitLocker and FileVault enabled counts
passwordPolicyComplianceAverage password policy factor score
adminAuditSummary of default/weak/stale admin account issues with top affected devices
recommendationsTop security recommendations with priority and category
trend30-day score trend as timestamp/score data points

Score Breakdown

For a detailed per-factor breakdown, use the score breakdown endpoint:

Terminal window
GET /security/score-breakdown

Returns each posture component with its score, weight, status (good/warning/critical), and the count of affected devices below the threshold.


Security Policies

Security policies define the expected security configuration for devices within an organization.

Terminal window
# Create a policy
POST /security/policies
{
"name": "Standard Endpoint Policy",
"description": "Baseline security policy for all workstations",
"providerId": "windows_defender",
"scanSchedule": "weekly",
"realTimeProtection": true,
"autoQuarantine": true,
"severityThreshold": "medium",
"exclusions": ["C:\\Temp\\build"]
}
SettingDefaultDescription
scanScheduleweeklyScheduled scan frequency: daily, weekly, monthly, or manual
realTimeProtectiontrueWhether real-time protection should be enforced
autoQuarantinetrueAutomatically quarantine threats at or above the severity threshold
severityThresholdmediumMinimum severity to trigger auto-quarantine: low, medium, high, critical
exclusions[]File paths to exclude from scanning

API Reference

All security endpoints require authentication and are scoped to organization, partner, or system roles.

MethodEndpointDescription
GET/security/statusList security status for all devices (filterable by provider, status, risk level, OS)
GET/security/status/:deviceIdGet security status for a specific device
GET/security/threatsList all detected threats (filterable by severity, status, category, provider, date range)
GET/security/threats/:deviceIdList threats for a specific device
POST/security/threats/:id/quarantineQuarantine a detected threat
POST/security/threats/:id/removeRemove a detected threat
POST/security/threats/:id/restoreRestore a quarantined threat
POST/security/scan/:deviceIdTrigger an on-demand security scan
GET/security/scans/:deviceIdList scan history for a device
GET/security/postureList security posture for all devices (filterable by score range, risk level)
GET/security/posture/:deviceIdGet detailed posture for a specific device
GET/security/dashboardGet aggregated security dashboard data
GET/security/score-breakdownGet per-factor score breakdown
GET/security/trendsGet posture score trend over time (7d, 30d, 90d)
GET/security/firewallList firewall status per device with profile details
GET/security/encryptionList encryption status per device with volume details
GET/security/password-policyList password policy compliance per device
GET/security/admin-auditAudit local admin accounts across the fleet
GET/security/recommendationsGet prioritized security recommendations
POST/security/recommendations/:id/completeMark a recommendation as completed
POST/security/recommendations/:id/dismissDismiss a recommendation
GET/security/policiesList security policies for the organization
POST/security/policiesCreate a new security policy
PUT/security/policies/:idUpdate an existing security policy

Troubleshooting

Agent reports provider: "other"

The agent could not detect a known AV provider. Common causes:

  • Windows: The AV product is not registered with Windows Security Center. This can happen with server-only installations or EDR tools that do not register as AV. The agent will still attempt to query Defender directly as a fallback.
  • macOS: Microsoft Defender for Endpoint is not installed, or the mdatp CLI is not in PATH. Verify installation with which mdatp and check the app bundle exists at /Applications/Microsoft Defender.app.
  • Linux: The agent does not currently detect Linux AV providers. The provider will always be other on Linux endpoints.

Encryption status shows unknown

The agent failed to query the encryption subsystem. Check:

  • Windows: Ensure the device has BitLocker support and the Get-BitLockerVolume cmdlet is available. Requires admin privileges.
  • macOS: Ensure fdesetup is accessible. The agent runs fdesetup status which requires appropriate permissions.
  • Linux: Ensure lsblk is installed. LUKS detection looks for crypt type entries in the block device tree.

Firewall status not detected

  • Windows: The agent queries Get-NetFirewallProfile. If all three profiles (Domain, Private, Public) return False, the firewall is reported as disabled.
  • macOS: The agent checks socketfilterfw --getglobalstate first, then falls back to reading com.apple.alf preferences.
  • Linux: The agent checks ufw, firewall-cmd, and systemctl is-active firewalld in order. If none are available, firewall status cannot be determined.

Posture score is 0 or not available

The posture worker runs on an hourly schedule via BullMQ. If no posture data is available:

  1. Confirm the security posture worker is running (check logs for [SecurityPostureWorker] Security posture worker initialized).
  2. Verify the device has reported at least one SecurityStatus payload via heartbeat.
  3. Check that Redis is connected and the security-posture queue is processing jobs.

Threats not appearing after scan

  • Verify the scan status is completed by checking GET /security/scans/:deviceId.
  • The agent’s built-in scanner uses a limited set of known signatures (EICAR, Mimikatz, CobaltStrike, Emotet, ransomware notes). It does not perform heuristic or behavioral analysis.
  • Files larger than 25 MB are skipped during scanning. Content pattern matching reads only the first 1 MB of each file.
  • Quarantine directories and system paths (e.g. /proc, /sys, WinSxS, $Recycle.Bin) are excluded by default.