From 2ad0c41bc2fe0956ea0e1f17171988748c2f8e3a Mon Sep 17 00:00:00 2001 From: tccontre Date: Thu, 23 Mar 2023 12:20:21 +0100 Subject: [PATCH 1/5] crowdstrike_oauth_api_dynamic_analysis_playbooks --- ...rowdStrike_OAuth_API_Dynamic_Analysis.json | 1473 +++++++++++++++++ ...CrowdStrike_OAuth_API_Dynamic_Analysis.png | Bin 0 -> 113809 bytes .../CrowdStrike_OAuth_API_Dynamic_Analysis.py | 1410 ++++++++++++++++ ...CrowdStrike_OAuth_API_Dynamic_Analysis.yml | 25 + 4 files changed, 2908 insertions(+) create mode 100644 playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json create mode 100644 playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.png create mode 100644 playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py create mode 100644 playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.yml diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json new file mode 100644 index 0000000000..2d82507016 --- /dev/null +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json @@ -0,0 +1,1473 @@ +{ + "blockly": false, + "blockly_xml": "", + "category": "Uncategorized", + "coa": { + "data": { + "description": "Accepts a URL or File_Hash and does reputation analysis on the objects. Generates a global report and a per observable sub-report and normalized score. The score can be customized based on a variety of factors.\n\nRef: https://d3fend.mitre.org/technique/d3f:IdentifierReputationAnalysis/", + "edges": [ + { + "id": "port_0_to_port_2", + "sourceNode": "0", + "sourcePort": "0_out", + "targetNode": "2", + "targetPort": "2_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_2_to_port_3", + "sourceNode": "2", + "sourcePort": "2_out", + "targetNode": "3", + "targetPort": "3_in" + }, + { + "id": "port_3_to_port_4", + "sourceNode": "3", + "sourcePort": "3_out", + "targetNode": "4", + "targetPort": "4_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_4_to_port_5", + "sourceNode": "4", + "sourcePort": "4_out", + "targetNode": "5", + "targetPort": "5_in" + }, + { + "id": "port_5_to_port_6", + "sourceNode": "5", + "sourcePort": "5_out", + "targetNode": "6", + "targetPort": "6_in" + }, + { + "id": "port_6_to_port_7", + "sourceNode": "6", + "sourcePort": "6_out", + "targetNode": "7", + "targetPort": "7_in" + }, + { + "id": "port_7_to_port_1", + "sourceNode": "7", + "sourcePort": "7_out", + "targetNode": "1", + "targetPort": "1_in" + }, + { + "conditions": [ + { + "index": 1 + } + ], + "id": "port_2_to_port_8", + "sourceNode": "2", + "sourcePort": "2_out", + "targetNode": "8", + "targetPort": "8_in" + }, + { + "id": "port_10_to_port_11", + "sourceNode": "10", + "sourcePort": "10_out", + "targetNode": "11", + "targetPort": "11_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_11_to_port_12", + "sourceNode": "11", + "sourcePort": "11_out", + "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", + "sourcePort": "12_out", + "targetNode": "14", + "targetPort": "14_in" + }, + { + "id": "port_14_to_port_15", + "sourceNode": "14", + "sourcePort": "14_out", + "targetNode": "15", + "targetPort": "15_in" + }, + { + "id": "port_15_to_port_1", + "sourceNode": "15", + "sourcePort": "15_out", + "targetNode": "1", + "targetPort": "1_in" + }, + { + "conditions": [ + { + "index": 1 + } + ], + "id": "port_13_to_port_16", + "sourceNode": "13", + "sourcePort": "13_out", + "targetNode": "16", + "targetPort": "16_in" + }, + { + "id": "port_16_to_port_17", + "sourceNode": "16", + "sourcePort": "16_out", + "targetNode": "17", + "targetPort": "17_in" + }, + { + "conditions": [ + { + "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" + } + ], + "globalCustomCode": "\n\n\nimport os", + "hash": "5cff0f179c8b9ff466ffcb9d12d541f2062d3637", + "nodes": { + "0": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_start", + "id": "0", + "type": "start" + }, + "errors": {}, + "id": "0", + "type": "start", + "warnings": {}, + "x": 530, + "y": -2.5579538487363607e-13 + }, + "1": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_finish", + "id": "1", + "type": "end" + }, + "errors": {}, + "id": "1", + "type": "end", + "warnings": {}, + "x": 700, + "y": 1582 + }, + "10": { + "data": { + "action": "detonate file", + "actionType": "generic", + "advanced": { + "customName": "windows 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": 1, + "functionName": "windows_file_detonation", + "id": "10", + "parameters": { + "detail_report": true, + "environment": "Windows 10, 64-bit", + "is_confidential": false, + "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": "10", + "type": "action", + "warnings": {}, + "x": 340, + "y": 680 + }, + "11": { + "data": { + "advanced": { + "customName": "windows sandbox filter", + "customNameId": 0, + "description": "Filters successful file detonation results.", + "join": [], + "note": "Filters successful file detonation results." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "==", + "param": "windows_file_detonation:action_result.status", + "value": "success" + } + ], + "conditionIndex": 0, + "customName": "win_sandbox_status_filter", + "logic": "and" + } + ], + "functionId": 4, + "functionName": "windows_sandbox_filter", + "id": "11", + "type": "filter" + }, + "errors": {}, + "id": "11", + "type": "filter", + "warnings": {}, + "x": 400, + "y": 866 + }, + "12": { + "data": { + "advanced": { + "customName": "normalized win 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", + "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" + ], + "outputVariables": [ + "file_score_object", + "scores", + "categories", + "confidence" + ], + "type": "code" + }, + "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", + "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 + }, + "14": { + "data": { + "advanced": { + "customName": "format report win 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", + "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: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", + "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": {}, + "x": 340, + "y": 1220 + }, + "15": { + "data": { + "advanced": { + "customName": "build win 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", + "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" + ], + "outputVariables": [ + "observable_array" + ], + "type": "code" + }, + "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 \"vault_id\": _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_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", + "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 + }, + "2": { + "data": { + "advanced": { + "customName": "input filter", + "customNameId": 0, + "description": "Determine branches based on provided inputs.", + "join": [], + "note": "Determine branches based on provided inputs." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "!=", + "param": "playbook_input:url", + "value": "" + } + ], + "conditionIndex": 0, + "customName": "url_input", + "logic": "and" + }, + { + "comparisons": [ + { + "conditionIndex": 1, + "op": "!=", + "param": "playbook_input:vault_id", + "value": "" + } + ], + "conditionIndex": 1, + "customName": "vault_id_input", + "logic": "and" + } + ], + "functionId": 1, + "functionName": "input_filter", + "id": "2", + "type": "filter" + }, + "errors": {}, + "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 \"vault_id\": _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_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 \"vault_id\": _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_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 + }, + "3": { + "data": { + "action": "detonate url", + "actionType": "generic", + "advanced": { + "customName": "crowdstrike url detonation", + "customNameId": 0, + "description": "Queries CrowdStrike for information about the provided URL(s)", + "join": [], + "note": "Queries CrowdStrike for information about the provided URL(s)" + }, + "connector": "CrowdStrike OAuth API", + "connectorConfigs": [ + "crowdstrike_url_reputation" + ], + "connectorId": "ae971ba5-3117-444a-8ac5-6ce779f3a232", + "connectorVersion": "v1", + "functionId": 1, + "functionName": "crowdstrike_url_detonation", + "id": "3", + "parameters": { + "environment": "Windows 7, 64-bit", + "limit": 50, + "url": "playbook_input:url" + }, + "requiredParameters": [ + { + "data_type": "string", + "field": "url" + }, + { + "data_type": "numeric", + "default": 50, + "field": "limit" + }, + { + "data_type": "string", + "field": "environment" + } + ], + "type": "action" + }, + "errors": {}, + "id": "3", + "type": "action", + "warnings": {}, + "x": 0, + "y": 680 + }, + "30": { + "data": { + "advanced": { + "customName": "build mac 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": 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" + }, + "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 \"vault_id\": _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_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", + "warnings": {}, + "x": 1360, + "y": 1396 + }, + "4": { + "data": { + "advanced": { + "customName": "url detonation filter", + "customNameId": 0, + "description": "Filters successful url detonation results.", + "join": [], + "note": "Filters successful url detonation results." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "==", + "param": "crowdstrike_url_detonation:action_result.status", + "value": "success" + } + ], + "conditionIndex": 0, + "customName": "url_detonation_success", + "logic": "and" + } + ], + "functionId": 2, + "functionName": "url_detonation_filter", + "id": "4", + "type": "filter" + }, + "errors": {}, + "id": "4", + "type": "filter", + "warnings": {}, + "x": 60, + "y": 860 + }, + "5": { + "customCode": null, + "data": { + "advanced": { + "customName": "normalized url 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": 1, + "functionName": "normalized_url_detonation_output", + "id": "5", + "inputParameters": [ + "filtered-data:url_detonation_filter:condition_1:crowdstrike_url_detonation:action_result.parameter.url", + "filtered-data:url_detonation_filter:condition_1:crowdstrike_url_detonation:action_result.data.*.verdict", + "filtered-data:url_detonation_filter:condition_1:crowdstrike_url_detonation:action_result.data.*.sandbox.*.threat_score", + "filtered-data:url_detonation_filter:condition_1:crowdstrike_url_detonation:action_result.data.*.sandbox.*.signatures.*.category", + "filtered-data:url_detonation_filter:condition_1:crowdstrike_url_detonation:action_result.data.*.sandbox.*.verdict" + ], + "outputVariables": [ + "url_score_object", + "scores", + "categories", + "confidence" + ], + "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 ## 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 + }, + "6": { + "data": { + "advanced": { + "customName": "format report url", + "customNameId": 0, + "description": "Format a summary table with the information gathered from the playbook.", + "join": [], + "note": "Format a summary table with the information gathered from the playbook." + }, + "functionId": 1, + "functionName": "format_report_url", + "id": "6", + "parameters": [ + "playbook_input:url", + "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" + ], + "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", + "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": {}, + "x": 20, + "y": 1220 + }, + "7": { + "data": { + "advanced": { + "customName": "build url output", + "customNameId": 0, + "description": "This block uses custom code to generate an observable dictionary to output into the observables data path.", + "join": [], + "note": "This block uses custom code to generate an observable dictionary to output into the observables data path." + }, + "functionId": 2, + "functionName": "build_url_output", + "id": "7", + "inputParameters": [ + "playbook_input:url", + "crowdstrike_url_detonation:action_result.data.*.id", + "normalized_url_detonation_output:custom_function:url_score_object" + ], + "outputVariables": [ + "observable_array" + ], + "type": "code" + }, + "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": {}, + "x": 20, + "y": 1400 + }, + "8": { + "data": { + "advanced": { + "customName": "get vault_id information", + "customNameId": 0, + "description": "This block uses custom code for retrieving metadata of vault id that will distinguish what sandbox will be executed.", + "join": [], + "note": "This block uses custom code for retrieving metadata of vault id that will distinguish what sandbox will be executed." + }, + "functionId": 3, + "functionName": "get_vault_id_information", + "id": "8", + "inputParameters": [ + "playbook_input:vault_id" + ], + "outputVariables": [ + "sandbox_type" + ], + "type": "code" + }, + "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", + "warnings": {}, + "x": 860, + "y": 320 + } + }, + "notes": "Inputs: url, file_hash\nInteractions: Crowdstrike\nActions: url detonation, , file detonation\nOutputs: report, observables" + }, + "input_spec": [ + { + "contains": [ + "url" + ], + "description": "A URL provided for reputation analysis - crowdstrike", + "name": "url" + }, + { + "contains": [ + "vault id" + ], + "description": "A vault_id provided for reputation analysis - crowdstrike", + "name": "vault_id" + } + ], + "output_spec": null, + "playbook_type": "data", + "python_version": "3", + "schema": "5.0.8", + "version": "5.5.0.108488" + }, + "create_time": "2023-03-23T11:14:48.461550+00:00", + "draft_mode": false, + "labels": [ + "*" + ], + "tags": [ + "file_hash", + "url", + "reputation", + "D3-IPRA", + "domain", + "D3-FHRA", + "D3-DNRA", + "D3-URA", + "sandbox", + "D3-IRA", + "ip" + ] +} \ No newline at end of file diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.png b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.png new file mode 100644 index 0000000000000000000000000000000000000000..b88dfa900c6d95c1219b1aa7c6a3f13679a6f4c5 GIT binary patch literal 113809 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

?gQ|YFf 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⪻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 Date: Fri, 24 Mar 2023 10:01:48 +0100 Subject: [PATCH 2/5] Update CrowdStrike_OAuth_API_Dynamic_Analysis.yml --- playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.yml b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.yml index 8ac0b76330..9ae27e1a2b 100644 --- a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.yml +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.yml @@ -12,12 +12,11 @@ app_list: - CrowdStrike OAuth API tags: platform_tags: - - attributes - - user - - device - - host name + - reputation + - url + - domain + - sandbox - ip - - crowdstrike_oauth_api playbook_type: Input vpe_type: Modern playbook_fields: [] From 34bb16fda9e829ff7c5f961ebf0d0278a68fef3e Mon Sep 17 00:00:00 2001 From: tccontre <26181693+tccontre@users.noreply.github.com> Date: Fri, 24 Mar 2023 10:05:28 +0100 Subject: [PATCH 3/5] Update CrowdStrike_OAuth_API_Dynamic_Analysis.yml --- playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.yml b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.yml index 9ae27e1a2b..441e004c36 100644 --- a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.yml +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.yml @@ -16,7 +16,8 @@ tags: - url - domain - sandbox - - ip + - ip + - file_hash playbook_type: Input vpe_type: Modern playbook_fields: [] From 1b50fc6df3fe8d39d3753a8361e318003b89aa0e Mon Sep 17 00:00:00 2001 From: tccontre Date: Fri, 24 Mar 2023 15:47:22 +0100 Subject: [PATCH 4/5] crowdstrike_oauth_api_dynamic_analysis_playbooks --- ...rowdStrike_OAuth_API_Dynamic_Analysis.json | 40 +++++++++++++------ .../CrowdStrike_OAuth_API_Dynamic_Analysis.py | 40 ++++++++++++++----- 2 files changed, 58 insertions(+), 22 deletions(-) diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json index 2d82507016..7cd4867db8 100644 --- a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.json @@ -1,7 +1,7 @@ { "blockly": false, "blockly_xml": "", - "category": "Uncategorized", + "category": "Dynamic Analysis", "coa": { "data": { "description": "Accepts a URL or File_Hash and does reputation analysis on the objects. Generates a global report and a per observable sub-report and normalized score. The score can be customized based on a variety of factors.\n\nRef: https://d3fend.mitre.org/technique/d3f:IdentifierReputationAnalysis/", @@ -310,7 +310,7 @@ "type": "start", "warnings": {}, "x": 530, - "y": -2.5579538487363607e-13 + "y": -3.197442310920451e-13 }, "1": { "data": { @@ -324,9 +324,10 @@ "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", "warnings": {}, "x": 700, - "y": 1582 + "y": 1580 }, "10": { "data": { @@ -606,7 +607,7 @@ "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 \"vault_id\": _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_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_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", "warnings": {}, "x": 340, "y": 1400 @@ -841,7 +842,7 @@ "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 \"vault_id\": _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_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", + "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 @@ -1027,7 +1028,7 @@ "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 \"vault_id\": _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_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", + "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 @@ -1262,7 +1263,7 @@ "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 \"vault_id\": _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_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", + "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", "warnings": {}, "x": 1360, "y": 1396 @@ -1394,7 +1395,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 \"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", + "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 @@ -1446,13 +1447,28 @@ "name": "vault_id" } ], - "output_spec": null, + "output_spec": [ + { + "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_url_output:custom_function:observable_array" + ], + "deduplicate": false, + "description": "An array of observable dictionaries with value, type, score, score_id, and categories.", + "metadata": {}, + "name": "observable" + } + ], "playbook_type": "data", "python_version": "3", "schema": "5.0.8", "version": "5.5.0.108488" }, - "create_time": "2023-03-23T11:14:48.461550+00:00", + "create_time": "2023-03-24T14:42:42.435739+00:00", "draft_mode": false, "labels": [ "*" @@ -1460,7 +1476,6 @@ "tags": [ "file_hash", "url", - "reputation", "D3-IPRA", "domain", "D3-FHRA", @@ -1468,6 +1483,7 @@ "D3-URA", "sandbox", "D3-IRA", - "ip" + "ip", + "CrowdStrike_OAuth_API" ] } \ No newline at end of file diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py index bd27e68d58..d6e4ec2b2e 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", - "reputation": { + "sandbox": { "score": url_object['score'], "confidence": url_object['confidence'], "categories": url_object['categories'] @@ -654,9 +654,9 @@ def build_win_file_output(action=None, success=None, container=None, results=Non 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): observable_object = { - "vault_id": _vault_id, + "value": _vault_id, "type": "hash", - "reputation": { + "sandbox": { "score": file_object['score'], "confidence": file_object['confidence'], "categories": file_object['categories'] @@ -891,9 +891,9 @@ def build_linux_file_output(action=None, success=None, container=None, results=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): observable_object = { - "vault_id": _vault_id, + "value": _vault_id, "type": "hash", - "reputation": { + "sandbox": { "score": file_object['score'], "confidence": file_object['confidence'], "categories": file_object['categories'] @@ -1129,9 +1129,9 @@ def build_android_file_output(action=None, success=None, container=None, results 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): observable_object = { - "vault_id": _vault_id, + "value": _vault_id, "type": "hash", - "reputation": { + "sandbox": { "score": file_object['score'], "confidence": file_object['confidence'], "categories": file_object['categories'] @@ -1367,9 +1367,9 @@ def build_mac_file_output(action=None, success=None, container=None, results=Non 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): observable_object = { - "vault_id": _vault_id, + "value": _vault_id, "type": "hash", - "reputation": { + "sandbox": { "score": file_object['score'], "confidence": file_object['confidence'], "categories": file_object['categories'] @@ -1397,14 +1397,34 @@ def build_mac_file_output(action=None, success=None, container=None, results=Non def on_finish(container, summary): phantom.debug("on_finish() called") + build_win_file_output__observable_array = json.loads(_ if (_ := phantom.get_run_data(key="build_win_file_output:observable_array")) != "" else "null") # pylint: disable=used-before-assignment + build_linux_file_output__observable_array = json.loads(_ if (_ := phantom.get_run_data(key="build_linux_file_output:observable_array")) != "" else "null") # pylint: disable=used-before-assignment + build_android_file_output__observable_array = json.loads(_ if (_ := phantom.get_run_data(key="build_android_file_output:observable_array")) != "" else "null") # pylint: disable=used-before-assignment + build_mac_file_output__observable_array = json.loads(_ if (_ := phantom.get_run_data(key="build_mac_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_win_file_output__observable_array, build_linux_file_output__observable_array, build_android_file_output__observable_array, build_mac_file_output__observable_array, build_url_output__observable_array) + + output = { + "observable": observable_combined_value, + } + ################################################################################ ## Custom Code Start ################################################################################ # Write your custom code here... - + format_report_url = phantom.get_format_data(name="format_report_url") + format_report_win_file = phantom.get_format_data(name="format_report_win_file") + format_report_linux_file = phantom.get_format_data(name="format_report_linux_file") + format_report_android_file = phantom.get_format_data(name="format_report_android_file") + format_report_mac_file = phantom.get_format_data(name="format_report_mac_file") + 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) + output['markdown_report'] = markdown_report_combined_value ################################################################################ ## Custom Code End ################################################################################ + phantom.save_playbook_output_data(output=output) + return \ No newline at end of file From d60c7fd3213ee1741412ba1e749594a721bbb7f9 Mon Sep 17 00:00:00 2001 From: tccontre <26181693+tccontre@users.noreply.github.com> Date: Tue, 28 Mar 2023 10:06:08 +0200 Subject: [PATCH 5/5] Update CrowdStrike_OAuth_API_Dynamic_Analysis.py --- .../CrowdStrike_OAuth_API_Dynamic_Analysis.py | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py index d6e4ec2b2e..c6cb5423ac 100644 --- a/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py +++ b/playbooks/CrowdStrike_OAuth_API_Dynamic_Analysis.py @@ -200,9 +200,9 @@ def normalized_url_detonation_output(action=None, success=None, container=None, normalized_url_detonation_output__scores.append(list(set(score_list))[0]) normalized_url_detonation_output__categories.append(list(set(category_list))) normalized_url_detonation_output__confidence.append(list(set(verdict_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)) + #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)) ################################################################################ @@ -311,7 +311,7 @@ def build_url_output(action=None, success=None, container=None, results=None, ha observable_object['attributes']['port'] = parsed_url.port build_url_output__observable_array.append(observable_object) - phantom.debug("build_url_output__observable_array: {}".format(build_url_output__observable_array)) + #phantom.debug("build_url_output__observable_array: {}".format(build_url_output__observable_array)) ################################################################################ ## Custom Code End ################################################################################ @@ -514,9 +514,9 @@ def normalized_win_file_detonation_output(action=None, success=None, container=N normalized_win_file_detonation_output__scores.append(list(set(score_list))[0]) normalized_win_file_detonation_output__categories.append(list(set(category_list))) normalized_win_file_detonation_output__confidence.append(list(set(verdict_list))[0]) - phantom.debug("normalized_win_file_detonation_output__file_score_object: {}".format(normalized_win_file_detonation_output__file_score_object)) - phantom.debug("normalized_win_file_detonation_output__scores: {}".format(normalized_win_file_detonation_output__scores)) - phantom.debug("normalized_win_file_detonation_output__categories: {}".format(normalized_win_file_detonation_output__categories)) + #phantom.debug("normalized_win_file_detonation_output__file_score_object: {}".format(normalized_win_file_detonation_output__file_score_object)) + #phantom.debug("normalized_win_file_detonation_output__scores: {}".format(normalized_win_file_detonation_output__scores)) + #phantom.debug("normalized_win_file_detonation_output__categories: {}".format(normalized_win_file_detonation_output__categories)) ################################################################################ ## Custom Code End ################################################################################ @@ -670,7 +670,7 @@ def build_win_file_output(action=None, success=None, container=None, results=Non "source_link":f"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{external_id}" } build_win_file_output__observable_array.append(observable_object) - phantom.debug("build_win_file_output__observable_array: {}".format(build_win_file_output__observable_array)) + #phantom.debug("build_win_file_output__observable_array: {}".format(build_win_file_output__observable_array)) ################################################################################ ## Custom Code End ################################################################################ @@ -811,9 +811,9 @@ def normalized_linux_file_detonation_output(action=None, success=None, container normalized_linux_file_detonation_output__scores.append(list(set(score_list))[0]) normalized_linux_file_detonation_output__categories.append(list(set(category_list))) normalized_linux_file_detonation_output__confidence.append(list(set(verdict_list))[0]) - phantom.debug("normalized_linux_file_detonation_output__file_score_object: {}".format(normalized_linux_file_detonation_output__file_score_object)) - phantom.debug("normalized_linux_file_detonation_output__scores: {}".format(normalized_linux_file_detonation_output__scores)) - phantom.debug("normalized_linux_file_detonation_output__categories: {}".format(normalized_linux_file_detonation_output__categories)) + #phantom.debug("normalized_linux_file_detonation_output__file_score_object: {}".format(normalized_linux_file_detonation_output__file_score_object)) + #phantom.debug("normalized_linux_file_detonation_output__scores: {}".format(normalized_linux_file_detonation_output__scores)) + #phantom.debug("normalized_linux_file_detonation_output__categories: {}".format(normalized_linux_file_detonation_output__categories)) ################################################################################ ## Custom Code End ################################################################################ @@ -907,7 +907,7 @@ def build_linux_file_output(action=None, success=None, container=None, results=N "source_link":f"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{external_id}" } build_linux_file_output__observable_array.append(observable_object) - phantom.debug("build_linux_file_output__observable_array: {}".format(build_linux_file_output__observable_array)) + #phantom.debug("build_linux_file_output__observable_array: {}".format(build_linux_file_output__observable_array)) ################################################################################ ## Custom Code End @@ -1049,9 +1049,9 @@ def normalized_android_file_detonation_output(action=None, success=None, contain normalized_android_file_detonation_output__scores.append(list(set(score_list))[0]) normalized_android_file_detonation_output__categories.append(list(set(category_list))) normalized_android_file_detonation_output__confidence.append(list(set(verdict_list))[0]) - phantom.debug("normalized_android_file_detonation_output__file_score_object: {}".format(normalized_android_file_detonation_output__file_score_object)) - phantom.debug("normalized_android_file_detonation_output__scores: {}".format(normalized_android_file_detonation_output__scores)) - phantom.debug("normalized_android_file_detonation_output__categories: {}".format(normalized_android_file_detonation_output__categories)) + #phantom.debug("normalized_android_file_detonation_output__file_score_object: {}".format(normalized_android_file_detonation_output__file_score_object)) + #phantom.debug("normalized_android_file_detonation_output__scores: {}".format(normalized_android_file_detonation_output__scores)) + #phantom.debug("normalized_android_file_detonation_output__categories: {}".format(normalized_android_file_detonation_output__categories)) ################################################################################ ## Custom Code End ################################################################################ @@ -1145,7 +1145,7 @@ def build_android_file_output(action=None, success=None, container=None, results "source_link":f"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{external_id}" } build_android_file_output__observable_array.append(observable_object) - phantom.debug("build_android_file_output__observable_array: {}".format(build_android_file_output__observable_array)) + #phantom.debug("build_android_file_output__observable_array: {}".format(build_android_file_output__observable_array)) ################################################################################ ## Custom Code End ################################################################################ @@ -1287,9 +1287,9 @@ def normalized_mac_file_detonation_output(action=None, success=None, container=N normalized_mac_file_detonation_output__scores.append(list(set(score_list))[0]) normalized_mac_file_detonation_output__categories.append(list(set(category_list))) normalized_mac_file_detonation_output__confidence.append(list(set(verdict_list))[0]) - phantom.debug("normalized_mac_file_detonation_output__url_score_object: {}".format(normalized_mac_file_detonation_output__url_score_object)) - phantom.debug("normalized_mac_file_detonation_output__scores: {}".format(normalized_mac_file_detonation_output__scores)) - phantom.debug("normalized_mac_file_detonation_output__categories: {}".format(normalized_mac_file_detonation_output__categories)) + #phantom.debug("normalized_mac_file_detonation_output__url_score_object: {}".format(normalized_mac_file_detonation_output__url_score_object)) + #phantom.debug("normalized_mac_file_detonation_output__scores: {}".format(normalized_mac_file_detonation_output__scores)) + #phantom.debug("normalized_mac_file_detonation_output__categories: {}".format(normalized_mac_file_detonation_output__categories)) ################################################################################ ## Custom Code End ################################################################################ @@ -1383,7 +1383,7 @@ def build_mac_file_output(action=None, success=None, container=None, results=Non "source_link":f"https://falcon.crowdstrike.com/intelligence/sandbox/reports/{external_id}" } build_mac_file_output__observable_array.append(observable_object) - phantom.debug("build_mac_file_output__observable_array: {}".format(build_mac_file_output__observable_array)) + #phantom.debug("build_mac_file_output__observable_array: {}".format(build_mac_file_output__observable_array)) ################################################################################ ## Custom Code End ################################################################################ @@ -1427,4 +1427,4 @@ def on_finish(container, summary): phantom.save_playbook_output_data(output=output) - return \ No newline at end of file + return