diff --git a/Solutions/FireEyeNX/Data Connectors/Connector_FireEyeNX_CEF.json b/Solutions/FireEyeNX/Data Connectors/Connector_FireEyeNX_CEF.json new file mode 100644 index 0000000000..f1d037c44e --- /dev/null +++ b/Solutions/FireEyeNX/Data Connectors/Connector_FireEyeNX_CEF.json @@ -0,0 +1,127 @@ +{ + "id": "FireEyeNX", + "title": "FireEye Network Security (NX)", + "publisher": "FireEye", + "descriptionMarkdown": "The [FireEye Network Security (NX)](https://www.fireeye.com/products/network-security.html) data connector provides the capability to ingest FireEye Network Security logs into Azure Sentinel.", + "additionalRequirementBanner": "This data connector depends on a parser based on a Kusto Function to work as expected [**FireEyeNXEvent**](https://aka.ms/sentinel-FireEyeNX-parser) which is deployed with the Azure Sentinel Solution.", + "graphQueries": [ + { + "metricName": "Total data received", + "legend": "FireEyeNX", + "baseQuery": "FireEyeNXEvent" + } + ], + "sampleQueries": [ + { + "description" : "Top 10 Sources", + "query": "FireEyeNXEvent\n | where isnotempty(SrcIpAddr)\n | summarize count() by SrcIpAddr\n | top 10 by count_" + } + ], + "dataTypes": [ + { + "name": "CommonSecurityLog (FireEyeNX)", + "lastDataReceivedQuery": "FireEyeNXEvent\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriterias": [ + { + "type": "IsConnectedQuery", + "value": [ + "FireEyeNXEvent\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": { + "write": true, + "read": 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": "", + "description": ">**NOTE:** This data connector depends on a parser based on a Kusto Function to work as expected [**FireEyeNXEvent**](https://aka.ms/sentinel-FireEyeNX-parser) which is deployed with the Azure Sentinel Solution.", + "instructions": [ + ] + }, + { + "title": "", + "description": ">**NOTE:** This data connector has been developed using FEOS release v9.0", + "instructions": [ + ] + }, + { + "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. Configure FireEye NX to send logs using CEF", + "description": "Complete the following steps to send data using CEF:\n\n2.1. Log into the FireEye appliance with an administrator account\n\n2.2. Click **Settings**\n\n2.3. Click **Notifications**\n\nClick **rsyslog**\n\n2.4. Check the **Event type** check box\n\n2.5. Make sure Rsyslog settings are:\n\n- Default format: CEF\n\n- Default delivery: Per event\n\n- Default send as: Alert" + }, + { + "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)" + } + ] +} diff --git a/Solutions/FireEyeNX/Parsers/FireEyeNXEvent.txt b/Solutions/FireEyeNX/Parsers/FireEyeNXEvent.txt new file mode 100644 index 0000000000..653ddbaec7 --- /dev/null +++ b/Solutions/FireEyeNX/Parsers/FireEyeNXEvent.txt @@ -0,0 +1,62 @@ +// Usage Instructions: +// Paste below query in log analytics, click on Save button and select as Function from drop down by specifying function name as FireEyeNXEvent and specifying Legacy Category. +// This function maps FireEye NX events to normalization schema (https://docs.microsoft.com/azure/sentinel/normalization-schema). +// Function usually takes 10-15 minutes to activate. You can then use function alias from any other queries (e.g. FireEyeNXEvent | take 10). +// Reference : Using functions in Azure monitor log queries : https://docs.microsoft.com/azure/azure-monitor/log-query/functions +CommonSecurityLog +| where DeviceVendor =~ 'FireEye' +| extend packed = pack(DeviceCustomNumber1Label, DeviceCustomNumber1 + , DeviceCustomNumber2Label, DeviceCustomNumber2 + , DeviceCustomNumber3Label, DeviceCustomNumber3 + , DeviceCustomString1Label, DeviceCustomString1 + , DeviceCustomString2Label, DeviceCustomString2 + , DeviceCustomString3Label, DeviceCustomString3 + , DeviceCustomString4Label, DeviceCustomString4 + , DeviceCustomString5Label, DeviceCustomString5 + , DeviceCustomString6Label, DeviceCustomString6 + , DeviceCustomDate1Label, DeviceCustomDate1 + , DeviceCustomDate2Label, DeviceCustomDate2) +| evaluate bag_unpack(packed) +| project-rename EventVendor=DeviceVendor + , EventProduct=DeviceProduct + , EventProductVersion=DeviceVersion + , EventId=DeviceEventClassID + , EventSeverity=LogSeverity + , DstPortNumber=DestinationPort + , DstIpAddr=DestinationIP + , DvcIpAddr=DeviceAddress + , DvcHostname=DeviceName + , NetworkApplicationProtocol=Protocol + , SrcPortNumber=SourcePort + , SrcIpAddr=SourceIP + , DstMacAddr=DestinationMACAddress + , Id=ExternalID + , SrcDvcHostname=SourceHostName + , SrcMacAddr=SourceMACAddress + , ThreatName=anomaly + , OsInfo=osinfo + , Malware=sname + , Vlan=vlan + , IncidentUrl=link +| extend EventType=Activity +| extend EventTimeIngested=todatetime(ReceiptTime) +| project-away Activity + , ReceiptTime + , DeviceCustomNumber1 + , DeviceCustomNumber1Label + , DeviceCustomNumber2 + , DeviceCustomNumber2Label + , DeviceCustomNumber3 + , DeviceCustomNumber3Label + , DeviceCustomString1 + , DeviceCustomString1Label + , DeviceCustomString2 + , DeviceCustomString2Label + , DeviceCustomString3 + , DeviceCustomString3Label + , DeviceCustomString4 + , DeviceCustomString4Label + , DeviceCustomString5 + , DeviceCustomString5Label + , DeviceCustomString6 + , DeviceCustomString6Label