Azure / Azure/azure-rest-api-specs

SecurityInsights: Fusion Alert Rule API doesn't comply with round trip consistency

Open
#21,387 0 comments 0 reactions 0 assignees View on GitHub
Sentinel Service Attention
Dominant language
TypeSpec
Stars
3.1k
Forks
5.9k
Avg merge
2d 22h
Merged PRs (30d)
444

Description

Fusion alert rule is typically created by default after Sentinel is created, based on its template. All of the `sourceSettings` and `sourceSubTypes` are enabled. It allows users to modify it by making the existing settings to be disabled. However, if users explicitly make certain settings to be absent in the PUT request, those settings will not be changed at all.

E.g. I have sent following request:

```json
{
"kind": "Fusion",
"properties": {
"alertRuleTemplateName": "f71aba3d-28fb-450b-b192-4e76a83015c8",
"enabled": true,
"sourceSettings": [
{
"enabled": true,
"sourceName": "Alert providers",
"sourceSubTypes": [
{
"enabled": true,
"severityFilters": {
"filters": [
{
"severity": "Informational",
"enabled": true
},
{
"severity": "Low",
"enabled": true
},
{
"severity": "High",
"enabled": true
},
{
"severity": "Medium",
"enabled": true
}
]
},
"sourceSubTypeName": "Azure Active Directory Identity Protection"
}
]
}
]
}
}
```

The request succeeded with 200, but the response is as below:

