From d5a66443c4d030bf959b666e54af3af34aa35523 Mon Sep 17 00:00:00 2001 From: Devika Mehra Date: Tue, 17 May 2022 18:43:12 +0530 Subject: [PATCH 1/9] ForcepointCASB solution modified. --- DataConnectors/Forcepoint CASB.json | 271 ++++++++++++++-------------- Workbooks/ForcepointCASB.json | 6 +- 2 files changed, 141 insertions(+), 136 deletions(-) diff --git a/DataConnectors/Forcepoint CASB.json b/DataConnectors/Forcepoint CASB.json index 239a419318..e65d75b210 100644 --- a/DataConnectors/Forcepoint CASB.json +++ b/DataConnectors/Forcepoint CASB.json @@ -1,137 +1,138 @@ { - "id": "Forcepoint", - "title": "Forcepoint CASB (Preview)", - "publisher": "Forcepoint CASB", - "descriptionMarkdown": "The Forcepoint CASB (Cloud Access Security Broker) Connector allows you to automatically export CASB logs and events into Azure Sentinel in real-time. This enriches visibility into user activities across locations and cloud applications, enables further correlation with data from Azure workloads and other feeds, and improves monitoring capability with Workbooks inside Azure Sentinel.", - "graphQueries": [ - { - "metricName": "Total data received", - "legend": "ForcepointCASB", - "baseQuery": "\nCommonSecurityLog\n| where DeviceVendor == \"Forcepoint CASB\"\n" - } - ], - "sampleQueries": [ - { - "description" : "Top 5 Users With The Highest Number Of Logs", - "query": "CommonSecurityLog \n| summarize Count = count() by DestinationUserName\n| top 5 by DestinationUserName\n| render barchart" - }, - { - "description" : "Top 5 Users by Number of Failed Attempts ", - "query": "CommonSecurityLog \n| extend outcome = split(split(AdditionalExtensions, \";\", 2)[0], \"=\", 1)[0]\n| extend reason = split(split(AdditionalExtensions, \";\", 3)[0], \"=\", 1)[0]\n| where outcome ==\"Failure\"\n| summarize Count= count() by DestinationUserName\n| render barchart" - } - ], - "dataTypes": [ - { - "name": "CommonSecurityLog (ForcepointCASB)", - "lastDataReceivedQuery": "\nCommonSecurityLog\n| where DeviceVendor == \"Forcepoint CASB\"\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" - } - ], - "connectivityCriterias": [ - { - "type": "IsConnectedQuery", - "value": [ - "\nCommonSecurityLog\n| where DeviceVendor == \"Forcepoint CASB\"\n | summarize LastLogReceived = max(TimeGenerated)\n | project IsConnected = LastLogReceived > ago(30d)" - ] - } - ], - "availability": { - "status": 1, - "isPreview": true - }, - "permissions": { - "resourceProvider": [ - { - "provider": "Microsoft.OperationalInsights/workspaces", - "permissionsDisplayText": "read and write permissions are required.", - "providerDisplayName": "Workspace", - "scope": "Workspace", - "requiredPermissions": { - "read": true, - "write": true, - "delete": true - } - }, - { - "provider": "Microsoft.OperationalInsights/workspaces/sharedKeys", - "permissionsDisplayText": "read permissions to shared keys for the workspace are required. [See the documentation to learn more about workspace keys](https://docs.microsoft.com/azure/azure-monitor/platform/agent-windows#obtain-workspace-id-and-key).", - "providerDisplayName": "Keys", - "scope": "Workspace", - "requiredPermissions": { - "action": true - } - } - ] - }, - "instructionSteps": [ - { - "title": "1. Linux Syslog agent configuration", - "description": "Install and configure the Linux agent to collect your Common Event Format (CEF) Syslog messages and forward them to Azure Sentinel.\n\n> Notice that the data from all regions will be stored in the selected workspace", - "innerSteps": [ - { - "title": "1.1 Select or create a Linux machine", - "description": "Select or create a Linux machine that Azure Sentinel will use as the proxy between your security solution and Azure Sentinel. This machine can be on your on-prem environment, Azure or other clouds." - }, - { - "title": "1.2 Install the CEF collector on the Linux machine", - "description": "Install the Microsoft Monitoring Agent on your Linux machine and configure the machine to listen on the necessary port and forward messages to your Azure Sentinel workspace. The CEF collector collects CEF messages on port 514 TCP.\n\n> 1. Make sure that you have Python on your machine using the following command: python -version.\n\n> 2. You must have elevated permissions (sudo) on your machine.", - "instructions": [ - { - "parameters": { - "fillWith": [ - "WorkspaceId", - "PrimaryKey" - ], - "label": "Run the following command to install and apply the CEF collector:", - "value": "sudo wget -O cef_installer.py https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/DataConnectors/CEF/cef_installer.py&&sudo python cef_installer.py {0} {1}" - }, - "type": "CopyableLabel" - } - ] - } - ] - }, - { - "title": "2. Forward Common Event Format (CEF) logs to Syslog agent", - "description": "Set your security solution to send Syslog messages in CEF format to the proxy machine. Make sure you to send the logs to port 514 TCP on the machine's IP address." - }, - { - "title": "3. Validate connection", - "description": "Follow the instructions to validate your connectivity:\n\nOpen Log Analytics to check if the logs are received using the CommonSecurityLog schema.\n\n>It may take about 20 minutes until the connection streams data to your workspace.\n\nIf the logs are not received, run the following connectivity validation script:\n\n> 1. Make sure that you have Python on your machine using the following command: python -version \n \n>2. You must have elevated permissions (sudo) on your machine", - "instructions": [ - { - "parameters": { - "fillWith": [ - "WorkspaceId" - ], - "label": "Run the following command to validate your connectivity:", - "value": "sudo wget -O cef_troubleshoot.py https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/DataConnectors/CEF/cef_troubleshoot.py&&sudo python cef_troubleshoot.py {0}" - }, - "type": "CopyableLabel" - } - ] - }, - { - "title": "4. Secure your machine ", - "description": "Make sure to configure the machine's security according to your organization's security policy\n\n\n[Learn more >](https://aka.ms/SecureCEF)" - }, - { "title": "5. Forcepoint integration installation guide ", - "description": "To complete the installation of this Forcepoint product integration, follow the guide linked below.\n\n[Installation Guide >](https://frcpnt.com/casb-sentinel)" - } - ], - "metadata": { - "id": "04f93db2-8f2a-4edc-bb78-9e1e7587faff", - "version": "1.0.0", - "kind": "dataConnector", - "source": { - "kind": "community" - }, - "author": { - "name": "Forcepoint" - }, - "support": { - "name": "Forcepoint", - "link": "https://support.forcepoint.com", - "tier": "developer" - } + "id": "Forcepoint", + "title": "Forcepoint CASB (Preview)", + "publisher": "Forcepoint CASB", + "descriptionMarkdown": "The Forcepoint CASB (Cloud Access Security Broker) Connector allows you to automatically export CASB logs and events into Azure Sentinel in real-time. This enriches visibility into user activities across locations and cloud applications, enables further correlation with data from Azure workloads and other feeds, and improves monitoring capability with Workbooks inside Azure Sentinel.", + "graphQueries": [ + { + "metricName": "Total data received", + "legend": "ForcepointCASB", + "baseQuery": "\nCommonSecurityLog\n| where DeviceVendor == \"Forcepoint CASB\"\n" } -} + ], + "sampleQueries": [ + { + "description": "Top 5 Users With The Highest Number Of Logs", + "query": "CommonSecurityLog \n| summarize Count = count() by DestinationUserName\n| top 5 by DestinationUserName\n| render barchart" + }, + { + "description": "Top 5 Users by Number of Failed Attempts ", + "query": "CommonSecurityLog \n| extend outcome = coalesce(column_ifexists(\"EventOutcome\", \"\"), tostring(split(split(AdditionalExtensions, \";\", 2)[0], \"=\", 1)[0]), \"\")\n| extend reason = coalesce(column_ifexists(\"Reason\", \"\"), tostring(split(split(AdditionalExtensions, \";\", 3)[0], \"=\", 1)[0]), \"\")\n| where outcome ==\"Failure\"\n| summarize Count= count() by DestinationUserName\n| render barchart" + } + ], + "dataTypes": [ + { + "name": "CommonSecurityLog (ForcepointCASB)", + "lastDataReceivedQuery": "\nCommonSecurityLog\n| where DeviceVendor == \"Forcepoint CASB\"\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriterias": [ + { + "type": "IsConnectedQuery", + "value": [ + "\nCommonSecurityLog\n| where DeviceVendor == \"Forcepoint CASB\"\n | summarize LastLogReceived = max(TimeGenerated)\n | project IsConnected = LastLogReceived > ago(30d)" + ] + } + ], + "availability": { + "status": 1, + "isPreview": true + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "read and write permissions are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "read": true, + "write": true, + "delete": true + } + }, + { + "provider": "Microsoft.OperationalInsights/workspaces/sharedKeys", + "permissionsDisplayText": "read permissions to shared keys for the workspace are required. [See the documentation to learn more about workspace keys](https://docs.microsoft.com/azure/azure-monitor/platform/agent-windows#obtain-workspace-id-and-key).", + "providerDisplayName": "Keys", + "scope": "Workspace", + "requiredPermissions": { + "action": true + } + } + ] + }, + "instructionSteps": [ + { + "title": "1. Linux Syslog agent configuration", + "description": "Install and configure the Linux agent to collect your Common Event Format (CEF) Syslog messages and forward them to Azure Sentinel.\n\n> Notice that the data from all regions will be stored in the selected workspace", + "innerSteps": [ + { + "title": "1.1 Select or create a Linux machine", + "description": "Select or create a Linux machine that Azure Sentinel will use as the proxy between your security solution and Azure Sentinel. This machine can be on your on-prem environment, Azure or other clouds." + }, + { + "title": "1.2 Install the CEF collector on the Linux machine", + "description": "Install the Microsoft Monitoring Agent on your Linux machine and configure the machine to listen on the necessary port and forward messages to your Azure Sentinel workspace. The CEF collector collects CEF messages on port 514 TCP.\n\n> 1. Make sure that you have Python on your machine using the following command: python -version.\n\n> 2. You must have elevated permissions (sudo) on your machine.", + "instructions": [ + { + "parameters": { + "fillWith": [ + "WorkspaceId", + "PrimaryKey" + ], + "label": "Run the following command to install and apply the CEF collector:", + "value": "sudo wget -O cef_installer.py https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/DataConnectors/CEF/cef_installer.py&&sudo python cef_installer.py {0} {1}" + }, + "type": "CopyableLabel" + } + ] + } + ] + }, + { + "title": "2. Forward Common Event Format (CEF) logs to Syslog agent", + "description": "Set your security solution to send Syslog messages in CEF format to the proxy machine. Make sure you to send the logs to port 514 TCP on the machine's IP address." + }, + { + "title": "3. Validate connection", + "description": "Follow the instructions to validate your connectivity:\n\nOpen Log Analytics to check if the logs are received using the CommonSecurityLog schema.\n\n>It may take about 20 minutes until the connection streams data to your workspace.\n\nIf the logs are not received, run the following connectivity validation script:\n\n> 1. Make sure that you have Python on your machine using the following command: python -version \n \n>2. You must have elevated permissions (sudo) on your machine", + "instructions": [ + { + "parameters": { + "fillWith": [ + "WorkspaceId" + ], + "label": "Run the following command to validate your connectivity:", + "value": "sudo wget -O cef_troubleshoot.py https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/DataConnectors/CEF/cef_troubleshoot.py&&sudo python cef_troubleshoot.py {0}" + }, + "type": "CopyableLabel" + } + ] + }, + { + "title": "4. Secure your machine ", + "description": "Make sure to configure the machine's security according to your organization's security policy\n\n\n[Learn more >](https://aka.ms/SecureCEF)" + }, + { + "title": "5. Forcepoint integration installation guide ", + "description": "To complete the installation of this Forcepoint product integration, follow the guide linked below.\n\n[Installation Guide >](https://frcpnt.com/casb-sentinel)" + } + ], + "metadata": { + "id": "04f93db2-8f2a-4edc-bb78-9e1e7587faff", + "version": "1.0.0", + "kind": "dataConnector", + "source": { + "kind": "community" + }, + "author": { + "name": "Forcepoint" + }, + "support": { + "name": "Forcepoint", + "link": "https://support.forcepoint.com", + "tier": "developer" + } + } +} \ No newline at end of file diff --git a/Workbooks/ForcepointCASB.json b/Workbooks/ForcepointCASB.json index 93dbe3bd29..b3a9350c6e 100644 --- a/Workbooks/ForcepointCASB.json +++ b/Workbooks/ForcepointCASB.json @@ -12,7 +12,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "CommonSecurityLog \r\n| where TimeGenerated <= now()\r\n| extend outcome = split(split(AdditionalExtensions, \";\", 2)[0], \"=\", 1)[0]\r\n| extend reason = split(split(AdditionalExtensions, \";\", 3)[0], \"=\", 1)[0]\r\n| where DeviceVendor == \"Forcepoint CASB\"\r\n| where DeviceProduct in (\"SaaS Security Gateway\", \"Cloud Service Monitoring\", \"CASB Admin audit log\")\r\n| where outcome ==\"Failure\" \r\n| summarize Count= count() by DestinationUserName| render barchart", + "query": "CommonSecurityLog \r\n| where TimeGenerated <= now()\r\n| extend outcome = coalesce(\r\n column_ifexists(\"EventOutcome\", \"\"),\r\n split(split(AdditionalExtensions, \";\", 2)[0], \"=\", 1)[0],\r\n \"\"\r\n )\r\n| extend reason = coalesce(\r\n column_ifexists(\"Reason\", \"\"),\r\n split(split(AdditionalExtensions, \";\", 3)[0], \"=\", 1)[0],\r\n \"\"\r\n )\r\n| where DeviceVendor == \"Forcepoint CASB\"\r\n| where DeviceProduct in (\"SaaS Security Gateway\", \"Cloud Service Monitoring\", \"CASB Admin audit log\")\r\n| where outcome ==\"Failure\" \r\n| summarize Count= count() by DestinationUserName| render barchart", "size": 0, "timeContext": { "durationMs": 2592000000 @@ -44,5 +44,9 @@ "name": "query - 4" } ], + "fallbackResourceIds": [ + "/subscriptions/4383ac89-7cd1-48c1-8061-b0b3c5ccfd97/resourcegroups/cattesting/providers/microsoft.operationalinsights/workspaces/cat-loganalytics" + ], + "fromTemplateId": "sentinel-UserWorkbook", "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json" } \ No newline at end of file From 2ceac2a64aabea6b2d1705849705463f991a72a5 Mon Sep 17 00:00:00 2001 From: Devika Mehra Date: Tue, 17 May 2022 18:56:25 +0530 Subject: [PATCH 2/9] OneIdentity Solution modified. --- Parsers/OneIdentity_Safeguard.txt | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/Parsers/OneIdentity_Safeguard.txt b/Parsers/OneIdentity_Safeguard.txt index 1af1be1bc9..ce4ef95cbc 100644 --- a/Parsers/OneIdentity_Safeguard.txt +++ b/Parsers/OneIdentity_Safeguard.txt @@ -33,27 +33,39 @@ // cs20=https://10.10.10.10/reviews?id\=507-79-38-8826-1-AC1F6B720404-1090 cs21label=SessionSpsNodeIpAddress cs21= cs22label=TicketNumber cs22= cs23label=WasCheckedOut cs23=False // // -CommonSecurityLog +CommonSecurityLog | where DeviceVendor == "OneIdentity" | extend extensionData = split(AdditionalExtensions,";") -| extend EventUserId = DeviceCustomNumber1 +| extend EventUserId = coalesce( + column_ifexists("FieldDeviceCustomNumber1", int(null)), + DeviceCustomNumber1 + ) | extend EventUserDisplayName = DeviceCustomString1 | extend EventUserDomainName = DeviceCustomString2 | extend AccessRequestType = DeviceCustomString3 | extend AccountDistinguishedName = DeviceCustomString4 | extend AccountDomainName = DeviceCustomString5 -| extend AccountId = DeviceCustomNumber2 +| extend AccountId = coalesce( + column_ifexists("FieldDeviceCustomNumber2", int(null)), + DeviceCustomNumber2 + ) | extend AccountName = DeviceCustomString6 | extend ApproverAccessRequestUri = extract(@"(=)(\S*)",2,tostring(extensionData[9])) -| extend AssetId = DeviceCustomNumber3 +| extend AssetId = coalesce( + column_ifexists("FieldDeviceCustomNumber3", int(null)), + DeviceCustomNumber3 + ) | extend AssetName = extract(@"(=)(\S*)",2,tostring(extensionData[12])) | extend AssetNetworkAddress = extract(@"(=)(\S*)",2,tostring(extensionData[14])) | extend AssetPlatformType = extract(@"(=)(\S*)",2,tostring(extensionData[16])) | extend Comment = extract(@"(=)(\S*)",2,tostring(extensionData[18])) | extend DurationInMinutes = extract(@"(=)(\S*)",2,tostring(extensionData[20])) | extend OfflineWorkflowMode = extract(@"(=)(\S*)",2,tostring(extensionData[22])) -| extend Reason = extract(@"(=)(\S*)",2,tostring(extensionData[24])) +| extend Reason = coalesce( + extract(@"(=)(\S*)",2,tostring(extensionData[24])), + column_ifexists("Reason", "") + ) | extend ReasonCode = extract(@"(=)(\S*)",2,tostring(extensionData[26])) | extend Requester = extract(@"(=)(\S*)",2,tostring(extensionData[28])) | extend RequesterAccessRequestUri = extract(@"(=)(\S*)",2,tostring(extensionData[30])) -| project-away extensionData,AdditionalExtensions +| project-away extensionData,AdditionalExtensions \ No newline at end of file From 15b547d45e8e803510bb162689193829340df576 Mon Sep 17 00:00:00 2001 From: Devika Mehra Date: Tue, 17 May 2022 19:05:44 +0530 Subject: [PATCH 3/9] ExtraHop Networks Solution updated. --- Workbooks/ExtraHopDetectionSummary.json | 32 ++++--------------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/Workbooks/ExtraHopDetectionSummary.json b/Workbooks/ExtraHopDetectionSummary.json index 2a0cdecad1..40c735ab5f 100644 --- a/Workbooks/ExtraHopDetectionSummary.json +++ b/Workbooks/ExtraHopDetectionSummary.json @@ -12,8 +12,6 @@ "type": 9, "content": { "version": "KqlParameterItem/1.0", - "query": "", - "crossComponentResources": [], "parameters": [ { "id": "2b036d8d-8429-40a5-a5f4-8f7473738749", @@ -88,13 +86,9 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "CommonSecurityLog\n| where DeviceVendor == \"ExtraHop\"\n| extend detectionID = DeviceCustomNumber1\n| extend StartTime = extract(\"start=([0-9-]+T[0-9:.]+Z)\", 1, AdditionalExtensions,typeof(datetime))\n| summarize arg_min(todatetime(ReceiptTime), *) by detectionID\n| summarize count(detectionID) by Activity, bin(make_datetime(ReceiptTime), 1h)\n", + "query": "CommonSecurityLog\n| where DeviceVendor == \"ExtraHop\"\n| extend DeviceCustomNumber1 = coalesce(column_ifexists(\"FieldDeviceCustomNumber1\", int(null)),DeviceCustomNumber1)\n| extend detectionID = DeviceCustomNumber1\n| extend StartTime = extract(\"start=([0-9-]+T[0-9:.]+Z)\", 1, AdditionalExtensions,typeof(datetime))\n| summarize arg_min(todatetime(ReceiptTime), *) by detectionID\n| summarize count(detectionID) by Activity, bin(make_datetime(ReceiptTime), 1h)\n", "size": 0, - "exportToExcelOptions": "visible", "title": "Detections by Recently Updated", - "timeContext": { - "durationMs": 0 - }, "timeContextFromParameter": "query_times", "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", @@ -124,13 +118,9 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "let category_map = dynamic(\n{\n \"sec.action\" : \"Actions on Objective\",\n \"sec.caution\": \"Caution\",\n \"sec.command\": \"Command and Control\",\n \"sec.exploit\": \"Exploitation\",\n \"sec.lateral\": \"Lateral Movement\",\n \"sec.recon\": \"Reconnaissance\"\n }\n);\nCommonSecurityLog\n| where DeviceVendor == \"ExtraHop\"\n| extend categories = iif(DeviceCustomString2 != \"\", split(DeviceCustomString2, \",\"),dynamic(null))\n| extend detectionID = DeviceCustomNumber1\n| project detectionID, updateTime=todatetime(ReceiptTime), categories\n| summarize arg_max(updateTime, *) by detectionID\n| sort by detectionID desc \n| where isnotnull(categories)\n| mv-expand cat=categories to typeof(string) \n| summarize count() by cat\n| project Category=tostring(category_map[cat]), Count=count_\n| where Category != \"\"", + "query": "let category_map = dynamic(\n{\n \"sec.action\" : \"Actions on Objective\",\n \"sec.caution\": \"Caution\",\n \"sec.command\": \"Command and Control\",\n \"sec.exploit\": \"Exploitation\",\n \"sec.lateral\": \"Lateral Movement\",\n \"sec.recon\": \"Reconnaissance\"\n }\n);\nCommonSecurityLog\n| where DeviceVendor == \"ExtraHop\"\n| extend DeviceCustomNumber1 = coalesce(column_ifexists(\"FieldDeviceCustomNumber1\", int(null)),DeviceCustomNumber1)\n| extend categories = iif(DeviceCustomString2 != \"\", split(DeviceCustomString2, \",\"),dynamic(null))\n| extend detectionID = DeviceCustomNumber1\n| project detectionID, updateTime=todatetime(ReceiptTime), categories\n| summarize arg_max(updateTime, *) by detectionID\n| sort by detectionID desc \n| where isnotnull(categories)\n| mv-expand cat=categories to typeof(string)\n| extend cat = coalesce(column_ifexists(\"DeviceEventCategory\",\"\"),cat) \n| summarize count() by cat\n| project Category=tostring(category_map[cat]), Count=count_\n| where Category != \"\"", "size": 0, - "exportToExcelOptions": "visible", "title": "Detections by Category", - "timeContext": { - "durationMs": 0 - }, "timeContextFromParameter": "query_times", "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", @@ -143,13 +133,9 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "let ExtraHopDetections = materialize(CommonSecurityLog\n | where DeviceVendor == \"ExtraHop\"\n | extend detectionID = DeviceCustomNumber1\n | extend StartTime = extract(\"start=([0-9-]+T[0-9:.]+Z)\", 1, AdditionalExtensions,typeof(datetime))\n | project SourceIP, DestinationIP, detectionID, StartTime\n | summarize arg_max(todatetime(StartTime), *) by detectionID\n | sort by detectionID desc);\nlet t1 = ExtraHopDetection | where SourceIP != \"\" | summarize dcount=dcount(detectionID) by SourceIP | project IPAddress=SourceIP, dcount;\nlet t2 = ExtraHopDetection | where DestinationIP != \"\" | summarize dcount=dcount(detectionID) by DestinationIP | project IPAddress=DestinationIP, dcount;\nt1 | union t2 | summarize Count=sum(dcount) by [\"IP Address\"]=IPAddress | top 10 by Count desc", + "query": "let ExtraHopDetections = materialize(CommonSecurityLog\n | where DeviceVendor == \"ExtraHop\"\n | extend DeviceCustomNumber1 = coalesce(column_ifexists(\"FieldDeviceCustomNumber1\", int(null)),DeviceCustomNumber1)\n | extend detectionID = DeviceCustomNumber1\n | extend StartTime = extract(\"start=([0-9-]+T[0-9:.]+Z)\", 1, AdditionalExtensions,typeof(datetime))\n | project SourceIP, DestinationIP, detectionID, StartTime\n | summarize arg_max(todatetime(StartTime), *) by detectionID\n | sort by detectionID desc);\nlet t1 = ExtraHopDetection | where SourceIP != \"\" | summarize dcount=dcount(detectionID) by SourceIP | project IPAddress=SourceIP, dcount;\nlet t2 = ExtraHopDetection | where DestinationIP != \"\" | summarize dcount=dcount(detectionID) by DestinationIP | project IPAddress=DestinationIP, dcount;\nt1 | union t2 | summarize Count=sum(dcount) by [\"IP Address\"]=IPAddress | top 10 by Count desc", "size": 0, - "exportToExcelOptions": "visible", "title": "Top Participants", - "timeContext": { - "durationMs": 0 - }, "timeContextFromParameter": "query_times", "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces" @@ -161,13 +147,9 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "CommonSecurityLog\n | where DeviceVendor == \"ExtraHop\"\n | extend StartTime = extract(\"start=([0-9-]+T[0-9:.]+Z)\", 1, AdditionalExtensions,typeof(datetime))\n | extend detectionID = DeviceCustomNumber1\n | summarize arg_max(todatetime(StartTime), *) by detectionID\n | summarize Count=count() by Activity\n | sort by Count desc, Activity asc\n | project-rename [\"Detection Title\"]=Activity", + "query": "CommonSecurityLog\n | where DeviceVendor == \"ExtraHop\"\n | extend DeviceCustomNumber1 = coalesce(column_ifexists(\"FieldDeviceCustomNumber1\", int(null)),DeviceCustomNumber1)\n | extend StartTime = extract(\"start=([0-9-]+T[0-9:.]+Z)\", 1, AdditionalExtensions,typeof(datetime))\n | extend detectionID = DeviceCustomNumber1\n | summarize arg_max(todatetime(StartTime), *) by detectionID\n | summarize Count=count() by Activity\n | sort by Count desc, Activity asc\n | project-rename [\"Detection Title\"]=Activity", "size": 0, - "exportToExcelOptions": "visible", "title": "Top Detections by Title", - "timeContext": { - "durationMs": 0 - }, "timeContextFromParameter": "query_times", "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces" @@ -179,13 +161,9 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "CommonSecurityLog\n| where DeviceVendor == \"ExtraHop\"\n| summarize arg_max(ReceiptTime, *) by DeviceCustomNumber1 // detection ID\n| sort by DeviceCustomNumber2 // risk score\n| project [\"Risk Score\"] = DeviceCustomNumber2,\nTitle=Activity, \nSourceIP,\nDestinationIP,\n[\"Last Updated\"]=format_datetime(make_datetime(ReceiptTime), 'M/d/yyyy HH:mm:ss'),\nID=DeviceCustomNumber1,\nURI=DeviceCustomString1\n| take 10\n", + "query": "CommonSecurityLog\n| where DeviceVendor == \"ExtraHop\"\n| extend DeviceCustomNumber1 = coalesce(column_ifexists(\"FieldDeviceCustomNumber1\", int(null)),DeviceCustomNumber1),\n DeviceCustomNumber2 = coalesce(column_ifexists(\"FieldDeviceCustomNumber2\", int(null)),DeviceCustomNumber2)\n| summarize arg_max(ReceiptTime, *) by DeviceCustomNumber1 // detection ID\n| sort by DeviceCustomNumber2 // risk score\n| project [\"Risk Score\"] = DeviceCustomNumber2,\nTitle=Activity, \nSourceIP,\nDestinationIP,\n[\"Last Updated\"]=format_datetime(make_datetime(ReceiptTime), 'M/d/yyyy HH:mm:ss'),\nID=DeviceCustomNumber1,\nURI=DeviceCustomString1\n| take 10\n", "size": 0, - "exportToExcelOptions": "visible", "title": "Top Ten Detections by Highest Risk Score", - "timeContext": { - "durationMs": 0 - }, "timeContextFromParameter": "query_times", "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces" From 2866df3f2835ca8777a7a4583b3089be52b34413 Mon Sep 17 00:00:00 2001 From: Devika Mehra Date: Tue, 17 May 2022 19:09:05 +0530 Subject: [PATCH 4/9] Removed fallbackResourceIds parameter --- Workbooks/ForcepointCASB.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Workbooks/ForcepointCASB.json b/Workbooks/ForcepointCASB.json index b3a9350c6e..77e75b48a7 100644 --- a/Workbooks/ForcepointCASB.json +++ b/Workbooks/ForcepointCASB.json @@ -44,9 +44,5 @@ "name": "query - 4" } ], - "fallbackResourceIds": [ - "/subscriptions/4383ac89-7cd1-48c1-8061-b0b3c5ccfd97/resourcegroups/cattesting/providers/microsoft.operationalinsights/workspaces/cat-loganalytics" - ], - "fromTemplateId": "sentinel-UserWorkbook", "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json" } \ No newline at end of file From ccd43effdbc96776952bc26111e6e8cf0931fc32 Mon Sep 17 00:00:00 2001 From: Devika Mehra Date: Tue, 17 May 2022 19:15:22 +0530 Subject: [PATCH 5/9] Forcepoint CASB added Template parameter --- Workbooks/ForcepointCASB.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Workbooks/ForcepointCASB.json b/Workbooks/ForcepointCASB.json index 77e75b48a7..02133078b4 100644 --- a/Workbooks/ForcepointCASB.json +++ b/Workbooks/ForcepointCASB.json @@ -44,5 +44,7 @@ "name": "query - 4" } ], + "styleSettings": {}, + "fromTemplateId": "sentinel-ForcepointCASB", "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json" } \ No newline at end of file From 35b489b90e4247dfe2d93e1b66559f1a02d4a8f3 Mon Sep 17 00:00:00 2001 From: Devika Mehra Date: Tue, 17 May 2022 20:36:45 +0530 Subject: [PATCH 6/9] Modified ExtraHopDetectionSummary.json --- Workbooks/ExtraHopDetectionSummary.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Workbooks/ExtraHopDetectionSummary.json b/Workbooks/ExtraHopDetectionSummary.json index 40c735ab5f..be9c06e876 100644 --- a/Workbooks/ExtraHopDetectionSummary.json +++ b/Workbooks/ExtraHopDetectionSummary.json @@ -86,7 +86,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "CommonSecurityLog\n| where DeviceVendor == \"ExtraHop\"\n| extend DeviceCustomNumber1 = coalesce(column_ifexists(\"FieldDeviceCustomNumber1\", int(null)),DeviceCustomNumber1)\n| extend detectionID = DeviceCustomNumber1\n| extend StartTime = extract(\"start=([0-9-]+T[0-9:.]+Z)\", 1, AdditionalExtensions,typeof(datetime))\n| summarize arg_min(todatetime(ReceiptTime), *) by detectionID\n| summarize count(detectionID) by Activity, bin(make_datetime(ReceiptTime), 1h)\n", + "query": "CommonSecurityLog\n| where DeviceVendor == \"ExtraHop\"\n| extend DeviceCustomNumber1 = coalesce(column_ifexists(\"FieldDeviceCustomNumber1\", int(null)),DeviceCustomNumber1)\n| extend detectionID = DeviceCustomNumber1\n| extend StartTime = coalesce(\n column_ifexists(\"StartTime\", datetime(null)),\n extract(\"start=([0-9-]+T[0-9:.]+Z)\", 1, AdditionalExtensions,typeof(datetime)),\n datetime(null)\n )\n| summarize arg_min(todatetime(ReceiptTime), *) by detectionID\n| summarize count(detectionID) by Activity, bin(make_datetime(ReceiptTime), 1h)\n", "size": 0, "title": "Detections by Recently Updated", "timeContextFromParameter": "query_times", @@ -133,7 +133,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "let ExtraHopDetections = materialize(CommonSecurityLog\n | where DeviceVendor == \"ExtraHop\"\n | extend DeviceCustomNumber1 = coalesce(column_ifexists(\"FieldDeviceCustomNumber1\", int(null)),DeviceCustomNumber1)\n | extend detectionID = DeviceCustomNumber1\n | extend StartTime = extract(\"start=([0-9-]+T[0-9:.]+Z)\", 1, AdditionalExtensions,typeof(datetime))\n | project SourceIP, DestinationIP, detectionID, StartTime\n | summarize arg_max(todatetime(StartTime), *) by detectionID\n | sort by detectionID desc);\nlet t1 = ExtraHopDetection | where SourceIP != \"\" | summarize dcount=dcount(detectionID) by SourceIP | project IPAddress=SourceIP, dcount;\nlet t2 = ExtraHopDetection | where DestinationIP != \"\" | summarize dcount=dcount(detectionID) by DestinationIP | project IPAddress=DestinationIP, dcount;\nt1 | union t2 | summarize Count=sum(dcount) by [\"IP Address\"]=IPAddress | top 10 by Count desc", + "query": "let ExtraHopDetections = materialize(CommonSecurityLog\n | where DeviceVendor == \"ExtraHop\"\n | extend DeviceCustomNumber1 = coalesce(column_ifexists(\"FieldDeviceCustomNumber1\", int(null)),DeviceCustomNumber1)\n | extend detectionID = DeviceCustomNumber1\n | extend StartTime = coalesce(\n column_ifexists(\"StartTime\", datetime(null)),\n extract(\"start=([0-9-]+T[0-9:.]+Z)\", 1, AdditionalExtensions,typeof(datetime)),\n datetime(null)\n )\n | project SourceIP, DestinationIP, detectionID, StartTime\n | summarize arg_max(todatetime(StartTime), *) by detectionID\n | sort by detectionID desc);\nlet t1 = ExtraHopDetections | where SourceIP != \"\" | summarize dcount=dcount(detectionID) by SourceIP | project IPAddress=SourceIP, dcount;\nlet t2 = ExtraHopDetections | where DestinationIP != \"\" | summarize dcount=dcount(detectionID) by DestinationIP | project IPAddress=DestinationIP, dcount;\nt1 | union t2 | summarize Count=sum(dcount) by [\"IP Address\"]=IPAddress | top 10 by Count desc", "size": 0, "title": "Top Participants", "timeContextFromParameter": "query_times", @@ -147,7 +147,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "CommonSecurityLog\n | where DeviceVendor == \"ExtraHop\"\n | extend DeviceCustomNumber1 = coalesce(column_ifexists(\"FieldDeviceCustomNumber1\", int(null)),DeviceCustomNumber1)\n | extend StartTime = extract(\"start=([0-9-]+T[0-9:.]+Z)\", 1, AdditionalExtensions,typeof(datetime))\n | extend detectionID = DeviceCustomNumber1\n | summarize arg_max(todatetime(StartTime), *) by detectionID\n | summarize Count=count() by Activity\n | sort by Count desc, Activity asc\n | project-rename [\"Detection Title\"]=Activity", + "query": "CommonSecurityLog\n | where DeviceVendor == \"ExtraHop\"\n | extend DeviceCustomNumber1 = coalesce(column_ifexists(\"FieldDeviceCustomNumber1\", int(null)),DeviceCustomNumber1)\n | extend StartTime = coalesce(\n column_ifexists(\"StartTime\", datetime(null)),\n extract(\"start=([0-9-]+T[0-9:.]+Z)\", 1, AdditionalExtensions,typeof(datetime)),\n datetime(null)\n )\n | extend detectionID = DeviceCustomNumber1\n | summarize arg_max(todatetime(StartTime), *) by detectionID\n | summarize Count=count() by Activity\n | sort by Count desc, Activity asc\n | project-rename [\"Detection Title\"]=Activity", "size": 0, "title": "Top Detections by Title", "timeContextFromParameter": "query_times", From 67419ace11cafa616fe659f5be507e421290276f Mon Sep 17 00:00:00 2001 From: Devika Mehra Date: Tue, 17 May 2022 20:58:49 +0530 Subject: [PATCH 7/9] Removed stype parameter --- Workbooks/ExtraHopDetectionSummary.json | 1 - Workbooks/ForcepointCASB.json | 1 - 2 files changed, 2 deletions(-) diff --git a/Workbooks/ExtraHopDetectionSummary.json b/Workbooks/ExtraHopDetectionSummary.json index be9c06e876..fe99354ede 100644 --- a/Workbooks/ExtraHopDetectionSummary.json +++ b/Workbooks/ExtraHopDetectionSummary.json @@ -171,7 +171,6 @@ "name": "top-ten-by-risk" } ], - "styleSettings": {}, "fromTemplateId": "sentinel-ExtraHop", "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json" } \ No newline at end of file diff --git a/Workbooks/ForcepointCASB.json b/Workbooks/ForcepointCASB.json index 02133078b4..54f7b6c169 100644 --- a/Workbooks/ForcepointCASB.json +++ b/Workbooks/ForcepointCASB.json @@ -44,7 +44,6 @@ "name": "query - 4" } ], - "styleSettings": {}, "fromTemplateId": "sentinel-ForcepointCASB", "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json" } \ No newline at end of file From 55f9f8ea4ab31af83e48a404a94de9ac562c43e7 Mon Sep 17 00:00:00 2001 From: Devika Mehra Date: Tue, 17 May 2022 21:21:24 +0530 Subject: [PATCH 8/9] Updated WorkbookMetadata.json --- Workbooks/WorkbooksMetadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Workbooks/WorkbooksMetadata.json b/Workbooks/WorkbooksMetadata.json index 3182fb754e..d04dc6face 100644 --- a/Workbooks/WorkbooksMetadata.json +++ b/Workbooks/WorkbooksMetadata.json @@ -487,7 +487,7 @@ "dataTypesDependencies": [ "CommonSecurityLog" ], "dataConnectorsDependencies": [ "ExtraHopNetworks" ], "previewImagesFileNames": [ "ExtrahopWhite.png", "ExtrahopBlack.png" ], - "version": "1.0.0", + "version": "1.0.1", "title": "ExtraHop", "templateRelativePath": "ExtraHopDetectionSummary.json", "subtitle": "", @@ -604,7 +604,7 @@ "dataTypesDependencies": [ "CommonSecurityLog" ], "dataConnectorsDependencies": [ "ForcepointCasb" ], "previewImagesFileNames": [ "ForcepointCASBWhite.png", "ForcepointCASBBlack.png" ], - "version": "1.0.0", + "version": "1.0.1", "title": "Forcepoint Cloud Access Security Broker (CASB)", "templateRelativePath": "ForcepointCASB.json", "subtitle": "", From a79544de14882f3806b5460be4f68d57e8a04d85 Mon Sep 17 00:00:00 2001 From: Devika Mehra Date: Wed, 18 May 2022 11:33:15 +0530 Subject: [PATCH 9/9] Update ExtraHopDetectionSummary.json Removing extra character --- Workbooks/ExtraHopDetectionSummary.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Workbooks/ExtraHopDetectionSummary.json b/Workbooks/ExtraHopDetectionSummary.json index fe99354ede..be7cdb3831 100644 --- a/Workbooks/ExtraHopDetectionSummary.json +++ b/Workbooks/ExtraHopDetectionSummary.json @@ -1,4 +1,4 @@ -{ +{ "version": "Notebook/1.0", "items": [ { @@ -173,4 +173,4 @@ ], "fromTemplateId": "sentinel-ExtraHop", "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json" -} \ No newline at end of file +}