Analytic rule catalog
CTE - Device Repeatedly Blocked Across Multiple Days
Back
| Id | 8fbb095d-3a35-483b-b264-25b858a52f4d |
| Rulename | CTE - Device Repeatedly Blocked Across Multiple Days |
| Description | A device has triggered URL blocks on 3 or more distinct days in the past week, suggesting a recurring risky browsing pattern or persistent exposure. |
| Severity | Medium |
| Tactics | InitialAccess |
| Techniques | T1189 |
| Required data connectors | cybereinforce_cte |
| Kind | Scheduled |
| Query frequency | 12h |
| Query period | 7d |
| Trigger threshold | 0 |
| Trigger operator | gt |
| Source Uri | https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Cybereinforce/Analytic%20Rules/DeviceRepeatedlyBlockedAcrossMultipleDays.yaml |
| Version | 1.0.0 |
| Arm template | 8fbb095d-3a35-483b-b264-25b858a52f4d.json |
CybereinforceCTE_CL
| where EventType == "block.url"
| extend d = parse_json(Details)
| extend
DeviceId = tostring(d.deviceId),
HostName = iff(isnotempty(tostring(d.hostname)), tostring(d.hostname), strcat("cte-device-", substring(EntityId, 0, 8))),
DeviceUser = tostring(d.deviceUser),
DeviceOs = tostring(d.deviceOs),
DeviceVersion = tostring(d.deviceVersion),
RuleId = tostring(d.ruleId),
RuleName = iff(isnotempty(tostring(d.ruleName)), tostring(d.ruleName), "Pattern Match"),
Pattern = tostring(d.pattern),
Url = tostring(d.url),
Action = tostring(d.action),
IsIoc = tobool(d.ioc),
ClientIp = tostring(split(tostring(d.clientIp), ":")[0]),
ClientPort = tostring(split(tostring(d.clientIp), ":")[1]),
UserAgent = tostring(d.userAgent)
| summarize BlockDays=dcount(startofday(TimeGenerated)), BlockCount=count(), SampleUrls=make_set(Url, 20) by DeviceId, HostName, DeviceUser, DeviceOs, TenantId
| where BlockDays >= 3
name: CTE - Device Repeatedly Blocked Across Multiple Days
triggerOperator: gt
query: |
CybereinforceCTE_CL
| where EventType == "block.url"
| extend d = parse_json(Details)
| extend
DeviceId = tostring(d.deviceId),
HostName = iff(isnotempty(tostring(d.hostname)), tostring(d.hostname), strcat("cte-device-", substring(EntityId, 0, 8))),
DeviceUser = tostring(d.deviceUser),
DeviceOs = tostring(d.deviceOs),
DeviceVersion = tostring(d.deviceVersion),
RuleId = tostring(d.ruleId),
RuleName = iff(isnotempty(tostring(d.ruleName)), tostring(d.ruleName), "Pattern Match"),
Pattern = tostring(d.pattern),
Url = tostring(d.url),
Action = tostring(d.action),
IsIoc = tobool(d.ioc),
ClientIp = tostring(split(tostring(d.clientIp), ":")[0]),
ClientPort = tostring(split(tostring(d.clientIp), ":")[1]),
UserAgent = tostring(d.userAgent)
| summarize BlockDays=dcount(startofday(TimeGenerated)), BlockCount=count(), SampleUrls=make_set(Url, 20) by DeviceId, HostName, DeviceUser, DeviceOs, TenantId
| where BlockDays >= 3
queryFrequency: 12h
description: |
A device has triggered URL blocks on 3 or more distinct days in the past week, suggesting a recurring risky browsing pattern or persistent exposure.
id: 8fbb095d-3a35-483b-b264-25b858a52f4d
triggerThreshold: 0
queryPeriod: 7d
version: 1.0.0
kind: Scheduled
relevantTechniques:
- T1189
severity: Medium
requiredDataConnectors:
- connectorId: cybereinforce_cte
dataTypes:
- CybereinforceCTE_CL
OriginalUri: https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Cybereinforce/Analytic%20Rules/DeviceRepeatedlyBlockedAcrossMultipleDays.yaml
tactics:
- InitialAccess
entityMappings:
- fieldMappings:
- identifier: HostName
columnName: HostName
entityType: Host
{
"$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/8fbb095d-3a35-483b-b264-25b858a52f4d')]",
"kind": "Scheduled",
"name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/8fbb095d-3a35-483b-b264-25b858a52f4d')]",
"properties": {
"alertRuleTemplateName": "8fbb095d-3a35-483b-b264-25b858a52f4d",
"customDetails": null,
"description": "A device has triggered URL blocks on 3 or more distinct days in the past week, suggesting a recurring risky browsing pattern or persistent exposure.\n",
"displayName": "CTE - Device Repeatedly Blocked Across Multiple Days",
"enabled": true,
"entityMappings": [
{
"entityType": "Host",
"fieldMappings": [
{
"columnName": "HostName",
"identifier": "HostName"
}
]
}
],
"OriginalUri": "https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Cybereinforce/Analytic%20Rules/DeviceRepeatedlyBlockedAcrossMultipleDays.yaml",
"query": "CybereinforceCTE_CL\n| where EventType == \"block.url\"\n| extend d = parse_json(Details)\n| extend\n DeviceId = tostring(d.deviceId),\n HostName = iff(isnotempty(tostring(d.hostname)), tostring(d.hostname), strcat(\"cte-device-\", substring(EntityId, 0, 8))),\n DeviceUser = tostring(d.deviceUser),\n DeviceOs = tostring(d.deviceOs),\n DeviceVersion = tostring(d.deviceVersion),\n RuleId = tostring(d.ruleId),\n RuleName = iff(isnotempty(tostring(d.ruleName)), tostring(d.ruleName), \"Pattern Match\"),\n Pattern = tostring(d.pattern),\n Url = tostring(d.url),\n Action = tostring(d.action),\n IsIoc = tobool(d.ioc),\n ClientIp = tostring(split(tostring(d.clientIp), \":\")[0]),\n ClientPort = tostring(split(tostring(d.clientIp), \":\")[1]),\n UserAgent = tostring(d.userAgent)\n| summarize BlockDays=dcount(startofday(TimeGenerated)), BlockCount=count(), SampleUrls=make_set(Url, 20) by DeviceId, HostName, DeviceUser, DeviceOs, TenantId\n| where BlockDays >= 3\n",
"queryFrequency": "PT12H",
"queryPeriod": "P7D",
"severity": "Medium",
"subTechniques": [],
"suppressionDuration": "PT1H",
"suppressionEnabled": false,
"tactics": [
"InitialAccess"
],
"techniques": [
"T1189"
],
"templateVersion": "1.0.0",
"triggerOperator": "GreaterThan",
"triggerThreshold": 0
},
"type": "Microsoft.OperationalInsights/workspaces/providers/alertRules"
}
]
}