Detection rules › Kusto
Dataverse - SharePoint document management site added or updated
Identifies modifications of SharePoint document management integration. Document management allows storage of data located externally to Dataverse. Combine this analytics rule with the MSBizApps-Add-SharePointSite-To-Watchlist Playbook to automatically update the Dataverse-SharePointSites watchlist. This watchlist can be used to correlate events between Dataverse and SharePoint when using the Office 365 data connector.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Exfiltration | T1537 Transfer Data to Cloud Account, T1567 Exfiltration Over Web Service |
Rule body kusto
id: c4c3510a-0ee0-4561-9835-47882ffa7f46
kind: Scheduled
name: Dataverse - SharePoint document management site added or updated
description: Identifies modifications of SharePoint document management integration.
Document management allows storage of data located externally to Dataverse. Combine
this analytics rule with the MSBizApps-Add-SharePointSite-To-Watchlist Playbook
to automatically update the Dataverse-SharePointSites watchlist. This watchlist
can be used to correlate events between Dataverse and SharePoint when using the
Office 365 data connector.
severity: Informational
status: Available
requiredDataConnectors:
- connectorId: Dataverse
dataTypes:
- DataverseActivity
queryFrequency: 1h
queryPeriod: 1d
triggerOperator: gt
triggerThreshold: 0
tactics:
- Exfiltration
relevantTechniques:
- T1567
- T1537
query: |
let query_frequency = 1h;
DataverseActivity
| where TimeGenerated >= ago(query_frequency)
| where Message in ("Create", "Update") and EntityName == "sharepointsite"
| mv-expand Fields
| where Fields.Name == "absoluteurl"
| extend
SharePointAppId = int(20892),
CloudAppId = int(32780),
AccountName = tostring(split(UserId, '@')[0]),
UPNSuffix = tostring(split(UserId, '@')[1]),
SharePointUrl = tostring(Fields.Value)
| project
TimeGenerated,
UserId,
ClientIp,
Message,
SharePointUrl,
InstanceUrl,
CloudAppId,
SharePointAppId,
AccountName,
UPNSuffix
eventGroupingSettings:
aggregationKind: AlertPerResult
entityMappings:
- entityType: Account
fieldMappings:
- identifier: Name
columnName: AccountName
- identifier: UPNSuffix
columnName: UPNSuffix
- entityType: IP
fieldMappings:
- identifier: Address
columnName: ClientIp
- entityType: CloudApplication
fieldMappings:
- identifier: AppId
columnName: CloudAppId
- identifier: InstanceName
columnName: InstanceUrl
- entityType: CloudApplication
fieldMappings:
- identifier: AppId
columnName: SharePointAppId
- identifier: InstanceName
columnName: SharePointUrl
alertDetailsOverride:
alertDisplayNameFormat: 'Dataverse - Document management enabled or modified in
{{{InstanceUrl}} '
alertDescriptionFormat: '{{UserId}} made changes to document management in {{{InstanceUrl}}.
Sharepoint site {{{SharePointUrl}} was added.'
version: 3.2.0
Stages and Predicates
Parameters
let query_frequency = 1h;
Stage 1: source
DataverseActivity
Stage 2: where
| where TimeGenerated >= ago(query_frequency)
Stage 3: where
| where Message in ("Create", "Update") and EntityName == "sharepointsite"
Stage 4: mv-expand
| mv-expand Fields
Stage 5: where
| where Fields.Name == "absoluteurl"
Stage 6: extend
| extend
SharePointAppId = int(20892),
CloudAppId = int(32780),
AccountName = tostring(split(UserId, '@')[0]),
UPNSuffix = tostring(split(UserId, '@')[1]),
SharePointUrl = tostring(Fields.Value)
Stage 7: project
| project
TimeGenerated,
UserId,
ClientIp,
Message,
SharePointUrl,
InstanceUrl,
CloudAppId,
SharePointAppId,
AccountName,
UPNSuffix
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.
| Field | Kind | Values |
|---|---|---|
EntityName | eq |
|
Message | in |
|
Name | eq |
|
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.
| Field | Source |
|---|---|
AccountName | project |
ClientIp | project |
CloudAppId | project |
InstanceUrl | project |
Message | project |
SharePointAppId | project |
SharePointUrl | project |
TimeGenerated | project |
UPNSuffix | project |
UserId | project |