Impossible Traveler Response

This playbook handles impossible traveler alerts. An Impossible Traveler event occurs when multiple login attempts seen for a user from multiple remote countries in a short period of time, which shouldn't be possible. This may indicate the account is compromised. **Attacker's Goals:** Gain user-account credentials. **Investigative Actions:** Investigate the IP addresses and identities involved in the detected activity using: * Impossible Traveler - Enrichment playbook * CalculateGeoDistance automation **Response Actions** The playbook's first response actions are based on the data available within the alert. In that phase, the playbook will execute: * Manual block indicators if the IP address found malicious * Manual disable user * Manual clear of the user’s sessions (Okta) When the playbook continues, after validating the activity with the user’s manager, another phase of response actions is being executed, which includes: * Auto block indicators **External Resources:** [Impossible traveler alert](https://docs-cortex.paloaltonetworks.com/r/Cortex-XDR-Analytics-Alert-Reference/Impossible-traveler-SSO)

Core · 26 tasks · 28 inputs · 21 outputs

Details

IDImpossible Traveler Response
From Version6.6.0
Tasks26

README

This playbook handles impossible traveler alerts.

An Impossible Traveler event occurs when multiple login attempts seen for a user from multiple remote countries in a short period of time, which shouldn’t be possible. This may indicate the account is compromised.

Attacker’s Goals:

Gain user-account credentials.

Investigative Actions:

Investigate the IP addresses and identities involved in the detected activity using:

  • Impossible Traveler - Enrichment playbook
  • CalculateGeoDistance automation

Response Actions

The playbook’s first response actions are based on the data available within the alert. In that phase, the playbook will execute:

  • Manual block indicators if the IP address found malicious
  • Manual disable user
  • Manual clear of the user’s sessions (Okta)

When the playbook continues, after validating the activity with the user’s manager, another phase of response actions is being executed, which includes:

  • Auto block indicators

External Resources:

Impossible traveler alert

Dependencies

This playbook uses the following sub-playbooks, integrations, and scripts.

Sub-playbooks

  • Containment Plan
  • Impossible Traveler - Enrichment
  • Ticket Management - Generic

Integrations

This playbook does not use any integrations.

Scripts

  • impossibleTravelerGetDistance
  • Set
  • CreateArray

Commands

  • closeInvestigation
  • setParentIncidentFields

Playbook Inputs


Name Description Default Value Required
MaxMilesPerHourAllowed The maximum miles per hour that is considered reasonable. If the geographical distance and difference in time between logins is greater than this value, the user will be considered an impossible traveler. 400 Optional
WhitelistedIPs A comma separated list of IP addresses that are allowed to be used across long distances.   Optional
ContactUserManager Whether to ask the user manager for the legitimacy of the login events, in case of an alleged impossible traveler. True Optional
AutoContainment Whether to execute auto containment. False Optional
AbuseIPDBThreshold The score needed from AbuseIPDB to consider IP address as malicious. 80 Optional
preInvestigationContainment Whether to execute containment prior investigation phase   Optional
AllowlistCIDR A comma separated list of CIDR that are allowed to be used across long distances. lists.CIDR - Allowlist Optional
username The username to iterate over. alert.username Optional
domain The organization domain.   Optional
ShouldOpenTicket Whether to open a ticket automatically in a ticketing system. (True/False). False Optional
serviceNowShortDescription A short description of the ticket. XSIAM Incident ID - ${parentIncidentFields.incident_id} Optional
serviceNowImpact The impact for the new ticket. Leave empty for ServiceNow default impact.   Optional
serviceNowUrgency The urgency of the new ticket. Leave empty for ServiceNow default urgency.   Optional
serviceNowSeverity The severity of the new ticket. Leave empty for ServiceNow default severity.   Optional
serviceNowTicketType The ServiceNow ticket type. Options are “incident”, “problem”, “change_request”, “sc_request”, “sc_task”, or “sc_req_item”. Default is “incident”.   Optional
serviceNowCategory The category of the ServiceNow ticket.   Optional
serviceNowAssignmentGroup The group to which to assign the new ticket.   Optional
ZendeskPriority The urgency with which the ticket should be addressed. Allowed values are “urgent”, “high”, “normal”, or “low”.   Optional
ZendeskRequester The user who requested this ticket.   Optional
ZendeskStatus The state of the ticket. Allowed values are “new”, “open”, “pending”, “hold”, “solved”, or “closed”.   Optional
ZendeskSubject The value of the subject field for this ticket. XSIAM Incident ID - ${parentIncidentFields.incident_id} Optional
ZendeskTags The array of tags applied to this ticket.   Optional
ZendeskType The type of this ticket. Allowed values are “problem”, “incident”, “question”, or “task”.   Optional
ZendeskAssigne The agent currently assigned to the ticket.   Optional
ZendeskCollaborators The users currently CC’ed on the ticket.   Optional
description The ticket description. ${parentIncidentFields.description}. ${parentIncidentFields.xdr_url} Optional
addCommentPerEndpoint Whether to append a new comment to the ticket for each endpoint in the incident. Possible values: True/False. True Optional
CommentToAdd Comment for the ticket. ${alert.name}. Alert ID: ${alert.id} Optional

