Analytic rule catalog
Lookout - Device Compliance and Security Status Changes v2
Back
| Id | 9c5b6d8f-3a02-4e9b-af4c-2d7e9b1f5a8c |
| Rulename | Lookout - Device Compliance and Security Status Changes (v2) |
| Description | Monitors device compliance status changes and security posture degradation using Lookout Mobile Risk API v2 enhanced device fields. Detects devices becoming non-compliant, security status changes, and potential device compromise indicators with detailed device context and MDM integration data. |
| Severity | Medium |
| Tactics | Discovery DefenseEvasion Persistence |
| Techniques | T1418 T1629 T1655 |
| Required data connectors | LookoutAPI |
| Kind | Scheduled |
| Query frequency | 10m |
| Query period | 30m |
| Trigger threshold | 0 |
| Trigger operator | gt |
| Source Uri | https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Lookout/Analytic%20Rules/LookoutDeviceComplianceV2.yaml |
| Version | 2.0.3 |
| Arm template | 9c5b6d8f-3a02-4e9b-af4c-2d7e9b1f5a8c.json |
LookoutEvents
| where EventType == "DEVICE"
| where DeviceComplianceStatus in ("Non-Compliant", "Partial")
or DeviceSecurityStatus in ("THREATS_HIGH", "THREATS_MEDIUM")
or ChangeType == "UPDATE"
| extend
DeviceRiskScore = case(
DeviceSecurityStatus == "THREATS_HIGH", 9,
DeviceSecurityStatus == "THREATS_MEDIUM", 6,
DeviceSecurityStatus == "THREATS_LOW", 3,
DeviceComplianceStatus == "Non-Compliant", 7,
DeviceComplianceStatus == "Partial", 4,
1
),
ComplianceReason = case(
isempty(DeviceCheckinTime), "No Recent Check-in",
DeviceActivationStatus != "ACTIVE", "Inactive Device",
isempty(ClientLookoutSDKVersion), "Missing Security Client",
"Configuration Issue"
),
PlatformRisk = case(
DevicePlatform == "ANDROID" and DeviceOSVersion matches regex @"^[1-9]\..*", "Outdated Android",
DevicePlatform == "IOS" and DeviceOSVersion matches regex @"^1[0-4]\..*", "Outdated iOS",
DevicePlatform == "UNKNOWN", "Unknown Platform",
"Current"
)
| extend MDMIntegrationStatus = case(
isnotempty(MDMConnectorId) and isnotempty(MDMExternalId), "Fully Integrated",
isnotempty(MDMConnectorId), "Partial Integration",
"Not Integrated"
)
| extend SecurityPosture = case(
DeviceRiskScore >= 8, "Critical",
DeviceRiskScore >= 6, "High",
DeviceRiskScore >= 4, "Medium",
"Low"
)
| project
TimeGenerated,
EventId,
DeviceGuid,
DevicePlatform,
DeviceOSVersion,
DeviceManufacturer,
DeviceModel,
DeviceEmailAddress,
DeviceActivationStatus,
DeviceSecurityStatus,
DeviceComplianceStatus,
DeviceRiskScore,
SecurityPosture,
ComplianceReason,
PlatformRisk,
DeviceCheckinTime,
DeviceActivatedAt,
DeviceDeactivatedAt,
DeviceGroupGuid,
ClientLookoutSDKVersion,
ClientOTAVersion,
ClientPackageName,
ClientPackageVersion,
MDMConnectorId,
MDMConnectorUuid,
MDMExternalId,
MDMIntegrationStatus,
ActorType,
ActorGuid,
ChangeType
incidentConfiguration:
createIncident: true
groupingConfiguration:
groupByEntities:
- Account
- Host
enabled: true
matchingMethod: Selected
groupByCustomDetails:
- SecurityPosture
- DevicePlatform
reopenClosedIncident: false
lookbackDuration: P1D
groupByAlertDetails:
- DeviceGuid
entityMappings:
- entityType: Account
fieldMappings:
- columnName: DeviceEmailAddress
identifier: FullName
- entityType: Host
fieldMappings:
- columnName: DeviceGuid
identifier: HostName
- columnName: DevicePlatform
identifier: OSFamily
- columnName: DeviceOSVersion
identifier: OSVersion
query: |
LookoutEvents
| where EventType == "DEVICE"
| where DeviceComplianceStatus in ("Non-Compliant", "Partial")
or DeviceSecurityStatus in ("THREATS_HIGH", "THREATS_MEDIUM")
or ChangeType == "UPDATE"
| extend
DeviceRiskScore = case(
DeviceSecurityStatus == "THREATS_HIGH", 9,
DeviceSecurityStatus == "THREATS_MEDIUM", 6,
DeviceSecurityStatus == "THREATS_LOW", 3,
DeviceComplianceStatus == "Non-Compliant", 7,
DeviceComplianceStatus == "Partial", 4,
1
),
ComplianceReason = case(
isempty(DeviceCheckinTime), "No Recent Check-in",
DeviceActivationStatus != "ACTIVE", "Inactive Device",
isempty(ClientLookoutSDKVersion), "Missing Security Client",
"Configuration Issue"
),
PlatformRisk = case(
DevicePlatform == "ANDROID" and DeviceOSVersion matches regex @"^[1-9]\..*", "Outdated Android",
DevicePlatform == "IOS" and DeviceOSVersion matches regex @"^1[0-4]\..*", "Outdated iOS",
DevicePlatform == "UNKNOWN", "Unknown Platform",
"Current"
)
| extend MDMIntegrationStatus = case(
isnotempty(MDMConnectorId) and isnotempty(MDMExternalId), "Fully Integrated",
isnotempty(MDMConnectorId), "Partial Integration",
"Not Integrated"
)
| extend SecurityPosture = case(
DeviceRiskScore >= 8, "Critical",
DeviceRiskScore >= 6, "High",
DeviceRiskScore >= 4, "Medium",
"Low"
)
| project
TimeGenerated,
EventId,
DeviceGuid,
DevicePlatform,
DeviceOSVersion,
DeviceManufacturer,
DeviceModel,
DeviceEmailAddress,
DeviceActivationStatus,
DeviceSecurityStatus,
DeviceComplianceStatus,
DeviceRiskScore,
SecurityPosture,
ComplianceReason,
PlatformRisk,
DeviceCheckinTime,
DeviceActivatedAt,
DeviceDeactivatedAt,
DeviceGroupGuid,
ClientLookoutSDKVersion,
ClientOTAVersion,
ClientPackageName,
ClientPackageVersion,
MDMConnectorId,
MDMConnectorUuid,
MDMExternalId,
MDMIntegrationStatus,
ActorType,
ActorGuid,
ChangeType
suppressionEnabled: false
eventGroupingSettings:
aggregationKind: AlertPerResult
id: 9c5b6d8f-3a02-4e9b-af4c-2d7e9b1f5a8c
queryFrequency: 10m
alertDetailsOverride:
alertDisplayNameFormat: 'Device Compliance Issue: {{SecurityPosture}} Risk on {{DevicePlatform}} Device'
alertTacticsColumnName: SecurityPosture
alertDescriptionFormat: '{{SecurityPosture}} posture with {{DeviceComplianceStatus}} compliance'
alertSeverityColumnName: SecurityPosture
status: Available
OriginalUri: https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Lookout/Analytic%20Rules/LookoutDeviceComplianceV2.yaml
suppressionDuration: PT30M
version: 2.0.3
severity: Medium
relevantTechniques:
- T1418
- T1629
- T1655
name: Lookout - Device Compliance and Security Status Changes (v2)
kind: Scheduled
tactics:
- Discovery
- DefenseEvasion
- Persistence
requiredDataConnectors:
- dataTypes:
- LookoutEvents
connectorId: LookoutAPI
description: |
'Monitors device compliance status changes and security posture degradation using Lookout Mobile Risk API v2 enhanced device fields. Detects devices becoming non-compliant, security status changes, and potential device compromise indicators with detailed device context and MDM integration data.'
customDetails:
ClientSDKVersion: ClientLookoutSDKVersion
DevCompliance: DeviceComplianceStatus
DeviceManufacturer: DeviceManufacturer
PlatformRisk: PlatformRisk
ComplianceReason: ComplianceReason
DeviceRiskScore: DeviceRiskScore
DevicePlatform: DevicePlatform
SecurityPosture: SecurityPosture
DeviceModel: DeviceModel
MDMIntegration: MDMIntegrationStatus
DeviceSecStatus: DeviceSecurityStatus
triggerOperator: gt
triggerThreshold: 0
queryPeriod: 30m
{
"$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/9c5b6d8f-3a02-4e9b-af4c-2d7e9b1f5a8c')]",
"kind": "Scheduled",
"name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/9c5b6d8f-3a02-4e9b-af4c-2d7e9b1f5a8c')]",
"properties": {
"alertDetailsOverride": {
"alertDescriptionFormat": "{{SecurityPosture}} posture with {{DeviceComplianceStatus}} compliance",
"alertDisplayNameFormat": "Device Compliance Issue: {{SecurityPosture}} Risk on {{DevicePlatform}} Device",
"alertSeverityColumnName": "SecurityPosture",
"alertTacticsColumnName": "SecurityPosture"
},
"alertRuleTemplateName": "9c5b6d8f-3a02-4e9b-af4c-2d7e9b1f5a8c",
"customDetails": {
"ClientSDKVersion": "ClientLookoutSDKVersion",
"ComplianceReason": "ComplianceReason",
"DevCompliance": "DeviceComplianceStatus",
"DeviceManufacturer": "DeviceManufacturer",
"DeviceModel": "DeviceModel",
"DevicePlatform": "DevicePlatform",
"DeviceRiskScore": "DeviceRiskScore",
"DeviceSecStatus": "DeviceSecurityStatus",
"MDMIntegration": "MDMIntegrationStatus",
"PlatformRisk": "PlatformRisk",
"SecurityPosture": "SecurityPosture"
},
"description": "'Monitors device compliance status changes and security posture degradation using Lookout Mobile Risk API v2 enhanced device fields. Detects devices becoming non-compliant, security status changes, and potential device compromise indicators with detailed device context and MDM integration data.'\n",
"displayName": "Lookout - Device Compliance and Security Status Changes (v2)",
"enabled": true,
"entityMappings": [
{
"entityType": "Account",
"fieldMappings": [
{
"columnName": "DeviceEmailAddress",
"identifier": "FullName"
}
]
},
{
"entityType": "Host",
"fieldMappings": [
{
"columnName": "DeviceGuid",
"identifier": "HostName"
},
{
"columnName": "DevicePlatform",
"identifier": "OSFamily"
},
{
"columnName": "DeviceOSVersion",
"identifier": "OSVersion"
}
]
}
],
"eventGroupingSettings": {
"aggregationKind": "AlertPerResult"
},
"incidentConfiguration": {
"createIncident": true,
"groupingConfiguration": {
"enabled": true,
"groupByAlertDetails": [
"DeviceGuid"
],
"groupByCustomDetails": [
"SecurityPosture",
"DevicePlatform"
],
"groupByEntities": [
"Account",
"Host"
],
"lookbackDuration": "P1D",
"matchingMethod": "Selected",
"reopenClosedIncident": false
}
},
"OriginalUri": "https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Lookout/Analytic%20Rules/LookoutDeviceComplianceV2.yaml",
"query": "LookoutEvents\n| where EventType == \"DEVICE\"\n| where DeviceComplianceStatus in (\"Non-Compliant\", \"Partial\") \n or DeviceSecurityStatus in (\"THREATS_HIGH\", \"THREATS_MEDIUM\")\n or ChangeType == \"UPDATE\"\n| extend \n DeviceRiskScore = case(\n DeviceSecurityStatus == \"THREATS_HIGH\", 9,\n DeviceSecurityStatus == \"THREATS_MEDIUM\", 6,\n DeviceSecurityStatus == \"THREATS_LOW\", 3,\n DeviceComplianceStatus == \"Non-Compliant\", 7,\n DeviceComplianceStatus == \"Partial\", 4,\n 1\n ),\n ComplianceReason = case(\n isempty(DeviceCheckinTime), \"No Recent Check-in\",\n DeviceActivationStatus != \"ACTIVE\", \"Inactive Device\",\n isempty(ClientLookoutSDKVersion), \"Missing Security Client\",\n \"Configuration Issue\"\n ),\n PlatformRisk = case(\n DevicePlatform == \"ANDROID\" and DeviceOSVersion matches regex @\"^[1-9]\\..*\", \"Outdated Android\",\n DevicePlatform == \"IOS\" and DeviceOSVersion matches regex @\"^1[0-4]\\..*\", \"Outdated iOS\",\n DevicePlatform == \"UNKNOWN\", \"Unknown Platform\",\n \"Current\"\n )\n| extend MDMIntegrationStatus = case(\n isnotempty(MDMConnectorId) and isnotempty(MDMExternalId), \"Fully Integrated\",\n isnotempty(MDMConnectorId), \"Partial Integration\", \n \"Not Integrated\"\n)\n| extend SecurityPosture = case(\n DeviceRiskScore >= 8, \"Critical\",\n DeviceRiskScore >= 6, \"High\",\n DeviceRiskScore >= 4, \"Medium\",\n \"Low\"\n)\n| project\n TimeGenerated,\n EventId,\n DeviceGuid,\n DevicePlatform,\n DeviceOSVersion,\n DeviceManufacturer,\n DeviceModel,\n DeviceEmailAddress,\n DeviceActivationStatus,\n DeviceSecurityStatus,\n DeviceComplianceStatus,\n DeviceRiskScore,\n SecurityPosture,\n ComplianceReason,\n PlatformRisk,\n DeviceCheckinTime,\n DeviceActivatedAt,\n DeviceDeactivatedAt,\n DeviceGroupGuid,\n ClientLookoutSDKVersion,\n ClientOTAVersion,\n ClientPackageName,\n ClientPackageVersion,\n MDMConnectorId,\n MDMConnectorUuid,\n MDMExternalId,\n MDMIntegrationStatus,\n ActorType,\n ActorGuid,\n ChangeType\n",
"queryFrequency": "PT10M",
"queryPeriod": "PT30M",
"severity": "Medium",
"status": "Available",
"subTechniques": [],
"suppressionDuration": "PT30M",
"suppressionEnabled": false,
"tactics": [
"DefenseEvasion",
"Discovery",
"Persistence"
],
"techniques": null,
"templateVersion": "2.0.3",
"triggerOperator": "GreaterThan",
"triggerThreshold": 0
},
"type": "Microsoft.OperationalInsights/workspaces/providers/alertRules"
}
]
}