```json
{
...
"properties": {
"displayName": "Advanced Multistage Attack Detection",
"description": "Microsoft Sentinel uses Fusion, a correlation engine based on scalable machine learning algorithms, to automatically detect multistage attacks by identifying combinations of anomalous behaviors and suspicious activities that are observed at various stages of the kill chain. On the basis of these discoveries, Azure Sentinel generates incidents that would otherwise be very difficult to catch. By design, these incidents are low-volume, high-fidelity, and high-severity, which is why this detection is turned ON by default.\\n\\nSince Fusion correlates multiple signals from various products to detect advanced multistage attacks, successful Fusion detections are presented as Fusion incidents on the Microsoft Sentinel Incidents page. This rule covers the following detections:\\n- Fusion for emerging threats\\n- Fusion for ransomware\\n- Scenario-based Fusion detections (122 scenarios)\\n\\nTo enable these detections, we recommend you configure the following data connectors for best results:\\n- Out-of-the-box anomaly detections\\n- Azure Active Directory Identity Protection\\n- Azure Defender\\n- Azure Defender for IoT\\n- Microsoft 365 Defender\\n- Microsoft Cloud App Security \\n- Microsoft Defender for Endpoint\\n- Microsoft Defender for Identity\\n- Microsoft Defender for Office 365\\n- Scheduled analytics rules, both built-in and those created by your security analysts. Analytics rules must contain kill-chain (tactics) and entity mapping information in order to be used by Fusion.\\n\\nFor the full description of each detection that is supported by Fusion, go to https://aka.ms/SentinelFusion.",
"alertRuleTemplateName": "f71aba3d-28fb-450b-b192-4e76a83015c8",
"tactics": [
"Collection",
"CommandAndControl",
"CredentialAccess",
"DefenseEvasion",
"Discovery",
"Execution",
"Exfiltration",
"Impact",
"InitialAccess",
"LateralMovement",
"Persistence",
"PrivilegeEscalation"
],
"severity": "High",
"sourceSettings": [
{
"enabled": true,
"sourceName": "Anomalies",
"sourceSubTypes": null
},
{
"enabled": true,
"sourceName": "Alert providers",
"sourceSubTypes": [
{
"sourceSubTypeDisplayName": "Azure Active Directory Identity Protection",
"sourceSubTypeName": "Azure Active Directory Identity Protection",
"enabled": true,
"severityFilters": {
"isSupported": true,
"filters": [
{
"severity": "High",
"enabled": true
},
{
"severity": "Medium",
"enabled": true
},
{
"severity": "Low",
"enabled": true
},
{
"severity": "Informational",
"enabled": true
}
]
}
},
{
"sourceSubTypeDisplayName": "Microsoft 365 Defender",
"sourceSubTypeName": "Microsoft 365 Defender",
"enabled": true,
"severityFilters": {
"isSupported": true,
"filters": [
{
"severity": "High",
"enabled": true
},
{
"severity": "Medium",
"enabled": true
},
{
"severity": "Low",
"enabled": true
},
{
"severity": "Informational",
"enabled": true
}
]
}
},
{
"sourceSubTypeDisplayName": "Microsoft Cloud App Security",
"sourceSubTypeName": "Microsoft Cloud App Security",
"enabled": true,
"severityFilters": {
"isSupported": true,
"filters": [
{
"severity": "High",
"enabled": true
},
{
"severity": "Medium",
"enabled": true
},
{
"severity": "Low",
"enabled": true
},
{
"severity": "Informational",
"enabled": true
}
]
}
},
{
"sourceSubTypeDisplayName": "Microsoft Defender for Cloud",
"sourceSubTypeName": "Azure Defender",
"enabled": true,
"severityFilters": {
"isSupported": true,
"filters": [
{
"severity": "High",
"enabled": true
},
{
"severity": "Medium",
"enabled": true
},
{
"severity": "Low",
"enabled": true
},
{
"severity": "Informational",
"enabled": true
}
]
}
},
{
"sourceSubTypeDisplayName": "Microsoft Defender for Endpoint",
"sourceSubTypeName": "Microsoft Defender for Endpoint",
"enabled": true,
"severityFilters": {
"isSupported": true,
"filters": [
{
"severity": "High",
"enabled": true
},
{
"severity": "Medium",
"enabled": true
},
{
"severity": "Low",
"enabled": true
},
{
"severity": "Informational",
"enabled": true
}
]
}
},
{
"sourceSubTypeDisplayName": "Microsoft Defender for Identity",
"sourceSubTypeName": "Microsoft Defender for Identity",
"enabled": true,
"severityFilters": {
"isSupported": true,
"filters": [
{
"severity": "High",
"enabled": true
},
{
"severity": "Medium",
"enabled": true
},
{
"severity": "Low",
"enabled": true
},
{
"severity": "Informational",
"enabled": true
}
]
}
},
{
"sourceSubTypeDisplayName": "Microsoft Defender for IoT",
"sourceSubTypeName": "Azure Defender for IoT",
"enabled": true,
"severityFilters": {
"isSupported": true,
"filters": [
{
"severity": "High",
"enabled": true
},
{
"severity": "Medium",
"enabled": true
},
{
"severity": "Low",
"enabled": true
},
{
"severity": "Informational",
"enabled": true
}
]
}
},
{
"sourceSubTypeDisplayName": "Microsoft Defender for Office 365",
"sourceSubTypeName": "Microsoft Defender for Office 365",
"enabled": true,
"severityFilters": {
"isSupported": true,
"filters": [
{
"severity": "High",
"enabled": true
},
{
"severity": "Medium",
"enabled": true
},
{
"severity": "Low",
"enabled": true
},
{
"severity": "Informational",
"enabled": true
}
]
}
},
{
"sourceSubTypeDisplayName": "Azure Sentinel scheduled analytics rules",
"sourceSubTypeName": "Azure Sentinel scheduled analytics rules",
"enabled": true,
"severityFilters": {
"isSupported": true,
"filters": [
{
"severity": "High",
"enabled": true
},
{
"severity": "Medium",
"enabled": true
},
{
"severity": "Low",
"enabled": true
},
{
"severity": "Informational",
"enabled": true
}
]
}
},
{
"sourceSubTypeDisplayName": "Azure Sentinel NRT analytic rules",
"sourceSubTypeName": "Azure Sentinel NRT analytic rules",
"enabled": true,
"severityFilters": {
"isSupported": true,
"filters": [
{
"severity": "High",
"enabled": true
},
{
"severity": "Medium",
"enabled": true
},
{
"severity": "Low",
"enabled": true
},
{
"severity": "Informational",
"enabled": true
}
]
}
}
]
}
],
"scenarioExclusionPatterns": [],
"techniques": [],
"enabled": true,
"lastModifiedUtc": "2022-11-02T03:28:33.7367754Z"
}
}
```

Apparently, those not specified settings are kept as it was.

Another behavior is that, if I have a enabled `sourceSetting` and all its `sourceSubType`s. Then if I disable the `sourceSetting`, then all the `sourceSubType`s are turned into disabled automatically.

Above behaviors probably have violated the roundtrip equivalent rule as is defined [here](https://github.com/Azure/azure-rest-api-specs/blob/main/documentation/Semantic-and-Model-Violations-Reference.md#ROUNDTRIP_ADDITIONAL_PROPERTY).

Contributor guide

Open the contributing guide

Research direction

Start by locating the SecurityInsights Fusion alert rule API definition in the azure-rest-api-specs repository and review the PUT request and response schemas for sourceSettings and sourceSubTypes. Reproduce the shown request, then verify that explicitly omitted settings are handled consistently and that the resulting GET response reflects the intended update.

Written by the indexing model from the issue text.

Assessment

Tech stack
openapi
Domain
api
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.