Detection rules › Kusto

Lookout - High Severity Mobile Threats Detected (v2)

Status
available
Severity
high
Time window
15m
Source
github.com/Azure/Azure-Sentinel

'Detects high severity mobile threats from Lookout Mobile Risk API v2 with enhanced threat intelligence and device context. This rule leverages the comprehensive v2 field set to provide detailed threat classification, risk assessment, and device compliance status for improved security monitoring.'

MITRE ATT&CK coverage

Rule body kusto

id: 8b4a5c7e-2f91-4d8a-9e3b-1c6f8a2d4e9f
name: Lookout - High Severity Mobile Threats Detected (v2)
description: |
  'Detects high severity mobile threats from Lookout Mobile Risk API v2 with enhanced threat intelligence and device context. This rule leverages the comprehensive v2 field set to provide detailed threat classification, risk assessment, and device compliance status for improved security monitoring.'
severity: High
status: Available
requiredDataConnectors:
  - connectorId: LookoutAPI
    dataTypes:
      - LookoutEvents
queryFrequency: 5m
queryPeriod: 15m
triggerOperator: gt
triggerThreshold: 0
tactics:
  - Discovery
  - DefenseEvasion
  - Persistence
  - PrivilegeEscalation
relevantTechniques:
  - T1424
  - T1418
  - T1629
  - T1630
query: |
  LookoutEvents
  | where EventType == "THREAT"
  | where ThreatSeverity in ("CRITICAL", "HIGH")
  | where ThreatStatus in ("OPEN", "ACTIVE")
  | where ThreatAction == "DETECTED"
  | extend
      ThreatRiskScore = case(
          ThreatSeverity == "CRITICAL", 10,
          ThreatSeverity == "HIGH", 8,
          ThreatSeverity == "MEDIUM", 5,
          ThreatSeverity == "LOW", 2,
          1
      ),
      DeviceRiskLevel = case(
          DeviceSecurityStatus == "THREATS_HIGH", "High",
          DeviceSecurityStatus == "THREATS_MEDIUM", "Medium",
          DeviceSecurityStatus == "THREATS_LOW", "Low",
          "Unknown"
      ),
      ThreatCategory = case(
          ThreatClassifications has "MALWARE", "Malware",
          ThreatClassifications has "PHISHING", "Phishing", 
          ThreatClassifications has "SPYWARE", "Spyware",
          ThreatClassifications has "TROJAN", "Trojan",
          ThreatClassifications has "ADWARE", "Adware",
          "Other"
      )
  | extend ComplianceImpact = case(
      DeviceComplianceStatus == "Non-Compliant" and ThreatRiskScore >= 8, "Critical",
      DeviceComplianceStatus == "Non-Compliant" and ThreatRiskScore >= 5, "High", 
      DeviceComplianceStatus == "Partial" and ThreatRiskScore >= 8, "High",
      DeviceComplianceStatus == "Partial" and ThreatRiskScore >= 5, "Medium",
      "Low"
  )
  | project
      TimeGenerated,
      EventId,
      ThreatId,
      ThreatType,
      ThreatSeverity,
      ThreatRiskScore,
      ThreatCategory,
      ThreatClassifications,
      ThreatStatus,
      ThreatDescription,
      ThreatApplicationName,
      ThreatPackageName,
      ThreatPackageSha,
      DeviceGuid,
      DevicePlatform,
      DeviceOSVersion,
      DeviceManufacturer,
      DeviceModel,
      DeviceEmailAddress,
      DeviceSecurityStatus,
      DeviceRiskLevel,
      DeviceComplianceStatus,
      ComplianceImpact,
      ClientLookoutSDKVersion,
      MDMConnectorId,
      MDMExternalId,
      TargetEmailAddress,
      TargetPlatform,
      ActorType,
      ActorGuid
entityMappings:
  - entityType: Account
    fieldMappings:
      - identifier: FullName
        columnName: DeviceEmailAddress
      - identifier: Name
        columnName: TargetEmailAddress
  - entityType: Host
    fieldMappings:
      - identifier: HostName
        columnName: DeviceGuid
      - identifier: OSFamily
        columnName: DevicePlatform
      - identifier: OSVersion
        columnName: DeviceOSVersion
  - entityType: FileHash
    fieldMappings:
      - identifier: Algorithm
        columnName: ThreatApplicationName
      - identifier: Value
        columnName: ThreatPackageSha
customDetails:
  ThreatType: ThreatType
  ThreatSeverity: ThreatSeverity
  ThreatRiskScore: ThreatRiskScore
  ThreatCategory: ThreatCategory
  ThreatClasses: ThreatClassifications
  ThreatStatus: ThreatStatus
  DevicePlatform: DevicePlatform
  DeviceSecStatus: DeviceSecurityStatus
  DeviceRiskLevel: DeviceRiskLevel
  ComplianceImpact: ComplianceImpact
  MDMConnectorId: MDMConnectorId
alertDetailsOverride:
  alertDisplayNameFormat: "High Severity Mobile Threat: {{ThreatType}} on {{DevicePlatform}} Device"
  alertDescriptionFormat: "{{ThreatSeverity}} {{ThreatCategory}} threat on {{DevicePlatform}}"
  alertTacticsColumnName: ThreatCategory
  alertSeverityColumnName: ThreatSeverity
incidentConfiguration:
  createIncident: true
  groupingConfiguration:
    enabled: true
    reopenClosedIncident: false
    lookbackDuration: P1D
    matchingMethod: Selected
    groupByEntities:
      - Account
      - Host
    groupByAlertDetails:
      - ThreatType
      - DeviceGuid
    groupByCustomDetails:
      - ThreatCategory
      - DevicePlatform
