id: Brute Force Investigation - Generic - SANS version: -1 name: Brute Force Investigation - Generic - SANS description: "This playbook investigates a \"Brute Force\" incident by gathering user and IP information, and calculating the incident severity based on the gathered information and information received from the user. It then performs remediation.\nThis is done based on the phases for handling an incident as they are described in the SANS Institute ‘Incident Handler’s Handbook’ by Patrick Kral.\n\nhttps://www.sans.org/reading-room/whitepapers/incident/incident-handlers-handbook-33901\n\nThe playbook handles the following use-cases:\n\n* Brute Force IP Detected - A detection of source IPs that are exceeding a high threshold of rejected and/or invalid logins. \n* Brute Force Increase Percentage - A detection of large increase percentages in various brute force statistics over different periods of time.\n* Brute Force Potentially Compromised Accounts - A detection of accounts that have shown high amount of failed logins with one successful login.\n\nUsed Sub-playbooks:\n- IP Enrichment - Generic v2\n- Account Enrichment - Generic v2.1\n- Calculate Severity - Critical Assets v2\n- Isolate Endpoint - Generic v2\n- Block Indicators - Generic v3\n- SANS - Lessons Learned\n\n***Disclaimer: This playbook does not ensure compliance to SANS regulations." starttaskid: "0" tasks: "0": id: "0" taskid: e0772674-d7ff-43df-8075-a871655a3f9b type: start task: id: e0772674-d7ff-43df-8075-a871655a3f9b version: -1 name: start_task type: start iscommand: false brand: "" description: '' nexttasks: '#none#': - "61" separatecontext: false view: |- { "position": { "x": 377.5, "y": -1185 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "2": id: "2" taskid: 74815757-2721-4e81-887d-93f17e71172f type: collection task: id: 74815757-2721-4e81-887d-93f17e71172f version: -1 name: Ask user to confirm login attempts description: Sends the user a direct message in Slack requesting that they confirm the account activity. The message includes predefined reply options. The response can also close a task (might be conditional) in a playbook. clonedfrom: 7a39f05d-23c9-412d-8e36-3dd1ba0dd2f2 type: collection iscommand: false brand: "" nexttasks: '#none#': - "16" separatecontext: false view: |- { "position": { "x": 377.5, "y": 180 } } note: false timertriggers: [] ignoreworker: false message: to: complex: root: ActiveDirectory accessor: Users.mail subject: simple: Failed login attempts body: simple: "Hello,\n\nWe have identified several failed login attempts with your user ID. Please confirm or deny that you attempted these logins. " methods: - email format: "" bcc: cc: timings: retriescount: 2 retriesinterval: 360 completeafterreplies: 1 replyOptions: - "Yes" - "No" form: questions: - id: "0" label: "" labelarg: simple: Were the login attempts made by you? required: true gridcolumns: [] defaultrows: [] type: singleSelect options: - "" - "Yes" - "No" optionsarg: [] fieldassociated: "" placeholder: "" tooltip: "" readonly: false - id: "1" label: "" labelarg: simple: If you confirm the multiple failed logins found from your account were made by you, would you like your password to be reset? required: false gridcolumns: [] defaultrows: [] type: singleSelect options: - "" - "Yes" - "No" optionsarg: [] fieldassociated: "" placeholder: "" tooltip: "" readonly: false title: Failed login attempts description: 'We have identified several failed login attempts with your user ID. Please confirm or deny that you attempted these logins. ' sender: "" expired: false totalanswers: 0 skipunavailable: false quietmode: 0 "6": id: "6" taskid: a6c6ce8d-c7aa-4252-8cb3-51969ab9a40d type: condition task: id: a6c6ce8d-c7aa-4252-8cb3-51969ab9a40d version: -1 name: Should the password be reset? description: Answer `yes` if password should be reset. Also checks if Active Directory Query v2 is enabled. type: condition iscommand: false brand: "" nexttasks: '#default#': - "17" "yes": - "7" separatecontext: false conditions: - label: "yes" condition: - - operator: isEqualString left: value: complex: root: Failed login attempts accessor: Answers.1 transformers: - operator: toLowerCase iscontext: true right: value: simple: "yes" - - operator: isExists left: value: complex: root: modules filters: - - operator: isEqualString left: value: simple: modules.brand iscontext: true right: value: simple: Active Directory Query v2 - - operator: isEqualString left: value: simple: modules.state iscontext: true right: value: simple: active iscontext: true view: |- { "position": { "x": -100, "y": 890 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "7": id: "7" taskid: 134b2e1a-1ba3-44e1-8f32-9014dd74e94f type: regular task: id: 134b2e1a-1ba3-44e1-8f32-9014dd74e94f version: -1 name: Active Directory - Expire Password description: Expires the password of an Active Directory user. script: '|||ad-expire-password' clonedfrom: b061d5be-194d-4413-804b-ea47a7f05317 type: regular iscommand: true brand: "" nexttasks: '#none#': - "8" scriptarguments: base-dn: {} username: complex: root: inputs.username separatecontext: false view: |- { "position": { "x": -420, "y": 1060 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "8": id: "8" taskid: c08d6b8b-6ce7-488c-88f5-63c258371cfe type: regular task: id: c08d6b8b-6ce7-488c-88f5-63c258371cfe version: -1 name: Notify User about password reset description: Send an email script: '|||send-mail' clonedfrom: 5e3d77e5-2172-4f74-87b6-c54e0f70fa62 type: regular iscommand: true brand: "" nexttasks: '#none#': - "17" scriptarguments: additionalHeader: {} attachCIDs: {} attachIDs: {} attachNames: {} bcc: {} body: simple: |- Hello, Your account password has been reset through a Cortex XSOAR investigation. Thank you. cc: {} htmlBody: {} raw_message: {} replyTo: {} subject: simple: Your password has been reset templateParams: {} to: complex: root: ActiveDirectory accessor: Users.mail transientFile: {} transientFileCID: {} transientFileContent: {} separatecontext: false view: |- { "position": { "x": -420, "y": 1250 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "9": id: "9" taskid: b19417c3-62f5-49e0-8d6b-a5c87b80f313 type: regular task: id: b19417c3-62f5-49e0-8d6b-a5c87b80f313 version: -1 name: Close Investigation description: Closes the investigation. script: Builtin|||closeInvestigation type: regular iscommand: true brand: Builtin nexttasks: '#none#': - "38" scriptarguments: assetid: {} closeNotes: {} closeReason: {} emailclassification: {} id: {} mndadone: {} phishingconfirmationstatus: {} phishingsubtype: {} separatecontext: false view: |- { "position": { "x": -100, "y": 6935 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "10": id: "10" taskid: ee16a6ce-05cd-47b8-8c92-acaff9ce9de7 type: regular task: id: ee16a6ce-05cd-47b8-8c92-acaff9ce9de7 version: -1 name: Set incident severity to low description: Sets incident severity to low. script: Builtin|||setIncident type: regular iscommand: true brand: Builtin nexttasks: '#none#': - "6" scriptarguments: severity: simple: low separatecontext: false view: |- { "position": { "x": -100, "y": 690 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "12": id: "12" taskid: 74381d29-880c-4adf-8b61-8047ecc709b0 type: playbook task: id: 74381d29-880c-4adf-8b61-8047ecc709b0 version: -1 name: Account Enrichment - Generic v2.1 playbookName: Account Enrichment - Generic v2.1 type: playbook iscommand: false brand: "" description: '' nexttasks: '#none#': - "59" scriptarguments: Username: complex: root: inputs.username separatecontext: true loop: iscommand: false exitCondition: "" wait: 1 max: 0 view: |- { "position": { "x": 150, "y": -520 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "13": id: "13" taskid: 60a2e186-8629-4ce6-83db-1c1197974074 type: title task: id: 60a2e186-8629-4ce6-83db-1c1197974074 version: -1 name: Enrich Indicators type: title iscommand: false brand: "" description: '' nexttasks: '#none#': - "12" - "14" separatecontext: false view: |- { "position": { "x": 377.5, "y": -665 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "14": id: "14" taskid: e6aba170-90f5-43e8-897a-fe08aacc5914 type: playbook task: id: e6aba170-90f5-43e8-897a-fe08aacc5914 version: -1 name: IP Enrichment - Generic v2 description: |- Enrich IP addresses using one or more integrations. - Resolve IP addresses to hostnames (DNS) - Provide threat information - Separate internal and external IP addresses - For internal IP addresses, get host information playbookName: IP Enrichment - Generic v2 type: playbook iscommand: false brand: "" nexttasks: '#none#': - "59" scriptarguments: IP: complex: root: IP accessor: Address transformers: - operator: append args: item: value: simple: incident.src iscontext: true - operator: append args: item: value: simple: incident.dest iscontext: true InternalRange: complex: root: inputs.internal_range ResolveIP: simple: "True" separatecontext: true loop: iscommand: false exitCondition: "" wait: 1 max: 0 view: |- { "position": { "x": 620, "y": -520 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "15": id: "15" taskid: 35bc4f61-5c39-4f25-8268-0bb8d4cff00d type: regular task: id: 35bc4f61-5c39-4f25-8268-0bb8d4cff00d version: -1 name: Manual - Asses the scope of the impact description: "" type: regular iscommand: false brand: "" nexttasks: '#none#': - "34" separatecontext: false view: |- { "position": { "x": 645, "y": 5095 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "16": id: "16" taskid: bdf41c9f-279a-4b88-8321-9598dcc1cab4 type: condition task: id: bdf41c9f-279a-4b88-8321-9598dcc1cab4 version: -1 name: User confirmed the account activity? description: "" type: condition iscommand: false brand: "" nexttasks: '#default#': - "51" "yes": - "53" separatecontext: false conditions: - label: "yes" condition: - - operator: isEqualString left: value: complex: root: Failed login attempts accessor: Answers.0 transformers: - operator: toLowerCase iscontext: true right: value: simple: "yes" view: |- { "position": { "x": 377.5, "y": 360 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "17": id: "17" taskid: 16f2fdb2-16dc-4ab7-8a1c-7bbce9cad2da type: title task: id: 16f2fdb2-16dc-4ab7-8a1c-7bbce9cad2da version: -1 name: Lessons Learned description: |- A script to generate investigation summary report in an automated way. Can be used in the post-processing flow as well. type: title iscommand: false brand: "" nexttasks: '#none#': - "69" separatecontext: false view: |- { "position": { "x": -100, "y": 6030 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "18": id: "18" taskid: 53bfefd7-13b2-45a0-8a5e-0507a8cd6db5 type: title task: id: 53bfefd7-13b2-45a0-8a5e-0507a8cd6db5 version: -1 name: Containment type: title iscommand: false brand: "" description: '' nexttasks: '#none#': - "63" separatecontext: false view: |- { "position": { "x": 645, "y": 1960 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "19": id: "19" taskid: 88be23ac-6010-43bd-809c-82f56d83b20f type: regular task: id: 88be23ac-6010-43bd-809c-82f56d83b20f version: -1 name: Active Directory - expire password description: Expires the password of an Active Directory user. script: '|||ad-expire-password' clonedfrom: b061d5be-194d-4413-804b-ea47a7f05317 type: regular iscommand: true brand: "" nexttasks: '#none#': - "21" scriptarguments: base-dn: {} username: complex: root: inputs.username separatecontext: false view: |- { "position": { "x": 365, "y": 2840 } } note: false timertriggers: [] ignoreworker: false fieldMapping: - incidentfield: Password Expiration Status output: simple: Password is expired. skipunavailable: false quietmode: 0 "21": id: "21" taskid: 652af55c-a6c7-4538-8c70-0c3e309f77ca type: regular task: id: 652af55c-a6c7-4538-8c70-0c3e309f77ca version: -1 name: Active Directory - disable account description: Disables an Active Directory user account. script: '|||ad-disable-account' type: regular iscommand: true brand: "" nexttasks: '#none#': - "64" scriptarguments: base-dn: {} username: complex: root: inputs.username separatecontext: false view: |- { "position": { "x": 365, "y": 3020 } } note: false timertriggers: [] ignoreworker: false fieldMapping: - incidentfield: User Disabled Status output: simple: Used has been disabled. skipunavailable: false quietmode: 0 "22": id: "22" taskid: 079d0d8e-2d57-4a3b-8402-ff07c0d85f47 type: playbook task: id: 079d0d8e-2d57-4a3b-8402-ff07c0d85f47 version: -1 name: Isolate Endpoint - Generic V2 description: |- This playbook isolates a given endpoint using various endpoint product integrations. Make sure to provide valid playbook inputs for the integration you are using. playbookName: Isolate Endpoint - Generic V2 type: playbook iscommand: false brand: "" nexttasks: '#none#': - "72" scriptarguments: Endpoint_id: complex: root: inputs.traps_endpoint_id separatecontext: true loop: iscommand: false exitCondition: "" wait: 1 max: 0 view: |- { "position": { "x": 370, "y": 2440 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "29": id: "29" taskid: ae347de2-d9b9-4eb9-88af-ae193b01d828 type: collection task: id: ae347de2-d9b9-4eb9-88af-ae193b01d828 version: -1 name: Perform manual investigation for malicious artifacts description: Perform manual investigation for malicious artifacts and affected systems. type: collection iscommand: false brand: "" nexttasks: '#none#': - "31" separatecontext: false view: |- { "position": { "x": 645, "y": 3630 } } note: false timertriggers: [] ignoreworker: false message: to: subject: body: simple: Insert IOCs found in the manual investigation. methods: [] format: "" bcc: cc: timings: retriescount: 2 retriesinterval: 360 completeafterreplies: 1 form: questions: - id: "0" label: "" labelarg: simple: MD5 required: false gridcolumns: [] defaultrows: [] type: shortText options: [] optionsarg: [] fieldassociated: "" placeholder: "" tooltip: "" readonly: false - id: "1" label: "" labelarg: simple: SHA1 required: false gridcolumns: [] defaultrows: [] type: shortText options: [] optionsarg: [] fieldassociated: "" placeholder: "" tooltip: "" readonly: false - id: "2" label: "" labelarg: simple: SHA256 required: false gridcolumns: [] defaultrows: [] type: shortText options: [] optionsarg: [] fieldassociated: "" placeholder: "" tooltip: "" readonly: false - id: "3" label: "" labelarg: simple: IP Addresses required: false gridcolumns: [] defaultrows: [] type: shortText options: [] optionsarg: [] fieldassociated: "" placeholder: "" tooltip: "" readonly: false - id: "4" label: "" labelarg: simple: URLs required: false gridcolumns: [] defaultrows: [] type: shortText options: [] optionsarg: [] fieldassociated: "" placeholder: "" tooltip: "" readonly: false - id: "5" label: "" labelarg: simple: Domains required: false gridcolumns: [] defaultrows: [] type: shortText options: [] optionsarg: [] fieldassociated: "" placeholder: "" tooltip: "" readonly: false title: IOCs found in investigation description: Insert a comma-separated list of IOCs found in the manual investigation. sender: "" expired: false totalanswers: 0 skipunavailable: false quietmode: 0 "31": id: "31" taskid: e14ad9c1-c5aa-4bb1-8047-85e75b8ac8de type: title task: id: e14ad9c1-c5aa-4bb1-8047-85e75b8ac8de version: -1 name: Eradication type: title iscommand: false brand: "" description: '' nexttasks: '#none#': - "66" separatecontext: false view: |- { "position": { "x": 645, "y": 3820 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "32": id: "32" taskid: 192cbf41-d000-4661-890d-70190ffc7222 type: condition task: id: 192cbf41-d000-4661-890d-70190ffc7222 version: -1 name: Were IOCs found in the investigation? description: "" type: condition iscommand: false brand: "" nexttasks: '#default#': - "33" "yes": - "71" separatecontext: false conditions: - label: "yes" condition: - - operator: isExists left: value: complex: root: IP filters: - - operator: isExists left: value: simple: IP.Malicious iscontext: true accessor: Address iscontext: true - operator: isExists left: value: complex: root: URL filters: - - operator: isExists left: value: simple: URL.Malicious iscontext: true accessor: Data iscontext: true - operator: isNotEmpty left: value: simple: IOCs found in investigation.Answers.0 iscontext: true - operator: isNotEmpty left: value: simple: IOCs found in investigation.Answers.1 iscontext: true - operator: isNotEmpty left: value: simple: IOCs found in investigation.Answers.2 iscontext: true - operator: isNotEmpty left: value: simple: IOCs found in investigation.Answers.3 iscontext: true - operator: isNotEmpty left: value: simple: IOCs found in investigation.Answers.4 iscontext: true - operator: isNotEmpty left: value: simple: IOCs found in investigation.Answers.5 iscontext: true view: |- { "position": { "x": 645, "y": 4150 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "33": id: "33" taskid: 9ae73d2f-e22c-45ee-8644-100bc522c3ca type: title task: id: 9ae73d2f-e22c-45ee-8644-100bc522c3ca version: -1 name: Recovery type: title iscommand: false brand: "" description: '' nexttasks: '#none#': - "67" separatecontext: false view: |- { "position": { "x": 645, "y": 4740 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "34": id: "34" taskid: 7e426703-bd6a-4241-87fe-bc10829c175b type: condition task: id: 7e426703-bd6a-4241-87fe-bc10829c175b version: -1 name: Would you like to perform auto-recovery? description: "" type: condition iscommand: false brand: "" nexttasks: "No": - "36" "Yes": - "73" separatecontext: false view: |- { "position": { "x": 645, "y": 5290 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "35": id: "35" taskid: 2c5023c5-0834-4e26-8600-f4450be49838 type: regular task: id: 2c5023c5-0834-4e26-8600-f4450be49838 version: -1 name: Active Directory - enable account description: Enables a previously disabled Active Directory account. script: '|||ad-enable-account' type: regular iscommand: true brand: "" nexttasks: '#none#': - "36" scriptarguments: base-dn: {} username: complex: root: inputs.username separatecontext: false view: |- { "position": { "x": 1230, "y": 5660 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "36": id: "36" taskid: 8ea55c61-861d-425b-89e3-1424bc4640e8 type: regular task: id: 8ea55c61-861d-425b-89e3-1424bc4640e8 version: -1 name: Manual - unisolate affected systems description: "" type: regular iscommand: false brand: "" nexttasks: '#none#': - "17" separatecontext: false view: |- { "position": { "x": 645, "y": 5860 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "38": id: "38" taskid: 0ad8584d-38a9-46d1-8dc8-36ebf514ea8c type: title task: id: 0ad8584d-38a9-46d1-8dc8-36ebf514ea8c version: -1 name: Done type: title iscommand: false brand: "" description: '' separatecontext: false view: |- { "position": { "x": -100, "y": 7120 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "41": id: "41" taskid: 9f215dcb-f1e0-4d6a-829e-2e5cee2ee0bb type: title task: id: 9f215dcb-f1e0-4d6a-829e-2e5cee2ee0bb version: -1 name: Remediation type: title iscommand: false brand: "" description: '' nexttasks: '#none#': - "43" separatecontext: false view: |- { "position": { "x": 920, "y": 1635 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "42": id: "42" taskid: 6a85df27-543c-4fc3-882d-c455546080a6 type: title task: id: 6a85df27-543c-4fc3-882d-c455546080a6 version: -1 name: Investigation type: title iscommand: false brand: "" description: '' nexttasks: '#none#': - "52" separatecontext: false view: |- { "position": { "x": 377.5, "y": -165 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "43": id: "43" taskid: 447c8b64-6114-44a6-88eb-8606e9014983 type: condition task: id: 447c8b64-6114-44a6-88eb-8606e9014983 version: -1 name: Auto remediation? description: "" type: condition iscommand: false brand: "" nexttasks: '#default#': - "44" "yes": - "18" separatecontext: false conditions: - label: "yes" condition: - - operator: greaterThanOrEqual left: value: complex: root: incident accessor: severity iscontext: true right: value: complex: root: inputs.severity_threshold iscontext: true view: |- { "position": { "x": 920, "y": 1790 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "44": id: "44" taskid: c969a2b3-794b-49d4-83d7-1ad653e45695 type: regular task: id: c969a2b3-794b-49d4-83d7-1ad653e45695 version: -1 name: Manual remediation description: "" type: regular iscommand: false brand: "" nexttasks: '#none#': - "33" separatecontext: false view: |- { "position": { "x": 1200, "y": 1960 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "46": id: "46" taskid: 666eabcf-cf52-4081-8cf3-8d62cb16e9a9 type: condition task: id: 666eabcf-cf52-4081-8cf3-8d62cb16e9a9 version: -1 name: Was there a successful login? description: "" type: condition iscommand: false brand: "" nexttasks: '#default#': - "57" "no": - "41" "yes": - "60" separatecontext: false conditions: - label: "yes" condition: - - operator: isEqualString left: value: complex: root: incident accessor: successfullogin transformers: - operator: toLowerCase iscontext: true right: value: simple: "yes" - label: "no" condition: - - operator: isEqualString left: value: complex: root: incident accessor: successfullogin transformers: - operator: toLowerCase iscontext: true right: value: simple: "no" view: |- { "position": { "x": 920, "y": 900 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "47": id: "47" taskid: 8af55a8d-64c9-4ca3-8a7c-61fc6a48991a type: regular task: id: 8af55a8d-64c9-4ca3-8a7c-61fc6a48991a version: -1 name: Set incident severity description: Set incident severity. script: Builtin|||setIncident type: regular iscommand: true brand: Builtin nexttasks: '#none#': - "46" scriptarguments: severity: complex: root: Severities accessor: CriticalAssetsSeverity separatecontext: false view: |- { "position": { "x": 920, "y": 710 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "50": id: "50" taskid: 67d108c6-0cf1-4b77-8bdd-97db28bd1340 type: regular task: id: 67d108c6-0cf1-4b77-8bdd-97db28bd1340 version: -1 name: Manual - close investigation in the source product description: "" type: regular iscommand: false brand: "" nexttasks: '#none#': - "9" separatecontext: false view: |- { "position": { "x": -100, "y": 6750 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "51": id: "51" taskid: 31aa999f-3bb9-4a70-8d41-53a25c93eeba type: playbook task: id: 31aa999f-3bb9-4a70-8d41-53a25c93eeba version: -1 name: Calculate Severity - Critical Assets v2 description: |- Determines if a critical assest is associated with the invesigation. The playbook returns a severity level of "Critical" if at least one critical asset is associated with the investigation. Critical assets refer to: users, user groups, endpoints and endpoint groups. playbookName: Calculate Severity - Critical Assets v2 type: playbook iscommand: false brand: "" nexttasks: '#none#': - "47" scriptarguments: Account: complex: root: Account transformers: - operator: uniq CriticalEndpoints: complex: root: inputs.critical_endpoints CriticalGroups: complex: root: inputs.critical_groups CriticalUsers: complex: root: inputs.critical_users Endpoint: complex: root: Endpoint filters: - - operator: IsInCidrRanges left: value: simple: Endpoint.IP iscontext: true right: value: simple: inputs.internal_range iscontext: true transformers: - operator: uniq separatecontext: true loop: iscommand: false exitCondition: "" wait: 1 max: 0 view: |- { "position": { "x": 920, "y": 530 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "52": id: "52" taskid: 2a61c44f-8553-44a3-8210-2d55065e5829 type: condition task: id: 2a61c44f-8553-44a3-8210-2d55065e5829 version: -1 name: Communicate with user? description: "" type: condition iscommand: false brand: "" nexttasks: '#default#': - "51" "yes": - "2" separatecontext: false conditions: - label: "yes" condition: - - operator: lessThanOrEqual left: value: complex: root: incident accessor: loginattemptcount iscontext: true right: value: complex: root: inputs.logins_count_threshold iscontext: true view: |- { "position": { "x": 377.5, "y": -20 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "53": id: "53" taskid: 4acb3776-cc42-4bd1-85e0-00216c810e21 type: title task: id: 4acb3776-cc42-4bd1-85e0-00216c810e21 version: -1 name: False Positive type: title iscommand: false brand: "" description: '' nexttasks: '#none#': - "10" separatecontext: false view: |- { "position": { "x": -100, "y": 530 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "54": id: "54" taskid: 3ff1034c-8d81-49af-858a-9bc6f814a705 type: regular task: id: 3ff1034c-8d81-49af-858a-9bc6f814a705 version: -1 name: Raise incident severity description: Increases the incident severity. script: Builtin|||setIncident type: regular iscommand: true brand: Builtin nexttasks: '#none#': - "41" scriptarguments: severity: complex: root: incident accessor: severity transformers: - operator: addition args: by: value: simple: "1" separatecontext: false view: |- { "position": { "x": 1150, "y": 1460 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "56": id: "56" taskid: 0fd8dd83-9924-421f-8235-7381201063a9 type: condition task: id: 0fd8dd83-9924-421f-8235-7381201063a9 version: -1 name: Was there a successful login? description: "" type: condition iscommand: false brand: "" nexttasks: '#default#': - "72" "yes": - "22" separatecontext: false conditions: - label: "yes" condition: - - operator: containsString left: value: complex: root: incident accessor: successfullogin transformers: - operator: toLowerCase iscontext: true right: value: simple: "yes" view: |- { "position": { "x": 645, "y": 2270 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "57": id: "57" taskid: 61179f6d-fece-4cc1-82cb-5a2311a4771d type: condition task: id: 61179f6d-fece-4cc1-82cb-5a2311a4771d version: -1 name: Manual - was there a successful login? description: "" type: condition iscommand: false brand: "" nexttasks: "no": - "41" "yes": - "60" separatecontext: false view: |- { "position": { "x": 1630, "y": 1070 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "59": id: "59" taskid: 48cdf688-1ef8-4558-8c5e-d72a068e9f2b type: regular task: id: 48cdf688-1ef8-4558-8c5e-d72a068e9f2b version: -1 name: Set Incident description: commands.local.cmd.set.incident script: Builtin|||setIncident type: regular iscommand: true brand: Builtin nexttasks: '#none#': - "42" scriptarguments: accountgroups: complex: root: ActiveDirectory accessor: Users.memberOf emailaddress: complex: root: ActiveDirectory accessor: Users.mail samaccountname: complex: root: ActiveDirectory accessor: Users.sAMAccountName useraccountcontrol: complex: root: ActiveDirectory accessor: Users.userAccountControl separatecontext: false view: |- { "position": { "x": 377.5, "y": -350 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "60": id: "60" taskid: e3815d94-afa6-4c6c-8d32-d1aff297e699 type: condition task: id: e3815d94-afa6-4c6c-8d32-d1aff297e699 version: -1 name: Can incident severity be raised? description: "" type: condition iscommand: false brand: "" nexttasks: '#default#': - "41" "yes": - "54" separatecontext: false conditions: - label: "yes" condition: - - operator: isNotEqualString left: value: simple: incident.severity iscontext: true right: value: simple: "4" view: |- { "position": { "x": 1150, "y": 1260 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "61": id: "61" taskid: c176b3e6-9f16-415a-84fe-3582d080afb2 type: title task: id: c176b3e6-9f16-415a-84fe-3582d080afb2 version: -1 name: Identification type: title iscommand: false brand: "" description: '' nexttasks: '#none#': - "62" separatecontext: false view: |- { "position": { "x": 377.5, "y": -1020 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "62": id: "62" taskid: 4ba51448-709e-43c9-88dc-21b6012b0a72 type: regular task: id: 4ba51448-709e-43c9-88dc-21b6012b0a72 version: -1 name: Set SANS stage to Identification description: Sets the SANS stage to Identification. script: Builtin|||setIncident type: regular iscommand: true brand: Builtin nexttasks: '#none#': - "13" scriptarguments: isolated: simple: Isolated destination endpoint. sansstage: simple: Identification separatecontext: false view: |- { "position": { "x": 377.5, "y": -860 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "63": id: "63" taskid: fcf8e153-90a9-4f5a-879d-355d3df04eb3 type: regular task: id: fcf8e153-90a9-4f5a-879d-355d3df04eb3 version: -1 name: Set SANS stage to Containment description: Set SANS stage to Containment script: Builtin|||setIncident type: regular iscommand: true brand: Builtin nexttasks: '#none#': - "56" scriptarguments: sansstage: simple: Containment separatecontext: false view: |- { "position": { "x": 645, "y": 2100 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "64": id: "64" taskid: 8271bae3-120a-4620-8a69-1b5e5bbeea97 type: regular task: id: 8271bae3-120a-4620-8a69-1b5e5bbeea97 version: -1 name: Generate investigation summary report description: |- A script to generate the investigation summary report in an automated way. The report can be used in the post-processing flow as well. scriptName: GenerateInvestigationSummaryReport type: regular iscommand: false brand: "" nexttasks: '#none#': - "65" scriptarguments: incidentId: {} name: {} type: {} separatecontext: false view: |- { "position": { "x": 645, "y": 3270 } } note: false timertriggers: [] ignoreworker: false skipunavailable: true quietmode: 0 "65": id: "65" taskid: e2fc0319-5d9b-467f-899f-008899c65549 type: regular task: id: e2fc0319-5d9b-467f-899f-008899c65549 version: -1 name: Manual - system backup description: "" type: regular iscommand: false brand: "" nexttasks: '#none#': - "29" separatecontext: false view: |- { "position": { "x": 645, "y": 3450 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "66": id: "66" taskid: 0a25ea0d-af5d-4c26-8e55-a3d9cb653f16 type: regular task: id: 0a25ea0d-af5d-4c26-8e55-a3d9cb653f16 version: -1 name: Set SANS stage to Eradication description: Set SANS stage to Eradication. script: Builtin|||setIncident type: regular iscommand: true brand: Builtin nexttasks: '#none#': - "32" scriptarguments: sansstage: simple: Eradication separatecontext: false view: |- { "position": { "x": 645, "y": 3970 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "67": id: "67" taskid: 069d98a1-fbc9-4c05-80a1-e40897784288 type: regular task: id: 069d98a1-fbc9-4c05-80a1-e40897784288 version: -1 name: Set SANS stage to Recovery description: Set SANS stage to Recovery. script: Builtin|||setIncident type: regular iscommand: true brand: Builtin nexttasks: '#none#': - "15" scriptarguments: sansstage: simple: Recovery separatecontext: false view: |- { "position": { "x": 645, "y": 4910 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "68": id: "68" taskid: 526f3b03-df26-479f-8690-51c7c35f272b type: regular task: id: 526f3b03-df26-479f-8690-51c7c35f272b version: -1 name: Generate investigation summary report description: |- A script to generate the investigation summary report in an automated way. The report can be used in the post-processing flow as well. scriptName: GenerateInvestigationSummaryReport type: regular iscommand: false brand: "" nexttasks: '#none#': - "50" scriptarguments: incidentId: {} name: {} type: {} separatecontext: false view: |- { "position": { "x": -100, "y": 6570 } } note: false timertriggers: [] ignoreworker: false skipunavailable: true quietmode: 0 "69": id: "69" taskid: 23d6a993-26a0-437c-8e2e-98fd7a98eba3 type: regular task: id: 23d6a993-26a0-437c-8e2e-98fd7a98eba3 version: -1 name: Set SANS stage to Lessons Learned description: Set SANS stage to Lessons Learned. script: Builtin|||setIncident type: regular iscommand: true brand: Builtin nexttasks: '#none#': - "70" scriptarguments: sansstage: simple: Lessons Learned separatecontext: false view: |- { "position": { "x": -100, "y": 6180 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "70": id: "70" taskid: 9c5fcc46-a866-4db1-86d5-41ae5e0a3254 type: playbook task: id: 9c5fcc46-a866-4db1-86d5-41ae5e0a3254 version: -1 name: SANS - Lessons Learned playbookName: SANS - Lessons Learned type: playbook iscommand: false brand: "" description: '' nexttasks: '#none#': - "68" scriptarguments: DataCollection: complex: root: inputs.DataCollection Email: complex: root: inputs.Email separatecontext: true loop: iscommand: false exitCondition: "" wait: 1 max: 0 view: |- { "position": { "x": -100, "y": 6370 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "71": id: "71" taskid: f3465b30-8164-4b22-80d8-395892c92a9c type: condition task: id: f3465b30-8164-4b22-80d8-395892c92a9c version: -1 name: Block IOCs? description: "" type: condition iscommand: false brand: "" nexttasks: "no": - "33" "yes": - "74" separatecontext: false view: |- { "position": { "x": 330, "y": 4320 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "72": id: "72" taskid: fa8d3291-be53-4f18-8636-84b807db1564 type: condition task: id: fa8d3291-be53-4f18-8636-84b807db1564 version: -1 name: Is Active Directory enabled? description: Checks whether the Active Directory Query v2 integration is enabled. type: condition iscommand: false brand: "" nexttasks: '#default#': - "64" "yes": - "19" separatecontext: false conditions: - label: "yes" condition: - - operator: isExists left: value: complex: root: modules filters: - - operator: isEqualString left: value: simple: modules.brand iscontext: true right: value: simple: Active Directory Query v2 - - operator: isEqualString left: value: simple: modules.state iscontext: true right: value: simple: active iscontext: true view: |- { "position": { "x": 645, "y": 2630 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 "73": id: "73" taskid: 9f3767c8-2d9c-4136-8d0a-0f2f49b24670 type: condition task: id: 9f3767c8-2d9c-4136-8d0a-0f2f49b24670 version: -1 name: Is Active Directory enabled? description: Checks whether the Active Directory Query v2 integration is enabled. type: condition iscommand: false brand: "" nexttasks: '#default#': - "36" "yes": - "35" separatecontext: false conditions: - label: "yes" condition: - - operator: isExists left: value: complex: root: modules filters: - - operator: isEqualString left: value: simple: modules.brand iscontext: true right: value: simple: Active Directory Query v2 - - operator: isEqualString left: value: simple: modules.state iscontext: true right: value: simple: active iscontext: true view: |- { "position": { "x": 1000, "y": 5475 } } note: false timertriggers: [] ignoreworker: false skipunavailable: false quietmode: 0 isoversize: false isautoswitchedtoquietmode: false "74": id: "74" taskid: a8212ed7-7938-4a42-8288-56706db62643 type: playbook task: id: a8212ed7-7938-4a42-8288-56706db62643 version: -1 name: Block Indicators - Generic v3 description: |+ This playbook blocks malicious Indicators using all integrations that are enabled, using the following sub-playbooks: - Block URL - Generic v2 - Block Account - Generic v2 - Block IP - Generic v3 - Block File - Generic v2 - Block Email - Generic v2 - Block Domain - Generic v2 playbookName: Block Indicators - Generic v3 type: playbook iscommand: false brand: "" nexttasks: '#none#': - "33" scriptarguments: AutoBlockIndicators: complex: root: inputs.AutoBlockIndicators AutoCommit: complex: root: inputs.AutoCommit CustomBlockRule: complex: root: inputs.CustomBlockRule CustomURLCategory: complex: root: inputs.CustomURLCategory DAG: complex: root: inputs.DAG EDLServerIP: complex: root: inputs.EDLServerIP IP: complex: root: DBotScore filters: - - operator: isEqualString left: value: simple: DBotScore.Type iscontext: true right: value: simple: ip ignorecase: true - - operator: greaterThanOrEqual left: value: simple: DBotScore.Score iscontext: true right: value: simple: "3" accessor: Indicator transformers: - operator: append args: item: value: simple: IOCs found in investigation.Answers.3 iscontext: true - operator: uniq InputEnrichment: simple: "False" MD5: complex: root: File filters: - - operator: isExists left: value: simple: File.Malicious iscontext: true accessor: MD5 transformers: - operator: append args: item: value: simple: IOCs found in investigation.Answers.0 iscontext: true - operator: uniq SHA256: complex: root: File filters: - - operator: isExists left: value: simple: File.Malicious iscontext: true accessor: SHA256 transformers: - operator: append args: item: value: simple: IOCs found in investigation.Answers.2 iscontext: true - operator: uniq StaticAddressGroup: complex: root: inputs.StaticAddressGroup URL: complex: root: DBotScore filters: - - operator: isEqualString left: value: simple: DBotScore.Type iscontext: true right: value: simple: url ignorecase: true - - operator: greaterThanOrEqual left: value: simple: DBotScore.Score iscontext: true right: value: simple: "3" accessor: Indicator transformers: - operator: append args: item: value: simple: IOCs found in investigation.Answers.4 iscontext: true UserVerification: complex: root: inputs.UserVerification Username: complex: root: DBotScore filters: - - operator: isEqualString left: value: simple: DBotScore.Type iscontext: true right: value: simple: username ignorecase: true - - operator: greaterThanOrEqual left: value: simple: DBotScore.Score iscontext: true right: value: simple: "3" accessor: Indicator transformers: - operator: uniq categories: complex: root: inputs.categories device-group: complex: root: inputs.device-group type: complex: root: inputs.type separatecontext: true continueonerrortype: "" loop: iscommand: false exitCondition: "" wait: 1 max: 100 view: |- { "position": { "x": 330, "y": 4570 } } note: false timertriggers: [] ignoreworker: false skipunavailable: true quietmode: 0 isoversize: false isautoswitchedtoquietmode: false system: true view: |- { "linkLabelsPosition": { "16_51_#default#": 0.44, "16_53_yes": 0.47, "32_33_#default#": 0.27, "34_36_No": 0.51, "34_73_Yes": 0.33, "46_41_no": 0.33, "46_60_yes": 0.53, "52_2_yes": 0.59, "56_22_yes": 0.59, "57_41_no": 0.19, "6_17_#default#": 0.1, "71_74_yes": 0.73, "72_19_yes": 0.55, "73_35_yes": 0.76, "73_36_#default#": 0.21 }, "paper": { "dimensions": { "height": 8370, "width": 2430, "x": -420, "y": -1185 } } } inputs: - key: username value: complex: root: incident accessor: username required: true description: Username of the user who is suspected of the activity. playbookInputQuery: - key: traps_endpoint_id value: complex: root: incident accessor: agentid required: false description: Traps endpoint ID, used for endpoint isolation. playbookInputQuery: - key: logins_count_threshold value: simple: "10" required: false description: The threshold for number of logins, from which the investigation and remediation will start automatically without waiting for the user's reply. Default is 10. playbookInputQuery: - key: severity_threshold value: simple: "4" required: false description: "The threshold for the severity value from which an automatic remediation takes place. \nSpecify the severity number (default is Critical):\n0 - Unknown\n0.5 - Informational\n1 - Low\n2 - Medium\n3 - High\n4 - Critical" playbookInputQuery: - key: internal_range value: complex: root: lists accessor: PrivateIPs transformers: - operator: RegexExtractAll args: error_if_no_match: {} ignore_case: {} multi_line: {} period_matches_newline: {} regex: value: simple: (\b(?:\d{1,3}\.){3}\d{1,3}\b/\d{1,2}) unpack_matches: {} - operator: join args: separator: value: simple: ',' required: false description: 'A list of internal IP ranges to check IP addresses against. The comma-separated list should be provided in CIDR notation. For example, a list of ranges would be: "172.16.0.0/12,10.0.0.0/8,192.168.0.0/16" (without quotes).' playbookInputQuery: - key: critical_users value: {} required: false description: 'Critical users, separated by comma.' playbookInputQuery: - key: critical_endpoints value: {} required: false description: Critical endpoints, separated by comma. playbookInputQuery: - key: critical_groups value: {} required: false description: Critical groups, separated by comma. playbookInputQuery: - key: CustomBlockRule value: simple: "True" required: false description: |- This input determines whether Palo Alto Networks Panorama or Firewall Custom Block Rules are used. Specify True to use Custom Block Rules. playbookInputQuery: - key: AutoCommit value: simple: "No" required: false description: |- This input determines whether Palo Alto Networks Panorama or Firewall Static Address Groups are used. Specify the Static Address Group name for IP handling. playbookInputQuery: - key: DAG value: {} required: false description: |- This input determines whether Palo Alto Networks Panorama or Firewall Dynamic Address Groups are used. Specify the Dynamic Address Group tag name for IP handling. playbookInputQuery: - key: StaticAddressGroup value: {} required: false description: |- This input determines whether Palo Alto Networks Panorama or Firewall Static Address Groups are used. Specify the Static Address Group name for IP handling. playbookInputQuery: - key: CustomURLCategory value: simple: XSOAR Remediation - Malicious URLs required: false description: Custom URL Category name. playbookInputQuery: - key: type value: {} required: false description: Custom URL category type. Insert "URL List"/ "Category Match". playbookInputQuery: - key: device-group value: {} required: false description: Device group for the Custom URL Category (Panorama instances). playbookInputQuery: - key: categories value: {} required: false description: The list of categories. Relevant from PAN-OS v9.x. playbookInputQuery: - key: EDLServerIP value: {} required: false description: |- This input determines whether Palo Alto Networks Panorama or Firewall External Dynamic Lists are used: * The IP address of the web server on which the files are stored. * The web server IP address is configured in the integration instance. playbookInputQuery: - key: UserVerification value: simple: "False" required: false description: "Possible values: True/False. \nWhether to provide user verification for blocking IPs. \n\nFalse - No prompt will be displayed to the user.\nTrue - The server will ask the user for blocking verification and will display the blocking list." playbookInputQuery: - key: AutoBlockIndicators value: simple: "True" required: false description: |- Possible values: True/False. Default: True. Should the given indicators be automatically blocked, or should the user be given the option to choose? If set to True - no prompt will appear, and all provided indicators will be blocked automatically. If set to False - the user will be prompted to select which indicators to block. playbookInputQuery: - key: Email value: {} required: false description: Email address to which to send the questions. playbookInputQuery: - key: DataCollection value: {} required: false description: Use a data collection task to answer lessons learned questions based on SANS. Specify 'True' to automatically send the communication task, and 'False' to prevent it. playbookInputQuery: outputs: [] fromversion: 6.5.0 tests: - No test