Back
Id83b88ab5-21ca-5dd2-df91-6db4354f9360
RulenameUniFi Site Manager: Firmware Update Available
DescriptionIdentifies UniFi devices with firmware updates available. Keeping firmware patched is critical as updates often include security vulnerability fixes.
SeverityLow
TacticsInitialAccess
TechniquesT1190
Required data connectorsUniFiSiteManagerConnectorDefinition
KindScheduled
Query frequency1d
Query period1d
Trigger threshold0
Trigger operatorgt
Source Urihttps://github.com/Azure/Azure-Sentinel/blob/master/Solutions/UniFi%20Site%20Manager%20%28CCF%29/Analytic%20Rules/UniFiCloudFirmwareUpdateAvailable.yaml
Version1.0.2
Arm template83b88ab5-21ca-5dd2-df91-6db4354f9360.json
Deploy To Azure
Unifi_SiteManager_Devices_CL
| where TimeGenerated > ago(1d)
| summarize arg_max(TimeGenerated, *) by Id
| where isnotempty(UpdateAvailable)
| extend DeviceDetail = strcat(coalesce(Name, "Unnamed"), " (", Model, ") ", Version, " -> ", UpdateAvailable, " @", Ip)
| summarize
    DevicesNeedingUpdate = count(),
    DeviceList = make_list(DeviceDetail),
    Models = make_set(Model),
    ProductLines = make_set(ProductLine)
| where DevicesNeedingUpdate >= 1
| extend
    TimeGenerated = now(),
    AffectedModels = strcat_array(Models, ", "),
    AffectedProductLines = strcat_array(ProductLines, ", "),
    DeviceListString = strcat_array(DeviceList, "; ")
| extend Activity = strcat(DevicesNeedingUpdate, ' device(s) have firmware updates available: ', AffectedModels)
| project
    TimeGenerated,
    DevicesNeedingUpdate,
    AffectedModels,
    AffectedProductLines,
    Activity,
    DeviceListString
subTechniques: []
incidentConfiguration:
  groupingConfiguration:
    lookbackDuration: P7D
    reopenClosedIncident: false
    matchingMethod: AnyAlert
    enabled: true
  createIncident: true
name: 'UniFi Site Manager: Firmware Update Available'
triggerOperator: gt
query: |
  Unifi_SiteManager_Devices_CL
  | where TimeGenerated > ago(1d)
  | summarize arg_max(TimeGenerated, *) by Id
  | where isnotempty(UpdateAvailable)
  | extend DeviceDetail = strcat(coalesce(Name, "Unnamed"), " (", Model, ") ", Version, " -> ", UpdateAvailable, " @", Ip)
  | summarize
      DevicesNeedingUpdate = count(),
      DeviceList = make_list(DeviceDetail),
      Models = make_set(Model),
      ProductLines = make_set(ProductLine)
  | where DevicesNeedingUpdate >= 1
  | extend
      TimeGenerated = now(),
      AffectedModels = strcat_array(Models, ", "),
      AffectedProductLines = strcat_array(ProductLines, ", "),
      DeviceListString = strcat_array(DeviceList, "; ")
  | extend Activity = strcat(DevicesNeedingUpdate, ' device(s) have firmware updates available: ', AffectedModels)
  | project
      TimeGenerated,
      DevicesNeedingUpdate,
      AffectedModels,
      AffectedProductLines,
      Activity,
      DeviceListString
queryFrequency: 1d
description: |
  Identifies UniFi devices with firmware updates available. Keeping firmware patched is critical as updates often include security vulnerability fixes.
id: 83b88ab5-21ca-5dd2-df91-6db4354f9360
triggerThreshold: 0
queryPeriod: 1d
version: 1.0.2
kind: Scheduled
status: Available
severity: Low
requiredDataConnectors:
- connectorId: UniFiSiteManagerConnectorDefinition
  dataTypes:
  - Unifi_SiteManager_Devices_CL
OriginalUri: https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/UniFi%20Site%20Manager%20%28CCF%29/Analytic%20Rules/UniFiCloudFirmwareUpdateAvailable.yaml
relevantTechniques:
- T1190
tactics:
- InitialAccess
entityMappings:
- fieldMappings:
  - identifier: Name
    columnName: AffectedProductLines
  entityType: CloudApplication
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "workspace": {
      "type": "String"
    }
  },
  "resources": [
    {
      "apiVersion": "2024-01-01-preview",
      "id": "[concat(resourceId('Microsoft.OperationalInsights/workspaces/providers', parameters('workspace'), 'Microsoft.SecurityInsights'),'/alertRules/83b88ab5-21ca-5dd2-df91-6db4354f9360')]",
      "kind": "Scheduled",
      "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/83b88ab5-21ca-5dd2-df91-6db4354f9360')]",
      "properties": {
        "alertRuleTemplateName": "83b88ab5-21ca-5dd2-df91-6db4354f9360",
        "customDetails": null,
        "description": "Identifies UniFi devices with firmware updates available. Keeping firmware patched is critical as updates often include security vulnerability fixes.\n",
        "displayName": "UniFi Site Manager: Firmware Update Available",
        "enabled": true,
        "entityMappings": [
          {
            "entityType": "CloudApplication",
            "fieldMappings": [
              {
                "columnName": "AffectedProductLines",
                "identifier": "Name"
              }
            ]
          }
        ],
        "incidentConfiguration": {
          "createIncident": true,
          "groupingConfiguration": {
            "enabled": true,
            "lookbackDuration": "P7D",
            "matchingMethod": "AnyAlert",
            "reopenClosedIncident": false
          }
        },
        "OriginalUri": "https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/UniFi%20Site%20Manager%20%28CCF%29/Analytic%20Rules/UniFiCloudFirmwareUpdateAvailable.yaml",
        "query": "Unifi_SiteManager_Devices_CL\n| where TimeGenerated > ago(1d)\n| summarize arg_max(TimeGenerated, *) by Id\n| where isnotempty(UpdateAvailable)\n| extend DeviceDetail = strcat(coalesce(Name, \"Unnamed\"), \" (\", Model, \") \", Version, \" -> \", UpdateAvailable, \" @\", Ip)\n| summarize\n    DevicesNeedingUpdate = count(),\n    DeviceList = make_list(DeviceDetail),\n    Models = make_set(Model),\n    ProductLines = make_set(ProductLine)\n| where DevicesNeedingUpdate >= 1\n| extend\n    TimeGenerated = now(),\n    AffectedModels = strcat_array(Models, \", \"),\n    AffectedProductLines = strcat_array(ProductLines, \", \"),\n    DeviceListString = strcat_array(DeviceList, \"; \")\n| extend Activity = strcat(DevicesNeedingUpdate, ' device(s) have firmware updates available: ', AffectedModels)\n| project\n    TimeGenerated,\n    DevicesNeedingUpdate,\n    AffectedModels,\n    AffectedProductLines,\n    Activity,\n    DeviceListString\n",
        "queryFrequency": "P1D",
        "queryPeriod": "P1D",
        "severity": "Low",
        "status": "Available",
        "subTechniques": [],
        "suppressionDuration": "PT1H",
        "suppressionEnabled": false,
        "tactics": [
          "InitialAccess"
        ],
        "techniques": [
          "T1190"
        ],
        "templateVersion": "1.0.2",
        "triggerOperator": "GreaterThan",
        "triggerThreshold": 0
      },
      "type": "Microsoft.OperationalInsights/workspaces/providers/alertRules"
    }
  ]
}