eventGroupingSettings:
  aggregationKind: AlertPerResult
suppressionEnabled: false
suppressionDuration: PT1H
version: 2.0.5
kind: Scheduled

Stages and Predicates

Stage 1: source

LookoutEvents

Stage 2: where

| where EventType == "THREAT"

Stage 3: where

| where ThreatSeverity in ("CRITICAL", "HIGH")

Stage 4: where

| where ThreatStatus in ("OPEN", "ACTIVE")

Stage 5: where

| where ThreatAction == "DETECTED"

Stage 6: extend

| extend
    ThreatRiskScore = case(
        ThreatSeverity == "CRITICAL", 10,
        ThreatSeverity == "HIGH", 8,
        ThreatSeverity == "MEDIUM", 5,
        ThreatSeverity == "LOW", 2,
        1
    ),
    DeviceRiskLevel = case(
        DeviceSecurityStatus == "THREATS_HIGH", "High",
        DeviceSecurityStatus == "THREATS_MEDIUM", "Medium",
        DeviceSecurityStatus == "THREATS_LOW", "Low",
        "Unknown"
    ),
    ThreatCategory = case(
        ThreatClassifications has "MALWARE", "Malware",
        ThreatClassifications has "PHISHING", "Phishing", 
        ThreatClassifications has "SPYWARE", "Spyware",
        ThreatClassifications has "TROJAN", "Trojan",
        ThreatClassifications has "ADWARE", "Adware",
        "Other"
    )
DeviceRiskLevel =
ifDeviceSecurityStatus == "THREATS_HIGH""High"
elifDeviceSecurityStatus == "THREATS_MEDIUM""Medium"
elifDeviceSecurityStatus == "THREATS_LOW""Low"
else"Unknown"
ThreatCategory =
ifThreatClassifications has "MALWARE""Malware"
elifThreatClassifications has "PHISHING""Phishing"
elifThreatClassifications has "SPYWARE""Spyware"
elifThreatClassifications has "TROJAN""Trojan"
elifThreatClassifications has "ADWARE""Adware"
else"Other"
ThreatRiskScore =
ifThreatSeverity == "CRITICAL"10
elifThreatSeverity == "HIGH"8
elifThreatSeverity == "MEDIUM"5
elifThreatSeverity == "LOW"2
else1

Stage 7: extend

| extend ComplianceImpact = case(
    DeviceComplianceStatus == "Non-Compliant" and ThreatRiskScore >= 8, "Critical",
    DeviceComplianceStatus == "Non-Compliant" and ThreatRiskScore >= 5, "High", 
    DeviceComplianceStatus == "Partial" and ThreatRiskScore >= 8, "High",
    DeviceComplianceStatus == "Partial" and ThreatRiskScore >= 5, "Medium",
    "Low"
)
ComplianceImpact =
ifDeviceComplianceStatus == "Non-Compliant" and ThreatRiskScore >= 8"Critical"
elifDeviceComplianceStatus == "Non-Compliant" and ThreatRiskScore >= 5"High"
elifDeviceComplianceStatus == "Partial" and ThreatRiskScore >= 8"High"
elifDeviceComplianceStatus == "Partial" and ThreatRiskScore >= 5"Medium"
else"Low"

Stage 8: project

| project
    TimeGenerated,
    EventId,
    ThreatId,
    ThreatType,
    ThreatSeverity,
    ThreatRiskScore,
    ThreatCategory,
    ThreatClassifications,
    ThreatStatus,
    ThreatDescription,
    ThreatApplicationName,
    ThreatPackageName,
    ThreatPackageSha,
    DeviceGuid,
    DevicePlatform,
    DeviceOSVersion,
    DeviceManufacturer,
    DeviceModel,
    DeviceEmailAddress,
    DeviceSecurityStatus,
    DeviceRiskLevel,
    DeviceComplianceStatus,
    ComplianceImpact,
    ClientLookoutSDKVersion,
    MDMConnectorId,
    MDMExternalId,
    TargetEmailAddress,
    TargetPlatform,
    ActorType,
    ActorGuid

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
EventTypeeq
  • THREAT transforms: cased
ThreatActioneq
  • DETECTED transforms: cased
ThreatSeverityin
  • CRITICAL transforms: cased
  • HIGH transforms: cased
ThreatStatusin
  • ACTIVE transforms: cased
  • OPEN transforms: cased

Output fields

Fields the rule emits when it matches. Chronicle authors list these in the outcome block; they appear on the detection and $risk_score drives alerting. Sentinel / Defender XDR rules build them up through project / summarize / extend stages. Sentinel maps these into alert fields via entityMappings and customDetails; Defender XDR custom detections surface them as alert fields directly.

FieldSource
ActorGuidproject
ActorTypeproject
ClientLookoutSDKVersionproject
ComplianceImpactproject
DeviceComplianceStatusproject
DeviceEmailAddressproject
DeviceGuidproject
DeviceManufacturerproject
DeviceModelproject
DeviceOSVersionproject
DevicePlatformproject
DeviceRiskLevelproject
DeviceSecurityStatusproject
EventIdproject
MDMConnectorIdproject
MDMExternalIdproject
TargetEmailAddressproject
TargetPlatformproject
ThreatApplicationNameproject
ThreatCategoryproject
ThreatClassificationsproject
ThreatDescriptionproject
ThreatIdproject
ThreatPackageNameproject
ThreatPackageShaproject
ThreatRiskScoreproject
ThreatSeverityproject
ThreatStatusproject
ThreatTypeproject
TimeGeneratedproject