From c1f94d8f10e24a14c1e360532fd13208df339fb0 Mon Sep 17 00:00:00 2001 From: tccontre Date: Thu, 23 Mar 2023 11:41:42 +0100 Subject: [PATCH 01/12] urlscan_io_dynamic_analysis_playbook --- playbooks/UrlScan_IO_Dynamic_Analysis.json | 540 +++++++++++++++++++ playbooks/UrlScan_IO_Dynamic_Analysis.png | Bin 0 -> 72693 bytes playbooks/UrlScan_IO_Dynamic_Analysis.py | 598 +++++++++++++++++++++ 3 files changed, 1138 insertions(+) create mode 100644 playbooks/UrlScan_IO_Dynamic_Analysis.json create mode 100644 playbooks/UrlScan_IO_Dynamic_Analysis.png create mode 100644 playbooks/UrlScan_IO_Dynamic_Analysis.py diff --git a/playbooks/UrlScan_IO_Dynamic_Analysis.json b/playbooks/UrlScan_IO_Dynamic_Analysis.json new file mode 100644 index 0000000000..c62e170974 --- /dev/null +++ b/playbooks/UrlScan_IO_Dynamic_Analysis.json @@ -0,0 +1,540 @@ +{ + "blockly": false, + "blockly_xml": "", + "category": "Uncategorized", + "coa": { + "data": { + "description": "Accepts a URL for detonation analysis on the objects. Generates a global report and a per observable sub-report and normalized score. The score can be customized based on a variety of factors.\n\nRef: https://d3fend.mitre.org/technique/d3f:IdentifierReputationAnalysis/", + "edges": [ + { + "id": "port_0_to_port_2", + "sourceNode": "0", + "sourcePort": "0_out", + "targetNode": "2", + "targetPort": "2_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_2_to_port_3", + "sourceNode": "2", + "sourcePort": "2_out", + "targetNode": "3", + "targetPort": "3_in" + }, + { + "id": "port_3_to_port_4", + "sourceNode": "3", + "sourcePort": "3_out", + "targetNode": "4", + "targetPort": "4_in" + }, + { + "id": "port_5_to_port_6", + "sourceNode": "5", + "sourcePort": "5_out", + "targetNode": "6", + "targetPort": "6_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_4_to_port_7", + "sourceNode": "4", + "sourcePort": "4_out", + "targetNode": "7", + "targetPort": "7_in" + }, + { + "conditions": [ + { + "index": 1 + } + ], + "id": "port_7_to_port_8", + "sourceNode": "7", + "sourcePort": "7_out", + "targetNode": "8", + "targetPort": "8_in" + }, + { + "id": "port_8_to_port_9", + "sourceNode": "8", + "sourcePort": "8_out", + "targetNode": "9", + "targetPort": "9_in" + }, + { + "id": "port_11_to_port_1", + "sourceNode": "11", + "sourcePort": "11_out", + "targetNode": "1", + "targetPort": "1_in" + }, + { + "id": "port_10_to_port_1", + "sourceNode": "10", + "sourcePort": "10_out", + "targetNode": "1", + "targetPort": "1_in" + }, + { + "id": "port_6_to_port_10", + "sourceNode": "6", + "sourcePort": "6_out", + "targetNode": "10", + "targetPort": "10_in" + }, + { + "id": "port_9_to_port_11", + "sourceNode": "9", + "sourcePort": "9_out", + "targetNode": "11", + "targetPort": "11_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_7_to_port_5", + "sourceNode": "7", + "sourcePort": "7_out", + "targetNode": "5", + "targetPort": "5_in" + } + ], + "hash": "ac357dc4e4f5e34662927be84d2d1e67f2161c61", + "nodes": { + "0": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_start", + "id": "0", + "type": "start" + }, + "errors": {}, + "id": "0", + "type": "start", + "warnings": {}, + "x": 190, + "y": 0 + }, + "1": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_finish", + "id": "1", + "type": "end" + }, + "errors": {}, + "id": "1", + "type": "end", + "warnings": {}, + "x": 190, + "y": 1448 + }, + "10": { + "data": { + "advanced": { + "customName": "build url output with error code", + "customNameId": 0, + "description": "This block uses custom code to generate an observable dictionary to output into the observables data path.", + "join": [], + "note": "This block uses custom code to generate an observable dictionary to output into the observables data path." + }, + "functionId": 3, + "functionName": "build_url_output_with_error_code", + "id": "10", + "inputParameters": [ + "url_reputation:action_result.parameter.url", + "normalize_score_url_with_error_code:custom_function:url_score_object", + "url_reputation:action_result.data.*.task.reportURL" + ], + "outputVariables": [ + "observable_array" + ], + "type": "code" + }, + "errors": {}, + "id": "10", + "type": "code", + "userCode": "\n # Write your custom code here...\n # Write your custom code here...\n from urllib.parse import urlparse\n build_url_output__observable_array = []\n\n # Build URL\n url_scan_io_task_reporturl = [str(i or '') for i in url_reputation_result_item_1]\n url_scan_io_parameter_url = [str(i or '') for i in url_reputation_parameter_url]\n url_scan_io_url_score_object = [str(i or '') for i in normalize_score_url_with_error_code__url_score_object]\n \n #phantom.debug(\"url_reputation_parameter_url: {}\".format(url_reputation_parameter_url))\n #phantom.debug(\"url_reputation_result_item_1: {}\".format(url_reputation_result_item_1))\n #phantom.debug(\"normalize_score_url_with_error_code__url_score_object: {}\".format(normalize_score_url_with_error_code__url_score_object))\n \n for url, external_id, url_object in zip(url_reputation_parameter_url, url_reputation_result_item_1, normalize_score_url_with_error_code__url_score_object):\n #for url, external_id, url_object in zip(url_scan_io_task_reporturl, url_scan_io_task_reporturl, url_scan_io_url_score_object):\n parsed_url = urlparse(url)\n phantom.debug(\"parsed_url: {}\".format(parsed_url))\n observable_object = {\n \"value\": url,\n \"type\": \"url\",\n \"reputation\": {\n \"score_id\": url_object['score_id'],\n \"score\": url_object['score'],\n \"confidence\": url_object['confidence']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \"categories\": url_object['categories'],\n \"description\" :url_object['description'],\n \"source\": \"urlscan.io\",\n \"source_link\": f\"{external_id}\"\n }\n if parsed_url.path:\n observable_object['attributes']['path'] = parsed_url.path\n if parsed_url.query:\n observable_object['attributes']['query'] = parsed_url.query\n if parsed_url.port:\n observable_object['attributes']['port'] = parsed_url.port\n \n build_url_output__observable_array.append(observable_object)\n phantom.debug(\"build_url_output__observable_array: {}\".format(build_url_output__observable_array))\n", + "warnings": {}, + "x": 340, + "y": 1254 + }, + "11": { + "data": { + "advanced": { + "customName": "build url output with no error code", + "customNameId": 0, + "description": "This block uses custom code to generate an observable dictionary to output into the observables data path.", + "join": [], + "note": "This block uses custom code to generate an observable dictionary to output into the observables data path." + }, + "functionId": 4, + "functionName": "build_url_output_with_no_error_code", + "id": "11", + "inputParameters": [ + "url_reputation:action_result.parameter.url", + "normalize_score_url_with_no_error_code:custom_function:url_score_object", + "filtered-data:urlscan_detections_error_code_filter:condition_2:url_reputation:action_result.data.*.task.reportURL" + ], + "outputVariables": [ + "observable_array" + ], + "type": "code" + }, + "errors": {}, + "id": "11", + "type": "code", + "userCode": "\n # Write your custom code here...\n from urllib.parse import urlparse\n build_url_output__observable_array = []\n\n # Build URL\n for url, external_id, url_object in zip(url_reputation_parameter_url, filtered_result_0_data___task_reporturl, normalize_score_url_with_no_error_code__url_score_object):\n parsed_url = urlparse(url)\n phantom.debug(\"parsed_url: {}\".format(parsed_url))\n observable_object = {\n \"value\": url,\n \"type\": \"url\",\n \"reputation\": {\n \"score_id\": url_object['score_id'],\n \"score\": url_object['score'],\n \"confidence\": url_object['confidence']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \"categories\": url_object['categories'],\n \"description\" :url_object['description'],\n \"source\": \"urlscan.io\",\n \"source_link\": f\"{external_id}\"\n }\n if parsed_url.path:\n observable_object['attributes']['path'] = parsed_url.path\n if parsed_url.query:\n observable_object['attributes']['query'] = parsed_url.query\n if parsed_url.port:\n observable_object['attributes']['port'] = parsed_url.port\n \n build_url_output__observable_array.append(observable_object)\n phantom.debug(\"build_url_output__observable_array: {}\".format(build_url_output__observable_array))\n", + "warnings": {}, + "x": 0, + "y": 1260 + }, + "2": { + "data": { + "advanced": { + "customName": "url input filter", + "customNameId": 0, + "description": "Determine branches based on provided inputs.", + "join": [], + "note": "Determine branches based on provided inputs." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "!=", + "param": "playbook_input:url", + "value": "" + } + ], + "conditionIndex": 0, + "customName": "url input filter", + "logic": "and" + } + ], + "functionId": 1, + "functionName": "url_input_filter", + "id": "2", + "type": "filter" + }, + "errors": {}, + "id": "2", + "type": "filter", + "warnings": {}, + "x": 230, + "y": 148 + }, + "3": { + "data": { + "action": "detonate url", + "actionType": "investigate", + "advanced": { + "customName": "url reputation", + "customNameId": 0, + "description": "Queries urlscan.io for information about the provided URL(s)", + "join": [], + "note": "Queries urlscan.io for information about the provided URL(s)" + }, + "connector": "urlscan.io", + "connectorConfigs": [ + "urlscan.io" + ], + "connectorId": "c46c00cd-7231-4dd3-8d8e-02b9fa0e14a2", + "connectorVersion": "v1", + "functionId": 1, + "functionName": "url_reputation", + "id": "3", + "parameters": { + "get_result": true, + "private": true, + "url": "playbook_input:url" + }, + "requiredParameters": [ + { + "data_type": "string", + "field": "url" + }, + { + "data_type": "boolean", + "default": true, + "field": "private" + }, + { + "data_type": "boolean", + "default": true, + "field": "get_result" + } + ], + "type": "action" + }, + "errors": {}, + "id": "3", + "type": "action", + "warnings": {}, + "x": 170, + "y": 328 + }, + "4": { + "data": { + "advanced": { + "customName": "urlscanio summary filter", + "customNameId": 0, + "description": "Filters successful url reputation results.", + "join": [], + "note": "Filters successful url reputation results." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "==", + "param": "url_reputation:action_result.status", + "value": "success" + } + ], + "conditionIndex": 0, + "customName": "success_urlscan_query", + "logic": "and" + } + ], + "functionId": 2, + "functionName": "urlscanio_summary_filter", + "id": "4", + "type": "filter" + }, + "errors": {}, + "id": "4", + "type": "filter", + "warnings": {}, + "x": 240, + "y": 500 + }, + "5": { + "customCode": null, + "data": { + "advanced": { + "customName": "normalize score url with error code", + "customNameId": 0, + "description": "This block uses custom code for normalizing score. Adjust the logic as desired in the documented sections.", + "join": [], + "note": "This block uses custom code for normalizing score. Adjust the logic as desired in the documented sections." + }, + "functionId": 1, + "functionName": "normalize_score_url_with_error_code", + "id": "5", + "inputParameters": [ + "url_reputation:action_result.parameter.url", + "url_reputation:action_result.data.*.message", + "url_reputation:action_result.data.*.status", + "url_reputation:action_result.data.*.description" + ], + "outputVariables": [ + "url_score_object", + "scores", + "categories" + ], + "type": "code" + }, + "errors": {}, + "id": "5", + "type": "code", + "userCode": "\n # Write your custom code here...\n url_reputation_data_message = [str(i or '') for i in url_reputation_result_item_1] \n url_reputation_data_status = [str(i or '') for i in url_reputation_result_item_2] \n url_reputation_data_description = [str(i or '') for i in url_reputation_result_item_3] \n\n \n normalize_score_url_with_error_code__url_score_object = []\n normalize_score_url_with_error_code__scores = []\n normalize_score_url_with_error_code__categories = []\n\n \n #phantom.debug(\"url_reputation_parameter_url: {}\".format(url_reputation_parameter_url))\n #phantom.debug(\"url_reputation_data_message: {}\".format(url_reputation_data_message))\n #phantom.debug(\"url_reputation_data_status: {}\".format(url_reputation_data_status))\n #phantom.debug(\"url_reputation_data_description: {}\".format(url_reputation_data_description))\n\n \n\n \n urlscan_score_table = {\n \"0\":\"Legitimate\",\n \"1\":\"Very_Safe\",\n \"2\":\"Safe\",\n \"3\":\"Probably_Safe\",\n \"4\":\"Leans_Safe\",\n \"5\":\"May_not_be_Safe\",\n \"6\":\"Exercise_Caution\",\n \"7\":\"Suspicious_or_Risky\",\n \"8\":\"Possibly_Malicious\",\n \"9\":\"Probably_Malicious\",\n \"10\":\"Malicious\",\n \"error_code_query\" : \"error code return, check the error code descriptions\"\n\n }\n \n url_scan_io_error_code ={\n \"blacklist\" : \"Blacklisted URL or Domain\",\n \"spam\" : \"Spammy URL or Domain\",\n \"invalid_hostname\" : \"Invalid Hostname URL or Domain\",\n \"missing_url\" : \"Missing URL OR Domain Property\",\n \"auth\" : \"HTTP basic auth information\",\n \"not_be_resolved\" : \"Non-resolvable hostname (A, AAAA, CNAME)\"\n }\n ## URLSCAN.io return error code especially if the url or domain was already in their blacklist database. \n ## below are the common error code message base on their\n ## - \"Blacklisted domains and URLs\" : requested to be blacklisted by their respective owners.\n ## - \"Spammy submissions\" : of URLs known to be used only for spamming this service.\n ## - \"Invalid hostnames\" : or invalid protocol schemes (FTP etc).\n ## - \"Missing URL property\" : ... yes, it does happen.\n ## - \"Contains HTTP basic auth information\" : ... yes, that happens as well.\n ## - \"Non-resolvable hostnames (A, AAAA, CNAME)\" : which we will not even try to scan.\n \n blank_result = \"--\"\n category = \"\"\n score = \"\"\n error_message = \"\"\n \n ## check if there is error code return upon URL reputation query\n \n for url_descp in url_reputation_data_description:\n \n for key, value in url_scan_io_error_code.items():\n if key.replace(\"_\",\" \").lower() in url_descp.lower():\n error_message = url_scan_io_error_code[key]\n \n # Attach final object\n normalize_score_url_with_error_code__categories.append(error_message) \n normalize_score_url_with_error_code__url_score_object.append({'score': urlscan_score_table['error_code_query'], 'confidence':\"\", 'score_id': \"\", \"malicious_tag_verdicts\": \"\", 'categories': error_message, \"description\": url_descp})\n normalize_score_url_with_error_code__scores.append(urlscan_score_table['error_code_query'])\n \n phantom.debug(\"normalize_score_url_with_error_code__url_score_object: {}\".format(normalize_score_url_with_error_code__url_score_object))\n phantom.debug(\"normalize_score_url_with_error_code__scores: {}\".format(normalize_score_url_with_error_code__scores))\n phantom.debug(\"normalize_score_url_with_error_code__categories: {}\".format(normalize_score_url_with_error_code__categories))\n \n \n", + "warnings": {}, + "x": 340, + "y": 860 + }, + "6": { + "data": { + "advanced": { + "customName": "error code format report url", + "customNameId": 0, + "description": "Format a summary table with the information gathered from the playbook.", + "join": [], + "note": "Format a summary table with the information gathered from the playbook." + }, + "functionId": 1, + "functionName": "error_code_format_report_url", + "id": "6", + "parameters": [ + "url_reputation:action_result.parameter.url", + "normalize_score_url_with_error_code:custom_function:scores", + "normalize_score_url_with_error_code:custom_function:categories", + "url_reputation:action_result.data.*.task.reportURL" + ], + "template": "SOAR analyzed URL(s) using urlscan.io. The table below shows a summary of the information gathered.\n\n| URL | Normalized Score | Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} | urlscan.io |\n\n", + "type": "format" + }, + "errors": {}, + "id": "6", + "type": "format", + "userCode": "\n # Write your custom code here...\n #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"error_code_format_report_url\"))\n", + "warnings": {}, + "x": 340, + "y": 1060 + }, + "7": { + "data": { + "advanced": { + "customName": "urlscanio error code filter", + "customNameId": 0, + "description": "This filter is designed to avoid nonetype value in some list and dictionary object due to error code return value of urlscan.io especially if the URL or domain is in their blacklist database", + "join": [], + "note": "This filter is designed to avoid nonetype value in some list and dictionary object due to error code return value of urlscan.io especially if the URL or domain is in their blacklist database" + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "==", + "param": "filtered-data:urlscanio_summary_filter:condition_1:url_reputation:action_result.data.*.status", + "value": "400" + } + ], + "conditionIndex": 0, + "customName": "error_code", + "logic": "and" + }, + { + "comparisons": [ + { + "conditionIndex": 1, + "op": "!=", + "param": "filtered-data:urlscanio_summary_filter:condition_1:url_reputation:action_result.data.*.status", + "value": "400" + } + ], + "conditionIndex": 1, + "customName": "no_error_code", + "logic": "or" + } + ], + "functionId": 3, + "functionName": "urlscanio_error_code_filter", + "id": "7", + "type": "filter" + }, + "errors": {}, + "id": "7", + "type": "filter", + "warnings": {}, + "x": 240, + "y": 680 + }, + "8": { + "data": { + "advanced": { + "customName": "normalize score url with no error code", + "customNameId": 0, + "description": "This block uses custom code for normalizing score. Adjust the logic as desired in the documented sections.", + "join": [], + "note": "This block uses custom code for normalizing score. Adjust the logic as desired in the documented sections." + }, + "functionId": 2, + "functionName": "normalize_score_url_with_no_error_code", + "id": "8", + "inputParameters": [ + "url_reputation:action_result.data.*.verdicts.overall", + "url_reputation:action_result.data.*.verdicts.urlscan", + "url_reputation:action_result.data.*.verdicts.engines", + "url_reputation:action_result.data.*.verdicts.community" + ], + "outputVariables": [ + "url_score_object", + "scores", + "categories" + ], + "type": "code" + }, + "errors": {}, + "id": "8", + "type": "code", + "userCode": "\n # Write your custom code here...\n \n normalize_score_url_with_no_error_code__url_score_object = []\n normalize_score_url_with_no_error_code__scores = []\n normalize_score_url_with_no_error_code__categories = []\n \n url_reputation_verdicts_overall_dict = [(i or {}) for i in url_reputation_result_item_0] \n url_reputation_verdicts_urlscan_dict = [(i or {}) for i in url_reputation_result_item_1] \n url_reputation_verdicts_engine_dict = [(i or {}) for i in url_reputation_result_item_2] \n url_reputation_verdicts_community_dict = [(i or {}) for i in url_reputation_result_item_3] \n \n #phantom.debug(\"url_reputation_verdicts_overall_dict: {}\".format(url_reputation_verdicts_overall_dict))\n #phantom.debug(\"url_reputation_verdicts_urlscan_dict: {}\".format(url_reputation_verdicts_urlscan_dict))\n #phantom.debug(\"url_reputation_verdicts_engine_dict: {}\".format(url_reputation_verdicts_engine_dict))\n #phantom.debug(\"url_reputation_verdicts_community_dict: {}\".format(url_reputation_verdicts_community_dict))\n \n \n urlscan_score_table = {\n \"0\":\"Legitimate\",\n \"1\":\"Very_Safe\",\n \"2\":\"Safe\",\n \"3\":\"Probably_Safe\",\n \"4\":\"Leans_Safe\",\n \"5\":\"May_not_be_Safe\",\n \"6\":\"Exercise_Caution\",\n \"7\":\"Suspicious_or_Risky\",\n \"8\":\"Possibly_Malicious\",\n \"9\":\"Probably_Malicious\",\n \"10\":\"Malicious\"\n }\n \n ## if there is no error code, urlscan.io will continue to detonate the URL and query scores in several verdicts object\n \n ## Normalize reputation on a -100 (legitimate) to 100 point scale based on number of malicious and suspicious divided by different urlscan.io verdict objects.\n ## This can be adjusted to include whatever logic is desired.\n \n for i in range(0,len(url_reputation_verdicts_overall_dict)):\n if url_reputation_verdicts_overall_dict[i] != {} or url_reputation_verdicts_urlscan_dict[i] != {} or url_reputation_verdicts_engine_dict[i] != {} or url_reputation_verdicts_community_dict[i] != {}:\n summary_score = url_reputation_verdicts_overall_dict[i]['score'] + url_reputation_verdicts_urlscan_dict[i]['score'] + url_reputation_verdicts_engine_dict[i]['score'] + url_reputation_verdicts_community_dict[i]['score']\n summary_malicious_verdicts = url_reputation_verdicts_overall_dict[i]['malicious'] or url_reputation_verdicts_urlscan_dict[i]['malicious'] or url_reputation_verdicts_engine_dict[i]['malicious'] or url_reputation_verdicts_community_dict[i]['malicious']\n summary_of_malicious_tag = int(url_reputation_verdicts_overall_dict[i]['malicious']) + int(url_reputation_verdicts_urlscan_dict[i]['malicious']) + int(url_reputation_verdicts_engine_dict[i]['malicious']) + int(url_reputation_verdicts_community_dict[i]['malicious'])\n summary_categories = url_reputation_verdicts_overall_dict[i]['categories'] + url_reputation_verdicts_urlscan_dict[i]['categories'] + url_reputation_verdicts_engine_dict[i]['categories'] + url_reputation_verdicts_community_dict[i]['categories']\n \n \n ## customized score id calculation\n \n log_result = (summary_score/4) # avg score from different urlscan.io score object (engine_score, overall_verdict_score, urlscan_verdicts_score and community score)\n score_id = int(log_result) \n \n\n if score_id < -50:\n score_id = \"0\"\n elif score_id < 0 and score_id >= -50:\n score_id = \"1\"\n elif score_id >= 0 and score_id <= 10:\n score_id = \"2\"\n elif score_id > 10 and score_id <= 20:\n score_id = \"3\"\n elif score_id > 20 and score_id <= 30:\n score_id = \"4\"\n elif score_id > 30 and score_id <= 40:\n score_id = \"5\"\n elif score_id > 40 and score_id <= 50:\n score_id = \"6\"\n elif score_id > 50 and score_id <= 60:\n score_id = \"7\"\n elif score_id > 70 and score_id <= 80:\n score_id = \"8\"\n elif score_id > 80 and score_id <= 90:\n score_id = \"9\"\n elif score_id > 90 and score_id <= 100:\n score_id = \"10\"\n\n score = urlscan_score_table[str(score_id)]\n\n malicious_tag_stats = (summary_of_malicious_tag, 4)\n\n # Attach final object\n normalize_score_url_with_no_error_code__categories.append(summary_categories) \n normalize_score_url_with_no_error_code__url_score_object.append({'score': score, 'confidence':log_result, 'score_id': score_id, \"malicious_tag_verdicts\": summary_malicious_verdicts, \"malicious_tag_stats\": malicious_tag_stats , 'categories': summary_categories, \"description\": \"\"})\n normalize_score_url_with_no_error_code__scores.append(score)\n \n phantom.debug(\"normalize_score_url_with_no_error_code__categories: {}\".format(normalize_score_url_with_no_error_code__categories))\n phantom.debug(\"normalize_score_url_with_no_error_code__url_score_object: {}\".format(normalize_score_url_with_no_error_code__url_score_object))\n phantom.debug(\"normalize_score_url_with_no_error_code__scores: {}\".format(normalize_score_url_with_no_error_code__scores))\n", + "warnings": {}, + "x": 0, + "y": 860 + }, + "9": { + "data": { + "advanced": { + "customName": "no error code format report url ", + "customNameId": 0, + "description": "Format a summary table with the information gathered from the playbook.", + "join": [], + "note": "Format a summary table with the information gathered from the playbook." + }, + "functionId": 2, + "functionName": "no_error_code_format_report_url", + "id": "9", + "parameters": [ + "url_reputation:action_result.parameter.url", + "normalize_score_url_with_no_error_code:custom_function:scores", + "normalize_score_url_with_no_error_code:custom_function:categories", + "url_reputation:action_result.data.*.task.reportURL" + ], + "template": "SOAR analyzed URL(s) using urlscan.io. The table below shows a summary of the information gathered.\n\n| URL | Normalized Score | Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} | urlscan.io |\n", + "type": "format" + }, + "errors": {}, + "id": "9", + "type": "format", + "userCode": "\n # Write your custom code here...\n #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"no_error_code_format_report_url\"))\n", + "warnings": {}, + "x": 0, + "y": 1060 + } + }, + "notes": "Inputs: url\nInteractions: UrlScan.io\nActions: url detonation\nOutputs: report, observables" + }, + "input_spec": [ + { + "contains": [ + "url", + "domain", + "ip" + ], + "description": "A URL provided for reputation analysis - urlscan.io", + "name": "url" + } + ], + "output_spec": null, + "playbook_type": "data", + "python_version": "3", + "schema": "5.0.8", + "version": "5.5.0.108488" + }, + "create_time": "2023-03-23T10:34:24.990317+00:00", + "draft_mode": false, + "labels": [ + "*" + ], + "tags": [ + "reputation", + "url", + "domain", + "ip", + "sandbox", + "D3-URA", + "D3-DNRA", + "D3-IPRA", + "D3-IRA" + ] +} \ No newline at end of file diff --git a/playbooks/UrlScan_IO_Dynamic_Analysis.png b/playbooks/UrlScan_IO_Dynamic_Analysis.png new file mode 100644 index 0000000000000000000000000000000000000000..eae57860f466769cfdff3da50bb9d5fa31b2fe2d GIT binary patch literal 72693 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

