From fc121d462d9ef1210db2d17858dcf186246276cb Mon Sep 17 00:00:00 2001 From: tccontre Date: Tue, 23 May 2023 11:36:13 +0200 Subject: [PATCH] Active_Directory_Disable_Account_Dispatch_playbook --- ...ve_Directory_Disable_Account_Dispatch.json | 697 ++++++++++++++++++ ...ive_Directory_Disable_Account_Dispatch.png | Bin 0 -> 64546 bytes ...tive_Directory_Disable_Account_Dispatch.py | 315 ++++++++ ...ive_Directory_Disable_Account_Dispatch.yml | 25 + 4 files changed, 1037 insertions(+) create mode 100644 playbooks/Active_Directory_Disable_Account_Dispatch.json create mode 100644 playbooks/Active_Directory_Disable_Account_Dispatch.png create mode 100644 playbooks/Active_Directory_Disable_Account_Dispatch.py create mode 100644 playbooks/Active_Directory_Disable_Account_Dispatch.yml diff --git a/playbooks/Active_Directory_Disable_Account_Dispatch.json b/playbooks/Active_Directory_Disable_Account_Dispatch.json new file mode 100644 index 0000000000..43221eeb2b --- /dev/null +++ b/playbooks/Active_Directory_Disable_Account_Dispatch.json @@ -0,0 +1,697 @@ +{ + "blockly": false, + "blockly_xml": "", + "category": "Disable Account", + "coa": { + "data": { + "description": "Accepts user name that needs to be disabled in Active Directory. Generates a report and observable output based on the status of account locking or disabling.", + "edges": [ + { + "id": "port_0_to_port_5", + "sourceNode": "0", + "sourcePort": "0_out", + "targetNode": "5", + "targetPort": "5_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_5_to_port_3", + "sourceNode": "5", + "sourcePort": "5_out", + "targetNode": "3", + "targetPort": "3_in" + }, + { + "conditions": [ + { + "index": 1 + } + ], + "id": "port_5_to_port_6", + "sourceNode": "5", + "sourcePort": "5_out", + "targetNode": "6", + "targetPort": "6_in" + }, + { + "id": "port_3_to_port_7", + "sourceNode": "3", + "sourcePort": "3_out", + "targetNode": "7", + "targetPort": "7_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_7_to_port_8", + "sourceNode": "7", + "sourcePort": "7_out", + "targetNode": "8", + "targetPort": "8_in" + }, + { + "conditions": [ + { + "index": 1 + } + ], + "id": "port_7_to_port_9", + "sourceNode": "7", + "sourcePort": "7_out", + "targetNode": "9", + "targetPort": "9_in" + }, + { + "id": "port_8_to_port_10", + "sourceNode": "8", + "sourcePort": "8_out", + "targetNode": "10", + "targetPort": "10_in" + }, + { + "id": "port_10_to_port_11", + "sourceNode": "10", + "sourcePort": "10_out", + "targetNode": "11", + "targetPort": "11_in" + }, + { + "id": "port_11_to_port_12", + "sourceNode": "11", + "sourcePort": "11_out", + "targetNode": "12", + "targetPort": "12_in" + }, + { + "id": "port_12_to_port_1", + "sourceNode": "12", + "sourcePort": "12_out", + "targetNode": "1", + "targetPort": "1_in" + } + ], + "hash": "cebfbea38189615536f82a870827b8ef1ede2890", + "nodes": { + "0": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_start", + "id": "0", + "type": "start" + }, + "errors": {}, + "id": "0", + "type": "start", + "warnings": {}, + "x": 360, + "y": -6.394884621840902e-14 + }, + "1": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_finish", + "id": "1", + "type": "end" + }, + "errors": {}, + "id": "1", + "type": "end", + "warnings": {}, + "x": 19.999999999999986, + "y": 1414 + }, + "10": { + "data": { + "advanced": { + "customName": "merge report", + "customNameId": 0, + "description": "summary report for all disable account input playbooks.", + "join": [], + "note": "summary report for all disable account input playbooks." + }, + "functionId": 1, + "functionName": "merge_report", + "id": "10", + "parameters": [ + "normalized_observable_filter:custom_function:observable_merge_report" + ], + "template": "SOAR retrieved tickets from Splunk. The table below shows a summary of the information gathered.\\n\\n\n| value | type | message | status |\n| --- | --- | --- | --- |\n%%\n| {0}\n%%\n", + "type": "format" + }, + "errors": {}, + "id": "10", + "type": "format", + "userCode": "\n # Write your custom code here...\n #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name=\"merge_report\"))\n", + "warnings": {}, + "x": 0, + "y": 880 + }, + "11": { + "data": { + "advanced": { + "customName": "tag indicators", + "customNameId": 0, + "description": "adding indicator tag for each disabled account.", + "join": [], + "note": "adding indicator tag for each disabled account." + }, + "customFunction": { + "draftMode": false, + "name": "indicator_tag", + "repoName": "community" + }, + "functionId": 3, + "functionName": "tag_indicators", + "id": "11", + "selectMore": false, + "tab": "customFunctions", + "type": "utility", + "utilities": { + "indicator_tag": { + "description": "Tag an existing indicator record. Tags can be overwritten or appended.", + "fields": [ + { + "dataTypes": [ + "*" + ], + "description": "Specifies the indicator which the tag will be added to. Supports a string indicator value or an indicator id.", + "inputType": "item", + "label": "indicator", + "name": "indicator", + "placeholder": "my_indicator", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [ + "*" + ], + "description": "Comma separated list of tags. Tags should only contain characters Aa-Zz, 0-9, '-', and '_'.", + "inputType": "item", + "label": "tags", + "name": "tags", + "placeholder": "tag1,tag2,...,tagk", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [], + "description": "Either True or False with default as False. If set to True, existing tags on the indicator record will be replaced by the provided input. If set to False, the new tags will be appended to the existing indicator tags.", + "inputType": "item", + "label": "overwrite", + "name": "overwrite", + "placeholder": "False", + "renderType": "datapath", + "required": false + } + ], + "label": "indicator_tag", + "name": "indicator_tag" + } + }, + "utilityType": "custom_function", + "values": { + "indicator_tag": { + "indicator": "normalized_observable_filter:custom_function:observable_value", + "overwrite": null, + "tags": "normalized_observable_filter:custom_function:observable_type" + } + } + }, + "errors": {}, + "id": "11", + "type": "utility", + "warnings": {}, + "x": 0, + "y": 1058 + }, + "12": { + "data": { + "advanced": { + "customName": "update workbook task", + "customNameId": 0, + "description": "update workbook task of this dispatch playbook", + "join": [], + "note": "update workbook task of this dispatch playbook" + }, + "customFunction": { + "draftMode": false, + "name": "workbook_task_update", + "repoName": "community" + }, + "functionId": 4, + "functionName": "update_workbook_task", + "id": "12", + "selectMore": false, + "type": "utility", + "utilities": { + "workbook_task_update": { + "description": "Update a workbook task by task name or the task where the currently running playbook appears. Requires a task_name, container_id, and a note_title, note_content, owner, or status.", + "fields": [ + { + "dataTypes": [ + "*" + ], + "description": "Name of a workbook task or keyword 'playbook' to update the task where the currently running playbook appears. (Required)", + "inputType": "item", + "label": "task_name", + "name": "task_name", + "placeholder": "my_task", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [ + "*" + ], + "description": "Note title. (Optional)", + "inputType": "item", + "label": "note_title", + "name": "note_title", + "placeholder": "My Title", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [ + "*" + ], + "description": "Note content. (Optional)", + "inputType": "item", + "label": "note_content", + "name": "note_content", + "placeholder": "My notes", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [ + "*" + ], + "description": "Accepts 'incomplete', 'in_progress, or 'complete'. (Optional)", + "inputType": "item", + "label": "status", + "name": "status", + "placeholder": "in_progress", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [ + "*" + ], + "description": "A user to assign as the task owner or keyword 'current\" to assign the task to the user that launched the playbook. (Optional)", + "inputType": "item", + "label": "owner", + "name": "owner", + "placeholder": "username", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [ + "phantom container id" + ], + "description": "The ID of a SOAR Container. (Required)", + "inputType": "item", + "label": "container", + "name": "container", + "placeholder": "container:id", + "renderType": "datapath", + "required": false + } + ], + "label": "workbook_task_update", + "name": "workbook_task_update" + } + }, + "utilityType": "custom_function", + "values": { + "workbook_task_update": { + "container": "container:id", + "note_content": "merge_report:formatted_data", + "note_title": "AD Disable Account Report", + "owner": null, + "status": "complete", + "task_name": "playbook" + } + } + }, + "errors": {}, + "id": "12", + "type": "utility", + "warnings": {}, + "x": 0, + "y": 1240 + }, + "3": { + "data": { + "advanced": { + "customName": "dispatch account disable", + "customNameId": 0, + "join": [] + }, + "functionId": 1, + "functionName": "dispatch_account_disable", + "id": "3", + "inputs": { + "artifact_ids_include": { + "datapaths": [], + "deduplicate": false + }, + "indicator_tags_exclude": { + "datapaths": [], + "deduplicate": false + }, + "indicator_tags_include": { + "datapaths": [], + "deduplicate": false + }, + "playbook_repo": { + "datapaths": [], + "deduplicate": false + }, + "playbook_tags": { + "datapaths": [ + "disable_account" + ], + "deduplicate": false + } + }, + "playbookName": "dispatch_input_playbooks", + "playbookRepo": 1, + "playbookRepoName": "community", + "playbookType": "data", + "synchronous": true, + "type": "playbook" + }, + "errors": {}, + "id": "3", + "type": "playbook", + "warnings": {}, + "x": 170, + "y": 334.99999999999994 + }, + "5": { + "data": { + "advanced": { + "customName": "username filter", + "customNameId": 0, + "description": "Filter user name inputs to route inputs to appropriate actions.", + "join": [], + "note": "Filter user name inputs to route inputs to appropriate actions." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "!=", + "param": "artifact:*.cef.act", + "value": "" + } + ], + "conditionIndex": 0, + "customName": "username_exist", + "display": "If", + "logic": "and", + "type": "if" + }, + { + "comparisons": [ + { + "conditionIndex": 1, + "op": "==", + "param": "", + "value": "" + } + ], + "conditionIndex": 1, + "customName": "username_not_exist", + "display": "Else", + "logic": "and", + "type": "else" + } + ], + "functionId": 1, + "functionName": "username_filter", + "id": "5", + "type": "decision" + }, + "errors": {}, + "id": "5", + "type": "decision", + "warnings": {}, + "x": 420, + "y": 148 + }, + "6": { + "data": { + "advanced": { + "customName": "artifacts check comment", + "customNameId": 0, + "description": "no valid username or user principal name artifacts input", + "join": [], + "note": "no valid username or user principal name artifacts input" + }, + "functionId": 1, + "functionName": "artifacts_check_comment", + "id": "6", + "selectMore": false, + "tab": "apis", + "type": "utility", + "utilities": { + "comment": { + "description": "", + "fields": [ + { + "description": "", + "label": "comment", + "name": "comment", + "placeholder": "Enter a comment", + "renderType": "datapath", + "required": true + }, + { + "hidden": true, + "name": "container", + "required": false + }, + { + "hidden": true, + "name": "author", + "required": false + }, + { + "hidden": true, + "name": "trace", + "required": false + } + ], + "label": "add comment", + "name": "comment" + } + }, + "utilityType": "api", + "values": { + "comment": { + "_internal": [ + "container", + "author", + "trace" + ], + "comment": "no valid username or user principal name artifacts input" + } + } + }, + "errors": {}, + "id": "6", + "type": "utility", + "warnings": {}, + "x": 510, + "y": 328 + }, + "7": { + "data": { + "advanced": { + "customName": "observable output filter", + "customNameId": 0, + "description": "Filter to check if observable output is successfully generated or not.", + "join": [], + "note": "Filter to check if observable output is successfully generated or not." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "!=", + "param": "dispatch_account_disable:playbook_output:observable", + "value": "" + } + ], + "conditionIndex": 0, + "customName": "observable_exist", + "display": "If", + "logic": "and", + "type": "if" + }, + { + "comparisons": [ + { + "conditionIndex": 1, + "op": "==", + "param": "", + "value": "" + } + ], + "conditionIndex": 1, + "customName": "observable_not_exist", + "display": "Else", + "logic": "and", + "type": "else" + } + ], + "functionId": 2, + "functionName": "observable_output_filter", + "id": "7", + "type": "decision" + }, + "errors": {}, + "id": "7", + "type": "decision", + "warnings": {}, + "x": 250, + "y": 506 + }, + "8": { + "data": { + "advanced": { + "customName": "normalized observable filter", + "customNameId": 0, + "description": "This block uses custom code for normalizing observable result of input playbooks tag as disable_account. The normalized output will be used in merging 4 different types of disable_account used to locked users in active directory.", + "join": [], + "note": "This block uses custom code for normalizing observable result of input playbooks tag as disable_account. The normalized output will be used in merging 4 different types of disable_account used to locked users in active directory." + }, + "functionId": 1, + "functionName": "normalized_observable_filter", + "id": "8", + "inputParameters": [ + "dispatch_account_disable:playbook_output:observable" + ], + "outputVariables": [ + "observable_value", + "observable_type", + "observable_merge_report" + ], + "type": "code" + }, + "errors": {}, + "id": "8", + "type": "code", + "userCode": "\n # Write your custom code here...\n normalized_observable_filter__observable_message = []\n normalized_observable_filter__observable_value = []\n normalized_observable_filter__observable_merge_report = []\n fmt_output = \"\"\n output_observable_values = [(i or \"\") for i in dispatch_account_disable_output_observable_values]\n \n #phantom.debug(\"output_observable_values: {}\".format(output_observable_values))\n for observable_item in output_observable_values:\n if observable_item['status'] == \"success\":\n user_name = observable_item['value'].split(\"@\")[0]\n normalized_observable_filter__observable_value.append(user_name)\n fmt_output += \"{} | {} | {} | {} | \\n\".format(observable_item['value'], observable_item['type'], observable_item['message'], observable_item['status'])\n normalized_observable_filter__observable_merge_report.append(fmt_output)\n normalized_observable_filter__observable_value = normalized_observable_filter__observable_value[0]\n normalized_observable_filter__observable_type = \"Disable Account\"\n #phantom.debug(normalized_observable_filter__observable_merge_report)\n", + "warnings": {}, + "x": 0, + "y": 680 + }, + "9": { + "data": { + "advanced": { + "customName": "observable check comment", + "customNameId": 0, + "description": "observable output of input playbooks not exits.", + "join": [], + "note": "observable output of input playbooks not exits." + }, + "functionId": 2, + "functionName": "observable_check_comment", + "id": "9", + "selectMore": false, + "tab": "apis", + "type": "utility", + "utilities": { + "comment": { + "description": "", + "fields": [ + { + "description": "", + "label": "comment", + "name": "comment", + "placeholder": "Enter a comment", + "renderType": "datapath", + "required": true + }, + { + "hidden": true, + "name": "container", + "required": false + }, + { + "hidden": true, + "name": "author", + "required": false + }, + { + "hidden": true, + "name": "trace", + "required": false + } + ], + "label": "add comment", + "name": "comment" + } + }, + "utilityType": "api", + "values": { + "comment": { + "_internal": [ + "container", + "author", + "trace" + ], + "comment": "observable output of input playbooks not exits." + } + } + }, + "errors": {}, + "id": "9", + "type": "utility", + "warnings": {}, + "x": 340, + "y": 686 + } + }, + "notes": "Inputs: users\nActions: Account Locking/Disabling\nOutputs: reports, observables" + }, + "input_spec": null, + "output_spec": null, + "playbook_type": "automation", + "python_version": "3", + "schema": "5.0.9", + "version": "6.0.0.114895" + }, + "create_time": "2023-05-22T11:02:19.665263+00:00", + "draft_mode": false, + "labels": [ + "*" + ], + "tags": [ + "user", + "D3-AL", + "disable_account", + "azure_ad_graph", + "microsoft_ad_ldap", + "aws_iam" + ] +} \ No newline at end of file diff --git a/playbooks/Active_Directory_Disable_Account_Dispatch.png b/playbooks/Active_Directory_Disable_Account_Dispatch.png new file mode 100644 index 0000000000000000000000000000000000000000..047ad681ba5e2d3aa5fa2a476ae278b0cf3792e5 GIT binary patch literal 64546 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 literal 0 HcmV?d00001 diff --git a/playbooks/Active_Directory_Disable_Account_Dispatch.py b/playbooks/Active_Directory_Disable_Account_Dispatch.py new file mode 100644 index 0000000000..700c849343 --- /dev/null +++ b/playbooks/Active_Directory_Disable_Account_Dispatch.py @@ -0,0 +1,315 @@ +""" +Accepts user name that needs to be disabled in Active Directory. Generates a report and observable output based on the status of account locking or disabling. +""" + + +import phantom.rules as phantom +import json +from datetime import datetime, timedelta + + +@phantom.playbook_block() +def on_start(container): + phantom.debug('on_start() called') + + # call 'username_filter' block + username_filter(container=container) + + return + +@phantom.playbook_block() +def dispatch_account_disable(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("dispatch_account_disable() called") + + inputs = { + "playbook_repo": [], + "playbook_tags": ["disable_account"], + "artifact_ids_include": [], + "indicator_tags_exclude": [], + "indicator_tags_include": [], + } + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + # call playbook "community/dispatch_input_playbooks", returns the playbook_run_id + playbook_run_id = phantom.playbook("community/dispatch_input_playbooks", container=container, name="dispatch_account_disable", callback=observable_output_filter, inputs=inputs) + + return + + +@phantom.playbook_block() +def username_filter(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("username_filter() called") + + ################################################################################ + # Filter user name inputs to route inputs to appropriate actions. + ################################################################################ + + # check for 'if' condition 1 + found_match_1 = phantom.decision( + container=container, + conditions=[ + ["artifact:*.cef.act", "!=", ""] + ]) + + # call connected blocks if condition 1 matched + if found_match_1: + dispatch_account_disable(action=action, success=success, container=container, results=results, handle=handle) + return + + # check for 'else' condition 2 + artifacts_check_comment(action=action, success=success, container=container, results=results, handle=handle) + + return + + +@phantom.playbook_block() +def artifacts_check_comment(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("artifacts_check_comment() called") + + ################################################################################ + # no valid username or user principal name artifacts input + ################################################################################ + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.comment(container=container, comment="no valid username or user principal name artifacts input") + + return + + +@phantom.playbook_block() +def observable_output_filter(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("observable_output_filter() called") + + ################################################################################ + # Filter to check if observable output is successfully generated or not. + ################################################################################ + + # check for 'if' condition 1 + found_match_1 = phantom.decision( + container=container, + conditions=[ + ["dispatch_account_disable:playbook_output:observable", "!=", ""] + ]) + + # call connected blocks if condition 1 matched + if found_match_1: + normalized_observable_filter(action=action, success=success, container=container, results=results, handle=handle) + return + + # check for 'else' condition 2 + observable_check_comment(action=action, success=success, container=container, results=results, handle=handle) + + return + + +@phantom.playbook_block() +def normalized_observable_filter(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("normalized_observable_filter() called") + + ################################################################################ + # This block uses custom code for normalizing observable result of input playbooks + # tag as disable_account. The normalized output will be used in merging 4 different + # types of disable_account used to locked users in active directory. + ################################################################################ + + dispatch_account_disable_output_observable = phantom.collect2(container=container, datapath=["dispatch_account_disable:playbook_output:observable"]) + + dispatch_account_disable_output_observable_values = [item[0] for item in dispatch_account_disable_output_observable] + + normalized_observable_filter__observable_value = None + normalized_observable_filter__observable_type = None + normalized_observable_filter__observable_merge_report = None + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + normalized_observable_filter__observable_message = [] + normalized_observable_filter__observable_value = [] + normalized_observable_filter__observable_merge_report = [] + fmt_output = "" + output_observable_values = [(i or "") for i in dispatch_account_disable_output_observable_values] + + #phantom.debug("output_observable_values: {}".format(output_observable_values)) + for observable_item in output_observable_values: + if observable_item['status'] == "success": + user_name = observable_item['value'].split("@")[0] + normalized_observable_filter__observable_value.append(user_name) + fmt_output += "{} | {} | {} | {} | \n".format(observable_item['value'], observable_item['type'], observable_item['message'], observable_item['status']) + normalized_observable_filter__observable_merge_report.append(fmt_output) + normalized_observable_filter__observable_value = normalized_observable_filter__observable_value[0] + normalized_observable_filter__observable_type = "Disable Account" + #phantom.debug(normalized_observable_filter__observable_merge_report) + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_run_data(key="normalized_observable_filter:observable_value", value=json.dumps(normalized_observable_filter__observable_value)) + phantom.save_run_data(key="normalized_observable_filter:observable_type", value=json.dumps(normalized_observable_filter__observable_type)) + phantom.save_run_data(key="normalized_observable_filter:observable_merge_report", value=json.dumps(normalized_observable_filter__observable_merge_report)) + + merge_report(container=container) + + return + + +@phantom.playbook_block() +def observable_check_comment(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("observable_check_comment() called") + + ################################################################################ + # observable output of input playbooks not exits. + ################################################################################ + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.comment(container=container, comment="observable output of input playbooks not exits.") + + return + + +@phantom.playbook_block() +def merge_report(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("merge_report() called") + + ################################################################################ + # summary report for all disable account input playbooks. + ################################################################################ + + template = """SOAR retrieved tickets from Splunk. The table below shows a summary of the information gathered.\\n\\n\n| value | type | message | status |\n| --- | --- | --- | --- |\n%%\n| {0}\n%%\n""" + + # parameter list for template variable replacement + parameters = [ + "normalized_observable_filter:custom_function:observable_merge_report" + ] + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + #phantom.debug(phantom.format(container=container, template=template, parameters=parameters, name="merge_report")) + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.format(container=container, template=template, parameters=parameters, name="merge_report") + + tag_indicators(container=container) + + return + + +@phantom.playbook_block() +def tag_indicators(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("tag_indicators() called") + + ################################################################################ + # adding indicator tag for each disabled account. + ################################################################################ + + normalized_observable_filter__observable_type = json.loads(_ if (_ := phantom.get_run_data(key="normalized_observable_filter:observable_type")) != "" else "null") # pylint: disable=used-before-assignment + normalized_observable_filter__observable_value = json.loads(_ if (_ := phantom.get_run_data(key="normalized_observable_filter:observable_value")) != "" else "null") # pylint: disable=used-before-assignment + + parameters = [] + + parameters.append({ + "tags": normalized_observable_filter__observable_type, + "indicator": normalized_observable_filter__observable_value, + "overwrite": None, + }) + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.custom_function(custom_function="community/indicator_tag", parameters=parameters, name="tag_indicators", callback=update_workbook_task) + + return + + +@phantom.playbook_block() +def update_workbook_task(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("update_workbook_task() called") + + ################################################################################ + # update workbook task of this dispatch playbook + ################################################################################ + + id_value = container.get("id", None) + merge_report = phantom.get_format_data(name="merge_report") + + parameters = [] + + parameters.append({ + "owner": None, + "status": "complete", + "container": id_value, + "task_name": "playbook", + "note_title": "AD Disable Account Report", + "note_content": merge_report, + }) + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.custom_function(custom_function="community/workbook_task_update", parameters=parameters, name="update_workbook_task") + + return + + +@phantom.playbook_block() +def on_finish(container, summary): + phantom.debug("on_finish() called") + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + return \ No newline at end of file diff --git a/playbooks/Active_Directory_Disable_Account_Dispatch.yml b/playbooks/Active_Directory_Disable_Account_Dispatch.yml new file mode 100644 index 0000000000..a559491c4d --- /dev/null +++ b/playbooks/Active_Directory_Disable_Account_Dispatch.yml @@ -0,0 +1,25 @@ +name: Active Directory Disable Account Dispatch +id: 86320591-1bbd-41ab-8990-602a3968fd99 +version: 1 +date: '2023-05-23' +author: Teoderick Contreras, Splunk +type: Investigation +description: Automatically dispatches input playbooks with the 'disable_account' tag. + This will produce a merge report and indicator tag for each inputs. +playbook: Active_Directory_Disable_Account_Dispatch +how_to_implement: This automatic playbook requires "disable_account" tag be present on each input playbook you want to launch. +references: [] +app_list: + - microsoft_ad_ldap + - azure_ad_graph + - aws_iam +tags: + platform_tags: + - user + - D3-AL + - disable_account + playbook_type: Automatic + vpe_type: Modern + playbook_fields: [] + product: + - Splunk SOAR \ No newline at end of file