Playbook Outputs


Path Description Type
Account.Email.Address The email address object associated with the Account. string
DBotScore Indicator, Score, Type, Vendor. unknown
Account.ID The unique Account DN (Distinguished Name). string
Account.Username The username of the Account. string
Account.Email The email address associated with the Account. unknown
Account.Type The type of the Account entity. string
Account.Groups The groups that the Account is a part of. unknown
Account Account object unknown
Account.DisplayName The display name of the Account. string
Account.Manager The manager of the Account. string
DBotScore.Indicator The indicator value. string
DBotScore.Type The indicator’s type. string
DBotScore.Vendor The indicator’s vendor. string
DBotScore.Score The indicator’s score. number
IP The IP objects. unknown
Endpoint The Endpoint’s object. unknown
Endpoint.Hostname The hostname to enrich. string
Endpoint.OS The Endpoint OS. string
Endpoint.IP The list of Endpoint IP addresses. unknown
Endpoint.MAC The list of Endpoint MAC addresses. unknown
Endpoint.Domain The domain name of the Endpoint. string

Playbook Image


Impossible Traveler Response

Inputs

  • MaxMilesPerHourAllowed — The maximum miles per hour that is considered reasonable. If the geographical distance and difference in time between logins is greater than this value, the user will be considered an impossible traveler.
  • WhitelistedIPs — A comma separated list of IP addresses that are allowed to be used across long distances.
  • ContactUserManager — Whether to ask the user manager for the legitimacy of the login events, in case of an alleged impossible traveler.
  • AutoContainment — Whether to execute auto containment.
  • AbuseIPDBThreshold — The score needed from AbuseIPDB to consider IP address as malicious.
  • preInvestigationContainment — Whether to execute containment prior investigation phase
  • AllowlistCIDR — A comma separated list of CIDR that are allowed to be used across long distances.
  • username — The username to iterate over.
  • domain — The organization domain.
  • ShouldOpenTicket — Whether to open a ticket automatically in a ticketing system. (True/False).
  • serviceNowShortDescription — A short description of the ticket.
  • serviceNowImpact — The impact for the new ticket. Leave empty for ServiceNow default impact.
  • serviceNowUrgency — The urgency of the new ticket. Leave empty for ServiceNow default urgency.
  • serviceNowSeverity — The severity of the new ticket. Leave empty for ServiceNow default severity.
  • serviceNowTicketType — The ServiceNow ticket type. Options are "incident", "problem", "change_request", "sc_request", "sc_task", or "sc_req_item". Default is "incident".
  • serviceNowCategory — The category of the ServiceNow ticket.
  • serviceNowAssignmentGroup — The group to which to assign the new ticket.
  • ZendeskPriority — The urgency with which the ticket should be addressed. Allowed values are "urgent", "high", "normal", or "low".
  • ZendeskRequester — The user who requested this ticket.
  • ZendeskStatus — The state of the ticket. Allowed values are "new", "open", "pending", "hold", "solved", or "closed".
  • ZendeskSubject — The value of the subject field for this ticket.
  • ZendeskTags — The array of tags applied to this ticket.
  • ZendeskType — The type of this ticket. Allowed values are "problem", "incident", "question", or "task".
  • ZendeskAssigne — The agent currently assigned to the ticket.
  • ZendeskCollaborators — The users currently CC'ed on the ticket.
  • description — The ticket description.
  • addCommentPerEndpoint — Whether to append a new comment to the ticket for each endpoint in the incident. Possible values: True/False.
  • CommentToAdd — Comment for the ticket.