`=Ww5EajGFn8ho4{%-@_^wj6EdMXoE&>7x`wv>D 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 -50: + score_id = "1" + elif score_id >= 0 and score_id <= 10: + score_id = "2" + elif score_id > 10 and score_id <= 20: + score_id = "3" + elif score_id > 20 and score_id <= 30: + score_id = "4" + elif score_id > 30 and score_id <= 40: + score_id = "5" + elif score_id > 40 and score_id <= 50: + score_id = "6" + elif score_id > 50 and score_id <= 60: + score_id = "7" + elif score_id > 70 and score_id <= 80: + score_id = "8" + elif score_id > 80 and score_id <= 90: + score_id = "9" + elif score_id > 90 and score_id <= 100: + score_id = "10" + + score = urlscan_score_table[str(score_id)] + + malicious_tag_stats = (summary_of_malicious_tag, 4) + + # Attach final object + normalize_score_url_with_no_error_code__categories.append(summary_categories) + normalize_score_url_with_no_error_code__url_score_object.append({'score': score, 'confidence':log_result, 'score_id': score_id, "malicious_tag_verdicts": summary_malicious_verdicts, "malicious_tag_stats": malicious_tag_stats , 'categories': summary_categories, "description": ""}) + normalize_score_url_with_no_error_code__scores.append(score) + + phantom.debug("normalize_score_url_with_no_error_code__categories: {}".format(normalize_score_url_with_no_error_code__categories)) + phantom.debug("normalize_score_url_with_no_error_code__url_score_object: {}".format(normalize_score_url_with_no_error_code__url_score_object)) + phantom.debug("normalize_score_url_with_no_error_code__scores: {}".format(normalize_score_url_with_no_error_code__scores)) + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_run_data(key="normalize_score_url_with_no_error_code:url_score_object", value=json.dumps(normalize_score_url_with_no_error_code__url_score_object)) + phantom.save_run_data(key="normalize_score_url_with_no_error_code:scores", value=json.dumps(normalize_score_url_with_no_error_code__scores)) + phantom.save_run_data(key="normalize_score_url_with_no_error_code:categories", value=json.dumps(normalize_score_url_with_no_error_code__categories)) + + no_error_code_format_report_url(container=container) + + return + + +@phantom.playbook_block() +def no_error_code_format_report_url(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("no_error_code_format_report_url() called") + + ################################################################################ + # Format a summary table with the information gathered from the playbook. + ################################################################################ + + template = """SOAR analyzed URL(s) using urlscan.io. The table below shows a summary of the information gathered.\n\n| URL | Normalized Score | Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} | urlscan.io |\n""" + + # parameter list for template variable replacement + parameters = [ + "url_reputation:action_result.parameter.url", + "normalize_score_url_with_no_error_code:custom_function:scores", + "normalize_score_url_with_no_error_code:custom_function:categories", + "url_reputation:action_result.data.*.task.reportURL" + ] + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="no_error_code_format_report_url")) + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.format(container=container, template=template, parameters=parameters, name="no_error_code_format_report_url") + + build_url_output_with_no_error_code(container=container) + + return + + +@phantom.playbook_block() +def build_url_output_with_error_code(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("build_url_output_with_error_code() called") + + ################################################################################ + # This block uses custom code to generate an observable dictionary to output into + # the observables data path. + ################################################################################ + + url_reputation_result_data = phantom.collect2(container=container, datapath=["url_reputation:action_result.parameter.url","url_reputation:action_result.data.*.task.reportURL"], action_results=results) + normalize_score_url_with_error_code__url_score_object = json.loads(_ if (_ := phantom.get_run_data(key="normalize_score_url_with_error_code:url_score_object")) != "" else "null") # pylint: disable=used-before-assignment + + url_reputation_parameter_url = [item[0] for item in url_reputation_result_data] + url_reputation_result_item_1 = [item[1] for item in url_reputation_result_data] + + build_url_output_with_error_code__observable_array = None + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + # Write your custom code here... + from urllib.parse import urlparse + build_url_output__observable_array = [] + + # Build URL + url_scan_io_task_reporturl = [str(i or '') for i in url_reputation_result_item_1] + url_scan_io_parameter_url = [str(i or '') for i in url_reputation_parameter_url] + url_scan_io_url_score_object = [str(i or '') for i in normalize_score_url_with_error_code__url_score_object] + + #phantom.debug("url_reputation_parameter_url: {}".format(url_reputation_parameter_url)) + #phantom.debug("url_reputation_result_item_1: {}".format(url_reputation_result_item_1)) + #phantom.debug("normalize_score_url_with_error_code__url_score_object: {}".format(normalize_score_url_with_error_code__url_score_object)) + + for url, external_id, url_object in zip(url_reputation_parameter_url, url_reputation_result_item_1, normalize_score_url_with_error_code__url_score_object): + #for url, external_id, url_object in zip(url_scan_io_task_reporturl, url_scan_io_task_reporturl, url_scan_io_url_score_object): + parsed_url = urlparse(url) + phantom.debug("parsed_url: {}".format(parsed_url)) + observable_object = { + "value": url, + "type": "url", + "reputation": { + "score_id": url_object['score_id'], + "score": url_object['score'], + "confidence": url_object['confidence'] + }, + "attributes": { + "hostname": parsed_url.hostname, + "scheme": parsed_url.scheme + }, + "categories": url_object['categories'], + "description" :url_object['description'], + "source": "urlscan.io", + "source_link": f"{external_id}" + } + if parsed_url.path: + observable_object['attributes']['path'] = parsed_url.path + if parsed_url.query: + observable_object['attributes']['query'] = parsed_url.query + if parsed_url.port: + observable_object['attributes']['port'] = parsed_url.port + + build_url_output__observable_array.append(observable_object) + phantom.debug("build_url_output__observable_array: {}".format(build_url_output__observable_array)) + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_run_data(key="build_url_output_with_error_code:observable_array", value=json.dumps(build_url_output_with_error_code__observable_array)) + + return + + +@phantom.playbook_block() +def build_url_output_with_no_error_code(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("build_url_output_with_no_error_code() called") + + ################################################################################ + # This block uses custom code to generate an observable dictionary to output into + # the observables data path. + ################################################################################ + + url_reputation_result_data = phantom.collect2(container=container, datapath=["url_reputation:action_result.parameter.url"], action_results=results) + filtered_result_0_data_urlscan_detections_error_code_filter = phantom.collect2(container=container, datapath=["filtered-data:urlscan_detections_error_code_filter:condition_2:url_reputation:action_result.data.*.task.reportURL"]) + normalize_score_url_with_no_error_code__url_score_object = json.loads(_ if (_ := phantom.get_run_data(key="normalize_score_url_with_no_error_code:url_score_object")) != "" else "null") # pylint: disable=used-before-assignment + + url_reputation_parameter_url = [item[0] for item in url_reputation_result_data] + filtered_result_0_data___task_reporturl = [item[0] for item in filtered_result_0_data_urlscan_detections_error_code_filter] + + build_url_output_with_no_error_code__observable_array = None + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + from urllib.parse import urlparse + build_url_output__observable_array = [] + + # Build URL + for url, external_id, url_object in zip(url_reputation_parameter_url, filtered_result_0_data___task_reporturl, normalize_score_url_with_no_error_code__url_score_object): + parsed_url = urlparse(url) + phantom.debug("parsed_url: {}".format(parsed_url)) + observable_object = { + "value": url, + "type": "url", + "reputation": { + "score_id": url_object['score_id'], + "score": url_object['score'], + "confidence": url_object['confidence'] + }, + "attributes": { + "hostname": parsed_url.hostname, + "scheme": parsed_url.scheme + }, + "categories": url_object['categories'], + "description" :url_object['description'], + "source": "urlscan.io", + "source_link": f"{external_id}" + } + if parsed_url.path: + observable_object['attributes']['path'] = parsed_url.path + if parsed_url.query: + observable_object['attributes']['query'] = parsed_url.query + if parsed_url.port: + observable_object['attributes']['port'] = parsed_url.port + + build_url_output__observable_array.append(observable_object) + phantom.debug("build_url_output__observable_array: {}".format(build_url_output__observable_array)) + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_run_data(key="build_url_output_with_no_error_code:observable_array", value=json.dumps(build_url_output_with_no_error_code__observable_array)) + + return + + +@phantom.playbook_block() +def on_finish(container, summary): + phantom.debug("on_finish() called") + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + return \ No newline at end of file From ff1f7e66284896775de41df26de72eaecf8ea175 Mon Sep 17 00:00:00 2001 From: tccontre Date: Thu, 23 Mar 2023 11:51:01 +0100 Subject: [PATCH 02/12] urlscan_io_dynamic_analysis_playbook --- playbooks/UrlScan_IO_Dynamic_Analysis.yml | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 playbooks/UrlScan_IO_Dynamic_Analysis.yml diff --git a/playbooks/UrlScan_IO_Dynamic_Analysis.yml b/playbooks/UrlScan_IO_Dynamic_Analysis.yml new file mode 100644 index 0000000000..ca2dcc8fa0 --- /dev/null +++ b/playbooks/UrlScan_IO_Dynamic_Analysis.yml @@ -0,0 +1,26 @@ +name: UrlScan IO Dynamic Analysis +id: a1173c28-7b33-4a56-9d7f-5dbbca595cb0 +version: 1 +date: '2023-03-23' +author: Teoderick Contreras, Splunk +type: Investigation +description: "Accepts a url link, IP, or domain to be detonated using urlscan.io API connector." +playbook: UrlScan_IO_Dynamic_Analysis +how_to_implement: This input playbook requires the urlscan.io API connector to be configured. + It is designed to work in conjunction with the Dynamic Attribute Lookup playbook or other playbooks in the same style. +references: [] +app_list: + - urlscan.io +tags: + platform_tags: + - reputation + - url + - domain + - sandbox + - ip + - urlscan.io + playbook_type: Input + vpe_type: Modern + playbook_fields: [] + product: + - Splunk SOAR \ No newline at end of file From 63f4a10ae3b2110b97b46a17a028b3ae523f3669 Mon Sep 17 00:00:00 2001 From: tccontre <26181693+tccontre@users.noreply.github.com> Date: Fri, 24 Mar 2023 10:01:02 +0100 Subject: [PATCH 03/12] Update UrlScan_IO_Dynamic_Analysis.yml --- playbooks/UrlScan_IO_Dynamic_Analysis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/playbooks/UrlScan_IO_Dynamic_Analysis.yml b/playbooks/UrlScan_IO_Dynamic_Analysis.yml index ca2dcc8fa0..e68eab1e7e 100644 --- a/playbooks/UrlScan_IO_Dynamic_Analysis.yml +++ b/playbooks/UrlScan_IO_Dynamic_Analysis.yml @@ -18,9 +18,8 @@ tags: - domain - sandbox - ip - - urlscan.io playbook_type: Input vpe_type: Modern playbook_fields: [] product: - - Splunk SOAR \ No newline at end of file + - Splunk SOAR From 07329c1958c3ac4cf74dc30dab6197c5d2e0cd2a Mon Sep 17 00:00:00 2001 From: tccontre Date: Fri, 24 Mar 2023 10:11:45 +0100 Subject: [PATCH 04/12] saa_dynamic_analysis_playbooks --- playbooks/SAA_Dynamic_Analysis.json | 800 ++++++++++++++++++++++++++ playbooks/SAA_Dynamic_Analysis.png | Bin 0 -> 81150 bytes playbooks/SAA_Dynamic_Analysis.py | 860 ++++++++++++++++++++++++++++ playbooks/SAA_Dynamic_Analysis.yml | 25 + 4 files changed, 1685 insertions(+) create mode 100644 playbooks/SAA_Dynamic_Analysis.json create mode 100644 playbooks/SAA_Dynamic_Analysis.png create mode 100644 playbooks/SAA_Dynamic_Analysis.py create mode 100644 playbooks/SAA_Dynamic_Analysis.yml diff --git a/playbooks/SAA_Dynamic_Analysis.json b/playbooks/SAA_Dynamic_Analysis.json new file mode 100644 index 0000000000..cc316f26a1 --- /dev/null +++ b/playbooks/SAA_Dynamic_Analysis.json @@ -0,0 +1,800 @@ +{ + "blockly": false, + "blockly_xml": "", + "category": "Uncategorized", + "coa": { + "data": { + "description": "Accepts a URL or File_Hash and does reputation analysis on the objects. Generates a global report and a per observable sub-report and normalized score. The score can be customized based on a variety of factors.\n\nRef: https://d3fend.mitre.org/technique/d3f:IdentifierReputationAnalysis/", + "edges": [ + { + "id": "port_0_to_port_2", + "sourceNode": "0", + "sourcePort": "0_out", + "targetNode": "2", + "targetPort": "2_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_2_to_port_3", + "sourceNode": "2", + "sourcePort": "2_out", + "targetNode": "3", + "targetPort": "3_in" + }, + { + "id": "port_3_to_port_4", + "sourceNode": "3", + "sourcePort": "3_out", + "targetNode": "4", + "targetPort": "4_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_6", + "sourceNode": "5", + "sourcePort": "5_out", + "targetNode": "6", + "targetPort": "6_in" + }, + { + "id": "port_6_to_port_7", + "sourceNode": "6", + "sourcePort": "6_out", + "targetNode": "7", + "targetPort": "7_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_7_to_port_8", + "sourceNode": "7", + "sourcePort": "7_out", + "targetNode": "8", + "targetPort": "8_in" + }, + { + "id": "port_8_to_port_10", + "sourceNode": "8", + "sourcePort": "8_out", + "targetNode": "10", + "targetPort": "10_in" + }, + { + "id": "port_10_to_port_11", + "sourceNode": "10", + "sourcePort": "10_out", + "targetNode": "11", + "targetPort": "11_in" + }, + { + "id": "port_11_to_port_1", + "sourceNode": "11", + "sourcePort": "11_out", + "targetNode": "1", + "targetPort": "1_in" + }, + { + "conditions": [ + { + "index": 1 + } + ], + "id": "port_2_to_port_12", + "sourceNode": "2", + "sourcePort": "2_out", + "targetNode": "12", + "targetPort": "12_in" + }, + { + "id": "port_14_to_port_15", + "sourceNode": "14", + "sourcePort": "14_out", + "targetNode": "15", + "targetPort": "15_in" + }, + { + "id": "port_17_to_port_18", + "sourceNode": "17", + "sourcePort": "17_out", + "targetNode": "18", + "targetPort": "18_in" + }, + { + "id": "port_18_to_port_19", + "sourceNode": "18", + "sourcePort": "18_out", + "targetNode": "19", + "targetPort": "19_in" + }, + { + "id": "port_19_to_port_1", + "sourceNode": "19", + "sourcePort": "19_out", + "targetNode": "1", + "targetPort": "1_in" + }, + { + "id": "port_12_to_port_4", + "sourceNode": "12", + "sourcePort": "12_out", + "targetNode": "4", + "targetPort": "4_in" + }, + { + "conditions": [ + { + "index": 1 + } + ], + "id": "port_4_to_port_14", + "sourceNode": "4", + "sourcePort": "4_out", + "targetNode": "14", + "targetPort": "14_in" + }, + { + "id": "port_15_to_port_7", + "sourceNode": "15", + "sourcePort": "15_out", + "targetNode": "7", + "targetPort": "7_in" + }, + { + "conditions": [ + { + "index": 1 + } + ], + "id": "port_7_to_port_17", + "sourceNode": "7", + "sourcePort": "7_out", + "targetNode": "17", + "targetPort": "17_in" + } + ], + "hash": "733b478157b79ea195ed77546d95303ebcb23e01", + "nodes": { + "0": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_start", + "id": "0", + "type": "start" + }, + "errors": {}, + "id": "0", + "type": "start", + "warnings": {}, + "x": 190, + "y": 0 + }, + "1": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_finish", + "id": "1", + "type": "end" + }, + "errors": {}, + "id": "1", + "type": "end", + "warnings": {}, + "x": 190, + "y": 1804 + }, + "10": { + "data": { + "advanced": { + "customName": "format url report ", + "customNameId": 0, + "description": "Format a summary table with the information gathered from the playbook.", + "join": [], + "note": "Format a summary table with the information gathered from the playbook." + }, + "functionId": 1, + "functionName": "format_url_report", + "id": "10", + "parameters": [ + "playbook_input:url", + "normalized_job_forensic_report_output:custom_function:scores", + "normalized_job_forensic_report_output:custom_function:confidence", + "normalized_job_forensic_report_output:custom_function:categories", + "get_jobid_of_url_detonation_output:custom_function:jobid" + ], + "template": "SOAR analyzed URL(s) using Splunk Attack Analyzer. The table below shows a summary of the information gathered.\n\n| URL | Score | Confidence |Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} |https://app.twinwave.io/job/{4} | Splunk Attack Analyzer (SAA){1}{2}{3}{4} |\n%%\n\n\n", + "type": "format" + }, + "errors": {}, + "id": "10", + "type": "format", + "userCode": "\n # Write your custom code here...\n #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"format_report_url\"))\n", + "warnings": {}, + "x": 0, + "y": 1440 + }, + "11": { + "data": { + "advanced": { + "customName": "build url output", + "customNameId": 0, + "description": "This block uses custom code to generate an observable dictionary to output into the observables data path.", + "join": [], + "note": "This block uses custom code to generate an observable dictionary to output into the observables data path." + }, + "functionId": 3, + "functionName": "build_url_output", + "id": "11", + "inputParameters": [ + "playbook_input:url", + "get_jobid_of_url_detonation_output:custom_function:jobid", + "normalized_job_forensic_report_output:custom_function:url_score_object" + ], + "outputVariables": [ + "observable_array" + ], + "type": "code" + }, + "errors": {}, + "id": "11", + "type": "code", + "userCode": "\n # Write your custom code here...\n from urllib.parse import urlparse\n build_url_output__observable_array = []\n phantom.debug(playbook_input_url_values)\n # Build URL\n for jobs_id in get_jobid_of_url_detonation_output__jobid:\n \n for url, external_id, url_object in zip(playbook_input_url_values, jobs_id, normalized_job_forensic_report_output__url_score_object):\n parsed_url = urlparse(url)\n phantom.debug(\"url: {} jobs_id:{}\".format(url, external_id))\n phantom.debug(\"parsed_url: {}, url_object: {}\".format(parsed_url, url_object))\n observable_object = {\n \"value\": url,\n \"type\": \"url\",\n \"reputation\": {\n \"score\": url_object['score'],\n \"confidence\": url_object['confidence']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \"categories\": url_object['categories'],\n \"source\": \"Splunk Attack Analyzer (SAA)\",\n \"source_link\": f\"https://app.twinwave.io/job/{external_id}\"\n }\n\n if parsed_url.path:\n observable_object['attributes']['path'] = parsed_url.path\n if parsed_url.query:\n observable_object['attributes']['query'] = parsed_url.query\n if parsed_url.port:\n observable_object['attributes']['port'] = parsed_url.port\n\n build_url_output__observable_array.append(observable_object)\n phantom.debug(\"build_url_output__observable_array: {}\".format(build_url_output__observable_array))\n", + "warnings": {}, + "x": 0, + "y": 1626 + }, + "12": { + "data": { + "action": "detonate file", + "actionType": "generic", + "advanced": { + "customName": "saa file detonation", + "customNameId": 0, + "description": "Queries SAA for information about the provided vault_id(s)", + "join": [], + "note": "Queries SAA for information about the provided vault_id(s)" + }, + "connector": "Splunk Attack Analyzer", + "connectorConfigs": [ + "splunk attack analyzer" + ], + "connectorId": "de681fee-c552-45bf-9212-827b1c7529f8", + "connectorVersion": "v1", + "functionId": 1, + "functionName": "saa_file_detonation", + "id": "12", + "parameters": { + "file": "playbook_input:vault_id" + }, + "requiredParameters": [ + { + "data_type": "string", + "field": "file" + } + ], + "type": "action" + }, + "errors": {}, + "id": "12", + "type": "action", + "warnings": {}, + "x": 340, + "y": 328 + }, + "14": { + "data": { + "advanced": { + "customName": "get jobid of file detonation output", + "customNameId": 0, + "description": "This block uses custom code for fetching JobID for URL(s) or file(s) detonation.", + "join": [], + "note": "This block uses custom code for fetching JobID for URL(s) or file(s) detonation." + }, + "functionId": 4, + "functionName": "get_jobid_of_file_detonation_output", + "id": "14", + "inputParameters": [ + "saa_file_detonation:action_result.data.*.JobID" + ], + "outputVariables": [ + "jobid" + ], + "type": "code" + }, + "errors": {}, + "id": "14", + "type": "code", + "userCode": "\n # Write your custom code here...\n get_jobid_of_file_detonation_output__jobid = []\n\n get_jobid_of_file_detonation_output__jobid.append(saa_file_detonation_result_item_0)\n #phantom.debug(\"get_jobid_of_file_detonation_output__jobid: {}\".format(get_jobid_of_file_detonation_output__jobid))\n", + "warnings": {}, + "x": 340, + "y": 686 + }, + "15": { + "data": { + "action": "get job forensics", + "actionType": "investigate", + "advanced": { + "customName": "saa get file job forensics output", + "customNameId": 0, + "description": "Queries SAA Forensics data relative to the JobID of URL(s) or File(s) needs to be detonated.", + "join": [], + "note": "Queries SAA Forensics data relative to the JobID of URL(s) or File(s) needs to be detonated." + }, + "connector": "Splunk Attack Analyzer", + "connectorConfigs": [ + "splunk attack analyzer" + ], + "connectorId": "de681fee-c552-45bf-9212-827b1c7529f8", + "connectorVersion": "v1", + "functionId": 2, + "functionName": "saa_get_file_job_forensics_output", + "id": "15", + "parameters": { + "job_id": "get_jobid_of_file_detonation_output:custom_function:jobid", + "timeout": "5" + }, + "requiredParameters": [ + { + "data_type": "string", + "field": "job_id" + } + ], + "type": "action" + }, + "errors": {}, + "id": "15", + "type": "action", + "userCode": "\n # Write your custom code here...\n parameters = []\n for job_ids in get_jobid_of_file_detonation_output__jobid:\n for job in job_ids:\n if job is not None:\n parameters.append({\n \"job_id\": job,\n \"timeout\": 5,\n })\n #phantom.debug(parameters)\n", + "warnings": {}, + "x": 340, + "y": 880 + }, + "17": { + "data": { + "advanced": { + "customName": "normalized job forensic report output", + "customNameId": 1, + "description": "This block uses custom code for normalizing score. Adjust the logic as desired in the documented sections.", + "join": [], + "note": "This block uses custom code for normalizing score. Adjust the logic as desired in the documented sections." + }, + "functionId": 5, + "functionName": "normalized_job_forensic_report_output_1", + "id": "17", + "inputParameters": [ + "playbook_input:vault_id", + "saa_get_file_job_forensics_output:action_result.data.*.DisplayScore", + "saa_get_file_job_forensics_output:action_result.data.*.Detections.*.Description", + "saa_get_file_job_forensics_output:action_result.data.*.Verdict", + "saa_get_file_job_forensics_output:action_result.data" + ], + "outputVariables": [ + "file_score_object", + "scores", + "categories", + "confidence" + ], + "type": "code" + }, + "errors": {}, + "id": "17", + "type": "code", + "userCode": "\n # Write your custom code here...\n score_id =0\n score_table = {\n \"0\":\"Unknown\",\n \"10\":\"Very_Safe\",\n \"20\":\"Safe\",\n \"30\":\"Probably_Safe\",\n \"40\":\"Leans_Safe\",\n \"50\":\"May_not_be_Safe\",\n \"60\":\"Exercise_Caution\",\n \"70\":\"Suspicious_or_Risky\",\n \"80\":\"Possibly_Malicious\",\n \"90\":\"Probably_Malicious\",\n \"100\":\"Malicious\"\n }\n #phantom.debug(\"vault_id: {}\".format(ssa_get_job_forensics_output_result_item_0))\n #phantom.debug(\"DisplayScore: {}\".format(ssa_get_job_forensics_output_result_item_1))\n #phantom.debug(\"Category: {}\".format(ssa_get_job_forensics_output_result_item_2))\n #phantom.debug(\"verdict: {}\".format(ssa_get_job_forensics_output_result_item_3))\n #phantom.debug(\"action_data: {}\".format(ssa_get_job_forensics_output_result_item_4))\n\n \n normalized_job_forensic_report_output_1__file_score_object = []\n normalized_job_forensic_report_output_1__scores = []\n normalized_job_forensic_report_output_1__categories = []\n normalized_job_forensic_report_output_1__confidence = []\n \n ## normalized NoneType value to avoid enumeration failure\n file_detonation_param_list = [(i or \"\") for i in playbook_input_vault_id_values] \n file_detonation_threat_score_list = [(i or 0) for i in saa_get_file_job_forensics_output_result_item_0] \n file_detonation_category_list = [(i or \"\") for i in saa_get_file_job_forensics_output_result_item_1] \n file_detonation_verdict_list = [(i or \"\") for i in saa_get_file_job_forensics_output_result_item_2] \n \n ## get the set() or unique input url parameter.\n \n index_file_dict = {}\n set_file_inputs = set(file_detonation_param_list)\n \n for file_input in set_file_inputs:\n vaultid_list = []\n score_list = []\n display_score_list = []\n category_list = []\n \n ## getting the index of each detonation phase of the url group the result for each url detonation\n file_input_index = [indx for indx, vaultid_val in enumerate(file_detonation_param_list) if vaultid_val == file_input]\n index_file_dict[file_input] = file_input_index\n \n for idx,(_vaultid, _score, _display_score, _category) in enumerate(zip(file_detonation_param_list, file_detonation_verdict_list, file_detonation_threat_score_list, file_detonation_category_list)):\n if _vaultid == file_input and idx in index_file_dict[file_input]:\n vaultid_list.append(_vaultid)\n score_list.append(_score)\n display_score_list.append(_display_score)\n category_list.append(_category)\n \n ## if score_list is empty or it has one element but empty string, lets score it base on confidence score of its engine detonation\n #phantom.debug(\"score_list: {} len: {}\".format(score_list, len(score_list)))\n #phantom.debug(\"category_list: {} len: {}\".format(category_list, len(category_list)))\n confidence_ = list(set(display_score_list))[0]\n categories = list(set(category_list))\n \n if len(score_list) == 0 or (len(set(score_list)) == 1 and score_list[0] == \"\"):\n if confidence_ >= 0 and confidence_ < 10:\n score_id = 0\n elif confidence_ >= 10 and confidence_ < 20:\n score_id = 10\n elif confidence_ >= 20 and confidence_ < 30:\n score_id = 20\n elif confidence_ >= 30 and confidence_ < 40:\n score_id = 30\n elif confidence_ >= 40 and confidence_ < 50:\n score_id = 40\n elif confidence_ >= 50 and confidence_ < 60:\n score_id = 50\n elif confidence_ >= 60 and confidence_ < 70:\n score_id = 60\n elif confidence_ >= 70 and confidence_ < 80:\n score_id = 70\n elif confidence_ >= 80 and confidence_ < 90:\n score_id = 80\n elif confidence_ >= 90 and confidence_ < 100:\n score_id = 90\n elif confidence_ >= 100:\n score_id = 100\n \n score = score_table[str(score_id)]\n \n else:\n score = list(set(score_list))[0]\n \n # Attach final object\n normalized_job_forensic_report_output_1__file_score_object.append({'score': score, 'confidence': confidence_, 'categories': categories})\n normalized_job_forensic_report_output_1__scores.append(score)\n normalized_job_forensic_report_output_1__categories.append(categories)\n normalized_job_forensic_report_output_1__confidence.append(confidence_)\n phantom.debug(\"normalized_job_forensic_report_output_1__file_score_object: {}\".format(normalized_job_forensic_report_output_1__file_score_object))\n phantom.debug(\"normalized_job_forensic_report_output_1__scores: {}\".format(normalized_job_forensic_report_output_1__scores))\n phantom.debug(\"normalized_job_forensic_report_output_1__categories: {}\".format(normalized_job_forensic_report_output_1__categories))\n", + "warnings": {}, + "x": 340, + "y": 1254 + }, + "18": { + "data": { + "advanced": { + "customName": "format file report ", + "customNameId": 0, + "description": "Format a summary table with the information gathered from the playbook.", + "join": [], + "note": "Format a summary table with the information gathered from the playbook." + }, + "functionId": 2, + "functionName": "format_file_report", + "id": "18", + "parameters": [ + "playbook_input:vault_id", + "normalized_job_forensic_report_output_1:custom_function:scores", + "normalized_job_forensic_report_output_1:custom_function:confidence", + "normalized_job_forensic_report_output_1:custom_function:categories", + "get_jobid_of_file_detonation_output:custom_function:jobid" + ], + "template": "SOAR analyzed File(s) using Splunk Attack Analyzer. The table below shows a summary of the information gathered.\n\n| File hash | Score | Confidence |Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} |https://app.twinwave.io/job/{4} | Splunk Attack Analyzer (SAA){1}{2}{3}{4} |\n%%\n\n\n", + "type": "format" + }, + "errors": {}, + "id": "18", + "type": "format", + "userCode": "\n # Write your custom code here...\n #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"format_report_file\"))\n", + "warnings": {}, + "x": 340, + "y": 1440 + }, + "19": { + "data": { + "advanced": { + "customName": "build file output", + "customNameId": 0, + "description": "This block uses custom code to generate an observable dictionary to output into the observables data path.", + "join": [], + "note": "This block uses custom code to generate an observable dictionary to output into the observables data path." + }, + "functionId": 6, + "functionName": "build_file_output", + "id": "19", + "inputParameters": [ + "playbook_input:vault_id", + "get_jobid_of_file_detonation_output:custom_function:jobid", + "normalized_job_forensic_report_output_1:custom_function:file_score_object" + ], + "outputVariables": [ + "observable_array" + ], + "type": "code" + }, + "errors": {}, + "id": "19", + "type": "code", + "userCode": "\n # Write your custom code here...\n build_file_output__observable_array = []\n for jobs_id in get_jobid_of_file_detonation_output__jobid:\n for _vault_id, external_id, file_object in zip(playbook_input_vault_id_values, jobs_id, normalized_job_forensic_report_output_1__file_score_object):\n phantom.debug(\"vault: {} id: {}\".format(_vault_id, external_id))\n observable_object = {\n\n \"vault_id\": _vault_id,\n \"type\": \"hash\",\n \"reputation\": {\n \"score\": file_object['score'],\n \"confidence\": file_object['confidence'],\n\n },\n \"enrichment\": {\n \"provider\": \"Splunk Attack Analyzer\",\n \"type\": \"file\",\n\n },\n \"categories\": file_object['categories'],\n \"source\": \"Splunk Attack Analyzer (SAA)\",\n \"source_link\":f\"https://app.twinwave.io/job/{external_id}\"\n }\n build_file_output__observable_array.append(observable_object)\n phantom.debug(\"build_file_output__observable_array: {}\".format(build_file_output__observable_array))\n", + "warnings": {}, + "x": 340, + "y": 1626 + }, + "2": { + "data": { + "advanced": { + "customName": "saa input filter", + "customNameId": 0, + "description": "Determine branches based on provided inputs.", + "join": [], + "note": "Determine branches based on provided inputs." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "!=", + "param": "playbook_input:url", + "value": "" + } + ], + "conditionIndex": 0, + "customName": "saa_url_input", + "logic": "and" + }, + { + "comparisons": [ + { + "conditionIndex": 1, + "op": "!=", + "param": "playbook_input:vault_id", + "value": "" + } + ], + "conditionIndex": 1, + "customName": "saa_vault_id_input", + "logic": "and" + } + ], + "functionId": 1, + "functionName": "saa_input_filter", + "id": "2", + "type": "filter" + }, + "errors": {}, + "id": "2", + "type": "filter", + "warnings": {}, + "x": 230, + "y": 148 + }, + "3": { + "data": { + "action": "detonate url", + "actionType": "generic", + "advanced": { + "customName": "saa url detonation", + "customNameId": 0, + "description": "Queries SAA for information about the provided URL(s)", + "join": [], + "note": "Queries SAA for information about the provided URL(s)" + }, + "connector": "Splunk Attack Analyzer", + "connectorConfigs": [ + "splunk attack analyzer" + ], + "connectorId": "de681fee-c552-45bf-9212-827b1c7529f8", + "connectorVersion": "v1", + "functionId": 1, + "functionName": "saa_url_detonation", + "id": "3", + "parameters": { + "url": "playbook_input:url" + }, + "requiredParameters": [ + { + "data_type": "string", + "field": "url" + } + ], + "type": "action" + }, + "errors": {}, + "id": "3", + "type": "action", + "userCode": "\n # Write your custom code here...\n\n", + "warnings": {}, + "x": 0, + "y": 320 + }, + "4": { + "data": { + "advanced": { + "customName": "url detonation status filter", + "customNameId": 0, + "description": "Filters successful url or file detonation results.", + "join": [], + "note": "Filters successful url or file detonation results." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "==", + "param": "saa_url_detonation:action_result.status", + "value": "success" + } + ], + "conditionIndex": 0, + "customName": "saa_url_success_status", + "logic": "and" + }, + { + "comparisons": [ + { + "conditionIndex": 1, + "op": "==", + "param": "saa_file_detonation:action_result.status", + "value": "success" + } + ], + "conditionIndex": 1, + "customName": "saa_url_success_status", + "logic": "and" + } + ], + "functionId": 2, + "functionName": "url_detonation_status_filter", + "id": "4", + "type": "filter" + }, + "errors": {}, + "id": "4", + "type": "filter", + "warnings": {}, + "x": 230, + "y": 506 + }, + "5": { + "data": { + "advanced": { + "customName": "get jobid of url detonation output", + "customNameId": 0, + "description": "This block uses custom code for fetching JobID for URL(s) or file(s) detonation.", + "join": [], + "note": "This block uses custom code for fetching JobID for URL(s) or file(s) detonation.", + "scope": "default" + }, + "functionId": 1, + "functionName": "get_jobid_of_url_detonation_output", + "id": "5", + "inputParameters": [ + "saa_url_detonation:action_result.data.*.JobID" + ], + "outputVariables": [ + "jobid" + ], + "type": "code" + }, + "errors": {}, + "id": "5", + "type": "code", + "userCode": "\n # Write your custom code here...\n get_jobid_of_url_detonation_output__jobid = []\n\n get_jobid_of_url_detonation_output__jobid.append(saa_url_detonation_result_item_0)\n #phantom.debug(\"get_jobid_of_url_detonation_output__jobid: {}\".format(get_jobid_of_url_detonation_output__jobid))\n", + "warnings": {}, + "x": 0, + "y": 686 + }, + "6": { + "data": { + "action": "get job forensics", + "actionType": "investigate", + "advanced": { + "customName": "ssa get job forensics output", + "customNameId": 0, + "description": "Queries SAA Forensics data relative to the JobID of URL(s) or File(s) needs to be detonated.", + "join": [], + "note": "Queries SAA Forensics data relative to the JobID of URL(s) or File(s) needs to be detonated." + }, + "connector": "Splunk Attack Analyzer", + "connectorConfigs": [ + "splunk attack analyzer" + ], + "connectorId": "de681fee-c552-45bf-9212-827b1c7529f8", + "connectorVersion": "v1", + "functionId": 1, + "functionName": "ssa_get_job_forensics_output", + "id": "6", + "parameters": { + "job_id": "get_jobid_of_url_detonation_output:custom_function:jobid", + "timeout": "5" + }, + "requiredParameters": [ + { + "data_type": "string", + "field": "job_id" + } + ], + "type": "action" + }, + "errors": {}, + "id": "6", + "type": "action", + "userCode": "\n # Write your custom code here...\n parameters = []\n for job_ids in get_jobid_of_url_detonation_output__jobid:\n for job in job_ids:\n if job is not None:\n parameters.append({\n \"job_id\": job,\n \"timeout\": 5,\n })\n #phantom.debug(parameters)\n", + "warnings": {}, + "x": 0, + "y": 880 + }, + "7": { + "data": { + "advanced": { + "customName": "get jobid forensic filter", + "customNameId": 0, + "description": "Filters successful url or file detonation job forensic results.", + "join": [], + "note": "Filters successful url or file detonation job forensic results." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "==", + "param": "ssa_get_job_forensics_output:action_result.status", + "value": "success" + } + ], + "conditionIndex": 0, + "customName": "get_job_forensic_success", + "logic": "and" + }, + { + "comparisons": [ + { + "conditionIndex": 1, + "op": "==", + "param": "saa_get_file_job_forensics_output:action_result.status", + "value": "success" + } + ], + "conditionIndex": 1, + "customName": "get_job_file_forensic_sucess", + "logic": "and" + } + ], + "functionId": 3, + "functionName": "get_jobid_forensic_filter", + "id": "7", + "type": "filter" + }, + "errors": {}, + "id": "7", + "type": "filter", + "warnings": {}, + "x": 230, + "y": 1074 + }, + "8": { + "data": { + "advanced": { + "customName": "normalized job forensic report output", + "customNameId": 0, + "description": "This block uses custom code for normalizing score. Adjust the logic as desired in the documented sections.", + "join": [], + "note": "This block uses custom code for normalizing score. Adjust the logic as desired in the documented sections." + }, + "functionId": 2, + "functionName": "normalized_job_forensic_report_output", + "id": "8", + "inputParameters": [ + "ssa_get_job_forensics_output:action_result.data.*.URLs.*.URL", + "ssa_get_job_forensics_output:action_result.data.*.DisplayScore", + "ssa_get_job_forensics_output:action_result.data.*.Detections.*.Description", + "ssa_get_job_forensics_output:action_result.data.*.Verdict", + "ssa_get_job_forensics_output:action_result.data" + ], + "outputVariables": [ + "url_score_object", + "scores", + "categories", + "confidence" + ], + "type": "code" + }, + "errors": {}, + "id": "8", + "type": "code", + "userCode": "\n # Write your custom code here...\n score_id =0\n score_table = {\n \"0\":\"Unknown\",\n \"10\":\"Very_Safe\",\n \"20\":\"Safe\",\n \"30\":\"Probably_Safe\",\n \"40\":\"Leans_Safe\",\n \"50\":\"May_not_be_Safe\",\n \"60\":\"Exercise_Caution\",\n \"70\":\"Suspicious_or_Risky\",\n \"80\":\"Possibly_Malicious\",\n \"90\":\"Probably_Malicious\",\n \"100\":\"Malicious\"\n }\n #phantom.debug(\"url: {}\".format(ssa_get_job_forensics_output_result_item_0))\n #phantom.debug(\"DisplayScore: {}\".format(ssa_get_job_forensics_output_result_item_1))\n #phantom.debug(\"Category: {}\".format(ssa_get_job_forensics_output_result_item_2))\n #phantom.debug(\"verdict: {}\".format(ssa_get_job_forensics_output_result_item_3))\n #phantom.debug(\"action_data: {}\".format(ssa_get_job_forensics_output_result_item_4))\n\n \n normalized_job_forensic_report_output__url_score_object = []\n normalized_job_forensic_report_output__scores = []\n normalized_job_forensic_report_output__categories = []\n normalized_job_forensic_report_output__confidence = []\n \n ## normalized NoneType value to avoid enumeration failure\n url_detonation_param_list = [(i or \"\") for i in ssa_get_job_forensics_output_result_item_0] \n url_detonation_threat_score_list = [(i or 0) for i in ssa_get_job_forensics_output_result_item_1] \n url_detonation_category_list = [(i or \"\") for i in ssa_get_job_forensics_output_result_item_2] \n url_detonation_verdict_list = [(i or \"\") for i in ssa_get_job_forensics_output_result_item_3] \n \n ## get the set() or unique input url parameter.\n \n index_url_dict = {}\n set_url_inputs = set(url_detonation_param_list)\n \n for url_input in set_url_inputs:\n url_list = []\n score_list = []\n display_score_list = []\n category_list = []\n \n ## getting the index of each detonation phase of the url group the result for each url detonation\n url_input_index = [indx for indx, url_val in enumerate(url_detonation_param_list) if url_val == url_input]\n index_url_dict[url_input] = url_input_index\n\n for idx,(_url, _score, _display_score, _category) in enumerate(zip(url_detonation_param_list, url_detonation_verdict_list, url_detonation_threat_score_list, url_detonation_category_list)):\n if _url == url_input and idx in index_url_dict[url_input]:\n url_list.append(_url)\n score_list.append(_score)\n display_score_list.append(_display_score)\n category_list.append(_category)\n \n ## if score_list is empty or it has one element but empty string, lets score it base on confidence score of its engine detonation\n #phantom.debug(\"score_list: {} len: {}\".format(score_list, len(score_list)))\n #phantom.debug(\"category_list: {} len: {}\".format(category_list, len(category_list)))\n confidence_ = list(set(display_score_list))[0]\n categories = list(set(category_list))\n\n if len(score_list) == 0 or (len(set(score_list)) == 1 and score_list[0] == \"\"):\n if confidence_ >= 0 and confidence_ < 10:\n score_id = 0\n elif confidence_ >= 10 and confidence_ < 20:\n score_id = 10\n elif confidence_ >= 20 and confidence_ < 30:\n score_id = 20\n elif confidence_ >= 30 and confidence_ < 40:\n score_id = 30\n elif confidence_ >= 40 and confidence_ < 50:\n score_id = 40\n elif confidence_ >= 50 and confidence_ < 60:\n score_id = 50\n elif confidence_ >= 60 and confidence_ < 70:\n score_id = 60\n elif confidence_ >= 70 and confidence_ < 80:\n score_id = 70\n elif confidence_ >= 80 and confidence_ < 90:\n score_id = 80\n elif confidence_ >= 90 and confidence_ < 100:\n score_id = 90\n elif confidence_ >= 100:\n score_id = 100\n \n score = score_table[str(score_id)]\n \n else:\n score = list(set(score_list))[0]\n \n # Attach final object\n normalized_job_forensic_report_output__url_score_object.append({'score': score, 'confidence': confidence_, 'categories': categories})\n normalized_job_forensic_report_output__scores.append(score)\n normalized_job_forensic_report_output__categories.append(categories)\n normalized_job_forensic_report_output__confidence.append(confidence_)\n phantom.debug(\"normalized_job_forensic_report_output__url_score_object: {}\".format(normalized_job_forensic_report_output__url_score_object))\n phantom.debug(\"normalized_job_forensic_report_output__categories: {}\".format(normalized_job_forensic_report_output__categories))\n phantom.debug(\"normalized_job_forensic_report_output__confidence: {}\".format(normalized_job_forensic_report_output__confidence))\n\n", + "warnings": {}, + "x": 0, + "y": 1260 + } + }, + "notes": "Inputs: url, file_hash\nInteractions: Splunk Attack Analyzer\nActions: url detonation, , file detonation\nOutputs: report, observables" + }, + "input_spec": [ + { + "contains": [ + "url" + ], + "description": "A URL provided for reputation analysis - Splunk Attack Analyzer", + "name": "url" + }, + { + "contains": [ + "vault id" + ], + "description": "A vault_id provided for reputation analysis - Splunk Attack Analyzer", + "name": "vault_id" + } + ], + "output_spec": null, + "playbook_type": "data", + "python_version": "3", + "schema": "5.0.8", + "version": "5.5.0.108488" + }, + "create_time": "2023-03-23T11:53:03.128006+00:00", + "draft_mode": false, + "labels": [ + "*" + ], + "tags": [ + "url", + "file_hash", + "reputation", + "D3-IPRA", + "D3-FHRA", + "D3-DNRA", + "D3-URA", + "ip", + "domain", + "sandbox" + ] +} \ No newline at end of file diff --git a/playbooks/SAA_Dynamic_Analysis.png b/playbooks/SAA_Dynamic_Analysis.png new file mode 100644 index 0000000000000000000000000000000000000000..de72222307c740518b09430ff53221566f2de87a GIT binary patch literal 81150 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 aY*Ra}UJ?w= 0 and confidence_ < 10: + score_id = 0 + elif confidence_ >= 10 and confidence_ < 20: + score_id = 10 + elif confidence_ >= 20 and confidence_ < 30: + score_id = 20 + elif confidence_ >= 30 and confidence_ < 40: + score_id = 30 + elif confidence_ >= 40 and confidence_ < 50: + score_id = 40 + elif confidence_ >= 50 and confidence_ < 60: + score_id = 50 + elif confidence_ >= 60 and confidence_ < 70: + score_id = 60 + elif confidence_ >= 70 and confidence_ < 80: + score_id = 70 + elif confidence_ >= 80 and confidence_ < 90: + score_id = 80 + elif confidence_ >= 90 and confidence_ < 100: + score_id = 90 + elif confidence_ >= 100: + score_id = 100 + + score = score_table[str(score_id)] + + else: + score = list(set(score_list))[0] + + # Attach final object + normalized_job_forensic_report_output__url_score_object.append({'score': score, 'confidence': confidence_, 'categories': categories}) + normalized_job_forensic_report_output__scores.append(score) + normalized_job_forensic_report_output__categories.append(categories) + normalized_job_forensic_report_output__confidence.append(confidence_) + phantom.debug("normalized_job_forensic_report_output__url_score_object: {}".format(normalized_job_forensic_report_output__url_score_object)) + phantom.debug("normalized_job_forensic_report_output__categories: {}".format(normalized_job_forensic_report_output__categories)) + phantom.debug("normalized_job_forensic_report_output__confidence: {}".format(normalized_job_forensic_report_output__confidence)) + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_run_data(key="normalized_job_forensic_report_output:url_score_object", value=json.dumps(normalized_job_forensic_report_output__url_score_object)) + phantom.save_run_data(key="normalized_job_forensic_report_output:scores", value=json.dumps(normalized_job_forensic_report_output__scores)) + phantom.save_run_data(key="normalized_job_forensic_report_output:categories", value=json.dumps(normalized_job_forensic_report_output__categories)) + phantom.save_run_data(key="normalized_job_forensic_report_output:confidence", value=json.dumps(normalized_job_forensic_report_output__confidence)) + + format_url_report(container=container) + + return + + +@phantom.playbook_block() +def format_url_report(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("format_url_report() called") + + ################################################################################ + # Format a summary table with the information gathered from the playbook. + ################################################################################ + + template = """SOAR analyzed URL(s) using Splunk Attack Analyzer. The table below shows a summary of the information gathered.\n\n| URL | Score | Confidence |Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} |https://app.twinwave.io/job/{4} | Splunk Attack Analyzer (SAA){1}{2}{3}{4} |\n%%\n\n\n""" + + # parameter list for template variable replacement + parameters = [ + "playbook_input:url", + "normalized_job_forensic_report_output:custom_function:scores", + "normalized_job_forensic_report_output:custom_function:confidence", + "normalized_job_forensic_report_output:custom_function:categories", + "get_jobid_of_url_detonation_output:custom_function:jobid" + ] + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="format_report_url")) + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.format(container=container, template=template, parameters=parameters, name="format_url_report") + + build_url_output(container=container) + + return + + +@phantom.playbook_block() +def build_url_output(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("build_url_output() called") + + ################################################################################ + # This block uses custom code to generate an observable dictionary to output into + # the observables data path. + ################################################################################ + + playbook_input_url = phantom.collect2(container=container, datapath=["playbook_input:url"]) + get_jobid_of_url_detonation_output__jobid = json.loads(_ if (_ := phantom.get_run_data(key="get_jobid_of_url_detonation_output:jobid")) != "" else "null") # pylint: disable=used-before-assignment + normalized_job_forensic_report_output__url_score_object = json.loads(_ if (_ := phantom.get_run_data(key="normalized_job_forensic_report_output:url_score_object")) != "" else "null") # pylint: disable=used-before-assignment + + playbook_input_url_values = [item[0] for item in playbook_input_url] + + build_url_output__observable_array = None + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + from urllib.parse import urlparse + build_url_output__observable_array = [] + phantom.debug(playbook_input_url_values) + # Build URL + for jobs_id in get_jobid_of_url_detonation_output__jobid: + + for url, external_id, url_object in zip(playbook_input_url_values, jobs_id, normalized_job_forensic_report_output__url_score_object): + parsed_url = urlparse(url) + phantom.debug("url: {} jobs_id:{}".format(url, external_id)) + phantom.debug("parsed_url: {}, url_object: {}".format(parsed_url, url_object)) + observable_object = { + "value": url, + "type": "url", + "reputation": { + "score": url_object['score'], + "confidence": url_object['confidence'] + }, + "attributes": { + "hostname": parsed_url.hostname, + "scheme": parsed_url.scheme + }, + "categories": url_object['categories'], + "source": "Splunk Attack Analyzer (SAA)", + "source_link": f"https://app.twinwave.io/job/{external_id}" + } + + if parsed_url.path: + observable_object['attributes']['path'] = parsed_url.path + if parsed_url.query: + observable_object['attributes']['query'] = parsed_url.query + if parsed_url.port: + observable_object['attributes']['port'] = parsed_url.port + + build_url_output__observable_array.append(observable_object) + phantom.debug("build_url_output__observable_array: {}".format(build_url_output__observable_array)) + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_run_data(key="build_url_output:observable_array", value=json.dumps(build_url_output__observable_array)) + + return + + +@phantom.playbook_block() +def saa_file_detonation(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("saa_file_detonation() called") + + # phantom.debug('Action: {0} {1}'.format(action['name'], ('SUCCEEDED' if success else 'FAILED'))) + + ################################################################################ + # Queries SAA for information about the provided vault_id(s) + ################################################################################ + + playbook_input_vault_id = phantom.collect2(container=container, datapath=["playbook_input:vault_id"]) + + parameters = [] + + # build parameters list for 'saa_file_detonation' call + for playbook_input_vault_id_item in playbook_input_vault_id: + if playbook_input_vault_id_item[0] is not None: + parameters.append({ + "file": playbook_input_vault_id_item[0], + }) + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.act("detonate file", parameters=parameters, name="saa_file_detonation", assets=["splunk attack analyzer"], callback=join_url_detonation_status_filter) + + return + + +@phantom.playbook_block() +def get_jobid_of_file_detonation_output(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("get_jobid_of_file_detonation_output() called") + + ################################################################################ + # This block uses custom code for fetching JobID for URL(s) or file(s) detonation. + ################################################################################ + + saa_file_detonation_result_data = phantom.collect2(container=container, datapath=["saa_file_detonation:action_result.data.*.JobID"], action_results=results) + + saa_file_detonation_result_item_0 = [item[0] for item in saa_file_detonation_result_data] + + get_jobid_of_file_detonation_output__jobid = None + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + get_jobid_of_file_detonation_output__jobid = [] + + get_jobid_of_file_detonation_output__jobid.append(saa_file_detonation_result_item_0) + #phantom.debug("get_jobid_of_file_detonation_output__jobid: {}".format(get_jobid_of_file_detonation_output__jobid)) + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_run_data(key="get_jobid_of_file_detonation_output:jobid", value=json.dumps(get_jobid_of_file_detonation_output__jobid)) + + saa_get_file_job_forensics_output(container=container) + + return + + +@phantom.playbook_block() +def saa_get_file_job_forensics_output(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("saa_get_file_job_forensics_output() called") + + # phantom.debug('Action: {0} {1}'.format(action['name'], ('SUCCEEDED' if success else 'FAILED'))) + + ################################################################################ + # Queries SAA Forensics data relative to the JobID of URL(s) or File(s) needs + # to be detonated. + ################################################################################ + + get_jobid_of_file_detonation_output__jobid = json.loads(_ if (_ := phantom.get_run_data(key="get_jobid_of_file_detonation_output:jobid")) != "" else "null") # pylint: disable=used-before-assignment + + parameters = [] + + if get_jobid_of_file_detonation_output__jobid is not None: + parameters.append({ + "job_id": get_jobid_of_file_detonation_output__jobid, + "timeout": 5, + }) + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + parameters = [] + for job_ids in get_jobid_of_file_detonation_output__jobid: + for job in job_ids: + if job is not None: + parameters.append({ + "job_id": job, + "timeout": 5, + }) + #phantom.debug(parameters) + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.act("get job forensics", parameters=parameters, name="saa_get_file_job_forensics_output", assets=["splunk attack analyzer"], callback=join_get_jobid_forensic_filter) + + return + + +@phantom.playbook_block() +def normalized_job_forensic_report_output_1(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("normalized_job_forensic_report_output_1() called") + + ################################################################################ + # This block uses custom code for normalizing score. Adjust the logic as desired + # in the documented sections. + ################################################################################ + + playbook_input_vault_id = phantom.collect2(container=container, datapath=["playbook_input:vault_id"]) + saa_get_file_job_forensics_output_result_data = phantom.collect2(container=container, datapath=["saa_get_file_job_forensics_output:action_result.data.*.DisplayScore","saa_get_file_job_forensics_output:action_result.data.*.Detections.*.Description","saa_get_file_job_forensics_output:action_result.data.*.Verdict","saa_get_file_job_forensics_output:action_result.data"], action_results=results) + + playbook_input_vault_id_values = [item[0] for item in playbook_input_vault_id] + saa_get_file_job_forensics_output_result_item_0 = [item[0] for item in saa_get_file_job_forensics_output_result_data] + saa_get_file_job_forensics_output_result_item_1 = [item[1] for item in saa_get_file_job_forensics_output_result_data] + saa_get_file_job_forensics_output_result_item_2 = [item[2] for item in saa_get_file_job_forensics_output_result_data] + saa_get_file_job_forensics_output_result_item_3 = [item[3] for item in saa_get_file_job_forensics_output_result_data] + + normalized_job_forensic_report_output_1__file_score_object = None + normalized_job_forensic_report_output_1__scores = None + normalized_job_forensic_report_output_1__categories = None + normalized_job_forensic_report_output_1__confidence = None + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + score_id =0 + score_table = { + "0":"Unknown", + "10":"Very_Safe", + "20":"Safe", + "30":"Probably_Safe", + "40":"Leans_Safe", + "50":"May_not_be_Safe", + "60":"Exercise_Caution", + "70":"Suspicious_or_Risky", + "80":"Possibly_Malicious", + "90":"Probably_Malicious", + "100":"Malicious" + } + #phantom.debug("vault_id: {}".format(ssa_get_job_forensics_output_result_item_0)) + #phantom.debug("DisplayScore: {}".format(ssa_get_job_forensics_output_result_item_1)) + #phantom.debug("Category: {}".format(ssa_get_job_forensics_output_result_item_2)) + #phantom.debug("verdict: {}".format(ssa_get_job_forensics_output_result_item_3)) + #phantom.debug("action_data: {}".format(ssa_get_job_forensics_output_result_item_4)) + + + normalized_job_forensic_report_output_1__file_score_object = [] + normalized_job_forensic_report_output_1__scores = [] + normalized_job_forensic_report_output_1__categories = [] + normalized_job_forensic_report_output_1__confidence = [] + + ## normalized NoneType value to avoid enumeration failure + file_detonation_param_list = [(i or "") for i in playbook_input_vault_id_values] + file_detonation_threat_score_list = [(i or 0) for i in saa_get_file_job_forensics_output_result_item_0] + file_detonation_category_list = [(i or "") for i in saa_get_file_job_forensics_output_result_item_1] + file_detonation_verdict_list = [(i or "") for i in saa_get_file_job_forensics_output_result_item_2] + + ## get the set() or unique input url parameter. + + index_file_dict = {} + set_file_inputs = set(file_detonation_param_list) + + for file_input in set_file_inputs: + vaultid_list = [] + score_list = [] + display_score_list = [] + category_list = [] + + ## getting the index of each detonation phase of the url group the result for each url detonation + file_input_index = [indx for indx, vaultid_val in enumerate(file_detonation_param_list) if vaultid_val == file_input] + index_file_dict[file_input] = file_input_index + + for idx,(_vaultid, _score, _display_score, _category) in enumerate(zip(file_detonation_param_list, file_detonation_verdict_list, file_detonation_threat_score_list, file_detonation_category_list)): + if _vaultid == file_input and idx in index_file_dict[file_input]: + vaultid_list.append(_vaultid) + score_list.append(_score) + display_score_list.append(_display_score) + category_list.append(_category) + + ## if score_list is empty or it has one element but empty string, lets score it base on confidence score of its engine detonation + #phantom.debug("score_list: {} len: {}".format(score_list, len(score_list))) + #phantom.debug("category_list: {} len: {}".format(category_list, len(category_list))) + confidence_ = list(set(display_score_list))[0] + categories = list(set(category_list)) + + if len(score_list) == 0 or (len(set(score_list)) == 1 and score_list[0] == ""): + if confidence_ >= 0 and confidence_ < 10: + score_id = 0 + elif confidence_ >= 10 and confidence_ < 20: + score_id = 10 + elif confidence_ >= 20 and confidence_ < 30: + score_id = 20 + elif confidence_ >= 30 and confidence_ < 40: + score_id = 30 + elif confidence_ >= 40 and confidence_ < 50: + score_id = 40 + elif confidence_ >= 50 and confidence_ < 60: + score_id = 50 + elif confidence_ >= 60 and confidence_ < 70: + score_id = 60 + elif confidence_ >= 70 and confidence_ < 80: + score_id = 70 + elif confidence_ >= 80 and confidence_ < 90: + score_id = 80 + elif confidence_ >= 90 and confidence_ < 100: + score_id = 90 + elif confidence_ >= 100: + score_id = 100 + + score = score_table[str(score_id)] + + else: + score = list(set(score_list))[0] + + # Attach final object + normalized_job_forensic_report_output_1__file_score_object.append({'score': score, 'confidence': confidence_, 'categories': categories}) + normalized_job_forensic_report_output_1__scores.append(score) + normalized_job_forensic_report_output_1__categories.append(categories) + normalized_job_forensic_report_output_1__confidence.append(confidence_) + phantom.debug("normalized_job_forensic_report_output_1__file_score_object: {}".format(normalized_job_forensic_report_output_1__file_score_object)) + phantom.debug("normalized_job_forensic_report_output_1__scores: {}".format(normalized_job_forensic_report_output_1__scores)) + phantom.debug("normalized_job_forensic_report_output_1__categories: {}".format(normalized_job_forensic_report_output_1__categories)) + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_run_data(key="normalized_job_forensic_report_output_1:file_score_object", value=json.dumps(normalized_job_forensic_report_output_1__file_score_object)) + phantom.save_run_data(key="normalized_job_forensic_report_output_1:scores", value=json.dumps(normalized_job_forensic_report_output_1__scores)) + phantom.save_run_data(key="normalized_job_forensic_report_output_1:categories", value=json.dumps(normalized_job_forensic_report_output_1__categories)) + phantom.save_run_data(key="normalized_job_forensic_report_output_1:confidence", value=json.dumps(normalized_job_forensic_report_output_1__confidence)) + + format_file_report(container=container) + + return + + +@phantom.playbook_block() +def format_file_report(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("format_file_report() called") + + ################################################################################ + # Format a summary table with the information gathered from the playbook. + ################################################################################ + + template = """SOAR analyzed File(s) using Splunk Attack Analyzer. The table below shows a summary of the information gathered.\n\n| File hash | Score | Confidence |Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} |https://app.twinwave.io/job/{4} | Splunk Attack Analyzer (SAA){1}{2}{3}{4} |\n%%\n\n\n""" + + # parameter list for template variable replacement + parameters = [ + "playbook_input:vault_id", + "normalized_job_forensic_report_output_1:custom_function:scores", + "normalized_job_forensic_report_output_1:custom_function:confidence", + "normalized_job_forensic_report_output_1:custom_function:categories", + "get_jobid_of_file_detonation_output:custom_function:jobid" + ] + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="format_report_file")) + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.format(container=container, template=template, parameters=parameters, name="format_file_report") + + build_file_output(container=container) + + return + + +@phantom.playbook_block() +def build_file_output(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("build_file_output() called") + + ################################################################################ + # This block uses custom code to generate an observable dictionary to output into + # the observables data path. + ################################################################################ + + playbook_input_vault_id = phantom.collect2(container=container, datapath=["playbook_input:vault_id"]) + get_jobid_of_file_detonation_output__jobid = json.loads(_ if (_ := phantom.get_run_data(key="get_jobid_of_file_detonation_output:jobid")) != "" else "null") # pylint: disable=used-before-assignment + normalized_job_forensic_report_output_1__file_score_object = json.loads(_ if (_ := phantom.get_run_data(key="normalized_job_forensic_report_output_1:file_score_object")) != "" else "null") # pylint: disable=used-before-assignment + + playbook_input_vault_id_values = [item[0] for item in playbook_input_vault_id] + + build_file_output__observable_array = None + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + build_file_output__observable_array = [] + for jobs_id in get_jobid_of_file_detonation_output__jobid: + for _vault_id, external_id, file_object in zip(playbook_input_vault_id_values, jobs_id, normalized_job_forensic_report_output_1__file_score_object): + phantom.debug("vault: {} id: {}".format(_vault_id, external_id)) + observable_object = { + + "vault_id": _vault_id, + "type": "hash", + "reputation": { + "score": file_object['score'], + "confidence": file_object['confidence'], + + }, + "enrichment": { + "provider": "Splunk Attack Analyzer", + "type": "file", + + }, + "categories": file_object['categories'], + "source": "Splunk Attack Analyzer (SAA)", + "source_link":f"https://app.twinwave.io/job/{external_id}" + } + build_file_output__observable_array.append(observable_object) + phantom.debug("build_file_output__observable_array: {}".format(build_file_output__observable_array)) + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_run_data(key="build_file_output:observable_array", value=json.dumps(build_file_output__observable_array)) + + return + + +@phantom.playbook_block() +def on_finish(container, summary): + phantom.debug("on_finish() called") + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + return \ No newline at end of file diff --git a/playbooks/SAA_Dynamic_Analysis.yml b/playbooks/SAA_Dynamic_Analysis.yml new file mode 100644 index 0000000000..aaeb0e971f --- /dev/null +++ b/playbooks/SAA_Dynamic_Analysis.yml @@ -0,0 +1,25 @@ +name: SAA Dynamic Analysis +id: 2754c122-c63b-4558-9b83-23c1e1b96177 +version: 1 +date: '2023-03-24' +author: Teoderick Contreras, Splunk +type: Investigation +description: "Accepts url link, domain or vault_id (hash) to be detonated using Splunk Attacker (SAA) API connector. This playbook produces a normalized output for each user and device." +playbook: SAA_Dynamic_Analysis +how_to_implement: This input playbook requires the SAA API connector to be configured. It is designed to work in conjunction with the Dynamic Attribute Lookup playbook or other playbooks in the same style. +references: [] +app_list: + - CrowdStrike OAuth API +tags: + platform_tags: + - reputation + - url + - domain + - sandbox + - ip + - file_hash + playbook_type: Input + vpe_type: Modern + playbook_fields: [] + product: + - Splunk SOAR \ No newline at end of file From 31aaeba573557eef32524f42de1747a02cdf705d Mon Sep 17 00:00:00 2001 From: tccontre Date: Fri, 24 Mar 2023 15:18:50 +0100 Subject: [PATCH 05/12] urlscan_io_dynamic_analysis_playbook --- playbooks/UrlScan_IO_Dynamic_Analysis.json | 36 +++++++++++++++------- playbooks/UrlScan_IO_Dynamic_Analysis.py | 20 ++++++++++-- 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/playbooks/UrlScan_IO_Dynamic_Analysis.json b/playbooks/UrlScan_IO_Dynamic_Analysis.json index c62e170974..09a8dd7012 100644 --- a/playbooks/UrlScan_IO_Dynamic_Analysis.json +++ b/playbooks/UrlScan_IO_Dynamic_Analysis.json @@ -1,7 +1,7 @@ { "blockly": false, "blockly_xml": "", - "category": "Uncategorized", + "category": "Dynamic Analysis", "coa": { "data": { "description": "Accepts a URL for detonation analysis on the objects. Generates a global report and a per observable sub-report and normalized score. The score can be customized based on a variety of factors.\n\nRef: https://d3fend.mitre.org/technique/d3f:IdentifierReputationAnalysis/", @@ -111,7 +111,7 @@ "targetPort": "5_in" } ], - "hash": "ac357dc4e4f5e34662927be84d2d1e67f2161c61", + "hash": "6c0864d678b617e9406a8eced20d9e41957ed064", "nodes": { "0": { "data": { @@ -127,7 +127,7 @@ "type": "start", "warnings": {}, "x": 190, - "y": 0 + "y": -6.394884621840902e-14 }, "1": { "data": { @@ -141,9 +141,10 @@ "errors": {}, "id": "1", "type": "end", + "userCode": "\n # Write your custom code here...\n no_error_code_format_report_url = phantom.get_format_data(name=\"no_error_code_format_report_url\")\n error_code_format_report_url = phantom.get_format_data(name=\"error_code_format_report_url\")\n markdown_report_combined_value = phantom.concatenate(no_error_code_format_report_url, error_code_format_report_url)\n output['markdown_report'] = markdown_report_combined_value\n", "warnings": {}, - "x": 190, - "y": 1448 + "x": 200, + "y": 1440 }, "10": { "data": { @@ -170,7 +171,7 @@ "errors": {}, "id": "10", "type": "code", - "userCode": "\n # Write your custom code here...\n # Write your custom code here...\n from urllib.parse import urlparse\n build_url_output__observable_array = []\n\n # Build URL\n url_scan_io_task_reporturl = [str(i or '') for i in url_reputation_result_item_1]\n url_scan_io_parameter_url = [str(i or '') for i in url_reputation_parameter_url]\n url_scan_io_url_score_object = [str(i or '') for i in normalize_score_url_with_error_code__url_score_object]\n \n #phantom.debug(\"url_reputation_parameter_url: {}\".format(url_reputation_parameter_url))\n #phantom.debug(\"url_reputation_result_item_1: {}\".format(url_reputation_result_item_1))\n #phantom.debug(\"normalize_score_url_with_error_code__url_score_object: {}\".format(normalize_score_url_with_error_code__url_score_object))\n \n for url, external_id, url_object in zip(url_reputation_parameter_url, url_reputation_result_item_1, normalize_score_url_with_error_code__url_score_object):\n #for url, external_id, url_object in zip(url_scan_io_task_reporturl, url_scan_io_task_reporturl, url_scan_io_url_score_object):\n parsed_url = urlparse(url)\n phantom.debug(\"parsed_url: {}\".format(parsed_url))\n observable_object = {\n \"value\": url,\n \"type\": \"url\",\n \"reputation\": {\n \"score_id\": url_object['score_id'],\n \"score\": url_object['score'],\n \"confidence\": url_object['confidence']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \"categories\": url_object['categories'],\n \"description\" :url_object['description'],\n \"source\": \"urlscan.io\",\n \"source_link\": f\"{external_id}\"\n }\n if parsed_url.path:\n observable_object['attributes']['path'] = parsed_url.path\n if parsed_url.query:\n observable_object['attributes']['query'] = parsed_url.query\n if parsed_url.port:\n observable_object['attributes']['port'] = parsed_url.port\n \n build_url_output__observable_array.append(observable_object)\n phantom.debug(\"build_url_output__observable_array: {}\".format(build_url_output__observable_array))\n", + "userCode": "\n # Write your custom code here...\n # Write your custom code here...\n from urllib.parse import urlparse\n build_url_output__observable_array = []\n\n # Build URL\n url_scan_io_task_reporturl = [str(i or '') for i in url_reputation_result_item_1]\n url_scan_io_parameter_url = [str(i or '') for i in url_reputation_parameter_url]\n url_scan_io_url_score_object = [str(i or '') for i in normalize_score_url_with_error_code__url_score_object]\n \n #phantom.debug(\"url_reputation_parameter_url: {}\".format(url_reputation_parameter_url))\n #phantom.debug(\"url_reputation_result_item_1: {}\".format(url_reputation_result_item_1))\n #phantom.debug(\"normalize_score_url_with_error_code__url_score_object: {}\".format(normalize_score_url_with_error_code__url_score_object))\n \n for url, external_id, url_object in zip(url_reputation_parameter_url, url_reputation_result_item_1, normalize_score_url_with_error_code__url_score_object):\n #for url, external_id, url_object in zip(url_scan_io_task_reporturl, url_scan_io_task_reporturl, url_scan_io_url_score_object):\n parsed_url = urlparse(url)\n phantom.debug(\"parsed_url: {}\".format(parsed_url))\n observable_object = {\n \"value\": url,\n \"type\": \"url\",\n \"sandbox\": {\n \"score_id\": url_object['score_id'],\n \"score\": url_object['score'],\n \"confidence\": url_object['confidence']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \"categories\": url_object['categories'],\n \"description\" :url_object['description'],\n \"source\": \"urlscan.io\",\n \"source_link\": f\"{external_id}\"\n }\n if parsed_url.path:\n observable_object['attributes']['path'] = parsed_url.path\n if parsed_url.query:\n observable_object['attributes']['query'] = parsed_url.query\n if parsed_url.port:\n observable_object['attributes']['port'] = parsed_url.port\n \n build_url_output__observable_array.append(observable_object)\n phantom.debug(\"build_url_output__observable_array: {}\".format(build_url_output__observable_array))\n", "warnings": {}, "x": 340, "y": 1254 @@ -200,7 +201,7 @@ "errors": {}, "id": "11", "type": "code", - "userCode": "\n # Write your custom code here...\n from urllib.parse import urlparse\n build_url_output__observable_array = []\n\n # Build URL\n for url, external_id, url_object in zip(url_reputation_parameter_url, filtered_result_0_data___task_reporturl, normalize_score_url_with_no_error_code__url_score_object):\n parsed_url = urlparse(url)\n phantom.debug(\"parsed_url: {}\".format(parsed_url))\n observable_object = {\n \"value\": url,\n \"type\": \"url\",\n \"reputation\": {\n \"score_id\": url_object['score_id'],\n \"score\": url_object['score'],\n \"confidence\": url_object['confidence']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \"categories\": url_object['categories'],\n \"description\" :url_object['description'],\n \"source\": \"urlscan.io\",\n \"source_link\": f\"{external_id}\"\n }\n if parsed_url.path:\n observable_object['attributes']['path'] = parsed_url.path\n if parsed_url.query:\n observable_object['attributes']['query'] = parsed_url.query\n if parsed_url.port:\n observable_object['attributes']['port'] = parsed_url.port\n \n build_url_output__observable_array.append(observable_object)\n phantom.debug(\"build_url_output__observable_array: {}\".format(build_url_output__observable_array))\n", + "userCode": "\n # Write your custom code here...\n from urllib.parse import urlparse\n build_url_output__observable_array = []\n\n # Build URL\n for url, external_id, url_object in zip(url_reputation_parameter_url, filtered_result_0_data___task_reporturl, normalize_score_url_with_no_error_code__url_score_object):\n parsed_url = urlparse(url)\n phantom.debug(\"parsed_url: {}\".format(parsed_url))\n observable_object = {\n \"value\": url,\n \"type\": \"url\",\n \"sandbox\": {\n \"score_id\": url_object['score_id'],\n \"score\": url_object['score'],\n \"confidence\": url_object['confidence']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \"categories\": url_object['categories'],\n \"description\" :url_object['description'],\n \"source\": \"urlscan.io\",\n \"source_link\": f\"{external_id}\"\n }\n if parsed_url.path:\n observable_object['attributes']['path'] = parsed_url.path\n if parsed_url.query:\n observable_object['attributes']['query'] = parsed_url.query\n if parsed_url.port:\n observable_object['attributes']['port'] = parsed_url.port\n \n build_url_output__observable_array.append(observable_object)\n phantom.debug(\"build_url_output__observable_array: {}\".format(build_url_output__observable_array))\n", "warnings": {}, "x": 0, "y": 1260 @@ -515,19 +516,30 @@ "name": "url" } ], - "output_spec": null, + "output_spec": [ + { + "contains": [], + "datapaths": [ + "build_url_output_with_error_code:custom_function:observable_array", + "build_url_output_with_no_error_code:custom_function:observable_array" + ], + "deduplicate": false, + "description": "An array of observable dictionaries with value, type, score, score_id, and categories.", + "metadata": {}, + "name": "observable" + } + ], "playbook_type": "data", "python_version": "3", "schema": "5.0.8", "version": "5.5.0.108488" }, - "create_time": "2023-03-23T10:34:24.990317+00:00", + "create_time": "2023-03-24T14:08:30.332219+00:00", "draft_mode": false, "labels": [ "*" ], "tags": [ - "reputation", "url", "domain", "ip", @@ -535,6 +547,8 @@ "D3-URA", "D3-DNRA", "D3-IPRA", - "D3-IRA" + "D3-IRA", + "urlscan.io", + "file_hash" ] } \ No newline at end of file diff --git a/playbooks/UrlScan_IO_Dynamic_Analysis.py b/playbooks/UrlScan_IO_Dynamic_Analysis.py index 9199998aa9..8c10618867 100644 --- a/playbooks/UrlScan_IO_Dynamic_Analysis.py +++ b/playbooks/UrlScan_IO_Dynamic_Analysis.py @@ -484,7 +484,7 @@ def build_url_output_with_error_code(action=None, success=None, container=None, observable_object = { "value": url, "type": "url", - "reputation": { + "sandbox": { "score_id": url_object['score_id'], "score": url_object['score'], "confidence": url_object['confidence'] @@ -549,7 +549,7 @@ def build_url_output_with_no_error_code(action=None, success=None, container=Non observable_object = { "value": url, "type": "url", - "reputation": { + "sandbox": { "score_id": url_object['score_id'], "score": url_object['score'], "confidence": url_object['confidence'] @@ -585,14 +585,28 @@ def build_url_output_with_no_error_code(action=None, success=None, container=Non def on_finish(container, summary): phantom.debug("on_finish() called") + build_url_output_with_error_code__observable_array = json.loads(_ if (_ := phantom.get_run_data(key="build_url_output_with_error_code:observable_array")) != "" else "null") # pylint: disable=used-before-assignment + build_url_output_with_no_error_code__observable_array = json.loads(_ if (_ := phantom.get_run_data(key="build_url_output_with_no_error_code:observable_array")) != "" else "null") # pylint: disable=used-before-assignment + + observable_combined_value = phantom.concatenate(build_url_output_with_error_code__observable_array, build_url_output_with_no_error_code__observable_array) + + output = { + "observable": observable_combined_value, + } + ################################################################################ ## Custom Code Start ################################################################################ # Write your custom code here... - + no_error_code_format_report_url = phantom.get_format_data(name="no_error_code_format_report_url") + error_code_format_report_url = phantom.get_format_data(name="error_code_format_report_url") + markdown_report_combined_value = phantom.concatenate(no_error_code_format_report_url, error_code_format_report_url) + output['markdown_report'] = markdown_report_combined_value ################################################################################ ## Custom Code End ################################################################################ + phantom.save_playbook_output_data(output=output) + return \ No newline at end of file From d3a3c8e6ca1eecebbe3c4dc3b31c93b822f193a8 Mon Sep 17 00:00:00 2001 From: tccontre Date: Fri, 24 Mar 2023 15:35:02 +0100 Subject: [PATCH 06/12] saa_dynamic_analysis_playbooks --- playbooks/SAA_Dynamic_Analysis.json | 44 ++++++++++++++++++----------- playbooks/SAA_Dynamic_Analysis.py | 22 ++++++++++++--- 2 files changed, 46 insertions(+), 20 deletions(-) diff --git a/playbooks/SAA_Dynamic_Analysis.json b/playbooks/SAA_Dynamic_Analysis.json index cc316f26a1..563b41e90d 100644 --- a/playbooks/SAA_Dynamic_Analysis.json +++ b/playbooks/SAA_Dynamic_Analysis.json @@ -1,7 +1,7 @@ { "blockly": false, "blockly_xml": "", - "category": "Uncategorized", + "category": "Dynamic Analysis", "coa": { "data": { "description": "Accepts a URL or File_Hash and does reputation analysis on the objects. Generates a global report and a per observable sub-report and normalized score. The score can be customized based on a variety of factors.\n\nRef: https://d3fend.mitre.org/technique/d3f:IdentifierReputationAnalysis/", @@ -186,7 +186,7 @@ "type": "start", "warnings": {}, "x": 190, - "y": 0 + "y": -6.394884621840902e-14 }, "1": { "data": { @@ -200,9 +200,10 @@ "errors": {}, "id": "1", "type": "end", + "userCode": "\n # Write your custom code here...\n format_url_report = phantom.get_format_data(name=\"format_url_report\")\n format_file_report = phantom.get_format_data(name=\"format_file_report\")\n markdown_report_combined_value = phantom.concatenate(format_url_report, format_file_report)\n output['markdown_report'] = markdown_report_combined_value\n", "warnings": {}, - "x": 190, - "y": 1804 + "x": 200, + "y": 1800 }, "10": { "data": { @@ -259,7 +260,7 @@ "errors": {}, "id": "11", "type": "code", - "userCode": "\n # Write your custom code here...\n from urllib.parse import urlparse\n build_url_output__observable_array = []\n phantom.debug(playbook_input_url_values)\n # Build URL\n for jobs_id in get_jobid_of_url_detonation_output__jobid:\n \n for url, external_id, url_object in zip(playbook_input_url_values, jobs_id, normalized_job_forensic_report_output__url_score_object):\n parsed_url = urlparse(url)\n phantom.debug(\"url: {} jobs_id:{}\".format(url, external_id))\n phantom.debug(\"parsed_url: {}, url_object: {}\".format(parsed_url, url_object))\n observable_object = {\n \"value\": url,\n \"type\": \"url\",\n \"reputation\": {\n \"score\": url_object['score'],\n \"confidence\": url_object['confidence']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \"categories\": url_object['categories'],\n \"source\": \"Splunk Attack Analyzer (SAA)\",\n \"source_link\": f\"https://app.twinwave.io/job/{external_id}\"\n }\n\n if parsed_url.path:\n observable_object['attributes']['path'] = parsed_url.path\n if parsed_url.query:\n observable_object['attributes']['query'] = parsed_url.query\n if parsed_url.port:\n observable_object['attributes']['port'] = parsed_url.port\n\n build_url_output__observable_array.append(observable_object)\n phantom.debug(\"build_url_output__observable_array: {}\".format(build_url_output__observable_array))\n", + "userCode": "\n # Write your custom code here...\n from urllib.parse import urlparse\n build_url_output__observable_array = []\n phantom.debug(playbook_input_url_values)\n # Build URL\n for jobs_id in get_jobid_of_url_detonation_output__jobid:\n \n for url, external_id, url_object in zip(playbook_input_url_values, jobs_id, normalized_job_forensic_report_output__url_score_object):\n parsed_url = urlparse(url)\n phantom.debug(\"url: {} jobs_id:{}\".format(url, external_id))\n phantom.debug(\"parsed_url: {}, url_object: {}\".format(parsed_url, url_object))\n observable_object = {\n \"value\": url,\n \"type\": \"url\",\n \"sandbox\": {\n \"score\": url_object['score'],\n \"confidence\": url_object['confidence']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \"categories\": url_object['categories'],\n \"source\": \"Splunk Attack Analyzer (SAA)\",\n \"source_link\": f\"https://app.twinwave.io/job/{external_id}\"\n }\n\n if parsed_url.path:\n observable_object['attributes']['path'] = parsed_url.path\n if parsed_url.query:\n observable_object['attributes']['query'] = parsed_url.query\n if parsed_url.port:\n observable_object['attributes']['port'] = parsed_url.port\n\n build_url_output__observable_array.append(observable_object)\n phantom.debug(\"build_url_output__observable_array: {}\".format(build_url_output__observable_array))\n", "warnings": {}, "x": 0, "y": 1626 @@ -328,7 +329,7 @@ "userCode": "\n # Write your custom code here...\n get_jobid_of_file_detonation_output__jobid = []\n\n get_jobid_of_file_detonation_output__jobid.append(saa_file_detonation_result_item_0)\n #phantom.debug(\"get_jobid_of_file_detonation_output__jobid: {}\".format(get_jobid_of_file_detonation_output__jobid))\n", "warnings": {}, "x": 340, - "y": 686 + "y": 680 }, "15": { "data": { @@ -460,10 +461,10 @@ "errors": {}, "id": "19", "type": "code", - "userCode": "\n # Write your custom code here...\n build_file_output__observable_array = []\n for jobs_id in get_jobid_of_file_detonation_output__jobid:\n for _vault_id, external_id, file_object in zip(playbook_input_vault_id_values, jobs_id, normalized_job_forensic_report_output_1__file_score_object):\n phantom.debug(\"vault: {} id: {}\".format(_vault_id, external_id))\n observable_object = {\n\n \"vault_id\": _vault_id,\n \"type\": \"hash\",\n \"reputation\": {\n \"score\": file_object['score'],\n \"confidence\": file_object['confidence'],\n\n },\n \"enrichment\": {\n \"provider\": \"Splunk Attack Analyzer\",\n \"type\": \"file\",\n\n },\n \"categories\": file_object['categories'],\n \"source\": \"Splunk Attack Analyzer (SAA)\",\n \"source_link\":f\"https://app.twinwave.io/job/{external_id}\"\n }\n build_file_output__observable_array.append(observable_object)\n phantom.debug(\"build_file_output__observable_array: {}\".format(build_file_output__observable_array))\n", + "userCode": "\n # Write your custom code here...\n build_file_output__observable_array = []\n for jobs_id in get_jobid_of_file_detonation_output__jobid:\n for _vault_id, external_id, file_object in zip(playbook_input_vault_id_values, jobs_id, normalized_job_forensic_report_output_1__file_score_object):\n phantom.debug(\"vault: {} id: {}\".format(_vault_id, external_id))\n observable_object = {\n\n \"value\": _vault_id,\n \"type\": \"hash\",\n \"sandbox\": {\n \"score\": file_object['score'],\n \"confidence\": file_object['confidence'],\n\n },\n \"enrichment\": {\n \"provider\": \"Splunk Attack Analyzer\",\n \"type\": \"file\",\n\n },\n \"categories\": file_object['categories'],\n \"source\": \"Splunk Attack Analyzer (SAA)\",\n \"source_link\":f\"https://app.twinwave.io/job/{external_id}\"\n }\n build_file_output__observable_array.append(observable_object)\n phantom.debug(\"build_file_output__observable_array: {}\".format(build_file_output__observable_array))\n", "warnings": {}, "x": 340, - "y": 1626 + "y": 1620 }, "2": { "data": { @@ -511,8 +512,8 @@ "id": "2", "type": "filter", "warnings": {}, - "x": 230, - "y": 148 + "x": 240, + "y": 140 }, "3": { "data": { @@ -586,7 +587,7 @@ } ], "conditionIndex": 1, - "customName": "saa_url_success_status", + "customName": "saa_file_success_status", "logic": "and" } ], @@ -717,8 +718,8 @@ "id": "7", "type": "filter", "warnings": {}, - "x": 230, - "y": 1074 + "x": 240, + "y": 1080 }, "8": { "data": { @@ -774,13 +775,25 @@ "name": "vault_id" } ], - "output_spec": null, + "output_spec": [ + { + "contains": [], + "datapaths": [ + "build_url_output:custom_function:observable_array", + "build_file_output:custom_function:observable_array" + ], + "deduplicate": false, + "description": "An array of observable dictionaries with value, type, score, score_id, and categories.", + "metadata": {}, + "name": "observable" + } + ], "playbook_type": "data", "python_version": "3", "schema": "5.0.8", "version": "5.5.0.108488" }, - "create_time": "2023-03-23T11:53:03.128006+00:00", + "create_time": "2023-03-24T14:27:19.650468+00:00", "draft_mode": false, "labels": [ "*" @@ -788,7 +801,6 @@ "tags": [ "url", "file_hash", - "reputation", "D3-IPRA", "D3-FHRA", "D3-DNRA", diff --git a/playbooks/SAA_Dynamic_Analysis.py b/playbooks/SAA_Dynamic_Analysis.py index 5ca52df55e..c22d559d2d 100644 --- a/playbooks/SAA_Dynamic_Analysis.py +++ b/playbooks/SAA_Dynamic_Analysis.py @@ -468,7 +468,7 @@ def build_url_output(action=None, success=None, container=None, results=None, ha observable_object = { "value": url, "type": "url", - "reputation": { + "sandbox": { "score": url_object['score'], "confidence": url_object['confidence'] }, @@ -816,9 +816,9 @@ def build_file_output(action=None, success=None, container=None, results=None, h phantom.debug("vault: {} id: {}".format(_vault_id, external_id)) observable_object = { - "vault_id": _vault_id, + "value": _vault_id, "type": "hash", - "reputation": { + "sandbox": { "score": file_object['score'], "confidence": file_object['confidence'], @@ -847,14 +847,28 @@ def build_file_output(action=None, success=None, container=None, results=None, h def on_finish(container, summary): phantom.debug("on_finish() called") + build_url_output__observable_array = json.loads(_ if (_ := phantom.get_run_data(key="build_url_output:observable_array")) != "" else "null") # pylint: disable=used-before-assignment + build_file_output__observable_array = json.loads(_ if (_ := phantom.get_run_data(key="build_file_output:observable_array")) != "" else "null") # pylint: disable=used-before-assignment + + observable_combined_value = phantom.concatenate(build_url_output__observable_array, build_file_output__observable_array) + + output = { + "observable": observable_combined_value, + } + ################################################################################ ## Custom Code Start ################################################################################ # Write your custom code here... - + format_url_report = phantom.get_format_data(name="format_url_report") + format_file_report = phantom.get_format_data(name="format_file_report") + markdown_report_combined_value = phantom.concatenate(format_url_report, format_file_report) + output['markdown_report'] = markdown_report_combined_value ################################################################################ ## Custom Code End ################################################################################ + phantom.save_playbook_output_data(output=output) + return \ No newline at end of file From c09730fbe7fce6c195767438c26425e1961eafbd Mon Sep 17 00:00:00 2001 From: tccontre Date: Mon, 27 Mar 2023 11:36:10 +0200 Subject: [PATCH 07/12] saa_dynamic_analysis_playbooks --- playbooks/SAA_Dynamic_Analysis.json | 216 ++++++++++++++++------------ playbooks/SAA_Dynamic_Analysis.png | Bin 81150 -> 79000 bytes playbooks/SAA_Dynamic_Analysis.py | 100 ++++++------- 3 files changed, 173 insertions(+), 143 deletions(-) diff --git a/playbooks/SAA_Dynamic_Analysis.json b/playbooks/SAA_Dynamic_Analysis.json index 563b41e90d..89876939b0 100644 --- a/playbooks/SAA_Dynamic_Analysis.json +++ b/playbooks/SAA_Dynamic_Analysis.json @@ -25,25 +25,6 @@ "targetNode": "3", "targetPort": "3_in" }, - { - "id": "port_3_to_port_4", - "sourceNode": "3", - "sourcePort": "3_out", - "targetNode": "4", - "targetPort": "4_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_6", "sourceNode": "5", @@ -51,25 +32,6 @@ "targetNode": "6", "targetPort": "6_in" }, - { - "id": "port_6_to_port_7", - "sourceNode": "6", - "sourcePort": "6_out", - "targetNode": "7", - "targetPort": "7_in" - }, - { - "conditions": [ - { - "index": 0 - } - ], - "id": "port_7_to_port_8", - "sourceNode": "7", - "sourcePort": "7_out", - "targetNode": "8", - "targetPort": "8_in" - }, { "id": "port_8_to_port_10", "sourceNode": "8", @@ -141,7 +103,7 @@ { "conditions": [ { - "index": 1 + "index": 0 } ], "id": "port_4_to_port_14", @@ -151,26 +113,64 @@ "targetPort": "14_in" }, { - "id": "port_15_to_port_7", - "sourceNode": "15", - "sourcePort": "15_out", + "id": "port_6_to_port_7", + "sourceNode": "6", + "sourcePort": "6_out", "targetNode": "7", "targetPort": "7_in" }, { "conditions": [ { - "index": 1 + "index": 0 } ], - "id": "port_7_to_port_17", + "id": "port_7_to_port_8", "sourceNode": "7", "sourcePort": "7_out", + "targetNode": "8", + "targetPort": "8_in" + }, + { + "id": "port_3_to_port_22", + "sourceNode": "3", + "sourcePort": "3_out", + "targetNode": "22", + "targetPort": "22_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_22_to_port_5", + "sourceNode": "22", + "sourcePort": "22_out", + "targetNode": "5", + "targetPort": "5_in" + }, + { + "id": "port_15_to_port_23", + "sourceNode": "15", + "sourcePort": "15_out", + "targetNode": "23", + "targetPort": "23_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_23_to_port_17", + "sourceNode": "23", + "sourcePort": "23_out", "targetNode": "17", "targetPort": "17_in" } ], - "hash": "733b478157b79ea195ed77546d95303ebcb23e01", + "hash": "4431688d2194725decdd567249661ad0b3d71a42", "nodes": { "0": { "data": { @@ -186,7 +186,7 @@ "type": "start", "warnings": {}, "x": 190, - "y": -6.394884621840902e-14 + "y": 0 }, "1": { "data": { @@ -202,8 +202,8 @@ "type": "end", "userCode": "\n # Write your custom code here...\n format_url_report = phantom.get_format_data(name=\"format_url_report\")\n format_file_report = phantom.get_format_data(name=\"format_file_report\")\n markdown_report_combined_value = phantom.concatenate(format_url_report, format_file_report)\n output['markdown_report'] = markdown_report_combined_value\n", "warnings": {}, - "x": 200, - "y": 1800 + "x": 190, + "y": 1804 }, "10": { "data": { @@ -230,10 +230,10 @@ "errors": {}, "id": "10", "type": "format", - "userCode": "\n # Write your custom code here...\n #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"format_report_url\"))\n", + "userCode": "\n # Write your custom code here...\n phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"format_report_url\"))\n", "warnings": {}, "x": 0, - "y": 1440 + "y": 1448 }, "11": { "data": { @@ -329,7 +329,7 @@ "userCode": "\n # Write your custom code here...\n get_jobid_of_file_detonation_output__jobid = []\n\n get_jobid_of_file_detonation_output__jobid.append(saa_file_detonation_result_item_0)\n #phantom.debug(\"get_jobid_of_file_detonation_output__jobid: {}\".format(get_jobid_of_file_detonation_output__jobid))\n", "warnings": {}, "x": 340, - "y": 680 + "y": 686 }, "15": { "data": { @@ -431,10 +431,10 @@ "errors": {}, "id": "18", "type": "format", - "userCode": "\n # Write your custom code here...\n #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"format_report_file\"))\n", + "userCode": "\n # Write your custom code here...\n phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"format_report_file\"))\n", "warnings": {}, "x": 340, - "y": 1440 + "y": 1448 }, "19": { "data": { @@ -464,7 +464,7 @@ "userCode": "\n # Write your custom code here...\n build_file_output__observable_array = []\n for jobs_id in get_jobid_of_file_detonation_output__jobid:\n for _vault_id, external_id, file_object in zip(playbook_input_vault_id_values, jobs_id, normalized_job_forensic_report_output_1__file_score_object):\n phantom.debug(\"vault: {} id: {}\".format(_vault_id, external_id))\n observable_object = {\n\n \"value\": _vault_id,\n \"type\": \"hash\",\n \"sandbox\": {\n \"score\": file_object['score'],\n \"confidence\": file_object['confidence'],\n\n },\n \"enrichment\": {\n \"provider\": \"Splunk Attack Analyzer\",\n \"type\": \"file\",\n\n },\n \"categories\": file_object['categories'],\n \"source\": \"Splunk Attack Analyzer (SAA)\",\n \"source_link\":f\"https://app.twinwave.io/job/{external_id}\"\n }\n build_file_output__observable_array.append(observable_object)\n phantom.debug(\"build_file_output__observable_array: {}\".format(build_file_output__observable_array))\n", "warnings": {}, "x": 340, - "y": 1620 + "y": 1626 }, "2": { "data": { @@ -512,8 +512,72 @@ "id": "2", "type": "filter", "warnings": {}, - "x": 240, - "y": 140 + "x": 230, + "y": 148 + }, + "22": { + "data": { + "advanced": { + "join": [] + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "==", + "param": "saa_url_detonation:action_result.status", + "value": "success" + } + ], + "conditionIndex": 0, + "customName": "saa_url_success_status", + "logic": "and" + } + ], + "functionId": 5, + "functionName": "filter_5", + "id": "22", + "type": "filter" + }, + "errors": {}, + "id": "22", + "type": "filter", + "warnings": {}, + "x": 60, + "y": 506 + }, + "23": { + "data": { + "advanced": { + "join": [] + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "==", + "param": "saa_get_file_job_forensics_output:action_result.status", + "value": "success" + } + ], + "conditionIndex": 0, + "customName": "get_job_file_forensic_sucess", + "logic": "and" + } + ], + "functionId": 6, + "functionName": "filter_6", + "id": "23", + "type": "filter" + }, + "errors": {}, + "id": "23", + "type": "filter", + "warnings": {}, + "x": 400, + "y": 1074 }, "3": { "data": { @@ -552,7 +616,7 @@ "userCode": "\n # Write your custom code here...\n\n", "warnings": {}, "x": 0, - "y": 320 + "y": 328 }, "4": { "data": { @@ -564,19 +628,6 @@ "note": "Filters successful url or file detonation results." }, "conditions": [ - { - "comparisons": [ - { - "conditionIndex": 0, - "op": "==", - "param": "saa_url_detonation:action_result.status", - "value": "success" - } - ], - "conditionIndex": 0, - "customName": "saa_url_success_status", - "logic": "and" - }, { "comparisons": [ { @@ -586,7 +637,7 @@ "value": "success" } ], - "conditionIndex": 1, + "conditionIndex": 0, "customName": "saa_file_success_status", "logic": "and" } @@ -600,7 +651,7 @@ "id": "4", "type": "filter", "warnings": {}, - "x": 230, + "x": 400, "y": 506 }, "5": { @@ -694,19 +745,6 @@ "conditionIndex": 0, "customName": "get_job_forensic_success", "logic": "and" - }, - { - "comparisons": [ - { - "conditionIndex": 1, - "op": "==", - "param": "saa_get_file_job_forensics_output:action_result.status", - "value": "success" - } - ], - "conditionIndex": 1, - "customName": "get_job_file_forensic_sucess", - "logic": "and" } ], "functionId": 3, @@ -718,8 +756,8 @@ "id": "7", "type": "filter", "warnings": {}, - "x": 240, - "y": 1080 + "x": 60, + "y": 1074 }, "8": { "data": { @@ -754,7 +792,7 @@ "userCode": "\n # Write your custom code here...\n score_id =0\n score_table = {\n \"0\":\"Unknown\",\n \"10\":\"Very_Safe\",\n \"20\":\"Safe\",\n \"30\":\"Probably_Safe\",\n \"40\":\"Leans_Safe\",\n \"50\":\"May_not_be_Safe\",\n \"60\":\"Exercise_Caution\",\n \"70\":\"Suspicious_or_Risky\",\n \"80\":\"Possibly_Malicious\",\n \"90\":\"Probably_Malicious\",\n \"100\":\"Malicious\"\n }\n #phantom.debug(\"url: {}\".format(ssa_get_job_forensics_output_result_item_0))\n #phantom.debug(\"DisplayScore: {}\".format(ssa_get_job_forensics_output_result_item_1))\n #phantom.debug(\"Category: {}\".format(ssa_get_job_forensics_output_result_item_2))\n #phantom.debug(\"verdict: {}\".format(ssa_get_job_forensics_output_result_item_3))\n #phantom.debug(\"action_data: {}\".format(ssa_get_job_forensics_output_result_item_4))\n\n \n normalized_job_forensic_report_output__url_score_object = []\n normalized_job_forensic_report_output__scores = []\n normalized_job_forensic_report_output__categories = []\n normalized_job_forensic_report_output__confidence = []\n \n ## normalized NoneType value to avoid enumeration failure\n url_detonation_param_list = [(i or \"\") for i in ssa_get_job_forensics_output_result_item_0] \n url_detonation_threat_score_list = [(i or 0) for i in ssa_get_job_forensics_output_result_item_1] \n url_detonation_category_list = [(i or \"\") for i in ssa_get_job_forensics_output_result_item_2] \n url_detonation_verdict_list = [(i or \"\") for i in ssa_get_job_forensics_output_result_item_3] \n \n ## get the set() or unique input url parameter.\n \n index_url_dict = {}\n set_url_inputs = set(url_detonation_param_list)\n \n for url_input in set_url_inputs:\n url_list = []\n score_list = []\n display_score_list = []\n category_list = []\n \n ## getting the index of each detonation phase of the url group the result for each url detonation\n url_input_index = [indx for indx, url_val in enumerate(url_detonation_param_list) if url_val == url_input]\n index_url_dict[url_input] = url_input_index\n\n for idx,(_url, _score, _display_score, _category) in enumerate(zip(url_detonation_param_list, url_detonation_verdict_list, url_detonation_threat_score_list, url_detonation_category_list)):\n if _url == url_input and idx in index_url_dict[url_input]:\n url_list.append(_url)\n score_list.append(_score)\n display_score_list.append(_display_score)\n category_list.append(_category)\n \n ## if score_list is empty or it has one element but empty string, lets score it base on confidence score of its engine detonation\n #phantom.debug(\"score_list: {} len: {}\".format(score_list, len(score_list)))\n #phantom.debug(\"category_list: {} len: {}\".format(category_list, len(category_list)))\n confidence_ = list(set(display_score_list))[0]\n categories = list(set(category_list))\n\n if len(score_list) == 0 or (len(set(score_list)) == 1 and score_list[0] == \"\"):\n if confidence_ >= 0 and confidence_ < 10:\n score_id = 0\n elif confidence_ >= 10 and confidence_ < 20:\n score_id = 10\n elif confidence_ >= 20 and confidence_ < 30:\n score_id = 20\n elif confidence_ >= 30 and confidence_ < 40:\n score_id = 30\n elif confidence_ >= 40 and confidence_ < 50:\n score_id = 40\n elif confidence_ >= 50 and confidence_ < 60:\n score_id = 50\n elif confidence_ >= 60 and confidence_ < 70:\n score_id = 60\n elif confidence_ >= 70 and confidence_ < 80:\n score_id = 70\n elif confidence_ >= 80 and confidence_ < 90:\n score_id = 80\n elif confidence_ >= 90 and confidence_ < 100:\n score_id = 90\n elif confidence_ >= 100:\n score_id = 100\n \n score = score_table[str(score_id)]\n \n else:\n score = list(set(score_list))[0]\n \n # Attach final object\n normalized_job_forensic_report_output__url_score_object.append({'score': score, 'confidence': confidence_, 'categories': categories})\n normalized_job_forensic_report_output__scores.append(score)\n normalized_job_forensic_report_output__categories.append(categories)\n normalized_job_forensic_report_output__confidence.append(confidence_)\n phantom.debug(\"normalized_job_forensic_report_output__url_score_object: {}\".format(normalized_job_forensic_report_output__url_score_object))\n phantom.debug(\"normalized_job_forensic_report_output__categories: {}\".format(normalized_job_forensic_report_output__categories))\n phantom.debug(\"normalized_job_forensic_report_output__confidence: {}\".format(normalized_job_forensic_report_output__confidence))\n\n", "warnings": {}, "x": 0, - "y": 1260 + "y": 1254 } }, "notes": "Inputs: url, file_hash\nInteractions: Splunk Attack Analyzer\nActions: url detonation, , file detonation\nOutputs: report, observables" @@ -793,7 +831,7 @@ "schema": "5.0.8", "version": "5.5.0.108488" }, - "create_time": "2023-03-24T14:27:19.650468+00:00", + "create_time": "2023-03-27T09:04:31.268860+00:00", "draft_mode": false, "labels": [ "*" diff --git a/playbooks/SAA_Dynamic_Analysis.png b/playbooks/SAA_Dynamic_Analysis.png index de72222307c740518b09430ff53221566f2de87a..94f07cf5207f77c8c6994428eb50fd04ebbbc6cf 100644 GIT binary patch literal 79000 zcmeFZWl)uE_csi<6;NrFhD~=!gOqfGAT8b9(v8x!DQToTrCYkBJEgmGQ_s1*F7N+6 z?=$nxJM(;bKD^E_o*d_q>s-f*-&%`c1vzn)=XlTI;NVasB}5eA;1DR_;GTvdJp)=! zW-o=|;NVrvgoPC(g@wTi_BO_5mPT-J)X`2+%XI!9aC!u)B-J$P6!IxV=d#0J(6BSc zCutaL^h`ERhs|xeTs>DUjq?`#0I}ccjw{k?h{Jq@o0ewia^o}Uxa(DtUzT4!nRD?6diF5$3tG&`9`c`g55=d1j3u@2@2AWxD)uD0 zeo5a}MFti;M6})zPgX)0zh&Bt3FlT?+M+z~skO>+6|WnId=EflGcotbX-mn!sJ2Arv)v^yDMkF=c1I&W^hKytjaz2S zbm^zQw3xXL4$A6|=)ijZQYE*SxmeSmgfs6{Qrk{E*?Oy$j_B+H^B~x`#Vv z$WVWISXp>Of7(xTu8#&~Ps5oa&K6$Cswz|vY+cOQ(VDDyMKvZLIWp;?O-_;40)$pE zQj;{6m4%}Po{`|-1I^$-z!N<1g9rS;!99U|g+m1X#{_;vG7$d0MWD!d^7r{^7_8%a zC1FWP;D03pdm|%j2U8ozs;apKV5(`ek7|x;vNAjdHdc&!hBo>}j4oETupw}~EJB#Qq%){KiLW>gZ_8!^Gt5?9AxQ%4lP6!t|D#o12N5g^7iQ0qDWt;A-ut=fYs^ zK=#ihf9DY~axkzrvvoAHu?EBD)zi0ea^xc=g)Q`-fB)>$$i?h`RmM=CoQ*$dlP0c$$)|IerSckq9|{C6NP6YS{!MT&pu{HGNlH2-s6rvH32{^tVa z>j1k5!bys}|L6k0pNg15F4}zUooqdB)k3fmgblZWgy`4ij^wvOw#!QD7xFx4*oPXr zt^nV@r6l<^P~_xB6}~Ib4@~`G6(eFT!nS9lZSkiKl`rFW7Xkm`+-aaxj0uB#HVPR&be&YW`8`8NN#qpJN?P)O!X^5zg@=MX~7ivZ# zuR`I9a6-bc%lm_<-@vQ9ePzbfKmN7*>E-!(Qls7(le@Ua(V*^AI!=TiD4Z+>59Lxu ztD8^g{__|^SA@CLVkaCT00P7P+2NXG+nGe4%X3k6bfo9-tj#paadBcPkc^-Jg74(a z^nA_DV~dlxQac!U2y3EnS%ys#N^;vsVL0T<-(&E7{UtIwacaq|kUPkOpzm`t&{qzU zGfWY<5yW*31ITUlNfd&RM{ z<^J37|Dl6|am|=^3P<-Z!3eEOAv1E+;t+pjCns4c(TTF+Vq2yXCuirrl@(p7dY4yd zzG-RJJ^jZEwwMm zFW*E2tR&mi%cglhbb$n{!7CzdWtTGba&xwq{&B3>RLh^#y!PF-7gUvh-B zJR8WE-3#ALs;GnWa6FRT!{#fm*&k+A>_RM7P&V#|x~q_{gx+`V8%wu`@&iMA=R-Sr z>9nm42gcm%QKF|2&ihnVCPR>SM|b{lSHy?V=8qpg_AWm@*v?fhAoL_HG3eZhBh|?+ zw;>{+>n6L-!GWGjt!yUS#5`V)ebJAMUoR?GlIQE{-@U$S)_FrzF2R3!!fF)B_c<5ORNA)ce6^P6s13vq*V_Fk9md=YAB#d$)*5nOj(F z1UVBkrgN>W*-xpPNST=A@!k(sjZMx{9Jx(@KOF=1kkHyB`S1`aZg?4so`@B`{!0x2Q`g+WRYy|hFY5jKQ zi;YX2M=`J4#^r&8);m$x`wPxucZRc2>=YYZ#>+RC<9V`GVeu&VoPBH#p1WqmvFsL8 z8mm@|4eS)2{2P=^unLz}7c5+e|rPpvQZ@QW>$j-?T{l&Frz{1N*kF9-u5xW}r^{f7~;AcEJ z@{$3Fz_s&5z|hUk7S!$Im;*U7NRlj?4Bv#M*#10G!B|{eJgrK<|Jguv%iNm;oHxzF#!W5&bKFE;1s#HZl=fe=LR+LVXJ+ z?;C&eWK};W9pM!0zmaP<;MvV%>omWWUuw+(adlJa3rxZ8QlWI@Tq8*eSUE z$Z$a^NS&>AYp)`R|A>@2tTt*p6JeykqH9e8ke38{O0WJl9Dp=Q+~&Rad#Gn77q41`r=1 z5kHpj(Tn|t`x^r~1ALqj&OO!YF@hB5b<;6xReZeHk+}|(6qS_7oSabfk1~?vCH@G@ z{))>RL%hzWnLP3!4VbJx=2gUe3%K5v`a`ki-y|2H{76L_u=Du`Hn9EDXtmp8KXP zE#-fVbBn-&pPS(F&HXllsr%i+R5@_v3+2cnyM2(BvQZ9AVfIK@wD$)roHy(e`y9#> z$~pGvI8R`o^a(FS2uus2l=%ie^62qZak8oV?Uu-HVLVq@rdg}af4}2U!o}2dUA$-3 zZN^H1j({FS0H13^nrBb@(sv*E{Nkc-Wh5ic_U2TT)wtZ_<~dzN?&uFL7@un+>BhQz z7a>3r6kJ+bGX8LVmVPuOv6hxmC@tl(o~GsiBZB-z90eoRBUJa3MK-&guL$5;4F(Ll%8(v?&;ZjCsss^>)EEp z6^~IC8F|h7O1(86^;Rz{=u6};0G-jr0a~FxO919DMmYHztZDfYlau9I7e-A&Kexe`g-Zh8O;}$rf7>) z%OEB5OO>>*UL~@Q6NdW^X3?`~wbNpKAGK8ruat1!a7~9$6Q&lo<=ZqE$KX6G5+T|- z4EdtmgKF^Yn}E~V)`5j*OQlD_1@5Cx#RO-I+)inM4G&MSUb)nI^dX~E@wXPqX-p)4 zI1mfwH%@2Y*Csb1M!0L3Fq#SSAT)W#M4;;Z)v00lfReQnmVN)XA)5@)!vFVoP*BlQ zYUI)ay$dr)u)<6f(2GlqCVZm85j>dw-iY07%uxCoAhJ|}h=P$E2HUSEiEFxsbpguH z1nt_(L;RyRD|uzrgcM>Uq*Fm3`cVYNCs9&>z$uV9hG{C8)duKD914EH zJc++1lOnQiY&J_fpgRAtZioT?zJ^OBg-I)zStVgfBSoYeLk!{aSRFgcS3L+ zoR}mnmdBsjf&RcsV!>!5GyqHgnb7wmu;BmM2L2)GSN|cj}4-D@!^Itp5&}bNK&B`u|SS445!@o!5fAEARfK=!Xj?f?k{t z*#S!N*s3H_fHFeF56*I_P%4rUG?hP|4p#QcGuTys1KJ$Y((Tf2(N}*{5cC|zxN&e6 zQi_QyFp9(Eq7NFNB|LoOqW^RGG25smjr`F5szZMCHtG|29#J7!?>}q~h{HH!{=faN z1>v$f5w~9<|2v@|Eg(%kQUcBY^aobDr1>)eco0NOM`v`n;3@L?(Dvio?>`IWymcNW zs-;9!ie1#*+}%4q$r=U%&KY>cRa}+WFblXkU?0%L%=YeKZ0^@h(9VR~huZrCm6s3@ z%K}V8ATxWe#l1QKY!)2fp=1sz8=YN=AgI+`-P<>jFJK3p1$N)}^^F~H$3g|g#T(f* zAYobaVHuA5rt+7YL@)wS0ksNRUB7vjSf5 z6FNYDQ|H!7_7xvU@<8tZfhYtx=ja75i z-rnuO=q@DgcQVUCT`ITtSzUcfhs}(-w4=6TDkrWg@?)N|S2;MR)j~;Uct}=D`K_Q6$9M&dy~UWMJAM^F4S8tX{60 zmSVel!eVo{q_UB~E~0N4r~mlu#bt2P)u_o6wHN=MD2Te`n;f& zXtt?1iZnhpw!bsjNd?1U=;u^_|M^!j8=G`)nrmgchX_JKz!d%{ablR^y&kZ7n0DwF zFT4p*Qx6c=ui}~Ng)?+PySuxh;g}25zP`R*qYkdNz-umm_ps!eNt`;7x2Fzq$P2?vtxUbSP4By&^-{&msa+WkV&G11Zy38 zxUq1EX!oJ7w-iqRMRE$m9*AG{JwaHL$!M*0PLX~oZ+DqFeJl}{4V+LmqqrgWbA@Nj zA*+-)6&>Pkaw$9c*LK=y@rFi^irt-qw>FDmR?oMhgx~ai-?VAJyQye}Lfrs^#Eb2>C!wGnTrdlHzH@EhlS82FiFFZZ-|&A#dnB2Mp;$c_yh{ zPy6yP!=lFJ-c9=DKj=B~Eo#NjoIgF9^M75ufOI{|;X*MZi+?Q)27xB1M>*vjeNAc( z{a*Y^cz4t!Jyn8FhznSQx%qmTVv;j2vDhU5!**Up&;tn+3J4;<9JFj-K^0I#W1|C$ z#KQ9rPej8p2t|>TJHW`v-BH*G1t4DeKxrN)`&hrpB?B3_ip~%bjyB}K$LwaO zxcm{m49)OB64bQ>1X*`?oWDLDe-X?_a&-En6tvQCv26dHiAoG(b5Woy<;m8RDgsJzAva$^7F(Wki_b;*x<|xB7gpHB@ z<7xs#TaRpZjxEsJ}j{=ZEjv< zphkb-QO-&3`3=anRnj&INxPkxIYB|kBS=F-NEo@FwM%x9&lCo5vtALyFSXF{rz&Oz zVU2tU&`+BiX)q(S16cF~qm3H&f(+@^#pgYG>l|O<3>ScHm6{rIj4`N~r=HwGP8a~c zP|X{WIF?}D&HKPfATBS>ZH}FH-bbGZzCZry35h}&=pXc}Kn<{!REQ>~rHgQapA_j< z;^E;zLPDN9aLAcy|LWnsm{3~3JL9*h`M$hT@YB4lc)6U!Ml2YQTw7eyG$!q%p{U=# zEW;Zadup!xHg0KsU?{L(_AabM39wO;~{pDccey87!^FBD^lo-m|{J>kQ8(z9zYRiSRmbiqr?$- zPSL+I%qfeBNuK7rRQd@@0Jdj<$cG?gUk?oGPQA}OUt;7{k#Nswh+P5s^@U``_3X#b zSMsIkK5Z^o9<_}y?a}NMBR_lE9>NQd`-H5Gu6?a12?9o^M%dVRomqw)*)?mkRCjQgWVO_U zkizhGRXC##*wm{8{sI(GC25A3q`JDRHtPOBp>AL=4mqmAv7cZk5+HNmeo@jw>ckp( znnPjScn#*twerh&YUtzB3gWe4Jp$Bi$XEMjPIR^Q{%{}7c^o`EOm@kBI@$$DMCfDh z>QraR`l8__DZ1Hzboz0Ym5bMHcO+TZ>sK2M>I!b zMV!TrQzP@7mV#h23(m|vvyfU~3l;#8ihzkjwH>;;G$5b)qEQjL!~s8`D^JNB64bg!n;jcLvnKr$ zb9`8Li`FT*Rtu}E07Csr0C1Q?bb2Px5z>%9swzw8rfN@u6TLFKulQX^KW)sU}nNFwn7bP}!1_c{6zy+7=Kzog8mdRkv@#DI0XnsfE<626Du*^^pf?^0#_3q2?Mw<=rk`r zkO1}y;cpxQJOZWBFi03OaWDxwE`re{dv$2@#1z0L%8dONnW@oS<$iJaz7;j${m58` zrqs376dOhqENoolKxn{vl^YtVyxHCTtO{cRyumX@coA?$9V(+*-Y;Ux#;dBbk)@v9 z`h5PRM+4tbu5A2TL9J_C!kbW8MOcy6D932$H~AOT^Q*pNh2VAlUm|g=#Spyc4hE|Z zm|;1iRv{l8N_qmIK#ItQjn2sKkZhJtKtFAzQx=uqjBT z0GlE+BySGA_luzP0C_=aY2UYxYo?zF05jj$61aDU!l8BOLCn4l!51)O#O$*CzNve( zF6kL8X3|Cnp#5dpL5RLVSl?KT3Po4io?!Ps)!`bB`}&nocQwE2zhIUy2p7&L;L9C? z09&=V4NHz!o3U=i0|qeDL{G|h$npN>q8pTp!Nfp=S?H($ixFh3JcUOh$NZ*yNmHSN zn8xXBLw9_svj}0<&wLgPElB3HDZMB#`;U#6c13dn!LdG{QnPRq}btod;Z4cKYnnSceG6i87)U@%}nS5e>H3||>% z+YSHX`kWMo9Q4O^2fT*wxWMMpkSu2_XG3Z&XYK1BpgMKAqvfjc;bE~eW}nEgU_HSR zaPxyb{{<^eJ&@s9JovdzX>wd?pb@p10}2vLctNME30&RWS=|r9oRiW%Lbedhy)5xty$K zEdWb55;Dq(jSm|{*vp(cuqvr^yP%zIIAD;@_lQrfkI#Bb?HntbOQ&W;%7%wp^x;in zslCz0P25U3p?7gx6t_|pE=u6!AC|=2nbCWRb(VMN^94~eeVD;@4jT4|rgFkIrqe;o zm;RSGIaFkpv!|)P1D3@zgcr_u6w(A?ke8CkFfcMo(5Kc0)AkQG0-VstM+czt9jSc% zUpJ8)AgN?qJIY_T(hIOnPC|J%{^M4{JOFq^&cFSyfiPAl(`oFBziuT0a63T+Ft6`V zmlYr~gxT7w#Q1kYWMIMnvkm+)tnK_F2V_fo&@Db^JNfRepwJ;wGisOH!>_GqNvMqH z4gZi@_+ch2)ptW(>#eKs3=vWBRBlTzAz5jzTkLGG5PK|_j2CkXsc10jbGJ_%=f{nu z%;127Yl9MO7WYZU;-(nCNtderT;6x3i&qD?mi+Dw?uITdT*>4Wb=l$HdtKm*!h-ZM zGCK>i>y7NKo0-0b0)8yGAM}Qicc$L>Y&v?vhl3`?cqj* zsPS0t4`NQV<+;~9_DYf=-laUW@_l_>9kp38?rz~C9h*9rzxZ2Hek9Je)3TDidsb`- z0Ea!$g{a@(2fuK2DiCgr9kCZx^z-tjX!gbKWk_H%snz?~9i!s^f&c0+z=8d1fUFXU zZ2JjZmN@Oo^_^|yG&}$e25dXmZ1S=k2rj5QSnyzho8_jHEa$<;Guz(0N49wS5$n`i33Z{)-X! zmwo^#|8N1-y~UlC+_ZVXL=P@0Yq&3@kD1$J8Z9Sw^4$onszYsNOHr> zkV@cP%*JwyhHw9LT5kxvzP+>>I(Si5 zT1pZ>efpY7lP8_qpk^@n-Rkn_$!Ge7mi)4BluDF`*2@~{TK6^sMpwjCPRcPxnp+w- zOSeP`{ijI*TpgR$D-g&BK2zOFol{StXQ-U!wz2WC+yOyNb-&BRzG@6m*PF~nuD=k! zqovT6e?*;~tEb#7+jv|H*W4)QCWiE3ZFSyVWM*wK&@iQU9^Wv_>RVV6ds1?j#Pf&MjSDD2z36=|r-H>(f$^TxX*U><) zghhz3gB(_KdVYfR1%R#qIGtHX?odYxm$g?Z0J7N-o6=7;CE==NHR#<%F)h*Y^M>Uh z)*$<=n$xIjbuY}0nYwD2M>gqAvv9nYOWb+OB<;9tU3YNnG*{nYeWVt(yVjlhj@o5| zW7#aV?9rT#ik4^cxs6RiUk{NnE=8YNCk_ez(OnTmPqM(h&dzLk7t5#1#>4s3Rqo~Z z?=4ca4_bZUq<4BR1aTapROdmCILD%dt5+ zP4u4yZe#K&aL6lsa)U{^@hHq4i#c^92;a44oGZ0v?C+#pW4vl?O0qw@RD$dg@5iAv zong*8&$afe9xe?xy|0ui^;$PLB^G}WGv*kK$(vfBxMFPW#zEh(pUN!Cu_>3fzTT?e ze9<8E;Q1(>^I6E?=Y7j~gdDZr?520`kxt#mmir~djUF^_wTOlLmsN1*Wtk7|KM2UT zn)bHrZ=M{*L=wBivGV|uMXG?hsPgoBXDuDF{YVqG#VTLivG^$xD^TO*7}adB`W* z&I6UjHKQHe89gKC4gW_jSUSME!5; zC=9r`fF5G=Z$ckoBJ)%zSuUTt3Y_q5_EgkRPE;t{>_97TS#jrVF}fM%zRFTm;lniP zIaQ8-&$7c8DCKHZ{qo{UdaeCd(rg2y?yyG4a&t|Fd1&IfYDhyPeHT~qEd1uidV`gh z8EkHw|Gx5glg_Z?D0SJdoO5<88q*1J;d30XbN6)dD1c2Fd+jf0XL@B8*PUz3o)x9D zD6vy6r&^DV2KL9d^6HCu{*q#rU{eccU>BKM^2ocWADAr=i|y9DpR*XN*N@ZQ9GcZp zC~$8Kapb@=CQEMZ?jL7b%iZ0v-|(mEYjnO18Z`d|*11o3mtAj6zIw_KsYZszioc29 zkv#z>iYNR0Sa+kZLlaqgSKZ`%xP^5X6As~{VqgI*N~4V$laf|>Li-X+Qyr2#xtp(d z#(lMhvh&i$B8F|2KR66MQNPiU&r^R`TRAFQj@6IKKjvw8YdY3kep05Q)#9{&f7;QS zPE@3N_eD+`B{3TFK4rW~LGIHr#m$Aoa@68rb;D81(TAJawe|Q(fo>Bstv#fOi1>WHRkoz8=%vFM$^lh+X~|?Xw1YDqp4?wk?);||k)}WhI=JTH zOvT-k>uEc9^tn?@gU0Ssh4WlPTxU7_XTP?%>smT22d6^F?MP8?PY$ocCzO7+U-BQu06Ht)SGFfEj4 z<~Q6rkM5tV@(N{7(%<^-Wo;off&O7lf1VVW?$ z{wsko!FkZ7j6LaO`n5n@B%wtg~F39HygZ!N=OFj-Nu zmFTR;-=CZ$TNta60RdNoce1LLXX(lGJmFXZPYv^w4Mf5*3EA!J@#hlWxo&mIqhJuS zkG4d9fM91E>LZcMP56NjLhnlF(|O2lK=N|nmm8-t)9eMH6+!s0THB)fFU#5F%- zj<8skU8`(2ZwG^VL+yQTQna!V-O{7UTqaw7DU7Xp8c`RrbsrTYWRa1p18=AN?BmTu7gLL}aE?q~;TSF->QnmrL5i_v^JZZQz2@9x zrkOGVS5=iS+tlyPc6v?yC@0L&wUqQ5uW$3FA3n?t{ZyPE%3s#pl$Z6umzEzJ`%-X1 zhHo7z%WjkUpx&_a{+;yR+3_Mjz4C^!>@T@ImR-}nno_6JJE#aBRZsQ!_B@Zb`@u5{ z21y?Ek5gU-BRl!>9EZW|tugPkp>iCOl@a)zE$L1a5&-6wCXb97JAs5njnE+8l`W}c zxK~q~T_%sFaK3!NT(-jT?P*a%+hh!@&hClM<&@I`w&&fwu5+2ulaFjNulC9c-aE2U z@HZn zRQ%~C$?traHNbH_s=98dF##7m0@hv{t? zEqjP9N}^_yfkeZ?;idyf5nXl!wALyiPIUo{Z~c%Zv*2AS^UYFQl6{hyzwI%Zt#mMrUN!c~1jt-Ns1*fFE{3V$>uo?W4;a(^C6q+jhs~D|89jmVG7OEQ5 zpWU;=pOy7re<1c?%aR|w$8;sg0+{Ks1O4?YnbUv)-7y?SFjNK>GF}1Dr_R?X@c(gDsQ_R8BwJSfZ$ljr2Z7Cy zO;$d@*eL0sRP_=CCD}nzDmzo(@BHej>rhiu(`aZ;d8ZN#L+VK2pD!ElyPw}H3GB9 zyC>pv4>K=-x!7W590h86zfT~_BHzY)Uha|1VHLZSt>k;*HQpT#ACCu%7gS(o97V=~ zcNPJttS-7;fDHb=Ya)&f7A+RD6!8(Wywfn2v4lzz_dpkUn zq`sX5zHsyjsbw+r_BLmf-i3jIf!!)gXR1`4!BaAeYKNAv25PPq#hogK)u9{LOSY&r zqc(bVLqsp)&M2Q?=Aj0|B#5%ZsS+P}EQ`;vm0I5l^%o74)Y?>PNn_SP$I`}Ym)8}} zlVv*Z`7MjLZx0(BpCc!GRik?K4$`&Dl^_bpgL37QNq|J?oZJS=H?2jD(i*kR6!@H0 zK{s{)Nbm|9psL*tt3-7>H8O-lh*a82wq$VDY8YfduI|V#xAf_v!SOS9>-QLfbO5Ra zUxT)9+owOwP;^owH$Ll8_gV}zd}#7CaF0pxg3{Q}=mqv?OEOeC?Qyu?op|>XI^VTJ z3WqIoYdmfgcMc8+O=xIq+nj z=k}*tJb2`IHN*Tbifx-~UgE@{0$6510-UEnQ^SkobsP%4@o$l*Q`4MkIm2mu(h)qT zi)IwuyZK~>Q~QZ31n;!wKp+5~@}GDt~12(~Er-PWwV9y1$>cD2nfLVNprX z{qQa3u-q06Ml`@CZ5ZXZ%$@?ag)}_Aq!qa$Xdy+Vh0&F#m6=N5*CEe*-&dLGIm;(h zW6Q9ar=)9)U7dAAf4U<>uWr#fC!@&8pj~o2?tD(^JK91VPCSXhES34aSNAhjc0VWleP)*{8T0qdpPC~2?}0#U=2%+j5;ex} z1S2FUKB*g}p!;RSbCoo8jJMaI!5jS#wxjt*uh=9B|IIuip<1~SY>Ap?6}`LXuM|xB zY$J0*T+}ntR^DVk{e1S)d{3>4ln=-_ghM#LM-ZftMp_T{G075%oGdL&0b9+_57qqU zQ-6JAqLCW7M~ovCaT?=9Ne8qi80jj(IZMq0XRFp*XKYha+!T6Z{$0rXt$n|85wl^85L z5y-3!y=kp?tG1k#HiX z&C`Wr>)3Cj(P{MJ5|(~Rzsi0*@%L9$RkaDl>>Wn)-u72iQK9tje(v>fgFR@Go@0Nh zZqg5Io8I4WWa9U%NqUSw8h`KeajBPyb!fcD86T%V4tx)!XF*(7R(m$|#M@m0NS$9- zGVvZOw2+hx-fzCrw(m*xj*59W5UCm#ZT;lcr95@9EVIx%e;DuF`l`rh1nj*N*uivxVHOE(53_;=&#T8olI{0J-B(M_tsVy!I?;!vjP;vy>D|--!2SOG_vba) z+TP6}&Gjteny+{=gcJ0f#q9`TRw-t53{T)NkILh-C zRxm^+kFXMZ}h;wYe!ZGtb7z_&2BQg|UMyvcBHN*sXm|oG#>WA9K z=AwBPj^{$+Z*%2RNt0`vjJ|MivTu;5mg0|&Vmmbq)%@CXa@;RJ)N$J}nl(z8ostOI zX!iyXZ6-k8wdm%J_y9i6$%prGadBfnHAu5@wum^##6j&*%jxOBK=B^dvbW#eUMm5` zk;m4%V)wkqq_E$a7V;BAvrejJruhle+TI;3j!W+QZ&_@XKABlqRK3Is&l(rethFAO z1_Bf-Sn$vm`4t+DV?c{~d>lon`YN(W=)6EN{dkUT{9dtaFtxGPDC2IK&pVpm!FxUW zC|*hKfm4+xlIIkOdv!5T^LG#NqxK#OKD)VN(x%oCPiIrA5{dWYZ3psBy4U7x^zDLn zzC>>*J|M&0feXE#7)^=?3VDcKIXw-Dt+k=H89lnuNbuzi5Iq<}_Zkkn>Mguf zHq(E_Pd)8CuFOKn01Nfa0vg(6IP4WH#FK0DiF%hQXK~j#rq${?xyfYH{geK06hM99 z1B#@=EEXC7s}hi$Q+(3NA>=q`Y;-F{_Z7P1>2cj9uay#;qzN3m7_@rJ;VDq8A#zv_ zd`-!*mBI*R`;Jq5dYyUjC}J$n{nKi9psdJtAm$N}>X~4{Wv1usiosD>x=>0#LyRolzg(CPKYW%U$}hubCRl>LgH zL$ftQ{CxM~6vwe!C5SBN76RY-%Dw$B?sPfijwe96^US@5z?#+!wB^wKd`CW&p%psG zV82)`5Ufm5AGtnvWq{kQWtu**6%>E4xd1KI^eB6<9!?x!yp346O%QM$`sxBtva;ld zK&p%0SuQU1F@7CU1$`Yq^rfuv)ik%m=jvaRea5#p29chT1P+6vW}y%5%F79?zpmBh zxMrVuZH}iy2AFQGrC2;W@*5lHq0-2mPY}2Z%kw^zH#MERx}JQAz8BWe&?vUJ&^%pG%1q8E zxV;rdQ#;XiJK?_Ba2}WCRJ+l+ z3lCkNPxwT;+7Jv<^tdwU9up;y9CUi2I*uq{+wl65 z#DOEy+R1y_^GeNWq``E-nb_;w>xbSBG>r$Sh4dn}eMQ?MPlJzBLW{#l9a-o!y=JTYkEVm2_|rG&!^N}~+2aW@w%X(r zRuG!{kKTsQyJXg$I^u#lE)TdxXx>MS2@RwZi+RMJ>m+nbtprXV>6d7z(#eN;?*k^& zj~dQujh%NCr(15%(zQ%-rmuORg@=z1jtP@n7r2?juh?Bu(t@praXmS9&)%nVp9uVD ziho@s(Z=|LPyG9lJBQT7?*8GkRAUGS^+Rp54-xO`iIx<8hB& z%7~Pc7+G}{N|GC<>C1f+;`6=wxAD_EYstdEM`5U4qO@tLpTm6Y5vUjQvcF)Ts#YQn zF3a*P5zv+sxc}&S(v`4Yke62D1u{){vggsCU0AS$UXsQC*6RW2gsn*y56I>%W7gjK z)B52wGC9wy2_?CBvIv)2ilfT|8_ldjz}~1#3!K|he#Uol=a7CM#>I!Vn8xZ29p{@m z(;Z5xuGrG$Fq*wUnlmXq;I{N!1}ckSaat59BO+$1{i(@G#1hZ0^--p6EIBT1Sa#FE z%ykFxVZ1OJp9o{qF&&HDYA;hWkZ!P-@bin#eWgq~KSQ2_g@)$*dPPrKlrXBgq0>zI zBd^m$UiJ@i%7k%IEv-~1+m-2-OBC+w4FAC=S&EmlCcdwgx5};Z@N4cbom*?aM(J>B zE-gRoEvvn6JmT+}E4f@aYXPfjIelq*?8M6cg+sOLrS~$ztxEI(NCuEM9{ffko)kE# zZjx&DIXhMNi+nnVY?{kzdiTn#>Ce2L(}}j^!JXb+wvvNN8fkeI)X@3S*~IZpGrfaW zT4%;zQYK*&>qF!AeMJgp&quE=(1$ry%iK&XL#F zm~`qs_ImEIc?XRKnDa- zAfYW@6_Y#FnN-Oon->FWwb?pmVtixuH8lq+$4p))N<~#vJ)Vd46v*1pP@%=dbS^Ru z!I=)1VG$3~G(%&^C%!)c(v(!sZqG{I5_miTVvc4}d(!D(+JTAVlrDD;!tdjah~ z(jmh4x*Jb_7-mu6KlU9r#6Bw`O>I0-t<@yMY|!pFoWRp*y)GHfw%XEhHL5pywR5)@ z>3t_m7cuTFP!H9xm=p7cpA``miyQ?;(Iar&!?A`CwV=!-ZE52CnShxy(oJysa=ORikCUl-$7m zHRj5GGQ#n%%YA&p*Q3g-Cngiy2#WWsHQvZG`n#WsP_2yZd6E>Al&or!js{<`zbO^- z;knOQ+x*CQKmH-YC9g96Th3LV*`$t9aAcW{vi1LUL?3_k>bkppvqj$Whbv8zbT9CLgGa&f6{*0a1elG z^mq|5HP5qtSmWX|SskC7)*h%_L)?j}vH{=~(uA%)+YueOOH&b#i)I{hJRKB*Jdd?A zsTMg7YDmY$k}PAY=4X4k2W=w9Bvqc9@h@EizpIO{***#DHX(6U8`Sb|Rv&GVy4x>L zZv{@btQkh-zm#)wICXXtP4+gRh|2a$4nj#uafo;zP)huO~eN3#=bV|#I8s%_hMNU3}Tb#~4b5mQjn&vsYqb_#PshH0W z{tKF`!Iup4Aje5tg|;2$X~0kdLi1McEFeE4OFCoH9&4PS4k~L zE!MOeZ21fzKT$AboU>gKe(W#wl>yl7rig!GEs!5jumhg(LI2yJ8$0ssZ}kom2mrxg zCDVT!sEbMqwDzA08yIASi4SCiF7Bz!{Zicj}Meb3Wx*zV{?bz zb%lIrhR!g`Vl>-BkYD*OK|M(ZsBkc1zM--D&?`Co?Ch2^q2=g4cI7ZFEDK!28uy<@W}=LA`FQ8kus_3EO2F?(MZ29rJ`l}v`GKJvPg&kf7xy$)BFqa zh|2#1O(tl3g{33K^z&BKsC@mJ`4)RiG_n(!(>J(!k_Fv&Z9rMtz;pAXvhs!pk87PK z@)$OmZ($)a3yyEgk?VI@9qg1?0ZV9wxRlgDNJY3}9ug)DBq^8zlz0a>ylb zWdC+I4d1^nTFmA&4q0GUM> zkmwHu^b9_CmGP0Nt$dLH!4>3nE_0k~Hwt96bAx1I;d&HT3cJ-e2)5H z7&r&Fqu0J#=N3{wr{MhQkM`9Y`+u0RuEVk#jS?7sQSWvwH;JUVU%CRt^ZvzJwLAtM zq`)0-Cl_2s%he9~P?$+fLnD@Rqnvko8l6y`l$^{PJTkUm*;O^}DkVY=$O>D~K0k1E zQp`i-z+sR~C9~hOY|PBMMoV*Zn*~u;B_%4n?^5$bMEu}@I)k>uj`RDrg4}J;Pih*T zxHqLjsamNjn}B*3Vc|>B2!Efc#JS7!PJB$A^A3h#MgSP5BkhZlHXMrY%8S=8mZoZC zp@?Ejrgb~Hn&Z!H0Srd{_Y+F5`AaLaHB5jZK*_*}87K|q4v-_QBNLa)SdWE+N5D4k z&Dqxt}73S46W4`s>#t1!U|hPzz?z;4Wu3L6+$(MOqS)2Dc$n_}VjV7f-ISeFpb&rH_Hmu#tZV4Tg4Ex^$6NKU z7qA#?S{6{3Nkl8=Sx%Md&}lBsrC@#qO3u-(0UW}1k7;|%AQq%03?E;Xoelgs0FCT| z3iYI9&B4`atFfsm^AeK23ve}@DmDy}PX#U~+ZQ2>^%SP;f zjbq$O)zf?Tpw=a3j21HF?{({T+k_qa3X6~eUee)35t}WMx2ziNY?}`AKT!nu<~xjUa^?^i*luG%8hpUj{1Z6| zLItkq_I6Uzze$h?u&V5l-S>a0pMfk(MYp$Qx+#ES`KqA({5P(WDGYSy zX~@m}N4@w8!s@?&xS_)ep@66hIw8<~bd;SP$p3}u7*Gr&ekzcVJ9|Q;HY#Bg|z4_KrgZ$X1Po6vO9RC&$oo^3WLjr>|JcN z;DTdj;x<3dfSiQ-@GP@4CpIx3pb>bj^fgtGQo;uZfdv;|`8u?|H0S^2&4NN(`tz(u z+k8v~wpmSrfq8szZJ;F;6PcIf>Eo0;0#lB30q6lehOB4a<=ctVU0NR>K>wH!n5rPnOm-D4<5QGx6jb{hzHR*L_DeOClVl_{eQSvFw6drNx2A`tABro z6M*wh+*V6aQKs@0@|D;8Y~jzw%G&GKD?vj`|DBMKaCmGkAtK-beSOF;mL_x}%z#z& z_uy5kW5wy2Ew=x_Bj(ED*Ae3pMfIz*OH8PN#%F<9kW@Tew?GhVG293TtddNG@Jyw( z@5$L2SMcP*1Y;71g%xrKU{fGGRMcuuaqYI4Bz%g~y?Q73-;n@UOU?Bb6Iv*Txw5dp zj}Gl;0|^c}xB%gd-(E^jGRc1gBl@b$R5wvP3_H=f{f9sX96oM|IqOKt3Yv!n9B+nclNp`EWGN)!|n!$U*nS}4VFM@KeWJJ1+D z7Wa{nkv-MT!`LaDP@Df!{K?*e@}_SYv0n8)i@Qj+#Uz1EQ3)tV{ZVaqNj_*5IO`=T zDxyS7d$Yu2(5pCQR^rT@XHaesVch?=mo}>|Pna^PG`&r5Yxn3t!b)sA>BoD0ng3G$ z1N^Yv)1YmB4m%Ft^;{WDEECM5mPr;Xe3>n#kt^cFzo{ZOyvG>;>jGWoArx-Yo6EbVH6yC`M{q#l?TA!!&F%0n^%ky) zE_>rzsK>_0)c?%*Z{6wy621lGh{zaPW%0evpmmo_!asm_i~a$e1pO_27U}Vsv>5hA z;H0!+)7N5rIY&@z%EDfvWAVw5Sux`RNiMn;7<#bHU>>Cx?I*3r*Q>6sU=~wsCbpbw zp8Ro`jq*7`Z40)3u5EB2&`$x(RR`i6=yPplowx`#3Z02XnM=vO7ZB~(*jR~sffhx@ z=)U^X9hRu1PjWh46Lu?a7KXko$DY4_N)87f3|a?H=&w95Sfe8py=x#JGN?J2b_#hv zh~y~FE`RK4$!(CVub8BwkTCygW{vR!O11sHIqf%Dp`-u3Gocdmn+SDc2?GOUhpvMB z@_e;uB*3+j@@h`Y*Szw0`~BS&V6@4ZiL9F*uc=$&L~iFh%~HdzrE8p^J@?iH0oZZ; zt@}cPgmTH?dGoE9#VPGB|vPM0`6bY^Y#f@;G)0cjZX+lnh#kHOd7&a z^@wkvtP7tY+S-Qx5Zfy0f|oOr$i1C3q5@}7gk4)wd7I#mSBR?x(20rM;wDoF1dWaP z%H!vl5#l#FOkF|;N5_hvBZ8hc@-|*R%5oU5%og|o6(+-TXCkb5n%{O@>VaWf*izb_ z0S)|Yn`z@ZZ^$>H_qB?8I2>-!E(WC_J^jsJgW@$qe)L%c*xT&UiHRf(QTF8TEMykU z80W4kbrs^MJpp4X*LQS!UYivw;oQ(DWi3_9+aeBEG(u2lidAtTWETYnP+{MD`~Erq zunW5cdAHuzB8ez=)rtLc)pERdW|EYON)jfBeZDVEyHUS&46545e0pVq^#)73R_G9buf+dZDZeL+}VwYtDh!%eJj-2@R2VI!>hu6Le*^hz=)Y@~fE zAd-s%uI|h|r9OepHiu0<<5}?Dc*0ilh%EQmbeU?dP5biZwa#Bf!}qERQ3-O3dXq>C z8I2sz(Xv}P6yWJ#yxmT26Mk_5YVcgWy(6|jZ@Z!R0wdkR;Q%2JIt#-6*%;{$`Kzhk zjv(%hhcopowN>T1xvG}!pvn$6q8U0s8Ttm4`bQIe|6GNLdolq+Hm4s>P24#CbMK#+ zuOt^H@{&gW*oD<|_h%@lG$Ve`ga(SM&+B)AZ5hqWvJ+h2<{+$W69RXVV@aBq{aA01 z#7HKZOGJJHxKCZ6=S3WwdyAF%?Vs0~ow8R?sa*?&>Yk$K{ZK_csSsBag#GSpjIcU< zzJgm9kdwjvG#eTytvA2=&&gTKP9}Wsgmo(Yo?51x#3FE^!k2GdU-gzSSn}%sB^B-Q zxm!nZUy!p9Uh1K36Hfm%D#6NDmF0qyAgex8ONl-WsJr> zgoH#K7_>iM`u8P2we;7M99W_R$!E=71_Q5%cw{wdxYKtPngxM@H4tY~MWsAhH(FV+mkHELBN+)fU_0pAjTg=99ThGFuy z*XG;!R9Zmd=I2ujO=Z=fwJ+N83o2M3&(9uc!op!;$I>w;)BP!)cXdh;xGP=s-}LWS zyNdk3#AxJ<@UC&mSwD)ieJIU<=0-8VZ;Z;zyHj(-1bvrPwU^%0&GmZ8PaOWPTK~uF z%g?ngwWSaA<`)$sW+p@;lH(-{B=Yj4fE!(Yx>afT5hdz)@Vb#L(FTZZH3TO~d#x-h z#a+4d##N@iQ;qzBt)_J1{(S6jD&db>r_0u0cL@zUIrI5CBJ2HMZT$yU$Bup71^lj2 zP87mCfcFMm-O(b$B*=z*iqaY-lr=x6OaQ)kSSDn7lQld%ezWRo%f3D@#hiAHQzFWO zvNKS?4_K9~@FwDOio3*zoYJzd1xO1=m+Qe6p___fT-TqM-0;ZXGKQ#kXV?#a5GdsP zxR6WX2LxlpUsXnnzP7*j`A{ePoLE0BYL&$kb*`66`Y4zgJlN!mEn+-71_ZmP#Gp{;~Wa;SLJ`=?AG8GNXvYf)o#Gs2~E$R0}y^wJ~4 zx>DB^7S5V;%QNSE7=2ZSj5)W(hISqG&Vq%~KH?Re3Ao{rliqfNYQIxz1Iie*g2O_spi11# zA=8Pc4Neov2yKnY2@!uD`0NQ8ZixDm%op%9HsBUXm94}I0_8B}yVexUc`IoV!n=wD zhv1k$f+U+?Vj5Lc6U318TptM&MmJjHH?NtErYRrPEB0`n;aFejo6Y^zcXO9o7 zd1mm%ilpF!_zq#5cA;s00q`{U=A(CaeAAx;440K>e#{~V2O*)7(O!8Z!?9=t$hGKv zpE{;(sC+=w5Wf^`7q9?b@ zUG3hp(5e{|)QJuf(4n=iakFTQWGV^rU&6GNRn4h{Z_PEGBde0?V>wcyz>a&o)y_Z%rd z-B^Erfz-$N07aADR`nw1nK)n*D@s{J{`&syNW%!H#zjQ8@d`*=b(Hegm2ZYx>ia2?*!t2smKIm!4oyn8bq)wCajN zGd|Qko3~L<&Xa*=iT5ICOnEMfEB75fliU<{>2S|N1=z?*X5 zr3S-s%Z?vZ!aV6hm~-8Tr@NNNGt4O!^AW(D4f&M!<|n3zI70Ml&DTq=O4@}?1`peG zH-wkm;M>d0IGs*As1Z|T;Hcynu5rngeY%QzKGp^b9Dx7zEy>jVj-Ht{$*T6_YO}qj z43OP_efU<1e((*(eS!Z>j_!3Pd9d1G`hcG5#ji?f)K+mgZ?A{T{)mBr(QynaYXHeO z4g52&UWThwpC>OY>>nNL!Y{5uY@DK**}z9Bxtcw@%6i6Y^55+GK|t%T?A09t()2Im zq~CTiw6ufIkNl6t_N@q~3MEjvj0k)C*IS#Vp6@?xYL+2HOGx?2dEM5V5b_-|r26;V z_udUvuR$UqED(mDM}FMj-WRaJ-K4dgVc(24Emp9-JpH4QW&rFb(%E zNv@-56bx$KyE?sfj+<)ejqXw4?V`X0DW^GDkY9FkRkAv$X>g>&g?J?-BmmcJN=ck5 z&CO;S6OC(=gx2lXpQ((k2VE8?V7HEfhEnlxIZXDjOKOOMLWp9tvI?f#P7-dY;$X`tbT{5J+cJgkb?(sOW9H9J5UKR$2*prpH5UOIC+AmVT>F`S$C^k z^ZVxV7?WIHXzfAVWPP3T0rx6;$F2F{qb2zFA@qMb|5yPk_ak+o8PNg-g9ifN+b5bB zf=5uT(6QP>l~!(PG>}MBVK`9fo0VNRRbM^Q1^3Va^+EU_0Ps^DeRR8Sw4c1i9YT>S z_D?el3rTb!T9iCnJ+9O@BeU`HIX~DnUi=4HY%XqRcr(HQQgF^*2*l@Xw?a}L`MW+7 zKnss%D+bl)Q&RSmaw&3GfXER75is_FoqQoCXkaWbMEX=xU2QQ8aWMW2`Xy>|=$C#a zSyr^$i%wMU%?$sd03v+|><>%hR6%OkdET%&{;jm84b?k+c4;$n^C+;{NC^8|{kzfG zHoLx_D>gkmLc{Tvan<{pxbkMaSd%^_g9&TjL25e=0$9?(TzcYeX7JPw_alJQow z1YW2D=80aFLJ~~36gQLgF@A{0^_9r{Z|gqplzWw43Jb3CN4-8&rL9f!fWPNh&RGqa zn%S8wc)w2isga6p$Ugxee!RX<)~DP^M@YE$e*FV8xDRt+A)OJGgEfP+sDEUH{)3-H zKAVbT10t54LIOzk5hH07;^@wvVKA?@w;Spf6JfJ=3h!3#XCzcq${{Ua`KrmSRz~0aA zak$t6+US>J}*jr_ zmS~<-vRiKoPs$Ca!&Fdkh4!e5wOgGnx7AUY+RTq;nWEMy#!!F{4Ak2lp=5g8M$`c! z^-(F7zzxY_3`}>N>qEx%Z>uvxm5#JHdZicge=ZUh0YL;Y>=71(@fLUh{`~OJAAvs@ z(4Y(iZy%v7?+0Teuz_aV$3MKHsC?{)2Z+94>oFgNcSJRU|Ib7w;kT4*!O_uv)edZI zY@`*rlG4K8#FQP9a-Zf8cXSN5*f*S*PhwJ+q31XuM01SyR4ROn3~=0I9BYt@i8@+# zf*+)X!$v_v7CTSuKRUx2?8|8&ityee6#i6j@Y&m4!fkjeS|L0ZkYfuJ_n7CX5UIz* z1O^ks$}jf=_4|m4>_U9_;maw9+(reNH~P{d%GLBbSKy?-lvYU2-$2!~0m%qnZ9w-W zD$sE&+PB}j9Co_6;?6rkF7N?pKR$MLy)T$!$;qb#G%r9$dt9+EbtS zedgJWt^phJiFrIav_jso<$~oE`N|)jiRDo%MfW9=cS>*-gSSH}6(mh)@Ix~fLfzD_ zMc1XFTGW7h%p6W3KdOTGvsn?siLfg1W34GLsF+aFq2tyNrK4WDXa2H|V<)qk_o&eP zb_T0_tywhN@tA$5-m$OxW)&*L@MMo$LsA-dJ@L1Y*S7R&AU;2sgDc%?l!UIedL~Z@ zQ-*7*`k4wNQui2(Bf{gf8TB!o`?=?QsWer%-pp$q1(V-XbUTiy+wkna0Saq6_m?#D zdyI5(6D9S6u^xv<(eGyToQ!`rSMssUb&Kx1xmPthOvz>!=BT-hLt@+ZiBw(ti2r;T z2qXI&z(e31`$ndmC*v@T=_Qn4WfFsV6(T(I+Q{k4r&PE5jgS0#44Nu*!@q@t34Wo`^zC%lrZ)bxCg#Xs>b zcrW!xP>9M3em^?~{swCoO|#;(S)PljFP#||$f2Y!Vo?Y5kR#8EhH zJ^87##DR4abt>X2)A}8_I#R40*6eq0*#?J?0_x-Me>LpKoo&SR%}TbA_-gW&@0#&P zq=rGn`!JsO?B5?Es#^E34WF$d$=`?9G2dTnM=CQmF)Z=jIsZs#KJkaDUK$fGl(}WI z5>-M93v2GK;tT8d9d`QD>f(}()?R}SpOlg&8d@A}st#XY=Ig?dEV~c>=5^;7s#a^t zMT`f&cMG0BhRF{{e9tbw;N(GSmLgxb-DhH?(+QNNOc?` z;+biDFFxZ=yLvMt05r1?yQ0P%O`9rsq`gjmRr+0B`@l4U;G%_}^;sK#_QWe$h}ON?)DC`H)zN5P z#@_jj5T%r9)Ya`-?B|J_-mA83k?@p_@#kr*_VJWh=hI`aC^Pv>cRxfKOzt5Of3G2O z(wM*Og9eQ|UgdSG4OU2dy0u2T%Fq>#z0x@>-$t02chyw3w);Vf^2W`la?jU! zIvHpbYzW^|w&~~prmmP|wFJb7o$r`sA4WK4JvR{HlYA>e)Q#PbQhpsbz@=_1+& z_El23u13msQTnLy*#~pqr(Ik5Q1>wJ9xvdkE+v+PGwj&y`StW07X2Al;X)aSjB`?@ z#oNJBk#WCoQDOdtnSjJ5W%sr_4{F9UmbPa+_#n_*S1!RO#}X$TN`Pp`;LfWjk&;;I z`QErY+2P1Fw5|N}_{|aOU+2y7?o^hJW->B{y&STx1+??-{+fL{ac+}|?bCI^GG3)> z)H)@ZB=ddITt8j!^>z>H{4~CoW3Pgtn_EN@O3jq&xqiV(z%X7tvfTN=`N@RL=|LVl)ay7s=ld_z0aC#wJqf|KP9; zAH-fBjYanNZhbHEFW>PvrJ`+|-L=g?dbf8i;U`A#3HMsI%^)iD~XC+gLu9A2#hCfAdLG;i$KZ zKT1R|REqz$XYe*@qA6%Sq%YqLQsc3=8^yW@nilPf{O{EA=j{V_otLJL zZgQIqZt;fmQl5AoFN|l@(R(_p{=V6oPzVdLnv~5`Ul?u3_=LKQnQ;MZKbS-W`!;jP}liAak8E zPfk!781jb8xOW|WhF$4!kolbb{quJxYxO%QarsqujdPGhG7sni>cJ8#nc8f|Rc*o{ zI6wHy9L4Q%<9;;5dQ~7mETcqltrJWBGvGZR`k#`hi$Iw-L=tC062dmoZ?@Xv4;IBe zU~o3mEBpVrmo(mZM*RdYf!IadwV!&LkZWB&sAR`gv9dOSDL*~Zh?t7XFTb*T?8&#LbsRzN(FCCi6do(sX~n7b3<|Qc~&x;?f2?<26|veMO{hFK5b( zZ>>ig1_*wipUCgnn|6yi;Ut3{MH@yg;|~=X#Cd}=%W}iLx3*&Ma^Z6)IMdOoiQw$* zPl1LlU%6XXA0T>a@nC0CHe(#zNR&b_ah%(D@kO+&kSsp;`-)!`WSMp0^TdBB_y`ZQ zlt>o&ft3B3_H(hvLiGRW%Kwwxlb}DeMx;OUdn{`MsVYDAe}@W?Jaiv?KtcFdXG!26 zG@0?$0|WHev)Auto}nR!r@j)OR)mw&8ylXbdu*4mb2K`aumXz43!``czW&9d3}DmS z?fu=1g#JYugC+2`yXEQ%lBeJB3Ywem6cLErGkyhMxtPDA!~<^@2yP~J1LKIxoD;d=ED7k+hS6+hsZb7is2DOyVC3k9#s0ptkz%|Dp{ItZ8K`@0KC; zBd1=8a(wJTydOvss#627{2x8CnAo21aMZ2s{ZMAoZB*|JfB-N`R6Wa)2dyh|!nN=w z38SPVIRjGYE?1S2*Xc`drWy@0?TWgn#bG*8K#34^F(5?0T6_zH9>IoQwNe_NLkt2b z$^3e2$WjF)o;d@SfYP+zLqF5(6;l1lD+Ne^Y9W5f@gfQ-Oghuh=OM4jl1B5(A# zlFT>b#yvy7je8<4XU#>#pS_|$EK|ZDgi8R}5(^8dh$XO-&5B5V3j7J~$l`!P=Be$B zl8Cr50s2=saITk?Ja_hV|Fm;vPd>Eq+kY@*Oe75Yj#Lm8g=u1J%wF9-H9&{M|-F6|C*(t2pB5HbgrFq_MqT=;FJ4DPD$_O z-A$Dz0y(}v@l5KVw5^-)S$XU?Q3I6X_KB^2$5oY~sgW(+pFPqUo0a1?7Cd1m6QvS^ zRD3UivYUL#)^!JSaxg_E+TL3-QrZs>?Kc`1cb;bhPh>2YuU4Q}d#B44gV-})-hFBP zQrd=IPxt|aqS8-yM*=2j?aqG3KkZG{i(cE z=q*}qIE|*K!L9F61z_NlrD3X}=C|(!UHW(_WQ>vZrFdaIB!>y2tXI%-gRlm2j*gB5 zx_0Avj{n%Q+HX@SYR<_P8Vu{^b(4RBc{o8dIn0c*Jbf`%?@==5L=^!_a01LXGBkX4 z4F)oP%Nq>4u^8ou!3}L)E!xn*?(n%ZcJoOw$vB40_6$<%Mwy0CZNPeej_I|>{mBFs z`?dB0r=qpPS4}Og*YQHk*6peo!to?7pEwVau?7NR;7ArV;7Z*$wg*h2I%upDf0;+u zl>YcMK42?$BE&92dPwlyT_h|zuF_3p3;j79$qzo*{s5ip?Va8&Ocz5LaU~@j1O3+L zk|zNcpt~ULMkbAq%v7$3p1yPIz5Y(~a8M!!VmpFe$l47zH+RP}21bg2r6rMpVNTmw z*Flc@6VE#}b!D;u{kS1tG+xZAguYmYn63BP%_StJF68gt49!V5QX8lz9rEc>))5fy z1(iU8Uxd(5aZLOT_BkLKnjaUL!NZ3keFj&0`|8V^ymI(P{c95^_fqA-Ss}QybIjsp@0~-D1_b;RxAocR~daAydWvNv)&_B8t zORNt)3+^R2Ox^m5)C&e-QcxhYo6O70458L(AWBO#HDNO!!b)tUk0WpBAZ%=hInd?T zSXSOS#vm*_Cw zSr}geJC*H;%=t||%Aq5W$9Yi<UraKcgZRP_g7fY^wZ*!JLTt08^dzGL#w~US6ct zMivp$kerq#s$M;+5HdMP9{a^;UW3W3t|^li$9g1{or)^ZVNwVEG`}#*pf9eEV!9wd z-?(NjK*2(qzCWo&z|x6B|KLkob4)C~x{S2+-6?;iTjEfXnW=GCaLhD~ho;DnjK

  • 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 aY*Ra}UJ?w Date: Mon, 27 Mar 2023 14:24:17 +0200 Subject: [PATCH 08/12] urlscan_io_dynamic_analysis_playbook --- playbooks/UrlScan_IO_Dynamic_Analysis.json | 30 +++++++------ playbooks/UrlScan_IO_Dynamic_Analysis.py | 52 ++++++++++++---------- 2 files changed, 46 insertions(+), 36 deletions(-) diff --git a/playbooks/UrlScan_IO_Dynamic_Analysis.json b/playbooks/UrlScan_IO_Dynamic_Analysis.json index 09a8dd7012..a2e99d63c6 100644 --- a/playbooks/UrlScan_IO_Dynamic_Analysis.json +++ b/playbooks/UrlScan_IO_Dynamic_Analysis.json @@ -111,7 +111,7 @@ "targetPort": "5_in" } ], - "hash": "6c0864d678b617e9406a8eced20d9e41957ed064", + "hash": "662e0c1ead292892eb76490c42919b482032f0a2", "nodes": { "0": { "data": { @@ -127,7 +127,7 @@ "type": "start", "warnings": {}, "x": 190, - "y": -6.394884621840902e-14 + "y": -1.2789769243681803e-13 }, "1": { "data": { @@ -171,10 +171,10 @@ "errors": {}, "id": "10", "type": "code", - "userCode": "\n # Write your custom code here...\n # Write your custom code here...\n from urllib.parse import urlparse\n build_url_output__observable_array = []\n\n # Build URL\n url_scan_io_task_reporturl = [str(i or '') for i in url_reputation_result_item_1]\n url_scan_io_parameter_url = [str(i or '') for i in url_reputation_parameter_url]\n url_scan_io_url_score_object = [str(i or '') for i in normalize_score_url_with_error_code__url_score_object]\n \n #phantom.debug(\"url_reputation_parameter_url: {}\".format(url_reputation_parameter_url))\n #phantom.debug(\"url_reputation_result_item_1: {}\".format(url_reputation_result_item_1))\n #phantom.debug(\"normalize_score_url_with_error_code__url_score_object: {}\".format(normalize_score_url_with_error_code__url_score_object))\n \n for url, external_id, url_object in zip(url_reputation_parameter_url, url_reputation_result_item_1, normalize_score_url_with_error_code__url_score_object):\n #for url, external_id, url_object in zip(url_scan_io_task_reporturl, url_scan_io_task_reporturl, url_scan_io_url_score_object):\n parsed_url = urlparse(url)\n phantom.debug(\"parsed_url: {}\".format(parsed_url))\n observable_object = {\n \"value\": url,\n \"type\": \"url\",\n \"sandbox\": {\n \"score_id\": url_object['score_id'],\n \"score\": url_object['score'],\n \"confidence\": url_object['confidence']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \"categories\": url_object['categories'],\n \"description\" :url_object['description'],\n \"source\": \"urlscan.io\",\n \"source_link\": f\"{external_id}\"\n }\n if parsed_url.path:\n observable_object['attributes']['path'] = parsed_url.path\n if parsed_url.query:\n observable_object['attributes']['query'] = parsed_url.query\n if parsed_url.port:\n observable_object['attributes']['port'] = parsed_url.port\n \n build_url_output__observable_array.append(observable_object)\n phantom.debug(\"build_url_output__observable_array: {}\".format(build_url_output__observable_array))\n", + "userCode": "\n # Write your custom code here...\n # Write your custom code here...\n from urllib.parse import urlparse\n build_url_output_with_error_code__observable_array = []\n\n # Build URL\n url_scan_io_task_reporturl = [str(i or 'no report url') for i in url_reputation_result_item_1]\n url_scan_io_parameter_url = [str(i or '') for i in url_reputation_parameter_url]\n url_scan_io_url_score_object = normalize_score_url_with_error_code__url_score_object\n \n phantom.debug(\"url_reputation_parameter_url: {}\".format(url_reputation_parameter_url))\n #phantom.debug(\"url_reputation_result_item_1: {}\".format(url_reputation_result_item_1))\n #phantom.debug(\"normalize_score_url_with_error_code__url_score_object: {}\".format(normalize_score_url_with_error_code__url_score_object))\n for url, external_id, url_object in zip(url_scan_io_parameter_url, url_scan_io_task_reporturl, url_scan_io_url_score_object):\n parsed_url = urlparse(url)\n phantom.debug(\"{} {} {} parsed_url: {}\".format(url, external_id, url_object, parsed_url))\n observable_object = {\n \"value\": url,\n \"type\": \"url\",\n \"sandbox\": {\n \"score_id\": url_object['score_id'],\n \"score\": url_object['score'],\n \"confidence\": url_object['confidence']\n }, \n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \"categories\": url_object['categories'],\n \"description\" :url_object['description'],\n \"source\": \"urlscan.io\",\n \"source_link\": f\"{external_id}\"\n }\n\n if parsed_url.path:\n observable_object['attributes']['path'] = parsed_url.path\n if parsed_url.query:\n observable_object['attributes']['query'] = parsed_url.query\n if parsed_url.port:\n observable_object['attributes']['port'] = parsed_url.port\n\n \n build_url_output_with_error_code__observable_array.append(observable_object)\n phantom.debug(\"build_url_output_with_error_code__observable_array: {}\".format(build_url_output_with_error_code__observable_array))\n", "warnings": {}, "x": 340, - "y": 1254 + "y": 1260 }, "11": { "data": { @@ -191,7 +191,7 @@ "inputParameters": [ "url_reputation:action_result.parameter.url", "normalize_score_url_with_no_error_code:custom_function:url_score_object", - "filtered-data:urlscan_detections_error_code_filter:condition_2:url_reputation:action_result.data.*.task.reportURL" + "url_reputation:action_result.data.*.task.reportURL" ], "outputVariables": [ "observable_array" @@ -201,7 +201,7 @@ "errors": {}, "id": "11", "type": "code", - "userCode": "\n # Write your custom code here...\n from urllib.parse import urlparse\n build_url_output__observable_array = []\n\n # Build URL\n for url, external_id, url_object in zip(url_reputation_parameter_url, filtered_result_0_data___task_reporturl, normalize_score_url_with_no_error_code__url_score_object):\n parsed_url = urlparse(url)\n phantom.debug(\"parsed_url: {}\".format(parsed_url))\n observable_object = {\n \"value\": url,\n \"type\": \"url\",\n \"sandbox\": {\n \"score_id\": url_object['score_id'],\n \"score\": url_object['score'],\n \"confidence\": url_object['confidence']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \"categories\": url_object['categories'],\n \"description\" :url_object['description'],\n \"source\": \"urlscan.io\",\n \"source_link\": f\"{external_id}\"\n }\n if parsed_url.path:\n observable_object['attributes']['path'] = parsed_url.path\n if parsed_url.query:\n observable_object['attributes']['query'] = parsed_url.query\n if parsed_url.port:\n observable_object['attributes']['port'] = parsed_url.port\n \n build_url_output__observable_array.append(observable_object)\n phantom.debug(\"build_url_output__observable_array: {}\".format(build_url_output__observable_array))\n", + "userCode": "\n # Write your custom code here...\n from urllib.parse import urlparse\n build_url_output_with_no_error_code__observable_array = []\n\n # Build URL\n phantom.debug(url_reputation_parameter_url)\n for url, external_id, url_object in zip(url_reputation_parameter_url, url_reputation_result_item_1, normalize_score_url_with_no_error_code__url_score_object):\n parsed_url = urlparse(url)\n phantom.debug(\"{} {} {} parsed_url: {}\".format(url, external_id, url_object, parsed_url))\n observable_object = {\n \"value\": url,\n \"type\": \"url\",\n \"sandbox\": {\n \"score_id\": url_object['score_id'],\n \"score\": url_object['score'],\n \"confidence\": url_object['confidence']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \"categories\": url_object['categories'],\n \"description\" :url_object['description'],\n \"source\": \"urlscan.io\",\n \"source_link\": f\"{external_id}\"\n }\n if parsed_url.path:\n observable_object['attributes']['path'] = parsed_url.path\n if parsed_url.query:\n observable_object['attributes']['query'] = parsed_url.query\n if parsed_url.port:\n observable_object['attributes']['port'] = parsed_url.port\n \n build_url_output_with_no_error_code__observable_array.append(observable_object)\n phantom.debug(\"build_url_output_with_no_error_code__observable_array: {}\".format(build_url_output_with_no_error_code__observable_array))\n", "warnings": {}, "x": 0, "y": 1260 @@ -350,7 +350,8 @@ "outputVariables": [ "url_score_object", "scores", - "categories" + "categories", + "confidence" ], "type": "code" }, @@ -376,17 +377,18 @@ "id": "6", "parameters": [ "url_reputation:action_result.parameter.url", + "normalize_score_url_with_error_code:custom_function:confidence", "normalize_score_url_with_error_code:custom_function:scores", "normalize_score_url_with_error_code:custom_function:categories", "url_reputation:action_result.data.*.task.reportURL" ], - "template": "SOAR analyzed URL(s) using urlscan.io. The table below shows a summary of the information gathered.\n\n| URL | Normalized Score | Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} | urlscan.io |\n\n", + "template": "SOAR analyzed URL(s) using urlscan.io. The table below shows a summary of the information gathered.\n\n| URL | Normalized Score | Confidence |Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} | {4} | urlscan.io |\n\n", "type": "format" }, "errors": {}, "id": "6", "type": "format", - "userCode": "\n # Write your custom code here...\n #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"error_code_format_report_url\"))\n", + "userCode": "\n # Write your custom code here...\n phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"error_code_format_report_url\"))\n", "warnings": {}, "x": 340, "y": 1060 @@ -461,7 +463,8 @@ "outputVariables": [ "url_score_object", "scores", - "categories" + "categories", + "confidence" ], "type": "code" }, @@ -488,16 +491,17 @@ "parameters": [ "url_reputation:action_result.parameter.url", "normalize_score_url_with_no_error_code:custom_function:scores", + "normalize_score_url_with_no_error_code:custom_function:confidence", "normalize_score_url_with_no_error_code:custom_function:categories", "url_reputation:action_result.data.*.task.reportURL" ], - "template": "SOAR analyzed URL(s) using urlscan.io. The table below shows a summary of the information gathered.\n\n| URL | Normalized Score | Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} | urlscan.io |\n", + "template": "SOAR analyzed URL(s) using urlscan.io. The table below shows a summary of the information gathered.\n\n| URL | Normalized Score |Confidence | Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} |{4} | urlscan.io |\n", "type": "format" }, "errors": {}, "id": "9", "type": "format", - "userCode": "\n # Write your custom code here...\n #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"no_error_code_format_report_url\"))\n", + "userCode": "\n # Write your custom code here...\n phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"no_error_code_format_report_url\"))\n", "warnings": {}, "x": 0, "y": 1060 @@ -534,7 +538,7 @@ "schema": "5.0.8", "version": "5.5.0.108488" }, - "create_time": "2023-03-24T14:08:30.332219+00:00", + "create_time": "2023-03-27T12:19:43.255588+00:00", "draft_mode": false, "labels": [ "*" diff --git a/playbooks/UrlScan_IO_Dynamic_Analysis.py b/playbooks/UrlScan_IO_Dynamic_Analysis.py index 8c10618867..c692a8fac6 100644 --- a/playbooks/UrlScan_IO_Dynamic_Analysis.py +++ b/playbooks/UrlScan_IO_Dynamic_Analysis.py @@ -120,6 +120,7 @@ def normalize_score_url_with_error_code(action=None, success=None, container=Non normalize_score_url_with_error_code__url_score_object = None normalize_score_url_with_error_code__scores = None normalize_score_url_with_error_code__categories = None + normalize_score_url_with_error_code__confidence = None ################################################################################ ## Custom Code Start @@ -207,6 +208,7 @@ def normalize_score_url_with_error_code(action=None, success=None, container=Non phantom.save_run_data(key="normalize_score_url_with_error_code:url_score_object", value=json.dumps(normalize_score_url_with_error_code__url_score_object)) phantom.save_run_data(key="normalize_score_url_with_error_code:scores", value=json.dumps(normalize_score_url_with_error_code__scores)) phantom.save_run_data(key="normalize_score_url_with_error_code:categories", value=json.dumps(normalize_score_url_with_error_code__categories)) + phantom.save_run_data(key="normalize_score_url_with_error_code:confidence", value=json.dumps(normalize_score_url_with_error_code__confidence)) error_code_format_report_url(container=container) @@ -221,11 +223,12 @@ def error_code_format_report_url(action=None, success=None, container=None, resu # Format a summary table with the information gathered from the playbook. ################################################################################ - template = """SOAR analyzed URL(s) using urlscan.io. The table below shows a summary of the information gathered.\n\n| URL | Normalized Score | Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} | urlscan.io |\n\n""" + template = """SOAR analyzed URL(s) using urlscan.io. The table below shows a summary of the information gathered.\n\n| URL | Normalized Score | Confidence |Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} | {4} | urlscan.io |\n\n""" # parameter list for template variable replacement parameters = [ "url_reputation:action_result.parameter.url", + "normalize_score_url_with_error_code:custom_function:confidence", "normalize_score_url_with_error_code:custom_function:scores", "normalize_score_url_with_error_code:custom_function:categories", "url_reputation:action_result.data.*.task.reportURL" @@ -236,7 +239,7 @@ def error_code_format_report_url(action=None, success=None, container=None, resu ################################################################################ # Write your custom code here... - #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="error_code_format_report_url")) + phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="error_code_format_report_url")) ################################################################################ ## Custom Code End ################################################################################ @@ -304,6 +307,7 @@ def normalize_score_url_with_no_error_code(action=None, success=None, container= normalize_score_url_with_no_error_code__url_score_object = None normalize_score_url_with_no_error_code__scores = None normalize_score_url_with_no_error_code__categories = None + normalize_score_url_with_no_error_code__confidence = None ################################################################################ ## Custom Code Start @@ -401,6 +405,7 @@ def normalize_score_url_with_no_error_code(action=None, success=None, container= phantom.save_run_data(key="normalize_score_url_with_no_error_code:url_score_object", value=json.dumps(normalize_score_url_with_no_error_code__url_score_object)) phantom.save_run_data(key="normalize_score_url_with_no_error_code:scores", value=json.dumps(normalize_score_url_with_no_error_code__scores)) phantom.save_run_data(key="normalize_score_url_with_no_error_code:categories", value=json.dumps(normalize_score_url_with_no_error_code__categories)) + phantom.save_run_data(key="normalize_score_url_with_no_error_code:confidence", value=json.dumps(normalize_score_url_with_no_error_code__confidence)) no_error_code_format_report_url(container=container) @@ -415,12 +420,13 @@ def no_error_code_format_report_url(action=None, success=None, container=None, r # Format a summary table with the information gathered from the playbook. ################################################################################ - template = """SOAR analyzed URL(s) using urlscan.io. The table below shows a summary of the information gathered.\n\n| URL | Normalized Score | Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} | urlscan.io |\n""" + template = """SOAR analyzed URL(s) using urlscan.io. The table below shows a summary of the information gathered.\n\n| URL | Normalized Score |Confidence | Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} |{4} | urlscan.io |\n""" # parameter list for template variable replacement parameters = [ "url_reputation:action_result.parameter.url", "normalize_score_url_with_no_error_code:custom_function:scores", + "normalize_score_url_with_no_error_code:custom_function:confidence", "normalize_score_url_with_no_error_code:custom_function:categories", "url_reputation:action_result.data.*.task.reportURL" ] @@ -430,7 +436,7 @@ def no_error_code_format_report_url(action=None, success=None, container=None, r ################################################################################ # Write your custom code here... - #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="no_error_code_format_report_url")) + phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="no_error_code_format_report_url")) ################################################################################ ## Custom Code End ################################################################################ @@ -466,21 +472,19 @@ def build_url_output_with_error_code(action=None, success=None, container=None, # Write your custom code here... # Write your custom code here... from urllib.parse import urlparse - build_url_output__observable_array = [] + build_url_output_with_error_code__observable_array = [] # Build URL - url_scan_io_task_reporturl = [str(i or '') for i in url_reputation_result_item_1] + url_scan_io_task_reporturl = [str(i or 'no report url') for i in url_reputation_result_item_1] url_scan_io_parameter_url = [str(i or '') for i in url_reputation_parameter_url] - url_scan_io_url_score_object = [str(i or '') for i in normalize_score_url_with_error_code__url_score_object] + url_scan_io_url_score_object = normalize_score_url_with_error_code__url_score_object - #phantom.debug("url_reputation_parameter_url: {}".format(url_reputation_parameter_url)) + phantom.debug("url_reputation_parameter_url: {}".format(url_reputation_parameter_url)) #phantom.debug("url_reputation_result_item_1: {}".format(url_reputation_result_item_1)) #phantom.debug("normalize_score_url_with_error_code__url_score_object: {}".format(normalize_score_url_with_error_code__url_score_object)) - - for url, external_id, url_object in zip(url_reputation_parameter_url, url_reputation_result_item_1, normalize_score_url_with_error_code__url_score_object): - #for url, external_id, url_object in zip(url_scan_io_task_reporturl, url_scan_io_task_reporturl, url_scan_io_url_score_object): + for url, external_id, url_object in zip(url_scan_io_parameter_url, url_scan_io_task_reporturl, url_scan_io_url_score_object): parsed_url = urlparse(url) - phantom.debug("parsed_url: {}".format(parsed_url)) + phantom.debug("{} {} {} parsed_url: {}".format(url, external_id, url_object, parsed_url)) observable_object = { "value": url, "type": "url", @@ -488,7 +492,7 @@ def build_url_output_with_error_code(action=None, success=None, container=None, "score_id": url_object['score_id'], "score": url_object['score'], "confidence": url_object['confidence'] - }, + }, "attributes": { "hostname": parsed_url.hostname, "scheme": parsed_url.scheme @@ -498,15 +502,17 @@ def build_url_output_with_error_code(action=None, success=None, container=None, "source": "urlscan.io", "source_link": f"{external_id}" } + if parsed_url.path: observable_object['attributes']['path'] = parsed_url.path if parsed_url.query: observable_object['attributes']['query'] = parsed_url.query if parsed_url.port: observable_object['attributes']['port'] = parsed_url.port + - build_url_output__observable_array.append(observable_object) - phantom.debug("build_url_output__observable_array: {}".format(build_url_output__observable_array)) + build_url_output_with_error_code__observable_array.append(observable_object) + phantom.debug("build_url_output_with_error_code__observable_array: {}".format(build_url_output_with_error_code__observable_array)) ################################################################################ ## Custom Code End ################################################################################ @@ -525,12 +531,11 @@ def build_url_output_with_no_error_code(action=None, success=None, container=Non # the observables data path. ################################################################################ - url_reputation_result_data = phantom.collect2(container=container, datapath=["url_reputation:action_result.parameter.url"], action_results=results) - filtered_result_0_data_urlscan_detections_error_code_filter = phantom.collect2(container=container, datapath=["filtered-data:urlscan_detections_error_code_filter:condition_2:url_reputation:action_result.data.*.task.reportURL"]) + url_reputation_result_data = phantom.collect2(container=container, datapath=["url_reputation:action_result.parameter.url","url_reputation:action_result.data.*.task.reportURL"], action_results=results) normalize_score_url_with_no_error_code__url_score_object = json.loads(_ if (_ := phantom.get_run_data(key="normalize_score_url_with_no_error_code:url_score_object")) != "" else "null") # pylint: disable=used-before-assignment url_reputation_parameter_url = [item[0] for item in url_reputation_result_data] - filtered_result_0_data___task_reporturl = [item[0] for item in filtered_result_0_data_urlscan_detections_error_code_filter] + url_reputation_result_item_1 = [item[1] for item in url_reputation_result_data] build_url_output_with_no_error_code__observable_array = None @@ -540,12 +545,13 @@ def build_url_output_with_no_error_code(action=None, success=None, container=Non # Write your custom code here... from urllib.parse import urlparse - build_url_output__observable_array = [] + build_url_output_with_no_error_code__observable_array = [] # Build URL - for url, external_id, url_object in zip(url_reputation_parameter_url, filtered_result_0_data___task_reporturl, normalize_score_url_with_no_error_code__url_score_object): + phantom.debug(url_reputation_parameter_url) + for url, external_id, url_object in zip(url_reputation_parameter_url, url_reputation_result_item_1, normalize_score_url_with_no_error_code__url_score_object): parsed_url = urlparse(url) - phantom.debug("parsed_url: {}".format(parsed_url)) + phantom.debug("{} {} {} parsed_url: {}".format(url, external_id, url_object, parsed_url)) observable_object = { "value": url, "type": "url", @@ -570,8 +576,8 @@ def build_url_output_with_no_error_code(action=None, success=None, container=Non if parsed_url.port: observable_object['attributes']['port'] = parsed_url.port - build_url_output__observable_array.append(observable_object) - phantom.debug("build_url_output__observable_array: {}".format(build_url_output__observable_array)) + build_url_output_with_no_error_code__observable_array.append(observable_object) + phantom.debug("build_url_output_with_no_error_code__observable_array: {}".format(build_url_output_with_no_error_code__observable_array)) ################################################################################ ## Custom Code End ################################################################################ From dbeda2da7582690273014330657582bea69306af Mon Sep 17 00:00:00 2001 From: tccontre <26181693+tccontre@users.noreply.github.com> Date: Mon, 27 Mar 2023 15:21:05 +0200 Subject: [PATCH 09/12] Update UrlScan_IO_Dynamic_Analysis.json --- playbooks/UrlScan_IO_Dynamic_Analysis.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playbooks/UrlScan_IO_Dynamic_Analysis.json b/playbooks/UrlScan_IO_Dynamic_Analysis.json index a2e99d63c6..259106649b 100644 --- a/playbooks/UrlScan_IO_Dynamic_Analysis.json +++ b/playbooks/UrlScan_IO_Dynamic_Analysis.json @@ -555,4 +555,4 @@ "urlscan.io", "file_hash" ] -} \ No newline at end of file +} From 6e26c42a907909ac3df430ccf41466c3c5c904ef Mon Sep 17 00:00:00 2001 From: tccontre <26181693+tccontre@users.noreply.github.com> Date: Mon, 27 Mar 2023 15:22:00 +0200 Subject: [PATCH 10/12] Update UrlScan_IO_Dynamic_Analysis.py --- playbooks/UrlScan_IO_Dynamic_Analysis.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/playbooks/UrlScan_IO_Dynamic_Analysis.py b/playbooks/UrlScan_IO_Dynamic_Analysis.py index c692a8fac6..e9159aee80 100644 --- a/playbooks/UrlScan_IO_Dynamic_Analysis.py +++ b/playbooks/UrlScan_IO_Dynamic_Analysis.py @@ -615,4 +615,5 @@ def on_finish(container, summary): phantom.save_playbook_output_data(output=output) - return \ No newline at end of file + return + From d5b4bc84b0440a52443784693e5581357f875d4c Mon Sep 17 00:00:00 2001 From: tccontre <26181693+tccontre@users.noreply.github.com> Date: Tue, 28 Mar 2023 09:58:57 +0200 Subject: [PATCH 11/12] Update UrlScan_IO_Dynamic_Analysis.py --- playbooks/UrlScan_IO_Dynamic_Analysis.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/playbooks/UrlScan_IO_Dynamic_Analysis.py b/playbooks/UrlScan_IO_Dynamic_Analysis.py index e9159aee80..4c38350830 100644 --- a/playbooks/UrlScan_IO_Dynamic_Analysis.py +++ b/playbooks/UrlScan_IO_Dynamic_Analysis.py @@ -239,7 +239,7 @@ def error_code_format_report_url(action=None, success=None, container=None, resu ################################################################################ # Write your custom code here... - phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="error_code_format_report_url")) + #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="error_code_format_report_url")) ################################################################################ ## Custom Code End ################################################################################ @@ -436,7 +436,7 @@ def no_error_code_format_report_url(action=None, success=None, container=None, r ################################################################################ # Write your custom code here... - phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="no_error_code_format_report_url")) + #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="no_error_code_format_report_url")) ################################################################################ ## Custom Code End ################################################################################ @@ -512,7 +512,7 @@ def build_url_output_with_error_code(action=None, success=None, container=None, build_url_output_with_error_code__observable_array.append(observable_object) - phantom.debug("build_url_output_with_error_code__observable_array: {}".format(build_url_output_with_error_code__observable_array)) + #phantom.debug("build_url_output_with_error_code__observable_array: {}".format(build_url_output_with_error_code__observable_array)) ################################################################################ ## Custom Code End ################################################################################ @@ -577,7 +577,7 @@ def build_url_output_with_no_error_code(action=None, success=None, container=Non observable_object['attributes']['port'] = parsed_url.port build_url_output_with_no_error_code__observable_array.append(observable_object) - phantom.debug("build_url_output_with_no_error_code__observable_array: {}".format(build_url_output_with_no_error_code__observable_array)) + #phantom.debug("build_url_output_with_no_error_code__observable_array: {}".format(build_url_output_with_no_error_code__observable_array)) ################################################################################ ## Custom Code End ################################################################################ From 2ff9085ae883917298e6e62183aefa99395cd877 Mon Sep 17 00:00:00 2001 From: tccontre <26181693+tccontre@users.noreply.github.com> Date: Tue, 28 Mar 2023 10:01:09 +0200 Subject: [PATCH 12/12] Update SAA_Dynamic_Analysis.py --- playbooks/SAA_Dynamic_Analysis.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/playbooks/SAA_Dynamic_Analysis.py b/playbooks/SAA_Dynamic_Analysis.py index 2f95bc35d0..dd6127b984 100644 --- a/playbooks/SAA_Dynamic_Analysis.py +++ b/playbooks/SAA_Dynamic_Analysis.py @@ -333,9 +333,9 @@ def normalized_job_forensic_report_output(action=None, success=None, container=N normalized_job_forensic_report_output__scores.append(score) normalized_job_forensic_report_output__categories.append(categories) normalized_job_forensic_report_output__confidence.append(confidence_) - phantom.debug("normalized_job_forensic_report_output__url_score_object: {}".format(normalized_job_forensic_report_output__url_score_object)) - phantom.debug("normalized_job_forensic_report_output__categories: {}".format(normalized_job_forensic_report_output__categories)) - phantom.debug("normalized_job_forensic_report_output__confidence: {}".format(normalized_job_forensic_report_output__confidence)) + #phantom.debug("normalized_job_forensic_report_output__url_score_object: {}".format(normalized_job_forensic_report_output__url_score_object)) + #phantom.debug("normalized_job_forensic_report_output__categories: {}".format(normalized_job_forensic_report_output__categories)) + #phantom.debug("normalized_job_forensic_report_output__confidence: {}".format(normalized_job_forensic_report_output__confidence)) ################################################################################ ## Custom Code End @@ -375,7 +375,7 @@ def format_url_report(action=None, success=None, container=None, results=None, h ################################################################################ # Write your custom code here... - phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="format_report_url")) + #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="format_report_url")) ################################################################################ ## Custom Code End ################################################################################ @@ -443,7 +443,7 @@ def build_url_output(action=None, success=None, container=None, results=None, ha observable_object['attributes']['port'] = parsed_url.port build_url_output__observable_array.append(observable_object) - phantom.debug("build_url_output__observable_array: {}".format(build_url_output__observable_array)) + #phantom.debug("build_url_output__observable_array: {}".format(build_url_output__observable_array)) ################################################################################ ## Custom Code End ################################################################################ @@ -689,9 +689,9 @@ def normalized_job_forensic_report_output_1(action=None, success=None, container normalized_job_forensic_report_output_1__scores.append(score) normalized_job_forensic_report_output_1__categories.append(categories) normalized_job_forensic_report_output_1__confidence.append(confidence_) - phantom.debug("normalized_job_forensic_report_output_1__file_score_object: {}".format(normalized_job_forensic_report_output_1__file_score_object)) - phantom.debug("normalized_job_forensic_report_output_1__scores: {}".format(normalized_job_forensic_report_output_1__scores)) - phantom.debug("normalized_job_forensic_report_output_1__categories: {}".format(normalized_job_forensic_report_output_1__categories)) + #phantom.debug("normalized_job_forensic_report_output_1__file_score_object: {}".format(normalized_job_forensic_report_output_1__file_score_object)) + #phantom.debug("normalized_job_forensic_report_output_1__scores: {}".format(normalized_job_forensic_report_output_1__scores)) + #phantom.debug("normalized_job_forensic_report_output_1__categories: {}".format(normalized_job_forensic_report_output_1__categories)) ################################################################################ ## Custom Code End ################################################################################ @@ -730,7 +730,7 @@ def format_file_report(action=None, success=None, container=None, results=None, ################################################################################ # Write your custom code here... - phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="format_report_file")) + #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="format_report_file")) ################################################################################ ## Custom Code End ################################################################################ @@ -787,7 +787,7 @@ def build_file_output(action=None, success=None, container=None, results=None, h "source_link":f"https://app.twinwave.io/job/{external_id}" } build_file_output__observable_array.append(observable_object) - phantom.debug("build_file_output__observable_array: {}".format(build_file_output__observable_array)) + #phantom.debug("build_file_output__observable_array: {}".format(build_file_output__observable_array)) ################################################################################ ## Custom Code End ################################################################################ @@ -863,4 +863,4 @@ def on_finish(container, summary): phantom.save_playbook_output_data(output=output) - return \ No newline at end of file + return