↳ GitHub sourceAnalytics ruleMedium

Lumen TI IPAddress in IdentityLogonEvents

Description

This query maps Lumen IP indicators of compromise (IOCs) from threat intelligence (TI), by searching for matches in Azure AD sign-in logs.
Rule type
Scheduled
Version
1.0.2
Query frequency
4h
Query period
14d
Trigger
gt 0

Declared MITRE coverage

Declared sources

Metadata from the source file. No dependencies inferred from KQL.

Connectors

Data types

KQL query

Original query, unchanged.

let dt_lookBack = 1d;  // Data lookback for AAD sign-in logs
let ioc_lookBack = 14d; // TI lookback
let IP_Indicators =
    ThreatIntelIndicators
    | where TimeGenerated >= ago(ioc_lookBack)
    | where IsActive == true and ValidUntil > now()
    | summarize LatestIndicatorTime = arg_max(TimeGenerated, *) by Id
    | where SourceSystem == 'Lumen'
    | where ObservableKey == 'ipv4-addr:value'
    | extend TI_ipEntity = ObservableValue
    | where ipv4_is_private(TI_ipEntity) == false and TI_ipEntity !startswith 'fe80' and TI_ipEntity !startswith '::' and TI_ipEntity !startswith '127.';
let SignInUnion =
    union isfuzzy=true
    (
        AADNonInteractiveUserSignInLogs
        | where TimeGenerated >= ago(dt_lookBack)
        | extend
            ILE_ipEntity = IPAddress,
            AccountDisplayName = coalesce(UserDisplayName, UserPrincipalName),
            Application = coalesce(column_ifexists('AppDisplayName',''), column_ifexists('ResourceDisplayName','')),
            LogonType = column_ifexists('ClientAppUsed',''),
            IdentityLogonEvents_TimeGenerated = TimeGenerated
        | project IdentityLogonEvents_TimeGenerated, ILE_ipEntity, AccountDisplayName, Application, LogonType, IPAddress, Type
    ),
    (
        AADServicePrincipalSignInLogs
        | where TimeGenerated >= ago(dt_lookBack)
        | extend
            ILE_ipEntity = IPAddress,
            AccountDisplayName = coalesce(ServicePrincipalName, tostring(ServicePrincipalId)),
            Application = coalesce(column_ifexists('AppDisplayName',''), column_ifexists('ResourceDisplayName','')),
            LogonType = "ServicePrincipal",
            IdentityLogonEvents_TimeGenerated = TimeGenerated
        | project IdentityLogonEvents_TimeGenerated, ILE_ipEntity, AccountDisplayName, Application, LogonType, IPAddress, Type
    ),
    (
        AADManagedIdentitySignInLogs
        | where TimeGenerated >= ago(dt_lookBack)
        | extend
            ILE_ipEntity = IPAddress,
            AccountDisplayName = coalesce(ServicePrincipalName, tostring(ServicePrincipalId)),
            Application = ResourceDisplayName,
            LogonType = "ManagedIdentity",
            IdentityLogonEvents_TimeGenerated = TimeGenerated
        | project IdentityLogonEvents_TimeGenerated, ILE_ipEntity, AccountDisplayName, Application, LogonType, IPAddress, Type
    ),
    (
        ADFSSignInLogs
        | where TimeGenerated >= ago(dt_lookBack)
        | extend
            ILE_ipEntity = IPAddress,
            AccountDisplayName = coalesce(UserDisplayName, UserPrincipalName),
            Application = coalesce(AppDisplayName, ResourceDisplayName),
            LogonType = coalesce(Requirement, AuthenticationRequirement),
            IdentityLogonEvents_TimeGenerated = TimeGenerated
        | project IdentityLogonEvents_TimeGenerated, ILE_ipEntity, AccountDisplayName, Application, LogonType, IPAddress, Type
    );
IP_Indicators
| join kind=innerunique (SignInUnion) on $left.TI_ipEntity == $right.ILE_ipEntity
| where IdentityLogonEvents_TimeGenerated < ValidUntil
| summarize arg_max(IdentityLogonEvents_TimeGenerated, *), StartTime = min(IdentityLogonEvents_TimeGenerated), EndTime = max(IdentityLogonEvents_TimeGenerated) by Id, ILE_ipEntity
| project timestamp = EndTime, StartTime, EndTime, AccountDisplayName, IPAddress, Application, LogonType, Id, Tags, ValidUntil, Confidence, TI_ipEntity, ILE_ipEntity, Type

Declared entities

IP

Related content

Links established from declared identifiers and solution manifests.

Source provenance

GitHub

Displayed values come from files in Azure/Azure-Sentinel. They describe the published template, not your workspace configuration.

Source identifier
a7cd18cd-1503-47ec-8dca-65d750540637
Additional source files 2Solutions/Lumen Defender Threat Feed/Analytic Rules/Lumen_IPEntity_IdentityLogonEvents.yamlsource ↗Solutions/Lumen Defender Threat Feed/Data/Solution_LumenDefenderThreatFeed.jsonsolution-membership ↗
GSTEP / CATALOG TRACKING

Added to catalog : 16 Sept 2026 · 05:49 UTC
Last change observed : 16 Sept 2026 · 05:49 UTC

GSTEP sync dates, separate from the source content’s publication dates.