Outputs

  • Account.Email.Address — The email address object associated with the Account.
  • DBotScore — Indicator, Score, Type, Vendor.
  • Account.ID — The unique Account DN (Distinguished Name).
  • Account.Username — The username of the Account.
  • Account.Email — The email address associated with the Account.
  • Account.Type — The type of the Account entity.
  • Account.Groups — The groups that the Account is a part of.
  • Account — Account object
  • Account.DisplayName — The display name of the Account.
  • Account.Manager — The manager of the Account.
  • DBotScore.Indicator — The indicator value.
  • DBotScore.Type — The indicator's type.
  • DBotScore.Vendor — The indicator's vendor.
  • DBotScore.Score — The indicator's score.
  • IP — The IP objects.
  • Endpoint — The Endpoint's object.
  • Endpoint.Hostname — The hostname to enrich.
  • Endpoint.OS — The Endpoint OS.
  • Endpoint.IP — The list of Endpoint IP addresses.
  • Endpoint.MAC — The list of Endpoint MAC addresses.
  • Endpoint.Domain — The domain name of the Endpoint.

Commands used

closeInvestigation setParentIncidentFields

Flowchart

yes yes yes yes yes Approved yes yes Start Start Containment Containment Travel Information Enrichment Travel Information Enrich... Containment Containment Did the user travel more than the allowed MPH? Did the user travel more ... Did the user login from IP addresses on allow list? Did the user login from I... Are there IPs / CIDR configured on allow list? Are there IPs / CIDR conf... Close alert - closeInvestigation Close alert closeInvestigation Process Travel Data Process Travel Data Can the manager be contacted for travel approval? Can the manager be contac... Investigation Investigation Done Done Check if the IP is blacklisted Check if the IP is blackl... Close alert - closeInvestigation Close alert closeInvestigation Impossible Traveler - Enrichment - Impossible Traveler - Enrichment Impossible Traveler - Enr... Impossible Traveler - Enrichment Set containment actions - Set Set containment actions Set Get all Impossible Traveler IP Addresses - CreateArray Get all Impossible Travel... CreateArray Calculate geographical distance between logins - impossibleTravelerGetDistance Calculate geographical di... impossibleTravelerGetDistance Ask manager if travel was expected Ask manager if travel was... Check Manager Response Check Manager Response Containment Plan - Containment Plan Containment Plan Containment Plan Containment Plan - Containment Plan Containment Plan Containment Plan Should execute pre investigation containment? Should execute pre invest... Set Incident Severity to High - setParentIncidentFields Set Incident Severity to ... setParentIncidentFields Should open a ticket automatically in a ticketing system? Should open a ticket auto... Ticket Management - Generic - Ticket Management - Generic Ticket Management - Generic Ticket Management - Generic
id: Impossible Traveler - Enrichment
version: -1
name: Impossible Traveler - Enrichment
description: |-
  This playbook get as an input all of the involved IP addresses and identities from the Impossible Traveler playbook alert, and enriches them based on the following:
  * Geo location
  * Active Directory
  * IP enrichment e.g. VirusTotal, AbuseIPDB, etc.
