From 98eaf7025403f1bd510d89d0cbf2c6f2a73c1805 Mon Sep 17 00:00:00 2001 From: tccontre Date: Thu, 30 Mar 2023 11:36:37 +0200 Subject: [PATCH 1/6] crowdstrike_oauth_api_playbook_v2 --- ...rowdStrike_OAuth_API_Dynamic_Analysis.json | 1073 +++-------------- ...CrowdStrike_OAuth_API_Dynamic_Analysis.png | Bin 113809 -> 76637 bytes .../CrowdStrike_OAuth_API_Dynamic_Analysis.py | 922 ++------------ 3 files changed, 286 insertions(+), 1709 deletions(-) diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json index 7cd4867db8..c5e1c21ed7 100644 --- a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json @@ -4,7 +4,7 @@ "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/", + "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\n", "edges": [ { "id": "port_0_to_port_2", @@ -96,25 +96,6 @@ "targetNode": "12", "targetPort": "12_in" }, - { - "id": "port_8_to_port_13", - "sourceNode": "8", - "sourcePort": "8_out", - "targetNode": "13", - "targetPort": "13_in" - }, - { - "conditions": [ - { - "index": 0 - } - ], - "id": "port_13_to_port_10", - "sourceNode": "13", - "sourcePort": "13_out", - "targetNode": "10", - "targetPort": "10_in" - }, { "id": "port_12_to_port_14", "sourceNode": "12", @@ -137,23 +118,18 @@ "targetPort": "1_in" }, { - "conditions": [ - { - "index": 1 - } - ], - "id": "port_13_to_port_16", - "sourceNode": "13", - "sourcePort": "13_out", - "targetNode": "16", - "targetPort": "16_in" + "id": "port_8_to_port_32", + "sourceNode": "8", + "sourcePort": "8_out", + "targetNode": "32", + "targetPort": "32_in" }, { - "id": "port_16_to_port_17", - "sourceNode": "16", - "sourcePort": "16_out", - "targetNode": "17", - "targetPort": "17_in" + "id": "port_32_to_port_35", + "sourceNode": "32", + "sourcePort": "32_out", + "targetNode": "35", + "targetPort": "35_in" }, { "conditions": [ @@ -161,140 +137,15 @@ "index": 0 } ], - "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_20", - "sourceNode": "19", - "sourcePort": "19_out", - "targetNode": "20", - "targetPort": "20_in" - }, - { - "id": "port_20_to_port_1", - "sourceNode": "20", - "sourcePort": "20_out", - "targetNode": "1", - "targetPort": "1_in" - }, - { - "conditions": [ - { - "index": 3 - } - ], - "id": "port_13_to_port_21", - "sourceNode": "13", - "sourcePort": "13_out", - "targetNode": "21", - "targetPort": "21_in" - }, - { - "id": "port_21_to_port_22", - "sourceNode": "21", - "sourcePort": "21_out", - "targetNode": "22", - "targetPort": "22_in" - }, - { - "conditions": [ - { - "index": 0 - } - ], - "id": "port_22_to_port_23", - "sourceNode": "22", - "sourcePort": "22_out", - "targetNode": "23", - "targetPort": "23_in" - }, - { - "id": "port_23_to_port_24", - "sourceNode": "23", - "sourcePort": "23_out", - "targetNode": "24", - "targetPort": "24_in" - }, - { - "id": "port_24_to_port_25", - "sourceNode": "24", - "sourcePort": "24_out", - "targetNode": "25", - "targetPort": "25_in" - }, - { - "id": "port_25_to_port_1", - "sourceNode": "25", - "sourcePort": "25_out", - "targetNode": "1", - "targetPort": "1_in" - }, - { - "conditions": [ - { - "index": 2 - } - ], - "id": "port_13_to_port_26", - "sourceNode": "13", - "sourcePort": "13_out", - "targetNode": "26", - "targetPort": "26_in" - }, - { - "id": "port_26_to_port_27", - "sourceNode": "26", - "sourcePort": "26_out", - "targetNode": "27", - "targetPort": "27_in" - }, - { - "conditions": [ - { - "index": 0 - } - ], - "id": "port_27_to_port_28", - "sourceNode": "27", - "sourcePort": "27_out", - "targetNode": "28", - "targetPort": "28_in" - }, - { - "id": "port_28_to_port_29", - "sourceNode": "28", - "sourcePort": "28_out", - "targetNode": "29", - "targetPort": "29_in" - }, - { - "id": "port_29_to_port_30", - "sourceNode": "29", - "sourcePort": "29_out", - "targetNode": "30", - "targetPort": "30_in" - }, - { - "id": "port_30_to_port_1", - "sourceNode": "30", - "sourcePort": "30_out", - "targetNode": "1", - "targetPort": "1_in" + "id": "port_35_to_port_10", + "sourceNode": "35", + "sourcePort": "35_out", + "targetNode": "10", + "targetPort": "10_in" } ], "globalCustomCode": "\n\n\nimport os", - "hash": "5cff0f179c8b9ff466ffcb9d12d541f2062d3637", + "hash": "30cab54af0a2520644f9aa5802f9f99c834a2822", "nodes": { "0": { "data": { @@ -309,8 +160,8 @@ "id": "0", "type": "start", "warnings": {}, - "x": 530, - "y": -3.197442310920451e-13 + "x": 250, + "y": -6.394884621840902e-14 }, "1": { "data": { @@ -324,17 +175,17 @@ "errors": {}, "id": "1", "type": "end", - "userCode": "\n # Write your custom code here...\n format_report_url = phantom.get_format_data(name=\"format_report_url\")\n format_report_win_file = phantom.get_format_data(name=\"format_report_win_file\")\n format_report_linux_file = phantom.get_format_data(name=\"format_report_linux_file\")\n format_report_android_file = phantom.get_format_data(name=\"format_report_android_file\")\n format_report_mac_file = phantom.get_format_data(name=\"format_report_mac_file\")\n markdown_report_combined_value = phantom.concatenate(format_report_url, format_report_win_file, format_report_linux_file, format_report_android_file, format_report_mac_file, format_report_mac_file)\n output['markdown_report'] = markdown_report_combined_value\n", + "userCode": "\n # Write your custom code here...\n format_report_url = phantom.get_format_data(name=\"format_report_url\")\n format_report_file = phantom.get_format_data(name=\"format_report_file\")\n markdown_report_combined_value = phantom.concatenate(format_report_url, format_report_file,)\n output['markdown_report'] = markdown_report_combined_value\n #phantom.debug(output)\n", "warnings": {}, - "x": 700, - "y": 1580 + "x": 260, + "y": 1920 }, "10": { "data": { "action": "detonate file", "actionType": "generic", "advanced": { - "customName": "windows file detonation", + "customName": "file detonation", "customNameId": 0, "description": "Queries CrowdStrike for information about the provided vault_id(s)", "join": [], @@ -346,15 +197,33 @@ ], "connectorId": "ae971ba5-3117-444a-8ac5-6ce779f3a232", "connectorVersion": "v1", + "customDatapaths": { + "list_demux": { + "data.output.sandbox_type": { + "contains": [], + "isCustomDatapath": true, + "isDatapathArray": true, + "label": "data.output.sandbox_type", + "value": "list_demux:custom_function_result.data.output.sandbox_type" + }, + "data.output.value": { + "contains": [], + "isCustomDatapath": true, + "isDatapathArray": true, + "label": "data.output.value", + "value": "list_demux:custom_function_result.data.output.value" + } + } + }, "functionId": 1, - "functionName": "windows_file_detonation", + "functionName": "file_detonation", "id": "10", "parameters": { "detail_report": true, - "environment": "Windows 10, 64-bit", + "environment": "list_demux:custom_function_result.data.output.sandbox_type", "is_confidential": false, "limit": 50, - "vault_id": "playbook_input:vault_id" + "vault_id": "list_demux:custom_function_result.data.output.value" }, "requiredParameters": [ { @@ -381,14 +250,19 @@ "errors": {}, "id": "10", "type": "action", - "warnings": {}, - "x": 340, - "y": 680 + "userCode": "\n # Write your custom code here...\n", + "warnings": { + "config": [ + "Reconfigure invalid datapath configuration." + ] + }, + "x": 0, + "y": 1000 }, "11": { "data": { "advanced": { - "customName": "windows sandbox filter", + "customName": "sandbox filter", "customNameId": 0, "description": "Filters successful file detonation results.", "join": [], @@ -400,17 +274,17 @@ { "conditionIndex": 0, "op": "==", - "param": "windows_file_detonation:action_result.status", + "param": "file_detonation:action_result.status", "value": "success" } ], "conditionIndex": 0, - "customName": "win_sandbox_status_filter", + "customName": "sandbox_status_filter", "logic": "and" } ], "functionId": 4, - "functionName": "windows_sandbox_filter", + "functionName": "sandbox_filter", "id": "11", "type": "filter" }, @@ -418,27 +292,27 @@ "id": "11", "type": "filter", "warnings": {}, - "x": 400, - "y": 866 + "x": 60, + "y": 1192 }, "12": { "data": { "advanced": { - "customName": "normalized win file detonation output", + "customName": "normalized file detonation 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": 4, - "functionName": "normalized_win_file_detonation_output", + "functionName": "normalized_file_detonation_output", "id": "12", "inputParameters": [ - "filtered-data:windows_sandbox_filter:condition_1:windows_file_detonation:action_result.parameter.vault_id", - "filtered-data:windows_sandbox_filter:condition_1:windows_file_detonation:action_result.data.*.verdict", - "filtered-data:windows_sandbox_filter:condition_1:windows_file_detonation:action_result.data.*.sandbox.*.threat_score", - "filtered-data:windows_sandbox_filter:condition_1:windows_file_detonation:action_result.data.*.sandbox.*.signatures.*.category", - "filtered-data:windows_sandbox_filter:condition_1:windows_file_detonation:action_result.data.*.sandbox.*.verdict" + "filtered-data:sandbox_filter:condition_1:file_detonation:action_result.parameter.vault_id", + "filtered-data:sandbox_filter:condition_1:file_detonation:action_result.data.*.verdict", + "filtered-data:sandbox_filter:condition_1:file_detonation:action_result.data.*.sandbox.*.threat_score", + "filtered-data:sandbox_filter:condition_1:file_detonation:action_result.data.*.sandbox.*.signatures.*.category", + "filtered-data:sandbox_filter:condition_1:file_detonation:action_result.data.*.sandbox.*.verdict" ], "outputVariables": [ "file_score_object", @@ -451,127 +325,31 @@ "errors": {}, "id": "12", "type": "code", - "userCode": "\n # Write your custom code here...\n normalized_win_file_detonation_output__file_score_object = []\n normalized_win_file_detonation_output__scores = []\n normalized_win_file_detonation_output__categories = []\n normalized_win_file_detonation_output__confidence = []\n ## normalized NoneType value to avoid enumeration failure\n file_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_vault_id] \n file_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n file_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \n file_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n \n ## get the set() or unique input vault id parameter.\n \n index_file_dict = {}\n set_vault_id_inputs = set(file_detonation_param_list)\n \n for vault_id_input in set_vault_id_inputs:\n ## crowdstrike detonation can have a multiple phase of score, verdict and category during detonation. we will try to get all the unique values of each\n ## object filed we want to include in report. \n \n file_list = []\n score_list = []\n verdict_list = []\n category_list = []\n \n ## getting the index of each detonation phase of the url/file. group the result for each detonation\n vault_id_input_index = [indx for indx, vault_id_val in enumerate(file_detonation_param_list) if vault_id_val == vault_id_input]\n index_file_dict[vault_id_input] = vault_id_input_index\n phantom.debug(\"vault_id: {} vault_id_list: {}\".format(vault_id_input, index_file_dict))\n \n for idx,(_vault_id, _score, _verdict, _category) in enumerate(zip(file_detonation_param_list, file_detonation_verdict_list, file_detonation_threat_score_list, file_detonation_category_list)):\n if _vault_id == vault_id_input and idx in index_file_dict[vault_id_input]:\n file_list.append(_vault_id)\n score_list.append(_score)\n verdict_list.append(_verdict)\n category_list.append(_category)\n \n # Attach final object\n normalized_win_file_detonation_output__file_score_object.append({'score': list(set(score_list))[0], 'confidence': list(set(verdict_list))[0], 'categories': list(set(category_list))})\n normalized_win_file_detonation_output__scores.append(list(set(score_list))[0])\n normalized_win_file_detonation_output__categories.append(list(set(category_list)))\n normalized_win_file_detonation_output__confidence.append(list(set(verdict_list))[0])\n phantom.debug(\"normalized_win_file_detonation_output__file_score_object: {}\".format(normalized_win_file_detonation_output__file_score_object))\n phantom.debug(\"normalized_win_file_detonation_output__scores: {}\".format(normalized_win_file_detonation_output__scores))\n phantom.debug(\"normalized_win_file_detonation_output__categories: {}\".format(normalized_win_file_detonation_output__categories))\n", + "userCode": "\n # Write your custom code here...\n normalized_file_detonation_output__file_score_object = []\n normalized_file_detonation_output__scores = []\n normalized_file_detonation_output__categories = []\n normalized_file_detonation_output__confidence = []\n ## normalized NoneType value to avoid enumeration failure\n file_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_vault_id] \n file_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n file_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \n file_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n \n ## get the set() or unique input vault id parameter.\n \n index_file_dict = {}\n set_vault_id_inputs = set(file_detonation_param_list)\n \n for vault_id_input in set_vault_id_inputs:\n ## crowdstrike detonation can have a multiple phase of score, verdict and category during detonation. we will try to get all the unique values of each\n ## object filed we want to include in report. \n \n file_list = []\n score_list = []\n verdict_list = []\n category_list = []\n \n ## getting the index of each detonation phase of the url/file. group the result for each detonation\n vault_id_input_index = [indx for indx, vault_id_val in enumerate(file_detonation_param_list) if vault_id_val == vault_id_input]\n index_file_dict[vault_id_input] = vault_id_input_index\n phantom.debug(\"vault_id: {} vault_id_list: {}\".format(vault_id_input, index_file_dict))\n \n for idx,(_vault_id, _score, _verdict, _category) in enumerate(zip(file_detonation_param_list, file_detonation_verdict_list, file_detonation_threat_score_list, file_detonation_category_list)):\n if _vault_id == vault_id_input and idx in index_file_dict[vault_id_input]:\n file_list.append(_vault_id)\n score_list.append(_score)\n verdict_list.append(_verdict)\n category_list.append(_category)\n \n # Attach final object\n normalized_file_detonation_output__file_score_object.append({'score': list(set(score_list))[0], 'confidence': list(set(verdict_list))[0], 'categories': list(set(category_list))})\n normalized_file_detonation_output__scores.append(list(set(score_list))[0])\n normalized_file_detonation_output__categories.append(list(set(category_list)))\n normalized_file_detonation_output__confidence.append(list(set(verdict_list))[0])\n #phantom.debug(\"normalized_file_detonation_output__file_score_object: {}\".format(normalized_file_detonation_output__file_score_object))\n #phantom.debug(\"normalized_file_detonation_output__scores: {}\".format(normalized_file_detonation_output__scores))\n #phantom.debug(\"normalized_file_detonation_output__categories: {}\".format(normalized_file_detonation_output__categories))\n", "warnings": {}, - "x": 340, - "y": 1040 - }, - "13": { - "data": { - "advanced": { - "description": "Determine branches based on file metadata like available file type, mime-type or file extensions.", - "join": [], - "note": "Determine branches based on file metadata like available file type, mime-type or file extensions." - }, - "conditions": [ - { - "comparisons": [ - { - "conditionIndex": 0, - "op": "==", - "param": "get_vault_id_information:custom_function:sandbox_type", - "value": "windows" - } - ], - "conditionIndex": 0, - "customName": "windows_sandbox", - "display": "If", - "logic": "and", - "type": "if" - }, - { - "comparisons": [ - { - "conditionIndex": 1, - "op": "==", - "param": "get_vault_id_information:custom_function:sandbox_type", - "value": "linux" - } - ], - "conditionIndex": 1, - "customName": "linux_sandbox", - "display": "Else If", - "logic": "and", - "type": "elif" - }, - { - "comparisons": [ - { - "conditionIndex": 2, - "op": "==", - "param": "get_vault_id_information:custom_function:sandbox_type", - "value": "mac" - } - ], - "conditionIndex": 2, - "customName": "mac_sandbox", - "display": "Else If", - "logic": "and", - "type": "elif" - }, - { - "comparisons": [ - { - "conditionIndex": 3, - "op": "==", - "param": "get_vault_id_information:custom_function:sandbox_type", - "value": "android" - } - ], - "conditionIndex": 3, - "customName": "android_sandbox", - "display": "Else If", - "logic": "and", - "type": "elif" - }, - { - "comparisons": [ - { - "conditionIndex": 4, - "op": "==", - "param": "", - "value": "" - } - ], - "conditionIndex": 4, - "customName": "windows_sandbox", - "display": "Else", - "logic": "and", - "type": "else" - } - ], - "functionId": 1, - "functionName": "decision_1", - "id": "13", - "type": "decision" - }, - "errors": {}, - "id": "13", - "type": "decision", - "warnings": {}, - "x": 940, - "y": 500 + "x": 0, + "y": 1380 }, "14": { "data": { "advanced": { - "customName": "format report win file", + "customName": "format report file", "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_report_win_file", + "functionName": "format_report_file", "id": "14", "parameters": [ - "filtered-data:windows_sandbox_filter:condition_1:windows_file_detonation:action_result.parameter.vault_id", - "normalized_win_file_detonation_output:custom_function:scores", - "normalized_win_file_detonation_output:custom_function:confidence", - "normalized_win_file_detonation_output:custom_function:categories", + "filtered-data:sandbox_filter:condition_1:file_detonation:action_result.parameter.vault_id", + "normalized_file_detonation_output:custom_function:scores", + "normalized_file_detonation_output:custom_function:confidence", + "normalized_file_detonation_output:custom_function:categories", "filtered-data:windows_sandbox_filter:condition_1:windows_file_detonation:action_result.data.*.id" ], - "template": "SOAR analyzed URL(s) using CrowdStrike. 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://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n{1}\n{2}\n{3}\n{4}\n\n", + "template": "SOAR analyzed File(s) using CrowdStrike. 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://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n\n", "type": "format" }, "errors": {}, @@ -579,25 +357,25 @@ "type": "format", "userCode": "\n # Write your custom code here...\n #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"format_report_win_file\"))\n", "warnings": {}, - "x": 340, - "y": 1220 + "x": 0, + "y": 1560 }, "15": { "data": { "advanced": { - "customName": "build win file output", + "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": 5, - "functionName": "build_win_file_output", + "functionName": "build_file_output", "id": "15", "inputParameters": [ "playbook_input:vault_id", - "filtered-data:windows_sandbox_filter:condition_1:windows_file_detonation:action_result.data.*.id", - "normalized_win_file_detonation_output:custom_function:file_score_object" + "filtered-data:sandbox_filter:condition_1:file_detonation:action_result.data.*.id", + "normalized_file_detonation_output:custom_function:file_score_object" ], "outputVariables": [ "observable_array" @@ -607,166 +385,10 @@ "errors": {}, "id": "15", "type": "code", - "userCode": "\n # Write your custom code here...\n build_win_file_output__observable_array = []\n for _vault_id, external_id, file_object in zip(playbook_input_vault_id_values, filtered_result_0_data___id, normalized_win_file_detonation_output__file_score_object):\n observable_object = {\n \n \"value\": _vault_id,\n \"type\": \"hash\",\n \"sandbox\": {\n \"score\": file_object['score'],\n \"confidence\": file_object['confidence'],\n \"categories\": file_object['categories']\n },\n \"enrichment\": {\n \"provider\": \"CrowdStrike OAuth API\",\n \"type\": \"file\",\n \n },\n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\":f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{external_id}\"\n }\n build_win_file_output__observable_array.append(observable_object)\n phantom.debug(\"build_win_file_output__observable_array: {}\".format(build_win_file_output__observable_array))\n", + "userCode": "\n # Write your custom code here...\n build_file_output__observable_array = []\n for _vault_id, external_id, file_object in zip(playbook_input_vault_id_values, filtered_result_0_data___id, normalized_file_detonation_output__file_score_object):\n observable_object = {\n \n \"value\": _vault_id,\n \"type\": \"hash\",\n \"sandbox\": {\n \"score\": file_object['score'],\n \"confidence\": file_object['confidence'],\n \"categories\": file_object['categories']\n },\n \"enrichment\": {\n \"provider\": \"CrowdStrike OAuth API\",\n \"type\": \"file\",\n \n },\n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\":f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{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": 1400 - }, - "16": { - "data": { - "action": "detonate file", - "actionType": "generic", - "advanced": { - "customName": "linux file detonation", - "customNameId": 0, - "description": "Queries CrowdStrike for information about the provided vault_id(s)", - "join": [], - "note": "Queries CrowdStrike for information about the provided vault_id(s)" - }, - "connector": "CrowdStrike OAuth API", - "connectorConfigs": [ - "crowdstrike_url_reputation" - ], - "connectorId": "ae971ba5-3117-444a-8ac5-6ce779f3a232", - "connectorVersion": "v1", - "functionId": 2, - "functionName": "linux_file_detonation", - "id": "16", - "parameters": { - "environment": "Linux Ubuntu 16.04, 64-bit", - "is_confidential": true, - "limit": 50, - "vault_id": "playbook_input:vault_id" - }, - "requiredParameters": [ - { - "data_type": "numeric", - "default": 50, - "field": "limit" - }, - { - "data_type": "string", - "field": "vault_id" - }, - { - "data_type": "string", - "field": "environment" - }, - { - "data_type": "boolean", - "default": true, - "field": "is_confidential" - } - ], - "type": "action" - }, - "errors": {}, - "id": "16", - "type": "action", - "warnings": {}, - "x": 680, - "y": 700 - }, - "17": { - "data": { - "advanced": { - "customName": "linux sandbox filter", - "customNameId": 0, - "description": "Filters successful file detonation results.", - "join": [], - "note": "Filters successful file detonation results." - }, - "conditions": [ - { - "comparisons": [ - { - "conditionIndex": 0, - "op": "==", - "param": "linux_file_detonation:action_result.status", - "value": "success" - } - ], - "conditionIndex": 0, - "customName": "linux_sandbox_status_filter", - "logic": "and" - } - ], - "functionId": 6, - "functionName": "linux_sandbox_filter", - "id": "17", - "type": "filter" - }, - "errors": {}, - "id": "17", - "type": "filter", - "warnings": {}, - "x": 740, - "y": 860 - }, - "18": { - "data": { - "advanced": { - "customName": "normalized linux file detonation 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": 7, - "functionName": "normalized_linux_file_detonation_output", - "id": "18", - "inputParameters": [ - "filtered-data:linux_sandbox_filter:condition_1:linux_file_detonation:action_result.parameter.vault_id", - "filtered-data:linux_sandbox_filter:condition_1:linux_file_detonation:action_result.data.*.verdict", - "filtered-data:linux_sandbox_filter:condition_1:linux_file_detonation:action_result.data.*.sandbox.*.threat_score", - "filtered-data:linux_sandbox_filter:condition_1:linux_file_detonation:action_result.data.*.sandbox.*.signatures.*.category", - "filtered-data:linux_sandbox_filter:condition_1:linux_file_detonation:action_result.data.*.sandbox.*.verdict" - ], - "outputVariables": [ - "file_score_object", - "scores", - "categories", - "confidence" - ], - "type": "code" - }, - "errors": {}, - "id": "18", - "type": "code", - "userCode": "\n # Write your custom code here...\n normalized_linux_file_detonation_output__file_score_object = []\n normalized_linux_file_detonation_output__scores = []\n normalized_linux_file_detonation_output__categories = []\n normalized_linux_file_detonation_output__confidence = []\n \n ## normalized NoneType value to avoid enumeration failure\n file_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_vault_id] \n file_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n file_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \n file_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n \n ## get the set() or unique input vault id parameter.\n \n index_file_dict = {}\n set_vault_id_inputs = set(file_detonation_param_list)\n \n for vault_id_input in set_vault_id_inputs:\n ## crowdstrike detonation can have a multiple phase of score, verdict and category during detonation. we will try to get all the unique values of each\n ## object filed we want to include in report. \n \n file_list = []\n score_list = []\n verdict_list = []\n category_list = []\n \n ## getting the index of each detonation phase of the url/file. group the result for each detonation\n vault_id_input_index = [indx for indx, vault_id_val in enumerate(file_detonation_param_list) if vault_id_val == vault_id_input]\n index_file_dict[vault_id_input] = vault_id_input_index\n phantom.debug(\"vault_id: {} vault_id_list: {}\".format(vault_id_input, index_file_dict))\n \n for idx,(_vault_id, _score, _verdict, _category) in enumerate(zip(file_detonation_param_list, file_detonation_verdict_list, file_detonation_threat_score_list, file_detonation_category_list)):\n if _vault_id == vault_id_input and idx in index_file_dict[vault_id_input]:\n file_list.append(_vault_id)\n score_list.append(_score)\n verdict_list.append(_verdict)\n category_list.append(_category)\n \n # Attach final object\n normalized_linux_file_detonation_output__file_score_object.append({'score': list(set(score_list))[0], 'confidence': list(set(verdict_list))[0], 'categories': list(set(category_list))})\n normalized_linux_file_detonation_output__scores.append(list(set(score_list))[0])\n normalized_linux_file_detonation_output__categories.append(list(set(category_list)))\n normalized_linux_file_detonation_output__confidence.append(list(set(verdict_list))[0])\n phantom.debug(\"normalized_linux_file_detonation_output__file_score_object: {}\".format(normalized_linux_file_detonation_output__file_score_object))\n phantom.debug(\"normalized_linux_file_detonation_output__scores: {}\".format(normalized_linux_file_detonation_output__scores))\n phantom.debug(\"normalized_linux_file_detonation_output__categories: {}\".format(normalized_linux_file_detonation_output__categories))\n", - "warnings": {}, - "x": 680, - "y": 1046 - }, - "19": { - "data": { - "advanced": { - "customName": "format report linux file", - "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": 3, - "functionName": "format_report_linux_file", - "id": "19", - "parameters": [ - "filtered-data:linux_sandbox_filter:condition_1:linux_file_detonation:action_result.parameter.vault_id", - "normalized_linux_file_detonation_output:custom_function:scores", - "normalized_linux_file_detonation_output:custom_function:confidence", - "normalized_linux_file_detonation_output:custom_function:categories", - "filtered-data:linux_sandbox_filter:condition_1:linux_file_detonation:action_result.data.*.id" - ], - "template": "SOAR analyzed URL(s) using CrowdStrike. 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://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n{1}\n{2}\n{3}\n{4}\n\n", - "type": "format" - }, - "errors": {}, - "id": "19", - "type": "format", - "userCode": "\n # Write your custom code here...\n #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"format_report_linux_file\"))\n", - "warnings": {}, - "x": 680, - "y": 1220 + "x": 0, + "y": 1740 }, "2": { "data": { @@ -814,380 +436,8 @@ "id": "2", "type": "filter", "warnings": {}, - "x": 580, - "y": 140 - }, - "20": { - "data": { - "advanced": { - "customName": "build linux 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_linux_file_output", - "id": "20", - "inputParameters": [ - "playbook_input:vault_id", - "filtered-data:linux_sandbox_filter:condition_1:linux_file_detonation:action_result.data.*.id", - "normalized_linux_file_detonation_output:custom_function:file_score_object" - ], - "outputVariables": [ - "observable_array" - ], - "type": "code" - }, - "errors": {}, - "id": "20", - "type": "code", - "userCode": "\n # Write your custom code here...\n build_linux_file_output__observable_array = []\n for _vault_id, external_id, file_object in zip(playbook_input_vault_id_values, filtered_result_0_data___id, normalized_linux_file_detonation_output__file_score_object):\n observable_object = {\n \n \"value\": _vault_id,\n \"type\": \"hash\",\n \"sandbox\": {\n \"score\": file_object['score'],\n \"confidence\": file_object['confidence'],\n \"categories\": file_object['categories']\n },\n \"enrichment\": {\n \"provider\": \"CrowdStrike OAuth API\",\n \"type\": \"file\",\n \n },\n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\":f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{external_id}\"\n }\n build_linux_file_output__observable_array.append(observable_object)\n phantom.debug(\"build_linux_file_output__observable_array: {}\".format(build_linux_file_output__observable_array))\n\n", - "warnings": {}, - "x": 680, - "y": 1400 - }, - "21": { - "data": { - "action": "detonate file", - "actionType": "generic", - "advanced": { - "customName": "android file detonation", - "customNameId": 0, - "description": "Queries CrowdStrike for information about the provided vault_id(s)", - "join": [], - "note": "Queries CrowdStrike for information about the provided vault_id(s)" - }, - "connector": "CrowdStrike OAuth API", - "connectorConfigs": [ - "crowdstrike_url_reputation" - ], - "connectorId": "ae971ba5-3117-444a-8ac5-6ce779f3a232", - "connectorVersion": "v1", - "functionId": 3, - "functionName": "android_file_detonation", - "id": "21", - "parameters": { - "environment": "Android (static analysis)", - "is_confidential": true, - "limit": 50, - "vault_id": "playbook_input:vault_id" - }, - "requiredParameters": [ - { - "data_type": "numeric", - "default": 50, - "field": "limit" - }, - { - "data_type": "string", - "field": "vault_id" - }, - { - "data_type": "string", - "field": "environment" - }, - { - "data_type": "boolean", - "default": true, - "field": "is_confidential" - } - ], - "type": "action" - }, - "errors": {}, - "id": "21", - "type": "action", - "warnings": {}, - "x": 1020, - "y": 695 - }, - "22": { - "data": { - "advanced": { - "customName": "android sandbox filter", - "customNameId": 0, - "description": "Filters successful file detonation results.", - "join": [], - "note": "Filters successful file detonation results." - }, - "conditions": [ - { - "comparisons": [ - { - "conditionIndex": 0, - "op": "==", - "param": "android_file_detonation:action_result.status", - "value": "success" - } - ], - "conditionIndex": 0, - "customName": "android_sandbox_status_filter", - "logic": "and" - } - ], - "functionId": 5, - "functionName": "android_sandbox_filter", - "id": "22", - "type": "filter" - }, - "errors": {}, - "id": "22", - "type": "filter", - "warnings": {}, - "x": 1080, - "y": 860 - }, - "23": { - "data": { - "advanced": { - "customName": "normalized android file detonation 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": 8, - "functionName": "normalized_android_file_detonation_output", - "id": "23", - "inputParameters": [ - "filtered-data:android_sandbox_filter:condition_1:android_file_detonation:action_result.parameter.vault_id", - "filtered-data:android_sandbox_filter:condition_1:android_file_detonation:action_result.data.*.verdict", - "filtered-data:android_sandbox_filter:condition_1:android_file_detonation:action_result.data.*.sandbox.*.threat_score", - "filtered-data:android_sandbox_filter:condition_1:android_file_detonation:action_result.data.*.sandbox.*.signatures.*.category", - "filtered-data:android_sandbox_filter:condition_1:android_file_detonation:action_result.data.*.sandbox.*.verdict" - ], - "outputVariables": [ - "file_score_object", - "scores", - "categories", - "confidence" - ], - "type": "code" - }, - "errors": {}, - "id": "23", - "type": "code", - "userCode": "\n # Write your custom code here...\n normalized_android_file_detonation_output__file_score_object = []\n normalized_android_file_detonation_output__scores = []\n normalized_android_file_detonation_output__categories = []\n normalized_android_file_detonation_output__confidence = []\n \n ## normalized NoneType value to avoid enumeration failure\n file_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_vault_id] \n file_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n file_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \n file_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n \n ## get the set() or unique input vault id parameter.\n \n index_file_dict = {}\n set_vault_id_inputs = set(file_detonation_param_list)\n \n for vault_id_input in set_vault_id_inputs:\n ## crowdstrike detonation can have a multiple phase of score, verdict and category during detonation. we will try to get all the unique values of each\n ## object filed we want to include in report. \n \n file_list = []\n score_list = []\n verdict_list = []\n category_list = []\n \n ## getting the index of each detonation phase of the url/file. group the result for each detonation\n vault_id_input_index = [indx for indx, vault_id_val in enumerate(file_detonation_param_list) if vault_id_val == vault_id_input]\n index_file_dict[vault_id_input] = vault_id_input_index\n phantom.debug(\"vault_id: {} vault_id_list: {}\".format(vault_id_input, index_file_dict))\n \n for idx,(_vault_id, _score, _verdict, _category) in enumerate(zip(file_detonation_param_list, file_detonation_verdict_list, file_detonation_threat_score_list, file_detonation_category_list)):\n if _vault_id == vault_id_input and idx in index_file_dict[vault_id_input]:\n file_list.append(_vault_id)\n score_list.append(_score)\n verdict_list.append(_verdict)\n category_list.append(_category)\n \n # Attach final object\n normalized_android_file_detonation_output__file_score_object.append({'score': list(set(score_list))[0], 'confidence': list(set(verdict_list))[0], 'categories': list(set(category_list))})\n normalized_android_file_detonation_output__scores.append(list(set(score_list))[0])\n normalized_android_file_detonation_output__categories.append(list(set(category_list)))\n normalized_android_file_detonation_output__confidence.append(list(set(verdict_list))[0])\n phantom.debug(\"normalized_android_file_detonation_output__file_score_object: {}\".format(normalized_android_file_detonation_output__file_score_object))\n phantom.debug(\"normalized_android_file_detonation_output__scores: {}\".format(normalized_android_file_detonation_output__scores))\n phantom.debug(\"normalized_android_file_detonation_output__categories: {}\".format(normalized_android_file_detonation_output__categories))\n", - "warnings": {}, - "x": 1020, - "y": 1040 - }, - "24": { - "data": { - "advanced": { - "customName": "format report android file", - "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": 4, - "functionName": "format_report_android_file", - "id": "24", - "parameters": [ - "filtered-data:android_sandbox_filter:condition_1:android_file_detonation:action_result.parameter.vault_id", - "normalized_android_file_detonation_output:custom_function:scores", - "normalized_android_file_detonation_output:custom_function:confidence", - "normalized_android_file_detonation_output:custom_function:categories", - "filtered-data:android_sandbox_filter:condition_1:android_file_detonation:action_result.data.*.id" - ], - "template": "SOAR analyzed URL(s) using CrowdStrike. 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://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n{1}\n{2}\n{3}\n{4}\n\n\n", - "type": "format" - }, - "errors": {}, - "id": "24", - "type": "format", - "userCode": "\n # Write your custom code here...\n #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"format_report_android_file\"))\n", - "warnings": {}, - "x": 1020, - "y": 1217 - }, - "25": { - "data": { - "advanced": { - "customName": "build android 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": 9, - "functionName": "build_android_file_output", - "id": "25", - "inputParameters": [ - "playbook_input:vault_id", - "filtered-data:android_sandbox_filter:condition_1:android_file_detonation:action_result.data.*.id", - "normalized_android_file_detonation_output:custom_function:file_score_object" - ], - "outputVariables": [ - "observable_array" - ], - "type": "code" - }, - "errors": {}, - "id": "25", - "type": "code", - "userCode": "\n # Write your custom code here...\n build_android_file_output__observable_array = []\n for _vault_id, external_id, file_object in zip(playbook_input_vault_id_values, filtered_result_0_data___id, normalized_android_file_detonation_output__file_score_object):\n observable_object = {\n \n \"value\": _vault_id,\n \"type\": \"hash\",\n \"sandbox\": {\n \"score\": file_object['score'],\n \"confidence\": file_object['confidence'],\n \"categories\": file_object['categories']\n },\n \"enrichment\": {\n \"provider\": \"CrowdStrike OAuth API\",\n \"type\": \"file\",\n \n },\n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\":f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{external_id}\"\n }\n build_android_file_output__observable_array.append(observable_object)\n phantom.debug(\"build_android_file_output__observable_array: {}\".format(build_android_file_output__observable_array))\n", - "warnings": {}, - "x": 1020, - "y": 1380 - }, - "26": { - "data": { - "action": "detonate file", - "actionType": "generic", - "advanced": { - "customName": "mac file detonation", - "customNameId": 0, - "description": "Queries CrowdStrike for information about the provided vault_id(s)", - "join": [], - "note": "Queries CrowdStrike for information about the provided vault_id(s)" - }, - "connector": "CrowdStrike OAuth API", - "connectorConfigs": [ - "crowdstrike_url_reputation" - ], - "connectorId": "ae971ba5-3117-444a-8ac5-6ce779f3a232", - "connectorVersion": "v1", - "functionId": 4, - "functionName": "mac_file_detonation", - "id": "26", - "parameters": { - "environment": "Linux Ubuntu 16.04, 64-bit", - "is_confidential": true, - "limit": 50, - "vault_id": "playbook_input:vault_id" - }, - "requiredParameters": [ - { - "data_type": "numeric", - "default": 50, - "field": "limit" - }, - { - "data_type": "string", - "field": "vault_id" - }, - { - "data_type": "string", - "field": "environment" - }, - { - "data_type": "boolean", - "default": true, - "field": "is_confidential" - } - ], - "type": "action" - }, - "errors": {}, - "id": "26", - "type": "action", - "warnings": {}, - "x": 1360, - "y": 700 - }, - "27": { - "data": { - "advanced": { - "customName": "mac sandbox filter", - "customNameId": 0, - "description": "Filters successful file detonation results.", - "join": [], - "note": "Filters successful file detonation results." - }, - "conditions": [ - { - "comparisons": [ - { - "conditionIndex": 0, - "op": "==", - "param": "mac_file_detonation:action_result.status", - "value": "success" - } - ], - "conditionIndex": 0, - "customName": "mac_sandbox_status_filter", - "logic": "and" - } - ], - "functionId": 7, - "functionName": "mac_sandbox_filter", - "id": "27", - "type": "filter" - }, - "errors": {}, - "id": "27", - "type": "filter", - "warnings": {}, - "x": 1420, - "y": 866 - }, - "28": { - "data": { - "advanced": { - "customName": "normalized mac file detonation 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": 10, - "functionName": "normalized_mac_file_detonation_output", - "id": "28", - "inputParameters": [ - "filtered-data:mac_sandbox_filter:condition_1:mac_file_detonation:action_result.parameter.vault_id", - "filtered-data:mac_sandbox_filter:condition_1:mac_file_detonation:action_result.data.*.verdict", - "filtered-data:mac_sandbox_filter:condition_1:mac_file_detonation:action_result.data.*.sandbox.*.threat_score", - "filtered-data:mac_sandbox_filter:condition_1:mac_file_detonation:action_result.data.*.sandbox.*.signatures.*.category", - "filtered-data:mac_sandbox_filter:condition_1:mac_file_detonation:action_result.data.*.sandbox.*.verdict" - ], - "outputVariables": [ - "url_score_object", - "scores", - "categories", - "confidence" - ], - "type": "code" - }, - "errors": {}, - "id": "28", - "type": "code", - "userCode": "\n # Write your custom code here...\n\n normalized_mac_file_detonation_output__url_score_object = []\n normalized_mac_file_detonation_output__scores = []\n normalized_mac_file_detonation_output__categories = []\n normalized_mac_file_detonation_output__confidence = []\n \n ## normalized NoneType value to avoid enumeration failure\n file_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_vault_id] \n file_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n file_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \n file_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n \n ## get the set() or unique input vault id parameter.\n \n index_file_dict = {}\n set_vault_id_inputs = set(file_detonation_param_list)\n \n for vault_id_input in set_vault_id_inputs:\n ## crowdstrike detonation can have a multiple phase of score, verdict and category during detonation. we will try to get all the unique values of each\n ## object filed we want to include in report. \n \n file_list = []\n score_list = []\n verdict_list = []\n category_list = []\n \n ## getting the index of each detonation phase of the url/file. group the result for each detonation\n vault_id_input_index = [indx for indx, vault_id_val in enumerate(file_detonation_param_list) if vault_id_val == vault_id_input]\n index_file_dict[vault_id_input] = vault_id_input_index\n phantom.debug(\"vault_id: {} vault_id_list: {}\".format(vault_id_input, index_file_dict))\n \n for idx,(_vault_id, _score, _verdict, _category) in enumerate(zip(file_detonation_param_list, file_detonation_verdict_list, file_detonation_threat_score_list, file_detonation_category_list)):\n if _vault_id == vault_id_input and idx in index_file_dict[vault_id_input]:\n file_list.append(_vault_id)\n score_list.append(_score)\n verdict_list.append(_verdict)\n category_list.append(_category)\n \n # Attach final object\n normalized_mac_file_detonation_output__url_score_object.append({'score': list(set(score_list))[0], 'confidence': list(set(verdict_list))[0], 'categories': list(set(category_list))})\n normalized_mac_file_detonation_output__scores.append(list(set(score_list))[0])\n normalized_mac_file_detonation_output__categories.append(list(set(category_list)))\n normalized_mac_file_detonation_output__confidence.append(list(set(verdict_list))[0])\n phantom.debug(\"normalized_mac_file_detonation_output__url_score_object: {}\".format(normalized_mac_file_detonation_output__url_score_object))\n phantom.debug(\"normalized_mac_file_detonation_output__scores: {}\".format(normalized_mac_file_detonation_output__scores))\n phantom.debug(\"normalized_mac_file_detonation_output__categories: {}\".format(normalized_mac_file_detonation_output__categories))\n", - "warnings": {}, - "x": 1380, - "y": 1040 - }, - "29": { - "data": { - "advanced": { - "customName": "format report mac file", - "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": 5, - "functionName": "format_report_mac_file", - "id": "29", - "parameters": [ - "filtered-data:mac_sandbox_filter:condition_1:mac_file_detonation:action_result.parameter.vault_id", - "normalized_mac_file_detonation_output:custom_function:scores", - "normalized_mac_file_detonation_output:custom_function:confidence", - "normalized_mac_file_detonation_output:custom_function:categories", - "filtered-data:mac_sandbox_filter:condition_1:mac_file_detonation:action_result.data.*.id" - ], - "template": "SOAR analyzed URL(s) using CrowdStrike. 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://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n{1}\n{2}\n{3}\n{4}\n\n{1}\n{2}\n{3}\n{4}\n", - "type": "format" - }, - "errors": {}, - "id": "29", - "type": "format", - "userCode": "\n # Write your custom code here...\n #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"format_report_mac_file\"))\n", - "warnings": {}, - "x": 1360, - "y": 1220 + "x": 290, + "y": 148 }, "3": { "data": { @@ -1210,7 +460,7 @@ "functionName": "crowdstrike_url_detonation", "id": "3", "parameters": { - "environment": "Windows 7, 64-bit", + "environment": "Windows 7, 32-bit", "limit": 50, "url": "playbook_input:url" }, @@ -1235,38 +485,96 @@ "id": "3", "type": "action", "warnings": {}, - "x": 0, - "y": 680 + "x": 460, + "y": 1000 }, - "30": { + "32": { "data": { "advanced": { - "customName": "build mac file output", + "customName": "list demux", "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." + "join": [] }, - "functionId": 11, - "functionName": "build_mac_file_output", - "id": "30", - "inputParameters": [ - "playbook_input:vault_id", - "filtered-data:mac_sandbox_filter:condition_1:mac_file_detonation:action_result.data.*.id", - "normalized_mac_file_detonation_output:custom_function:url_score_object" - ], - "outputVariables": [ - "observable_array" - ], - "type": "code" + "customFunction": { + "draftMode": false, + "name": "list_demux", + "repoName": "community" + }, + "functionId": 1, + "functionName": "list_demux", + "id": "32", + "selectMore": false, + "type": "utility", + "utilities": { + "list_demux": { + "description": "Accepts a single list and converts it into multiple custom function output results. All output will be placed in the \"output\" datapath. Sub-items and sub-item variable names are dependent on the input.", + "fields": [ + { + "dataTypes": [ + "*" + ], + "description": "A list of objects. Nested lists are not unpacked.", + "inputType": "item", + "label": "input_list", + "name": "input_list", + "placeholder": "[\"list_item_1\", \"list_item_2\", \"list_item_3\"]", + "renderType": "datapath", + "required": false + } + ], + "label": "list_demux", + "name": "list_demux" + } + }, + "utilityType": "custom_function", + "values": { + "list_demux": { + "input_list": "get_vault_id_information:custom_function:sandbox_type" + } + } }, "errors": {}, - "id": "30", - "type": "code", - "userCode": "\n # Write your custom code here...\n build_mac_file_output__observable_array = []\n for _vault_id, external_id, file_object in zip(playbook_input_vault_id_values, filtered_result_0_data___id, normalized_mac_file_detonation_output__url_score_object):\n observable_object = {\n \n \"value\": _vault_id,\n \"type\": \"hash\",\n \"sandbox\": {\n \"score\": file_object['score'],\n \"confidence\": file_object['confidence'],\n \"categories\": file_object['categories']\n },\n \"enrichment\": {\n \"provider\": \"CrowdStrike OAuth API\",\n \"type\": \"file\",\n \n },\n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\":f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{external_id}\"\n }\n build_mac_file_output__observable_array.append(observable_object)\n phantom.debug(\"build_mac_file_output__observable_array: {}\".format(build_mac_file_output__observable_array))\n", + "id": "32", + "type": "utility", "warnings": {}, - "x": 1360, - "y": 1396 + "x": 140, + "y": 520 + }, + "35": { + "data": { + "advanced": { + "customName": "list demux filter", + "customNameId": 0, + "description": "filter check if list demux output exist.", + "join": [], + "note": "filter check if list demux output exist." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "==", + "param": "list_demux:custom_function_result.success", + "value": "True" + } + ], + "conditionIndex": 0, + "customName": "sandbox_type_exist", + "logic": "and" + } + ], + "functionId": 8, + "functionName": "list_demux_filter", + "id": "35", + "type": "filter" + }, + "errors": {}, + "id": "35", + "type": "filter", + "warnings": {}, + "x": 60, + "y": 670 }, "4": { "data": { @@ -1301,8 +609,8 @@ "id": "4", "type": "filter", "warnings": {}, - "x": 60, - "y": 860 + "x": 520, + "y": 1192 }, "5": { "customCode": null, @@ -1335,10 +643,10 @@ "errors": {}, "id": "5", "type": "code", - "userCode": "\n # Write your custom code here...\n #phantom.debug(\"filtered_result_0_parameter_url: {}\".format(filtered_result_0_parameter_url))\n #phantom.debug(\"filtered_result_0_data: {}\".format(filtered_result_0_data)) \n #phantom.debug(\"filtered_result_0_data___verdict: {}\".format(filtered_result_0_data___verdict))\n #phantom.debug(\"filtered_result_0_data___sandbox___threat_score: {}\".format(filtered_result_0_data___sandbox___threat_score))\n #phantom.debug(\"filtered_result_0_data___sandbox___signatures___category: {}\".format(filtered_result_0_data___sandbox___signatures___category))\n #phantom.debug(\"filtered_result_0_summary_verdict: {}\".format(filtered_result_0_summary_verdict))\n #phantom.debug(\"filtered_result_0_data___sandbox___verdict: {}\".format(filtered_result_0_data___sandbox___verdict))\n #phantom.debug(\"crowdstrike_url_detonation_result_data: {}\".format(crowdstrike_url_detonation_result_data)) \n \n ## define variables for easy code debugging\n \n normalized_url_detonation_output__url_score_object = []\n normalized_url_detonation_output__scores = []\n normalized_url_detonation_output__categories = []\n normalized_url_detonation_output__confidence = []\n \n url_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_url] \n url_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n url_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n url_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \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 \n for url_input in set_url_inputs:\n url_list = []\n score_list = []\n verdict_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, _verdict, _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 verdict_list.append(_verdict)\n category_list.append(_category)\n \n # Attach final object\n normalized_url_detonation_output__url_score_object.append({'score': list(set(score_list))[0], 'confidence': list(set(verdict_list))[0], 'categories': list(set(category_list))})\n normalized_url_detonation_output__scores.append(list(set(score_list))[0])\n normalized_url_detonation_output__categories.append(list(set(category_list)))\n normalized_url_detonation_output__confidence.append(list(set(verdict_list))[0])\n phantom.debug(\"normalized_url_detonation_output__url_score_object: {}\".format(normalized_url_detonation_output__url_score_object))\n phantom.debug(\"normalized_url_detonation_output__scores: {}\".format(normalized_url_detonation_output__scores))\n phantom.debug(\"normalized_url_detonation_output__categories: {}\".format(normalized_url_detonation_output__categories))\n \n \n", + "userCode": "\n # Write your custom code here...\n #phantom.debug(\"filtered_result_0_parameter_url: {}\".format(filtered_result_0_parameter_url))\n #phantom.debug(\"filtered_result_0_data: {}\".format(filtered_result_0_data)) \n #phantom.debug(\"filtered_result_0_data___verdict: {}\".format(filtered_result_0_data___verdict))\n #phantom.debug(\"filtered_result_0_data___sandbox___threat_score: {}\".format(filtered_result_0_data___sandbox___threat_score))\n #phantom.debug(\"filtered_result_0_data___sandbox___signatures___category: {}\".format(filtered_result_0_data___sandbox___signatures___category))\n #phantom.debug(\"filtered_result_0_summary_verdict: {}\".format(filtered_result_0_summary_verdict))\n #phantom.debug(\"filtered_result_0_data___sandbox___verdict: {}\".format(filtered_result_0_data___sandbox___verdict))\n #phantom.debug(\"crowdstrike_url_detonation_result_data: {}\".format(crowdstrike_url_detonation_result_data)) \n \n ## define variables for easy code debugging\n \n normalized_url_detonation_output__url_score_object = []\n normalized_url_detonation_output__scores = []\n normalized_url_detonation_output__categories = []\n normalized_url_detonation_output__confidence = []\n \n url_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_url] \n url_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n url_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n url_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \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 \n for url_input in set_url_inputs:\n url_list = []\n score_list = []\n verdict_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, _verdict, _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 verdict_list.append(_verdict)\n category_list.append(_category)\n \n # Attach final object\n normalized_url_detonation_output__url_score_object.append({'score': list(set(score_list))[0], 'confidence': list(set(verdict_list))[0], 'categories': list(set(category_list))})\n normalized_url_detonation_output__scores.append(list(set(score_list))[0])\n normalized_url_detonation_output__categories.append(list(set(category_list)))\n normalized_url_detonation_output__confidence.append(list(set(verdict_list))[0])\n #phantom.debug(\"normalized_url_detonation_output__url_score_object: {}\".format(normalized_url_detonation_output__url_score_object))\n #phantom.debug(\"normalized_url_detonation_output__scores: {}\".format(normalized_url_detonation_output__scores))\n #phantom.debug(\"normalized_url_detonation_output__categories: {}\".format(normalized_url_detonation_output__categories))\n \n \n", "warnings": {}, - "x": 0, - "y": 1040 + "x": 460, + "y": 1380 }, "6": { "data": { @@ -1359,7 +667,7 @@ "normalized_url_detonation_output:custom_function:categories", "crowdstrike_url_detonation:action_result.data.*.id" ], - "template": "SOAR analyzed URL(s) using Crowdstrike. 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://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n{1}\n{2}\n{3}\n{4}\n", + "template": "SOAR analyzed URL(s) or File using Crowdstrike. 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://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n", "type": "format" }, "errors": {}, @@ -1367,8 +675,8 @@ "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": 20, - "y": 1220 + "x": 460, + "y": 1560 }, "7": { "data": { @@ -1395,10 +703,10 @@ "errors": {}, "id": "7", "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 for url, external_id, url_object in zip(playbook_input_url_values, crowdstrike_url_detonation_result_item_0, normalized_url_detonation_output__url_score_object):\n parsed_url = urlparse(url)\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 \"categories\": url_object['categories']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\": f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{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# 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(playbook_input_url_values, crowdstrike_url_detonation_result_item_0, normalized_url_detonation_output__url_score_object):\n parsed_url = urlparse(url)\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 \"categories\": url_object['categories']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\": f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{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": 20, - "y": 1400 + "x": 460, + "y": 1740 }, "8": { "data": { @@ -1423,9 +731,9 @@ "errors": {}, "id": "8", "type": "code", - "userCode": "\n # Write your custom code here...\n get_vault_id_information__sandbox_type = \"\"\n \n for vault_id_value in playbook_input_vault_id_values:\n success, msg, vault_info = phantom.vault_info(vault_id=vault_id_value, file_name=None, container_id=None, trace=False)\n phantom.debug(\"vault_info: {}, success: {}, msg: {}\".format(vault_info, success, msg))\n\n if success == True:\n detonation_file_name = vault_info[0]['name']\n detonation_mime_type = vault_info[0]['mime_type']\n detonation_meta_data = vault_info[0]['contains']\n \n file_name, file_ext = os.path.splitext(detonation_file_name)\n \n if file_ext == \".exe\" or file_ext == \".dll\" or file_ext == \".sys\" or \"pe file\" in detonation_meta_data or \"dosexec\" in detonation_mime_type:\n sandbox_type = \"windows\"\n \n elif file_ext == \".dmg\":\n sandbox_type = \"mac\"\n \n elif file_ext == \".apk\" and \"application/zip\" in detonation_mime_type:\n sandbox_type = \"android\"\n \n elif file_ext == \"\" and \"x-executable\" in detonation_mime_type:\n sandbox_type = \"linux\"\n \n else:\n sandbox_type = \"windows\"\n \n get_vault_id_information__sandbox_type = sandbox_type\n phantom.debug(\"vaultd_id: {} get_vault_id_information__sandbox_type: {}\".format(vault_id_value, get_vault_id_information__sandbox_type))\n\n", + "userCode": "\n # Write your custom code here...\n get_vault_id_information__sandbox_type = []\n \n for vault_id_value in playbook_input_vault_id_values:\n success, msg, vault_info = phantom.vault_info(vault_id=vault_id_value, file_name=None, container_id=None, trace=False)\n phantom.debug(\"vault_info: {}, success: {}, msg: {}\".format(vault_info, success, msg))\n\n if success == True:\n detonation_file_name = vault_info[0]['name']\n detonation_mime_type = vault_info[0]['mime_type']\n detonation_meta_data = vault_info[0]['contains']\n \n file_name, file_ext = os.path.splitext(detonation_file_name)\n \n if file_ext == \".exe\" or file_ext == \".dll\" or file_ext == \".sys\" or \"pe file\" in detonation_meta_data or \"dosexec\" in detonation_mime_type:\n #get_vault_id_information__sandbox_type.append({vault_id_value: \"Windows 10, 64-bit\"})\n get_vault_id_information__sandbox_type.append({\"value\": vault_id_value, \"sandbox_type\": \"Windows 10, 64-bit\"})\n \n elif file_ext == \".dmg\":\n #get_vault_id_information__sandbox_type.append({vault_id_value: \"Linux Ubuntu 16.04, 64-bit\"})\n get_vault_id_information__sandbox_type.append({\"value\": vault_id_value, \"sandbox_type\": \"Linux Ubuntu 16.04, 64-bit\"})\n \n elif file_ext == \".apk\" and \"application/zip\" in detonation_mime_type:\n #get_vault_id_information__sandbox_type.append({vault_id_value: \"Android (static analysis)\"})\n get_vault_id_information__sandbox_type.append({\"value\": vault_id_value, \"sandbox_type\": \"Android (static analysis)\"})\n \n elif \"x-executable\" in detonation_mime_type:\n #get_vault_id_information__sandbox_type.append({vault_id_value: \"Linux Ubuntu 16.04, 64-bit\"})\n get_vault_id_information__sandbox_type.append({\"value\": vault_id_value, \"sandbox_type\":\"Linux Ubuntu 16.04, 64-bit\"})\n \n else:\n #get_vault_id_information__sandbox_type.append({vault_id_value: \"Windows 10, 64-bit\"})\n get_vault_id_information__sandbox_type.append({\"value\": vault_id_value, \"sandbox_type\": \"Windows 10, 64-bit\"})\n \n\n phantom.debug(\"vaultd_id: {} get_vault_id_information__sandbox_type: {}\".format(vault_id_value, get_vault_id_information__sandbox_type))\n\n", "warnings": {}, - "x": 860, + "x": 140, "y": 320 } }, @@ -1451,10 +759,7 @@ { "contains": [], "datapaths": [ - "build_win_file_output:custom_function:observable_array", - "build_linux_file_output:custom_function:observable_array", - "build_android_file_output:custom_function:observable_array", - "build_mac_file_output:custom_function:observable_array", + "build_file_output:custom_function:observable_array", "build_url_output:custom_function:observable_array" ], "deduplicate": false, @@ -1468,22 +773,18 @@ "schema": "5.0.8", "version": "5.5.0.108488" }, - "create_time": "2023-03-24T14:42:42.435739+00:00", + "create_time": "2023-03-30T09:30:37.656459+00:00", "draft_mode": false, "labels": [ "*" ], "tags": [ - "file_hash", "url", - "D3-IPRA", "domain", - "D3-FHRA", - "D3-DNRA", - "D3-URA", "sandbox", - "D3-IRA", "ip", - "CrowdStrike_OAuth_API" + "CrowdStrike_OAuth_API", + "vault_id", + "D3-DA" ] } \ No newline at end of file diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.png b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.png index b88dfa900c6d95c1219b1aa7c6a3f13679a6f4c5..bbdd2adfa85d6ebb78bd6570aee896fa95158b8a 100644 GIT binary patch literal 76637 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

?gQ|YFf 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⪻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 Date: Thu, 30 Mar 2023 13:37:33 +0200 Subject: [PATCH 2/6] Update CrowdStrike_OAuth_API_Dynamic_Analysis.py --- playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py index b7a4420577..d040205e44 100644 --- a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py @@ -83,7 +83,7 @@ def crowdstrike_url_detonation(action=None, success=None, container=None, result parameters.append({ "url": playbook_input_url_item[0], "limit": 50, - "environment": "Windows 7, 32-bit", + "environment": "Windows 7, 64-bit", }) ################################################################################ @@ -703,4 +703,4 @@ def on_finish(container, summary): phantom.save_playbook_output_data(output=output) - return \ No newline at end of file + return From b150ef43ebfb19c44fdc7ba083d1c10decb8ab9b Mon Sep 17 00:00:00 2001 From: tccontre Date: Fri, 31 Mar 2023 11:02:59 +0200 Subject: [PATCH 3/6] crowdstrike_oauth_api_playbook_v2 --- ...rowdStrike_OAuth_API_Dynamic_Analysis.json | 23 ++++++++++++++----- .../CrowdStrike_OAuth_API_Dynamic_Analysis.py | 12 +++++----- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json index c5e1c21ed7..ac2c192d2c 100644 --- a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json @@ -145,7 +145,7 @@ } ], "globalCustomCode": "\n\n\nimport os", - "hash": "30cab54af0a2520644f9aa5802f9f99c834a2822", + "hash": "5ded383cdce241d6a5ec8b5af885582c1c57b864", "nodes": { "0": { "data": { @@ -161,7 +161,7 @@ "type": "start", "warnings": {}, "x": 250, - "y": -6.394884621840902e-14 + "y": -3.197442310920451e-13 }, "1": { "data": { @@ -175,7 +175,7 @@ "errors": {}, "id": "1", "type": "end", - "userCode": "\n # Write your custom code here...\n format_report_url = phantom.get_format_data(name=\"format_report_url\")\n format_report_file = phantom.get_format_data(name=\"format_report_file\")\n markdown_report_combined_value = phantom.concatenate(format_report_url, format_report_file,)\n output['markdown_report'] = markdown_report_combined_value\n #phantom.debug(output)\n", + "userCode": "\n # Write your custom code here...\n\n", "warnings": {}, "x": 260, "y": 1920 @@ -460,7 +460,7 @@ "functionName": "crowdstrike_url_detonation", "id": "3", "parameters": { - "environment": "Windows 7, 32-bit", + "environment": "Windows 7, 64-bit", "limit": 50, "url": "playbook_input:url" }, @@ -737,7 +737,7 @@ "y": 320 } }, - "notes": "Inputs: url, file_hash\nInteractions: Crowdstrike\nActions: url detonation, , file detonation\nOutputs: report, observables" + "notes": "Inputs: url, vault_id\nInteractions: Crowdstrike\nActions: url detonation, , file detonation\nOutputs: report, observables" }, "input_spec": [ { @@ -766,6 +766,17 @@ "description": "An array of observable dictionaries with value, type, score, score_id, and categories.", "metadata": {}, "name": "observable" + }, + { + "contains": [], + "datapaths": [ + "format_report_url:formatted_data", + "format_report_file:formatted_data" + ], + "deduplicate": false, + "description": "a report with value, score, confidence, and categories.", + "metadata": {}, + "name": "report" } ], "playbook_type": "data", @@ -773,7 +784,7 @@ "schema": "5.0.8", "version": "5.5.0.108488" }, - "create_time": "2023-03-30T09:30:37.656459+00:00", + "create_time": "2023-03-31T08:35:53.571789+00:00", "draft_mode": false, "labels": [ "*" diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py index d040205e44..5117a890bb 100644 --- a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py @@ -678,13 +678,17 @@ def list_demux_filter(action=None, success=None, container=None, results=None, h def on_finish(container, summary): phantom.debug("on_finish() called") + format_report_url = phantom.get_format_data(name="format_report_url") + format_report_file = phantom.get_format_data(name="format_report_file") 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 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 observable_combined_value = phantom.concatenate(build_file_output__observable_array, build_url_output__observable_array) + report_combined_value = phantom.concatenate(format_report_url, format_report_file) output = { "observable": observable_combined_value, + "report": report_combined_value, } ################################################################################ @@ -692,15 +696,11 @@ def on_finish(container, summary): ################################################################################ # Write your custom code here... - format_report_url = phantom.get_format_data(name="format_report_url") - format_report_file = phantom.get_format_data(name="format_report_file") - markdown_report_combined_value = phantom.concatenate(format_report_url, format_report_file,) - output['markdown_report'] = markdown_report_combined_value - #phantom.debug(output) + ################################################################################ ## Custom Code End ################################################################################ phantom.save_playbook_output_data(output=output) - return + return \ No newline at end of file From 5d6aeffbed747fbd20ed12dab978906f8d4c5961 Mon Sep 17 00:00:00 2001 From: tccontre Date: Wed, 5 Apr 2023 19:16:44 +0200 Subject: [PATCH 4/6] crowdstrike_oauth_api_playbook_v2 --- playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json | 10 +++++----- playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json index ac2c192d2c..5d3c1a4e4b 100644 --- a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json @@ -145,7 +145,7 @@ } ], "globalCustomCode": "\n\n\nimport os", - "hash": "5ded383cdce241d6a5ec8b5af885582c1c57b864", + "hash": "635386c268cab57d414e246711ae9469715ee501", "nodes": { "0": { "data": { @@ -161,7 +161,7 @@ "type": "start", "warnings": {}, "x": 250, - "y": -3.197442310920451e-13 + "y": -3.836930773104541e-13 }, "1": { "data": { @@ -385,7 +385,7 @@ "errors": {}, "id": "15", "type": "code", - "userCode": "\n # Write your custom code here...\n build_file_output__observable_array = []\n for _vault_id, external_id, file_object in zip(playbook_input_vault_id_values, filtered_result_0_data___id, normalized_file_detonation_output__file_score_object):\n observable_object = {\n \n \"value\": _vault_id,\n \"type\": \"hash\",\n \"sandbox\": {\n \"score\": file_object['score'],\n \"confidence\": file_object['confidence'],\n \"categories\": file_object['categories']\n },\n \"enrichment\": {\n \"provider\": \"CrowdStrike OAuth API\",\n \"type\": \"file\",\n \n },\n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\":f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{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 _vault_id, external_id, file_object in zip(playbook_input_vault_id_values, filtered_result_0_data___id, normalized_file_detonation_output__file_score_object):\n observable_object = {\n \n \"value\": _vault_id,\n \"type\": \"hash\",\n \"reputation\": {\n \"score\": file_object['score'],\n \"confidence\": file_object['confidence'],\n \"categories\": file_object['categories']\n },\n \"enrichment\": {\n \"provider\": \"CrowdStrike OAuth API\",\n \"type\": \"file\",\n \n },\n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\":f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{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": 0, "y": 1740 @@ -703,7 +703,7 @@ "errors": {}, "id": "7", "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 for url, external_id, url_object in zip(playbook_input_url_values, crowdstrike_url_detonation_result_item_0, normalized_url_detonation_output__url_score_object):\n parsed_url = urlparse(url)\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 \"categories\": url_object['categories']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\": f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{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# 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(playbook_input_url_values, crowdstrike_url_detonation_result_item_0, normalized_url_detonation_output__url_score_object):\n parsed_url = urlparse(url)\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 \"categories\": url_object['categories']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\": f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{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": 460, "y": 1740 @@ -784,7 +784,7 @@ "schema": "5.0.8", "version": "5.5.0.108488" }, - "create_time": "2023-03-31T08:35:53.571789+00:00", + "create_time": "2023-04-05T16:45:24.525655+00:00", "draft_mode": false, "labels": [ "*" diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py index 5117a890bb..e1e5eb3034 100644 --- a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py @@ -289,7 +289,7 @@ def build_url_output(action=None, success=None, container=None, results=None, ha observable_object = { "value": url, "type": "url", - "sandbox": { + "reputation": { "score": url_object['score'], "confidence": url_object['confidence'], "categories": url_object['categories'] @@ -600,7 +600,7 @@ def build_file_output(action=None, success=None, container=None, results=None, h "value": _vault_id, "type": "hash", - "sandbox": { + "reputation": { "score": file_object['score'], "confidence": file_object['confidence'], "categories": file_object['categories'] From 3b4b43ea60f1049e0ee24db3e3ab2e08ee7f07dd Mon Sep 17 00:00:00 2001 From: tccontre Date: Thu, 13 Apr 2023 11:20:59 +0200 Subject: [PATCH 5/6] crowdstrike_oauth_api_playbook_v2 --- ...rowdStrike_OAuth_API_Dynamic_Analysis.json | 89 ++++++++++------- .../CrowdStrike_OAuth_API_Dynamic_Analysis.py | 96 +++++++++++++------ 2 files changed, 124 insertions(+), 61 deletions(-) diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json index 5d3c1a4e4b..be52571722 100644 --- a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json @@ -145,7 +145,7 @@ } ], "globalCustomCode": "\n\n\nimport os", - "hash": "635386c268cab57d414e246711ae9469715ee501", + "hash": "16f2bb4b40e5aff758ffa9b04e1dfabc73242e46", "nodes": { "0": { "data": { @@ -161,7 +161,7 @@ "type": "start", "warnings": {}, "x": 250, - "y": -3.836930773104541e-13 + "y": -5.755396159656812e-13 }, "1": { "data": { @@ -193,7 +193,7 @@ }, "connector": "CrowdStrike OAuth API", "connectorConfigs": [ - "crowdstrike_url_reputation" + "crowdstrike" ], "connectorId": "ae971ba5-3117-444a-8ac5-6ce779f3a232", "connectorVersion": "v1", @@ -219,9 +219,8 @@ "functionName": "file_detonation", "id": "10", "parameters": { - "detail_report": true, "environment": "list_demux:custom_function_result.data.output.sandbox_type", - "is_confidential": false, + "is_confidential": true, "limit": 50, "vault_id": "list_demux:custom_function_result.data.output.value" }, @@ -251,11 +250,7 @@ "id": "10", "type": "action", "userCode": "\n # Write your custom code here...\n", - "warnings": { - "config": [ - "Reconfigure invalid datapath configuration." - ] - }, + "warnings": {}, "x": 0, "y": 1000 }, @@ -325,7 +320,7 @@ "errors": {}, "id": "12", "type": "code", - "userCode": "\n # Write your custom code here...\n normalized_file_detonation_output__file_score_object = []\n normalized_file_detonation_output__scores = []\n normalized_file_detonation_output__categories = []\n normalized_file_detonation_output__confidence = []\n ## normalized NoneType value to avoid enumeration failure\n file_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_vault_id] \n file_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n file_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \n file_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n \n ## get the set() or unique input vault id parameter.\n \n index_file_dict = {}\n set_vault_id_inputs = set(file_detonation_param_list)\n \n for vault_id_input in set_vault_id_inputs:\n ## crowdstrike detonation can have a multiple phase of score, verdict and category during detonation. we will try to get all the unique values of each\n ## object filed we want to include in report. \n \n file_list = []\n score_list = []\n verdict_list = []\n category_list = []\n \n ## getting the index of each detonation phase of the url/file. group the result for each detonation\n vault_id_input_index = [indx for indx, vault_id_val in enumerate(file_detonation_param_list) if vault_id_val == vault_id_input]\n index_file_dict[vault_id_input] = vault_id_input_index\n phantom.debug(\"vault_id: {} vault_id_list: {}\".format(vault_id_input, index_file_dict))\n \n for idx,(_vault_id, _score, _verdict, _category) in enumerate(zip(file_detonation_param_list, file_detonation_verdict_list, file_detonation_threat_score_list, file_detonation_category_list)):\n if _vault_id == vault_id_input and idx in index_file_dict[vault_id_input]:\n file_list.append(_vault_id)\n score_list.append(_score)\n verdict_list.append(_verdict)\n category_list.append(_category)\n \n # Attach final object\n normalized_file_detonation_output__file_score_object.append({'score': list(set(score_list))[0], 'confidence': list(set(verdict_list))[0], 'categories': list(set(category_list))})\n normalized_file_detonation_output__scores.append(list(set(score_list))[0])\n normalized_file_detonation_output__categories.append(list(set(category_list)))\n normalized_file_detonation_output__confidence.append(list(set(verdict_list))[0])\n #phantom.debug(\"normalized_file_detonation_output__file_score_object: {}\".format(normalized_file_detonation_output__file_score_object))\n #phantom.debug(\"normalized_file_detonation_output__scores: {}\".format(normalized_file_detonation_output__scores))\n #phantom.debug(\"normalized_file_detonation_output__categories: {}\".format(normalized_file_detonation_output__categories))\n", + "userCode": "\n # Write your custom code here...\n normalized_file_detonation_output__file_score_object = []\n normalized_file_detonation_output__scores = []\n normalized_file_detonation_output__categories = []\n normalized_file_detonation_output__confidence = []\n ## normalized NoneType value to avoid enumeration failure\n file_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_vault_id] \n file_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n file_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \n file_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n \n score_table = {\n \"0\":\"Unknown\",\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 ## get the set() or unique input vault id parameter.\n \n index_file_dict = {}\n set_vault_id_inputs = set(file_detonation_param_list)\n \n for vault_id_input in set_vault_id_inputs:\n ## crowdstrike detonation can have a multiple phase of score, verdict and category during detonation. we will try to get all the unique values of each\n ## object filed we want to include in report. \n \n file_list = []\n score_list = []\n verdict_list = []\n category_list = []\n \n ## getting the index of each detonation phase of the url/file. group the result for each detonation\n vault_id_input_index = [indx for indx, vault_id_val in enumerate(file_detonation_param_list) if vault_id_val == vault_id_input]\n index_file_dict[vault_id_input] = vault_id_input_index\n #phantom.debug(\"vault_id: {} vault_id_list: {}\".format(vault_id_input, index_file_dict))\n \n for idx,(_vault_id, _score, _verdict, _category) in enumerate(zip(file_detonation_param_list, file_detonation_verdict_list, file_detonation_threat_score_list, file_detonation_category_list)):\n if _vault_id == vault_id_input and idx in index_file_dict[vault_id_input]:\n file_list.append(_vault_id)\n score_list.append(_score)\n verdict_list.append(_verdict)\n category_list.append(_category)\n \n # Attach final object\n score_id = round(list(set(verdict_list))[0] / 10)\n score = score_table[str(score_id)]\n \n normalized_file_detonation_output__file_score_object.append({'score': score, 'score_id': score_id,'confidence': list(set(score_list))[0], 'categories': list(set(category_list))})\n normalized_file_detonation_output__scores.append(score)\n normalized_file_detonation_output__categories.append(list(set(category_list)))\n normalized_file_detonation_output__confidence.append(list(set(score_list))[0])\n #phantom.debug(\"normalized_file_detonation_output__file_score_object: {}\".format(normalized_file_detonation_output__file_score_object))\n #phantom.debug(\"normalized_file_detonation_output__scores: {}\".format(normalized_file_detonation_output__scores))\n #phantom.debug(\"normalized_file_detonation_output__categories: {}\".format(normalized_file_detonation_output__categories))\n", "warnings": {}, "x": 0, "y": 1380 @@ -349,14 +344,18 @@ "normalized_file_detonation_output:custom_function:categories", "filtered-data:windows_sandbox_filter:condition_1:windows_file_detonation:action_result.data.*.id" ], - "template": "SOAR analyzed File(s) using CrowdStrike. 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://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n\n", + "template": "SOAR analyzed File(s) using CrowdStrike. The table below shows a summary of the information gathered.\n\n| File hash | Normalized Score | Confidence |Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} |https://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n\n", "type": "format" }, "errors": {}, "id": "14", "type": "format", "userCode": "\n # Write your custom code here...\n #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"format_report_win_file\"))\n", - "warnings": {}, + "warnings": { + "config": [ + "Reconfigure invalid datapath." + ] + }, "x": 0, "y": 1560 }, @@ -385,8 +384,12 @@ "errors": {}, "id": "15", "type": "code", - "userCode": "\n # Write your custom code here...\n build_file_output__observable_array = []\n for _vault_id, external_id, file_object in zip(playbook_input_vault_id_values, filtered_result_0_data___id, normalized_file_detonation_output__file_score_object):\n observable_object = {\n \n \"value\": _vault_id,\n \"type\": \"hash\",\n \"reputation\": {\n \"score\": file_object['score'],\n \"confidence\": file_object['confidence'],\n \"categories\": file_object['categories']\n },\n \"enrichment\": {\n \"provider\": \"CrowdStrike OAuth API\",\n \"type\": \"file\",\n \n },\n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\":f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{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": {}, + "userCode": "\n # Write your custom code here...\n build_file_output__observable_array = []\n for _vault_id, external_id, file_object in zip(playbook_input_vault_id_values, filtered_result_0_data___id, normalized_file_detonation_output__file_score_object):\n observable_object = {\n \n \"value\": _vault_id,\n \"type\": \"hash\",\n \"reputation\": {\n \"score\": file_object['score'],\n \"score_id\": file_object['score_id'],\n \"confidence\": file_object['confidence'],\n \"categories\": file_object['categories']\n },\n \"enrichment\": {\n \"provider\": \"CrowdStrike OAuth API\",\n \"type\": \"file\",\n \n },\n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\":f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{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": { + "config": [ + "Reconfigure invalid datapath." + ] + }, "x": 0, "y": 1740 }, @@ -444,7 +447,7 @@ "action": "detonate url", "actionType": "generic", "advanced": { - "customName": "crowdstrike url detonation", + "customName": "url detonation", "customNameId": 0, "description": "Queries CrowdStrike for information about the provided URL(s)", "join": [], @@ -452,12 +455,12 @@ }, "connector": "CrowdStrike OAuth API", "connectorConfigs": [ - "crowdstrike_url_reputation" + "crowdstrike" ], "connectorId": "ae971ba5-3117-444a-8ac5-6ce779f3a232", "connectorVersion": "v1", "functionId": 1, - "functionName": "crowdstrike_url_detonation", + "functionName": "url_detonation", "id": "3", "parameters": { "environment": "Windows 7, 64-bit", @@ -484,7 +487,11 @@ "errors": {}, "id": "3", "type": "action", - "warnings": {}, + "warnings": { + "config": [ + "Reconfigure invalid datapath." + ] + }, "x": 460, "y": 1000 }, @@ -493,7 +500,9 @@ "advanced": { "customName": "list demux", "customNameId": 0, - "join": [] + "description": "A utility to create a dictionary contains the vault id and sandbox name type that will be used to distinguish sandboxes to be executed depending on the basic file type checking of vault id.", + "join": [], + "note": "A utility to create a dictionary contains the vault id and sandbox name type that will be used to distinguish sandboxes to be executed depending on the basic file type checking of vault id." }, "customFunction": { "draftMode": false, @@ -557,6 +566,12 @@ "op": "==", "param": "list_demux:custom_function_result.success", "value": "True" + }, + { + "conditionIndex": 0, + "op": "!=", + "param": "list_demux:custom_function_result.message", + "value": "\"Timed out while waiting for the result\"" } ], "conditionIndex": 0, @@ -574,7 +589,7 @@ "type": "filter", "warnings": {}, "x": 60, - "y": 670 + "y": 680 }, "4": { "data": { @@ -591,7 +606,7 @@ { "conditionIndex": 0, "op": "==", - "param": "crowdstrike_url_detonation:action_result.status", + "param": "url_detonation:action_result.status", "value": "success" } ], @@ -643,7 +658,7 @@ "errors": {}, "id": "5", "type": "code", - "userCode": "\n # Write your custom code here...\n #phantom.debug(\"filtered_result_0_parameter_url: {}\".format(filtered_result_0_parameter_url))\n #phantom.debug(\"filtered_result_0_data: {}\".format(filtered_result_0_data)) \n #phantom.debug(\"filtered_result_0_data___verdict: {}\".format(filtered_result_0_data___verdict))\n #phantom.debug(\"filtered_result_0_data___sandbox___threat_score: {}\".format(filtered_result_0_data___sandbox___threat_score))\n #phantom.debug(\"filtered_result_0_data___sandbox___signatures___category: {}\".format(filtered_result_0_data___sandbox___signatures___category))\n #phantom.debug(\"filtered_result_0_summary_verdict: {}\".format(filtered_result_0_summary_verdict))\n #phantom.debug(\"filtered_result_0_data___sandbox___verdict: {}\".format(filtered_result_0_data___sandbox___verdict))\n #phantom.debug(\"crowdstrike_url_detonation_result_data: {}\".format(crowdstrike_url_detonation_result_data)) \n \n ## define variables for easy code debugging\n \n normalized_url_detonation_output__url_score_object = []\n normalized_url_detonation_output__scores = []\n normalized_url_detonation_output__categories = []\n normalized_url_detonation_output__confidence = []\n \n url_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_url] \n url_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n url_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n url_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \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 \n for url_input in set_url_inputs:\n url_list = []\n score_list = []\n verdict_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, _verdict, _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 verdict_list.append(_verdict)\n category_list.append(_category)\n \n # Attach final object\n normalized_url_detonation_output__url_score_object.append({'score': list(set(score_list))[0], 'confidence': list(set(verdict_list))[0], 'categories': list(set(category_list))})\n normalized_url_detonation_output__scores.append(list(set(score_list))[0])\n normalized_url_detonation_output__categories.append(list(set(category_list)))\n normalized_url_detonation_output__confidence.append(list(set(verdict_list))[0])\n #phantom.debug(\"normalized_url_detonation_output__url_score_object: {}\".format(normalized_url_detonation_output__url_score_object))\n #phantom.debug(\"normalized_url_detonation_output__scores: {}\".format(normalized_url_detonation_output__scores))\n #phantom.debug(\"normalized_url_detonation_output__categories: {}\".format(normalized_url_detonation_output__categories))\n \n \n", + "userCode": "\n # Write your custom code here...\n #phantom.debug(\"filtered_result_0_parameter_url: {}\".format(filtered_result_0_parameter_url))\n #phantom.debug(\"filtered_result_0_data: {}\".format(filtered_result_0_data)) \n #phantom.debug(\"filtered_result_0_data___verdict: {}\".format(filtered_result_0_data___verdict))\n #phantom.debug(\"filtered_result_0_data___sandbox___threat_score: {}\".format(filtered_result_0_data___sandbox___threat_score))\n #phantom.debug(\"filtered_result_0_data___sandbox___signatures___category: {}\".format(filtered_result_0_data___sandbox___signatures___category))\n #phantom.debug(\"filtered_result_0_summary_verdict: {}\".format(filtered_result_0_summary_verdict))\n #phantom.debug(\"filtered_result_0_data___sandbox___verdict: {}\".format(filtered_result_0_data___sandbox___verdict))\n #phantom.debug(\"crowdstrike_url_detonation_result_data: {}\".format(crowdstrike_url_detonation_result_data)) \n \n ## define variables for easy code debugging\n \n normalized_url_detonation_output__url_score_object = []\n normalized_url_detonation_output__scores = []\n normalized_url_detonation_output__categories = []\n normalized_url_detonation_output__confidence = []\n \n url_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_url] \n url_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n url_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n url_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \n\n score_table = {\n \"0\":\"Unknown\",\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 ## get the set() or unique input url parameter.\n \n index_url_dict = {}\n set_url_inputs = set(url_detonation_param_list)\n \n \n for url_input in set_url_inputs:\n url_list = []\n score_list = []\n verdict_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, _verdict, _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 verdict_list.append(_verdict)\n category_list.append(_category)\n \n score_id = round(list(set(verdict_list))[0] / 10)\n score = score_table[str(score_id)]\n \n # Attach final object\n normalized_url_detonation_output__url_score_object.append({'score': score, 'score_id': score_id,'confidence': list(set(score_list))[0], 'categories': list(set(category_list))})\n normalized_url_detonation_output__scores.append(score)\n normalized_url_detonation_output__categories.append(list(set(category_list)))\n normalized_url_detonation_output__confidence.append(list(set(score_list))[0])\n #phantom.debug(\"normalized_url_detonation_output__url_score_object: {}\".format(normalized_url_detonation_output__url_score_object))\n #phantom.debug(\"normalized_url_detonation_output__scores: {}\".format(normalized_url_detonation_output__scores))\n #phantom.debug(\"normalized_url_detonation_output__categories: {}\".format(normalized_url_detonation_output__categories))\n \n \n", "warnings": {}, "x": 460, "y": 1380 @@ -665,16 +680,20 @@ "normalized_url_detonation_output:custom_function:scores", "normalized_url_detonation_output:custom_function:confidence", "normalized_url_detonation_output:custom_function:categories", - "crowdstrike_url_detonation:action_result.data.*.id" + "url_detonation:action_result.data.*.id" ], - "template": "SOAR analyzed URL(s) or File using Crowdstrike. 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://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n", + "template": "SOAR analyzed URL(s) or File using Crowdstrike. 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} |https://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\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=\"format_report_url\"))\n", - "warnings": {}, + "warnings": { + "config": [ + "Reconfigure invalid datapath." + ] + }, "x": 460, "y": 1560 }, @@ -692,7 +711,7 @@ "id": "7", "inputParameters": [ "playbook_input:url", - "crowdstrike_url_detonation:action_result.data.*.id", + "url_detonation:action_result.data.*.id", "normalized_url_detonation_output:custom_function:url_score_object" ], "outputVariables": [ @@ -703,8 +722,12 @@ "errors": {}, "id": "7", "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 for url, external_id, url_object in zip(playbook_input_url_values, crowdstrike_url_detonation_result_item_0, normalized_url_detonation_output__url_score_object):\n parsed_url = urlparse(url)\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 \"categories\": url_object['categories']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\": f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{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": {}, + "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 for url, external_id, url_object in zip(playbook_input_url_values, url_detonation_result_item_0, normalized_url_detonation_output__url_score_object):\n parsed_url = urlparse(url)\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 \"score_id\": url_object['score_id'],\n \"confidence\": url_object['confidence'],\n \"categories\": url_object['categories']\n },\n \"attributes\": {\n \"hostname\": parsed_url.hostname,\n \"scheme\": parsed_url.scheme\n },\n \n \"source\": \"CrowdStrike OAuth API\",\n \"source_link\": f\"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{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": { + "config": [ + "Reconfigure invalid datapath." + ] + }, "x": 460, "y": 1740 }, @@ -781,19 +804,17 @@ ], "playbook_type": "data", "python_version": "3", - "schema": "5.0.8", - "version": "5.5.0.108488" + "schema": "5.0.9", + "version": "6.0.0.114895" }, - "create_time": "2023-04-05T16:45:24.525655+00:00", + "create_time": "2023-04-13T09:14:02.480922+00:00", "draft_mode": false, "labels": [ "*" ], "tags": [ "url", - "domain", "sandbox", - "ip", "CrowdStrike_OAuth_API", "vault_id", "D3-DA" diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py index e1e5eb3034..fadc82802c 100644 --- a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py @@ -46,7 +46,7 @@ def input_filter(action=None, success=None, container=None, results=None, handle # call connected blocks if filtered artifacts or results if matched_artifacts_1 or matched_results_1: - crowdstrike_url_detonation(action=action, success=success, container=container, results=results, handle=handle, filtered_artifacts=matched_artifacts_1, filtered_results=matched_results_1) + url_detonation(action=action, success=success, container=container, results=results, handle=handle, filtered_artifacts=matched_artifacts_1, filtered_results=matched_results_1) # collect filtered artifact ids and results for 'if' condition 2 matched_artifacts_2, matched_results_2 = phantom.condition( @@ -64,8 +64,8 @@ def input_filter(action=None, success=None, container=None, results=None, handle @phantom.playbook_block() -def crowdstrike_url_detonation(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): - phantom.debug("crowdstrike_url_detonation() called") +def url_detonation(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("url_detonation() called") # phantom.debug('Action: {0} {1}'.format(action['name'], ('SUCCEEDED' if success else 'FAILED'))) @@ -77,12 +77,12 @@ def crowdstrike_url_detonation(action=None, success=None, container=None, result parameters = [] - # build parameters list for 'crowdstrike_url_detonation' call + # build parameters list for 'url_detonation' call for playbook_input_url_item in playbook_input_url: if playbook_input_url_item[0] is not None: parameters.append({ - "url": playbook_input_url_item[0], "limit": 50, + "url": playbook_input_url_item[0], "environment": "Windows 7, 64-bit", }) @@ -96,7 +96,7 @@ def crowdstrike_url_detonation(action=None, success=None, container=None, result ## Custom Code End ################################################################################ - phantom.act("detonate url", parameters=parameters, name="crowdstrike_url_detonation", assets=["crowdstrike_url_reputation"], callback=url_detonation_filter) + phantom.act("detonate url", parameters=parameters, name="url_detonation", assets=["crowdstrike"], callback=url_detonation_filter) return @@ -113,7 +113,7 @@ def url_detonation_filter(action=None, success=None, container=None, results=Non matched_artifacts_1, matched_results_1 = phantom.condition( container=container, conditions=[ - ["crowdstrike_url_detonation:action_result.status", "==", "success"] + ["url_detonation:action_result.status", "==", "success"] ], name="url_detonation_filter:condition_1") @@ -171,7 +171,20 @@ def normalized_url_detonation_output(action=None, success=None, container=None, url_detonation_verdict_list = [(i or "") for i in filtered_result_0_data___sandbox___verdict] url_detonation_threat_score_list = [(i or "") for i in filtered_result_0_data___sandbox___threat_score] url_detonation_category_list = [(i or "") for i in filtered_result_0_data___sandbox___signatures___category] - + + score_table = { + "0":"Unknown", + "1":"Very_Safe", + "2":"Safe", + "3":"Probably_Safe", + "4":"Leans_Safe", + "5":"May_not_be_Safe", + "6":"Exercise_Caution", + "7":"Suspicious_or_Risky", + "8":"Possibly_Malicious", + "9":"Probably_Malicious", + "10":"Malicious" + } ## get the set() or unique input url parameter. index_url_dict = {} @@ -194,12 +207,15 @@ def normalized_url_detonation_output(action=None, success=None, container=None, score_list.append(_score) verdict_list.append(_verdict) category_list.append(_category) - + + score_id = round(list(set(verdict_list))[0] / 10) + score = score_table[str(score_id)] + # Attach final object - normalized_url_detonation_output__url_score_object.append({'score': list(set(score_list))[0], 'confidence': list(set(verdict_list))[0], 'categories': list(set(category_list))}) - normalized_url_detonation_output__scores.append(list(set(score_list))[0]) + normalized_url_detonation_output__url_score_object.append({'score': score, 'score_id': score_id,'confidence': list(set(score_list))[0], 'categories': list(set(category_list))}) + normalized_url_detonation_output__scores.append(score) normalized_url_detonation_output__categories.append(list(set(category_list))) - normalized_url_detonation_output__confidence.append(list(set(verdict_list))[0]) + normalized_url_detonation_output__confidence.append(list(set(score_list))[0]) #phantom.debug("normalized_url_detonation_output__url_score_object: {}".format(normalized_url_detonation_output__url_score_object)) #phantom.debug("normalized_url_detonation_output__scores: {}".format(normalized_url_detonation_output__scores)) #phantom.debug("normalized_url_detonation_output__categories: {}".format(normalized_url_detonation_output__categories)) @@ -227,7 +243,7 @@ def format_report_url(action=None, success=None, container=None, results=None, h # Format a summary table with the information gathered from the playbook. ################################################################################ - template = """SOAR analyzed URL(s) or File using Crowdstrike. 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://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n""" + template = """SOAR analyzed URL(s) or File using Crowdstrike. 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} |https://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n""" # parameter list for template variable replacement parameters = [ @@ -235,7 +251,7 @@ def format_report_url(action=None, success=None, container=None, results=None, h "normalized_url_detonation_output:custom_function:scores", "normalized_url_detonation_output:custom_function:confidence", "normalized_url_detonation_output:custom_function:categories", - "crowdstrike_url_detonation:action_result.data.*.id" + "url_detonation:action_result.data.*.id" ] ################################################################################ @@ -265,11 +281,11 @@ def build_url_output(action=None, success=None, container=None, results=None, ha ################################################################################ playbook_input_url = phantom.collect2(container=container, datapath=["playbook_input:url"]) - crowdstrike_url_detonation_result_data = phantom.collect2(container=container, datapath=["crowdstrike_url_detonation:action_result.data.*.id"], action_results=results) + url_detonation_result_data = phantom.collect2(container=container, datapath=["url_detonation:action_result.data.*.id"], action_results=results) normalized_url_detonation_output__url_score_object = json.loads(_ if (_ := phantom.get_run_data(key="normalized_url_detonation_output:url_score_object")) != "" else "null") # pylint: disable=used-before-assignment playbook_input_url_values = [item[0] for item in playbook_input_url] - crowdstrike_url_detonation_result_item_0 = [item[0] for item in crowdstrike_url_detonation_result_data] + url_detonation_result_item_0 = [item[0] for item in url_detonation_result_data] build_url_output__observable_array = None @@ -283,7 +299,7 @@ def build_url_output(action=None, success=None, container=None, results=None, ha build_url_output__observable_array = [] # Build URL - for url, external_id, url_object in zip(playbook_input_url_values, crowdstrike_url_detonation_result_item_0, normalized_url_detonation_output__url_score_object): + for url, external_id, url_object in zip(playbook_input_url_values, url_detonation_result_item_0, normalized_url_detonation_output__url_score_object): parsed_url = urlparse(url) phantom.debug("parsed_url: {}, url_object: {}".format(parsed_url, url_object)) observable_object = { @@ -291,6 +307,7 @@ def build_url_output(action=None, success=None, container=None, results=None, ha "type": "url", "reputation": { "score": url_object['score'], + "score_id": url_object['score_id'], "confidence": url_object['confidence'], "categories": url_object['categories'] }, @@ -407,10 +424,9 @@ def file_detonation(action=None, success=None, container=None, results=None, han if list_demux__result_item[0] is not None and list_demux__result_item[1] is not None: parameters.append({ "limit": 50, + "is_confidential": True, "vault_id": list_demux__result_item[0], "environment": list_demux__result_item[1], - "detail_report": True, - "is_confidential": False, }) ################################################################################ @@ -422,7 +438,7 @@ def file_detonation(action=None, success=None, container=None, results=None, han ## Custom Code End ################################################################################ - phantom.act("detonate file", parameters=parameters, name="file_detonation", assets=["crowdstrike_url_reputation"], callback=sandbox_filter) + phantom.act("detonate file", parameters=parameters, name="file_detonation", assets=["crowdstrike"], callback=sandbox_filter) return @@ -487,6 +503,20 @@ def normalized_file_detonation_output(action=None, success=None, container=None, file_detonation_category_list = [(i or "") for i in filtered_result_0_data___sandbox___signatures___category] file_detonation_verdict_list = [(i or "") for i in filtered_result_0_data___sandbox___verdict] + score_table = { + "0":"Unknown", + "1":"Very_Safe", + "2":"Safe", + "3":"Probably_Safe", + "4":"Leans_Safe", + "5":"May_not_be_Safe", + "6":"Exercise_Caution", + "7":"Suspicious_or_Risky", + "8":"Possibly_Malicious", + "9":"Probably_Malicious", + "10":"Malicious" + } + ## get the set() or unique input vault id parameter. index_file_dict = {} @@ -504,7 +534,7 @@ def normalized_file_detonation_output(action=None, success=None, container=None, ## getting the index of each detonation phase of the url/file. group the result for each detonation vault_id_input_index = [indx for indx, vault_id_val in enumerate(file_detonation_param_list) if vault_id_val == vault_id_input] index_file_dict[vault_id_input] = vault_id_input_index - phantom.debug("vault_id: {} vault_id_list: {}".format(vault_id_input, index_file_dict)) + #phantom.debug("vault_id: {} vault_id_list: {}".format(vault_id_input, index_file_dict)) for idx,(_vault_id, _score, _verdict, _category) in enumerate(zip(file_detonation_param_list, file_detonation_verdict_list, file_detonation_threat_score_list, file_detonation_category_list)): if _vault_id == vault_id_input and idx in index_file_dict[vault_id_input]: @@ -512,12 +542,15 @@ def normalized_file_detonation_output(action=None, success=None, container=None, score_list.append(_score) verdict_list.append(_verdict) category_list.append(_category) - + # Attach final object - normalized_file_detonation_output__file_score_object.append({'score': list(set(score_list))[0], 'confidence': list(set(verdict_list))[0], 'categories': list(set(category_list))}) - normalized_file_detonation_output__scores.append(list(set(score_list))[0]) + score_id = round(list(set(verdict_list))[0] / 10) + score = score_table[str(score_id)] + + normalized_file_detonation_output__file_score_object.append({'score': score, 'score_id': score_id,'confidence': list(set(score_list))[0], 'categories': list(set(category_list))}) + normalized_file_detonation_output__scores.append(score) normalized_file_detonation_output__categories.append(list(set(category_list))) - normalized_file_detonation_output__confidence.append(list(set(verdict_list))[0]) + normalized_file_detonation_output__confidence.append(list(set(score_list))[0]) #phantom.debug("normalized_file_detonation_output__file_score_object: {}".format(normalized_file_detonation_output__file_score_object)) #phantom.debug("normalized_file_detonation_output__scores: {}".format(normalized_file_detonation_output__scores)) #phantom.debug("normalized_file_detonation_output__categories: {}".format(normalized_file_detonation_output__categories)) @@ -543,7 +576,7 @@ def format_report_file(action=None, success=None, container=None, results=None, # Format a summary table with the information gathered from the playbook. ################################################################################ - template = """SOAR analyzed File(s) using CrowdStrike. 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://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n\n""" + template = """SOAR analyzed File(s) using CrowdStrike. The table below shows a summary of the information gathered.\n\n| File hash | Normalized Score | Confidence |Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} |https://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n\n""" # parameter list for template variable replacement parameters = [ @@ -602,6 +635,7 @@ def build_file_output(action=None, success=None, container=None, results=None, h "type": "hash", "reputation": { "score": file_object['score'], + "score_id": file_object['score_id'], "confidence": file_object['confidence'], "categories": file_object['categories'] }, @@ -628,6 +662,12 @@ def build_file_output(action=None, success=None, container=None, results=None, h def list_demux(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): phantom.debug("list_demux() called") + ################################################################################ + # A utility to create a dictionary contains the vault id and sandbox name type + # that will be used to distinguish sandboxes to be executed depending on the basic + # file type checking of vault id. + ################################################################################ + get_vault_id_information__sandbox_type = json.loads(_ if (_ := phantom.get_run_data(key="get_vault_id_information:sandbox_type")) != "" else "null") # pylint: disable=used-before-assignment parameters = [] @@ -662,8 +702,10 @@ def list_demux_filter(action=None, success=None, container=None, results=None, h # collect filtered artifact ids and results for 'if' condition 1 matched_artifacts_1, matched_results_1 = phantom.condition( container=container, + logical_operator="and", conditions=[ - ["list_demux:custom_function_result.success", "==", True] + ["list_demux:custom_function_result.success", "==", True], + ["list_demux:custom_function_result.message", "!=", "\"Timed out while waiting for the result\""] ], name="list_demux_filter:condition_1") From 34e5a9662f85397cf6582957f42cfd887f4d0e22 Mon Sep 17 00:00:00 2001 From: tccontre Date: Thu, 13 Apr 2023 16:38:22 +0200 Subject: [PATCH 6/6] crowdstrike_oauth_api_playbook_v2 --- ...rowdStrike_OAuth_API_Dynamic_Analysis.json | 22 ++++++++--------- .../CrowdStrike_OAuth_API_Dynamic_Analysis.py | 24 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json index be52571722..7e276adf27 100644 --- a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json @@ -145,7 +145,7 @@ } ], "globalCustomCode": "\n\n\nimport os", - "hash": "16f2bb4b40e5aff758ffa9b04e1dfabc73242e46", + "hash": "f4a238d5963ad546bde73d3ec8b4283699f52a43", "nodes": { "0": { "data": { @@ -161,7 +161,7 @@ "type": "start", "warnings": {}, "x": 250, - "y": -5.755396159656812e-13 + "y": -7.034373084024992e-13 }, "1": { "data": { @@ -313,14 +313,14 @@ "file_score_object", "scores", "categories", - "confidence" + "score_id" ], "type": "code" }, "errors": {}, "id": "12", "type": "code", - "userCode": "\n # Write your custom code here...\n normalized_file_detonation_output__file_score_object = []\n normalized_file_detonation_output__scores = []\n normalized_file_detonation_output__categories = []\n normalized_file_detonation_output__confidence = []\n ## normalized NoneType value to avoid enumeration failure\n file_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_vault_id] \n file_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n file_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \n file_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n \n score_table = {\n \"0\":\"Unknown\",\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 ## get the set() or unique input vault id parameter.\n \n index_file_dict = {}\n set_vault_id_inputs = set(file_detonation_param_list)\n \n for vault_id_input in set_vault_id_inputs:\n ## crowdstrike detonation can have a multiple phase of score, verdict and category during detonation. we will try to get all the unique values of each\n ## object filed we want to include in report. \n \n file_list = []\n score_list = []\n verdict_list = []\n category_list = []\n \n ## getting the index of each detonation phase of the url/file. group the result for each detonation\n vault_id_input_index = [indx for indx, vault_id_val in enumerate(file_detonation_param_list) if vault_id_val == vault_id_input]\n index_file_dict[vault_id_input] = vault_id_input_index\n #phantom.debug(\"vault_id: {} vault_id_list: {}\".format(vault_id_input, index_file_dict))\n \n for idx,(_vault_id, _score, _verdict, _category) in enumerate(zip(file_detonation_param_list, file_detonation_verdict_list, file_detonation_threat_score_list, file_detonation_category_list)):\n if _vault_id == vault_id_input and idx in index_file_dict[vault_id_input]:\n file_list.append(_vault_id)\n score_list.append(_score)\n verdict_list.append(_verdict)\n category_list.append(_category)\n \n # Attach final object\n score_id = round(list(set(verdict_list))[0] / 10)\n score = score_table[str(score_id)]\n \n normalized_file_detonation_output__file_score_object.append({'score': score, 'score_id': score_id,'confidence': list(set(score_list))[0], 'categories': list(set(category_list))})\n normalized_file_detonation_output__scores.append(score)\n normalized_file_detonation_output__categories.append(list(set(category_list)))\n normalized_file_detonation_output__confidence.append(list(set(score_list))[0])\n #phantom.debug(\"normalized_file_detonation_output__file_score_object: {}\".format(normalized_file_detonation_output__file_score_object))\n #phantom.debug(\"normalized_file_detonation_output__scores: {}\".format(normalized_file_detonation_output__scores))\n #phantom.debug(\"normalized_file_detonation_output__categories: {}\".format(normalized_file_detonation_output__categories))\n", + "userCode": "\n # Write your custom code here...\n normalized_file_detonation_output__file_score_object = []\n normalized_file_detonation_output__scores = []\n normalized_file_detonation_output__categories = []\n normalized_file_detonation_output__score_id = []\n ## normalized NoneType value to avoid enumeration failure\n file_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_vault_id] \n file_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n file_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \n file_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n \n score_table = {\n \"0\":\"Unknown\",\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 ## get the set() or unique input vault id parameter.\n \n index_file_dict = {}\n set_vault_id_inputs = set(file_detonation_param_list)\n \n for vault_id_input in set_vault_id_inputs:\n ## crowdstrike detonation can have a multiple phase of score, verdict and category during detonation. we will try to get all the unique values of each\n ## object filed we want to include in report. \n \n file_list = []\n score_list = []\n verdict_list = []\n category_list = []\n \n ## getting the index of each detonation phase of the url/file. group the result for each detonation\n vault_id_input_index = [indx for indx, vault_id_val in enumerate(file_detonation_param_list) if vault_id_val == vault_id_input]\n index_file_dict[vault_id_input] = vault_id_input_index\n #phantom.debug(\"vault_id: {} vault_id_list: {}\".format(vault_id_input, index_file_dict))\n \n for idx,(_vault_id, _score, _verdict, _category) in enumerate(zip(file_detonation_param_list, file_detonation_verdict_list, file_detonation_threat_score_list, file_detonation_category_list)):\n if _vault_id == vault_id_input and idx in index_file_dict[vault_id_input]:\n file_list.append(_vault_id)\n score_list.append(_score)\n verdict_list.append(_verdict)\n category_list.append(_category)\n \n # Attach final object\n score_id = round(list(set(verdict_list))[0] / 10)\n score = score_table[str(score_id)]\n \n normalized_file_detonation_output__file_score_object.append({'score': score, 'score_id': score_id,'confidence': list(set(score_list))[0], 'categories': list(set(category_list))})\n normalized_file_detonation_output__scores.append(score)\n normalized_file_detonation_output__categories.append(list(set(category_list)))\n normalized_file_detonation_output__score_id.append(score_id)\n #phantom.debug(\"normalized_file_detonation_output__file_score_object: {}\".format(normalized_file_detonation_output__file_score_object))\n #phantom.debug(\"normalized_file_detonation_output__scores: {}\".format(normalized_file_detonation_output__scores))\n #phantom.debug(\"normalized_file_detonation_output__categories: {}\".format(normalized_file_detonation_output__categories))\n", "warnings": {}, "x": 0, "y": 1380 @@ -340,11 +340,11 @@ "parameters": [ "filtered-data:sandbox_filter:condition_1:file_detonation:action_result.parameter.vault_id", "normalized_file_detonation_output:custom_function:scores", - "normalized_file_detonation_output:custom_function:confidence", + "normalized_file_detonation_output:custom_function:score_id", "normalized_file_detonation_output:custom_function:categories", "filtered-data:windows_sandbox_filter:condition_1:windows_file_detonation:action_result.data.*.id" ], - "template": "SOAR analyzed File(s) using CrowdStrike. The table below shows a summary of the information gathered.\n\n| File hash | Normalized Score | Confidence |Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} |https://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n\n", + "template": "SOAR analyzed File(s) using CrowdStrike. The table below shows a summary of the information gathered.\n\n| vault_id | Normalized Score | score id |Categories | Report Link | Source |\n| --- | --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} |https://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n\n", "type": "format" }, "errors": {}, @@ -651,14 +651,14 @@ "url_score_object", "scores", "categories", - "confidence" + "score_id" ], "type": "code" }, "errors": {}, "id": "5", "type": "code", - "userCode": "\n # Write your custom code here...\n #phantom.debug(\"filtered_result_0_parameter_url: {}\".format(filtered_result_0_parameter_url))\n #phantom.debug(\"filtered_result_0_data: {}\".format(filtered_result_0_data)) \n #phantom.debug(\"filtered_result_0_data___verdict: {}\".format(filtered_result_0_data___verdict))\n #phantom.debug(\"filtered_result_0_data___sandbox___threat_score: {}\".format(filtered_result_0_data___sandbox___threat_score))\n #phantom.debug(\"filtered_result_0_data___sandbox___signatures___category: {}\".format(filtered_result_0_data___sandbox___signatures___category))\n #phantom.debug(\"filtered_result_0_summary_verdict: {}\".format(filtered_result_0_summary_verdict))\n #phantom.debug(\"filtered_result_0_data___sandbox___verdict: {}\".format(filtered_result_0_data___sandbox___verdict))\n #phantom.debug(\"crowdstrike_url_detonation_result_data: {}\".format(crowdstrike_url_detonation_result_data)) \n \n ## define variables for easy code debugging\n \n normalized_url_detonation_output__url_score_object = []\n normalized_url_detonation_output__scores = []\n normalized_url_detonation_output__categories = []\n normalized_url_detonation_output__confidence = []\n \n url_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_url] \n url_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n url_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n url_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \n\n score_table = {\n \"0\":\"Unknown\",\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 ## get the set() or unique input url parameter.\n \n index_url_dict = {}\n set_url_inputs = set(url_detonation_param_list)\n \n \n for url_input in set_url_inputs:\n url_list = []\n score_list = []\n verdict_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, _verdict, _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 verdict_list.append(_verdict)\n category_list.append(_category)\n \n score_id = round(list(set(verdict_list))[0] / 10)\n score = score_table[str(score_id)]\n \n # Attach final object\n normalized_url_detonation_output__url_score_object.append({'score': score, 'score_id': score_id,'confidence': list(set(score_list))[0], 'categories': list(set(category_list))})\n normalized_url_detonation_output__scores.append(score)\n normalized_url_detonation_output__categories.append(list(set(category_list)))\n normalized_url_detonation_output__confidence.append(list(set(score_list))[0])\n #phantom.debug(\"normalized_url_detonation_output__url_score_object: {}\".format(normalized_url_detonation_output__url_score_object))\n #phantom.debug(\"normalized_url_detonation_output__scores: {}\".format(normalized_url_detonation_output__scores))\n #phantom.debug(\"normalized_url_detonation_output__categories: {}\".format(normalized_url_detonation_output__categories))\n \n \n", + "userCode": "\n # Write your custom code here...\n #phantom.debug(\"filtered_result_0_parameter_url: {}\".format(filtered_result_0_parameter_url))\n #phantom.debug(\"filtered_result_0_data: {}\".format(filtered_result_0_data)) \n #phantom.debug(\"filtered_result_0_data___verdict: {}\".format(filtered_result_0_data___verdict))\n #phantom.debug(\"filtered_result_0_data___sandbox___threat_score: {}\".format(filtered_result_0_data___sandbox___threat_score))\n #phantom.debug(\"filtered_result_0_data___sandbox___signatures___category: {}\".format(filtered_result_0_data___sandbox___signatures___category))\n #phantom.debug(\"filtered_result_0_summary_verdict: {}\".format(filtered_result_0_summary_verdict))\n #phantom.debug(\"filtered_result_0_data___sandbox___verdict: {}\".format(filtered_result_0_data___sandbox___verdict))\n #phantom.debug(\"crowdstrike_url_detonation_result_data: {}\".format(crowdstrike_url_detonation_result_data)) \n \n ## define variables for easy code debugging\n \n normalized_url_detonation_output__url_score_object = []\n normalized_url_detonation_output__scores = []\n normalized_url_detonation_output__categories = []\n normalized_url_detonation_output__score_id = []\n \n url_detonation_param_list = [(i or \"\") for i in filtered_result_0_parameter_url] \n url_detonation_verdict_list = [(i or \"\") for i in filtered_result_0_data___sandbox___verdict] \n url_detonation_threat_score_list = [(i or \"\") for i in filtered_result_0_data___sandbox___threat_score] \n url_detonation_category_list = [(i or \"\") for i in filtered_result_0_data___sandbox___signatures___category] \n\n score_table = {\n \"0\":\"Unknown\",\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 ## get the set() or unique input url parameter.\n \n index_url_dict = {}\n set_url_inputs = set(url_detonation_param_list)\n \n \n for url_input in set_url_inputs:\n url_list = []\n score_list = []\n verdict_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, _verdict, _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 verdict_list.append(_verdict)\n category_list.append(_category)\n \n score_id = round(list(set(verdict_list))[0] / 10)\n score = score_table[str(score_id)]\n \n # Attach final object\n normalized_url_detonation_output__url_score_object.append({'score': score, 'score_id': score_id,'confidence': list(set(score_list))[0], 'categories': list(set(category_list))})\n normalized_url_detonation_output__scores.append(score)\n normalized_url_detonation_output__categories.append(list(set(category_list)))\n normalized_url_detonation_output__score_id.append(score_id)\n #phantom.debug(\"normalized_url_detonation_output__url_score_object: {}\".format(normalized_url_detonation_output__url_score_object))\n #phantom.debug(\"normalized_url_detonation_output__scores: {}\".format(normalized_url_detonation_output__scores))\n #phantom.debug(\"normalized_url_detonation_output__categories: {}\".format(normalized_url_detonation_output__categories))\n \n \n", "warnings": {}, "x": 460, "y": 1380 @@ -678,11 +678,11 @@ "parameters": [ "playbook_input:url", "normalized_url_detonation_output:custom_function:scores", - "normalized_url_detonation_output:custom_function:confidence", + "normalized_url_detonation_output:custom_function:score_id", "normalized_url_detonation_output:custom_function:categories", "url_detonation:action_result.data.*.id" ], - "template": "SOAR analyzed URL(s) or File using Crowdstrike. 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} |https://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n", + "template": "SOAR analyzed URL(s) or File using Crowdstrike. The table below shows a summary of the information gathered.\n\n| URL | Normalized Score | score id |Categories | Report Link | Source |\n| --- | --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} |https://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n", "type": "format" }, "errors": {}, @@ -807,7 +807,7 @@ "schema": "5.0.9", "version": "6.0.0.114895" }, - "create_time": "2023-04-13T09:14:02.480922+00:00", + "create_time": "2023-04-13T14:17:13.149883+00:00", "draft_mode": false, "labels": [ "*" diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py index fadc82802c..38ce0c0163 100644 --- a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py @@ -144,7 +144,7 @@ def normalized_url_detonation_output(action=None, success=None, container=None, normalized_url_detonation_output__url_score_object = None normalized_url_detonation_output__scores = None normalized_url_detonation_output__categories = None - normalized_url_detonation_output__confidence = None + normalized_url_detonation_output__score_id = None ################################################################################ ## Custom Code Start @@ -165,7 +165,7 @@ def normalized_url_detonation_output(action=None, success=None, container=None, normalized_url_detonation_output__url_score_object = [] normalized_url_detonation_output__scores = [] normalized_url_detonation_output__categories = [] - normalized_url_detonation_output__confidence = [] + normalized_url_detonation_output__score_id = [] url_detonation_param_list = [(i or "") for i in filtered_result_0_parameter_url] url_detonation_verdict_list = [(i or "") for i in filtered_result_0_data___sandbox___verdict] @@ -215,7 +215,7 @@ def normalized_url_detonation_output(action=None, success=None, container=None, normalized_url_detonation_output__url_score_object.append({'score': score, 'score_id': score_id,'confidence': list(set(score_list))[0], 'categories': list(set(category_list))}) normalized_url_detonation_output__scores.append(score) normalized_url_detonation_output__categories.append(list(set(category_list))) - normalized_url_detonation_output__confidence.append(list(set(score_list))[0]) + normalized_url_detonation_output__score_id.append(score_id) #phantom.debug("normalized_url_detonation_output__url_score_object: {}".format(normalized_url_detonation_output__url_score_object)) #phantom.debug("normalized_url_detonation_output__scores: {}".format(normalized_url_detonation_output__scores)) #phantom.debug("normalized_url_detonation_output__categories: {}".format(normalized_url_detonation_output__categories)) @@ -228,7 +228,7 @@ def normalized_url_detonation_output(action=None, success=None, container=None, phantom.save_run_data(key="normalized_url_detonation_output:url_score_object", value=json.dumps(normalized_url_detonation_output__url_score_object)) phantom.save_run_data(key="normalized_url_detonation_output:scores", value=json.dumps(normalized_url_detonation_output__scores)) phantom.save_run_data(key="normalized_url_detonation_output:categories", value=json.dumps(normalized_url_detonation_output__categories)) - phantom.save_run_data(key="normalized_url_detonation_output:confidence", value=json.dumps(normalized_url_detonation_output__confidence)) + phantom.save_run_data(key="normalized_url_detonation_output:score_id", value=json.dumps(normalized_url_detonation_output__score_id)) format_report_url(container=container) @@ -243,13 +243,13 @@ def format_report_url(action=None, success=None, container=None, results=None, h # Format a summary table with the information gathered from the playbook. ################################################################################ - template = """SOAR analyzed URL(s) or File using Crowdstrike. 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} |https://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n""" + template = """SOAR analyzed URL(s) or File using Crowdstrike. The table below shows a summary of the information gathered.\n\n| URL | Normalized Score | score id |Categories | Report Link | Source |\n| --- | --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} |https://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n""" # parameter list for template variable replacement parameters = [ "playbook_input:url", "normalized_url_detonation_output:custom_function:scores", - "normalized_url_detonation_output:custom_function:confidence", + "normalized_url_detonation_output:custom_function:score_id", "normalized_url_detonation_output:custom_function:categories", "url_detonation:action_result.data.*.id" ] @@ -486,7 +486,7 @@ def normalized_file_detonation_output(action=None, success=None, container=None, normalized_file_detonation_output__file_score_object = None normalized_file_detonation_output__scores = None normalized_file_detonation_output__categories = None - normalized_file_detonation_output__confidence = None + normalized_file_detonation_output__score_id = None ################################################################################ ## Custom Code Start @@ -496,7 +496,7 @@ def normalized_file_detonation_output(action=None, success=None, container=None, normalized_file_detonation_output__file_score_object = [] normalized_file_detonation_output__scores = [] normalized_file_detonation_output__categories = [] - normalized_file_detonation_output__confidence = [] + normalized_file_detonation_output__score_id = [] ## normalized NoneType value to avoid enumeration failure file_detonation_param_list = [(i or "") for i in filtered_result_0_parameter_vault_id] file_detonation_threat_score_list = [(i or "") for i in filtered_result_0_data___sandbox___threat_score] @@ -550,7 +550,7 @@ def normalized_file_detonation_output(action=None, success=None, container=None, normalized_file_detonation_output__file_score_object.append({'score': score, 'score_id': score_id,'confidence': list(set(score_list))[0], 'categories': list(set(category_list))}) normalized_file_detonation_output__scores.append(score) normalized_file_detonation_output__categories.append(list(set(category_list))) - normalized_file_detonation_output__confidence.append(list(set(score_list))[0]) + normalized_file_detonation_output__score_id.append(score_id) #phantom.debug("normalized_file_detonation_output__file_score_object: {}".format(normalized_file_detonation_output__file_score_object)) #phantom.debug("normalized_file_detonation_output__scores: {}".format(normalized_file_detonation_output__scores)) #phantom.debug("normalized_file_detonation_output__categories: {}".format(normalized_file_detonation_output__categories)) @@ -561,7 +561,7 @@ def normalized_file_detonation_output(action=None, success=None, container=None, phantom.save_run_data(key="normalized_file_detonation_output:file_score_object", value=json.dumps(normalized_file_detonation_output__file_score_object)) phantom.save_run_data(key="normalized_file_detonation_output:scores", value=json.dumps(normalized_file_detonation_output__scores)) phantom.save_run_data(key="normalized_file_detonation_output:categories", value=json.dumps(normalized_file_detonation_output__categories)) - phantom.save_run_data(key="normalized_file_detonation_output:confidence", value=json.dumps(normalized_file_detonation_output__confidence)) + phantom.save_run_data(key="normalized_file_detonation_output:score_id", value=json.dumps(normalized_file_detonation_output__score_id)) format_report_file(container=container) @@ -576,13 +576,13 @@ def format_report_file(action=None, success=None, container=None, results=None, # Format a summary table with the information gathered from the playbook. ################################################################################ - template = """SOAR analyzed File(s) using CrowdStrike. The table below shows a summary of the information gathered.\n\n| File hash | Normalized Score | Confidence |Categories | Report Link | Source |\n| --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} |https://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n\n""" + template = """SOAR analyzed File(s) using CrowdStrike. The table below shows a summary of the information gathered.\n\n| vault_id | Normalized Score | score id |Categories | Report Link | Source |\n| --- | --- | --- | --- | --- | --- |\n%%\n| `{0}` | {1} | {2} | {3} |https://falcon.crowdstrike.com/intelligence/sandbox/reports/{4} | CrowdStrike OAuth API |\n%%\n\n\n""" # parameter list for template variable replacement parameters = [ "filtered-data:sandbox_filter:condition_1:file_detonation:action_result.parameter.vault_id", "normalized_file_detonation_output:custom_function:scores", - "normalized_file_detonation_output:custom_function:confidence", + "normalized_file_detonation_output:custom_function:score_id", "normalized_file_detonation_output:custom_function:categories", "filtered-data:windows_sandbox_filter:condition_1:windows_file_detonation:action_result.data.*.id" ]