7.1 KiB
7.1 KiB
Azure Sentinel Analytics Usecases
No | Use-case | Artefacts |
---|---|---|
1 | Receive an alert when users are accessing resources outside a specified time range. | Data Sources – Azure AD Sign-in logs, Defined time range Azure AD Group that will be monitored for login activity, a logic app that pulls members of AD Group into a LA table, Analytics rule that will trigger an incident when a member of the AD Group signs in outside of the defined time range. KQL Query: SigninLogs |extend TimeInUK = CreatedDateTime|extend day = (dayofweek(TimeInUK)) |
2 | Use a watchlist to dismiss expected alerts | Data Sources – Azure Defender for IoT, list of user and device pairs uploaded into a Watchlist, Analytics rule that will look up the watchlist and a Playbook that will close incidents from expected alerts.KQL Query: let alert = (SecurityAlert | where TimeGenerated > ago(14d) |where DisplayName |
3 | Detect priviledge escalation-user created then deleted within 10 minutes | Data sources: Azure AD and Windows Security Events. KQL Query: let timeframe = 10m;let lookback = 1d;let account_created =SecurityEvent |
4 | Detect Solorigate Network Beacon | Data sources: DNS, CISCO ASA, Palo Alto Networks, Microsoft 365 Defender. KQL Query: let domains = dynamic(["incomeupdate.com","zupertech.com","databasegalore.com","panhardware.com","avsvmcloud.com","digitalcollege.org","freescanonline.com","deftsecurity.com","thedoccloud.com","virtualdataserver.com","lcomputers.com","webcodez.com","globalnetworkissues.com","kubecloud.com","seobundlekit.com","solartrackingsystem.net","virtualwebdata.com"]);let timeframe = 6h;(union isfuzzy=true(CommonSecurityLog | where TimeGenerated >= ago(timeframe)| parse Message with * '(' DNSName ')' * | where DNSName in~ (domains) or DestinationHostName has_any (domains) or RequestURL has_any(domains) | extend AccountCustomEntity = SourceUserID, HostCustomEntity = DeviceName, IPCustomEntity = SourceIP ),(DnsEvents | where TimeGenerated >= ago(timeframe) | extend DNSName = Name| where isnotempty(DNSName)| where DNSName in~ (domains) | extend IPCustomEntity = ClientIP),VMConnection| where TimeGenerated >= ago(timeframe)| parse RemoteDnsCanonicalNames with * '["' DNSName '"]' *| where isnotempty(DNSName)| where DNSName in~ (domains)| extend IPCustomEntity = RemoteIp ),(DeviceNetworkEvents | where TimeGenerated >= ago(timeframe)| where isnotempty(RemoteUrl)| where RemoteUrl has_any (domains)| extend DNSName = RemoteUrl| extend IPCustomEntity = RemoteIP| extend HostCustomEntity = DeviceName)) * |
5 | An IP address that had (failed) attempts to sign in to one or more disabled accounts signed in successfully to another account. | Data Sources: Azure AD.Analytics that looks for specific Azure AD Sign-In log entries 50057 = User account is disabled.The account has been disabled by an administrator.KQL Query: let lookBack = 1d;SigninLogs | where TimeGenerated >= ago(lookBack) |
6 | Detect Brute Force attack based on statistical detections | Data sources: Azure AD. KQL Query:let signin_threshold = toscalar(SigninLogs | where TimeGenerated >= startofday(ago(7d)) |