From 516c63eb981606b5b45205f87760d2b283981b8a Mon Sep 17 00:00:00 2001 From: P4T12ICK Date: Fri, 19 May 2023 12:41:25 +0200 Subject: [PATCH 1/3] Palo Alto Firewall Outbound Traffic Filtering --- ...o_Firewall_Outbound_Traffic_Filtering.json | 285 ++++++++++++++++++ ...to_Firewall_Outbound_Traffic_Filtering.png | Bin 0 -> 43803 bytes ...lto_Firewall_Outbound_Traffic_Filtering.py | 165 ++++++++++ ...to_Firewall_Outbound_Traffic_Filtering.yml | 23 ++ 4 files changed, 473 insertions(+) create mode 100644 playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.json create mode 100644 playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.png create mode 100644 playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.py create mode 100644 playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.yml diff --git a/playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.json b/playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.json new file mode 100644 index 0000000000..bec445d891 --- /dev/null +++ b/playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.json @@ -0,0 +1,285 @@ +{ + "blockly": false, + "blockly_xml": "", + "category": "Isolation", + "coa": { + "data": { + "description": "Accepts a URL or list of URLs as input. Uses Panorama to block the given URLs in Palo Alto Firewall.\n\nhttps://d3fend.mitre.org/technique/d3f:OutboundTrafficFiltering/", + "edges": [ + { + "id": "port_0_to_port_2", + "sourceNode": "0", + "sourcePort": "0_out", + "targetNode": "2", + "targetPort": "2_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_4_to_port_5", + "sourceNode": "4", + "sourcePort": "4_out", + "targetNode": "5", + "targetPort": "5_in" + }, + { + "id": "port_5_to_port_1", + "sourceNode": "5", + "sourcePort": "5_out", + "targetNode": "1", + "targetPort": "1_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_2_to_port_7", + "sourceNode": "2", + "sourcePort": "2_out", + "targetNode": "7", + "targetPort": "7_in" + }, + { + "id": "port_7_to_port_4", + "sourceNode": "7", + "sourcePort": "7_out", + "targetNode": "4", + "targetPort": "4_in" + } + ], + "hash": "e8b14925141da56f75f4ff49e5805f2873bf31ab", + "nodes": { + "0": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_start", + "id": "0", + "type": "start" + }, + "errors": {}, + "id": "0", + "type": "start", + "warnings": {}, + "x": 19.999999999999986, + "y": -6.394884621840902e-14 + }, + "1": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_finish", + "id": "1", + "type": "end" + }, + "errors": {}, + "id": "1", + "type": "end", + "warnings": {}, + "x": 19.999999999999986, + "y": 804 + }, + "2": { + "data": { + "advanced": { + "customName": "url input filter", + "customNameId": 0, + "description": "Check if input url contains a value", + "join": [], + "note": "Check if input url contains a value" + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "!=", + "param": "playbook_input:input_url", + "value": "None" + } + ], + "conditionIndex": 0, + "customName": "input_url", + "logic": "and" + } + ], + "functionId": 1, + "functionName": "url_input_filter", + "id": "2", + "type": "filter" + }, + "errors": {}, + "id": "2", + "type": "filter", + "warnings": { + "config": [ + "Reconfigure invalid datapath." + ] + }, + "x": 60, + "y": 120 + }, + "4": { + "data": { + "advanced": { + "customName": "block url success filter", + "customNameId": 0, + "description": "Determine if the block url action was successful or not.", + "join": [], + "note": "Determine if the block url action was successful or not." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "==", + "param": "block_url:action_result.status", + "value": "success" + } + ], + "conditionIndex": 0, + "customName": "success", + "logic": "and" + } + ], + "functionId": 2, + "functionName": "block_url_success_filter", + "id": "4", + "type": "filter" + }, + "errors": {}, + "id": "4", + "type": "filter", + "warnings": {}, + "x": 60, + "y": 440 + }, + "5": { + "data": { + "advanced": { + "customName": "build observable", + "customNameId": 0, + "description": "This block uses custom code to generate a normalized observable dictionary.", + "join": [], + "note": "This block uses custom code to generate a normalized observable dictionary." + }, + "functionId": 1, + "functionName": "build_observable", + "id": "5", + "inputParameters": [ + "block_url:action_result.parameter.url", + "block_url:action_result.status" + ], + "outputVariables": [ + "observable_array" + ], + "type": "code" + }, + "errors": {}, + "id": "5", + "type": "code", + "userCode": "\n build_observable__observable_array = list()\n for status, url in zip(block_url_result_item_1, block_url_parameter_url):\n observable = {\n \"type\": \"url\",\n \"value\": url,\n \"source\": \"Panorama\",\n \"status\": status\n }\n \n build_observable__observable_array.append(observable)\n\n", + "warnings": {}, + "x": 0, + "y": 640 + }, + "7": { + "data": { + "action": "block url", + "actionType": "contain", + "advanced": { + "customName": "block_url", + "customNameId": 0, + "description": "Block urls in Panorama", + "join": [], + "note": "Block urls in Panorama" + }, + "connector": "Panorama", + "connectorConfigs": [ + "panorama" + ], + "connectorId": "3d88e427-0e61-4311-a613-bbddeac532e0", + "connectorVersion": "v1", + "functionId": 1, + "functionName": "block_url", + "id": "7", + "parameters": { + "device_group": "shared", + "should_commit_changes": true, + "url": "filtered-data:url_input_filter:condition_1:playbook_input:input_url" + }, + "requiredParameters": [ + { + "data_type": "string", + "field": "url" + }, + { + "data_type": "string", + "field": "device_group" + }, + { + "data_type": "boolean", + "default": true, + "field": "should_commit_changes" + } + ], + "type": "action" + }, + "errors": {}, + "id": "7", + "type": "action", + "warnings": {}, + "x": 0, + "y": 300 + } + }, + "notes": "Inputs: url\nInteractions: Panorama\nActions: block url\nOutputs: observables" + }, + "input_spec": [ + { + "contains": [ + "url" + ], + "description": "Accepts url and block them", + "name": "input_url" + } + ], + "output_spec": [ + { + "contains": [ + "url" + ], + "datapaths": [ + "build_observable:custom_function:observable_array" + ], + "deduplicate": false, + "description": "An array of observable dictionaries with value, type and information about the blocked urls.", + "metadata": {}, + "name": "observable" + } + ], + "playbook_type": "data", + "python_version": "3", + "schema": "5.0.9", + "version": "6.0.0.114895" + }, + "create_time": "2023-05-19T10:28:29.149331+00:00", + "draft_mode": false, + "labels": [ + "*" + ], + "tags": [ + "url", + "D3-OTF", + "denylist", + "Panorama" + ] +} \ No newline at end of file diff --git a/playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.png b/playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.png new file mode 100644 index 0000000000000000000000000000000000000000..1db237b53518d0da6a3277fba841a7c244e1fd8d GIT binary patch literal 43803 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 Date: Wed, 21 Jun 2023 11:59:22 +0200 Subject: [PATCH 2/3] Fixed based on the given feedback --- ...son => Panorama_Outbound_Traffic_Filtering.json} | 8 ++++---- ....png => Panorama_Outbound_Traffic_Filtering.png} | Bin ...ng.py => Panorama_Outbound_Traffic_Filtering.py} | 9 +++++---- ....yml => Panorama_Outbound_Traffic_Filtering.yml} | 4 ++-- 4 files changed, 11 insertions(+), 10 deletions(-) rename playbooks/{Palo_Alto_Firewall_Outbound_Traffic_Filtering.json => Panorama_Outbound_Traffic_Filtering.json} (95%) rename playbooks/{Palo_Alto_Firewall_Outbound_Traffic_Filtering.png => Panorama_Outbound_Traffic_Filtering.png} (100%) rename playbooks/{Palo_Alto_Firewall_Outbound_Traffic_Filtering.py => Panorama_Outbound_Traffic_Filtering.py} (93%) rename playbooks/{Palo_Alto_Firewall_Outbound_Traffic_Filtering.yml => Panorama_Outbound_Traffic_Filtering.yml} (86%) diff --git a/playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.json b/playbooks/Panorama_Outbound_Traffic_Filtering.json similarity index 95% rename from playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.json rename to playbooks/Panorama_Outbound_Traffic_Filtering.json index bec445d891..42e6d83e02 100644 --- a/playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.json +++ b/playbooks/Panorama_Outbound_Traffic_Filtering.json @@ -68,7 +68,7 @@ "type": "start", "warnings": {}, "x": 19.999999999999986, - "y": -6.394884621840902e-14 + "y": -1.2789769243681803e-13 }, "1": { "data": { @@ -175,7 +175,7 @@ "functionName": "build_observable", "id": "5", "inputParameters": [ - "block_url:action_result.parameter.url", + "filtered-data:url_input_filter:condition_1:playbook_input:input_url", "block_url:action_result.status" ], "outputVariables": [ @@ -186,7 +186,7 @@ "errors": {}, "id": "5", "type": "code", - "userCode": "\n build_observable__observable_array = list()\n for status, url in zip(block_url_result_item_1, block_url_parameter_url):\n observable = {\n \"type\": \"url\",\n \"value\": url,\n \"source\": \"Panorama\",\n \"status\": status\n }\n \n build_observable__observable_array.append(observable)\n\n", + "userCode": "\n build_observable__observable_array = list()\n for status, url in zip(block_url_result_item_0, filtered_input_0_input_url_values):\n observable = {\n \"type\": \"url\",\n \"value\": url,\n \"source\": \"Panorama\",\n \"status\": status\n }\n \n build_observable__observable_array.append(observable)\n\n", "warnings": {}, "x": 0, "y": 640 @@ -271,7 +271,7 @@ "schema": "5.0.9", "version": "6.0.0.114895" }, - "create_time": "2023-05-19T10:28:29.149331+00:00", + "create_time": "2023-06-21T09:55:36.545195+00:00", "draft_mode": false, "labels": [ "*" diff --git a/playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.png b/playbooks/Panorama_Outbound_Traffic_Filtering.png similarity index 100% rename from playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.png rename to playbooks/Panorama_Outbound_Traffic_Filtering.png diff --git a/playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.py b/playbooks/Panorama_Outbound_Traffic_Filtering.py similarity index 93% rename from playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.py rename to playbooks/Panorama_Outbound_Traffic_Filtering.py index 00c9cb0837..0fbbe34703 100644 --- a/playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.py +++ b/playbooks/Panorama_Outbound_Traffic_Filtering.py @@ -71,10 +71,11 @@ def build_observable(action=None, success=None, container=None, results=None, ha # This block uses custom code to generate a normalized observable dictionary. ################################################################################ - block_url_result_data = phantom.collect2(container=container, datapath=["block_url:action_result.parameter.url","block_url:action_result.status"], action_results=results) + filtered_input_0_input_url = phantom.collect2(container=container, datapath=["filtered-data:url_input_filter:condition_1:playbook_input:input_url"]) + block_url_result_data = phantom.collect2(container=container, datapath=["block_url:action_result.status"], action_results=results) - block_url_parameter_url = [item[0] for item in block_url_result_data] - block_url_result_item_1 = [item[1] for item in block_url_result_data] + filtered_input_0_input_url_values = [item[0] for item in filtered_input_0_input_url] + block_url_result_item_0 = [item[0] for item in block_url_result_data] build_observable__observable_array = None @@ -83,7 +84,7 @@ def build_observable(action=None, success=None, container=None, results=None, ha ################################################################################ build_observable__observable_array = list() - for status, url in zip(block_url_result_item_1, block_url_parameter_url): + for status, url in zip(block_url_result_item_0, filtered_input_0_input_url_values): observable = { "type": "url", "value": url, diff --git a/playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.yml b/playbooks/Panorama_Outbound_Traffic_Filtering.yml similarity index 86% rename from playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.yml rename to playbooks/Panorama_Outbound_Traffic_Filtering.yml index a74915690b..2fb4aa1a44 100644 --- a/playbooks/Palo_Alto_Firewall_Outbound_Traffic_Filtering.yml +++ b/playbooks/Panorama_Outbound_Traffic_Filtering.yml @@ -1,11 +1,11 @@ -name: Palo Alto Firewall Outbound Traffic Filtering +name: Panorama Outbound Traffic Filtering id: 5e3e061f-5206-49ac-88f4-4e818a20b2a9 version: 1 date: '2023-05-19' author: Patrick Bareiss, Splunk type: Investigation description: Accepts a URL or list of URLs as input. Uses Panorama to block the given URLs in Palo Alto Firewall. -playbook: Palo_Alto_Firewall_Outbound_Traffic_Filtering +playbook: Panorama_Outbound_Traffic_Filtering how_to_implement: This input playbook requires the Panorama connector to be configured. It is designed to work in conjunction with the Dispatch Block Known Phishing URLs or other playbooks in the same style. references: - https://d3fend.mitre.org/technique/d3f:OutboundTrafficFiltering/ From 106098d07c4b50eff3061863b5e1eb1f926bd581 Mon Sep 17 00:00:00 2001 From: P4T12ICK Date: Wed, 21 Jun 2023 16:25:04 +0200 Subject: [PATCH 3/3] Improvements --- playbooks/Panorama_Outbound_Traffic_Filtering.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/playbooks/Panorama_Outbound_Traffic_Filtering.yml b/playbooks/Panorama_Outbound_Traffic_Filtering.yml index 2fb4aa1a44..0d11b42dd0 100644 --- a/playbooks/Panorama_Outbound_Traffic_Filtering.yml +++ b/playbooks/Panorama_Outbound_Traffic_Filtering.yml @@ -3,10 +3,10 @@ id: 5e3e061f-5206-49ac-88f4-4e818a20b2a9 version: 1 date: '2023-05-19' author: Patrick Bareiss, Splunk -type: Investigation +type: Response description: Accepts a URL or list of URLs as input. Uses Panorama to block the given URLs in Palo Alto Firewall. playbook: Panorama_Outbound_Traffic_Filtering -how_to_implement: This input playbook requires the Panorama connector to be configured. It is designed to work in conjunction with the Dispatch Block Known Phishing URLs or other playbooks in the same style. +how_to_implement: This input playbook requires the Panorama connector to be configured. It is designed to work in conjunction with the Dynamic URL Outbound Traffic Filtering Analysis playbook or other playbooks in the same style. references: - https://d3fend.mitre.org/technique/d3f:OutboundTrafficFiltering/ app_list: