Analytics+Playbooks
This commit is contained in:
Родитель
1d028d72a5
Коммит
bd4254f0fa
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"workspace": {
|
||||
"type": "String"
|
||||
}
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"id": "[concat(resourceId('Microsoft.OperationalInsights/workspaces/providers', parameters('workspace'), 'Microsoft.SecurityInsights'),'/alertRules/71fec017-1d21-49b7-9c53-d2245e3e4f25')]",
|
||||
"name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/71fec017-1d21-49b7-9c53-d2245e3e4f25')]",
|
||||
"type": "Microsoft.OperationalInsights/workspaces/providers/alertRules",
|
||||
"kind": "MicrosoftSecurityIncidentCreation",
|
||||
"apiVersion": "2021-09-01-preview",
|
||||
"properties": {
|
||||
"displayName": "Create incidents based on Microsoft Defender for IoT alerts on excessive login attempts",
|
||||
"description": "Excessive login attempts may indicate improper service configuration, human error, or malicious activity on the network; a cyber threat attempting to manipulate the SCADA network.",
|
||||
"enabled": true,
|
||||
"productFilter": "Azure Security Center for IoT",
|
||||
"severitiesFilter": null,
|
||||
"displayNamesFilter": [
|
||||
"Excessive Login Attempts",
|
||||
"Excessive SMB login attempts",
|
||||
"Password Guessing Attempt Detected"
|
||||
],
|
||||
"displayNamesExcludeFilter": null,
|
||||
"alertRuleTemplateName": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
id: e068187a-01f5-4737-bc13-25db4027b7ea
|
||||
name: Denial of Service - Microsoft Defender for IoT
|
||||
description: |
|
||||
'Detect attacks that would prevent the use or proper operation of the DCS system.'
|
||||
severity: Medium
|
||||
requiredDataConnectors:
|
||||
- connectorId: IoT
|
||||
dataTypes:
|
||||
- SecurityAlert (ASC for IoT)
|
||||
queryFrequency: 6h
|
||||
queryPeriod: 6h
|
||||
triggerOperator: gt
|
||||
triggerThreshold: 0
|
||||
tactics:
|
||||
- InhibitResponseFunction
|
||||
relevantTechniques:
|
||||
- T814
|
||||
query: |
|
||||
SecurityAlert
|
||||
| where ProductName == "Azure Security Center for IoT"
|
||||
| where AlertName == "Suspicion of Denial Of Service Attack"
|
||||
| extend DeviceId = tostring(parse_json(ExtendedProperties).DeviceId)
|
||||
| extend IPAddress = tostring(parse_json(tostring(parse_json(Entities)[0].IpAddress)).Address)
|
||||
| extend Protocol = tostring(parse_json(tostring(parse_json(Entities)[0].Protocols))[0])
|
||||
| extend DeviceType = tostring(parse_json(Entities)[0].DeviceName)
|
||||
| extend IoTSecurityAgentId = tostring(parse_json(Entities)[0].IoTSecurityAgentId)
|
||||
| extend Vendor = tostring(parse_json(Entities)[0].Vendor)
|
||||
| extend RemediationSteps = tostring(parse_json(RemediationSteps)[0])
|
||||
| project AlertName, ResourceId, DeviceId, IPAddress, Protocol, DeviceType, Vendor, IoTSecurityAgentId, Tactics, TimeGenerated, RemediationSteps
|
||||
| extend IPCustomEntity = IPAddress
|
||||
entityMappings:
|
||||
- entityType: IP
|
||||
fieldMappings:
|
||||
- identifier: Address
|
||||
columnName: IPCustomEntity
|
||||
version: 1.0.0
|
|
@ -0,0 +1,36 @@
|
|||
id: f5217b4c-3f1f-4d89-b4f3-5d7581da1c1c
|
||||
name: Excessive Login Attempts - Microsoft Defender for IoT
|
||||
description: |
|
||||
'Excessive login attempts may indicate improper service configuration, human error, or malicious activity on the network; a cyber threat attempting to manipulate the SCADA network.'
|
||||
severity: Medium
|
||||
requiredDataConnectors:
|
||||
- connectorId: IoT
|
||||
dataTypes:
|
||||
- SecurityAlert (ASC for IoT)
|
||||
queryFrequency: 6h
|
||||
queryPeriod: 6h
|
||||
triggerOperator: gt
|
||||
triggerThreshold: 0
|
||||
tactics:
|
||||
- LateralMovement
|
||||
relevantTechniques:
|
||||
- T814
|
||||
query: |
|
||||
SecurityAlert
|
||||
| where ProductName == "Azure Security Center for IoT"
|
||||
| where AlertName == "Excessive Login Attempts" or AlertName == "Excessive SMB login attempts" or AlertName == "Password Guessing Attempt Detected"
|
||||
| extend DeviceId = tostring(parse_json(ExtendedProperties).DeviceId)
|
||||
| extend IPAddress = tostring(parse_json(tostring(parse_json(Entities)[0].IpAddress)).Address)
|
||||
| extend Protocol = tostring(parse_json(tostring(parse_json(Entities)[0].Protocols))[0])
|
||||
| extend DeviceType = tostring(parse_json(Entities)[0].DeviceName)
|
||||
| extend IoTSecurityAgentId = tostring(parse_json(Entities)[0].IoTSecurityAgentId)
|
||||
| extend Vendor = tostring(parse_json(Entities)[0].Vendor)
|
||||
| extend RemediationSteps = tostring(parse_json(RemediationSteps)[0])
|
||||
| project AlertName, ResourceId, DeviceId, IPAddress, Protocol, DeviceType, Vendor, IoTSecurityAgentId, Tactics, TimeGenerated, RemediationSteps
|
||||
| extend IPCustomEntity = IPAddress
|
||||
entityMappings:
|
||||
- entityType: IP
|
||||
fieldMappings:
|
||||
- identifier: Address
|
||||
columnName: IPCustomEntity
|
||||
version: 1.0.0
|
|
@ -0,0 +1,35 @@
|
|||
id: 7cad4b66-5e83-4756-8de4-f21315ab1e77
|
||||
name: IoT Firmware Updates - Microsoft Defender for IoT
|
||||
description: |
|
||||
'Unauthorized firmware updates may indicate malicious activity on the network; a cyber threat that attempts to manipulate PLC firmware to compromise PLC function.'
|
||||
severity: Medium
|
||||
requiredDataConnectors:
|
||||
- connectorId: IoT
|
||||
dataTypes:
|
||||
- SecurityAlert (ASC for IoT)
|
||||
queryFrequency: 6h
|
||||
queryPeriod: 6h
|
||||
triggerOperator: gt
|
||||
triggerThreshold: 0
|
||||
tactics:
|
||||
- Persistence
|
||||
relevantTechniques:
|
||||
- T857
|
||||
query: |
|
||||
SecurityAlert
|
||||
| where ProductName == "Azure Security Center for IoT"
|
||||
| where AlertName contains "firmware"
|
||||
| extend DeviceId = tostring(parse_json(ExtendedProperties).DeviceId)
|
||||
| extend IPAddress = tostring(parse_json(tostring(parse_json(Entities)[0].IpAddress)).Address)
|
||||
| extend Protocol = tostring(parse_json(tostring(parse_json(Entities)[0].Protocols))[0])
|
||||
| extend DeviceType = tostring(parse_json(Entities)[0].DeviceName)
|
||||
| extend IoTSecurityAgentId = tostring(parse_json(Entities)[0].IoTSecurityAgentId)
|
||||
| extend Vendor = tostring(parse_json(Entities)[0].Vendor)
|
||||
| extend RemediationSteps = tostring(parse_json(RemediationSteps)[0])
|
||||
| project AlertName, ResourceId, DeviceId, IPAddress, Protocol, DeviceType, Vendor, IoTSecurityAgentId, Tactics, TimeGenerated, RemediationSteps
|
||||
entityMappings:
|
||||
- entityType: IP
|
||||
fieldMappings:
|
||||
- identifier: Address
|
||||
columnName: IPCustomEntity
|
||||
version: 1.0.0
|
|
@ -0,0 +1,35 @@
|
|||
id: caa4665f-21fa-462d-bb31-92226e746c68
|
||||
name: IoT High Bandwidth - Microsoft Defender for IoT
|
||||
description: |
|
||||
'An unusually high bandwidth may be an indication of a new service/process on the network, such as backup, or an indication of malicious activity on the network; a cyber threat attempting to manipulate the SCADA network.'
|
||||
severity: Medium
|
||||
requiredDataConnectors:
|
||||
- connectorId: IoT
|
||||
dataTypes:
|
||||
- SecurityAlert (ASC for IoT)
|
||||
queryFrequency: 6h
|
||||
queryPeriod: 6h
|
||||
triggerOperator: gt
|
||||
triggerThreshold: 0
|
||||
tactics:
|
||||
- ImpairProcessControl
|
||||
relevantTechniques:
|
||||
- T812
|
||||
query: |
|
||||
SecurityAlert
|
||||
| where ProductName == "Azure Security Center for IoT"
|
||||
| where AlertName == "Abnormal Traffic Bandwidth" or AlertName == "Abnormal Traffic Bandwidth Between Devices" or AlertName == "ARP Spoofing" or AlertName == "ICMP Flooding" or AlertName == "Excessive Number of Sessions"
|
||||
| extend DeviceId = tostring(parse_json(ExtendedProperties).DeviceId)
|
||||
| extend IPAddress = tostring(parse_json(tostring(parse_json(Entities)[0].IpAddress)).Address)
|
||||
| extend Protocol = tostring(parse_json(tostring(parse_json(Entities)[0].Protocols))[0])
|
||||
| extend DeviceType = tostring(parse_json(Entities)[0].DeviceName)
|
||||
| extend IoTSecurityAgentId = tostring(parse_json(Entities)[0].IoTSecurityAgentId)
|
||||
| extend Vendor = tostring(parse_json(Entities)[0].Vendor)
|
||||
| extend RemediationSteps = tostring(parse_json(RemediationSteps)[0])
|
||||
| project AlertName, ResourceId, DeviceId, IPAddress, Protocol, DeviceType, Vendor, IoTSecurityAgentId, Tactics, TimeGenerated, RemediationSteps
|
||||
entityMappings:
|
||||
- entityType: IP
|
||||
fieldMappings:
|
||||
- identifier: Address
|
||||
columnName: IPCustomEntity
|
||||
version: 1.0.0
|
|
@ -0,0 +1,35 @@
|
|||
id: f9df500a-e2a4-4104-a517-dc1d85bb654f
|
||||
name: Insecure Programmable Logic Controller - Microsoft Defender for IoT
|
||||
description: |
|
||||
'The new mode may indicate that the PLC is not secure. Leaving the PLC in an insecure operating mode may allow adversaries to perform malicious activities on it, such as a program download. If the PLC is compromised, devices and processes that interact with it may be impacted. This may affect overall system security and safety.'
|
||||
severity: Medium
|
||||
requiredDataConnectors:
|
||||
- connectorId: IoT
|
||||
dataTypes:
|
||||
- SecurityAlert (ASC for IoT)
|
||||
queryFrequency: 6h
|
||||
queryPeriod: 6h
|
||||
triggerOperator: gt
|
||||
triggerThreshold: 0
|
||||
tactics:
|
||||
- Execution
|
||||
relevantTechniques:
|
||||
- T858
|
||||
query: |
|
||||
SecurityAlert
|
||||
| where ProductName == "Azure Security Center for IoT"
|
||||
| where AlertName contains "PLC Operating Mode Changed"
|
||||
| extend DeviceId = tostring(parse_json(ExtendedProperties).DeviceId)
|
||||
| extend IPAddress = tostring(parse_json(tostring(parse_json(Entities)[0].IpAddress)).Address)
|
||||
| extend Protocol = tostring(parse_json(tostring(parse_json(Entities)[0].Protocols))[0])
|
||||
| extend DeviceType = tostring(parse_json(Entities)[0].DeviceName)
|
||||
| extend IoTSecurityAgentId = tostring(parse_json(Entities)[0].IoTSecurityAgentId)
|
||||
| extend Vendor = tostring(parse_json(Entities)[0].Vendor)
|
||||
| extend RemediationSteps = tostring(parse_json(RemediationSteps)[0])
|
||||
| project AlertName, ResourceId, DeviceId, IPAddress, Protocol, DeviceType, Vendor, IoTSecurityAgentId, Tactics, TimeGenerated, RemediationSteps
|
||||
entityMappings:
|
||||
- entityType: IP
|
||||
fieldMappings:
|
||||
- identifier: Address
|
||||
columnName: IPCustomEntity
|
||||
version: 1.0.0
|
|
@ -0,0 +1,35 @@
|
|||
id: 9ff3b13b-287a-4ed0-8f6b-7e7b66cbbcbd
|
||||
name: OT Internet Access - Microsoft Defender for IoT
|
||||
description: |
|
||||
'OT device communicating with Internet addresses can either be an indication of improper configuration of an application (e.g., Antivirus software attempting to download updates from an external server) or indicate malicious activity on the network.'
|
||||
severity: Medium
|
||||
requiredDataConnectors:
|
||||
- connectorId: IoT
|
||||
dataTypes:
|
||||
- SecurityAlert (ASC for IoT)
|
||||
queryFrequency: 6h
|
||||
queryPeriod: 6h
|
||||
triggerOperator: gt
|
||||
triggerThreshold: 0
|
||||
tactics:
|
||||
- InitialAccess
|
||||
relevantTechniques:
|
||||
- T883
|
||||
query: |
|
||||
SecurityAlert
|
||||
| where ProductName == "Azure Security Center for IoT"
|
||||
| where AlertName contains "Internet"
|
||||
| extend DeviceId = tostring(parse_json(ExtendedProperties).DeviceId)
|
||||
| extend IPAddress = tostring(parse_json(tostring(parse_json(Entities)[0].IpAddress)).Address)
|
||||
| extend Protocol = tostring(parse_json(tostring(parse_json(Entities)[0].Protocols))[0])
|
||||
| extend DeviceType = tostring(parse_json(Entities)[0].DeviceName)
|
||||
| extend IoTSecurityAgentId = tostring(parse_json(Entities)[0].IoTSecurityAgentId)
|
||||
| extend Vendor = tostring(parse_json(Entities)[0].Vendor)
|
||||
| extend RemediationSteps = tostring(parse_json(RemediationSteps)[0])
|
||||
| project AlertName, ResourceId, DeviceId, IPAddress, Protocol, DeviceType, Vendor, IoTSecurityAgentId, Tactics, TimeGenerated, RemediationSteps
|
||||
entityMappings:
|
||||
- entityType: IP
|
||||
fieldMappings:
|
||||
- identifier: Address
|
||||
columnName: IPCustomEntity
|
||||
version: 1.0.0
|
|
@ -0,0 +1,35 @@
|
|||
id: 447dca20-f509-4336-ab00-7aa297b2ff4c
|
||||
name: IoT/OT Malware - Microsoft Defender for IoT
|
||||
description: |
|
||||
'Suspicious malware found on the network indicates that suspicious malware is trying to compromise production.'
|
||||
severity: Medium
|
||||
requiredDataConnectors:
|
||||
- connectorId: IoT
|
||||
dataTypes:
|
||||
- SecurityAlert (ASC for IoT)
|
||||
queryFrequency: 6h
|
||||
queryPeriod: 6h
|
||||
triggerOperator: gt
|
||||
triggerThreshold: 0
|
||||
tactics:
|
||||
- Impact
|
||||
relevantTechniques:
|
||||
- T882
|
||||
query: |
|
||||
SecurityAlert
|
||||
| where ProductName == "Azure Security Center for IoT"
|
||||
| where AlertName contains "malware" or AlertName contains "Malicious" or AlertName contains "Implant" or AlertName == "Suspicion of Remote Code Execution with PsExec" or AlertName == "Suspicion of Remote Windows Service Management" or AlertName == "Suspicious Executable File Detected on Endpoint" or AlertName == "Suspicious Traffic Detected"
|
||||
| extend DeviceId = tostring(parse_json(ExtendedProperties).DeviceId)
|
||||
| extend IPAddress = tostring(parse_json(tostring(parse_json(Entities)[0].IpAddress)).Address)
|
||||
| extend Protocol = tostring(parse_json(tostring(parse_json(Entities)[0].Protocols))[0])
|
||||
| extend DeviceType = tostring(parse_json(Entities)[0].DeviceName)
|
||||
| extend IoTSecurityAgentId = tostring(parse_json(Entities)[0].IoTSecurityAgentId)
|
||||
| extend Vendor = tostring(parse_json(Entities)[0].Vendor)
|
||||
| extend RemediationSteps = tostring(parse_json(RemediationSteps)[0])
|
||||
| project AlertName, ResourceId, DeviceId, IPAddress, Protocol, DeviceType, Vendor, IoTSecurityAgentId, Tactics, TimeGenerated, RemediationSteps
|
||||
entityMappings:
|
||||
- entityType: IP
|
||||
fieldMappings:
|
||||
- identifier: Address
|
||||
columnName: IPCustomEntity
|
||||
version: 1.0.0
|
|
@ -0,0 +1,35 @@
|
|||
id: 493916d5-a094-4bfa-bdd1-d983a063ea3d
|
||||
name: OT Network Scanning - Microsoft Defender for IoT
|
||||
description: |
|
||||
'Multiple scans on the network can be either an indication of a new device on the network, new functionality of an existing device, misconfiguration of an application (e.g., due to a firmware update or reinstallation), or malicious activity on the network - reconnaissance.'
|
||||
severity: Medium
|
||||
requiredDataConnectors:
|
||||
- connectorId: IoT
|
||||
dataTypes:
|
||||
- SecurityAlert (ASC for IoT)
|
||||
queryFrequency: 6h
|
||||
queryPeriod: 6h
|
||||
triggerOperator: gt
|
||||
triggerThreshold: 0
|
||||
tactics:
|
||||
- Discovery
|
||||
relevantTechniques:
|
||||
- T842
|
||||
query: |
|
||||
SecurityAlert
|
||||
| where ProductName == "Azure Security Center for IoT"
|
||||
| where AlertName contains "scan"
|
||||
| extend DeviceId = tostring(parse_json(ExtendedProperties).DeviceId)
|
||||
| extend IPAddress = tostring(parse_json(tostring(parse_json(Entities)[0].IpAddress)).Address)
|
||||
| extend Protocol = tostring(parse_json(tostring(parse_json(Entities)[0].Protocols))[0])
|
||||
| extend DeviceType = tostring(parse_json(Entities)[0].DeviceName)
|
||||
| extend IoTSecurityAgentId = tostring(parse_json(Entities)[0].IoTSecurityAgentId)
|
||||
| extend Vendor = tostring(parse_json(Entities)[0].Vendor)
|
||||
| extend RemediationSteps = tostring(parse_json(RemediationSteps)[0])
|
||||
| project AlertName, ResourceId, DeviceId, IPAddress, Protocol, DeviceType, Vendor, IoTSecurityAgentId, Tactics, TimeGenerated, RemediationSteps
|
||||
entityMappings:
|
||||
- entityType: IP
|
||||
fieldMappings:
|
||||
- identifier: Address
|
||||
columnName: IPCustomEntity
|
||||
version: 1.0.0
|
|
@ -0,0 +1,35 @@
|
|||
id: a7d3f642-15d8-4e83-99ee-83ca3352525d
|
||||
name: Programmable Logic Controller Stop Command - Microsoft Defender for IoT
|
||||
description: |
|
||||
'The PLC stop command could indicate either improper configuration of an application that has caused the PLC to stop functioning, or malicious activity on the network; a cyber threat that is attempting to manipulate PLC programming to affect the function of the network.'
|
||||
severity: Medium
|
||||
requiredDataConnectors:
|
||||
- connectorId: IoT
|
||||
dataTypes:
|
||||
- SecurityAlert (ASC for IoT)
|
||||
queryFrequency: 6h
|
||||
queryPeriod: 6h
|
||||
triggerOperator: gt
|
||||
triggerThreshold: 0
|
||||
tactics:
|
||||
- InhibitResponseFunction
|
||||
relevantTechniques:
|
||||
- T881
|
||||
query: |
|
||||
SecurityAlert
|
||||
| where ProductName == "Azure Security Center for IoT"
|
||||
| where AlertName contains "stop" or AlertName contains "restart" or AlertName contains "reset" or AlertName == "Slave Device Unrecoverable Failure" or AlertName == "Suspicion of Hardware Problems in Outstation"
|
||||
| extend DeviceId = tostring(parse_json(ExtendedProperties).DeviceId)
|
||||
| extend IPAddress = tostring(parse_json(tostring(parse_json(Entities)[0].IpAddress)).Address)
|
||||
| extend Protocol = tostring(parse_json(tostring(parse_json(Entities)[0].Protocols))[0])
|
||||
| extend DeviceType = tostring(parse_json(Entities)[0].DeviceName)
|
||||
| extend IoTSecurityAgentId = tostring(parse_json(Entities)[0].IoTSecurityAgentId)
|
||||
| extend Vendor = tostring(parse_json(Entities)[0].Vendor)
|
||||
| extend RemediationSteps = tostring(parse_json(RemediationSteps)[0])
|
||||
| project AlertName, ResourceId, DeviceId, IPAddress, Protocol, DeviceType, Vendor, IoTSecurityAgentId, Tactics, TimeGenerated, RemediationSteps
|
||||
entityMappings:
|
||||
- entityType: IP
|
||||
fieldMappings:
|
||||
- identifier: Address
|
||||
columnName: IPCustomEntity
|
||||
version: 1.0.0
|
|
@ -0,0 +1,35 @@
|
|||
id: 447dca20-f509-4336-ab00-7aa297b2ff4c
|
||||
name: IoT/OT Unauthorized Device - Microsoft Defender for IoT
|
||||
description: |
|
||||
'An unauthorized device on the network may be either a legitimate new device recently installed on the network or an indication of unauthorized or even malicious activity on the network; a cyber threat attempting to manipulate the SCADA network.'
|
||||
severity: Medium
|
||||
requiredDataConnectors:
|
||||
- connectorId: IoT
|
||||
dataTypes:
|
||||
- SecurityAlert (ASC for IoT)
|
||||
queryFrequency: 6h
|
||||
queryPeriod: 6h
|
||||
triggerOperator: gt
|
||||
triggerThreshold: 0
|
||||
tactics:
|
||||
- Execution
|
||||
relevantTechniques:
|
||||
- T858
|
||||
query: |
|
||||
SecurityAlert
|
||||
| where ProductName == "Azure Security Center for IoT"
|
||||
| where AlertName == "Field Device Discovered Unexpectedly" or AlertName == "New Asset Detected" or AlertName == "Abnormal usage of MAC Addresses" or AlertName == "New LLDP Device Configuration"
|
||||
| extend DeviceId = tostring(parse_json(ExtendedProperties).DeviceId)
|
||||
| extend IPAddress = tostring(parse_json(tostring(parse_json(Entities)[0].IpAddress)).Address)
|
||||
| extend Protocol = tostring(parse_json(tostring(parse_json(Entities)[0].Protocols))[0])
|
||||
| extend DeviceType = tostring(parse_json(Entities)[0].DeviceName)
|
||||
| extend IoTSecurityAgentId = tostring(parse_json(Entities)[0].IoTSecurityAgentId)
|
||||
| extend Vendor = tostring(parse_json(Entities)[0].Vendor)
|
||||
| extend RemediationSteps = tostring(parse_json(RemediationSteps)[0])
|
||||
| project AlertName, ResourceId, DeviceId, IPAddress, Protocol, DeviceType, Vendor, IoTSecurityAgentId, Tactics, TimeGenerated, RemediationSteps
|
||||
entityMappings:
|
||||
- entityType: IP
|
||||
fieldMappings:
|
||||
- identifier: Address
|
||||
columnName: IPCustomEntity
|
||||
version: 1.0.0
|
|
@ -0,0 +1,35 @@
|
|||
id: c52ec521-9188-4a9e-a4cd-34a3dfbc3d27
|
||||
name: IoT/OT Unauthorized Network Configuration - Microsoft Defender for IoT
|
||||
description: |
|
||||
'An unauthorized DHCP configuration on the network can be an indication of a new, unauthorized device operating on the network. This is either a legitimate new device recently deployed on the network or an indication of unauthorized or even malicious activity on the network; a cyber threat attempting to manipulate the SCADA network.'
|
||||
severity: Medium
|
||||
requiredDataConnectors:
|
||||
- connectorId: IoT
|
||||
dataTypes:
|
||||
- SecurityAlert (ASC for IoT)
|
||||
queryFrequency: 6h
|
||||
queryPeriod: 6h
|
||||
triggerOperator: gt
|
||||
triggerThreshold: 0
|
||||
tactics:
|
||||
- Impact
|
||||
relevantTechniques:
|
||||
- T813
|
||||
query: |
|
||||
SecurityAlert
|
||||
| where AlertName == "Device Failed to Receive a Dynamic IP Address"
|
||||
| where AlertName == "Field Device Discovered Unexpectedly" or AlertName == "New Asset Detected" or AlertName == "Abnormal usage of MAC Addresses" or AlertName == "New LLDP Device Configuration"
|
||||
| extend DeviceId = tostring(parse_json(ExtendedProperties).DeviceId)
|
||||
| extend IPAddress = tostring(parse_json(tostring(parse_json(Entities)[0].IpAddress)).Address)
|
||||
| extend Protocol = tostring(parse_json(tostring(parse_json(Entities)[0].Protocols))[0])
|
||||
| extend DeviceType = tostring(parse_json(Entities)[0].DeviceName)
|
||||
| extend IoTSecurityAgentId = tostring(parse_json(Entities)[0].IoTSecurityAgentId)
|
||||
| extend Vendor = tostring(parse_json(Entities)[0].Vendor)
|
||||
| extend RemediationSteps = tostring(parse_json(RemediationSteps)[0])
|
||||
| project AlertName, ResourceId, DeviceId, IPAddress, Protocol, DeviceType, Vendor, IoTSecurityAgentId, Tactics, TimeGenerated, RemediationSteps
|
||||
entityMappings:
|
||||
- entityType: IP
|
||||
fieldMappings:
|
||||
- identifier: Address
|
||||
columnName: IPCustomEntity
|
||||
version: 1.0.0
|
|
@ -0,0 +1,35 @@
|
|||
id: c2fb27c7-5f67-49c4-aaf3-d82934234a69
|
||||
name: IoT/OT Unauthorized Programmable Logic Controller Modifications - Microsoft Defender for IoT
|
||||
description: |
|
||||
'Unauthorized changes to PLC ladder logic code can be either an indication of new functionality in the PLC, improper configuration of an application (e.g., due to a firmware update or reinstallation), or malicious activity on the network; a cyber threat that attempts to manipulate PLC programming to compromise PLC function.'
|
||||
severity: Medium
|
||||
requiredDataConnectors:
|
||||
- connectorId: IoT
|
||||
dataTypes:
|
||||
- SecurityAlert (ASC for IoT)
|
||||
queryFrequency: 6h
|
||||
queryPeriod: 6h
|
||||
triggerOperator: gt
|
||||
triggerThreshold: 0
|
||||
tactics:
|
||||
- Persistence
|
||||
relevantTechniques:
|
||||
- T839
|
||||
query: |
|
||||
SecurityAlert
|
||||
| where AlertName contains "Unpermitted" or AlertName contains "unauthorized" or AlertName contains "type settings" or AlertName contains "New Activity Detected"
|
||||
| where AlertName <> "Unauthorized Internet Connectivity Detected"
|
||||
| extend DeviceId = tostring(parse_json(ExtendedProperties).DeviceId)
|
||||
| extend IPAddress = tostring(parse_json(tostring(parse_json(Entities)[0].IpAddress)).Address)
|
||||
| extend Protocol = tostring(parse_json(tostring(parse_json(Entities)[0].Protocols))[0])
|
||||
| extend DeviceType = tostring(parse_json(Entities)[0].DeviceName)
|
||||
| extend IoTSecurityAgentId = tostring(parse_json(Entities)[0].IoTSecurityAgentId)
|
||||
| extend Vendor = tostring(parse_json(Entities)[0].Vendor)
|
||||
| extend RemediationSteps = tostring(parse_json(RemediationSteps)[0])
|
||||
| project AlertName, ResourceId, DeviceId, IPAddress, Protocol, DeviceType, Vendor, IoTSecurityAgentId, Tactics, TimeGenerated, RemediationSteps
|
||||
entityMappings:
|
||||
- entityType: IP
|
||||
fieldMappings:
|
||||
- identifier: Address
|
||||
columnName: IPCustomEntity
|
||||
version: 1.0.0
|
|
@ -0,0 +1,34 @@
|
|||
id: 1ff4fa3d-150b-4c87-b733-26c289af0d49
|
||||
name: IoT/OT Unauthorized Remote Access - Microsoft Defender for IoT
|
||||
description: |
|
||||
'Unauthorized remote access to the network can compromise the target device. That is, if another device on the network is compromised, the target devices can be accessed remotely, increasing the attack surface.'
|
||||
severity: Medium
|
||||
requiredDataConnectors:
|
||||
- connectorId: IoT
|
||||
dataTypes:
|
||||
- SecurityAlert (ASC for IoT)
|
||||
queryFrequency: 6h
|
||||
queryPeriod: 6h
|
||||
triggerOperator: gt
|
||||
triggerThreshold: 0
|
||||
tactics:
|
||||
- InitialAccess
|
||||
relevantTechniques:
|
||||
- T886
|
||||
query: |
|
||||
SecurityAlert
|
||||
| where AlertName == "Unauthorized SSH Access"
|
||||
| extend DeviceId = tostring(parse_json(ExtendedProperties).DeviceId)
|
||||
| extend IPAddress = tostring(parse_json(tostring(parse_json(Entities)[0].IpAddress)).Address)
|
||||
| extend Protocol = tostring(parse_json(tostring(parse_json(Entities)[0].Protocols))[0])
|
||||
| extend DeviceType = tostring(parse_json(Entities)[0].DeviceName)
|
||||
| extend IoTSecurityAgentId = tostring(parse_json(Entities)[0].IoTSecurityAgentId)
|
||||
| extend Vendor = tostring(parse_json(Entities)[0].Vendor)
|
||||
| extend RemediationSteps = tostring(parse_json(RemediationSteps)[0])
|
||||
| project AlertName, ResourceId, DeviceId, IPAddress, Protocol, DeviceType, Vendor, IoTSecurityAgentId, Tactics, TimeGenerated, RemediationSteps
|
||||
entityMappings:
|
||||
- entityType: IP
|
||||
fieldMappings:
|
||||
- identifier: Address
|
||||
columnName: IPCustomEntity
|
||||
version: 1.0.0
|
|
@ -0,0 +1,218 @@
|
|||
{
|
||||
"$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
|
||||
"contentVersion":"1.0.0.0",
|
||||
"parameters":{
|
||||
"PlaybookName":{
|
||||
"defaultValue":"AD4IoT-AutoCloseIncidents",
|
||||
"type":"String"
|
||||
}
|
||||
},
|
||||
"variables":{
|
||||
"AzureSentinelConnectionName":"[concat('azuresentinel-', parameters('PlaybookName'))]"
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"type": "Microsoft.Web/connections",
|
||||
"apiVersion": "2016-06-01",
|
||||
"name": "[variables('AzureSentinelConnectionName')]",
|
||||
"location": "[resourceGroup().location]",
|
||||
"properties": {
|
||||
"displayName": "[variables('AzureSentinelConnectionName')]",
|
||||
"customParameterValues": {
|
||||
},
|
||||
"api": {
|
||||
"id": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Web/locations/', resourceGroup().location, '/managedApis/azuresentinel')]"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Microsoft.Logic/workflows",
|
||||
"apiVersion": "2017-07-01",
|
||||
"name": "[parameters('PlaybookName')]",
|
||||
"location": "[resourceGroup().location]",
|
||||
"dependsOn": [
|
||||
"[resourceId('Microsoft.Web/connections', variables('AzureSentinelConnectionName'))]"
|
||||
],
|
||||
"properties": {
|
||||
"state": "Enabled",
|
||||
"definition": {
|
||||
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
|
||||
"actions": {
|
||||
"Condition_2": {
|
||||
"actions": {
|
||||
"Update_incident": {
|
||||
"inputs": {
|
||||
"body": {
|
||||
"classification": {
|
||||
"ClassificationAndReason": "BenignPositive - SuspiciousButExpected",
|
||||
"ClassificationReasonText": "Known Manitenence Activity - closed by Playbook "
|
||||
},
|
||||
"incidentArmId": "@triggerBody()?['object']?['id']",
|
||||
"status": "Closed"
|
||||
},
|
||||
"host": {
|
||||
"connection": {
|
||||
"name": "@parameters('$connections')['azuresentinel']['connectionId']"
|
||||
}
|
||||
},
|
||||
"method": "put",
|
||||
"path": "/Incidents"
|
||||
},
|
||||
"runAfter": {},
|
||||
"type": "ApiConnection"
|
||||
}
|
||||
},
|
||||
"expression": {
|
||||
"and": [
|
||||
{
|
||||
"greater": [
|
||||
"@length(body('Run_query_and_list_results')?['value'])",
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"greater": [
|
||||
"@int(substring(split(triggerBody()?['object']?['properties']?['createdTimeUtc'],'T')[1],0,2))",
|
||||
"@int(0)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"less": [
|
||||
"@int(substring(split(triggerBody()?['object']?['properties']?['createdTimeUtc'],'T')[1],0,2))",
|
||||
"@int(23)"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"runAfter": {
|
||||
"Run_query_and_list_results": [
|
||||
"Succeeded"
|
||||
]
|
||||
},
|
||||
"type": "If"
|
||||
},
|
||||
"Initialize_variable": {
|
||||
"inputs": {
|
||||
"variables": [
|
||||
{
|
||||
"name": "WatchlistName",
|
||||
"type": "string",
|
||||
"value": "ipaddresses"
|
||||
}
|
||||
]
|
||||
},
|
||||
"runAfter": {
|
||||
"Parse_JSON": [
|
||||
"Succeeded"
|
||||
]
|
||||
},
|
||||
"type": "InitializeVariable"
|
||||
},
|
||||
"Parse_JSON": {
|
||||
"inputs": {
|
||||
"content": "@first(triggerBody()?['object']?['properties']?['Alerts'])?['properties']?['additionalData']",
|
||||
"schema": {
|
||||
"properties": {
|
||||
"Category": {
|
||||
"type": "string"
|
||||
},
|
||||
"CompromisedEntityId": {
|
||||
"type": "string"
|
||||
},
|
||||
"DestinationDevice": {
|
||||
"type": "string"
|
||||
},
|
||||
"DestinationDeviceAddress": {
|
||||
"type": "string"
|
||||
},
|
||||
"DeviceId": {
|
||||
"type": "string"
|
||||
},
|
||||
"ProcessedBySentinel": {
|
||||
"type": "string"
|
||||
},
|
||||
"Protocol": {
|
||||
"type": "string"
|
||||
},
|
||||
"SensorId": {
|
||||
"type": "string"
|
||||
},
|
||||
"SourceDeviceAddress": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"runAfter": {},
|
||||
"type": "ParseJson"
|
||||
},
|
||||
"Run_query_and_list_results": {
|
||||
"inputs": {
|
||||
"body": "_GetWatchlist(\"@{variables('WatchlistName')}\") \n| where ip_address == \"@{body('Parse_JSON')?['SourceDeviceAddress']}\"",
|
||||
"host": {
|
||||
"connection": {
|
||||
"name": "@parameters('$connections')['azuremonitorlogs']['connectionId']"
|
||||
}
|
||||
},
|
||||
"method": "post",
|
||||
"path": "/queryData",
|
||||
"queries": {
|
||||
"resourcegroups": "@triggerBody()?['workspaceInfo']?['ResourceGroupName']",
|
||||
"resourcename": "@triggerBody()?['workspaceInfo']?['WorkspaceName']",
|
||||
"resourcetype": "Log Analytics Workspace",
|
||||
"subscriptions": "@triggerBody()?['workspaceInfo']?['SubscriptionId']",
|
||||
"timerange": "Last 12 hours"
|
||||
}
|
||||
},
|
||||
"runAfter": {
|
||||
"Initialize_variable": [
|
||||
"Succeeded"
|
||||
]
|
||||
},
|
||||
"type": "ApiConnection"
|
||||
}
|
||||
},
|
||||
"contentVersion": "1.0.0.0",
|
||||
"outputs": {},
|
||||
"parameters": {
|
||||
"$connections": {
|
||||
"defaultValue": {},
|
||||
"type": "Object"
|
||||
}
|
||||
},
|
||||
"triggers": {
|
||||
"When_Azure_Sentinel_incident_creation_rule_was_triggered": {
|
||||
"inputs": {
|
||||
"body": {
|
||||
"callback_url": "@{listCallbackUrl()}"
|
||||
},
|
||||
"host": {
|
||||
"connection": {
|
||||
"name": "@parameters('$connections')['azuresentinel']['connectionId']"
|
||||
}
|
||||
},
|
||||
"path": "/incident-creation"
|
||||
},
|
||||
"type": "ApiConnectionWebhook"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
"parameters": {
|
||||
"$connections":{
|
||||
"value":{
|
||||
"azuresentinel":{
|
||||
"connectionId":"[resourceId('Microsoft.Web/connections', variables('AzureSentinelConnectionName'))]",
|
||||
"connectionName":"[variables('AzureSentinelConnectionName')]",
|
||||
"id":"[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Web/locations/', resourceGroup().location, '/managedApis/azuresentinel')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,230 @@
|
|||
{
|
||||
"$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
|
||||
"contentVersion":"1.0.0.0",
|
||||
"parameters":{
|
||||
"PlaybookName":{
|
||||
"defaultValue":"AD4IoT-MailByProductionLine",
|
||||
"type":"String"
|
||||
}
|
||||
},
|
||||
"variables":{
|
||||
"AzureSentinelConnectionName":"[concat('azuresentinel-', parameters('PlaybookName'))]",
|
||||
"AzureOffice365ConnectionName":"[concat('office365', parameters('PlaybookName'))]"
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"type": "Microsoft.Web/connections",
|
||||
"apiVersion": "2016-06-01",
|
||||
"name": "[variables('AzureSentinelConnectionName')]",
|
||||
"location": "[resourceGroup().location]",
|
||||
"properties": {
|
||||
"displayName": "[variables('AzureSentinelConnectionName')]",
|
||||
"customParameterValues": {
|
||||
},
|
||||
"api": {
|
||||
"id": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Web/locations/', resourceGroup().location, '/managedApis/azuresentinel')]"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Microsoft.Web/connections",
|
||||
"apiVersion": "2016-06-01",
|
||||
"name": "[variables('AzureOffice365ConnectionName')]",
|
||||
"location": "[resourceGroup().location]",
|
||||
"properties": {
|
||||
"displayName": "[variables('AzureOffice365ConnectionName')]",
|
||||
"customParameterValues": {},
|
||||
"api": {
|
||||
"id": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Web/locations/', resourceGroup().location, '/managedApis/office365')]"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Microsoft.Logic/workflows",
|
||||
"apiVersion": "2017-07-01",
|
||||
"name": "[parameters('PlaybookName')]",
|
||||
"location": "[resourceGroup().location]",
|
||||
"dependsOn": [
|
||||
"[resourceId('Microsoft.Web/connections', variables('AzureSentinelConnectionName'))]",
|
||||
"[resourceId('Microsoft.Web/connections', variables('AzureOffice365ConnectionName'))]"
|
||||
],
|
||||
"properties": {
|
||||
"state": "Enabled",
|
||||
"definition": {
|
||||
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
|
||||
"actions": {
|
||||
"Condition": {
|
||||
"actions": {
|
||||
"Compose_-_Owner_email_address": {
|
||||
"inputs": "@first(body('Run_query_and_list_results')?['value'])?['mail']",
|
||||
"runAfter": {},
|
||||
"type": "Compose"
|
||||
},
|
||||
"Send_an_email_(V2)": {
|
||||
"inputs": {
|
||||
"body": {
|
||||
"Body": "<p>@{triggerBody()?['object']?['properties']?['title']} was detcted on IP address @{body('Parse_JSON')?['SourceDeviceAddress']}<br>\n<br>\n@{triggerBody()?['object']?['properties']?['description']}<br>\nView full incident in Azure Sentinel: @{triggerBody()?['object']?['properties']?['incidentUrl']}</p>",
|
||||
"Subject": "@{triggerBody()?['object']?['properties']?['title']} detected",
|
||||
"To": "@{outputs('Compose_-_Owner_email_address')}"
|
||||
},
|
||||
"host": {
|
||||
"connection": {
|
||||
"name": "@parameters('$connections')['office365']['connectionId']"
|
||||
}
|
||||
},
|
||||
"method": "post",
|
||||
"path": "/v2/Mail"
|
||||
},
|
||||
"runAfter": {
|
||||
"Compose_-_Owner_email_address": [
|
||||
"Succeeded"
|
||||
]
|
||||
},
|
||||
"type": "ApiConnection"
|
||||
}
|
||||
},
|
||||
"expression": {
|
||||
"and": [
|
||||
{
|
||||
"greater": [
|
||||
"@length(body('Run_query_and_list_results')?['value'])",
|
||||
0
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"runAfter": {
|
||||
"Run_query_and_list_results": [
|
||||
"Succeeded"
|
||||
]
|
||||
},
|
||||
"type": "If"
|
||||
},
|
||||
"Initialize_variable": {
|
||||
"inputs": {
|
||||
"variables": [
|
||||
{
|
||||
"name": "WatchlistName",
|
||||
"type": "string",
|
||||
"value": "MailsBySensor"
|
||||
}
|
||||
]
|
||||
},
|
||||
"runAfter": {},
|
||||
"type": "InitializeVariable"
|
||||
},
|
||||
"Parse_JSON": {
|
||||
"inputs": {
|
||||
"content": "@first(triggerBody()?['object']?['properties']?['Alerts'])?['properties']?['additionalData']",
|
||||
"schema": {
|
||||
"properties": {
|
||||
"Category": {
|
||||
"type": "string"
|
||||
},
|
||||
"CompromisedEntityId": {
|
||||
"type": "string"
|
||||
},
|
||||
"DestinationDevice": {
|
||||
"type": "string"
|
||||
},
|
||||
"DestinationDeviceAddress": {
|
||||
"type": "string"
|
||||
},
|
||||
"DeviceId": {
|
||||
"type": "string"
|
||||
},
|
||||
"ProcessedBySentinel": {
|
||||
"type": "string"
|
||||
},
|
||||
"Protocol": {
|
||||
"type": "string"
|
||||
},
|
||||
"SensorId": {
|
||||
"type": "string"
|
||||
},
|
||||
"SourceDeviceAddress": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"runAfter": {
|
||||
"Initialize_variable": [
|
||||
"Succeeded"
|
||||
]
|
||||
},
|
||||
"type": "ParseJson"
|
||||
},
|
||||
"Run_query_and_list_results": {
|
||||
"inputs": {
|
||||
"body": "_GetWatchlist(\"@{variables('WatchlistName')}\") \n| where Sensor == \"@{body('Parse_JSON')?['SensorId']}\"",
|
||||
"host": {
|
||||
"connection": {
|
||||
"name": "@parameters('$connections')['azuremonitorlogs']['connectionId']"
|
||||
}
|
||||
},
|
||||
"method": "post",
|
||||
"path": "/queryData",
|
||||
"queries": {
|
||||
"resourcegroups": "@triggerBody()?['workspaceInfo']?['ResourceGroupName']",
|
||||
"resourcename": "@triggerBody()?['workspaceInfo']?['WorkspaceName']",
|
||||
"resourcetype": "Log Analytics Workspace",
|
||||
"subscriptions": "@triggerBody()?['workspaceInfo']?['SubscriptionId']",
|
||||
"timerange": "Last 12 hours"
|
||||
}
|
||||
},
|
||||
"runAfter": {
|
||||
"Parse_JSON": [
|
||||
"Succeeded"
|
||||
]
|
||||
},
|
||||
"type": "ApiConnection"
|
||||
}
|
||||
},
|
||||
"contentVersion": "1.0.0.0",
|
||||
"outputs": {},
|
||||
"parameters": {
|
||||
"$connections": {
|
||||
"defaultValue": {},
|
||||
"type": "Object"
|
||||
}
|
||||
},
|
||||
"triggers": {
|
||||
"When_Azure_Sentinel_incident_creation_rule_was_triggered": {
|
||||
"inputs": {
|
||||
"body": {
|
||||
"callback_url": "@{listCallbackUrl()}"
|
||||
},
|
||||
"host": {
|
||||
"connection": {
|
||||
"name": "@parameters('$connections')['azuresentinel_1']['connectionId']"
|
||||
}
|
||||
},
|
||||
"path": "/incident-creation"
|
||||
},
|
||||
"type": "ApiConnectionWebhook"
|
||||
}
|
||||
}
|
||||
},
|
||||
"parameters": {
|
||||
"$connections":{
|
||||
"value":{
|
||||
"azuresentinel":{
|
||||
"connectionId":"[resourceId('Microsoft.Web/connections', variables('AzureSentinelConnectionName'))]",
|
||||
"connectionName":"[variables('AzureSentinelConnectionName')]",
|
||||
"id":"[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Web/locations/', resourceGroup().location, '/managedApis/azuresentinel')]"
|
||||
},
|
||||
"office365":{
|
||||
"connectionId":"[resourceId('Microsoft.Web/connections', variables('AzureOffice365ConnectionName'))]",
|
||||
"connectionName":"[variables('AzureOffice365ConnectionName')]",
|
||||
"id":"[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Web/locations/', resourceGroup().location, '/managedApis/office365')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,188 @@
|
|||
{
|
||||
"$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
|
||||
"contentVersion":"1.0.0.0",
|
||||
"parameters":{
|
||||
"PlaybookName":{
|
||||
"defaultValue":"AD4IoT-NewAssetServiceNowTicket",
|
||||
"type":"String"
|
||||
}
|
||||
},
|
||||
"variables":{
|
||||
"AzureSentinelConnectionName":"[concat('azuresentinel-', parameters('PlaybookName'))]",
|
||||
"service-nowConnectionName":"[concat('ServiceNow-', parameters('PlaybookName'))]"
|
||||
},
|
||||
"resources":[
|
||||
{
|
||||
"type":"Microsoft.Web/connections",
|
||||
"apiVersion":"2016-06-01",
|
||||
"name":"[variables('AzureSentinelConnectionName')]",
|
||||
"location":"[resourceGroup().location]",
|
||||
"properties":{
|
||||
"displayName":"[variables('AzureSentinelConnectionName')]",
|
||||
"customParameterValues":{
|
||||
|
||||
},
|
||||
"api":{
|
||||
"id":"[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Web/locations/', resourceGroup().location, '/managedApis/azuresentinel')]"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type":"Microsoft.Web/connections",
|
||||
"apiVersion":"2016-06-01",
|
||||
"name":"[variables('service-nowConnectionName')]",
|
||||
"location":"[resourceGroup().location]",
|
||||
"properties":{
|
||||
"displayName":"[variables('service-nowConnectionName')]",
|
||||
"customParameterValues":{
|
||||
|
||||
},
|
||||
"api":{
|
||||
"id":"[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Web/locations/', resourceGroup().location, '/managedApis/service-now')]"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type":"Microsoft.Logic/workflows",
|
||||
"apiVersion":"2017-07-01",
|
||||
"name":"[parameters('PlaybookName')]",
|
||||
"location":"[resourceGroup().location]",
|
||||
"dependsOn":[
|
||||
"[resourceId('Microsoft.Web/connections', variables('AzureSentinelConnectionName'))]",
|
||||
"[resourceId('Microsoft.Web/connections', variables('service-nowConnectionName'))]"
|
||||
],
|
||||
"properties":{
|
||||
"state":"Enabled",
|
||||
"definition":{
|
||||
"$schema":"https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
|
||||
"actions":{
|
||||
"Condition":{
|
||||
"actions":{
|
||||
"Create_Record":{
|
||||
"inputs":{
|
||||
"body":{
|
||||
"short_description":"A new @{body('Parse_JSON')?['deviceType']} was detected with the following Ip address @{body('Parse_JSON')?['deviceName']}"
|
||||
},
|
||||
"host":{
|
||||
"connection":{
|
||||
"name":"@parameters('$connections')['service-now']['connectionId']"
|
||||
}
|
||||
},
|
||||
"method":"post",
|
||||
"path":"/api/now/v2/table/@{encodeURIComponent('incident')}",
|
||||
"queries":{
|
||||
"sysparm_display_value":true,
|
||||
"sysparm_exclude_reference_link":true
|
||||
}
|
||||
},
|
||||
"runAfter":{
|
||||
|
||||
},
|
||||
"type":"ApiConnection"
|
||||
}
|
||||
},
|
||||
"expression":{
|
||||
"and":[
|
||||
{
|
||||
"equals":[
|
||||
"@body('Parse_JSON')?['deviceType']",
|
||||
"Engineering Station"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"runAfter":{
|
||||
"Parse_JSON":[
|
||||
"Succeeded"
|
||||
]
|
||||
},
|
||||
"type":"If"
|
||||
},
|
||||
"Parse_JSON":{
|
||||
"inputs":{
|
||||
"content":"@\nfirst(triggerBody()?['object']?['properties']?['relatedEntities'])?['properties']",
|
||||
"schema":{
|
||||
"properties":{
|
||||
"deviceId":{
|
||||
"type":"string"
|
||||
},
|
||||
"deviceName":{
|
||||
"type":"string"
|
||||
},
|
||||
"deviceType":{
|
||||
"type":"string"
|
||||
},
|
||||
"friendlyName":{
|
||||
"type":"string"
|
||||
},
|
||||
"iotHubEntityId":{
|
||||
"type":"string"
|
||||
},
|
||||
"ipAddressEntityId":{
|
||||
"type":"string"
|
||||
},
|
||||
"protocols":{
|
||||
"items":{
|
||||
"type":"string"
|
||||
},
|
||||
"type":"array"
|
||||
}
|
||||
},
|
||||
"type":"object"
|
||||
}
|
||||
},
|
||||
"runAfter":{
|
||||
|
||||
},
|
||||
"type":"ParseJson"
|
||||
}
|
||||
},
|
||||
"contentVersion":"1.0.0.0",
|
||||
"outputs":{
|
||||
|
||||
},
|
||||
"parameters":{
|
||||
"$connections":{
|
||||
"defaultValue":{
|
||||
|
||||
},
|
||||
"type":"Object"
|
||||
}
|
||||
},
|
||||
"triggers":{
|
||||
"When_Azure_Sentinel_incident_creation_rule_was_triggered":{
|
||||
"inputs":{
|
||||
"body":{
|
||||
"callback_url":"@{listCallbackUrl()}"
|
||||
},
|
||||
"host":{
|
||||
"connection":{
|
||||
"name":"@parameters('$connections')['azuresentinel']['connectionId']"
|
||||
}
|
||||
},
|
||||
"path":"/incident-creation"
|
||||
},
|
||||
"type":"ApiConnectionWebhook"
|
||||
}
|
||||
}
|
||||
},
|
||||
"parameters":{
|
||||
"$connections":{
|
||||
"value":{
|
||||
"azuresentinel":{
|
||||
"connectionId":"[resourceId('Microsoft.Web/connections', variables('AzureSentinelConnectionName'))]",
|
||||
"connectionName":"[variables('AzureSentinelConnectionName')]",
|
||||
"id":"[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Web/locations/', resourceGroup().location, '/managedApis/azuresentinel')]"
|
||||
},
|
||||
"service-now":{
|
||||
"connectionId":"[resourceId('Microsoft.Web/connections', variables('service-nowConnectionName'))]",
|
||||
"connectionName":"[variables('service-nowConnectionName')]",
|
||||
"id":"[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Web/locations/', resourceGroup().location, '/managedApis/service-now')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,13 +1,23 @@
|
|||
# Overview
|
||||
There has been a long-standing split between SCADA (OT) and Corporate (IT) cybersecurity. This split was often driven by significant differences in technology/tooling. Azure Defender for IoT's integration with Azure Sentinel drives convergency by providing a single pane for coverage of both D4IOT (OT) and Azure Sentinel (IT) alerting.
|
||||
This solution includes (1) Workbook and (10) Analytics rules and provides a guided investigation for security operations teams. The workbook features IT/OT filtering for Security Alerts, Incidents, and Asset Inventory. The workbook also features a dynamic assessment of the MITRE ATT&CK for ICS matrix across your environment to analyze and respond to IOT-based threats. This solution is designed to enable SecOps Analysts, Security Engineers, and MSSPs to gain situational awareness for IT/OT security posture. This solution is enhanced when integrated with complimentary Microsoft Offerings such as ✳️ Azure Defender for IoT, ✳️ Azure Sentinel, and ✳️ Azure Security Center. This workbook augments staffing through automation, artificial intelligence, machine learning, query/alerting generation and visualizations.
|
||||
This solution includes (1) Workbook, (13) Analytics rules, and (3) Playbooks providing a guide OT/IoT Detection, Analysis, and Response. The solution features IoT/OT filtering for Security Alerts, Incidents, and Asset Inventory. The workbook features a dynamic assessment of the MITRE ATT&CK for ICS matrix across your environment to analyze and respond to IoT/OT-based threats. This solution is designed to enable SecOps Analysts, Security Engineers, and MSSPs to gain situational awareness for IT/OT security posture. This solution is enhanced when integrated with complimentary Microsoft Offerings such as ✳️ Azure Defender for IoT, ✳️ Azure Sentinel, and ✳️ Azure Security Center. This workbook augments staffing through automation, artificial intelligence, machine learning, query/alerting generation and visualizations.
|
||||
|
||||
# Getting Started
|
||||
1) [Onboard Azure Defender for IoT](https://docs.microsoft.com/azure/defender-for-iot/device-builders/quickstart-onboard-iot-hub)
|
||||
2) [Onboard Azure Sentinel](https://docs.microsoft.com/azure/sentinel/quickstart-onboard)
|
||||
3) [Enable Azure Defender for IoT Connector to Azure Sentinel](https://docs.microsoft.com/azure/defender-for-iot/organizations/how-to-configure-with-sentinel)
|
||||
4) View the Workbook: Navigate to Azure Sentinel > Workbooks > My Workbooks > Unified Microsoft SOC for OT > View
|
||||
4) View the Workbook: Navigate to Azure Sentinel > Workbooks > My Workbooks > IoT/OT Threat Monitoring with Defender for IoT > View
|
||||
5) View the Analytics Rules: Navigate to Azure Sentinel > Analytics > Search "IOT"
|
||||
6) View the Playbooks: Navigate to Azure Sentinel> Automation > Playbooks > Search "IOT"
|
||||
|
||||
|
||||
|
||||
# Playbooks
|
||||
1) AutoCloseIncidents
|
||||
## Overview
|
||||
In some cases, maintenance activities generate alerts in Sentinel which distracts the SOC team from handling the real problems, the playbook allows to input the time period in which the maintenance is expected and the assets IP (Excel file can be found). The playbook requires a watchlist which includes all the IP addresses of the assets on which alerts will handled automatically. This playbook parses explicitly the IOT device entity fields. For more information, see [AD4IoT-AutoCloseIncidents](https://github.com/Azure/Azure-Sentinel/tree/master/Playbooks/AD4IoT-AutoCloseIncidents)
|
||||
2) MailbyProductionLine
|
||||
## Overview
|
||||
The following playbook will send mail to notify specific stake holders.<br>
|
||||
One example can be in the case of specific security team per product line or per physical location. The playbook requires a watchlist which maps between the sensors name and the mail addresses of the alerts stockholders. For more information, see [AD4IoT-MailbyProductionLine](https://github.com/Azure/Azure-Sentinel/tree/master/Playbooks/AD4IoT-MailbyProductionLine)
|
||||
3) NewAssetServiceNowTicket
|
||||
## Overview
|
||||
Normally, the authorized entity to program a PLC is the Engineering Workstation, to program a PLC attackers might create a new Engineering Workstation to create malicious programing. The following playbook will open a ticket in ServiceNow each time a new Engineering Workstation is detected. This playbook parses explicitly the IOT device entity fields. For more information, see [AD4IoT-NewAssetServiceNowTicket](https://github.com/Azure/Azure-Sentinel/blob/master/Playbooks/AD4IoT-NewAssetServiceNowTicket/readme.md)
|
||||
|
|
Загрузка…
Ссылка в новой задаче