Analytic rule catalog
SAP BTP - Cloud Integration JDBC data source changes
Back
| Id | b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e |
| Rulename | SAP BTP - Cloud Integration JDBC data source changes |
| Description | Identifies deployment and undeployment of JDBC data source configurations in SAP Cloud Integration. JDBC data sources contain database connection credentials and configuration that enable integration flows to access backend databases. Unauthorized JDBC data source manipulation could indicate: - Attacker adding rogue database connections for data exfiltration - Credential theft by accessing stored database passwords - Modification of connection strings to redirect traffic to attacker-controlled systems |
| Severity | High |
| Tactics | CredentialAccess LateralMovement |
| Techniques | T1552 T1021 |
| Required data connectors | SAPBTPAuditEvents |
| Kind | Scheduled |
| Query frequency | 15m |
| Query period | 15m |
| Trigger threshold | 0 |
| Trigger operator | gt |
| Source Uri | https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/SAP%20BTP/Analytic%20Rules/BTP%20-%20Cloud%20Integration%20JDBC%20data%20source%20changes.yaml |
| Version | 1.0.1 |
| Arm template | b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e.json |
SAPBTPAuditLog_CL
| where Category == "audit.security-events"
| extend data_s = tostring(Message.data),
ipAddress = tostring(Message.ip)
| extend parsedData = parse_json(data_s)
| extend action = tostring(parsedData.action),
objectType = tostring(parsedData.objectType),
objectId = tostring(parsedData.objectId)
| where objectType == "Data Source"
| where action in ("PasswordStore", "PasswordDelete")
| extend normalizedAction = case(
action == "PasswordStore", "deployed",
action == "PasswordDelete", "undeployed",
action
)
| extend MessageText = strcat("JDBC data source '", objectId, "' was ", normalizedAction)
| project
UpdatedOn,
UserName,
MessageText,
DataSourceName = objectId,
Action = action,
Tenant,
ipAddress,
CloudApp = "SAP Cloud Integration"
| extend AccountName = split(UserName, "@")[0], UPNSuffix = split(UserName, "@")[1]
tactics:
- CredentialAccess
- LateralMovement
name: SAP BTP - Cloud Integration JDBC data source changes
version: 1.0.1
queryFrequency: 15m
requiredDataConnectors:
- connectorId: SAPBTPAuditEvents
dataTypes:
- SAPBTPAuditLog_CL
customDetails:
SourceIP: ipAddress
Action: Action
DataSourceName: DataSourceName
id: b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e
triggerThreshold: 0
entityMappings:
- fieldMappings:
- identifier: Name
columnName: AccountName
- identifier: UPNSuffix
columnName: UPNSuffix
entityType: Account
- fieldMappings:
- identifier: Address
columnName: ipAddress
entityType: IP
- fieldMappings:
- identifier: Name
columnName: CloudApp
entityType: CloudApplication
queryPeriod: 15m
alertDetailsOverride:
alertDescriptionFormat: |
{{MessageText}} by {{UserName}} from IP {{ipAddress}}.
JDBC data sources contain database connection credentials. Changes to these configurations
should be carefully reviewed.
This could indicate:
- Legitimate database configuration management
- Unauthorized database connection configuration
- Attacker establishing lateral movement paths to backend systems
alertDisplayNameFormat: 'SAP Cloud Integration: {{MessageText}}'
severity: High
relevantTechniques:
- T1552
- T1021
eventGroupingSettings:
aggregationKind: SingleAlert
description: |
Identifies deployment and undeployment of JDBC data source configurations in SAP Cloud Integration.
JDBC data sources contain database connection credentials and configuration that enable
integration flows to access backend databases.
Unauthorized JDBC data source manipulation could indicate:
- Attacker adding rogue database connections for data exfiltration
- Credential theft by accessing stored database passwords
- Modification of connection strings to redirect traffic to attacker-controlled systems
triggerOperator: gt
status: Available
OriginalUri: https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/SAP%20BTP/Analytic%20Rules/BTP%20-%20Cloud%20Integration%20JDBC%20data%20source%20changes.yaml
kind: Scheduled
query: |
SAPBTPAuditLog_CL
| where Category == "audit.security-events"
| extend data_s = tostring(Message.data),
ipAddress = tostring(Message.ip)
| extend parsedData = parse_json(data_s)
| extend action = tostring(parsedData.action),
objectType = tostring(parsedData.objectType),
objectId = tostring(parsedData.objectId)
| where objectType == "Data Source"
| where action in ("PasswordStore", "PasswordDelete")
| extend normalizedAction = case(
action == "PasswordStore", "deployed",
action == "PasswordDelete", "undeployed",
action
)
| extend MessageText = strcat("JDBC data source '", objectId, "' was ", normalizedAction)
| project
UpdatedOn,
UserName,
MessageText,
DataSourceName = objectId,
Action = action,
Tenant,
ipAddress,
CloudApp = "SAP Cloud Integration"
| extend AccountName = split(UserName, "@")[0], UPNSuffix = split(UserName, "@")[1]
{
"$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/b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e')]",
"kind": "Scheduled",
"name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e')]",
"properties": {
"alertDetailsOverride": {
"alertDescriptionFormat": "{{MessageText}} by {{UserName}} from IP {{ipAddress}}.\n\nJDBC data sources contain database connection credentials. Changes to these configurations\nshould be carefully reviewed.\n\nThis could indicate:\n- Legitimate database configuration management\n- Unauthorized database connection configuration\n- Attacker establishing lateral movement paths to backend systems\n",
"alertDisplayNameFormat": "SAP Cloud Integration: {{MessageText}}"
},
"alertRuleTemplateName": "b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e",
"customDetails": {
"Action": "Action",
"DataSourceName": "DataSourceName",
"SourceIP": "ipAddress"
},
"description": "Identifies deployment and undeployment of JDBC data source configurations in SAP Cloud Integration.\nJDBC data sources contain database connection credentials and configuration that enable\nintegration flows to access backend databases.\n\nUnauthorized JDBC data source manipulation could indicate:\n- Attacker adding rogue database connections for data exfiltration\n- Credential theft by accessing stored database passwords\n- Modification of connection strings to redirect traffic to attacker-controlled systems\n",
"displayName": "SAP BTP - Cloud Integration JDBC data source changes",
"enabled": true,
"entityMappings": [
{
"entityType": "Account",
"fieldMappings": [
{
"columnName": "AccountName",
"identifier": "Name"
},
{
"columnName": "UPNSuffix",
"identifier": "UPNSuffix"
}
]
},
{
"entityType": "IP",
"fieldMappings": [
{
"columnName": "ipAddress",
"identifier": "Address"
}
]
},
{
"entityType": "CloudApplication",
"fieldMappings": [
{
"columnName": "CloudApp",
"identifier": "Name"
}
]
}
],
"eventGroupingSettings": {
"aggregationKind": "SingleAlert"
},
"OriginalUri": "https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/SAP%20BTP/Analytic%20Rules/BTP%20-%20Cloud%20Integration%20JDBC%20data%20source%20changes.yaml",
"query": "SAPBTPAuditLog_CL\n| where Category == \"audit.security-events\"\n| extend data_s = tostring(Message.data),\n ipAddress = tostring(Message.ip)\n| extend parsedData = parse_json(data_s)\n| extend action = tostring(parsedData.action),\n objectType = tostring(parsedData.objectType),\n objectId = tostring(parsedData.objectId)\n| where objectType == \"Data Source\"\n| where action in (\"PasswordStore\", \"PasswordDelete\")\n| extend normalizedAction = case(\n action == \"PasswordStore\", \"deployed\",\n action == \"PasswordDelete\", \"undeployed\",\n action\n)\n| extend MessageText = strcat(\"JDBC data source '\", objectId, \"' was \", normalizedAction)\n| project\n UpdatedOn,\n UserName,\n MessageText,\n DataSourceName = objectId,\n Action = action,\n Tenant,\n ipAddress,\n CloudApp = \"SAP Cloud Integration\"\n| extend AccountName = split(UserName, \"@\")[0], UPNSuffix = split(UserName, \"@\")[1]\n",
"queryFrequency": "PT15M",
"queryPeriod": "PT15M",
"severity": "High",
"status": "Available",
"subTechniques": [],
"suppressionDuration": "PT1H",
"suppressionEnabled": false,
"tactics": [
"CredentialAccess",
"LateralMovement"
],
"techniques": [
"T1021",
"T1552"
],
"templateVersion": "1.0.1",
"triggerOperator": "GreaterThan",
"triggerThreshold": 0
},
"type": "Microsoft.OperationalInsights/workspaces/providers/alertRules"
}
]
}