starttaskid: "0"
tasks:
  "0":
    id: "0"
    taskid: 7ccb9fd5-4d10-49ab-89c8-a920b9547981
    type: start
    task:
      id: 7ccb9fd5-4d10-49ab-89c8-a920b9547981
      version: -1
      name: ""
      iscommand: false
      brand: ""
      description: ''
    nexttasks:
      '#none#':
      - "28"
    separatecontext: false
    view: |-
      {
        "position": {
          "x": 450,
          "y": -865
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "1":
    id: "1"
    taskid: 26e7340f-7890-4435-8c78-04ad7fcbafca
    type: condition
    task:
      id: 26e7340f-7890-4435-8c78-04ad7fcbafca
      version: -1
      name: Is there account to be enriched?
      description: Checks whether there is a username for the offending user in context, and whether Active Directory v2 is enabled.
      type: condition
      iscommand: false
      brand: ""
    nexttasks:
      '#default#':
      - "27"
      "yes":
      - "29"
    separatecontext: false
    conditions:
    - label: "yes"
      condition:
      - - operator: isExists
          left:
            value:
              simple: incident.username
            iscontext: true
          right:
            value: {}
    view: |-
      {
        "position": {
          "x": 450,
          "y": 110
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "9":
    id: "9"
    taskid: f38df01f-6b55-466a-8bce-2e98b9b287d0
    type: title
    task:
      id: f38df01f-6b55-466a-8bce-2e98b9b287d0
      version: -1
      name: Done
      type: title
      iscommand: false
      brand: ""
      description: ''
    separatecontext: false
    view: |-
      {
        "position": {
          "x": 450,
          "y": 940
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "13":
    id: "13"
    taskid: 8f0bc025-3ee1-42b3-8f04-524a31b916df
    type: regular
    task:
      id: 8f0bc025-3ee1-42b3-8f04-524a31b916df
      version: -1
      name: Get coordinates for the IP Addresses
      description: Sends an HTTP request. Returns the response as Json.
      scriptName: http
      type: regular
      iscommand: false
      brand: ""
    nexttasks:
      '#none#':
      - "14"
    scriptarguments:
      method:
        simple: GET
      url:
        simple: http://ip-api.com/json/${inputs.sourceip}
    separatecontext: false
    view: |-
      {
        "position": {
          "x": 450,
          "y": -570
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "14":
    id: "14"
    taskid: eb064458-d034-4248-89a9-3fac30ef7520
    type: regular
    task:
      id: eb064458-d034-4248-89a9-3fac30ef7520
      version: -1
      name: Parse HTTP response JSON
      description: 'Parse a given JSON string "value" to a representative object. For example: ''{"a": "value"}'' => {"a": "value"}.'
      scriptName: ParseJSON
      type: regular
      iscommand: false
      brand: ""
    nexttasks:
      '#none#':
      - "15"
      - "16"
      - "19"
      - "24"
      - "26"
    scriptarguments:
      extend-context:
        simple: Coordinates=
      ignore-outputs:
        simple: "true"
      value:
        complex:
          root: HttpRequest.Response
          accessor: Body
          transformers:
          - operator: Stringify
    separatecontext: false
    view: |-
      {
        "position": {
          "x": 450,
          "y": -410
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "15":
    id: "15"
    taskid: f03e3aee-72d7-456e-8c29-48df8ffadc9b
    type: regular
    task:
      id: f03e3aee-72d7-456e-8c29-48df8ffadc9b
      version: -1
      name: Set Location
      description: Sets a value in context under the key you entered.
      scriptName: Set
      type: regular
      iscommand: false
      brand: ""
    nexttasks:
      '#none#':
      - "22"
    scriptarguments:
      append:
        simple: "true"
      key:
        simple: Events.location
      value:
        complex:
          root: Coordinates
          accessor: lat
          transformers:
          - operator: append
            args:
              item:
                value:
                  simple: Coordinates.lon
                iscontext: true
          - operator: join
            args:
              separator:
                value:
                  simple: ', '
    separatecontext: false
    view: |-
      {
        "position": {
          "x": 50,
          "y": -230
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "16":
    id: "16"
    taskid: 31b0887a-17b7-4446-8ae3-9286cb07a564
    type: regular
    task:
      id: 31b0887a-17b7-4446-8ae3-9286cb07a564
      version: -1
      name: Set Event Time
      description: Sets a value in context under the key you entered.
      scriptName: Set
      type: regular
      iscommand: false
      brand: ""
    nexttasks:
      '#none#':
      - "22"
    scriptarguments:
      append:
        simple: "true"
      key:
        simple: Events.event_timestamp
      value:
        complex:
          root: alert
          accessor: created
    separatecontext: false
    view: |-
      {
        "position": {
          "x": -340,
          "y": -230
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "18":
    id: "18"
    taskid: 8ae6b224-d274-49e6-8665-43b78bdd5b6d
    type: regular
    task:
      id: 8ae6b224-d274-49e6-8665-43b78bdd5b6d
      version: -1
      name: Delete HTTP Response Context
      description: |-
        Delete field from context.

        This automation runs using the default Limited User role, unless you explicitly change the permissions.
        For more information, see the section about permissions here:
        - For Cortex XSOAR 6 see https://docs-cortex.paloaltonetworks.com/r/Cortex-XSOAR/6.x/Cortex-XSOAR-Playbook-Design-Guide/Automations 
        - For Cortex XSOAR 8 Cloud see https://docs-cortex.paloaltonetworks.com/r/Cortex-XSOAR/8/Cortex-XSOAR-Cloud-Documentation/Create-a-script
        - For Cortex XSOAR 8.7 On-prem see https://docs-cortex.paloaltonetworks.com/r/Cortex-XSOAR/8.7/Cortex-XSOAR-On-prem-Documentation/Create-a-script
      scriptName: DeleteContext
      type: regular
      iscommand: false
      brand: ""
    nexttasks:
      '#none#':
      - "9"
    scriptarguments:
      all:
        simple: "no"
      key:
        simple: HttpRequest.Response
    separatecontext: false
    view: |-
      {
        "position": {
          "x": 850,
          "y": 770
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "19":
    id: "19"
    taskid: 817a6f83-aad4-46a2-8035-4e4778523de7
    type: regular
    task:
      id: 817a6f83-aad4-46a2-8035-4e4778523de7
      version: -1
      name: Set IP Address
      description: Sets a value in context under the key you entered.
      scriptName: Set
      type: regular
      iscommand: false
      brand: ""
    nexttasks:
      '#none#':
      - "22"
    scriptarguments:
      append:
        simple: "true"
      key:
        simple: Events.ip
      value:
        complex:
          root: Coordinates.query
          filters:
          - - operator: isEqualString
              left:
                value:
                  simple: Coordinates.query
                iscontext: true
              right:
                value:
                  simple: inputs.sourceip
                iscontext: true
              ignorecase: true
    separatecontext: false
    view: |-
      {
        "position": {
          "x": 450,
          "y": -230
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "21":
    id: "21"
    taskid: 1d06af95-318b-4397-8dbb-72b52f36f0a2
    type: regular
    task:
      id: 1d06af95-318b-4397-8dbb-72b52f36f0a2
      version: -1
      name: Delete Coordinates Context
      description: |-
        Delete field from context.

        This automation runs using the default Limited User role, unless you explicitly change the permissions.
        For more information, see the section about permissions here:
        - For Cortex XSOAR 6 see https://docs-cortex.paloaltonetworks.com/r/Cortex-XSOAR/6.x/Cortex-XSOAR-Playbook-Design-Guide/Automations 
        - For Cortex XSOAR 8 Cloud see https://docs-cortex.paloaltonetworks.com/r/Cortex-XSOAR/8/Cortex-XSOAR-Cloud-Documentation/Create-a-script
        - For Cortex XSOAR 8.7 On-prem see https://docs-cortex.paloaltonetworks.com/r/Cortex-XSOAR/8.7/Cortex-XSOAR-On-prem-Documentation/Create-a-script
      scriptName: DeleteContext
      type: regular
      iscommand: false
      brand: ""
    nexttasks:
      '#none#':
      - "9"
    scriptarguments:
      all:
        simple: "no"
      key:
        simple: Coordinates
    separatecontext: false
    view: |-
      {
        "position": {
          "x": 450,
          "y": 770
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "22":
    id: "22"
    taskid: 4d690d07-5c35-42e4-8da1-3dfc737316f5
    type: regular
    task:
      id: 4d690d07-5c35-42e4-8da1-3dfc737316f5
      version: -1
      name: Create Impossible Traveler Events
      description: Sets a value in context under the key you entered.
      scriptName: Set
      type: regular
      iscommand: false
      brand: ""
    nexttasks:
      '#none#':
      - "1"
    scriptarguments:
      append:
        simple: "true"
      key:
        simple: ImpossibleTraveler.Events
      value:
        complex:
          root: Events
          filters:
          - - operator: isEqualString
              left:
                value:
                  simple: Events.ip
                iscontext: true
              right:
                value:
                  simple: inputs.sourceip
                iscontext: true
          transformers:
          - operator: StringToArray
    separatecontext: false
    view: |-
      {
        "position": {
          "x": 450,
          "y": -60
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "23":
    id: "23"
    taskid: 7157a915-00e4-419b-8d9e-1e3b46bc706a
    type: regular
    task:
      id: 7157a915-00e4-419b-8d9e-1e3b46bc706a
      version: -1
      name: Delete Events Context
      description: |-
        Delete field from context.

        This automation runs using the default Limited User role, unless you explicitly change the permissions.
        For more information, see the section about permissions here:
        - For Cortex XSOAR 6 see https://docs-cortex.paloaltonetworks.com/r/Cortex-XSOAR/6.x/Cortex-XSOAR-Playbook-Design-Guide/Automations 
        - For Cortex XSOAR 8 Cloud see https://docs-cortex.paloaltonetworks.com/r/Cortex-XSOAR/8/Cortex-XSOAR-Cloud-Documentation/Create-a-script
        - For Cortex XSOAR 8.7 On-prem see https://docs-cortex.paloaltonetworks.com/r/Cortex-XSOAR/8.7/Cortex-XSOAR-On-prem-Documentation/Create-a-script
      scriptName: DeleteContext
      type: regular
      iscommand: false
      brand: ""
    nexttasks:
      '#none#':
      - "9"
    scriptarguments:
      all:
        simple: "no"
      key:
        simple: Events
    separatecontext: false
    view: |-
      {
        "position": {
          "x": 50,
          "y": 770
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "24":
    id: "24"
    taskid: 97760e8c-ee4d-4656-8d19-65928cb54fcd
    type: regular
    task:
      id: 97760e8c-ee4d-4656-8d19-65928cb54fcd
      version: -1
      name: Set Country
      description: Sets a value in context under the key you entered.
      scriptName: Set
      type: regular
      iscommand: false
      brand: ""
    nexttasks:
      '#none#':
      - "22"
    scriptarguments:
      append:
        simple: "true"
      key:
        simple: Events.Country
      value:
        complex:
          root: Coordinates
          filters:
          - - operator: isEqualString
              left:
                value:
                  simple: Coordinates.query
                iscontext: true
              right:
                value:
                  simple: inputs.sourceip
                iscontext: true
              ignorecase: true
          accessor: countryCode
    separatecontext: false
    view: |-
      {
        "position": {
          "x": 840,
          "y": -230
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "26":
    id: "26"
    taskid: 0411b244-1c46-466e-87f7-3f5770571e2f
    type: regular
    task:
      id: 0411b244-1c46-466e-87f7-3f5770571e2f
      version: -1
      name: Set event identity
      description: Sets a value in context under the key you entered.
      scriptName: Set
      type: regular
      iscommand: false
      brand: ""
    nexttasks:
      '#none#':
      - "22"
    scriptarguments:
      append:
        simple: "true"
      key:
        simple: Events.identity_display_name
      value:
        complex:
          root: alert
          accessor: username
          transformers:
          - operator: FirstArrayElement
    separatecontext: false
    view: |-
      {
        "position": {
          "x": 1230,
          "y": -230
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "27":
    id: "27"
    taskid: ea2cf994-dcd6-4756-811f-6ac158487081
    type: title
    task:
      id: ea2cf994-dcd6-4756-811f-6ac158487081
      version: -1
      name: Clear Processed Context
      type: title
      iscommand: false
      brand: ""
      description: ''
    nexttasks:
      '#none#':
      - "21"
      - "23"
      - "18"
    separatecontext: false
    view: |-
      {
        "position": {
          "x": 450,
          "y": 630
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "28":
    id: "28"
    taskid: ace7b867-75f1-48b0-8a9b-464fdb91d6d2
    type: regular
    task:
      id: ace7b867-75f1-48b0-8a9b-464fdb91d6d2
      version: -1
      name: Get IP address verdict
      description: Retrieve the IP address verdict using the enabled integrations.
      script: '|||ip'
      type: regular
      iscommand: true
      brand: ""
    nexttasks:
      '#none#':
      - "13"
    scriptarguments:
      ip:
        complex:
          root: inputs.sourceip
    separatecontext: false
    continueonerror: true
    view: |-
      {
        "position": {
          "x": 450,
          "y": -730
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: true
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
    continueonerrortype: ""
  "29":
    id: "29"
    taskid: 2eb086b8-6cf1-44f4-830f-a1ff14796a85
    type: playbook
    task:
      id: 2eb086b8-6cf1-44f4-830f-a1ff14796a85
      version: -1
      name: Account Enrichment - Generic v2.1
      description: |-
        Enrich accounts using one or more integrations.
        Supported integrations:
        - Active Directory
        - SailPoint IdentityNow
        - SailPoint IdentityIQ
        - PingOne
        - Okta
        - AWS IAM

        Also, the playbook supports the generic command 'iam-get-user' (implemented in IAM integrations. For more information, visit https://xsoar.pan.dev/docs/integrations/iam-integrations.
      playbookName: Account Enrichment - Generic v2.1
      type: playbook
      iscommand: false
      brand: ""
    nexttasks:
      '#none#':
      - "27"
    scriptarguments:
      Domain:
        complex:
          root: inputs.domain
      Username:
        complex:
          root: inputs.username
          transformers:
          - operator: uniq
    separatecontext: false
    continueonerrortype: ""
    loop:
      iscommand: false
      exitCondition: ""
      wait: 1
      max: 0
    view: |-
      {
        "position": {
          "x": 110,
          "y": 290
        }
      }
    note: false
    timertriggers: []
    ignoreworker: false
    skipunavailable: false
    quietmode: 0
    isoversize: false
    isautoswitchedtoquietmode: false
system: true
view: |-
  {
    "linkLabelsPosition": {
      "1_27_#default#": 0.49
    },
    "paper": {
      "dimensions": {
        "height": 1865,
        "width": 1951,
        "x": -340,
        "y": -865
      }
    }
  }
inputs:
- key: sourceip
  value: {}
  required: false
  description: The source IP to iterate over.
  playbookInputQuery:
- key: username
  value: {}
  required: false
  description: The username to iterate over.
  playbookInputQuery:
- key: domain
  value: {}
  required: false
  description: The organization domain.
  playbookInputQuery:
outputs:
- contextPath: ActiveDirectory.Users.manager
  description: The manager of the user.
- contextPath: IP
  description: The IP enrichment results.
  type: unknown
- contextPath: IP.Geo
  description: The IP geo information.
  type: unknown
- contextPath: IP.Malicious
  description: The IP verdict.
  type: unknown
- contextPath: AbuseIPDB.IP
  description: The IP information retrieved from AbuseIPDB.
  type: unknown
- contextPath: AbuseIPDB.IP.Geo
  description: The IP geo information.
  type: unknown
- contextPath: DBotScore
  description: The DBotScore
  type: unknown
- contextPath: AbuseIPDB.IP.Malicious
  description: The IP verdict.
  type: unknown
- contextPath: Account
  description: The account object.
  type: unknown
- contextPath: ActiveDirectory.Users
  description: The AD users.
  type: unknown
- contextPath: MSGraphUser
  description: The user information retrieved from MSGraphUser
  type: unknown
- contextPath: MSGraphUserManager.Manager
  description: The user's manager information retrieved from MSGraphUser.
  type: unknown
tests:
- Test Playbook - Impossible Traveler - Enrichment
marketplaces:
- marketplacev2
- platform
fromversion: 6.6.0


supportedModules:
- agentix
- cloud
- cloud_posture
- cloud_runtime_security
- edr
- xsiam