diff --git a/IncidentFields/incidentfield-ExtraHop_Appliance_ID.json b/IncidentFields/incidentfield-ExtraHop_Appliance_ID.json new file mode 100644 index 000000000000..6d46b924b3be --- /dev/null +++ b/IncidentFields/incidentfield-ExtraHop_Appliance_ID.json @@ -0,0 +1,39 @@ +{ + "id": "incident_extrahopapplianceid", + "version": -1, + "modified": "2019-04-22T17:17:37.549302836-07:00", + "name": "ExtraHop Appliance ID", + "ownerOnly": false, + "placeholder": "", + "description": "Appliance ID of the ExtraHop Reveal(x) that created the detection", + "cliName": "extrahopapplianceid", + "type": "number", + "closeForm": false, + "editForm": true, + "required": false, + "script": "", + "fieldCalcScript": "", + "neverSetAsRequired": false, + "isReadOnly": false, + "selectValues": null, + "validationRegex": "", + "useAsKpi": false, + "locked": false, + "system": false, + "content": true, + "group": 0, + "hidden": false, + "associatedTypes": [ + "ExtraHop Detection" + ], + "systemAssociatedTypes": null, + "associatedToAll": false, + "unmapped": false, + "unsearchable": false, + "caseInsensitive": true, + "columns": null, + "defaultRows": null, + "sla": 0, + "threshold": 72, + "breachScript": "" +} diff --git a/IncidentFields/incidentfield-ExtraHop_Detection_End_Time.json b/IncidentFields/incidentfield-ExtraHop_Detection_End_Time.json new file mode 100644 index 000000000000..abca941e041e --- /dev/null +++ b/IncidentFields/incidentfield-ExtraHop_Detection_End_Time.json @@ -0,0 +1,39 @@ +{ + "id": "incident_detectionendtime", + "version": -1, + "modified": "2019-04-22T17:16:15.442344109-07:00", + "name": "Detection End Time", + "ownerOnly": false, + "placeholder": "", + "description": "Timestamp of when the ExtraHop Reveal(x) detection ended", + "cliName": "detectionendtime", + "type": "date", + "closeForm": false, + "editForm": true, + "required": false, + "script": "", + "fieldCalcScript": "", + "neverSetAsRequired": false, + "isReadOnly": false, + "selectValues": null, + "validationRegex": "", + "useAsKpi": false, + "locked": false, + "system": false, + "content": true, + "group": 0, + "hidden": false, + "associatedTypes": [ + "ExtraHop Detection" + ], + "systemAssociatedTypes": null, + "associatedToAll": false, + "unmapped": false, + "unsearchable": false, + "caseInsensitive": true, + "columns": null, + "defaultRows": null, + "sla": 0, + "threshold": 72, + "breachScript": "" +} diff --git a/IncidentFields/incidentfield-ExtraHop_Detection_ID.json b/IncidentFields/incidentfield-ExtraHop_Detection_ID.json new file mode 100644 index 000000000000..11288b9d5ac4 --- /dev/null +++ b/IncidentFields/incidentfield-ExtraHop_Detection_ID.json @@ -0,0 +1,39 @@ +{ + "id": "incident_detectionid", + "version": -1, + "modified": "2019-04-22T17:13:45.37251142-07:00", + "name": "Detection ID", + "ownerOnly": false, + "placeholder": "", + "description": "ID of the ExtraHop Reveal(x) detection", + "cliName": "detectionid", + "type": "number", + "closeForm": false, + "editForm": true, + "required": false, + "script": "", + "fieldCalcScript": "", + "neverSetAsRequired": false, + "isReadOnly": false, + "selectValues": null, + "validationRegex": "", + "useAsKpi": false, + "locked": false, + "system": false, + "content": true, + "group": 0, + "hidden": false, + "associatedTypes": [ + "ExtraHop Detection" + ], + "systemAssociatedTypes": null, + "associatedToAll": false, + "unmapped": false, + "unsearchable": false, + "caseInsensitive": true, + "columns": null, + "defaultRows": null, + "sla": 0, + "threshold": 72, + "breachScript": "" +} diff --git a/IncidentFields/incidentfield-ExtraHop_Detection_Participants.json b/IncidentFields/incidentfield-ExtraHop_Detection_Participants.json new file mode 100644 index 000000000000..8d53b5be26cc --- /dev/null +++ b/IncidentFields/incidentfield-ExtraHop_Detection_Participants.json @@ -0,0 +1,102 @@ +{ + "id": "incident_participants", + "version": -1, + "modified": "2019-08-08T16:56:35.95463214-07:00", + "name": "Participants", + "ownerOnly": false, + "placeholder": "", + "description": "List of participant objects associated with the ExtraHop Reveal(x) detection", + "cliName": "participants", + "type": "grid", + "closeForm": false, + "editForm": true, + "required": false, + "script": "", + "fieldCalcScript": "", + "neverSetAsRequired": false, + "isReadOnly": false, + "selectValues": [], + "validationRegex": "", + "useAsKpi": false, + "locked": false, + "system": false, + "content": true, + "group": 0, + "hidden": false, + "associatedTypes": [ + "ExtraHop Detection" + ], + "systemAssociatedTypes": null, + "associatedToAll": false, + "unmapped": false, + "unsearchable": false, + "caseInsensitive": true, + "columns": [ + { + "key": "role", + "displayName": "Role", + "type": "shortText", + "required": false, + "script": "", + "width": 150, + "isDefault": true, + "fieldCalcScript": "", + "isReadOnly": false, + "selectValues": null + }, + { + "key": "ipaddress", + "displayName": "IP Address", + "type": "shortText", + "required": false, + "script": "", + "width": 150, + "isDefault": true, + "fieldCalcScript": "", + "isReadOnly": false, + "selectValues": null + }, + { + "key": "macaddress", + "displayName": "MAC Address", + "type": "shortText", + "required": false, + "script": "", + "width": 150, + "isDefault": true, + "fieldCalcScript": "", + "isReadOnly": false, + "selectValues": null + }, + { + "key": "dnsname", + "displayName": "DNS Name", + "type": "shortText", + "required": false, + "script": "", + "width": 111, + "isDefault": true, + "fieldCalcScript": "", + "isReadOnly": false, + "selectValues": null + }, + { + "key": "external", + "displayName": "External", + "type": "boolean", + "required": false, + "script": "", + "width": 150, + "isDefault": true, + "fieldCalcScript": "", + "isReadOnly": false, + "selectValues": null + } + ], + "defaultRows": [ + {} + ], + "sla": 0, + "threshold": 72, + "breachScript": "" +} diff --git a/IncidentFields/incidentfield-ExtraHop_Detection_Raw_Participants.json b/IncidentFields/incidentfield-ExtraHop_Detection_Raw_Participants.json new file mode 100644 index 000000000000..07d40aa1ec6c --- /dev/null +++ b/IncidentFields/incidentfield-ExtraHop_Detection_Raw_Participants.json @@ -0,0 +1,39 @@ +{ + "id": "incident_rawparticipants", + "version": -1, + "modified": "2019-06-19T11:52:10.492074402-07:00", + "name": "Raw Participants", + "ownerOnly": false, + "placeholder": "", + "description": "Raw list of participant objects associated with the ExtraHop Reveal(x) detection", + "cliName": "rawparticipants", + "type": "longText", + "closeForm": false, + "editForm": true, + "required": false, + "script": "", + "fieldCalcScript": "", + "neverSetAsRequired": false, + "isReadOnly": false, + "selectValues": null, + "validationRegex": "", + "useAsKpi": false, + "locked": false, + "system": false, + "content": true, + "group": 0, + "hidden": false, + "associatedTypes": [ + "ExtraHop Detection" + ], + "systemAssociatedTypes": null, + "associatedToAll": false, + "unmapped": false, + "unsearchable": false, + "caseInsensitive": true, + "columns": null, + "defaultRows": null, + "sla": 0, + "threshold": 72, + "breachScript": "" +} diff --git a/IncidentFields/incidentfield-ExtraHop_Detection_Risk_Score.json b/IncidentFields/incidentfield-ExtraHop_Detection_Risk_Score.json new file mode 100644 index 000000000000..4d2b60502c24 --- /dev/null +++ b/IncidentFields/incidentfield-ExtraHop_Detection_Risk_Score.json @@ -0,0 +1,39 @@ +{ + "id": "incident_riskscore", + "version": -1, + "modified": "2019-04-22T17:19:47.040089413-07:00", + "name": "Risk Score", + "ownerOnly": false, + "placeholder": "", + "description": "Risk score associated with the ExtraHop Reveal(x) detection", + "cliName": "riskscore", + "type": "number", + "closeForm": false, + "editForm": true, + "required": false, + "script": "", + "fieldCalcScript": "", + "neverSetAsRequired": false, + "isReadOnly": false, + "selectValues": null, + "validationRegex": "", + "useAsKpi": false, + "locked": false, + "system": false, + "content": true, + "group": 0, + "hidden": false, + "associatedTypes": [ + "ExtraHop Detection" + ], + "systemAssociatedTypes": null, + "associatedToAll": false, + "unmapped": false, + "unsearchable": false, + "caseInsensitive": true, + "columns": null, + "defaultRows": null, + "sla": 0, + "threshold": 72, + "breachScript": "" +} diff --git a/IncidentFields/incidentfield-ExtraHop_Detection_Ticketed.json b/IncidentFields/incidentfield-ExtraHop_Detection_Ticketed.json new file mode 100644 index 000000000000..104d5babce87 --- /dev/null +++ b/IncidentFields/incidentfield-ExtraHop_Detection_Ticketed.json @@ -0,0 +1,39 @@ +{ + "id": "incident_detectionticketed", + "version": -1, + "modified": "2019-05-30T11:00:44.526831884-07:00", + "name": "Detection Ticketed", + "ownerOnly": false, + "placeholder": "", + "description": "Whether the incident is tracked to the corresponding detection in ExtraHop Reveal(x)", + "cliName": "detectionticketed", + "type": "boolean", + "closeForm": false, + "editForm": true, + "required": false, + "script": "", + "fieldCalcScript": "", + "neverSetAsRequired": false, + "isReadOnly": false, + "selectValues": null, + "validationRegex": "", + "useAsKpi": false, + "locked": false, + "system": false, + "content": true, + "group": 0, + "hidden": false, + "associatedTypes": [ + "ExtraHop Detection" + ], + "systemAssociatedTypes": null, + "associatedToAll": false, + "unmapped": false, + "unsearchable": false, + "caseInsensitive": true, + "columns": null, + "defaultRows": null, + "sla": 0, + "threshold": 72, + "breachScript": "" +} diff --git a/IncidentFields/incidentfield-ExtraHop_Detection_URL.json b/IncidentFields/incidentfield-ExtraHop_Detection_URL.json new file mode 100644 index 000000000000..9761ee0c8318 --- /dev/null +++ b/IncidentFields/incidentfield-ExtraHop_Detection_URL.json @@ -0,0 +1,39 @@ +{ + "id": "incident_detectionurl", + "version": -1, + "modified": "2019-04-22T17:21:03.696546875-07:00", + "name": "Detection URL", + "ownerOnly": false, + "placeholder": "", + "description": "URL of the ExtraHop Reveal(x) detection", + "cliName": "detectionurl", + "type": "url", + "closeForm": false, + "editForm": true, + "required": false, + "script": "", + "fieldCalcScript": "", + "neverSetAsRequired": false, + "isReadOnly": false, + "selectValues": null, + "validationRegex": "", + "useAsKpi": false, + "locked": false, + "system": false, + "content": true, + "group": 0, + "hidden": false, + "associatedTypes": [ + "ExtraHop Detection" + ], + "systemAssociatedTypes": null, + "associatedToAll": false, + "unmapped": false, + "unsearchable": false, + "caseInsensitive": true, + "columns": null, + "defaultRows": null, + "sla": 0, + "threshold": 72, + "breachScript": "" +} diff --git a/IncidentFields/incidentfield-ExtraHop_Detection_Update_Time.json b/IncidentFields/incidentfield-ExtraHop_Detection_Update_Time.json new file mode 100644 index 000000000000..55e946272e9c --- /dev/null +++ b/IncidentFields/incidentfield-ExtraHop_Detection_Update_Time.json @@ -0,0 +1,39 @@ +{ + "id": "incident_detectionupdatetime", + "version": -1, + "modified": "2019-04-22T17:15:50.044491837-07:00", + "name": "Detection Update Time", + "ownerOnly": false, + "placeholder": "", + "description": "Timestamp of when the ExtraHop Reveal(x) detection was last updated", + "cliName": "detectionupdatetime", + "type": "date", + "closeForm": false, + "editForm": true, + "required": false, + "script": "", + "fieldCalcScript": "", + "neverSetAsRequired": false, + "isReadOnly": false, + "selectValues": null, + "validationRegex": "", + "useAsKpi": false, + "locked": false, + "system": false, + "content": true, + "group": 0, + "hidden": false, + "associatedTypes": [ + "ExtraHop Detection" + ], + "systemAssociatedTypes": null, + "associatedToAll": false, + "unmapped": false, + "unsearchable": false, + "caseInsensitive": true, + "columns": null, + "defaultRows": null, + "sla": 0, + "threshold": 72, + "breachScript": "" +} diff --git a/IncidentFields/incidentfield-ExtraHop_Hostname.json b/IncidentFields/incidentfield-ExtraHop_Hostname.json new file mode 100644 index 000000000000..387793ba39da --- /dev/null +++ b/IncidentFields/incidentfield-ExtraHop_Hostname.json @@ -0,0 +1,39 @@ +{ + "id": "incident_extrahophostname", + "version": -1, + "modified": "2019-04-22T17:18:56.861811265-07:00", + "name": "ExtraHop Hostname", + "ownerOnly": false, + "placeholder": "", + "description": "Hostname of the ExtraHop Reveal(x) that created the detection", + "cliName": "extrahophostname", + "type": "shortText", + "closeForm": false, + "editForm": true, + "required": false, + "script": "", + "fieldCalcScript": "", + "neverSetAsRequired": false, + "isReadOnly": false, + "selectValues": null, + "validationRegex": "", + "useAsKpi": false, + "locked": false, + "system": false, + "content": true, + "group": 0, + "hidden": false, + "associatedTypes": [ + "ExtraHop Detection" + ], + "systemAssociatedTypes": null, + "associatedToAll": false, + "unmapped": false, + "unsearchable": false, + "caseInsensitive": true, + "columns": null, + "defaultRows": null, + "sla": 0, + "threshold": 72, + "breachScript": "" +} diff --git a/IncidentTypes/incidenttype-ExtraHop_Detection.json b/IncidentTypes/incidenttype-ExtraHop_Detection.json new file mode 100644 index 000000000000..682ae6848bdd --- /dev/null +++ b/IncidentTypes/incidenttype-ExtraHop_Detection.json @@ -0,0 +1,23 @@ +{ + "autorun": false, + "closureScript": "", + "color": "#e55100", + "days": 0, + "daysR": 0, + "default": false, + "disabled": false, + "hours": 0, + "hoursR": 0, + "id": "ExtraHop Detection", + "locked": false, + "name": "ExtraHop Detection", + "playbookId": "ExtraHop - Default", + "preProcessingScript": "", + "readonly": false, + "reputationCalc": 2, + "sortValues": null, + "system": false, + "version": -1, + "weeks": 0, + "weeksR": 0 +} diff --git a/Integrations/ExtraHop_v2/ExtraHop_v2.py b/Integrations/ExtraHop_v2/ExtraHop_v2.py new file mode 100644 index 000000000000..0d85157d4822 --- /dev/null +++ b/Integrations/ExtraHop_v2/ExtraHop_v2.py @@ -0,0 +1,939 @@ +import demistomock as demisto +from CommonServerPython import * + + +''' IMPORTS ''' + +import json +import requests +from ipaddress import ip_address +from distutils.util import strtobool +from typing import DefaultDict +from collections import defaultdict + +# Disable insecure warnings +requests.packages.urllib3.disable_warnings() + +''' GLOBALS/PARAMS ''' + +APIKEY = demisto.params().get('apikey') +SERVER = SERVER = demisto.params().get('url', '').strip('/') +USE_SSL = not demisto.params().get('insecure', False) +BASE_URL = SERVER + '/api/v1/' +HEADERS = { + 'Accept': 'application/json', + 'Authorization': 'ExtraHop apikey={key}'.format(key=APIKEY) +} +handle_proxy() + + +''' HELPER FUNCTIONS ''' + + +def http_request(method, url_suffix, data=None, params=None, raw_response=False): + data = json.dumps(data) + demisto.debug("EH - Request Endpoint: {url} \n EH - Request params: {params} \n EH - Request data: {body}".format( + url=BASE_URL + url_suffix, params=params, body=data)) + try: + res = requests.request( + method, + BASE_URL + url_suffix, + verify=USE_SSL, + data=data, + headers=HEADERS, + params=params + ) + except requests.exceptions.RequestException: + return_error('Failed to connect to - {url} - Please check the URL'.format(url=BASE_URL)) + # Handle error responses gracefully + if res.status_code not in {200, 201, 204}: + error_reason = res.reason + try: + resp = res.json() + error_reason = resp.get('error_message', resp.get('cpc_error', resp.get('failures', res.reason))) + except Exception: + pass + return_error('Error in API call to ExtraHop {code} - {reason}'.format(code=res.status_code, reason=error_reason)) + # Handle no content responses gracefully + elif not raw_response: + if res.status_code == 201: + return demisto.results('Successfully Created') + elif res.status_code == 204: + return demisto.results('Successful Modification') + return res + + +def format_protocol_stack(protocol_list): + if len(protocol_list) > 1: + protos = protocol_list[1:] + else: + protos = protocol_list + + return ":".join(protos) + + +def sort_protocols(protos_by_weight): + sorted_protos = sorted(protos_by_weight.items(), key=lambda x: x[1], reverse=True) + return [proto_tuple[0] for proto_tuple in sorted_protos] + + +def parse_location_header(location): + # Parse the object id from the location header + if location: + last_slash_index = location.rindex('/') + 1 + location_id = location[last_slash_index:] + if location_id.isdigit(): + return location_id + # return error in any other case + return_error("Error unable to parse ExtraHop API response location header") + + +def next_page(cursor): + body = { + "cursor": cursor + } + params = { + "context_ttl": 30000 + } + res_raw = http_request('POST', 'records/cursor', data=body, params=params) + res = res_raw.json() + return res.get('records', []) + + +def format_alerts(alerts): + hr_table = [] + ec = { + "ExtraHop": { + "Alert": [] + } + } # type: dict + for alert in alerts: + hr_table.append(alert) + ec['ExtraHop']['Alert'].append(createContext(alert, keyTransform=string_to_context_key, removeNull=True)) + if len(alerts) == 0: + demisto.results('No Alerts were found') + else: + demisto.results({ + 'Type': entryTypes['note'], + 'ContentsFormat': formats['markdown'], + 'Contents': alerts, + 'HumanReadable': tableToMarkdown("Found {} Alert(s)".format(len(alerts)), + hr_table, headerTransform=string_to_table_header, removeNull=True), + 'EntryContext': ec + }) + + +def format_devices(devices, appliance_uuids, hr_title="{} Device(s) Found", no_results_msg="No Devices were found"): + hr_table = [] + ec = { + "ExtraHop": { + "Device": [] + } + } # type: dict + headers = ['Display Name', 'IP Address', 'MAC Address', 'Role', 'Vendor', 'URL'] + + for device in devices: + hr = { + 'Display Name': device.get('display_name'), + 'IP Address': device.get('ipaddr4', device.get('ipaddr6')), + 'MAC Address': device.get('macaddr'), + 'Role': device.get('role'), + 'Vendor': device.get('vendor') + } + + device_url = "{}/extrahop/#/metrics/devices/{}.{}/overview/".format( + SERVER, appliance_uuids[device.get('node_id')], device.get('discovery_id')) + hr['URL'] = "[{}]({})".format("View Device in ExtraHop", device_url) + device['url'] = device_url + + if 'client_protocols' in device or 'server_protocols' in device: + hr['Protocols'] = {} + # re-arrange headers to add protocol information + headers = ['Display Name', 'IP Address', 'MAC Address', 'Role', 'Protocols', 'URL', 'Vendor'] + if 'client_protocols' in device: + hr['Protocols']['Client'] = ', '.join(device.get('client_protocols', [])) + if 'server_protocols' in device: + hr['Protocols']['Server'] = ', '.join(device.get('server_protocols', [])) + + hr_table.append(hr) + ec['ExtraHop']['Device'].append(createContext(device, keyTransform=string_to_context_key, removeNull=True)) + if len(devices) == 0: + demisto.results(no_results_msg) + else: + demisto.results({ + 'Type': entryTypes['note'], + 'ContentsFormat': formats['markdown'], + 'Contents': devices, + 'HumanReadable': tableToMarkdown(hr_title.format(len(devices)), hr_table, headers=headers), + 'EntryContext': ec + }) + + +def format_device_with_protocols(device, appliance_uuids): + if not device.get('client_protocols') and not device.get('server_protocols'): + demisto.results("No Protocol activity found") + else: + ec = { + "ExtraHop": { + "Device": [] + } + } # type: dict + headers = ['Display Name', 'IP Address', 'MAC Address', + 'Protocols (Client)', 'Protocols (Server)', 'Role', 'Vendor', 'URL'] + + hr = { + 'Display Name': device.get('display_name'), + 'IP Address': device.get('ipaddr4', device.get('ipaddr6')), + 'MAC Address': device.get('macaddr'), + 'Protocols (Client)': {}, + 'Protocols (Server)': {}, + 'Role': device.get('role'), + 'Vendor': device.get('vendor') + } + + device_url = "{}/extrahop/#/metrics/devices/{}.{}/overview/".format( + SERVER, appliance_uuids[device.get('node_id')], device.get('discovery_id')) + hr['URL'] = "[{}]({})".format("View Device in ExtraHop", device_url) + device['url'] = device_url + + hr['Protocols (Client)'] = ', '.join(device.get('client_protocols', [])) + hr['Protocols (Server)'] = ', '.join(device.get('server_protocols', [])) + + ec['ExtraHop']['Device'].append(createContext(device, keyTransform=string_to_context_key, removeNull=True)) + demisto.results({ + 'Type': entryTypes['note'], + 'ContentsFormat': formats['markdown'], + 'Contents': device, + 'HumanReadable': tableToMarkdown("Device Activity Found", hr, headers=headers), + 'EntryContext': ec + }) + + +def format_records(res): + records = res.get("records") + + hr_table = [] + ec = { + "ExtraHop": { + "Record": [] + } + } # type: dict + for record in records: + hr_table.append(record['_source']) + ec['ExtraHop']['Record'].append(createContext(record, keyTransform=string_to_context_key, removeNull=True)) + if len(records) == 0: + demisto.results('No Records were found') + else: + demisto.results({ + 'Type': entryTypes['note'], + 'ContentsFormat': formats['markdown'], + 'Contents': res, + 'HumanReadable': tableToMarkdown("Showing {results} out of {total} Record(s) Found.".format(total=res.get('total', 0), + results=len(records)), hr_table), + 'EntryContext': createContext(ec, removeNull=True) + }) + + +''' REQUESTS FUNCTIONS ''' + + +def test_module(): + """ + Performs basic get request to check ExtraHop version + """ + test_result = http_request('GET', 'extrahop') + return test_result + + +def get_appliance_uuids(): + res_raw = http_request('GET', 'networks') + networks = res_raw.json() + uuid_lookup = {} + for network in networks: + uuid_lookup[network['node_id']] = network['appliance_uuid'] + return uuid_lookup + + +def get_device_by_ip(ip, active_from=None, active_until=None, limit=None, offset=None): + devices = device_search(name=None, ip=ip, mac=None, role=None, software=None, vendor=None, tag=None, discover_time=None, + vlan=None, activity=None, operator="=", match_type="and", active_from=active_from, + active_until=active_until, limit=limit, l3_only=True) + if devices: + return devices[0] + else: + return_error("Error the IP Address {} was not found in ExtraHop.".format(ip)) + + +def get_device_by_id(api_id): + return http_request('GET', 'devices/{id}'.format(id=api_id)).json() + + +def get_devices_by_ip_or_id(devices_str, active_from=None, active_until=None, limit=None, id_only=False): + devices = [] + for item in str(devices_str).split(','): + if item.isdigit(): + if id_only: + devices.append(int(item)) + else: + device = get_device_by_id(item) + devices.append(device) + else: + try: + ip_address(item) + except ValueError: + return_error("Error parsing IP Address {}".format(item)) + + device = get_device_by_ip(item, active_from, active_until, limit) + + if id_only: + devices.append(int(device['id'])) + else: + devices.append(device) + + return devices + + +def get_alerts(): + res_raw = http_request('GET', 'alerts') + res = res_raw.json() + return res + + +def query_records(query_from, query_until, limit, offset, + field1, operator1, value1, field2, operator2, value2, match_type, types): + data = {} + if query_from: + data['from'] = query_from + if query_until: + data['until'] = query_until + if limit: + if int(limit) > 1000: + data['limit'] = 1000 + data['context_ttl'] = "30s" + else: + data['limit'] = int(limit) + if offset: + data['offset'] = int(offset) + if types: + try: + data['types'] = ['~' + rec_type for rec_type in types.split(',')] + except Exception: + return_error('Error parsing the types argument, expected a comma separated list of types.') + + if field1 or value1 or field2 or value2: + search_filters = [ + (field1, operator1, value1), + (field2, operator2, value2) + ] + data['filter'] = { + "operator": match_type, + "rules": [] + } + for search_filter in search_filters: + if search_filter[0]: + rule = { + "field": search_filter[0], + "operator": search_filter[1], + "operand": search_filter[2] or "" + } + data['filter']['rules'].append(rule) + + res_raw = http_request('POST', 'records/search', data) + res = res_raw.json() + cursor = res.get('cursor') + if cursor and res.get('total', 0) > data['limit']: + additional_records = next_page(cursor) + while len(additional_records) > 0: + res['records'].extend(additional_records) + additional_records = next_page(cursor) + return res + + +def device_search(name, ip, mac, role, software, vendor, tag, discover_time, vlan, activity, + operator, match_type, active_from, active_until, limit, l3_only): + + fields = { + "name": name, + "ipaddr": ip, + "macaddr": mac, + "role": role, + "software": software, + "vendor": vendor, + "tag": tag, + "discover_time": discover_time, + "vlan": vlan, + "activity": activity + } + + data = {} + if active_from: + data['active_from'] = active_from + if active_until: + data['active_until'] = active_until + if limit: + data['limit'] = int(limit) + if any([val is not None for val in fields.values()]): + data['filter'] = { + "operator": match_type, + "rules": [] + } + rules_list = data['filter']['rules'] + + if l3_only: + rules_list.append( + { + "field": "ipaddr", + "operator": "exists" + } + ) + if match_type != "and": + data['filter']['operator'] = "and" + rules_list.append( + { + "operator": match_type, + "rules": [] + } + ) + rules_list = data['filter']['rules'][1]['rules'] + + for field in fields.items(): + if field[1]: + search_filter = { + "field": field[0], + "operator": operator, + "operand": field[1] + } + rules_list.append(search_filter) + + res_raw = http_request('POST', 'devices/search', data=data) + res = res_raw.json() + return res + + +def get_peers(ip_or_id, query_from, query_until, peer_role, protocol): + device = get_devices_by_ip_or_id(ip_or_id)[0] + api_id = int(device['id']) + + if device['analysis'] == 'discovery': + demisto.results({ + 'Type': entryTypes['note'], + 'ContentsFormat': formats['markdown'], + 'Contents': ("This Device is in Discovery Mode. " + "Configure your [Analysis Priorities](https://docs.extrahop.com/current/analysis_priorities/) " + "or add this device to the " + "[Watchlist](https://docs.extrahop.com/current/analysis-priorities-faq/#what-is-the-watchlist) " + "manually with: `!extrahop-edit-watchlist add={}`".format(api_id)) + }) + + body = { + "edge_annotations": ["protocols"], + "from": query_from, + "walks": [{ + "origins": [{ + "object_id": api_id, + "object_type": "device" + }], + "steps": [{ + "relationships": [{ + "protocol": protocol, + "role": peer_role + }] + }] + }] + } + if query_until: + body['until'] = query_until + + activitymap_raw = http_request('POST', 'activitymaps/query', data=body) + activitymap = activitymap_raw.json() + + peers = defaultdict(lambda: { + 'weight': 0, + 'client_protocols': defaultdict(int), + 'server_protocols': defaultdict(int) + }) # type: DefaultDict[str, dict] + + for edge in activitymap['edges']: + if edge["to"] == api_id: + peer_id = edge['from'] + role_key = 'client_protocols' + else: + peer_id = edge['to'] + role_key = 'server_protocols' + + peers[peer_id]['weight'] += edge['weight'] + + # add protocols + if 'annotations' in edge and 'protocols' in edge['annotations']: + for protocol_list in edge['annotations']['protocols']: + proto_stack = format_protocol_stack(protocol_list['protocol']) + peers[peer_id][role_key][proto_stack] += protocol_list['weight'] + + peer_devices = [] + peer_ids_by_weight = [peer[0] for peer in sorted(peers.items(), key=lambda x:x[1]['weight'], reverse=True)] + # Lookup each peer device by id + for peer_id in peer_ids_by_weight: + device = get_device_by_id(peer_id) + if peer_role in ('any', 'client'): + device['client_protocols'] = sort_protocols(peers[peer_id]['client_protocols']) + if peer_role in ('any', 'server'): + device['server_protocols'] = sort_protocols(peers[peer_id]['server_protocols']) + peer_devices.append(device) + return peer_devices + + +def get_protocols(ip_or_id, query_from, query_until): + device = get_devices_by_ip_or_id(ip_or_id)[0] + api_id = int(device['id']) + + if device['analysis'] == 'discovery': + demisto.results({ + 'Type': entryTypes['note'], + 'ContentsFormat': formats['markdown'], + 'Contents': ("This Device is in Discovery Mode. " + "Configure your [Analysis Priorities](https://docs.extrahop.com/current/analysis_priorities/) " + "or add this device to the " + "[Watchlist](https://docs.extrahop.com/current/analysis-priorities-faq/#what-is-the-watchlist) " + "manually with: `!extrahop-edit-watchlist add={}`".format(api_id)) + }) + + body = { + "edge_annotations": ["protocols"], + "from": query_from, + "walks": [{ + "origins": [{ + "object_id": api_id, + "object_type": "device" + }], + "steps": [{}] + }] + } + if query_until: + body['until'] = query_until + + activitymap_raw = http_request('POST', 'activitymaps/query', data=body) + activitymap = activitymap_raw.json() + + client_protocols = defaultdict(int) # type: DefaultDict[str, int] + server_protocols = defaultdict(int) # type: DefaultDict[str, int] + for edge in activitymap['edges']: + if 'annotations' in edge and 'protocols' in edge['annotations']: + for protocol_list in edge['annotations']['protocols']: + proto_stack = format_protocol_stack(protocol_list['protocol']) + if edge["from"] == api_id: + client_protocols[proto_stack] += protocol_list['weight'] + elif edge["to"] == api_id: + server_protocols[proto_stack] += protocol_list['weight'] + + device['client_protocols'] = sort_protocols(client_protocols) + device['server_protocols'] = sort_protocols(server_protocols) + + return device + + +def edit_watchlist(add, remove): + body = {} + if add: + body['assign'] = get_devices_by_ip_or_id(add, id_only=True) + if remove: + body['unassign'] = get_devices_by_ip_or_id(remove, id_only=True) + + res = http_request('POST', 'whitelist/devices', data=body) + + return res + + +def get_watchlist(): + res_raw = http_request('GET', 'whitelist/devices') + res = res_raw.json() + return res + + +def create_alert(apply_all, disabled, name, notify_snmp, refire_interval, severity, alert_type, object_type, + protocols, field_name, stat_name, units, interval_length, operand, operator, field_name2, field_op, + param, param2, alert_id=None): + data = { + "apply_all": apply_all, + "disabled": disabled, + "name": name, + "notify_snmp": notify_snmp, + "refire_interval": int(refire_interval), + "severity": int(severity), + "type": alert_type + } + if alert_type == 'detection': + data['object_type'] = object_type + data['protocols'] = [str(protocols)] + elif alert_type == 'threshold': + data['field_name'] = field_name + data['stat_name'] = stat_name + data['units'] = units + data['interval_length'] = int(interval_length) + data['operand'] = operand + data['operator'] = operator + if field_name2: + data['field_name2'] = field_name2 + if field_op: + data['field_op'] = field_op + if param: + data['param'] = param + if param2: + data['param2'] = param2 + if alert_id: + method = 'PATCH' + url_suffix = 'alerts/{alert_id}'.format(alert_id=alert_id) + else: + method = 'POST' + url_suffix = 'alerts' + + res = http_request(method, url_suffix, data=data) + return res + + +def track_ticket(incident_id, detection_id, incident_owner, incident_status, incident_close_reason): + detection_status = { + 'ticket_id': incident_id + } + + status_map = { + "0": 'new', # pending + "1": 'in_progress', # active + "2": 'closed', # done + "3": 'closed' # archived + } + detection_status['status'] = status_map.get(str(incident_status)) + + # Assignee cannot be an empty string + detection_status['assignee'] = incident_owner if incident_owner else None + # Only set Resolution if the incident is closed + if detection_status['status'] == 'closed' and incident_close_reason: + if incident_close_reason in ('Resolved'): + detection_status['resolution'] = 'action_taken' + elif incident_close_reason in ('False Positive', 'Duplicate'): + detection_status['resolution'] = 'no_action_taken' + else: + # Clear resolution to avoid error + detection_status['resolution'] = None + + res = http_request('PATCH', 'detections/{id}'.format(id=detection_id), data=detection_status, raw_response=True) + return res + + +def tag_devices(tag, add, remove): + body = {} + if add: + body['assign'] = get_devices_by_ip_or_id(add, id_only=True) + if remove: + body['unassign'] = get_devices_by_ip_or_id(remove, id_only=True) + + all_tags = http_request('GET', 'tags').json() + for t in all_tags: + if t['name'] == tag: + tag_id = t['id'] + break + else: + if remove and not add: + return_warning("Warning: tag {} does not exist, nothing to remove.".format(tag)) + tag_create_res = http_request('POST', 'tags', data={'name': tag}, raw_response=True) + tag_location = tag_create_res.headers.get('location') + tag_id = parse_location_header(tag_location) + + res = http_request('POST', "tags/{}/devices".format(tag_id), data=body) + + return res + + +def get_activity_map(ip_or_id, time_interval, from_time, until_time, peer_role, protocol): + device = get_devices_by_ip_or_id(ip_or_id)[0] + + time_intervals = { + '30 minutes': (30, 'MIN'), + '6 hours': (6, 'HR'), + '1 day': (1, 'DAY'), + '1 week': (1, 'WK') + } + + if from_time or until_time: + if from_time and until_time: + interval = 'DT' + start = from_time + end = until_time + else: + raise ValueError("When using a fixed time range both from_time and until_time timestamps need to be provided.") + else: + start, interval = time_intervals.get(time_interval, (30, 'MIN')) + end = 0 + + activity_map_params = { + 'server': SERVER, + 'app_id': get_appliance_uuids()[device.get('node_id')], + 'disc_id': device.get('discovery_id'), + 'start': start, + 'interval': interval, + 'obj': "device", + 'proto': protocol, + 'role': peer_role, + 'end': end + } + + activity_map_link_format = ("{server}/extrahop/#/activitymaps" + "?appliance_id={app_id}" + "&discovery_id={disc_id}" + "&from={start}" + "&interval_type={interval}" + "&object_type={obj}" + "&protocol={proto}" + "&role={role}" + "&until={end}") + + activity_map_link = activity_map_link_format.format(**activity_map_params) + + return activity_map_link + + +def search_packets(output, limit_bytes, limit_search_duration, query_from, query_until, bpf, ip1, port1, ip2, port2): + params = { + 'output': output, + 'limit_bytes': limit_bytes, + 'limit_search_duration': limit_search_duration, + 'always_return_body': 'false', + 'from': query_from, + 'until': query_until, + 'bpf': bpf, + 'ip1': ip1, + 'port1': port1, + 'ip2': ip2, + 'port2': port2 + } + + res = http_request("GET", "packets/search", params=params, raw_response=True) + + return res + + +''' COMMANDS FUNCTIONS ''' + + +def create_or_edit_alert_command(): + dargs = demisto.args() + alert_id = dargs.get('alert_id') + apply_all = bool(strtobool(dargs.get('apply_all', False))) + disabled = bool(strtobool(dargs.get('disabled', False))) + name = dargs.get('name') + notify_snmp = bool(strtobool(dargs.get('notify_snmp', False))) + field_name = dargs.get('field_name') + stat_name = dargs.get('stat_name') + units = dargs.get('units') + interval_length = dargs.get('interval_length') + operand = dargs.get('operand') + refire_interval = dargs.get('refire_interval') + severity = dargs.get('severity') + alert_type = dargs.get('type') + object_type = dargs.get('object_type') + protocols = dargs.get('protocols') + operator = dargs.get('operator') + field_name2 = dargs.get('field_name2') + field_op = dargs.get('field_op') + param = dargs.get('param') + param2 = dargs.get('param2') + create_alert(apply_all, disabled, name, notify_snmp, refire_interval, severity, alert_type, object_type, + protocols, field_name, stat_name, units, interval_length, operand, operator, field_name2, field_op, + param, param2, alert_id) + + +def get_alerts_command(): + res = get_alerts() + format_alerts(res) + + +def edit_watchlist_command(): + dargs = demisto.args() + add = dargs.get('add') + remove = dargs.get('remove') + edit_watchlist(add, remove) + + +def query_records_command(): + dargs = demisto.args() + query_from = dargs.get('query_from') + query_until = dargs.get('query_until') + limit = dargs.get('limit') + offset = dargs.get('offset') + field1 = dargs.get('field1') + operator1 = dargs.get('operator1') + value1 = dargs.get('value1') + field2 = dargs.get('field2') + operator2 = dargs.get('operator2') + value2 = dargs.get('value2') + match_type = dargs.get('match_type') + types = dargs.get('types') + res = query_records(query_from, query_until, limit, offset, field1, operator1, value1, + field2, operator2, value2, match_type, types) + format_records(res) + + +def get_watchlist_command(): + res = get_watchlist() + if len(res) == 0: + demisto.results('No Devices were found in the watchlist') + elif len(res) > 0: + format_devices(res, get_appliance_uuids()) + + +def device_search_command(): + dargs = demisto.args() + name = dargs.get('name') + ip = dargs.get('ip') + mac = dargs.get('mac') + role = dargs.get('role') + software = dargs.get('software') + vendor = dargs.get('vendor') + tag = dargs.get('tag') + discover_time = dargs.get('discover_time') + vlan = dargs.get('vlan') + activity = dargs.get('activity') + operator = dargs.get('operator') + match_type = dargs.get('match_type') + active_from = dargs.get('active_from') + active_until = dargs.get('active_until') + limit = dargs.get('limit') + l3_only = bool(strtobool(dargs.get('l3_only', True))) + found_devices = device_search(name, ip, mac, role, software, vendor, tag, discover_time, + vlan, activity, operator, match_type, active_from, active_until, limit, l3_only) + format_devices(found_devices, get_appliance_uuids()) + + +def track_ticket_command(): + dargs = demisto.args() + incident_id = dargs.get('incident_id') + detection_id = dargs.get('detection_id') + incident_owner = dargs.get('incident_owner') + incident_status = dargs.get('incident_status') + incident_close_reason = dargs.get('incident_close_reason') + track_ticket(incident_id, detection_id, incident_owner, incident_status, incident_close_reason) + ec = { + "ExtraHop": { + "TicketId": incident_id + } + } # type: dict + demisto.results({ + 'Type': entryTypes['note'], + 'ContentsFormat': formats['markdown'], + 'Contents': ec, + 'HumanReadable': 'Successful Modification', + 'EntryContext': createContext(ec, removeNull=True) + }) + + +def get_peers_command(): + dargs = demisto.args() + ip_or_id = dargs.get('ip_or_id') + query_from = dargs.get('query_from', '-30m') + query_until = dargs.get('query_until') + peer_role = dargs.get('peer_role') + protocol = dargs.get('protocol') + peer_devices = get_peers(ip_or_id, query_from, query_until, peer_role, protocol) + format_devices(peer_devices, get_appliance_uuids(), hr_title="{} Peer Device(s) Found", + no_results_msg="No Peer Devices were found") + + +def get_protocols_command(): + dargs = demisto.args() + ip_or_id = dargs.get('ip_or_id') + query_from = dargs.get('query_from') + query_until = dargs.get('query_until') + device = get_protocols(ip_or_id, query_from, query_until) + format_device_with_protocols(device, get_appliance_uuids()) + + +def tag_devices_command(): + dargs = demisto.args() + tag = dargs.get('tag') + add = dargs.get('add') + remove = dargs.get('remove') + tag_devices(tag, add, remove) + + +def get_activity_map_command(): + dargs = demisto.args() + ip_or_id = dargs.get('ip_or_id') + time_interval = dargs.get('time_interval') + from_time = dargs.get('from_time') + until_time = dargs.get('until_time') + peer_role = dargs.get('peer_role') + protocol = dargs.get('protocol') + activity_map_link = get_activity_map(ip_or_id, time_interval, from_time, until_time, peer_role, protocol) + + ec = { + "ExtraHop": { + "ActivityMap": activity_map_link + } + } # type: dict + return_outputs('[View Live Activity Map in ExtraHop]({})'.format(activity_map_link), createContext(ec, removeNull=True), ec) + + +def search_packets_command(): + dargs = demisto.args() + output = dargs.get('output') + limit_bytes = dargs.get('limit_bytes') + limit_search_duration = dargs.get('limit_search_duration') + query_from = dargs.get('query_from') + query_until = dargs.get('query_until') + bpf = dargs.get('bpf') + ip1 = dargs.get('ip1') + port1 = dargs.get('port1') + ip2 = dargs.get('ip2') + port2 = dargs.get('port2') + + res_raw = search_packets(output, limit_bytes, limit_search_duration, query_from, query_until, bpf, ip1, port1, ip2, port2) + if res_raw.status_code == 204: + demisto.results('Search matched no packets.') + else: + filename_header = res_raw.headers.get('content-disposition') + f_attr = 'filename=' + if filename_header and f_attr in filename_header: + quoted_filename = filename_header[filename_header.index(f_attr) + len(f_attr):] + filename = quoted_filename.replace('"', '') + else: + return_error('Error filename could not be found in response header.') + + demisto.results(fileResult(filename, res_raw.content)) + + +''' COMMANDS MANAGER / SWITCH PANEL ''' + + +try: + if demisto.command() == 'test-module': + test_module() + demisto.results('ok') + elif demisto.command() == 'extrahop-get-alerts': + get_alerts_command() + elif demisto.command() == 'extrahop-query-records': + query_records_command() + elif demisto.command() == 'extrahop-device-search': + device_search_command() + elif demisto.command() == 'extrahop-edit-watchlist': + edit_watchlist_command() + elif demisto.command() == 'extrahop-get-watchlist': + get_watchlist_command() + elif demisto.command() == 'extrahop-create-alert': + create_or_edit_alert_command() + elif demisto.command() == 'extrahop-edit-alert': + create_or_edit_alert_command() + elif demisto.command() == 'extrahop-track-ticket': + track_ticket_command() + elif demisto.command() == 'extrahop-get-peers': + get_peers_command() + elif demisto.command() == 'extrahop-get-protocols': + get_protocols_command() + elif demisto.command() == 'extrahop-tag-devices': + tag_devices_command() + elif demisto.command() == 'extrahop-get-activity-map': + get_activity_map_command() + elif demisto.command() == 'extrahop-search-packets': + search_packets_command() + +# Log exceptions +except Exception as e: + return_error('Failed to execute {} command. Error: {}'.format(demisto.command(), str(e))) diff --git a/Integrations/ExtraHop_v2/ExtraHop_v2.yml b/Integrations/ExtraHop_v2/ExtraHop_v2.yml new file mode 100644 index 000000000000..25cbb96895fd --- /dev/null +++ b/Integrations/ExtraHop_v2/ExtraHop_v2.yml @@ -0,0 +1,3035 @@ +commonfields: + id: ExtraHop v2 + version: -1 +name: ExtraHop v2 +display: ExtraHop Reveal(x) +category: Network Security +description: Network detection and response. Complete visibility of network communications + at enterprise scale, real-time threat detections backed by machine learning, and + guided investigation workflows that simplify response. +configuration: +- display: URL + name: url + defaultvalue: "" + type: 0 + required: true +- display: API Key + name: apikey + defaultvalue: "" + type: 4 + required: true +- display: Trust any certificate (not secure) + name: insecure + defaultvalue: "false" + type: 8 + required: false +- display: Use system proxy settings + name: proxy + defaultvalue: "false" + type: 8 + required: false +script: + script: '' + type: python + subtype: python3 + commands: + - name: extrahop-get-alerts + arguments: [] + outputs: + - contextPath: Extrahop.Alert.Operator + description: The logical operator applied when comparing the value of the operand + field to alert conditions. + type: String + - contextPath: Extrahop.Alert.FieldName + description: The name of the monitored metric. + type: String + - contextPath: Extrahop.Alert.NotifySnmp + description: 'Indicates whether to send an SNMP trap when an alert is generated. ' + type: Boolean + - contextPath: Extrahop.Alert.Operand + description: The value to compare against alert conditions. + type: String + - contextPath: Extrahop.Alert.IntervalLength + description: The length of the alert interval, expressed in seconds. + type: Number + - contextPath: Extrahop.Alert.Author + description: 'The name of the user that created the alert. ' + type: String + - contextPath: Extrahop.Alert.Name + description: The unique, friendly name for the alert. + type: String + - contextPath: Extrahop.Alert.FieldName2 + description: The second monitored metric when applying a ratio. + type: String + - contextPath: Extrahop.Alert.RefireInterval + description: The time interval in which alert conditions are monitored, expressed + in seconds. + type: Number + - contextPath: Extrahop.Alert.ModTime + description: 'The time of the most recent update, expressed in milliseconds + since the epoch. ' + type: Number + - contextPath: Extrahop.Alert.Units + description: The interval in which to evaluate the alert condition. + type: String + - contextPath: Extrahop.Alert.ApplyAll + description: Indicates whether the alert is assigned to all available data sources. + type: Boolean + - contextPath: Extrahop.Alert.Type + description: The type of alert. + type: String + - contextPath: Extrahop.Alert.FieldOp + description: The type of comparison between the "field_name" and "field_name2" + fields when applying a ratio. + type: String + - contextPath: Extrahop.Alert.Id + description: The unique identifier for the alert. + type: Number + - contextPath: Extrahop.Alert.Disabled + description: Indicates whether the alert is disabled. + type: Boolean + - contextPath: Extrahop.Alert.Description + description: An optional description for the alert. + type: String + - contextPath: Extrahop.Alert.Severity + description: The severity level of the alert. + type: Number + - contextPath: Extrahop.Alert.StatName + description: The statistic name for the alert. + type: String + description: Get all alert rules from Reveal(x). + - name: extrahop-query-records + arguments: + - name: query_from + required: true + description: 'The beginning timestamp of the time range the query will search, + expressed in milliseconds since the epoch. A negative value specifies that + the search will begin with records created at a time in the past relative + to the current time. For example, specify -10m to begin the search with records + created 10 minutes before the time of the request. The default unit for a + negative value is milliseconds, but other units can be specified with one + of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- + for more details on supported time units and suffixes.' + defaultValue: -30m + - name: query_until + description: 'The ending timestamp of the time range the query will search, + expressed in milliseconds since the epoch. A 0 value specifies that the search + will end with records created at the time of the request. A negative value + specifies that the search will end with records created at a time in the past + relative to the current time. For example, specify -5m to end the search with + records created 5 minutes before the time of the request. The default unit + for a negative value is milliseconds, but other units can be specified with + one of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- + for more details on supported time units and suffixes.' + - name: limit + description: The maximum number of entries to return. + defaultValue: "20" + - name: offset + description: The number of records to skip in the query results. + - name: field1 + auto: PREDEFINED + predefined: + - .any + - .ipaddr + - .port + - accessTime + - ackCode + - ackId + - adminQueue + - age + - alertCode + - alertLevel + - answer + - answers + - appName + - application + - args + - authDomain + - authMethod + - authResult + - authType + - authenticator + - bindDN + - bytes + - cName + - cNameType + - cNames + - cRealm + - callId + - certificateFingerprint + - certificateIsSelfSigned + - certificateIssuer + - certificateKeySize + - certificateNotAfter + - certificateNotBefore + - certificateSignatureAlgorithm + - certificateSubject + - certificateSubjectAlternativeNames + - channel + - cipherSuite + - client + - clientAddr + - clientBuild + - clientBytes + - clientCGPMsgCount + - clientCertificateRequested + - clientCipherAlgorithm + - clientCompressionAlgorithm + - clientImplementation + - clientL2Bytes + - clientLatency + - clientMacAlgorithm + - clientMachine + - clientMsgCount + - clientName + - clientPkts + - clientPort + - clientPrincipalName + - clientRTO + - clientReqDelay + - clientType + - clientVersion + - clientZeroWnd + - collection + - command + - contentType + - conversationId + - cookie + - correlationId + - cwd + - dataSize + - database + - deltaBytes + - deltaPkts + - desktopHeight + - desktopWidth + - destination + - dn + - domain + - drops + - dscpName + - dstQueueMgr + - dups + - duration + - egressInterface + - error + - errorDetail + - expiration + - first + - flowId + - format + - frameCutDuration + - frameSendDuration + - from + - functionId + - functionName + - fwdReqClientAddr + - fwdReqHost + - fwdReqIsEncrypted + - fwdReqServerName + - fwdReqServerPort + - gwAddr + - handshakeTime + - hasSDP + - hassh + - hasshServer + - heartbeatPayloadLength + - heartbeatType + - hitCount + - hopLimit + - host + - htype + - ingressInterface + - interface + - isAborted + - isAuthoritative + - isBinaryProtocol + - isCheckingDisabled + - isCleanShutdown + - isClientDiskRead + - isClientDiskWrite + - isCommandCreate + - isCommandDelete + - isCommandFileInfo + - isCommandLock + - isCommandRead + - isCommandRename + - isCommandWrite + - isCompressed + - isEncrypted + - isNoReply + - isPipelined + - isRecursionAvailable + - isRecursionDesired + - isRenegotiate + - isReqAborted + - isReqTimeout + - isReqTruncated + - isRspAborted + - isRspChunked + - isRspCompressed + - isRspImplicit + - isRspTruncated + - isSQLi + - isSharedSession + - isSubOperation + - isWeakCipherSuite + - isXSS + - ja3Hash + - ja3sHash + - jitter + - kexAlgorithm + - keyboardLayout + - l2Bytes + - l7proto + - label + - last + - launchParams + - loadTime + - loginTime + - method + - missCount + - mos + - msgClass + - msgCode + - msgFormat + - msgId + - msgLength + - msgSize + - msgText + - msgType + - network + - networkAddr + - networkLatency + - nextHop + - nextHopMTU + - notAfter + - offeredAddr + - offset + - opcode + - operation + - option + - origin + - outOfOrder + - path + - payloadType + - payloadTypeId + - persistent + - pkts + - pointer + - printerName + - priority + - procedure + - processingTime + - program + - proto + - protocol + - putAppName + - qname + - qtype + - query + - queue + - queueMgr + - rFactor + - realm + - receiver + - receiverAddr + - receiverAsn + - receiverBytes + - receiverIsBroker + - receiverL2Bytes + - receiverPkts + - receiverPort + - receiverPrefixLength + - receiverRTO + - receiverZeroWnd + - recipient + - recipientList + - redeliveryCount + - referer + - renameDirChanged + - replyTo + - reqBytes + - reqKey + - reqL2Bytes + - reqPdu + - reqPkts + - reqRTO + - reqSize + - reqTimeToLastByte + - reqTransferTime + - requestedColorDepth + - requestedProtocols + - resolvedQueue + - resolvedQueueMgr + - resource + - responseQueue + - roundTripTime + - rspBytes + - rspL2Bytes + - rspPdu + - rspPkts + - rspRTO + - rspSize + - rspTimeToFirstByte + - rspTimeToFirstHeader + - rspTimeToFirstPayload + - rspTimeToLastByte + - rspTransferTime + - rspVersion + - rto + - sNameType + - sNames + - saslMechanism + - searchFilter + - searchScope + - selectedProtocol + - sender + - senderAddr + - senderAsn + - senderBytes + - senderIsBroker + - senderL2Bytes + - senderPkts + - senderPort + - senderPrefixLength + - senderRTO + - senderZeroWnd + - seqNum + - server + - serverAddr + - serverBytes + - serverCGPMsgCount + - serverCipherAlgorithm + - serverCompressionAlgorithm + - serverImplementation + - serverL2Bytes + - serverMacAlgorithm + - serverMsgCount + - serverPkts + - serverPort + - serverPrincipalName + - serverRTO + - serverVersion + - serverZeroWnd + - share + - source + - sqli + - srcQueueMgr + - ssrc + - statement + - status + - statusCode + - statusText + - table + - target + - tcpFlags + - thinkTime + - tickChannel + - ticketHash + - till + - title + - to + - totalMsgLength + - transferBytes + - txId + - type + - unitId + - uri + - user + - userAgent + - vbucket + - version + - vlan + - vxlanVNI + - warning + - xss + description: The name of the field in the record to be filtered. The query compares + field1 to value1 and applies the compare method specified by the operator1 + parameter. If the specified field name is ".any", the union of all field values + will be searched. If the specified field name is ".ipaddr" or ".port", the + client, server, sender, and receiver roles are included in the search. + - name: operator1 + auto: PREDEFINED + predefined: + - '>' + - < + - <= + - '>=' + - '=' + - '!=' + - startswith + - exists + - not_exists + description: The compare method applied when matching value1 against the field1 + contents. + defaultValue: '=' + - name: value1 + description: The value that the query attempts to match. The query compares + this value to the contents of the field1 parameter and applies the compare + method specified by the operator1 parameter. + - name: field2 + auto: PREDEFINED + predefined: + - .any + - .ipaddr + - .port + - accessTime + - ackCode + - ackId + - adminQueue + - age + - alertCode + - alertLevel + - answer + - answers + - appName + - application + - args + - authDomain + - authMethod + - authResult + - authType + - authenticator + - bindDN + - bytes + - cName + - cNameType + - cNames + - cRealm + - callId + - certificateFingerprint + - certificateIsSelfSigned + - certificateIssuer + - certificateKeySize + - certificateNotAfter + - certificateNotBefore + - certificateSignatureAlgorithm + - certificateSubject + - certificateSubjectAlternativeNames + - channel + - cipherSuite + - client + - clientAddr + - clientBuild + - clientBytes + - clientCGPMsgCount + - clientCertificateRequested + - clientCipherAlgorithm + - clientCompressionAlgorithm + - clientImplementation + - clientL2Bytes + - clientLatency + - clientMacAlgorithm + - clientMachine + - clientMsgCount + - clientName + - clientPkts + - clientPort + - clientPrincipalName + - clientRTO + - clientReqDelay + - clientType + - clientVersion + - clientZeroWnd + - collection + - command + - contentType + - conversationId + - cookie + - correlationId + - cwd + - dataSize + - database + - deltaBytes + - deltaPkts + - desktopHeight + - desktopWidth + - destination + - dn + - domain + - drops + - dscpName + - dstQueueMgr + - dups + - duration + - egressInterface + - error + - errorDetail + - expiration + - first + - flowId + - format + - frameCutDuration + - frameSendDuration + - from + - functionId + - functionName + - fwdReqClientAddr + - fwdReqHost + - fwdReqIsEncrypted + - fwdReqServerName + - fwdReqServerPort + - gwAddr + - handshakeTime + - hasSDP + - hassh + - hasshServer + - heartbeatPayloadLength + - heartbeatType + - hitCount + - hopLimit + - host + - htype + - ingressInterface + - interface + - isAborted + - isAuthoritative + - isBinaryProtocol + - isCheckingDisabled + - isCleanShutdown + - isClientDiskRead + - isClientDiskWrite + - isCommandCreate + - isCommandDelete + - isCommandFileInfo + - isCommandLock + - isCommandRead + - isCommandRename + - isCommandWrite + - isCompressed + - isEncrypted + - isNoReply + - isPipelined + - isRecursionAvailable + - isRecursionDesired + - isRenegotiate + - isReqAborted + - isReqTimeout + - isReqTruncated + - isRspAborted + - isRspChunked + - isRspCompressed + - isRspImplicit + - isRspTruncated + - isSQLi + - isSharedSession + - isSubOperation + - isWeakCipherSuite + - isXSS + - ja3Hash + - ja3sHash + - jitter + - kexAlgorithm + - keyboardLayout + - l2Bytes + - l7proto + - label + - last + - launchParams + - loadTime + - loginTime + - method + - missCount + - mos + - msgClass + - msgCode + - msgFormat + - msgId + - msgLength + - msgSize + - msgText + - msgType + - network + - networkAddr + - networkLatency + - nextHop + - nextHopMTU + - notAfter + - offeredAddr + - offset + - opcode + - operation + - option + - origin + - outOfOrder + - path + - payloadType + - payloadTypeId + - persistent + - pkts + - pointer + - printerName + - priority + - procedure + - processingTime + - program + - proto + - protocol + - putAppName + - qname + - qtype + - query + - queue + - queueMgr + - rFactor + - realm + - receiver + - receiverAddr + - receiverAsn + - receiverBytes + - receiverIsBroker + - receiverL2Bytes + - receiverPkts + - receiverPort + - receiverPrefixLength + - receiverRTO + - receiverZeroWnd + - recipient + - recipientList + - redeliveryCount + - referer + - renameDirChanged + - replyTo + - reqBytes + - reqKey + - reqL2Bytes + - reqPdu + - reqPkts + - reqRTO + - reqSize + - reqTimeToLastByte + - reqTransferTime + - requestedColorDepth + - requestedProtocols + - resolvedQueue + - resolvedQueueMgr + - resource + - responseQueue + - roundTripTime + - rspBytes + - rspL2Bytes + - rspPdu + - rspPkts + - rspRTO + - rspSize + - rspTimeToFirstByte + - rspTimeToFirstHeader + - rspTimeToFirstPayload + - rspTimeToLastByte + - rspTransferTime + - rspVersion + - rto + - sNameType + - sNames + - saslMechanism + - searchFilter + - searchScope + - selectedProtocol + - sender + - senderAddr + - senderAsn + - senderBytes + - senderIsBroker + - senderL2Bytes + - senderPkts + - senderPort + - senderPrefixLength + - senderRTO + - senderZeroWnd + - seqNum + - server + - serverAddr + - serverBytes + - serverCGPMsgCount + - serverCipherAlgorithm + - serverCompressionAlgorithm + - serverImplementation + - serverL2Bytes + - serverMacAlgorithm + - serverMsgCount + - serverPkts + - serverPort + - serverPrincipalName + - serverRTO + - serverVersion + - serverZeroWnd + - share + - source + - sqli + - srcQueueMgr + - ssrc + - statement + - status + - statusCode + - statusText + - table + - target + - tcpFlags + - thinkTime + - tickChannel + - ticketHash + - till + - title + - to + - totalMsgLength + - transferBytes + - txId + - type + - unitId + - uri + - user + - userAgent + - vbucket + - version + - vlan + - vxlanVNI + - warning + - xss + description: The name of the field in the record to be filtered. The query compares + field2 to value2 and applies the compare method specified by the operator2 + parameter. If the specified field name is ".any", the union of all field values + will be searched. If the specified field name is ".ipaddr" or ".port", the + client, server, sender, and receiver roles are included in the search. + - name: operator2 + auto: PREDEFINED + predefined: + - '>' + - < + - <= + - '>=' + - '=' + - '!=' + - startswith + - exists + - not_exists + description: The compare method applied when matching value2 against the field2 + contents. + defaultValue: '=' + - name: value2 + description: The value that the query attempts to match. The query compares + this value to the contents of the field2 parameter and applies the compare + method specified by the operator2 parameter. + - name: match_type + auto: PREDEFINED + predefined: + - and + - or + - not + description: The match operator to use when chaining the search fields of 1 + and 2 together. For example, to find HTTP records with status code 500 or + a processing time greater than 100ms (set match_type=or, field1=statusCode, + operator1==, value1=500, field2=processingTime, operator2=> value2=100, types=http). + defaultValue: and + - name: types + auto: PREDEFINED + predefined: + - aaa_request + - aaa_response + - activemq + - ajp + - cifs + - db + - dhcp_request + - dhcp_response + - dicom_request + - dicom_response + - dns_request + - dns_response + - fix_request + - fix_response + - flow + - ftp + - hl7 + - http + - ibmmq_request + - ibmmq_response + - ica_close + - ica_open + - ica_tick + - icmp + - kerberos_request + - kerberos_response + - ldap_request + - ldap_response + - llmnr_request + - llmnr_response + - memcache_request + - memcache_response + - modbus + - mongodb_request + - mongodb_response + - msmq + - nfs + - pop3 + - rdp_close + - rdp_open + - rdp_tick + - redis_request + - redis_response + - rfb_close + - rfb_open + - rfb_tick + - rpc_request + - rpc_response + - rtcp + - rtp + - sccp + - sip_request + - sip_response + - smpp + - smtp + - ssh_close + - ssh_open + - ssh_tick + - ssl_alert + - ssl_close + - ssl_heartbeat + - ssl_open + - telnet + description: A list of one or more record formats for the query to filter on, + comma separated. The query returns only records that match the specified formats. + isArray: true + outputs: + - contextPath: ExtraHop.Record.Type + description: The record format. + type: string + - contextPath: ExtraHop.Record.Source.timestamp + description: The timestamp of the item. + type: Number + - contextPath: ExtraHop.Record.Source.detection + description: The detection type that committed the record. + type: string + - contextPath: ExtraHop.Record.Source.ex.isSuspicious + description: Marked as suspicious by Threat Intelligence. + type: Boolean + - contextPath: ExtraHop.Record.Source.accessTime + description: Access Time + type: Number + - contextPath: ExtraHop.Record.Source.ackCode + description: Ack Code + type: String + - contextPath: ExtraHop.Record.Source.ackId + description: Ack ID + type: String + - contextPath: ExtraHop.Record.Source.adminQueue + description: Admin Queue + type: String + - contextPath: ExtraHop.Record.Source.age + description: Age + type: Number + - contextPath: ExtraHop.Record.Source.alertCode + description: Alert Code + type: Number + - contextPath: ExtraHop.Record.Source.alertLevel + description: Alert Level + type: String + - contextPath: ExtraHop.Record.Source.answer + description: Answer + type: Unknown + - contextPath: ExtraHop.Record.Source.answers + description: Answers + type: Unknown + - contextPath: ExtraHop.Record.Source.appName + description: Application Name + type: String + - contextPath: ExtraHop.Record.Source.application + description: Application + type: Unknown + - contextPath: ExtraHop.Record.Source.args + description: Arguments + type: String + - contextPath: ExtraHop.Record.Source.authDomain + description: Authentication Domain + type: String + - contextPath: ExtraHop.Record.Source.authMethod + description: Authentication Method + type: String + - contextPath: ExtraHop.Record.Source.authResult + description: Auth Result + type: Number + - contextPath: ExtraHop.Record.Source.authType + description: Auth Type + type: Number + - contextPath: ExtraHop.Record.Source.authenticator + description: Authenticator + type: String + - contextPath: ExtraHop.Record.Source.bindDN + description: Bind Distinguished Name + type: String + - contextPath: ExtraHop.Record.Source.bytes + description: Bytes + type: Number + - contextPath: ExtraHop.Record.Source.cName + description: Canonical Endpoint + type: String + - contextPath: ExtraHop.Record.Source.cNameType + description: Client Name Type + type: String + - contextPath: ExtraHop.Record.Source.cNames + description: Client Name Components + type: String + - contextPath: ExtraHop.Record.Source.cRealm + description: Client Realm + type: String + - contextPath: ExtraHop.Record.Source.callId + description: Call ID + type: String + - contextPath: ExtraHop.Record.Source.certificateFingerprint + description: Certificate Fingerprint + type: String + - contextPath: ExtraHop.Record.Source.certificateIsSelfSigned + description: Certificate Self Signed + type: Boolean + - contextPath: ExtraHop.Record.Source.certificateIssuer + description: Certificate Issuer + type: String + - contextPath: ExtraHop.Record.Source.certificateKeySize + description: Certificate Key Size + type: Number + - contextPath: ExtraHop.Record.Source.certificateNotAfter + description: Certificate Not After + type: Number + - contextPath: ExtraHop.Record.Source.certificateNotBefore + description: Certificate Not Before + type: Number + - contextPath: ExtraHop.Record.Source.certificateSignatureAlgorithm + description: Certificate Signature Algorithm + type: String + - contextPath: ExtraHop.Record.Source.certificateSubject + description: Certificate Subject + type: String + - contextPath: ExtraHop.Record.Source.certificateSubjectAlternativeNames + description: Certificate Subject Alternative Names + type: String + - contextPath: ExtraHop.Record.Source.channel + description: Channel + type: String + - contextPath: ExtraHop.Record.Source.cipherSuite + description: Cipher Suite + type: String + - contextPath: ExtraHop.Record.Source.client.type + description: Client Type + type: String + - contextPath: ExtraHop.Record.Source.client.value + description: Client Discovery ID + type: String + - contextPath: ExtraHop.Record.Source.clientAddr.type + description: Client IP Address Type + type: String + - contextPath: ExtraHop.Record.Source.clientAddr.value + description: Client IP Address Value + type: String + - contextPath: ExtraHop.Record.Source.clientBuild + description: Client Build + type: String + - contextPath: ExtraHop.Record.Source.clientBytes + description: Client Bytes + type: Number + - contextPath: ExtraHop.Record.Source.clientCGPMsgCount + description: Client CGP Messages + type: Number + - contextPath: ExtraHop.Record.Source.clientCertificateRequested + description: Client Certificate Requested + type: Boolean + - contextPath: ExtraHop.Record.Source.clientCipherAlgorithm + description: Client Cipher Algorithm + type: String + - contextPath: ExtraHop.Record.Source.clientCompressionAlgorithm + description: Client Compression Algorithm + type: String + - contextPath: ExtraHop.Record.Source.clientImplementation + description: Client Implementation + type: String + - contextPath: ExtraHop.Record.Source.clientL2Bytes + description: Client L2 Bytes + type: Number + - contextPath: ExtraHop.Record.Source.clientLatency + description: Client Latency + type: Number + - contextPath: ExtraHop.Record.Source.clientMacAlgorithm + description: Client MAC Algorithm + type: String + - contextPath: ExtraHop.Record.Source.clientMachine + description: Client Machine + type: String + - contextPath: ExtraHop.Record.Source.clientMsgCount + description: Client Messages + type: Number + - contextPath: ExtraHop.Record.Source.clientName + description: Client Name + type: String + - contextPath: ExtraHop.Record.Source.clientPkts + description: Client Packets + type: Number + - contextPath: ExtraHop.Record.Source.clientPort + description: Client Port + type: Number + - contextPath: ExtraHop.Record.Source.clientPrincipalName + description: Client Principal Name + type: String + - contextPath: ExtraHop.Record.Source.clientRTO + description: Client RTO + type: Number + - contextPath: ExtraHop.Record.Source.clientReqDelay + description: Client Request Delay + type: Number + - contextPath: ExtraHop.Record.Source.clientType + description: ICA Client Type + type: String + - contextPath: ExtraHop.Record.Source.clientVersion + description: Client Version + type: String + - contextPath: ExtraHop.Record.Source.clientZeroWnd + description: Client Zero Windows + type: Number + - contextPath: ExtraHop.Record.Source.collection + description: Collection + type: String + - contextPath: ExtraHop.Record.Source.command + description: Command + type: String + - contextPath: ExtraHop.Record.Source.contentType + description: Content Type + type: String + - contextPath: ExtraHop.Record.Source.conversationId + description: Conversation ID + type: Number + - contextPath: ExtraHop.Record.Source.cookie + description: Cookie + type: String + - contextPath: ExtraHop.Record.Source.correlationId + description: Correlation ID + type: String + - contextPath: ExtraHop.Record.Source.cwd + description: Current Working Directory + type: String + - contextPath: ExtraHop.Record.Source.dataSize + description: Data Size + type: Number + - contextPath: ExtraHop.Record.Source.database + description: Database + type: String + - contextPath: ExtraHop.Record.Source.deltaBytes + description: Delta Bytes + type: Number + - contextPath: ExtraHop.Record.Source.deltaPkts + description: Delta Packets + type: Number + - contextPath: ExtraHop.Record.Source.desktopHeight + description: Desktop Height + type: Number + - contextPath: ExtraHop.Record.Source.desktopWidth + description: Desktop Width + type: Number + - contextPath: ExtraHop.Record.Source.destination + description: Destination + type: String + - contextPath: ExtraHop.Record.Source.dn + description: Distinguished Name + type: String + - contextPath: ExtraHop.Record.Source.domain + description: Domain + type: String + - contextPath: ExtraHop.Record.Source.drops + description: Drops + type: Number + - contextPath: ExtraHop.Record.Source.dscpName + description: DSCP + type: String + - contextPath: ExtraHop.Record.Source.dstQueueMgr + description: Destination Queue Manager + type: String + - contextPath: ExtraHop.Record.Source.dups + description: Dups + type: Number + - contextPath: ExtraHop.Record.Source.duration + description: Duration + type: Number + - contextPath: ExtraHop.Record.Source.egressInterface + description: Egress Interface + type: Unknown + - contextPath: ExtraHop.Record.Source.error + description: Error + type: String + - contextPath: ExtraHop.Record.Source.errorDetail + description: Error Detail + type: String + - contextPath: ExtraHop.Record.Source.expiration + description: Expiration + type: Number + - contextPath: ExtraHop.Record.Source.first + description: First + type: Number + - contextPath: ExtraHop.Record.Source.flowId + description: Flow + type: String + - contextPath: ExtraHop.Record.Source.format + description: Format + type: String + - contextPath: ExtraHop.Record.Source.frameCutDuration + description: Frame Cut Duration + type: Number + - contextPath: ExtraHop.Record.Source.frameSendDuration + description: Frame Send Duration + type: Number + - contextPath: ExtraHop.Record.Source.from + description: From + type: String + - contextPath: ExtraHop.Record.Source.functionId + description: Function ID + type: Number + - contextPath: ExtraHop.Record.Source.functionName + description: Function Name + type: String + - contextPath: ExtraHop.Record.Source.fwdReqClientAddr.type + description: Forwarded Request Client IP Address Type + type: String + - contextPath: ExtraHop.Record.Source.fwdReqClientAddr.value + description: Forwarded Request Client IP Address Value + type: String + - contextPath: ExtraHop.Record.Source.fwdReqHost + description: Forwarded Request Host + type: String + - contextPath: ExtraHop.Record.Source.fwdReqIsEncrypted + description: Forwarded Request Is Encrypted + type: Boolean + - contextPath: ExtraHop.Record.Source.fwdReqServerName + description: Forwarded Request Server Name + type: String + - contextPath: ExtraHop.Record.Source.fwdReqServerPort + description: Forwarded Request Server Port + type: Number + - contextPath: ExtraHop.Record.Source.gwAddr.type + description: Gateway IP Address Type + type: String + - contextPath: ExtraHop.Record.Source.gwAddr.value + description: Gateway IP Address Value + type: String + - contextPath: ExtraHop.Record.Source.handshakeTime + description: Handshake Time + type: Number + - contextPath: ExtraHop.Record.Source.hasSDP + description: Has SDP + type: Boolean + - contextPath: ExtraHop.Record.Source.hassh + description: HASSH + type: String + - contextPath: ExtraHop.Record.Source.hasshServer + description: HASSH Server + type: String + - contextPath: ExtraHop.Record.Source.heartbeatPayloadLength + description: Heartbeat Payload Length + type: Number + - contextPath: ExtraHop.Record.Source.heartbeatType + description: Heartbeat Type + type: Number + - contextPath: ExtraHop.Record.Source.hitCount + description: Hit Count + type: Number + - contextPath: ExtraHop.Record.Source.hopLimit + description: Hop Limit + type: Number + - contextPath: ExtraHop.Record.Source.host + description: Host + type: String + - contextPath: ExtraHop.Record.Source.htype + description: Hardware Address Type + type: Number + - contextPath: ExtraHop.Record.Source.ingressInterface + description: Ingress Interface + type: Unknown + - contextPath: ExtraHop.Record.Source.interface + description: Interface + type: String + - contextPath: ExtraHop.Record.Source.isAborted + description: Aborted + type: Boolean + - contextPath: ExtraHop.Record.Source.isAuthoritative + description: Authoritative + type: Boolean + - contextPath: ExtraHop.Record.Source.isBinaryProtocol + description: Binary Protocol + type: Boolean + - contextPath: ExtraHop.Record.Source.isCheckingDisabled + description: Checking Disabled + type: Boolean + - contextPath: ExtraHop.Record.Source.isCleanShutdown + description: Clean Shutdown + type: Boolean + - contextPath: ExtraHop.Record.Source.isClientDiskRead + description: Client Disk Read + type: Boolean + - contextPath: ExtraHop.Record.Source.isClientDiskWrite + description: Client Disk Write + type: Boolean + - contextPath: ExtraHop.Record.Source.isCommandCreate + description: Create Command + type: Boolean + - contextPath: ExtraHop.Record.Source.isCommandDelete + description: Delete Command + type: Boolean + - contextPath: ExtraHop.Record.Source.isCommandFileInfo + description: FileInfo Command + type: Boolean + - contextPath: ExtraHop.Record.Source.isCommandLock + description: Lock Command + type: Boolean + - contextPath: ExtraHop.Record.Source.isCommandRead + description: Read Command + type: Boolean + - contextPath: ExtraHop.Record.Source.isCommandRename + description: Rename Command + type: Boolean + - contextPath: ExtraHop.Record.Source.isCommandWrite + description: Write Command + type: Boolean + - contextPath: ExtraHop.Record.Source.isCompressed + description: Compressed + type: Boolean + - contextPath: ExtraHop.Record.Source.isEncrypted + description: Encrypted + type: Boolean + - contextPath: ExtraHop.Record.Source.isNoReply + description: No Reply + type: Boolean + - contextPath: ExtraHop.Record.Source.isPipelined + description: Pipelined + type: Boolean + - contextPath: ExtraHop.Record.Source.isRecursionAvailable + description: Recursion Available + type: Boolean + - contextPath: ExtraHop.Record.Source.isRecursionDesired + description: Recursion Desired + type: Boolean + - contextPath: ExtraHop.Record.Source.isRenegotiate + description: Renegotiate + type: Boolean + - contextPath: ExtraHop.Record.Source.isReqAborted + description: Request Aborted + type: Boolean + - contextPath: ExtraHop.Record.Source.isReqTimeout + description: Request Timed Out + type: Boolean + - contextPath: ExtraHop.Record.Source.isReqTruncated + description: Request Truncated + type: Boolean + - contextPath: ExtraHop.Record.Source.isRspAborted + description: Response Aborted + type: Boolean + - contextPath: ExtraHop.Record.Source.isRspChunked + description: Chunked + type: Boolean + - contextPath: ExtraHop.Record.Source.isRspCompressed + description: Rsp Compressed + type: Boolean + - contextPath: ExtraHop.Record.Source.isRspImplicit + description: Response Implicit + type: Boolean + - contextPath: ExtraHop.Record.Source.isRspTruncated + description: Response Truncated + type: Boolean + - contextPath: ExtraHop.Record.Source.isSQLi + description: Contains SQLi + type: Boolean + - contextPath: ExtraHop.Record.Source.isSharedSession + description: Shared Session + type: Boolean + - contextPath: ExtraHop.Record.Source.isSubOperation + description: Is a suboperation + type: Boolean + - contextPath: ExtraHop.Record.Source.isWeakCipherSuite + description: Weak Cipher Suite + type: Boolean + - contextPath: ExtraHop.Record.Source.isXSS + description: Contains XSS + type: Boolean + - contextPath: ExtraHop.Record.Source.ja3Hash + description: JA3 Hash + type: String + - contextPath: ExtraHop.Record.Source.ja3sHash + description: JA3S Hash + type: String + - contextPath: ExtraHop.Record.Source.jitter + description: Jitter + type: Number + - contextPath: ExtraHop.Record.Source.kexAlgorithm + description: KEX Algorithm + type: String + - contextPath: ExtraHop.Record.Source.keyboardLayout + description: Keyboard Layout + type: String + - contextPath: ExtraHop.Record.Source.l2Bytes + description: L2 Bytes + type: Number + - contextPath: ExtraHop.Record.Source.l7proto + description: L7 Protocol + type: String + - contextPath: ExtraHop.Record.Source.label + description: Label + type: String + - contextPath: ExtraHop.Record.Source.last + description: Last + type: Number + - contextPath: ExtraHop.Record.Source.launchParams + description: Parameters + type: String + - contextPath: ExtraHop.Record.Source.loadTime + description: Load Time + type: Number + - contextPath: ExtraHop.Record.Source.loginTime + description: Login Time + type: Number + - contextPath: ExtraHop.Record.Source.method + description: Method + type: String + - contextPath: ExtraHop.Record.Source.missCount + description: Miss Count + type: Number + - contextPath: ExtraHop.Record.Source.mos + description: MOS + type: Number + - contextPath: ExtraHop.Record.Source.msgClass + description: Message Class + type: String + - contextPath: ExtraHop.Record.Source.msgCode + description: Message Code + type: Number + - contextPath: ExtraHop.Record.Source.msgFormat + description: Message Format + type: String + - contextPath: ExtraHop.Record.Source.msgId + description: Message ID + type: Number + - contextPath: ExtraHop.Record.Source.msgLength + description: Message Length + type: Number + - contextPath: ExtraHop.Record.Source.msgSize + description: Message Size + type: Number + - contextPath: ExtraHop.Record.Source.msgText + description: Message Text + type: String + - contextPath: ExtraHop.Record.Source.msgType + description: Message Type + type: String + - contextPath: ExtraHop.Record.Source.network + description: Flow Network + type: Unknown + - contextPath: ExtraHop.Record.Source.networkAddr.type + description: Flow Network IP Address Type + type: String + - contextPath: ExtraHop.Record.Source.networkAddr.value + description: Flow Network IP Address Value + type: String + - contextPath: ExtraHop.Record.Source.networkLatency + description: Network Latency + type: Number + - contextPath: ExtraHop.Record.Source.nextHop.type + description: Next Hop IP Address Type + type: String + - contextPath: ExtraHop.Record.Source.nextHop.value + description: Next Hop IP Address Value + type: String + - contextPath: ExtraHop.Record.Source.nextHopMTU + description: Next Hop MTU + type: Number + - contextPath: ExtraHop.Record.Source.notAfter + description: Certificate Not After + type: Number + - contextPath: ExtraHop.Record.Source.offeredAddr.type + description: Offered IP Address Type + type: String + - contextPath: ExtraHop.Record.Source.offeredAddr.value + description: Offered IP Address Value + type: String + - contextPath: ExtraHop.Record.Source.offset + description: Offset + type: Number + - contextPath: ExtraHop.Record.Source.opcode + description: Opcode + type: String + - contextPath: ExtraHop.Record.Source.operation + description: Operation + type: String + - contextPath: ExtraHop.Record.Source.option + description: Options + type: String + - contextPath: ExtraHop.Record.Source.origin + description: Origin + type: String + - contextPath: ExtraHop.Record.Source.outOfOrder + description: Out Of Order + type: Number + - contextPath: ExtraHop.Record.Source.path + description: Path + type: String + - contextPath: ExtraHop.Record.Source.payloadType + description: Payload Type + type: String + - contextPath: ExtraHop.Record.Source.payloadTypeId + description: Payload Type ID + type: Number + - contextPath: ExtraHop.Record.Source.persistent + description: Persistent + type: Boolean + - contextPath: ExtraHop.Record.Source.pkts + description: Packets + type: Number + - contextPath: ExtraHop.Record.Source.pointer + description: Pointer + type: Number + - contextPath: ExtraHop.Record.Source.printerName + description: Printer Name + type: String + - contextPath: ExtraHop.Record.Source.priority + description: Priority + type: Number + - contextPath: ExtraHop.Record.Source.procedure + description: Procedure + type: String + - contextPath: ExtraHop.Record.Source.processingTime + description: Processing Time + type: Number + - contextPath: ExtraHop.Record.Source.program + description: Program + type: String + - contextPath: ExtraHop.Record.Source.proto + description: IP Protocol + type: String + - contextPath: ExtraHop.Record.Source.protocol + description: Protocol + type: String + - contextPath: ExtraHop.Record.Source.putAppName + description: Put Application Name + type: String + - contextPath: ExtraHop.Record.Source.qname + description: Query Name + type: String + - contextPath: ExtraHop.Record.Source.qtype + description: Query Type + type: String + - contextPath: ExtraHop.Record.Source.query + description: Query + type: String + - contextPath: ExtraHop.Record.Source.queue + description: Queue + type: String + - contextPath: ExtraHop.Record.Source.queueMgr + description: Queue Manager + type: String + - contextPath: ExtraHop.Record.Source.rFactor + description: R Factor + type: Number + - contextPath: ExtraHop.Record.Source.realm + description: Server Realm + type: String + - contextPath: ExtraHop.Record.Source.receiver.type + description: Receiver Type + type: String + - contextPath: ExtraHop.Record.Source.receiver.value + description: Receiver Discovery ID + type: String + - contextPath: ExtraHop.Record.Source.receiverAddr.type + description: Receiver IP Address Type + type: String + - contextPath: ExtraHop.Record.Source.receiverAddr.value + description: Receiver IP Address Value + type: String + - contextPath: ExtraHop.Record.Source.receiverAsn + description: Receiver ASN + type: Number + - contextPath: ExtraHop.Record.Source.receiverBytes + description: Receiver Bytes + type: Number + - contextPath: ExtraHop.Record.Source.receiverIsBroker + description: To Broker + type: Boolean + - contextPath: ExtraHop.Record.Source.receiverL2Bytes + description: Receiver L2 Bytes + type: Number + - contextPath: ExtraHop.Record.Source.receiverPkts + description: Receiver Packets + type: Number + - contextPath: ExtraHop.Record.Source.receiverPort + description: Receiver Port + type: Number + - contextPath: ExtraHop.Record.Source.receiverPrefixLength + description: Receiver Prefix Length + type: Number + - contextPath: ExtraHop.Record.Source.receiverRTO + description: Receiver RTO + type: Number + - contextPath: ExtraHop.Record.Source.receiverZeroWnd + description: Receiver Zero Windows + type: Number + - contextPath: ExtraHop.Record.Source.recipient + description: Recipient + type: String + - contextPath: ExtraHop.Record.Source.recipientList + description: Recipient List + type: String + - contextPath: ExtraHop.Record.Source.redeliveryCount + description: Redelivery Count + type: Number + - contextPath: ExtraHop.Record.Source.referer + description: Referer + type: String + - contextPath: ExtraHop.Record.Source.renameDirChanged + description: Rename Directory Changed + type: Boolean + - contextPath: ExtraHop.Record.Source.replyTo + description: Reply To + type: String + - contextPath: ExtraHop.Record.Source.reqBytes + description: Request Bytes + type: Number + - contextPath: ExtraHop.Record.Source.reqKey + description: Request Key + type: String + - contextPath: ExtraHop.Record.Source.reqL2Bytes + description: Request L2 Bytes + type: Number + - contextPath: ExtraHop.Record.Source.reqPdu + description: Request PDU Type + type: String + - contextPath: ExtraHop.Record.Source.reqPkts + description: Request Packets + type: Number + - contextPath: ExtraHop.Record.Source.reqRTO + description: Request RTO + type: Number + - contextPath: ExtraHop.Record.Source.reqSize + description: Request Size + type: Number + - contextPath: ExtraHop.Record.Source.reqTimeToLastByte + description: Req Time To Last Byte + type: Number + - contextPath: ExtraHop.Record.Source.reqTransferTime + description: Request Transfer Time + type: Number + - contextPath: ExtraHop.Record.Source.requestedColorDepth + description: Requested Color Depth + type: String + - contextPath: ExtraHop.Record.Source.requestedProtocols + description: Requested Protocols + type: String + - contextPath: ExtraHop.Record.Source.resolvedQueue + description: Resolved Queue + type: String + - contextPath: ExtraHop.Record.Source.resolvedQueueMgr + description: Resolved Queue Manager + type: String + - contextPath: ExtraHop.Record.Source.resource + description: Resource + type: String + - contextPath: ExtraHop.Record.Source.responseQueue + description: Response Queue + type: String + - contextPath: ExtraHop.Record.Source.roundTripTime + description: Round Trip Time + type: Number + - contextPath: ExtraHop.Record.Source.rspBytes + description: Response Bytes + type: Number + - contextPath: ExtraHop.Record.Source.rspL2Bytes + description: Response L2 Bytes + type: Number + - contextPath: ExtraHop.Record.Source.rspPdu + description: Response PDU Type + type: String + - contextPath: ExtraHop.Record.Source.rspPkts + description: Response Packets + type: Number + - contextPath: ExtraHop.Record.Source.rspRTO + description: Response RTO + type: Number + - contextPath: ExtraHop.Record.Source.rspSize + description: Response Size + type: Number + - contextPath: ExtraHop.Record.Source.rspTimeToFirstByte + description: Rsp Time To First Byte + type: Number + - contextPath: ExtraHop.Record.Source.rspTimeToFirstHeader + description: Rsp Time To First Header + type: Number + - contextPath: ExtraHop.Record.Source.rspTimeToFirstPayload + description: Rsp Time To First Payload + type: Number + - contextPath: ExtraHop.Record.Source.rspTimeToLastByte + description: Rsp Time To Last Byte + type: Number + - contextPath: ExtraHop.Record.Source.rspTransferTime + description: Response Transfer Time + type: Number + - contextPath: ExtraHop.Record.Source.rspVersion + description: Response Version + type: String + - contextPath: ExtraHop.Record.Source.rto + description: RTO + type: Number + - contextPath: ExtraHop.Record.Source.sNameType + description: Server Name Type + type: String + - contextPath: ExtraHop.Record.Source.sNames + description: Server Name Components + type: String + - contextPath: ExtraHop.Record.Source.saslMechanism + description: SASL Mechanism + type: String + - contextPath: ExtraHop.Record.Source.searchFilter + description: Search Filter + type: String + - contextPath: ExtraHop.Record.Source.searchScope + description: Search Scope + type: String + - contextPath: ExtraHop.Record.Source.selectedProtocol + description: Selected Protocol + type: String + - contextPath: ExtraHop.Record.Source.sender.type + description: Sender Type + type: String + - contextPath: ExtraHop.Record.Source.sender.value + description: Sender Discovery ID + type: String + - contextPath: ExtraHop.Record.Source.senderAddr.type + description: Sender IP Address Type + type: String + - contextPath: ExtraHop.Record.Source.senderAddr.value + description: Sender IP Address Value + type: String + - contextPath: ExtraHop.Record.Source.senderAsn + description: Sender ASN + type: Number + - contextPath: ExtraHop.Record.Source.senderBytes + description: Sender Bytes + type: Number + - contextPath: ExtraHop.Record.Source.senderIsBroker + description: From Broker + type: Boolean + - contextPath: ExtraHop.Record.Source.senderL2Bytes + description: Sender L2 Bytes + type: Number + - contextPath: ExtraHop.Record.Source.senderPkts + description: Sender Packets + type: Number + - contextPath: ExtraHop.Record.Source.senderPort + description: Sender Port + type: Number + - contextPath: ExtraHop.Record.Source.senderPrefixLength + description: Sender Prefix Length + type: Number + - contextPath: ExtraHop.Record.Source.senderRTO + description: Sender RTO + type: Number + - contextPath: ExtraHop.Record.Source.senderZeroWnd + description: Sender Zero Windows + type: Number + - contextPath: ExtraHop.Record.Source.seqNum + description: Sequence Number + type: Number + - contextPath: ExtraHop.Record.Source.server.type + description: Server Type + type: String + - contextPath: ExtraHop.Record.Source.server.value + description: Server Discovery ID + type: String + - contextPath: ExtraHop.Record.Source.serverAddr.type + description: Server IPv4 Address Type + type: String + - contextPath: ExtraHop.Record.Source.serverAddr.value + description: Server IPv4 Address Value + type: String + - contextPath: ExtraHop.Record.Source.serverBytes + description: Server Bytes + type: Number + - contextPath: ExtraHop.Record.Source.serverCGPMsgCount + description: Server CGP Messages + type: Number + - contextPath: ExtraHop.Record.Source.serverCipherAlgorithm + description: Server Cipher Algorithm + type: String + - contextPath: ExtraHop.Record.Source.serverCompressionAlgorithm + description: Server Compression Algorithm + type: String + - contextPath: ExtraHop.Record.Source.serverImplementation + description: Server Implementation + type: String + - contextPath: ExtraHop.Record.Source.serverL2Bytes + description: Server L2 Bytes + type: Number + - contextPath: ExtraHop.Record.Source.serverMacAlgorithm + description: Server MAC Algorithm + type: String + - contextPath: ExtraHop.Record.Source.serverMsgCount + description: Server Messages + type: Number + - contextPath: ExtraHop.Record.Source.serverPkts + description: Server Packets + type: Number + - contextPath: ExtraHop.Record.Source.serverPort + description: Server Port + type: Number + - contextPath: ExtraHop.Record.Source.serverPrincipalName + description: Server Principal Name + type: String + - contextPath: ExtraHop.Record.Source.serverRTO + description: Server RTO + type: Number + - contextPath: ExtraHop.Record.Source.serverVersion + description: Server Version + type: String + - contextPath: ExtraHop.Record.Source.serverZeroWnd + description: Server Zero Windows + type: Number + - contextPath: ExtraHop.Record.Source.share + description: Share + type: String + - contextPath: ExtraHop.Record.Source.source + description: Source + type: String + - contextPath: ExtraHop.Record.Source.sqli + description: Potential SQLi + type: String + - contextPath: ExtraHop.Record.Source.srcQueueMgr + description: Source Queue Manager + type: String + - contextPath: ExtraHop.Record.Source.ssrc + description: Sender SSRC + type: Number + - contextPath: ExtraHop.Record.Source.statement + description: Statement + type: String + - contextPath: ExtraHop.Record.Source.status + description: Status + type: String + - contextPath: ExtraHop.Record.Source.statusCode + description: Status Code + type: Number + - contextPath: ExtraHop.Record.Source.statusText + description: Status Text + type: String + - contextPath: ExtraHop.Record.Source.table + description: Table + type: String + - contextPath: ExtraHop.Record.Source.target + description: Target + type: String + - contextPath: ExtraHop.Record.Source.tcpFlags + description: TCP Flags + type: Number + - contextPath: ExtraHop.Record.Source.thinkTime + description: Think Time + type: Number + - contextPath: ExtraHop.Record.Source.tickChannel + description: Tick Channel + type: String + - contextPath: ExtraHop.Record.Source.ticketHash + description: Encrypted Ticket Hash + type: String + - contextPath: ExtraHop.Record.Source.till + description: Till + type: String + - contextPath: ExtraHop.Record.Source.title + description: Title + type: String + - contextPath: ExtraHop.Record.Source.to + description: To + type: String + - contextPath: ExtraHop.Record.Source.totalMsgLength + description: Total Msg Length + type: Number + - contextPath: ExtraHop.Record.Source.transferBytes + description: Bytes Transferred + type: Number + - contextPath: ExtraHop.Record.Source.txId + description: Transaction ID + type: Number + - contextPath: ExtraHop.Record.Source.unitId + description: Unit ID + type: Number + - contextPath: ExtraHop.Record.Source.uri + description: URI + type: String + - contextPath: ExtraHop.Record.Source.user + description: User + type: String + - contextPath: ExtraHop.Record.Source.userAgent + description: User Agent + type: String + - contextPath: ExtraHop.Record.Source.vbucket + description: vBucket + type: Number + - contextPath: ExtraHop.Record.Source.version + description: Version + type: String + - contextPath: ExtraHop.Record.Source.vlan + description: VLAN + type: Number + - contextPath: ExtraHop.Record.Source.vxlanVNI + description: VxLAN VNI + type: Number + - contextPath: ExtraHop.Record.Source.warning + description: Warning + type: String + - contextPath: ExtraHop.Record.Source.xss + description: Potential XSS + type: String + description: Query records from Reveal(x). + - name: extrahop-device-search + arguments: + - name: name + description: The name of the device. This searches for matches on all ExtraHop + name fields (DHCP, DNS, NetBIOS, Cisco Discovery Protocol, etc). + - name: ip + description: The IP address of the device. + - name: mac + description: The MAC address of the device. + - name: role + auto: PREDEFINED + predefined: + - db_server + - dhcp_server + - dns_server + - file_server + - firewall + - gateway + - http_server + - domain_controller + - web_proxy + - load_balancer + - pc + - medical_device + - mobile_device + - printer + - scanner + - custom + - voip_phone + - other + description: The role of the device. + - name: software + auto: PREDEFINED + predefined: + - android + - apple_ios + - arista_eos + - cisco_ios + - cisco_nx-os + - chrome_os + - linux + - mac_os + - windows + - windows_server + - windows_server_2008 + - windows_server_2008_r2 + - windows_server_2012 + - windows_server_2012_r2 + - windows_server_2016 + - windows_vista + - windows_7 + - windows_8 + - windows_8.1 + - windows_10 + description: The OS of the device. + - name: tag + description: 'A tag present on the device. ' + - name: vendor + auto: PREDEFINED + predefined: + - alcatel-lucent + - apple + - arista + - asus + - brother + - canon + - cisco + - cisco-linksys + - citrix + - dell + - dellemc + - d-link + - emc + - f5 + - google + - hp + - htc + - huawei + - ibm + - juniper + - kyocera + - microsoft + - netapp + - netgear + - nokia + - nortel + - oracle + - paloalto + - samsung + - 3com + - toshiba + - virtualbox + - vmware + - zte + description: The vendor of the device, based on MAC address via OUI lookup. + - name: discover_time + description: 'The time that device was first seen by ExtraHop, expressed in + milliseconds since the epoch. A negative value is evaluated relative to the + current time. The default unit for a negative value is milliseconds, but other + units can be specified with the following unit suffixes: ms, s, m, h, d, w, + M, y. For example, to look one day back enter -1d or -24h. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- + for more details on supported time units and suffixes.' + - name: vlan + description: The VLAN ID of the Virtual LAN that the device is on. + - name: activity + auto: PREDEFINED + predefined: + - aaa_client + - aaa_server + - ajp_client + - ajp_server + - amf_client + - amf_server + - cifs_client + - cifs_server + - db_client + - db_server + - dhcp_client + - dhcp_server + - dicom_client + - dicom_server + - dns_client + - dns_server + - fix_client + - fix_server + - ftp_client + - ftp_server + - hl7_client + - hl7_server + - http_client + - http_server + - ibmmq_client + - ibmmq_server + - ica_client + - ica_server + - icmp + - iscsi_client + - iscsi_server + - kerberos_client + - kerberos_server + - ldap_client + - ldap_server + - llmnr_client + - llmnr_server + - memcache_client + - memcache_server + - modbus_client + - modbus_server + - mongo_client + - mongo_server + - msmq + - nbns_client + - nbns_server + - nfs_client + - nfs_server + - pcoip_client + - pcoip_server + - pop3_client + - pop3_server + - rdp_client + - rdp_server + - redis_client + - redis_server + - rfb_client + - rfb_server + - rpc_client + - rpc_server + - rtcp + - rtp + - scanner + - sip_client + - sip_server + - smpp_client + - smpp_server + - smtp_client + - smtp_server + - ssh_client + - ssh_server + - ssl_client + - ssl_server + - tcp + - telnet_client + - telnet_server + - udp + - websocket_client + - websocket_server + - wsman_client + - wsman_server + description: The activity of the device. + - name: operator + auto: PREDEFINED + predefined: + - '>' + - < + - <= + - '>=' + - '=' + - '!=' + - startswith + - exists + - not_exists + - "~" + - '!~' + description: The compare method applied when matching the fields against their + values. For example, to find devices with names that begin with 'SEA1' (set + name=SEA1, operator=startswith) + defaultValue: '=' + - name: match_type + auto: PREDEFINED + predefined: + - and + - or + - not + description: The match operator to use when chaining the search fields together. + For example, to find all HTTP servers running Windows on the network (set + match_type=and, role=http_server, software=windows). + defaultValue: and + - name: active_from + description: 'The beginning timestamp for the request. Return only devices active + after this time. Time is expressed in milliseconds since the epoch. 0 indicates + the time of the request. A negative value is evaluated relative to the current + time. The default unit for a negative value is milliseconds, but other units + can be specified with one of the following unit suffixes: ms, s, m, h, d, + w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- + for more details on supported time units and suffixes.' + - name: active_until + description: 'The ending timestamp for the request. Return only devices active + before this time. Time is expressed in milliseconds since the epoch. 0 indicates + the time of the request. A negative value is evaluated relative to the current + time. The default unit for a negative value is milliseconds, but other units + can be specified with one of the following unit suffixes: ms, s, m, h, d, + w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- + for more details on supported time units and suffixes.' + - name: limit + description: The maximum number of devices to return. + defaultValue: "10" + - name: l3_only + auto: PREDEFINED + predefined: + - "true" + - "false" + description: Only returns layer 3 devices by filtering out any layer 2 parent + devices. + defaultValue: "true" + outputs: + - contextPath: ExtraHop.Device.Macaddr + description: The MAC Address of the device. + type: String + - contextPath: ExtraHop.Device.DeviceClass + description: The class of the device. + type: String + - contextPath: ExtraHop.Device.UserModTime + description: The time of the most recent update, expressed in milliseconds since + the epoch. + type: Number + - contextPath: ExtraHop.Device.AutoRole + description: The role automatically detected by the ExtraHop. + type: String + - contextPath: ExtraHop.Device.ParentId + description: The ID of the parent device. + type: Number + - contextPath: ExtraHop.Device.Vendor + description: The device vendor. + type: String + - contextPath: ExtraHop.Device.Analysis + description: The level of analysis preformed on the device. + type: string + - contextPath: ExtraHop.Device.DiscoveryId + description: The UUID given by the Discover appliance. + type: String + - contextPath: ExtraHop.Device.DefaultName + description: The default name of the device. + type: String + - contextPath: ExtraHop.Device.DisplayName + description: The display name of device. + type: String + - contextPath: ExtraHop.Device.OnWatchlist + description: Whether the device is on the advanced analysis whitelist. + type: Boolean + - contextPath: ExtraHop.Device.ModTime + description: The time of the most recent update, expressed in milliseconds since + the epoch. + type: Number + - contextPath: ExtraHop.Device.IsL3 + description: Indicates whether the device is a Layer 3 device. + type: Boolean + - contextPath: ExtraHop.Device.Role + description: The role of the device. + type: String + - contextPath: ExtraHop.Device.DiscoverTime + description: The time that the device was discovered. + type: Number + - contextPath: ExtraHop.Device.Id + description: The ID of the device. + type: Number + - contextPath: ExtraHop.Device.Ipaddr4 + description: The IPv4 address of the device. + type: String + - contextPath: ExtraHop.Device.Vlanid + description: The ID of VLan. + type: Number + - contextPath: ExtraHop.Device.Ipaddr6 + description: The IPv6 address of the device. + type: string + - contextPath: ExtraHop.Device.NodeId + description: The Node ID of the Discover appliance. + type: number + - contextPath: ExtraHop.Device.Description + description: A user customizable description of the device. + type: string + - contextPath: ExtraHop.Device.DnsName + description: The DNS name associated with the device. + type: string + - contextPath: ExtraHop.Device.DhcpName + description: The DHCP name associated with the device. + type: string + - contextPath: ExtraHop.Device.CdpName + description: The Cisco Discovery Protocol name associated with the device. + type: string + - contextPath: ExtraHop.Device.NetbiosName + description: The NetBIOS name associated with the device. + type: string + - contextPath: ExtraHop.Device.Url + description: Link to the device details page in ExtraHop. + type: string + description: Search for devices in Reveal(x). + - name: extrahop-edit-watchlist + arguments: + - name: add + description: The list of IP Addresses or ExtraHop API IDs of the devices to + add, comma separated. + isArray: true + - name: remove + description: The list of IP Addresses or ExtraHop API IDs of the devices to + remove, comma separated. + isArray: true + description: Add or remove devices from the watchlist in Reveal(x). + - name: extrahop-get-watchlist + arguments: [] + outputs: + - contextPath: Extrahop.Device.Macaddr + description: The MAC Address of the device. + type: String + - contextPath: Extrahop.Device.DeviceClass + description: 'The class of this device. ' + type: String + - contextPath: Extrahop.Device.UserModTime + description: The time of the most recent update, expressed in milliseconds since + the epoch. + type: Number + - contextPath: Extrahop.Device.AutoRole + description: 'The role automatically detected by the ExtraHop. ' + type: String + - contextPath: Extrahop.Device.ParentId + description: The ID of the parent device. + type: Number + - contextPath: Extrahop.Device.Vendor + description: The device vendor. + type: String + - contextPath: Extrahop.Device.Analysis + description: The level of analysis preformed on the device. + type: string + - contextPath: Extrahop.Device.DiscoveryId + description: The UUID given by the Discover appliance. + type: String + - contextPath: Extrahop.Device.DefaultName + description: The default name for this device. + type: String + - contextPath: Extrahop.Device.DisplayName + description: The display name of device. + type: String + - contextPath: Extrahop.Device.OnWatchlist + description: Whether the device is on the advanced analysis whitelist. + type: Boolean + - contextPath: Extrahop.Device.ModTime + description: The time of the most recent update, expressed in milliseconds since + the epoch. + type: Number + - contextPath: Extrahop.Device.IsL3 + description: Indicates whether the device is a Layer 3 device. + type: Boolean + - contextPath: Extrahop.Device.Role + description: 'The role of the device. ' + type: String + - contextPath: Extrahop.Device.DiscoverTime + description: The time that the device was discovered. + type: Number + - contextPath: Extrahop.Device.Id + description: The ID of the device. + type: Number + - contextPath: Extrahop.Device.Ipaddr4 + description: The IPv4 address for this device. + type: String + - contextPath: Extrahop.Device.Vlanid + description: The unique identifier for the VLAN this device is associated with. + type: Number + - contextPath: ExtraHop.Device.Ipaddr6 + description: The IPv6 address of the device. + type: string + - contextPath: ExtraHop.Device.NodeId + description: The Node ID of the Discover appliance. + type: number + - contextPath: ExtraHop.Device.Description + description: A user customizable description of the device. + type: string + - contextPath: ExtraHop.Device.DnsName + description: The DNS name associated with the device. + type: string + - contextPath: ExtraHop.Device.DhcpName + description: The DHCP name associated with the device. + type: string + - contextPath: ExtraHop.Device.CdpName + description: The Cisco Discovery Protocol name associated with the device. + type: string + - contextPath: ExtraHop.Device.NetbiosName + description: The NetBIOS name associated with the device. + type: string + - contextPath: ExtraHop.Device.Url + description: Link to the device details page in ExtraHop. + type: string + description: Get all devices on the watchlist in Reveal(x). + - name: extrahop-create-alert + arguments: + - name: apply_all + required: true + auto: PREDEFINED + predefined: + - "true" + - "false" + description: Indicates whether the alert is assigned to all available data sources. + - name: disabled + required: true + auto: PREDEFINED + predefined: + - "true" + - "false" + description: Indicates whether the alert is disabled. + - name: name + required: true + description: The unique, friendly name for the alert. + - name: notify_snmp + required: true + auto: PREDEFINED + predefined: + - "true" + - "false" + description: Indicates whether to send an SNMP trap when an alert is generated. + - name: refire_interval + required: true + auto: PREDEFINED + predefined: + - "300" + - "600" + - "900" + - "1800" + - "3600" + - "7200" + - "14400" + description: 'The time interval in which alert conditions are monitored, expressed + in seconds. ' + - name: severity + required: true + description: 'The severity level of the alert, which is displayed in the Alert + History, email notifications, and SNMP traps. Supported values: 0, 1, 2, 3, + 4, 5, 6, 7' + - name: type + required: true + auto: PREDEFINED + predefined: + - detection + - threshold + description: 'The type of alert. ' + - name: object_type + auto: PREDEFINED + predefined: + - application + - device + description: 'The type of metric source monitored by the alert configuration. + Only applicable to detection alerts. ' + - name: protocols + description: The list of monitored protocols. Only applicable to detection alerts. + - name: field_name + description: The name of the monitored metric. Only applicable to threshold + alerts. + - name: field_name2 + description: The second monitored metric when applying a ratio. Only applicable + to threshold alerts. + - name: stat_name + description: The statistic name for the alert. Only applicable to threshold + alerts. + - name: units + auto: PREDEFINED + predefined: + - none + - period + - 1 sec + - 1 min + - 1 hr + description: "The interval in which to evaluate the alert condition. Only applicable\ + \ to threshold alerts. \nSupported values: \"none\", \"period\", \"1 sec\"\ + , \"1 min\", \"1 hr\"" + - name: interval_length + auto: PREDEFINED + predefined: + - "30" + - "60" + - "120" + - "300" + - "600" + - "900" + - "1200" + - "1800" + description: "The length of the alert interval, expressed in seconds. Only applicable\ + \ to threshold alerts. \nSupported values: 30, 60, 120, 300, 600, 900, 1200,\ + \ 1800" + defaultValue: "30" + - name: operand + description: The value to compare against alert conditions. The compare method + is specified by the value of the operator field. Only applicable to threshold + alerts. + - name: operator + auto: PREDEFINED + predefined: + - == + - '>' + - < + - '>=' + - <= + description: The logical operator applied when comparing the value of the operand + field to alert conditions. Only applicable to threshold alerts. + - name: field_op + auto: PREDEFINED + predefined: + - / + - "null" + description: The type of comparison between the field_name and field_name2 fields + when applying a ratio. Only applicable to threshold alerts. + - name: param + description: The first alert parameter, which is either a key pattern or a data + point. Only applicable to threshold alerts. + - name: param2 + description: The second alert parameter, which is either a key pattern or a + data point. Only applicable to threshold alerts. + description: Create a new alert rule in Reveal(x). + - name: extrahop-edit-alert + arguments: + - name: alert_id + required: true + description: The unique identifier for the alert. + - name: apply_all + required: true + auto: PREDEFINED + predefined: + - "true" + - "false" + description: Indicates whether the alert is assigned to all available data sources. + - name: disabled + required: true + auto: PREDEFINED + predefined: + - "true" + - "false" + description: Indicates whether the alert is disabled. + - name: name + required: true + description: The unique, friendly name for the alert. + - name: notify_snmp + required: true + auto: PREDEFINED + predefined: + - "true" + - "false" + description: Indicates whether to send an SNMP trap when an alert is generated. + - name: field_name + description: The name of the monitored metric. Only applicable to threshold + alerts. + - name: stat_name + description: The statistic name for the alert. Only applicable to threshold + alerts. + - name: units + auto: PREDEFINED + predefined: + - none + - period + - 1 sec + - 1 min + - 1 hr + description: The interval in which to evaluate the alert condition. Only applicable + to threshold alerts. + - name: interval_length + auto: PREDEFINED + predefined: + - "30" + - "60" + - "120" + - "300" + - "600" + - "900" + - "1200" + - "1800" + description: The length of the alert interval, expressed in seconds. Only applicable + to threshold alerts. + - name: operand + description: The value to compare against alert conditions. The compare method + is specified by the value of the operator field. Only applicable to threshold + alerts. + - name: refire_interval + required: true + auto: PREDEFINED + predefined: + - "300" + - "600" + - "900" + - "1800" + - "3600" + - "7200" + - "14400" + description: The time interval in which alert conditions are monitored, expressed + in seconds. + - name: severity + required: true + auto: PREDEFINED + predefined: + - "0" + - "1" + - "2" + - "3" + - "4" + - "5" + - "6" + - "7" + description: The severity level of the alert, which is displayed in the Alert + History, email notifications, and SNMP traps. + - name: type + required: true + auto: PREDEFINED + predefined: + - detection + - threshold + description: The type of alert. + - name: object_type + auto: PREDEFINED + predefined: + - application + - device + description: The type of metric source monitored by the alert configuration. + Only applicable to detection alerts. + - name: protocols + description: The list of monitored protocols. Only applicable to detection alerts. + - name: operator + auto: PREDEFINED + predefined: + - == + - '>' + - < + - '>=' + - <= + description: The logical operator applied when comparing the value of the operand + field to alert conditions. Only applicable to threshold alerts. + - name: field_name2 + description: The second monitored metric when applying a ratio. Only applicable + to threshold alerts. + - name: field_op + auto: PREDEFINED + predefined: + - / + - "null" + description: The type of comparison between the field_name and field_name2 fields + when applying a ratio. Only applicable to threshold alerts. + - name: param + description: The first alert parameter, which is either a key pattern or a data + point. Only applicable to threshold alerts. + - name: param2 + description: The second alert parameter, which is either a key pattern or a + data point. Only applicable to threshold alerts. + description: Modify an alert rule in Reveal(x). + - name: extrahop-track-ticket + arguments: + - name: incident_id + required: true + description: The ID of the Demisto Incident to ticket track. + - name: detection_id + required: true + description: The ID of the ExtraHop Detection to ticket track. + - name: incident_owner + description: Owner of the incident. + - name: incident_status + description: Status of the incident + - name: incident_close_reason + description: Reason the incident was closed + outputs: + - contextPath: ExtraHop.TicketId + description: Demisto Incident ID successfully tracked to ExtraHop Detection + type: string + description: Link a Reveal(x) detection to a Demisto Investigation. + - name: extrahop-get-peers + arguments: + - name: ip_or_id + required: true + description: The IP Address or ExtraHop API ID of the source device to get peer + devices. + - name: query_from + description: 'The beginning timestamp of the time range the query will search, + expressed in milliseconds since the epoch. A negative value is evaluated relative + to the current time. The default unit for a negative value is milliseconds, + but other units can be specified with one of the following unit suffixes: + ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- + for more details on supported time units and suffixes.' + defaultValue: -30m + - name: query_until + description: 'The ending timestamp of the time range the query will search, + expressed in milliseconds since the epoch. 0 indicates the time of the request. + A negative value is evaluated relative to the current time. The default unit + for a negative value is milliseconds, but other units can be specified with + one of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- + for more details on supported time units and suffixes.' + - name: peer_role + auto: PREDEFINED + predefined: + - any + - client + - server + description: The role of the peer device in relation to the origin device. + defaultValue: any + - name: protocol + auto: PREDEFINED + predefined: + - any + - AAA + - ActiveMQ + - AJP + - amf + - CIFS + - DB + - DHCP + - DICOM + - DNS + - FIX + - FTP + - HL7 + - HTTP + - IBMMQ + - ICA + - IKE/ISAKMP + - IMAP + - IPFIX + - IPsec NAT-T + - IRC + - iSCSI + - Kerberos + - L2TP + - LDAP + - lync-compress + - memcache + - Modbus + - MongoDB + - MSMQ + - MSN + - MSRPC + - NetFlow + - NFS + - NTP + - OpenVPN + - PCoIP + - Perforce + - POP3 + - RDP + - Redis + - RFB + - RTCP + - RTP + - sFlow + - SIP + - SMPP + - SMTP + - SNMP + - SSH + - SSL + - Syslog + - TCP + - telnet + - UDP + - WebSocket + description: A filter to only return peers that the source device has communicated + with over this protocol. If no value is set, the object includes any protocol. + defaultValue: any + outputs: + - contextPath: ExtraHop.Device.Macaddr + description: The MAC Address of the device. + type: string + - contextPath: ExtraHop.Device.DeviceClass + description: The class of the device. + type: string + - contextPath: ExtraHop.Device.UserModTime + description: The time of the most recent update, expressed in milliseconds since + the epoch. + type: number + - contextPath: ExtraHop.Device.AutoRole + description: The role automatically detected by the ExtraHop. + type: string + - contextPath: ExtraHop.Device.ParentId + description: The ID of the parent device. + type: number + - contextPath: ExtraHop.Device.Vendor + description: The device vendor. + type: string + - contextPath: ExtraHop.Device.Analysis + description: The level of analysis preformed on the device. + type: string + - contextPath: ExtraHop.Device.DiscoveryId + description: The UUID given by the Discover appliance. + type: string + - contextPath: ExtraHop.Device.DefaultName + description: The default name of the device. + type: string + - contextPath: ExtraHop.Device.DisplayName + description: The display name of device. + type: string + - contextPath: ExtraHop.Device.OnWatchlist + description: Whether the device is on the advanced analysis whitelist. + type: boolean + - contextPath: ExtraHop.Device.ModTime + description: The time of the most recent update, expressed in milliseconds since + the epoch. + type: number + - contextPath: ExtraHop.Device.IsL3 + description: Indicates whether the device is a Layer 3 device. + type: boolean + - contextPath: ExtraHop.Device.Role + description: The role of the device. + type: string + - contextPath: ExtraHop.Device.DiscoverTime + description: The time that the device was discovered. + type: number + - contextPath: ExtraHop.Device.Id + description: The ID of the device. + type: number + - contextPath: ExtraHop.Device.Ipaddr4 + description: The IPv4 address of the device. + type: string + - contextPath: ExtraHop.Device.Vlanid + description: The ID of VLan. + type: number + - contextPath: ExtraHop.Device.Ipaddr6 + description: The IPv6 address of the device. + type: string + - contextPath: ExtraHop.Device.NodeId + description: The Node ID of the Discover appliance. + type: number + - contextPath: ExtraHop.Device.Description + description: A user customizable description of the device. + type: string + - contextPath: ExtraHop.Device.DnsName + description: The DNS name associated with the device. + type: string + - contextPath: ExtraHop.Device.DhcpName + description: The DHCP name associated with the device. + type: string + - contextPath: ExtraHop.Device.CdpName + description: The Cisco Discovery Protocol name associated with the device. + type: string + - contextPath: ExtraHop.Device.NetbiosName + description: The NetBIOS name associated with the device. + type: string + - contextPath: ExtraHop.Device.Url + description: Link to the device details page in ExtraHop. + type: string + - contextPath: ExtraHop.Device.ClientProtocols + description: The list of protocols the peer device is communicating as a client. + type: string + - contextPath: ExtraHop.Device.ServerProtocols + description: The list of protocols the peer device is communicating as a server. + type: string + description: Get all peers for a device from Reveal(x). + - name: extrahop-get-protocols + arguments: + - name: ip_or_id + required: true + description: The IP Address or ExtraHop API ID of the device to get all active + network protocols. + - name: query_from + description: 'The beginning timestamp of the time range the query will search, + expressed in milliseconds since the epoch. A negative value is evaluated relative + to the current time. The default unit for a negative value is milliseconds, + but other units can be specified with one of the following unit suffixes: + ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- + for more details on supported time units and suffixes.' + defaultValue: -30m + - name: query_until + description: 'The ending timestamp of the time range the query will search, + expressed in milliseconds since the epoch. 0 indicates the time of the request. + A negative value is evaluated relative to the current time. The default unit + for a negative value is milliseconds, but other units can be specified with + one of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- + for more details on supported time units and suffixes.' + outputs: + - contextPath: ExtraHop.Device.Macaddr + description: The MAC Address of the device. + type: string + - contextPath: ExtraHop.Device.DeviceClass + description: The class of the device. + type: string + - contextPath: ExtraHop.Device.UserModTime + description: The time of the most recent update, expressed in milliseconds since + the epoch. + type: number + - contextPath: ExtraHop.Device.AutoRole + description: The role automatically detected by the ExtraHop. + type: string + - contextPath: ExtraHop.Device.ParentId + description: The ID of the parent device. + type: number + - contextPath: ExtraHop.Device.Vendor + description: The device vendor. + type: string + - contextPath: ExtraHop.Device.Analysis + description: The level of analysis preformed on the device. + type: string + - contextPath: ExtraHop.Device.DiscoveryId + description: The UUID given by the Discover appliance. + type: string + - contextPath: ExtraHop.Device.DefaultName + description: The default name of the device. + type: string + - contextPath: ExtraHop.Device.DisplayName + description: The display name of device. + type: string + - contextPath: ExtraHop.Device.OnWatchlist + description: Whether the device is on the advanced analysis whitelist. + type: boolean + - contextPath: ExtraHop.Device.ModTime + description: The time of the most recent update, expressed in milliseconds since + the epoch. + type: number + - contextPath: ExtraHop.Device.IsL3 + description: Indicates whether the device is a Layer 3 device. + type: boolean + - contextPath: ExtraHop.Device.Role + description: The role of the device. + type: string + - contextPath: ExtraHop.Device.DiscoverTime + description: The time that the device was discovered. + type: number + - contextPath: ExtraHop.Device.Id + description: The ID of the device. + type: number + - contextPath: ExtraHop.Device.Ipaddr4 + description: The IPv4 address of the device. + type: string + - contextPath: ExtraHop.Device.Vlanid + description: The ID of VLan. + type: number + - contextPath: ExtraHop.Device.Ipaddr6 + description: The IPv6 address of the device. + type: string + - contextPath: ExtraHop.Device.NodeId + description: The Node ID of the Discover appliance. + type: number + - contextPath: ExtraHop.Device.Description + description: A user customizable description of the device. + type: string + - contextPath: ExtraHop.Device.DnsName + description: The DNS name associated with the device. + type: string + - contextPath: ExtraHop.Device.DhcpName + description: The DHCP name associated with the device. + type: string + - contextPath: ExtraHop.Device.CdpName + description: The Cisco Discovery Protocol name associated with the device. + type: string + - contextPath: ExtraHop.Device.NetbiosName + description: The NetBIOS name associated with the device. + type: string + - contextPath: ExtraHop.Device.Url + description: Link to the device details page in ExtraHop. + type: string + - contextPath: ExtraHop.Device.ClientProtocols + description: The list of protocols the peer device is communicating as a client. + type: string + - contextPath: ExtraHop.Device.ServerProtocols + description: The list of protocols the peer device is communicating as a server. + type: string + description: Get all active network protocols for a device from Reveal(x). + - name: extrahop-tag-devices + arguments: + - name: tag + description: The case-sensitive value of the tag. + - name: add + description: The list of IP Addresses or ExtraHop API IDs of the devices to + tag, comma separated. + isArray: true + - name: remove + description: The list of IP Addresses or ExtraHop API IDs of the devices to + remove the tag from, comma separated. + isArray: true + description: Add or remove a tag from devices in Reveal(x). + - name: extrahop-get-activity-map + arguments: + - name: ip_or_id + required: true + description: The IP Address or ExtraHop API ID of the source device to get an + activity map. + - name: time_interval + auto: PREDEFINED + predefined: + - 30 minutes + - 6 hours + - 1 day + - 1 week + description: The time interval of the live activity map, expressed as the "Last" + 30 minutes. For example, specify a value of 30 minutes to get an activity + map showing the time range of the last 30 minutes. This field is ignored if + from_time and until_time are provided. + defaultValue: 30 minutes + - name: from_time + description: The beginning timestamp of a fixed time range the activity map + will display, expressed in seconds since the epoch. + - name: until_time + description: The ending timestamp of a fixed time range the activity map will + display, expressed in seconds since the epoch. + - name: peer_role + auto: PREDEFINED + predefined: + - any + - client + - server + description: The role of the peer devices in relation to the source device. + For example, specifying a peer_role of client will show All Clients communicating + with the source device. Additionally specifying a protocol of HTTP will result + in further filtering and only showing HTTP Clients communicating with the + source device. + defaultValue: any + - name: protocol + auto: PREDEFINED + predefined: + - any + - AAA + - ActiveMQ + - AJP + - amf + - CIFS + - DB + - DHCP + - DICOM + - DNS + - FIX + - FTP + - HL7 + - HTTP + - IBMMQ + - ICA + - IKE/ISAKMP + - IMAP + - IPFIX + - IPsec NAT-T + - IRC + - iSCSI + - Kerberos + - L2TP + - LDAP + - lync-compress + - memcache + - Modbus + - MongoDB + - MSMQ + - MSN + - MSRPC + - NetFlow + - NFS + - NTP + - OpenVPN + - PCoIP + - Perforce + - POP3 + - RDP + - Redis + - RFB + - RTCP + - RTP + - sFlow + - SIP + - SMPP + - SMTP + - SNMP + - SSH + - SSL + - Syslog + - TCP + - telnet + - UDP + - WebSocket + description: The protocol over which the source device is communicating. For + example, specifying a protocol of HTTP show only HTTP Clients and HTTP Servers + communicating with the source device. Additionally specifying a peer_role + of client will result in further filtering and only showing HTTP Clients communicating + with the source device. + defaultValue: any + outputs: + - contextPath: ExtraHop.ActivityMap + description: The link to a visual activity map in ExtraHop. + type: string + description: Get a link to a live activity map in Reveal(x). + - name: extrahop-search-packets + arguments: + - name: output + auto: PREDEFINED + predefined: + - pcap + - keylog_txt + - zip + description: The output format. A pcap file, A keylog.txt file that can be loaded + in wireshark to decode ssl packets, or a zip file containing both a packets.pcap + and keylog.txt. + defaultValue: pcap + - name: limit_bytes + description: The maximum number of bytes to return. + defaultValue: 10MB + - name: limit_search_duration + description: The maximum amount of time to run the packet search. The default + unit is milliseconds, but other units can be specified with a unit suffix. + defaultValue: 5m + - name: query_from + required: true + description: 'The beginning timestamp of the time range the search will include, + expressed in milliseconds since the epoch. A negative value specifies that + the search will begin with packets captured at a time in the past relative + to the current time. For example, specify -10m to begin the search with packets + captured 10 minutes before the time of the request. The default unit for a + negative value is milliseconds, but other units can be specified with one + of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- + for more details on supported time units and suffixes.' + defaultValue: -10m + - name: query_until + description: 'The ending timestamp of the time range the search will include, + expressed in milliseconds since the epoch. A 0 value specifies that the search + will end with packets captured at the time of the search. A negative value + specifies that the search will end with packets captured at a time in the + past relative to the current time. For example, specify -5m to end the search + with packets captured 5 minutes before the time of the request. The default + unit for a negative value is milliseconds, but other units can be specified + with one of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- + for more details on supported time units and suffixes.' + - name: bpf + description: The Berkeley Packet Filter (BPF) syntax for the packet search. + - name: ip1 + description: Returns packets sent to or received by the specified IP address. + - name: port1 + description: Returns packets sent from or received on the specified port. + - name: ip2 + description: Returns packets sent to or received by the specified IP address. + - name: port2 + description: Returns packets sent from or received on the specified port. + description: Search for specific packets in Reveal(x). + dockerimage: demisto/python3:3.7.2.200 + runonce: false +tests: +- ExtraHop_v2-Test \ No newline at end of file diff --git a/Integrations/ExtraHop_v2/ExtraHop_v2_description.md b/Integrations/ExtraHop_v2/ExtraHop_v2_description.md new file mode 100644 index 000000000000..62311ece4981 --- /dev/null +++ b/Integrations/ExtraHop_v2/ExtraHop_v2_description.md @@ -0,0 +1 @@ +Visit the [ExtraHop + Demisto Setup Guide](https://www.extrahop.com/customers/community/bundles/extrahop/demisto-integration/) for detailed integration instructions. \ No newline at end of file diff --git a/Integrations/ExtraHop_v2/ExtraHop_v2_image.png b/Integrations/ExtraHop_v2/ExtraHop_v2_image.png new file mode 100644 index 000000000000..8e5b665e7917 Binary files /dev/null and b/Integrations/ExtraHop_v2/ExtraHop_v2_image.png differ diff --git a/Integrations/ExtraHop_v2/Pipfile b/Integrations/ExtraHop_v2/Pipfile new file mode 100644 index 000000000000..35f0d4363be3 --- /dev/null +++ b/Integrations/ExtraHop_v2/Pipfile @@ -0,0 +1,30 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] +pylint = "*" +pytest = "==5.0.1" +pytest-mock = "*" +requests-mock = "*" +pytest-asyncio = "*" +flake8 = "*" + +[packages] +certifi = "==2018.11.29" +chardet = "==3.0.4" +dateparser = "==0.7.0" +idna = "==2.8" +olefile = "==0.46" +python-dateutil = "==2.8.0" +pytz = "==2018.9" +regex = "==2019.2.7" +requests = "==2.21.0" +six = "==1.12.0" +tzlocal = "==1.5.1" +urllib3 = "==1.24.1" +PyYAML = "==3.13" + +[requires] +python_version = "3.7" diff --git a/Integrations/ExtraHop_v2/Pipfile.lock b/Integrations/ExtraHop_v2/Pipfile.lock new file mode 100644 index 000000000000..93a7e83e600a --- /dev/null +++ b/Integrations/ExtraHop_v2/Pipfile.lock @@ -0,0 +1,399 @@ +{ + "_meta": { + "hash": { + "sha256": "984f83eb6bcbfaa0d4fef4fd7d9de39e679818f04625fb450c909c0a51ad7daa" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "certifi": { + "hashes": [ + "sha256:47f9c83ef4c0c621eaef743f133f09fa8a74a9b75f037e8624f83bd1b6626cb7", + "sha256:993f830721089fef441cdfeb4b2c8c9df86f0c63239f06bd025a76a7daddb033" + ], + "index": "pypi", + "version": "==2018.11.29" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "index": "pypi", + "version": "==3.0.4" + }, + "dateparser": { + "hashes": [ + "sha256:940828183c937bcec530753211b70f673c0a9aab831e43273489b310538dff86", + "sha256:b452ef8b36cd78ae86a50721794bc674aa3994e19b570f7ba92810f4e0a2ae03" + ], + "index": "pypi", + "version": "==0.7.0" + }, + "idna": { + "hashes": [ + "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", + "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" + ], + "index": "pypi", + "version": "==2.8" + }, + "olefile": { + "hashes": [ + "sha256:133b031eaf8fd2c9399b78b8bc5b8fcbe4c31e85295749bb17a87cba8f3c3964" + ], + "index": "pypi", + "version": "==0.46" + }, + "python-dateutil": { + "hashes": [ + "sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb", + "sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e" + ], + "index": "pypi", + "version": "==2.8.0" + }, + "pytz": { + "hashes": [ + "sha256:32b0891edff07e28efe91284ed9c31e123d84bea3fd98e1f72be2508f43ef8d9", + "sha256:d5f05e487007e29e03409f9398d074e158d920d36eb82eaf66fb1136b0c5374c" + ], + "index": "pypi", + "version": "==2018.9" + }, + "pyyaml": { + "hashes": [ + "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", + "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", + "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", + "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", + "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", + "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", + "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", + "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", + "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", + "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", + "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" + ], + "index": "pypi", + "version": "==3.13" + }, + "regex": { + "hashes": [ + "sha256:017bf6f893db109dc5f82b902019f6fe089e605af5e1f0f6f7271f936b411eb4", + "sha256:0969fdb610435d7f49dc5518f7642d7b1319ef19f0c3f1bd4d972afbb9877aa7", + "sha256:3679f269790c87bd04e003e60e098b1be5392f17c48d28c2a3b9d16b3dcbca2a", + "sha256:37150aee3411f38d08733edb5f3faa656f96ddae00ee7713e01d7423f0f72815", + "sha256:4a1a1d963f462c13722b34ef1f82c4707091b0a3fb9b5fd79b6670c38b734095", + "sha256:5da76d468d048fb163bcaedd5c0832a3ab95da1034598a6c673bf999ae61f259", + "sha256:72dda5123ee45cde10031576710ca0c4972757c94a60b75023a45d8069da34ca", + "sha256:7f40b720b81f6614a34a8857d2417fbe619734629f9d0627e2cc9e493979401d", + "sha256:a22a11e9dd6e46529dc4409bd6c449f3e7525aa4b0d5e9b23363302cfe4db8e4" + ], + "index": "pypi", + "version": "==2019.2.7" + }, + "requests": { + "hashes": [ + "sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e", + "sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b" + ], + "index": "pypi", + "version": "==2.21.0" + }, + "six": { + "hashes": [ + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" + ], + "index": "pypi", + "version": "==1.12.0" + }, + "tzlocal": { + "hashes": [ + "sha256:4ebeb848845ac898da6519b9b31879cf13b6626f7184c496037b818e238f2c4e" + ], + "index": "pypi", + "version": "==1.5.1" + }, + "urllib3": { + "hashes": [ + "sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39", + "sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22" + ], + "index": "pypi", + "version": "==1.24.1" + } + }, + "develop": { + "astroid": { + "hashes": [ + "sha256:9b3f17b0550f82e28a6776a4e5222441f48e523b0773df4bc505bb6b7c2093b7", + "sha256:c7e2e5773d87ccc00d01c273e439386f4d6d63cce61317a79ccce5880162f9fb" + ], + "version": "==2.3.0" + }, + "atomicwrites": { + "hashes": [ + "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4", + "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6" + ], + "version": "==1.3.0" + }, + "attrs": { + "hashes": [ + "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", + "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399" + ], + "version": "==19.1.0" + }, + "certifi": { + "hashes": [ + "sha256:47f9c83ef4c0c621eaef743f133f09fa8a74a9b75f037e8624f83bd1b6626cb7", + "sha256:993f830721089fef441cdfeb4b2c8c9df86f0c63239f06bd025a76a7daddb033" + ], + "index": "pypi", + "version": "==2018.11.29" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "index": "pypi", + "version": "==3.0.4" + }, + "entrypoints": { + "hashes": [ + "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", + "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" + ], + "version": "==0.3" + }, + "flake8": { + "hashes": [ + "sha256:19241c1cbc971b9962473e4438a2ca19749a7dd002dd1a946eaba171b4114548", + "sha256:8e9dfa3cecb2400b3738a42c54c3043e821682b9c840b0448c0503f781130696" + ], + "index": "pypi", + "version": "==3.7.8" + }, + "idna": { + "hashes": [ + "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", + "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" + ], + "index": "pypi", + "version": "==2.8" + }, + "importlib-metadata": { + "hashes": [ + "sha256:aa18d7378b00b40847790e7c27e11673d7fed219354109d0e7b9e5b25dc3ad26", + "sha256:d5f18a79777f3aa179c145737780282e27b508fc8fd688cb17c7a813e8bd39af" + ], + "markers": "python_version < '3.8'", + "version": "==0.23" + }, + "isort": { + "hashes": [ + "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", + "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd" + ], + "version": "==4.3.21" + }, + "lazy-object-proxy": { + "hashes": [ + "sha256:02b260c8deb80db09325b99edf62ae344ce9bc64d68b7a634410b8e9a568edbf", + "sha256:18f9c401083a4ba6e162355873f906315332ea7035803d0fd8166051e3d402e3", + "sha256:1f2c6209a8917c525c1e2b55a716135ca4658a3042b5122d4e3413a4030c26ce", + "sha256:2f06d97f0ca0f414f6b707c974aaf8829c2292c1c497642f63824119d770226f", + "sha256:616c94f8176808f4018b39f9638080ed86f96b55370b5a9463b2ee5c926f6c5f", + "sha256:63b91e30ef47ef68a30f0c3c278fbfe9822319c15f34b7538a829515b84ca2a0", + "sha256:77b454f03860b844f758c5d5c6e5f18d27de899a3db367f4af06bec2e6013a8e", + "sha256:83fe27ba321e4cfac466178606147d3c0aa18e8087507caec78ed5a966a64905", + "sha256:84742532d39f72df959d237912344d8a1764c2d03fe58beba96a87bfa11a76d8", + "sha256:874ebf3caaf55a020aeb08acead813baf5a305927a71ce88c9377970fe7ad3c2", + "sha256:9f5caf2c7436d44f3cec97c2fa7791f8a675170badbfa86e1992ca1b84c37009", + "sha256:a0c8758d01fcdfe7ae8e4b4017b13552efa7f1197dd7358dc9da0576f9d0328a", + "sha256:a4def978d9d28cda2d960c279318d46b327632686d82b4917516c36d4c274512", + "sha256:ad4f4be843dace866af5fc142509e9b9817ca0c59342fdb176ab6ad552c927f5", + "sha256:ae33dd198f772f714420c5ab698ff05ff900150486c648d29951e9c70694338e", + "sha256:b4a2b782b8a8c5522ad35c93e04d60e2ba7f7dcb9271ec8e8c3e08239be6c7b4", + "sha256:c462eb33f6abca3b34cdedbe84d761f31a60b814e173b98ede3c81bb48967c4f", + "sha256:fd135b8d35dfdcdb984828c84d695937e58cc5f49e1c854eb311c4d6aa03f4f1" + ], + "version": "==1.4.2" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, + "more-itertools": { + "hashes": [ + "sha256:409cd48d4db7052af495b09dec721011634af3753ae1ef92d2b32f73a745f832", + "sha256:92b8c4b06dac4f0611c0729b2f2ede52b2e1bac1ab48f089c7ddc12e26bb60c4" + ], + "version": "==7.2.0" + }, + "packaging": { + "hashes": [ + "sha256:28b924174df7a2fa32c1953825ff29c61e2f5e082343165438812f00d3a7fc47", + "sha256:d9551545c6d761f3def1677baf08ab2a3ca17c56879e70fecba2fc4dde4ed108" + ], + "version": "==19.2" + }, + "pluggy": { + "hashes": [ + "sha256:0db4b7601aae1d35b4a033282da476845aa19185c1e6964b25cf324b5e4ec3e6", + "sha256:fa5fa1622fa6dd5c030e9cad086fa19ef6a0cf6d7a2d12318e10cb49d6d68f34" + ], + "version": "==0.13.0" + }, + "py": { + "hashes": [ + "sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", + "sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53" + ], + "version": "==1.8.0" + }, + "pycodestyle": { + "hashes": [ + "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", + "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" + ], + "version": "==2.5.0" + }, + "pyflakes": { + "hashes": [ + "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", + "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2" + ], + "version": "==2.1.1" + }, + "pylint": { + "hashes": [ + "sha256:92280a6085fc5e4fec67d6330c0c85eae50817696d02bdc85e9ca6bab830ad58", + "sha256:ef796b99c243afeebf7a04b4426126ac837940da6bcd5fc47229c507e056fec1" + ], + "index": "pypi", + "version": "==2.4.0" + }, + "pyparsing": { + "hashes": [ + "sha256:6f98a7b9397e206d78cc01df10131398f1c8b8510a2f4d97d9abd82e1aacdd80", + "sha256:d9338df12903bbf5d65a0e4e87c2161968b10d2e489652bb47001d82a9b028b4" + ], + "version": "==2.4.2" + }, + "pytest": { + "hashes": [ + "sha256:6ef6d06de77ce2961156013e9dff62f1b2688aa04d0dc244299fe7d67e09370d", + "sha256:a736fed91c12681a7b34617c8fcefe39ea04599ca72c608751c31d89579a3f77" + ], + "index": "pypi", + "version": "==5.0.1" + }, + "pytest-asyncio": { + "hashes": [ + "sha256:9fac5100fd716cbecf6ef89233e8590a4ad61d729d1732e0a96b84182df1daaf", + "sha256:d734718e25cfc32d2bf78d346e99d33724deeba774cc4afdf491530c6184b63b" + ], + "index": "pypi", + "version": "==0.10.0" + }, + "pytest-mock": { + "hashes": [ + "sha256:43ce4e9dd5074993e7c021bb1c22cbb5363e612a2b5a76bc6d956775b10758b7", + "sha256:5bf5771b1db93beac965a7347dc81c675ec4090cb841e49d9d34637a25c30568" + ], + "index": "pypi", + "version": "==1.10.4" + }, + "requests": { + "hashes": [ + "sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e", + "sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b" + ], + "index": "pypi", + "version": "==2.21.0" + }, + "requests-mock": { + "hashes": [ + "sha256:510df890afe08d36eca5bb16b4aa6308a6f85e3159ad3013bac8b9de7bd5a010", + "sha256:88d3402dd8b3c69a9e4f9d3a73ad11b15920c6efd36bc27bf1f701cf4a8e4646" + ], + "index": "pypi", + "version": "==1.7.0" + }, + "six": { + "hashes": [ + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" + ], + "index": "pypi", + "version": "==1.12.0" + }, + "typed-ast": { + "hashes": [ + "sha256:18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e", + "sha256:262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e", + "sha256:2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0", + "sha256:354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c", + "sha256:4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631", + "sha256:630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4", + "sha256:66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34", + "sha256:71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b", + "sha256:95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a", + "sha256:bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233", + "sha256:cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1", + "sha256:d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36", + "sha256:d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d", + "sha256:d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a", + "sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12" + ], + "markers": "implementation_name == 'cpython' and python_version >= '3.7' and python_version < '3.8'", + "version": "==1.4.0" + }, + "urllib3": { + "hashes": [ + "sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39", + "sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22" + ], + "index": "pypi", + "version": "==1.24.1" + }, + "wcwidth": { + "hashes": [ + "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e", + "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c" + ], + "version": "==0.1.7" + }, + "wrapt": { + "hashes": [ + "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1" + ], + "version": "==1.11.2" + }, + "zipp": { + "hashes": [ + "sha256:3718b1cbcd963c7d4c5511a8240812904164b7f381b647143a89d3b98f9bcd8e", + "sha256:f06903e9f1f43b12d371004b4ac7b06ab39a44adc747266928ae6debfa7b3335" + ], + "version": "==0.6.0" + } + } +} diff --git a/Integrations/ExtraHop_v2/README.md b/Integrations/ExtraHop_v2/README.md new file mode 100644 index 000000000000..9bab410477be --- /dev/null +++ b/Integrations/ExtraHop_v2/README.md @@ -0,0 +1,4289 @@ +

+ Network detection and response. Complete visibility of network communications at enterprise scale, real-time threat detections backed by machine learning, and guided investigation workflows that simplify response. +

+

ExtraHop Reveal(x) Playbooks

+ +

Use Cases

+

Detailed Description

+

Visit the ExtraHop + Demisto Setup Guide for detailed integration instructions.

+

Fetch Incidents

+

Incidents are pushed in via the Demisto REST API by a trigger running on the ExtraHop Reveal(x) appliance.

+

Configure ExtraHop Reveal(x) on Demisto

+
    +
  1. Navigate to Settings > Integrations +  > Servers & Services.
  2. +
  3. Search for ExtraHop Reveal(x).
  4. +
  5. + Click Add instance to create and configure a new integration instance. + +
  6. +
+
    +
  1. + Click Test to validate the new instance by querying the ExtraHop version from the REST API. If the test fails, check the instance configuration including the Trust any certificate (Not Secure) setting for correctness. +
  2. +
+

Commands

+

+ You can execute these commands from the Demisto CLI, as part of an automation, or in a playbook. + After you successfully execute a command, a DBot message appears in the War Room with the command details. +

+
    +
  1. Get all alert rules: extrahop-get-alerts
  2. +
  3. Query records: extrahop-query-records
  4. +
  5. Search for devices: extrahop-device-search
  6. +
  7. Add or remove devices from the watchlist: extrahop-edit-watchlist
  8. +
  9. Get all devices on the watchlist: extrahop-get-watchlist
  10. +
  11. Create a new alert rule: extrahop-create-alert
  12. +
  13. Modify an alert rule: extrahop-edit-alert
  14. +
  15. Link an ExtraHop Detection to a Demisto Investigation: extrahop-track-ticket
  16. +
  17. Get all peers for a device: extrahop-get-peers
  18. +
  19. Get all active network protocols for a device: extrahop-get-protocols
  20. +
  21. Add or remove a tag from devices: extrahop-tag-devices
  22. +
  23. Get a link to a Live Activity Map: extrahop-get-activity-map
  24. +
  25. Search for specific packets: extrahop-search-packets
  26. +
+

1. Get all alert rules

+ +

Get all alert rules from ExtraHop.

+
Base Command
+

+ extrahop-get-alerts +

+
Required Permissions
+ +
Input
+ + + + + + + + + + + +
+ Argument Name + + Description + + Required +
+ +

 

+
Context Output
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Path + + Type + + Description +
Extrahop.Alert.OperatorStringb'The logical operator applied when comparing the value of the operand field to alert conditions.'
Extrahop.Alert.FieldNameStringb'The name of the monitored metric.'
Extrahop.Alert.NotifySnmpBooleanb'Indicates whether to send an SNMP trap when an alert is generated. '
Extrahop.Alert.OperandStringb'The value to compare against alert conditions.'
Extrahop.Alert.IntervalLengthNumberb'The length of the alert interval, expressed in seconds.'
Extrahop.Alert.AuthorStringb'The name of the user that created the alert. '
Extrahop.Alert.NameStringb'The unique, friendly name for the alert.'
Extrahop.Alert.FieldName2Stringb'The second monitored metric when applying a ratio.'
Extrahop.Alert.RefireIntervalNumberb'The time interval in which alert conditions are monitored, expressed in seconds.'
Extrahop.Alert.ModTimeNumberb'The time of the most recent update, expressed in milliseconds since the epoch. '
Extrahop.Alert.UnitsStringb'The interval in which to evaluate the alert condition.'
Extrahop.Alert.ApplyAllBooleanb'Indicates whether the alert is assigned to all available data sources.'
Extrahop.Alert.TypeStringb'The type of alert.'
Extrahop.Alert.FieldOpStringb'The type of comparison between the "field_name" and "field_name2" fields when applying a ratio.'
Extrahop.Alert.IdNumberb'The unique identifier for the alert.'
Extrahop.Alert.DisabledBooleanb'Indicates whether the alert is disabled.'
Extrahop.Alert.DescriptionStringb'An optional description for the alert.'
Extrahop.Alert.SeverityNumberb'The severity level of the alert.'
Extrahop.Alert.StatNameStringb'The statistic name for the alert.'
+ +

 

+
Command Example
+

+ !extrahop-get-alerts +

+
Context Example
+
+{
+    "ExtraHop": {
+        "Alert": [
+            {
+                "ApplyAll": false,
+                "Author": "ExtraHop",
+                "Description": "Alert triggered when ratio of web errors is greater than 5%.",
+                "Disabled": true,
+                "FieldName": "rsp_error",
+                "FieldName2": "rsp",
+                "FieldOp": "/",
+                "Id": 11,
+                "IntervalLength": 30,
+                "ModTime": 1522964293585,
+                "Name": "Web Error Ratio - Red",
+                "NotifySnmp": false,
+                "Operand": ".05",
+                "Operator": ">",
+                "RefireInterval": 300,
+                "Severity": 1,
+                "StatName": "extrahop.application.http",
+                "Type": "threshold",
+                "Units": "none"
+            },
+            {
+                "ApplyAll": false,
+                "Author": "ExtraHop",
+                "Description": "Alert triggered when ratio of web errors is greater than 1%.",
+                "Disabled": true,
+                "FieldName": "rsp_error",
+                "FieldName2": "rsp",
+                "FieldOp": "/",
+                "Id": 12,
+                "IntervalLength": 30,
+                "ModTime": 1522964293596,
+                "Name": "Web Error Ratio - Orange",
+                "NotifySnmp": false,
+                "Operand": ".01",
+                "Operator": ">",
+                "RefireInterval": 300,
+                "Severity": 3,
+                "StatName": "extrahop.application.http",
+                "Type": "threshold",
+                "Units": "none"
+            }
+        ]
+    }
+}
+
+
Human Readable Output
+

+

Found 2 Alert(s)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Apply AllAuthorDescriptionDisabledField NameField Name2Field OpIdInterval LengthMod TimeNameNotify SnmpOperandOperatorRefire IntervalSeverityStat NameTypeUnits
falseExtraHopAlert triggered when ratio of web errors is greater than 5%.truersp_errorrsp/11301522964293585Web Error Ratio - Redfalse.05>3001extrahop.application.httpthresholdnone
falseExtraHopAlert triggered when ratio of web errors is greater than 1%.truersp_errorrsp/12301522964293596Web Error Ratio - Orangefalse.01>3003extrahop.application.httpthresholdnone
+ +

+ +

2. Query records

+ +

Query records from ExtraHop.

+
Base Command
+

+ extrahop-query-records +

+
Required Permissions
+ +
Input
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Argument Name + + Description + + Required +
query_fromThe beginning timestamp of the time range the query will search, expressed in milliseconds since the epoch. A negative value specifies that the search will begin with records created at a time in the past relative to the current time. For example, specify -10m to begin the search with records created 10 minutes before the time of the request. The default unit for a negative value is milliseconds, but other units can be specified with one of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- for more details on supported time units and suffixes.Required
query_untilThe ending timestamp of the time range the query will search, expressed in milliseconds since the epoch. A 0 value specifies that the search will end with records created at the time of the request. A negative value specifies that the search will end with records created at a time in the past relative to the current time. For example, specify -5m to end the search with records created 5 minutes before the time of the request. The default unit for a negative value is milliseconds, but other units can be specified with one of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- for more details on supported time units and suffixes.Optional
limitThe maximum number of entries to return.Optional
offsetThe number of records to skip in the query results.Optional
field1The name of the field in the record to be filtered. The query compares field1 to value1 and applies the compare method specified by the operator1 parameter. If the specified field name is ".any", the union of all field values will be searched. If the specified field name is ".ipaddr" or ".port", the client, server, sender, and receiver roles are included in the search.Optional
operator1The compare method applied when matching value1 against the field1 contents.Optional
value1The value that the query attempts to match. The query compares this value to the contents of the field1 parameter and applies the compare method specified by the operator1 parameter.Optional
field2The name of the field in the record to be filtered. The query compares field2 to value2 and applies the compare method specified by the operator2 parameter. If the specified field name is ".any", the union of all field values will be searched. If the specified field name is ".ipaddr" or ".port", the client, server, sender, and receiver roles are included in the search.Optional
operator2The compare method applied when matching value2 against the field2 contents.Optional
value2The value that the query attempts to match. The query compares this value to the contents of the field2 parameter and applies the compare method specified by the operator2 parameter.Optional
match_typeThe match operator to use when chaining the search fields of 1 and 2 together. For example, to find HTTP records with status code 500 or a processing time greater than 100ms (set match_type=or, field1=statusCode, operator1==, value1=500, field2=processingTime, operator2=> value2=100, types=http).Optional
typesA list of one or more record formats for the query to filter on, comma separated. The query returns only records that match the specified formats.Optional
+ +

 

+
Context Output
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Path + + Type + + Description +
ExtraHop.Record.Typestringb'The record format.'
ExtraHop.Record.Source.timestampNumberb'The timestamp of the item.'
ExtraHop.Record.Source.detectionstringb'The detection type that committed the record.'
ExtraHop.Record.Source.ex.isSuspiciousBooleanb'Marked as suspicious by Threat Intelligence.'
ExtraHop.Record.Source.accessTimeNumberb'Access Time'
ExtraHop.Record.Source.ackCodeStringb'Ack Code'
ExtraHop.Record.Source.ackIdStringb'Ack ID'
ExtraHop.Record.Source.adminQueueStringb'Admin Queue'
ExtraHop.Record.Source.ageNumberb'Age'
ExtraHop.Record.Source.alertCodeNumberb'Alert Code'
ExtraHop.Record.Source.alertLevelStringb'Alert Level'
ExtraHop.Record.Source.answerUnknownb'Answer'
ExtraHop.Record.Source.answersUnknownb'Answers'
ExtraHop.Record.Source.appNameStringb'Application Name'
ExtraHop.Record.Source.applicationUnknownb'Application'
ExtraHop.Record.Source.argsStringb'Arguments'
ExtraHop.Record.Source.authDomainStringb'Authentication Domain'
ExtraHop.Record.Source.authMethodStringb'Authentication Method'
ExtraHop.Record.Source.authResultNumberb'Auth Result'
ExtraHop.Record.Source.authTypeNumberb'Auth Type'
ExtraHop.Record.Source.authenticatorStringb'Authenticator'
ExtraHop.Record.Source.bindDNStringb'Bind Distinguished Name'
ExtraHop.Record.Source.bytesNumberb'Bytes'
ExtraHop.Record.Source.cNameStringb'Canonical Endpoint'
ExtraHop.Record.Source.cNameTypeStringb'Client Name Type'
ExtraHop.Record.Source.cNamesStringb'Client Name Components'
ExtraHop.Record.Source.cRealmStringb'Client Realm'
ExtraHop.Record.Source.callIdStringb'Call ID'
ExtraHop.Record.Source.certificateFingerprintStringb'Certificate Fingerprint'
ExtraHop.Record.Source.certificateIsSelfSignedBooleanb'Certificate Self Signed'
ExtraHop.Record.Source.certificateIssuerStringb'Certificate Issuer'
ExtraHop.Record.Source.certificateKeySizeNumberb'Certificate Key Size'
ExtraHop.Record.Source.certificateNotAfterNumberb'Certificate Not After'
ExtraHop.Record.Source.certificateNotBeforeNumberb'Certificate Not Before'
ExtraHop.Record.Source.certificateSignatureAlgorithmStringb'Certificate Signature Algorithm'
ExtraHop.Record.Source.certificateSubjectStringb'Certificate Subject'
ExtraHop.Record.Source.certificateSubjectAlternativeNamesStringb'Certificate Subject Alternative Names'
ExtraHop.Record.Source.channelStringb'Channel'
ExtraHop.Record.Source.cipherSuiteStringb'Cipher Suite'
ExtraHop.Record.Source.client.typeStringb'Client Type'
ExtraHop.Record.Source.client.valueStringb'Client Discovery ID'
ExtraHop.Record.Source.clientAddr.typeStringb'Client IP Address Type'
ExtraHop.Record.Source.clientAddr.valueStringb'Client IP Address Value'
ExtraHop.Record.Source.clientBuildStringb'Client Build'
ExtraHop.Record.Source.clientBytesNumberb'Client Bytes'
ExtraHop.Record.Source.clientCGPMsgCountNumberb'Client CGP Messages'
ExtraHop.Record.Source.clientCertificateRequestedBooleanb'Client Certificate Requested'
ExtraHop.Record.Source.clientCipherAlgorithmStringb'Client Cipher Algorithm'
ExtraHop.Record.Source.clientCompressionAlgorithmStringb'Client Compression Algorithm'
ExtraHop.Record.Source.clientImplementationStringb'Client Implementation'
ExtraHop.Record.Source.clientL2BytesNumberb'Client L2 Bytes'
ExtraHop.Record.Source.clientLatencyNumberb'Client Latency'
ExtraHop.Record.Source.clientMacAlgorithmStringb'Client MAC Algorithm'
ExtraHop.Record.Source.clientMachineStringb'Client Machine'
ExtraHop.Record.Source.clientMsgCountNumberb'Client Messages'
ExtraHop.Record.Source.clientNameStringb'Client Name'
ExtraHop.Record.Source.clientPktsNumberb'Client Packets'
ExtraHop.Record.Source.clientPortNumberb'Client Port'
ExtraHop.Record.Source.clientPrincipalNameStringb'Client Principal Name'
ExtraHop.Record.Source.clientRTONumberb'Client RTO'
ExtraHop.Record.Source.clientReqDelayNumberb'Client Request Delay'
ExtraHop.Record.Source.clientTypeStringb'ICA Client Type'
ExtraHop.Record.Source.clientVersionStringb'Client Version'
ExtraHop.Record.Source.clientZeroWndNumberb'Client Zero Windows'
ExtraHop.Record.Source.collectionStringb'Collection'
ExtraHop.Record.Source.commandStringb'Command'
ExtraHop.Record.Source.contentTypeStringb'Content Type'
ExtraHop.Record.Source.conversationIdNumberb'Conversation ID'
ExtraHop.Record.Source.cookieStringb'Cookie'
ExtraHop.Record.Source.correlationIdStringb'Correlation ID'
ExtraHop.Record.Source.cwdStringb'Current Working Directory'
ExtraHop.Record.Source.dataSizeNumberb'Data Size'
ExtraHop.Record.Source.databaseStringb'Database'
ExtraHop.Record.Source.deltaBytesNumberb'Delta Bytes'
ExtraHop.Record.Source.deltaPktsNumberb'Delta Packets'
ExtraHop.Record.Source.desktopHeightNumberb'Desktop Height'
ExtraHop.Record.Source.desktopWidthNumberb'Desktop Width'
ExtraHop.Record.Source.destinationStringb'Destination'
ExtraHop.Record.Source.dnStringb'Distinguished Name'
ExtraHop.Record.Source.domainStringb'Domain'
ExtraHop.Record.Source.dropsNumberb'Drops'
ExtraHop.Record.Source.dscpNameStringb'DSCP'
ExtraHop.Record.Source.dstQueueMgrStringb'Destination Queue Manager'
ExtraHop.Record.Source.dupsNumberb'Dups'
ExtraHop.Record.Source.durationNumberb'Duration'
ExtraHop.Record.Source.egressInterfaceUnknownb'Egress Interface'
ExtraHop.Record.Source.errorStringb'Error'
ExtraHop.Record.Source.errorDetailStringb'Error Detail'
ExtraHop.Record.Source.expirationNumberb'Expiration'
ExtraHop.Record.Source.firstNumberb'First'
ExtraHop.Record.Source.flowIdStringb'Flow'
ExtraHop.Record.Source.formatStringb'Format'
ExtraHop.Record.Source.frameCutDurationNumberb'Frame Cut Duration'
ExtraHop.Record.Source.frameSendDurationNumberb'Frame Send Duration'
ExtraHop.Record.Source.fromStringb'From'
ExtraHop.Record.Source.functionIdNumberb'Function ID'
ExtraHop.Record.Source.functionNameStringb'Function Name'
ExtraHop.Record.Source.fwdReqClientAddr.typeStringb'Forwarded Request Client IP Address Type'
ExtraHop.Record.Source.fwdReqClientAddr.valueStringb'Forwarded Request Client IP Address Value'
ExtraHop.Record.Source.fwdReqHostStringb'Forwarded Request Host'
ExtraHop.Record.Source.fwdReqIsEncryptedBooleanb'Forwarded Request Is Encrypted'
ExtraHop.Record.Source.fwdReqServerNameStringb'Forwarded Request Server Name'
ExtraHop.Record.Source.fwdReqServerPortNumberb'Forwarded Request Server Port'
ExtraHop.Record.Source.gwAddr.typeStringb'Gateway IP Address Type'
ExtraHop.Record.Source.gwAddr.valueStringb'Gateway IP Address Value'
ExtraHop.Record.Source.handshakeTimeNumberb'Handshake Time'
ExtraHop.Record.Source.hasSDPBooleanb'Has SDP'
ExtraHop.Record.Source.hasshStringb'HASSH'
ExtraHop.Record.Source.hasshServerStringb'HASSH Server'
ExtraHop.Record.Source.heartbeatPayloadLengthNumberb'Heartbeat Payload Length'
ExtraHop.Record.Source.heartbeatTypeNumberb'Heartbeat Type'
ExtraHop.Record.Source.hitCountNumberb'Hit Count'
ExtraHop.Record.Source.hopLimitNumberb'Hop Limit'
ExtraHop.Record.Source.hostStringb'Host'
ExtraHop.Record.Source.htypeNumberb'Hardware Address Type'
ExtraHop.Record.Source.ingressInterfaceUnknownb'Ingress Interface'
ExtraHop.Record.Source.interfaceStringb'Interface'
ExtraHop.Record.Source.isAbortedBooleanb'Aborted'
ExtraHop.Record.Source.isAuthoritativeBooleanb'Authoritative'
ExtraHop.Record.Source.isBinaryProtocolBooleanb'Binary Protocol'
ExtraHop.Record.Source.isCheckingDisabledBooleanb'Checking Disabled'
ExtraHop.Record.Source.isCleanShutdownBooleanb'Clean Shutdown'
ExtraHop.Record.Source.isClientDiskReadBooleanb'Client Disk Read'
ExtraHop.Record.Source.isClientDiskWriteBooleanb'Client Disk Write'
ExtraHop.Record.Source.isCommandCreateBooleanb'Create Command'
ExtraHop.Record.Source.isCommandDeleteBooleanb'Delete Command'
ExtraHop.Record.Source.isCommandFileInfoBooleanb'FileInfo Command'
ExtraHop.Record.Source.isCommandLockBooleanb'Lock Command'
ExtraHop.Record.Source.isCommandReadBooleanb'Read Command'
ExtraHop.Record.Source.isCommandRenameBooleanb'Rename Command'
ExtraHop.Record.Source.isCommandWriteBooleanb'Write Command'
ExtraHop.Record.Source.isCompressedBooleanb'Compressed'
ExtraHop.Record.Source.isEncryptedBooleanb'Encrypted'
ExtraHop.Record.Source.isNoReplyBooleanb'No Reply'
ExtraHop.Record.Source.isPipelinedBooleanb'Pipelined'
ExtraHop.Record.Source.isRecursionAvailableBooleanb'Recursion Available'
ExtraHop.Record.Source.isRecursionDesiredBooleanb'Recursion Desired'
ExtraHop.Record.Source.isRenegotiateBooleanb'Renegotiate'
ExtraHop.Record.Source.isReqAbortedBooleanb'Request Aborted'
ExtraHop.Record.Source.isReqTimeoutBooleanb'Request Timed Out'
ExtraHop.Record.Source.isReqTruncatedBooleanb'Request Truncated'
ExtraHop.Record.Source.isRspAbortedBooleanb'Response Aborted'
ExtraHop.Record.Source.isRspChunkedBooleanb'Chunked'
ExtraHop.Record.Source.isRspCompressedBooleanb'Rsp Compressed'
ExtraHop.Record.Source.isRspImplicitBooleanb'Response Implicit'
ExtraHop.Record.Source.isRspTruncatedBooleanb'Response Truncated'
ExtraHop.Record.Source.isSQLiBooleanb'Contains SQLi'
ExtraHop.Record.Source.isSharedSessionBooleanb'Shared Session'
ExtraHop.Record.Source.isSubOperationBooleanb'Is a suboperation'
ExtraHop.Record.Source.isWeakCipherSuiteBooleanb'Weak Cipher Suite'
ExtraHop.Record.Source.isXSSBooleanb'Contains XSS'
ExtraHop.Record.Source.ja3HashStringb'JA3 Hash'
ExtraHop.Record.Source.ja3sHashStringb'JA3S Hash'
ExtraHop.Record.Source.jitterNumberb'Jitter'
ExtraHop.Record.Source.kexAlgorithmStringb'KEX Algorithm'
ExtraHop.Record.Source.keyboardLayoutStringb'Keyboard Layout'
ExtraHop.Record.Source.l2BytesNumberb'L2 Bytes'
ExtraHop.Record.Source.l7protoStringb'L7 Protocol'
ExtraHop.Record.Source.labelStringb'Label'
ExtraHop.Record.Source.lastNumberb'Last'
ExtraHop.Record.Source.launchParamsStringb'Parameters'
ExtraHop.Record.Source.loadTimeNumberb'Load Time'
ExtraHop.Record.Source.loginTimeNumberb'Login Time'
ExtraHop.Record.Source.methodStringb'Method'
ExtraHop.Record.Source.missCountNumberb'Miss Count'
ExtraHop.Record.Source.mosNumberb'MOS'
ExtraHop.Record.Source.msgClassStringb'Message Class'
ExtraHop.Record.Source.msgCodeNumberb'Message Code'
ExtraHop.Record.Source.msgFormatStringb'Message Format'
ExtraHop.Record.Source.msgIdNumberb'Message ID'
ExtraHop.Record.Source.msgLengthNumberb'Message Length'
ExtraHop.Record.Source.msgSizeNumberb'Message Size'
ExtraHop.Record.Source.msgTextStringb'Message Text'
ExtraHop.Record.Source.msgTypeStringb'Message Type'
ExtraHop.Record.Source.networkUnknownb'Flow Network'
ExtraHop.Record.Source.networkAddr.typeStringb'Flow Network IP Address Type'
ExtraHop.Record.Source.networkAddr.valueStringb'Flow Network IP Address Value'
ExtraHop.Record.Source.networkLatencyNumberb'Network Latency'
ExtraHop.Record.Source.nextHop.typeStringb'Next Hop IP Address Type'
ExtraHop.Record.Source.nextHop.valueStringb'Next Hop IP Address Value'
ExtraHop.Record.Source.nextHopMTUNumberb'Next Hop MTU'
ExtraHop.Record.Source.notAfterNumberb'Certificate Not After'
ExtraHop.Record.Source.offeredAddr.typeStringb'Offered IP Address Type'
ExtraHop.Record.Source.offeredAddr.valueStringb'Offered IP Address Value'
ExtraHop.Record.Source.offsetNumberb'Offset'
ExtraHop.Record.Source.opcodeStringb'Opcode'
ExtraHop.Record.Source.operationStringb'Operation'
ExtraHop.Record.Source.optionStringb'Options'
ExtraHop.Record.Source.originStringb'Origin'
ExtraHop.Record.Source.outOfOrderNumberb'Out Of Order'
ExtraHop.Record.Source.pathStringb'Path'
ExtraHop.Record.Source.payloadTypeStringb'Payload Type'
ExtraHop.Record.Source.payloadTypeIdNumberb'Payload Type ID'
ExtraHop.Record.Source.persistentBooleanb'Persistent'
ExtraHop.Record.Source.pktsNumberb'Packets'
ExtraHop.Record.Source.pointerNumberb'Pointer'
ExtraHop.Record.Source.printerNameStringb'Printer Name'
ExtraHop.Record.Source.priorityNumberb'Priority'
ExtraHop.Record.Source.procedureStringb'Procedure'
ExtraHop.Record.Source.processingTimeNumberb'Processing Time'
ExtraHop.Record.Source.programStringb'Program'
ExtraHop.Record.Source.protoStringb'IP Protocol'
ExtraHop.Record.Source.protocolStringb'Protocol'
ExtraHop.Record.Source.putAppNameStringb'Put Application Name'
ExtraHop.Record.Source.qnameStringb'Query Name'
ExtraHop.Record.Source.qtypeStringb'Query Type'
ExtraHop.Record.Source.queryStringb'Query'
ExtraHop.Record.Source.queueStringb'Queue'
ExtraHop.Record.Source.queueMgrStringb'Queue Manager'
ExtraHop.Record.Source.rFactorNumberb'R Factor'
ExtraHop.Record.Source.realmStringb'Server Realm'
ExtraHop.Record.Source.receiver.typeStringb'Receiver Type'
ExtraHop.Record.Source.receiver.valueStringb'Receiver Discovery ID'
ExtraHop.Record.Source.receiverAddr.typeStringb'Receiver IP Address Type'
ExtraHop.Record.Source.receiverAddr.valueStringb'Receiver IP Address Value'
ExtraHop.Record.Source.receiverAsnNumberb'Receiver ASN'
ExtraHop.Record.Source.receiverBytesNumberb'Receiver Bytes'
ExtraHop.Record.Source.receiverIsBrokerBooleanb'To Broker'
ExtraHop.Record.Source.receiverL2BytesNumberb'Receiver L2 Bytes'
ExtraHop.Record.Source.receiverPktsNumberb'Receiver Packets'
ExtraHop.Record.Source.receiverPortNumberb'Receiver Port'
ExtraHop.Record.Source.receiverPrefixLengthNumberb'Receiver Prefix Length'
ExtraHop.Record.Source.receiverRTONumberb'Receiver RTO'
ExtraHop.Record.Source.receiverZeroWndNumberb'Receiver Zero Windows'
ExtraHop.Record.Source.recipientStringb'Recipient'
ExtraHop.Record.Source.recipientListStringb'Recipient List'
ExtraHop.Record.Source.redeliveryCountNumberb'Redelivery Count'
ExtraHop.Record.Source.refererStringb'Referer'
ExtraHop.Record.Source.renameDirChangedBooleanb'Rename Directory Changed'
ExtraHop.Record.Source.replyToStringb'Reply To'
ExtraHop.Record.Source.reqBytesNumberb'Request Bytes'
ExtraHop.Record.Source.reqKeyStringb'Request Key'
ExtraHop.Record.Source.reqL2BytesNumberb'Request L2 Bytes'
ExtraHop.Record.Source.reqPduStringb'Request PDU Type'
ExtraHop.Record.Source.reqPktsNumberb'Request Packets'
ExtraHop.Record.Source.reqRTONumberb'Request RTO'
ExtraHop.Record.Source.reqSizeNumberb'Request Size'
ExtraHop.Record.Source.reqTimeToLastByteNumberb'Req Time To Last Byte'
ExtraHop.Record.Source.reqTransferTimeNumberb'Request Transfer Time'
ExtraHop.Record.Source.requestedColorDepthStringb'Requested Color Depth'
ExtraHop.Record.Source.requestedProtocolsStringb'Requested Protocols'
ExtraHop.Record.Source.resolvedQueueStringb'Resolved Queue'
ExtraHop.Record.Source.resolvedQueueMgrStringb'Resolved Queue Manager'
ExtraHop.Record.Source.resourceStringb'Resource'
ExtraHop.Record.Source.responseQueueStringb'Response Queue'
ExtraHop.Record.Source.roundTripTimeNumberb'Round Trip Time'
ExtraHop.Record.Source.rspBytesNumberb'Response Bytes'
ExtraHop.Record.Source.rspL2BytesNumberb'Response L2 Bytes'
ExtraHop.Record.Source.rspPduStringb'Response PDU Type'
ExtraHop.Record.Source.rspPktsNumberb'Response Packets'
ExtraHop.Record.Source.rspRTONumberb'Response RTO'
ExtraHop.Record.Source.rspSizeNumberb'Response Size'
ExtraHop.Record.Source.rspTimeToFirstByteNumberb'Rsp Time To First Byte'
ExtraHop.Record.Source.rspTimeToFirstHeaderNumberb'Rsp Time To First Header'
ExtraHop.Record.Source.rspTimeToFirstPayloadNumberb'Rsp Time To First Payload'
ExtraHop.Record.Source.rspTimeToLastByteNumberb'Rsp Time To Last Byte'
ExtraHop.Record.Source.rspTransferTimeNumberb'Response Transfer Time'
ExtraHop.Record.Source.rspVersionStringb'Response Version'
ExtraHop.Record.Source.rtoNumberb'RTO'
ExtraHop.Record.Source.sNameTypeStringb'Server Name Type'
ExtraHop.Record.Source.sNamesStringb'Server Name Components'
ExtraHop.Record.Source.saslMechanismStringb'SASL Mechanism'
ExtraHop.Record.Source.searchFilterStringb'Search Filter'
ExtraHop.Record.Source.searchScopeStringb'Search Scope'
ExtraHop.Record.Source.selectedProtocolStringb'Selected Protocol'
ExtraHop.Record.Source.sender.typeStringb'Sender Type'
ExtraHop.Record.Source.sender.valueStringb'Sender Discovery ID'
ExtraHop.Record.Source.senderAddr.typeStringb'Sender IP Address Type'
ExtraHop.Record.Source.senderAddr.valueStringb'Sender IP Address Value'
ExtraHop.Record.Source.senderAsnNumberb'Sender ASN'
ExtraHop.Record.Source.senderBytesNumberb'Sender Bytes'
ExtraHop.Record.Source.senderIsBrokerBooleanb'From Broker'
ExtraHop.Record.Source.senderL2BytesNumberb'Sender L2 Bytes'
ExtraHop.Record.Source.senderPktsNumberb'Sender Packets'
ExtraHop.Record.Source.senderPortNumberb'Sender Port'
ExtraHop.Record.Source.senderPrefixLengthNumberb'Sender Prefix Length'
ExtraHop.Record.Source.senderRTONumberb'Sender RTO'
ExtraHop.Record.Source.senderZeroWndNumberb'Sender Zero Windows'
ExtraHop.Record.Source.seqNumNumberb'Sequence Number'
ExtraHop.Record.Source.server.typeStringb'Server Type'
ExtraHop.Record.Source.server.valueStringb'Server Discovery ID'
ExtraHop.Record.Source.serverAddr.typeStringb'Server IPv4 Address Type'
ExtraHop.Record.Source.serverAddr.valueStringb'Server IPv4 Address Value'
ExtraHop.Record.Source.serverBytesNumberb'Server Bytes'
ExtraHop.Record.Source.serverCGPMsgCountNumberb'Server CGP Messages'
ExtraHop.Record.Source.serverCipherAlgorithmStringb'Server Cipher Algorithm'
ExtraHop.Record.Source.serverCompressionAlgorithmStringb'Server Compression Algorithm'
ExtraHop.Record.Source.serverImplementationStringb'Server Implementation'
ExtraHop.Record.Source.serverL2BytesNumberb'Server L2 Bytes'
ExtraHop.Record.Source.serverMacAlgorithmStringb'Server MAC Algorithm'
ExtraHop.Record.Source.serverMsgCountNumberb'Server Messages'
ExtraHop.Record.Source.serverPktsNumberb'Server Packets'
ExtraHop.Record.Source.serverPortNumberb'Server Port'
ExtraHop.Record.Source.serverPrincipalNameStringb'Server Principal Name'
ExtraHop.Record.Source.serverRTONumberb'Server RTO'
ExtraHop.Record.Source.serverVersionStringb'Server Version'
ExtraHop.Record.Source.serverZeroWndNumberb'Server Zero Windows'
ExtraHop.Record.Source.shareStringb'Share'
ExtraHop.Record.Source.sourceStringb'Source'
ExtraHop.Record.Source.sqliStringb'Potential SQLi'
ExtraHop.Record.Source.srcQueueMgrStringb'Source Queue Manager'
ExtraHop.Record.Source.ssrcNumberb'Sender SSRC'
ExtraHop.Record.Source.statementStringb'Statement'
ExtraHop.Record.Source.statusStringb'Status'
ExtraHop.Record.Source.statusCodeNumberb'Status Code'
ExtraHop.Record.Source.statusTextStringb'Status Text'
ExtraHop.Record.Source.tableStringb'Table'
ExtraHop.Record.Source.targetStringb'Target'
ExtraHop.Record.Source.tcpFlagsNumberb'TCP Flags'
ExtraHop.Record.Source.thinkTimeNumberb'Think Time'
ExtraHop.Record.Source.tickChannelStringb'Tick Channel'
ExtraHop.Record.Source.ticketHashStringb'Encrypted Ticket Hash'
ExtraHop.Record.Source.tillStringb'Till'
ExtraHop.Record.Source.titleStringb'Title'
ExtraHop.Record.Source.toStringb'To'
ExtraHop.Record.Source.totalMsgLengthNumberb'Total Msg Length'
ExtraHop.Record.Source.transferBytesNumberb'Bytes Transferred'
ExtraHop.Record.Source.txIdNumberb'Transaction ID'
ExtraHop.Record.Source.unitIdNumberb'Unit ID'
ExtraHop.Record.Source.uriStringb'URI'
ExtraHop.Record.Source.userStringb'User'
ExtraHop.Record.Source.userAgentStringb'User Agent'
ExtraHop.Record.Source.vbucketNumberb'vBucket'
ExtraHop.Record.Source.versionStringb'Version'
ExtraHop.Record.Source.vlanNumberb'VLAN'
ExtraHop.Record.Source.vxlanVNINumberb'VxLAN VNI'
ExtraHop.Record.Source.warningStringb'Warning'
ExtraHop.Record.Source.xssStringb'Potential XSS'
+ +

 

+
Command Example
+

+ !extrahop-query-records query_from=-6h limit=2 +

+
Context Example
+
+{
+    "ExtraHop": {
+        "Record": [
+            {
+                "Id": "AW1goQmvylOgLDUmuFLT",
+                "Index": "extrahop-11-2019-9-24-0",
+                "Sort": [
+                    1569284181528.201
+                ],
+                "Source": {
+                    "client": {
+                        "type": "device",
+                        "value": [
+                            "fff41107140a0000"
+                        ]
+                    },
+                    "clientAddr": {
+                        "type": "ipaddr4",
+                        "value": "172.16.34.152"
+                    },
+                    "clientPort": 34140,
+                    "clientZeroWnd": 0,
+                    "ex": {
+                        "isSuspicious": false
+                    },
+                    "flowId": "0cac4df05d896054",
+                    "host": "prod1.example.com",
+                    "isPipelined": false,
+                    "isReqAborted": false,
+                    "isRspAborted": false,
+                    "isRspChunked": false,
+                    "isRspCompressed": false,
+                    "isSQLi": false,
+                    "isXSS": false,
+                    "method": "POST",
+                    "processingTime": 233.318,
+                    "referer": "http://prod1.example.com/login?from=%2F",
+                    "reqBytes": 1160,
+                    "reqL2Bytes": 1518,
+                    "reqPkts": 5,
+                    "reqRTO": 0,
+                    "reqSize": 64,
+                    "reqTimeToLastByte": 0,
+                    "roundTripTime": 0.245,
+                    "rspBytes": 346,
+                    "rspL2Bytes": 1284,
+                    "rspPkts": 8,
+                    "rspRTO": 0,
+                    "rspSize": 0,
+                    "rspTimeToFirstHeader": 233.318,
+                    "rspTimeToLastByte": 234.528,
+                    "rspVersion": "1.1",
+                    "server": {
+                        "type": "device",
+                        "value": [
+                            "fff4c3090a0a0000"
+                        ]
+                    },
+                    "serverAddr": {
+                        "type": "ipaddr4",
+                        "value": "172.16.34.161"
+                    },
+                    "serverPort": 80,
+                    "serverZeroWnd": 0,
+                    "statusCode": 302,
+                    "timestamp": 1569284181528.201,
+                    "uri": "prod1.example.com/j_acegi_security_check",
+                    "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
+                },
+                "Type": "~http"
+            },
+            {
+                "Id": "AW1gQF7uylOgLDUmoClO",
+                "Index": "extrahop-11-2019-9-23-0",
+                "Sort": [
+                    1569277857270.787
+                ],
+                "Source": {
+                    "args": "",
+                    "client": {
+                        "type": "device",
+                        "value": [
+                            "fff48dff0a0a0000"
+                        ]
+                    },
+                    "clientAddr": {
+                        "type": "ipaddr4",
+                        "value": "172.16.34.11"
+                    },
+                    "clientPort": 1920,
+                    "clientZeroWnd": 0,
+                    "cwd": "/",
+                    "detection": [
+                        "anonymous_ftp"
+                    ],
+                    "ex": {
+                        "isSuspicious": false
+                    },
+                    "flowId": "037efd385d8947a0",
+                    "isReqAborted": false,
+                    "isRspAborted": false,
+                    "method": "PASS",
+                    "processingTime": 0.25,
+                    "reqBytes": 22,
+                    "reqL2Bytes": 490,
+                    "reqPkts": 6,
+                    "reqRTO": 0,
+                    "rspBytes": 21,
+                    "rspL2Bytes": 239,
+                    "rspPkts": 2,
+                    "rspRTO": 0,
+                    "server": {
+                        "type": "device",
+                        "value": [
+                            "fff45a060a0a0000"
+                        ]
+                    },
+                    "serverAddr": {
+                        "type": "ipaddr4",
+                        "value": "172.16.34.231"
+                    },
+                    "serverPort": 21,
+                    "serverZeroWnd": 0,
+                    "statusCode": 230,
+                    "timestamp": 1569277857270.787,
+                    "user": "anonymous"
+                },
+                "Type": "~ftp"
+            }
+        ]
+    }
+}
+
+
Human Readable Output
+

+

Showing 2 out of 15 Record(s) Found.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
clientclientAddrclientPortclientZeroWndexflowIdhostisPipelinedisReqAbortedisRspAbortedisRspChunkedisRspCompressedisSQLiisXSSmethodprocessingTimerefererreqBytesreqL2BytesreqPktsreqRTOreqSizereqTimeToLastByteroundTripTimerspBytesrspL2BytesrspPktsrspRTOrspSizerspTimeToFirstHeaderrspTimeToLastByterspVersionserverserverAddrserverPortserverZeroWndstatusCodetimestampuriuserAgent
type: device
value: fff41107140a0000
type: ipaddr4
value: 172.16.34.152
341400isSuspicious: false0cac4df05d896054prod1.example.comfalsefalsefalsefalsefalsefalsefalsePOST233.318http://prod1.example.com/login?from=%2F11601518506400.2453461284800233.318234.5281.1type: device
value: fff4c3090a0a0000
type: ipaddr4
value: 172.16.34.161
8003021569284181528.201prod1.example.com/j_acegi_security_checkMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36
type: device
value: fff48dff0a0a0000
type: ipaddr4
value: 172.16.34.11
19200isSuspicious: false037efd385d8947a0falsefalsePASS0.2522490602123920type: device
value: fff45a060a0a0000
type: ipaddr4
value: 172.16.34.231
2102301569277857270.787
+ +

+ +

3. Search for devices

+ +

Search for devices in ExtraHop.

+
Base Command
+

+ extrahop-device-search +

+
Required Permissions
+ +
Input
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Argument Name + + Description + + Required +
nameThe name of the device. This searches for matches on all ExtraHop name fields (DHCP, DNS, NetBIOS, Cisco Discovery Protocol, etc).Optional
ipThe IP address of the device.Optional
macThe MAC address of the device.Optional
roleThe role of the device.Optional
softwareThe OS of the device.Optional
tagA tag present on the device. Optional
vendorThe vendor of the device, based on MAC address via OUI lookup.Optional
discover_timeThe time that device was first seen by ExtraHop, expressed in milliseconds since the epoch. A negative value is evaluated relative to the current time. The default unit for a negative value is milliseconds, but other units can be specified with the following unit suffixes: ms, s, m, h, d, w, M, y. For example, to look one day back enter -1d or -24h. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- for more details on supported time units and suffixes.Optional
vlanThe VLAN ID of the Virtual LAN that the device is on.Optional
activityThe activity of the device.Optional
operatorThe compare method applied when matching the fields against their values. For example, to find devices with names that begin with 'SEA1' (set name=SEA1, operator=startswith)Optional
match_typeThe match operator to use when chaining the search fields together. For example, to find all HTTP servers running Windows on the network (set match_type=and, role=http_server, software=windows).Optional
active_fromThe beginning timestamp for the request. Return only devices active after this time. Time is expressed in milliseconds since the epoch. 0 indicates the time of the request. A negative value is evaluated relative to the current time. The default unit for a negative value is milliseconds, but other units can be specified with one of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- for more details on supported time units and suffixes.Optional
active_untilThe ending timestamp for the request. Return only devices active before this time. Time is expressed in milliseconds since the epoch. 0 indicates the time of the request. A negative value is evaluated relative to the current time. The default unit for a negative value is milliseconds, but other units can be specified with one of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- for more details on supported time units and suffixes.Optional
limitThe maximum number of devices to return.Optional
l3_onlyOnly returns layer 3 devices by filtering out any layer 2 parent devices.Optional
+ +

 

+
Context Output
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Path + + Type + + Description +
ExtraHop.Device.MacaddrStringb'The MAC Address of the device.'
ExtraHop.Device.DeviceClassStringb'The class of the device.'
ExtraHop.Device.UserModTimeNumberb'The time of the most recent update, expressed in milliseconds since the epoch.'
ExtraHop.Device.AutoRoleStringb'The role automatically detected by the ExtraHop.'
ExtraHop.Device.ParentIdNumberb'The ID of the parent device.'
ExtraHop.Device.VendorStringb'The device vendor.'
ExtraHop.Device.Analysisstringb'The level of analysis preformed on the device.'
ExtraHop.Device.DiscoveryIdStringb'The UUID given by the Discover appliance.'
ExtraHop.Device.DefaultNameStringb'The default name of the device.'
ExtraHop.Device.DisplayNameStringb'The display name of device.'
ExtraHop.Device.OnWatchlistBooleanb'Whether the device is on the advanced analysis whitelist.'
ExtraHop.Device.ModTimeNumberb'The time of the most recent update, expressed in milliseconds since the epoch.'
ExtraHop.Device.IsL3Booleanb'Indicates whether the device is a Layer 3 device.'
ExtraHop.Device.RoleStringb'The role of the device.'
ExtraHop.Device.DiscoverTimeNumberb'The time that the device was discovered.'
ExtraHop.Device.IdNumberb'The ID of the device.'
ExtraHop.Device.Ipaddr4Stringb'The IPv4 address of the device.'
ExtraHop.Device.VlanidNumberb'The ID of VLan.'
ExtraHop.Device.Ipaddr6stringb'The IPv6 address of the device.'
ExtraHop.Device.NodeIdnumberb'The Node ID of the Discover appliance.'
ExtraHop.Device.Descriptionstringb'A user customizable description of the device.'
ExtraHop.Device.DnsNamestringb'The DNS name associated with the device.'
ExtraHop.Device.DhcpNamestringb'The DHCP name associated with the device.'
ExtraHop.Device.CdpNamestringb'The Cisco Discovery Protocol name associated with the device.'
ExtraHop.Device.NetbiosNamestringb'The NetBIOS name associated with the device.'
ExtraHop.Device.Urlstringb'Link to the device details page in ExtraHop.'
+ +

 

+
Command Example
+

+ !extrahop-device-search limit=2 +

+
Context Example
+
+{
+    "ExtraHop": {
+        "Device": [
+            {
+                "Analysis": "l2_exempt",
+                "AnalysisLevel": 4,
+                "AutoRole": "other",
+                "DefaultName": "Dell A9B1F6",
+                "DeviceClass": "node",
+                "DhcpName": "Win3-Web",
+                "DiscoverTime": 1569277980000,
+                "DiscoveryId": "509a4ca9b1f60000",
+                "DisplayName": "Win3-Web",
+                "ExtrahopId": "509a4ca9b1f60000",
+                "Id": 18628,
+                "IsL3": false,
+                "Macaddr": "70:F6:4C:A3:C2:F0",
+                "ModTime": 1569278201104,
+                "OnWatchlist": false,
+                "Role": "other",
+                "Url": "https://test1.extrahop.com/extrahop/#/metrics/devices/a74b9b6aa9e44de9baedcf8112c27ec4.509a4ca9b1f60000/overview/",
+                "UserModTime": 1569277990763,
+                "Vendor": "Dell",
+                "Vlanid": 0
+            },
+            {
+                "Analysis": "l2_exempt",
+                "AnalysisLevel": 4,
+                "AutoRole": "other",
+                "DefaultName": "Device a0510b0e4e210000",
+                "DeviceClass": "node",
+                "DhcpName": "PG1NP0ZR",
+                "DiscoverTime": 1569276630000,
+                "DiscoveryId": "a0510b0e4e210000",
+                "DisplayName": "PF1NP0ZR",
+                "ExtrahopId": "a0510b0e4e210000",
+                "Id": 18627,
+                "IsL3": false,
+                "Macaddr": "B1:62:1C:1F:5F:32",
+                "ModTime": 1569276641503,
+                "OnWatchlist": false,
+                "Role": "other",
+                "Url": "https://test1.extrahop.com/extrahop/#/metrics/devices/a74b9b6aa9e44de9baedcf8112c27ec4.a0510b0e4e210000/overview/",
+                "UserModTime": 1569276640285,
+                "Vlanid": 0
+            }
+        ]
+    }
+}
+
+
Human Readable Output
+

+

2 Device(s) Found

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Display NameIP AddressMAC AddressRoleVendorURL
Win3-Web70:F6:4C:A3:C2:F0otherDell[View Device in ExtraHop](https://test1.extrahop.com/extrahop/#/metrics/devices/a74b9b6aa9e44de9baedcf8112c27ec4.509a4ca9b1f60000/overview/)
PG1NP0ZRB1:62:1C:1F:5F:32other[View Device in ExtraHop](https://test1.extrahop.com/extrahop/#/metrics/devices/a74b9b6aa9e44de9baedcf8112c27ec4.a0510b0e4e210000/overview/)
+ +

+ +

4. Add or remove devices from the watchlist

+ +

Add or remove devices from the watchlist in ExtraHop.

+
Base Command
+

+ extrahop-edit-watchlist +

+
Required Permissions
+ +
Input
+ + + + + + + + + + + + + + + + + + + + +
+ Argument Name + + Description + + Required +
addThe list of IP Addresses or ExtraHop API IDs of the devices to add, comma separated.Optional
removeThe list of IP Addresses or ExtraHop API IDs of the devices to remove, comma separated.Optional
+ +

 

+
Context Output
+There are no context output for this command. +

 

+
Command Example
+

+ !extrahop-edit-watchlist add=172.16.34.152 +

+ +
Human Readable Output
+

+

+Successful Modification +

+

+ +

5. Get all devices on the watchlist

+ +

Get all devices on the watchlist in ExtraHop.

+
Base Command
+

+ extrahop-get-watchlist +

+
Required Permissions
+ +
Input
+ + + + + + + + + + + +
+ Argument Name + + Description + + Required +
+ +

 

+
Context Output
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Path + + Type + + Description +
Extrahop.Device.MacaddrStringb'The MAC Address of the device.'
Extrahop.Device.DeviceClassStringb'The class of this device. '
Extrahop.Device.UserModTimeNumberb'The time of the most recent update, expressed in milliseconds since the epoch.'
Extrahop.Device.AutoRoleStringb'The role automatically detected by the ExtraHop. '
Extrahop.Device.ParentIdNumberb'The ID of the parent device.'
Extrahop.Device.VendorStringb'The device vendor.'
Extrahop.Device.Analysisstringb'The level of analysis preformed on the device.'
Extrahop.Device.DiscoveryIdStringb'The UUID given by the Discover appliance.'
Extrahop.Device.DefaultNameStringb'The default name for this device.'
Extrahop.Device.DisplayNameStringb'The display name of device.'
Extrahop.Device.OnWatchlistBooleanb'Whether the device is on the advanced analysis whitelist.'
Extrahop.Device.ModTimeNumberb'The time of the most recent update, expressed in milliseconds since the epoch.'
Extrahop.Device.IsL3Booleanb'Indicates whether the device is a Layer 3 device.'
Extrahop.Device.RoleStringb'The role of the device. '
Extrahop.Device.DiscoverTimeNumberb'The time that the device was discovered.'
Extrahop.Device.IdNumberb'The ID of the device.'
Extrahop.Device.Ipaddr4Stringb'The IPv4 address for this device.'
Extrahop.Device.VlanidNumberb'The unique identifier for the VLAN this device is associated with.'
ExtraHop.Device.Ipaddr6stringb'The IPv6 address of the device.'
ExtraHop.Device.NodeIdnumberb'The Node ID of the Discover appliance.'
ExtraHop.Device.Descriptionstringb'A user customizable description of the device.'
ExtraHop.Device.DnsNamestringb'The DNS name associated with the device.'
ExtraHop.Device.DhcpNamestringb'The DHCP name associated with the device.'
ExtraHop.Device.CdpNamestringb'The Cisco Discovery Protocol name associated with the device.'
ExtraHop.Device.NetbiosNamestringb'The NetBIOS name associated with the device.'
ExtraHop.Device.Urlstringb'Link to the device details page in ExtraHop.'
+ +

 

+
Command Example
+

+ !extrahop-get-watchlist +

+
Context Example
+
+{
+    "ExtraHop": {
+        "Device": [
+            {
+                "Analysis": "advanced",
+                "AnalysisLevel": 2,
+                "AutoRole": "other",
+                "DefaultName": "Device 172.16.34.152",
+                "DeviceClass": "node",
+                "DhcpName": "dem-is-to",
+                "DiscoverTime": 1522964970000,
+                "DiscoveryId": "fff49b080a0a0000",
+                "DisplayName": "dem-is-to",
+                "DnsName": "dem-is-to.example.com",
+                "ExtrahopId": "fff49b080a0a0000",
+                "Id": 1554,
+                "Ipaddr4": "172.16.34.152",
+                "IsL3": true,
+                "Macaddr": "63:65:11:A1:3B:2B",
+                "ModTime": 1569283538898,
+                "NetbiosName": "DEMISTO",
+                "OnWatchlist": true,
+                "ParentId": 1445,
+                "Role": "other",
+                "Url": "https://test1.extrahop.com/extrahop/#/metrics/devices/a74b9b6aa9e44de9baedcf8112c27ec4.fff49b080a0a0000/overview/",
+                "UserModTime": 1522964985837,
+                "Vlanid": 0
+            }
+        ]
+    }
+}
+
+
Human Readable Output
+

+

1 Device(s) Found

+ + + + + + + + + + + + + + + + + + + + + +
Display NameIP AddressMAC AddressRoleVendorURL
dem-is-to172.16.34.15263:65:11:A1:3B:2Bother[View Device in ExtraHop](https://test1.extrahop.com/extrahop/#/metrics/devices/a74b9b6aa9e44de9baedcf8112c27ec4.fff49b080a0a0000/overview/)
+ +

+ +

6. Create a new alert rule

+ +

Create a new alert rule in ExtraHop.

+
Base Command
+

+ extrahop-create-alert +

+
Required Permissions
+ +
Input
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Argument Name + + Description + + Required +
apply_allIndicates whether the alert is assigned to all available data sources.Required
disabledIndicates whether the alert is disabled.Required
nameThe unique, friendly name for the alert.Required
notify_snmpIndicates whether to send an SNMP trap when an alert is generated.Required
refire_intervalThe time interval in which alert conditions are monitored, expressed in seconds. Required
severityThe severity level of the alert, which is displayed in the Alert History, email notifications, and SNMP traps. Supported values: 0, 1, 2, 3, 4, 5, 6, 7Required
typeThe type of alert. Required
object_typeThe type of metric source monitored by the alert configuration. Only applicable to detection alerts. Optional
protocolsThe list of monitored protocols. Only applicable to detection alerts.Optional
field_nameThe name of the monitored metric. Only applicable to threshold alerts.Optional
field_name2The second monitored metric when applying a ratio. Only applicable to threshold alerts.Optional
stat_nameThe statistic name for the alert. Only applicable to threshold alerts.Optional
unitsThe interval in which to evaluate the alert condition. Only applicable to threshold alerts. +Supported values: "none", "period", "1 sec", "1 min", "1 hr"Optional
interval_lengthThe length of the alert interval, expressed in seconds. Only applicable to threshold alerts. +Supported values: 30, 60, 120, 300, 600, 900, 1200, 1800Optional
operandThe value to compare against alert conditions. The compare method is specified by the value of the operator field. Only applicable to threshold alerts.Optional
operatorThe logical operator applied when comparing the value of the operand field to alert conditions. Only applicable to threshold alerts.Optional
field_opThe type of comparison between the field_name and field_name2 fields when applying a ratio. Only applicable to threshold alerts.Optional
paramThe first alert parameter, which is either a key pattern or a data point. Only applicable to threshold alerts.Optional
param2The second alert parameter, which is either a key pattern or a data point. Only applicable to threshold alerts.Optional
+ +

 

+
Context Output
+There are no context output for this command. +

 

+
Command Example
+

+ !extrahop-create-alert apply_all=false disabled=true name="Demisto Test Alert" notify_snmp=false refire_interval=3600 severity=3 type=threshold object_type=device operator=> operand=0.1 field_name=rsp_error field_name2=rsp field_op=/ units=none stat_name="extrahop.application.http" +

+ +
Human Readable Output
+

+

+Successfully Created +

+

+ +

7. Modify an alert rule

+ +

Modify an alert rule in ExtraHop.

+
Base Command
+

+ extrahop-edit-alert +

+
Required Permissions
+ +
Input
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Argument Name + + Description + + Required +
alert_idThe unique identifier for the alert.Required
apply_allIndicates whether the alert is assigned to all available data sources.Required
disabledIndicates whether the alert is disabled.Required
nameThe unique, friendly name for the alert.Required
notify_snmpIndicates whether to send an SNMP trap when an alert is generated.Required
field_nameThe name of the monitored metric. Only applicable to threshold alerts.Optional
stat_nameThe statistic name for the alert. Only applicable to threshold alerts.Optional
unitsThe interval in which to evaluate the alert condition. Only applicable to threshold alerts.Optional
interval_lengthThe length of the alert interval, expressed in seconds. Only applicable to threshold alerts.Optional
operandThe value to compare against alert conditions. The compare method is specified by the value of the operator field. Only applicable to threshold alerts.Optional
refire_intervalThe time interval in which alert conditions are monitored, expressed in seconds.Required
severityThe severity level of the alert, which is displayed in the Alert History, email notifications, and SNMP traps.Required
typeThe type of alert.Required
object_typeThe type of metric source monitored by the alert configuration. Only applicable to detection alerts.Optional
protocolsThe list of monitored protocols. Only applicable to detection alerts.Optional
operatorThe logical operator applied when comparing the value of the operand field to alert conditions. Only applicable to threshold alerts.Optional
field_name2The second monitored metric when applying a ratio. Only applicable to threshold alerts.Optional
field_opThe type of comparison between the field_name and field_name2 fields when applying a ratio. Only applicable to threshold alerts.Optional
paramThe first alert parameter, which is either a key pattern or a data point. Only applicable to threshold alerts.Optional
param2The second alert parameter, which is either a key pattern or a data point. Only applicable to threshold alerts.Optional
+ +

 

+
Context Output
+There are no context output for this command. +

 

+
Command Example
+

+ !extrahop-edit-alert alert_id=32 apply_all=false disabled=true name="Demisto Test" notify_snmp=false refire_interval=3600 severity=3 type=threshold object_type=device operator=> operand=0.1 field_name=rsp_error field_name2=rsp field_op=/ units=none stat_name="extrahop.application.http" interval_length=30 +

+ +
Human Readable Output
+

+

+Successful Modification +

+

+ +

8. Link an ExtraHop Detection to a Demisto Investigation

+ +

Link an ExtraHop Detection to a Demisto Investigation.

+
Base Command
+

+ extrahop-track-ticket +

+
Required Permissions
+ +
Input
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Argument Name + + Description + + Required +
incident_idThe ID of the Demisto Incident to ticket track.Required
detection_idThe ID of the ExtraHop Detection to ticket track.Required
incident_ownerOwner of the incident.Optional
incident_statusStatus of the incidentOptional
incident_close_reasonReason the incident was closedOptional
+ +

 

+
Context Output
+ + + + + + + + + + + + + + + +
+ Path + + Type + + Description +
ExtraHop.TicketIdstringb'Demisto Incident ID successfully tracked to ExtraHop Detection'
+ +

 

+
Command Example
+

+ !extrahop-track-ticket detection_id=25910 incident_id=40360 incident_owner='colinw' incident_status=1 +

+
Context Example
+
+{
+    "ExtraHop": {
+        "TicketId": "40360"
+    }
+}
+
+
Human Readable Output
+

+

+Successful Modification +

+

+ +

9. Get all peers for a device

+ +

Get all peers for a device from ExtraHop.

+
Base Command
+

+ extrahop-get-peers +

+
Required Permissions
+ +
Input
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Argument Name + + Description + + Required +
ip_or_idThe IP Address or ExtraHop API ID of the source device to get peer devices.Required
query_fromThe beginning timestamp of the time range the query will search, expressed in milliseconds since the epoch. A negative value is evaluated relative to the current time. The default unit for a negative value is milliseconds, but other units can be specified with one of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- for more details on supported time units and suffixes.Optional
query_untilThe ending timestamp of the time range the query will search, expressed in milliseconds since the epoch. 0 indicates the time of the request. A negative value is evaluated relative to the current time. The default unit for a negative value is milliseconds, but other units can be specified with one of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- for more details on supported time units and suffixes.Optional
peer_roleThe role of the peer device in relation to the origin device.Optional
protocolA filter to only return peers that the source device has communicated with over this protocol. If no value is set, the object includes any protocol.Optional
+ +

 

+
Context Output
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Path + + Type + + Description +
ExtraHop.Device.Macaddrstringb'The MAC Address of the device.'
ExtraHop.Device.DeviceClassstringb'The class of the device.'
ExtraHop.Device.UserModTimenumberb'The time of the most recent update, expressed in milliseconds since the epoch.'
ExtraHop.Device.AutoRolestringb'The role automatically detected by the ExtraHop.'
ExtraHop.Device.ParentIdnumberb'The ID of the parent device.'
ExtraHop.Device.Vendorstringb'The device vendor.'
ExtraHop.Device.Analysisstringb'The level of analysis preformed on the device.'
ExtraHop.Device.DiscoveryIdstringb'The UUID given by the Discover appliance.'
ExtraHop.Device.DefaultNamestringb'The default name of the device.'
ExtraHop.Device.DisplayNamestringb'The display name of device.'
ExtraHop.Device.OnWatchlistbooleanb'Whether the device is on the advanced analysis whitelist.'
ExtraHop.Device.ModTimenumberb'The time of the most recent update, expressed in milliseconds since the epoch.'
ExtraHop.Device.IsL3booleanb'Indicates whether the device is a Layer 3 device.'
ExtraHop.Device.Rolestringb'The role of the device.'
ExtraHop.Device.DiscoverTimenumberb'The time that the device was discovered.'
ExtraHop.Device.Idnumberb'The ID of the device.'
ExtraHop.Device.Ipaddr4stringb'The IPv4 address of the device.'
ExtraHop.Device.Vlanidnumberb'The ID of VLan.'
ExtraHop.Device.Ipaddr6stringb'The IPv6 address of the device.'
ExtraHop.Device.NodeIdnumberb'The Node ID of the Discover appliance.'
ExtraHop.Device.Descriptionstringb'A user customizable description of the device.'
ExtraHop.Device.DnsNamestringb'The DNS name associated with the device.'
ExtraHop.Device.DhcpNamestringb'The DHCP name associated with the device.'
ExtraHop.Device.CdpNamestringb'The Cisco Discovery Protocol name associated with the device.'
ExtraHop.Device.NetbiosNamestringb'The NetBIOS name associated with the device.'
ExtraHop.Device.Urlstringb'Link to the device details page in ExtraHop.'
ExtraHop.Device.ClientProtocolsstringb'The list of protocols the peer device is communicating as a client.'
ExtraHop.Device.ServerProtocolsstringb'The list of protocols the peer device is communicating as a server.'
+ +

 

+
Command Example
+

+ !extrahop-get-peers ip_or_id=172.16.34.23 +

+
Context Example
+
+{
+    "ExtraHop": {
+        "Device": [
+            {
+                "Analysis": "advanced",
+                "AnalysisLevel": 1,
+                "AutoRole": "other",
+                "DefaultName": "VMware 172.16.34.161",
+                "DeviceClass": "node",
+                "DhcpName": "joker.example.com",
+                "DiscoverTime": 1522964910000,
+                "DiscoveryId": "fff4bb070a0a0000",
+                "DisplayName": "joker.example.com",
+                "DnsName": "joker.example.com",
+                "ExtrahopId": "fff4bb070a0a0000",
+                "Id": 374,
+                "Ipaddr4": "172.16.34.161",
+                "IsL3": true,
+                "Macaddr": "11:1D:3A:3C:3E:BE",
+                "ModTime": 1569284586752,
+                "OnWatchlist": false,
+                "ParentId": 18018,
+                "Role": "other",
+                "ServerProtocols": [
+                    "TCP:SSL:LDAP",
+                    "TCP:SSL"
+                ],
+                "Url": "https://test1.extrahop.com/extrahop/#/metrics/devices/a74b9b6aa9e44de9baedcf8112c27ec4.fff4bb070a0a0000/overview/",
+                "UserModTime": 1564016944279,
+                "Vendor": "VMware",
+                "Vlanid": 0
+            },
+            {
+                "Analysis": "discovery",
+                "AnalysisLevel": 3,
+                "AutoRole": "other",
+                "ClientProtocols": [
+                    "TCP:HTTP"
+                ],
+                "DefaultName": "Qumranet 172.16.34.11",
+                "DeviceClass": "node",
+                "DhcpName": "soundboard2",
+                "DiscoverTime": 1533851220000,
+                "DiscoveryId": "fff44001150a0000",
+                "DisplayName": "soundboard2",
+                "DnsName": "soundboard2.example.com",
+                "ExtrahopId": "fff44001150a0000",
+                "Id": 10751,
+                "Ipaddr4": "172.16.34.11",
+                "IsL3": true,
+                "Macaddr": "11:2B:5B:27:12:9D",
+                "ModTime": 1569279163337,
+                "OnWatchlist": false,
+                "ParentId": 10746,
+                "Role": "other",
+                "ServerProtocols": [
+                    "TCP:OTHER"
+                ],
+                "Url": "https://test1.extrahop.com/extrahop/#/metrics/devices/a74b9b6aa9e44de9baedcf8112c27ec4.fff44001150a0000/overview/",
+                "UserModTime": 1533851289829,
+                "Vendor": "Qumranet",
+                "Vlanid": 0
+            }
+        ]
+    }
+}
+
+
Human Readable Output
+

2 Peer Device(s) Found + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Display NameIP AddressMAC AddressRoleProtocolsURLVendor
joker.example.com172.16.34.16111:1D:3A:3C:3E:BEotherClient:
Server: TCP:SSL:LDAP, TCP:SSL
[View Device in ExtraHop](https://test1.extrahop.com/extrahop/#/metrics/devices/a74b9b6aa9e44de9baedcf8112c27ec4.fff4bb070a0a0000/overview/)VMware
soundboard2172.16.34.1111:2B:5B:27:12:9DotherClient: TCP:HTTP
Server: TCP:OTHER
[View Device in ExtraHop](https://test1.extrahop.com/extrahop/#/metrics/devices/a74b9b6aa9e44de9baedcf8112c27ec4.fff44001150a0000/overview/)Qumranet
+ +

+ +

10. Get all active network protocols for a device

+ +

Get all active network protocols for a device from ExtraHop.

+
Base Command
+

+ extrahop-get-protocols +

+
Required Permissions
+ +
Input
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ Argument Name + + Description + + Required +
ip_or_idThe IP Address or ExtraHop API ID of the device to get all active network protocols.Required
query_fromThe beginning timestamp of the time range the query will search, expressed in milliseconds since the epoch. A negative value is evaluated relative to the current time. The default unit for a negative value is milliseconds, but other units can be specified with one of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- for more details on supported time units and suffixes.Optional
query_untilThe ending timestamp of the time range the query will search, expressed in milliseconds since the epoch. 0 indicates the time of the request. A negative value is evaluated relative to the current time. The default unit for a negative value is milliseconds, but other units can be specified with one of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- for more details on supported time units and suffixes.Optional
+ +

 

+
Context Output
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Path + + Type + + Description +
ExtraHop.Device.Macaddrstringb'The MAC Address of the device.'
ExtraHop.Device.DeviceClassstringb'The class of the device.'
ExtraHop.Device.UserModTimenumberb'The time of the most recent update, expressed in milliseconds since the epoch.'
ExtraHop.Device.AutoRolestringb'The role automatically detected by the ExtraHop.'
ExtraHop.Device.ParentIdnumberb'The ID of the parent device.'
ExtraHop.Device.Vendorstringb'The device vendor.'
ExtraHop.Device.Analysisstringb'The level of analysis preformed on the device.'
ExtraHop.Device.DiscoveryIdstringb'The UUID given by the Discover appliance.'
ExtraHop.Device.DefaultNamestringb'The default name of the device.'
ExtraHop.Device.DisplayNamestringb'The display name of device.'
ExtraHop.Device.OnWatchlistbooleanb'Whether the device is on the advanced analysis whitelist.'
ExtraHop.Device.ModTimenumberb'The time of the most recent update, expressed in milliseconds since the epoch.'
ExtraHop.Device.IsL3booleanb'Indicates whether the device is a Layer 3 device.'
ExtraHop.Device.Rolestringb'The role of the device.'
ExtraHop.Device.DiscoverTimenumberb'The time that the device was discovered.'
ExtraHop.Device.Idnumberb'The ID of the device.'
ExtraHop.Device.Ipaddr4stringb'The IPv4 address of the device.'
ExtraHop.Device.Vlanidnumberb'The ID of VLan.'
ExtraHop.Device.Ipaddr6stringb'The IPv6 address of the device.'
ExtraHop.Device.NodeIdnumberb'The Node ID of the Discover appliance.'
ExtraHop.Device.Descriptionstringb'A user customizable description of the device.'
ExtraHop.Device.DnsNamestringb'The DNS name associated with the device.'
ExtraHop.Device.DhcpNamestringb'The DHCP name associated with the device.'
ExtraHop.Device.CdpNamestringb'The Cisco Discovery Protocol name associated with the device.'
ExtraHop.Device.NetbiosNamestringb'The NetBIOS name associated with the device.'
ExtraHop.Device.Urlstringb'Link to the device details page in ExtraHop.'
ExtraHop.Device.ClientProtocolsstringb'The list of protocols the peer device is communicating as a client.'
ExtraHop.Device.ServerProtocolsstringb'The list of protocols the peer device is communicating as a server.'
+ +

 

+
Command Example
+

+ !extrahop-get-protocols ip_or_id=172.16.34.11 +

+
Context Example
+
+{
+    "ExtraHop": {
+        "Device": [
+            {
+                "Analysis": "advanced",
+                "AnalysisLevel": 2,
+                "AutoRole": "http_server",
+                "ClientProtocols": [
+                    "TCP:SSL:LDAP",
+                    "TCP:SSL",
+                    "TCP:OTHER",
+                    "UDP:NTP",
+                    "UDP:DNS"
+                ],
+                "DefaultName": "Qumranet 172.16.34.11",
+                "DeviceClass": "node",
+                "DhcpName": "soundboard2",
+                "DiscoverTime": 1533851430000,
+                "DiscoveryId": "fff40601150a0000",
+                "DisplayName": "tme-lab-ubuntu",
+                "ExtrahopId": "fff40601150a0000",
+                "Id": 10754,
+                "Ipaddr4": "172.16.34.11",
+                "IsL3": true,
+                "Macaddr": "11:2B:5B:27:12:9D",
+                "ModTime": 1569276433204,
+                "OnWatchlist": true,
+                "ParentId": 10748,
+                "Role": "http_server",
+                "ServerProtocols": [
+                    "TCP:HTTP"
+                ],
+                "Url": "https://test1.extrahop.com/extrahop/#/metrics/devices/a74b9b6aa9e44de9baedcf8112c27ec4.fff40601150a0000/overview/",
+                "UserModTime": 1569284010207,
+                "Vendor": "Qumranet",
+                "Vlanid": 0
+            }
+        ]
+    }
+}
+
+
Human Readable Output
+

+

Device Activity Found

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Display NameIP AddressMAC AddressProtocols (Client)Protocols (Server)RoleVendorURL
soundboard2172.16.34.1111:2B:5B:27:12:9DTCP:SSL:LDAP, TCP:SSL, TCP:OTHER, UDP:NTP, UDP:DNSTCP:HTTPhttp_serverQumranet[View Device in ExtraHop](https://test1.extrahop.com/extrahop/#/metrics/devices/a74b9b6aa9e44de9baedcf8112c27ec4.fff40601150a0000/overview/)
+ +

+ +

11. Add or remove a tag from devices

+ +

Add or remove a tag from devices in ExtraHop.

+
Base Command
+

+ extrahop-tag-devices +

+
Required Permissions
+ +
Input
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ Argument Name + + Description + + Required +
tagThe case-sensitive value of the tag.Optional
addThe list of IP Addresses or ExtraHop API IDs of the devices to tag, comma separated.Optional
removeThe list of IP Addresses or ExtraHop API IDs of the devices to remove the tag from, comma separated.Optional
+ +

 

+
Context Output
+There are no context output for this command. +

 

+
Command Example
+

+ !extrahop-tag-devices tag='demisto' add=172.16.34.11 +

+ +
Human Readable Output
+

+

+Successful Modification +

+

+ +

12. Get a link to a Live Activity Map

+ +

Get a link to a visual activity map in ExtraHop.

+
Base Command
+

+ extrahop-get-activity-map +

+
Required Permissions
+ +
Input
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Argument Name + + Description + + Required +
ip_or_idThe IP Address or ExtraHop API ID of the source device to get an activity map.Required
time_intervalThe time interval of the live activity map, expressed as the "Last" 30 minutes. For example, specify a value of 30 minutes to get an activity map showing the time range of the last 30 minutes. This field is ignored if from_time and until_time are provided.Optional
from_timeThe beginning timestamp of a fixed time range the activity map will display, expressed in seconds since the epoch.Optional
until_timeThe ending timestamp of a fixed time range the activity map will display, expressed in seconds since the epoch.Optional
peer_roleThe role of the peer devices in relation to the source device. For example, specifying a peer_role of client will show All Clients communicating with the source device. Additionally specifying a protocol of HTTP will result in further filtering and only showing HTTP Clients communicating with the source device.Optional
protocolThe protocol over which the source device is communicating. For example, specifying a protocol of HTTP show only HTTP Clients and HTTP Servers communicating with the source device. Additionally specifying a peer_role of client will result in further filtering and only showing HTTP Clients communicating with the source device.Optional
+ +

 

+
Context Output
+ + + + + + + + + + + + + + + +
+ Path + + Type + + Description +
ExtraHop.ActivityMapstringb'The link to a visual activity map in ExtraHop.'
+ +

 

+
Command Example
+

+ !extrahop-get-activity-map ip_or_id=172.16.34.11 time_interval="6 hours" +

+
Context Example
+
+{
+    "ExtraHop": {
+        "ActivityMap": "https://test1.extrahop.com/extrahop/#/activitymaps?appliance_id=a74b9b6aa9e44de9baedcf8112c27ec4&discovery_id=fff40601150a0000&from=6&interval_type=HR&object_type=device&protocol=any&role=any&until=0"
+    }
+}
+
+
Human Readable Output
+

+

+[View Live Activity Map in ExtraHop](https://test1.extrahop.com/extrahop/#/activitymaps?appliance_id=a74b9b6aa9e44de9baedcf8112c27ec4&discovery_id=fff40601150a0000&from=6&interval_type=HR&object_type=device&protocol=any&role=any&until=0) +

+

+ +

13. Search for specific packets

+ +

Search for specific packets in ExtraHop.

+
Base Command
+

+ extrahop-search-packets +

+
Required Permissions
+ +
Input
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Argument Name + + Description + + Required +
outputThe output format. A pcap file, A keylog.txt file that can be loaded in wireshark to decode ssl packets, or a zip file containing both a packets.pcap and keylog.txt.Optional
limit_bytesThe maximum number of bytes to return.Optional
limit_search_durationThe maximum amount of time to run the packet search. The default unit is milliseconds, but other units can be specified with a unit suffix.Optional
query_fromThe beginning timestamp of the time range the search will include, expressed in milliseconds since the epoch. A negative value specifies that the search will begin with packets captured at a time in the past relative to the current time. For example, specify -10m to begin the search with packets captured 10 minutes before the time of the request. The default unit for a negative value is milliseconds, but other units can be specified with one of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- for more details on supported time units and suffixes.Required
query_untilThe ending timestamp of the time range the search will include, expressed in milliseconds since the epoch. A 0 value specifies that the search will end with packets captured at the time of the search. A negative value specifies that the search will end with packets captured at a time in the past relative to the current time. For example, specify -5m to end the search with packets captured 5 minutes before the time of the request. The default unit for a negative value is milliseconds, but other units can be specified with one of the following unit suffixes: ms, s, m, h, d, w, M, y. See https://docs.extrahop.com/current/rest-api-guide/#supported-time-units- for more details on supported time units and suffixes.Optional
bpfThe Berkeley Packet Filter (BPF) syntax for the packet search.Optional
ip1Returns packets sent to or received by the specified IP address.Optional
port1Returns packets sent from or received on the specified port.Optional
ip2Returns packets sent to or received by the specified IP address.Optional
port2Returns packets sent from or received on the specified port.Optional
+ +

 

+
Context Output
+There are no context output for this command. +

 

+
Command Example
+

+ !extrahop-search-packets ip1=172.16.34.23 port1=10057 ip2=172.16.34.11 port2=44576 +

+ +
Human Readable Output
+

+

+Uploaded file: extrahop 2019-09-23 16.59.01 to 17.29.01 PST.pcap +

+

+

Additional Information

+

Known Limitations

+

Troubleshooting

+

This integration was integrated and tested with version 7.8 of ExtraHop Reveal(x) and version 4.5 of Demisto. \ No newline at end of file diff --git a/Layouts/layout-close-ExtraHop_Detection.json b/Layouts/layout-close-ExtraHop_Detection.json new file mode 100644 index 000000000000..46137f77a664 --- /dev/null +++ b/Layouts/layout-close-ExtraHop_Detection.json @@ -0,0 +1,43 @@ +{ + "typeId": "ExtraHop Detection", + "kind": "close", + "layout": { + "id": "ExtraHop Detection", + "version": -1, + "modified": "2019-06-20T16:01:05.659574019-07:00", + "name": "", + "kind": "close", + "typeId": "ExtraHop Detection", + "system": false, + "sections": [ + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "name": "Basic Information", + "type": "", + "isVisible": true, + "readOnly": false, + "fields": [ + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_closereason", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_closenotes", + "isVisible": true + } + ], + "description": "", + "query": null, + "queryType": "" + } + ] + } +} diff --git a/Layouts/layout-close-ExtraHop_Detection_CHANGELOG.md b/Layouts/layout-close-ExtraHop_Detection_CHANGELOG.md new file mode 100644 index 000000000000..65db9ed960cc --- /dev/null +++ b/Layouts/layout-close-ExtraHop_Detection_CHANGELOG.md @@ -0,0 +1,2 @@ +## [Unreleased] +Added a layout for the **ExtraHop Detection** incident type. \ No newline at end of file diff --git a/Layouts/layout-details-ExtraHop_Detection.json b/Layouts/layout-details-ExtraHop_Detection.json new file mode 100644 index 000000000000..66cc96cdf0a0 --- /dev/null +++ b/Layouts/layout-details-ExtraHop_Detection.json @@ -0,0 +1,328 @@ +{ + "kind": "details", + "layout": { + "id": "ExtraHop Detection", + "kind": "details", + "modified": "2019-11-04T11:27:56.296067875-08:00", + "name": "", + "sections": [ + { + "description": "", + "fields": [ + { + "fieldId": "incident_type", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_severity", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_owner", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_dbotstatus", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_sourcebrand", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_sourceinstance", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_playbookid", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_phase", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_roles", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_category", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Basic Information", + "query": null, + "queryType": "", + "readOnly": false, + "type": "", + "version": 0 + }, + { + "description": "", + "fields": [ + { + "fieldId": "incident_extrahophostname", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionurl", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionticketed", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_occurred", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionendtime", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionupdatetime", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_riskscore", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionid", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Detection Details", + "query": null, + "queryType": "", + "readOnly": false, + "type": "", + "version": 0 + }, + { + "description": "", + "fields": [ + { + "fieldId": "incident_details", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Details", + "query": null, + "queryType": "", + "readOnly": true, + "type": "", + "version": 0 + }, + { + "description": "", + "fields": [ + { + "fieldId": "incident_participants", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Detection Participants", + "query": null, + "queryType": "", + "readOnly": false, + "type": "", + "version": 0 + }, + { + "description": "", + "fields": [], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Work Plan", + "query": null, + "queryType": "", + "readOnly": true, + "type": "workplan", + "version": 0 + }, + { + "description": "", + "fields": [], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Incident Files", + "query": { + "categories": [ + "attachments" + ], + "lastId": "", + "pageSize": 100, + "tags": [], + "users": [] + }, + "queryType": "warRoomFilter", + "readOnly": true, + "type": "invTimeline", + "version": 0 + }, + { + "description": "", + "fields": [], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Linked Incidents", + "query": null, + "queryType": "", + "readOnly": true, + "type": "linkedIncidents", + "version": 0 + }, + { + "description": "", + "fields": [ + { + "fieldId": "incident_dbotcreated", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_occurred", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_dbotduedate", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_dbotmodified", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_dbottotaltime", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Timeline Information", + "query": null, + "queryType": "", + "readOnly": false, + "type": "", + "version": 0 + }, + { + "description": "", + "fields": [], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Incident Timeline", + "query": { + "categories": [ + "incidentInfo" + ], + "lastId": "", + "pageSize": 100, + "tags": [], + "users": [] + }, + "queryType": "warRoomFilter", + "readOnly": true, + "type": "invTimeline", + "version": 0 + } + ], + "system": false, + "typeId": "ExtraHop Detection", + "version": -1 + }, + "typeId": "ExtraHop Detection" +} diff --git a/Layouts/layout-details-ExtraHop_Detection_CHANGELOG.md b/Layouts/layout-details-ExtraHop_Detection_CHANGELOG.md new file mode 100644 index 000000000000..65db9ed960cc --- /dev/null +++ b/Layouts/layout-details-ExtraHop_Detection_CHANGELOG.md @@ -0,0 +1,2 @@ +## [Unreleased] +Added a layout for the **ExtraHop Detection** incident type. \ No newline at end of file diff --git a/Layouts/layout-edit-ExtraHop_Detection.json b/Layouts/layout-edit-ExtraHop_Detection.json new file mode 100644 index 000000000000..9aa8a58d6b1e --- /dev/null +++ b/Layouts/layout-edit-ExtraHop_Detection.json @@ -0,0 +1,176 @@ +{ + "typeId": "ExtraHop Detection", + "kind": "edit", + "layout": { + "id": "ExtraHop Detection", + "version": -1, + "modified": "2019-06-21T10:21:39.764830083-07:00", + "name": "", + "kind": "edit", + "typeId": "ExtraHop Detection", + "system": false, + "sections": [ + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "name": "Basic Information", + "type": "", + "isVisible": true, + "readOnly": false, + "fields": [ + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_name", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_occurred", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_reminder", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_owner", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_roles", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_type", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_severity", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_playbookid", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_labels", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_phase", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_attachment", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_details", + "isVisible": true + } + ], + "description": "", + "query": null, + "queryType": "" + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "name": "Detection Details", + "type": "", + "isVisible": true, + "readOnly": false, + "fields": [ + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_extrahophostname", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_detectionurl", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_detectionid", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_riskscore", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_participants", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_detectionupdatetime", + "isVisible": true + }, + { + "id": "", + "version": 0, + "modified": "0001-01-01T00:00:00Z", + "fieldId": "incident_detectionendtime", + "isVisible": true + } + ], + "description": "", + "query": null, + "queryType": "" + } + ] + } +} diff --git a/Layouts/layout-edit-ExtraHop_Detection_CHANGELOG.md b/Layouts/layout-edit-ExtraHop_Detection_CHANGELOG.md new file mode 100644 index 000000000000..65db9ed960cc --- /dev/null +++ b/Layouts/layout-edit-ExtraHop_Detection_CHANGELOG.md @@ -0,0 +1,2 @@ +## [Unreleased] +Added a layout for the **ExtraHop Detection** incident type. \ No newline at end of file diff --git a/Layouts/layout-mobile-ExtraHop_Detection.json b/Layouts/layout-mobile-ExtraHop_Detection.json new file mode 100644 index 000000000000..5bc4b73f923e --- /dev/null +++ b/Layouts/layout-mobile-ExtraHop_Detection.json @@ -0,0 +1,260 @@ +{ + "kind": "mobile", + "layout": { + "id": "ExtraHop Detection", + "kind": "mobile", + "modified": "2019-08-29T16:20:17.8102986-07:00", + "name": "", + "sections": [ + { + "description": "", + "fields": [ + { + "fieldId": "incident_type", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_severity", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_owner", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_dbotstatus", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_sourcebrand", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_sourceinstance", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_playbookid", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_phase", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_roles", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_category", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Basic Information", + "query": null, + "queryType": "", + "readOnly": false, + "type": "", + "version": 0 + }, + { + "description": "", + "fields": [ + { + "fieldId": "incident_extrahophostname", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionurl", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionticketed", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_occurred", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionupdatetime", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionendtime", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_riskscore", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionid", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Detection Details", + "query": null, + "queryType": "", + "readOnly": false, + "type": "", + "version": 0 + }, + { + "description": "", + "fields": [ + { + "fieldId": "incident_details", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Details", + "query": null, + "queryType": "", + "readOnly": true, + "type": "", + "version": 0 + }, + { + "description": "", + "fields": [ + { + "fieldId": "incident_dbotcreated", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_occurred", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_dbotduedate", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_dbotmodified", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_dbottotaltime", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Timeline Information", + "query": null, + "queryType": "", + "readOnly": false, + "type": "", + "version": 0 + }, + { + "description": "", + "fields": [ + { + "fieldId": "incident_labels", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Labels", + "query": null, + "queryType": "", + "readOnly": true, + "type": "labels", + "version": 0 + } + ], + "system": false, + "typeId": "ExtraHop Detection", + "version": -1 + }, + "typeId": "ExtraHop Detection" +} diff --git a/Layouts/layout-mobile-ExtraHop_Detection_CHANGELOG.md b/Layouts/layout-mobile-ExtraHop_Detection_CHANGELOG.md new file mode 100644 index 000000000000..65db9ed960cc --- /dev/null +++ b/Layouts/layout-mobile-ExtraHop_Detection_CHANGELOG.md @@ -0,0 +1,2 @@ +## [Unreleased] +Added a layout for the **ExtraHop Detection** incident type. \ No newline at end of file diff --git a/Layouts/layout-quickView-ExtraHop_Detection.json b/Layouts/layout-quickView-ExtraHop_Detection.json new file mode 100644 index 000000000000..993a850f95cf --- /dev/null +++ b/Layouts/layout-quickView-ExtraHop_Detection.json @@ -0,0 +1,281 @@ +{ + "kind": "quickView", + "layout": { + "id": "ExtraHop Detection", + "kind": "quickView", + "modified": "2019-08-29T16:19:59.288492914-07:00", + "name": "", + "sections": [ + { + "description": "", + "fields": [ + { + "fieldId": "incident_type", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_severity", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_owner", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_dbotstatus", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_sourcebrand", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_sourceinstance", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_playbookid", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_phase", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_roles", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_category", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Basic Information", + "query": null, + "queryType": "", + "readOnly": false, + "type": "", + "version": 0 + }, + { + "description": "", + "fields": [ + { + "fieldId": "incident_extrahophostname", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionurl", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionticketed", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_occurred", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionupdatetime", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionendtime", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_riskscore", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_detectionid", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Detection Details", + "query": null, + "queryType": "", + "readOnly": false, + "type": "", + "version": 0 + }, + { + "description": "", + "fields": [ + { + "fieldId": "incident_details", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Details", + "query": null, + "queryType": "", + "readOnly": true, + "type": "", + "version": 0 + }, + { + "description": "", + "fields": [ + { + "fieldId": "incident_participants", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Detection Participants", + "query": null, + "queryType": "", + "readOnly": false, + "type": "", + "version": 0 + }, + { + "description": "", + "fields": [ + { + "fieldId": "incident_dbotcreated", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_occurred", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_dbotduedate", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_dbotmodified", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + }, + { + "fieldId": "incident_dbottotaltime", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Timeline Information", + "query": null, + "queryType": "", + "readOnly": false, + "type": "", + "version": 0 + }, + { + "description": "", + "fields": [ + { + "fieldId": "incident_labels", + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "version": 0 + } + ], + "id": "", + "isVisible": true, + "modified": "0001-01-01T00:00:00Z", + "name": "Labels", + "query": null, + "queryType": "", + "readOnly": true, + "type": "labels", + "version": 0 + } + ], + "system": false, + "typeId": "ExtraHop Detection", + "version": -1 + }, + "typeId": "ExtraHop Detection" +} diff --git a/Layouts/layout-quickView-ExtraHop_Detection_CHANGELOG.md b/Layouts/layout-quickView-ExtraHop_Detection_CHANGELOG.md new file mode 100644 index 000000000000..65db9ed960cc --- /dev/null +++ b/Layouts/layout-quickView-ExtraHop_Detection_CHANGELOG.md @@ -0,0 +1,2 @@ +## [Unreleased] +Added a layout for the **ExtraHop Detection** incident type. \ No newline at end of file diff --git a/Playbooks/playbook-Endpoint_Enrichment_-_Generic_v2.1.yml b/Playbooks/playbook-Endpoint_Enrichment_-_Generic_v2.1.yml index 5705414f79ec..fd0920ce718b 100644 --- a/Playbooks/playbook-Endpoint_Enrichment_-_Generic_v2.1.yml +++ b/Playbooks/playbook-Endpoint_Enrichment_-_Generic_v2.1.yml @@ -10,6 +10,7 @@ description: |- - Carbon Black Enterprise Response v2 - Cylance Protect v2 - CrowdStrike Falcon Host + - ExtraHop Reveal(x) starttaskid: "0" tasks: "0": @@ -55,11 +56,12 @@ tasks: - "18" - "19" - "20" + - "30" separatecontext: false view: |- { "position": { - "x": 1060, + "x": 1280, "y": 440 } } @@ -75,7 +77,6 @@ tasks: version: -1 name: Is McAfee ePolicy Orchestrator enabled? description: Checks if there is an active instance of the McAfee ePolicy Orchestrator integration enabled. - integration enabled. scriptName: Exists type: condition iscommand: false @@ -349,8 +350,8 @@ tasks: view: |- { "position": { - "x": 1740, - "y": 750 + "x": 2150, + "y": 770 } } note: false @@ -453,7 +454,7 @@ tasks: view: |- { "position": { - "x": 1740, + "x": 2150, "y": 605 } } @@ -656,8 +657,8 @@ tasks: view: |- { "position": { - "x": 1740, - "y": 1086 + "x": 2250, + "y": 1070 } } note: false @@ -694,8 +695,8 @@ tasks: view: |- { "position": { - "x": 1930, - "y": 1260 + "x": 2250, + "y": 1220 } } note: false @@ -703,10 +704,10 @@ tasks: ignoreworker: false "29": id: "29" - taskid: 477738d4-3629-410f-86bb-84181caeacd2 + taskid: 9681a79e-1d5e-462c-8e65-ec0bfe1bb7d8 type: regular task: - id: 477738d4-3629-410f-86bb-84181caeacd2 + id: 9681a79e-1d5e-462c-8e65-ec0bfe1bb7d8 version: -1 name: Get host information from Crowdstrike Falcon Host description: Gets details for one or more devices, according to device ID. @@ -728,8 +729,131 @@ tasks: view: |- { "position": { - "x": 2080, - "y": 1460 + "x": 2460, + "y": 1440 + } + } + note: false + timertriggers: [] + ignoreworker: false + "30": + id: "30" + taskid: ec344482-77f7-42b5-8ee4-34317afd1179 + type: title + task: + id: ec344482-77f7-42b5-8ee4-34317afd1179 + version: -1 + name: ExtraHop Reveal(x) + description: "" + type: title + iscommand: false + brand: "" + nexttasks: + '#none#': + - "31" + separatecontext: false + view: |- + { + "position": { + "x": 1710, + "y": 605 + } + } + note: false + timertriggers: [] + ignoreworker: false + "31": + id: "31" + taskid: 58c8b4be-657c-45f6-8eca-5a01da85f1f3 + type: condition + task: + id: 58c8b4be-657c-45f6-8eca-5a01da85f1f3 + version: -1 + name: Is ExtraHop Reveal(x) enabled? + description: Checks if there is an active instance of the ExtraHop Reveal(x) + integration enabled. + scriptName: Exists + type: condition + iscommand: false + brand: "" + nexttasks: + '#default#': + - "4" + "yes": + - "32" + scriptarguments: + value: + complex: + root: modules + filters: + - - operator: isEqualString + left: + value: + simple: brand + iscontext: true + right: + value: + simple: ExtraHop v2 + - - operator: isEqualString + left: + value: + simple: state + iscontext: true + right: + value: + simple: active + reputationcalc: 1 + separatecontext: false + view: |- + { + "position": { + "x": 1710, + "y": 770 + } + } + note: false + timertriggers: [] + ignoreworker: false + "32": + id: "32" + taskid: 344e1330-e5f8-4292-83df-7a4fba147ebf + type: regular + task: + id: 344e1330-e5f8-4292-83df-7a4fba147ebf + version: -1 + name: Get host information from ExtraHop Reveal(x) + description: Get host information from ExtraHop Reveal(x). + script: '|||extrahop-device-search' + type: regular + iscommand: true + brand: "" + nexttasks: + '#none#': + - "4" + scriptarguments: + active_from: {} + active_until: {} + activity: {} + discover_time: {} + ip: {} + l3_only: {} + limit: {} + mac: {} + match_type: {} + name: + simple: ${inputs.Hostname} + operator: {} + role: {} + software: {} + tag: {} + vendor: {} + vlan: {} + separatecontext: false + view: |- + { + "position": { + "x": 1730, + "y": 1086 } } note: false @@ -742,10 +866,12 @@ view: |- "10_4_#default#": 0.1, "22_23_yes": 0.54, "22_4_#default#": 0.15, - "28_29_yes": 0.5, + "28_29_yes": 0.4, "28_4_#default#": 0.1, "2_4_#default#": 0.21, "2_5_yes": 0.64, + "31_32_yes": 0.64, + "31_4_#default#": 0.1, "3_1_yes": 0.3, "3_24_yes": 0.41, "3_4_#default#": 0.12, @@ -755,7 +881,7 @@ view: |- "paper": { "dimensions": { "height": 1645, - "width": 3076, + "width": 3456, "x": -616, "y": 50 } @@ -792,5 +918,85 @@ outputs: description: The device information about the hostname that was enriched using Cylance Protect v2. type: unknown +- contextPath: ExtraHop.Device.Macaddr + description: The MAC Address of the device. + type: String +- contextPath: ExtraHop.Device.DeviceClass + description: The class of the device. + type: String +- contextPath: ExtraHop.Device.UserModTime + description: The time of the most recent update, expressed in milliseconds since + the epoch. + type: Number +- contextPath: ExtraHop.Device.AutoRole + description: The role automatically detected by the ExtraHop. + type: String +- contextPath: ExtraHop.Device.ParentId + description: The ID of the parent device. + type: Number +- contextPath: ExtraHop.Device.Vendor + description: The device vendor. + type: String +- contextPath: ExtraHop.Device.Analysis + description: The level of analysis preformed on the device. + type: string +- contextPath: ExtraHop.Device.DiscoveryId + description: The UUID given by the Discover appliance. + type: String +- contextPath: ExtraHop.Device.DefaultName + description: The default name of the device. + type: String +- contextPath: ExtraHop.Device.DisplayName + description: The display name of device. + type: String +- contextPath: ExtraHop.Device.OnWatchlist + description: Whether the device is on the advanced analysis whitelist. + type: Boolean +- contextPath: ExtraHop.Device.ModTime + description: The time of the most recent update, expressed in milliseconds since + the epoch. + type: Number +- contextPath: ExtraHop.Device.IsL3 + description: Indicates whether the device is a Layer 3 device. + type: Boolean +- contextPath: ExtraHop.Device.Role + description: The role of the device. + type: String +- contextPath: ExtraHop.Device.DiscoverTime + description: The time that the device was discovered. + type: Number +- contextPath: ExtraHop.Device.Id + description: The ID of the device. + type: Number +- contextPath: ExtraHop.Device.Ipaddr4 + description: The IPv4 address of the device. + type: String +- contextPath: ExtraHop.Device.Vlanid + description: The ID of VLan. + type: Number +- contextPath: ExtraHop.Device.Ipaddr6 + description: The IPv6 address of the device. + type: string +- contextPath: ExtraHop.Device.NodeId + description: The Node ID of the Discover appliance. + type: number +- contextPath: ExtraHop.Device.Description + description: A user customizable description of the device. + type: string +- contextPath: ExtraHop.Device.DnsName + description: The DNS name associated with the device. + type: string +- contextPath: ExtraHop.Device.DhcpName + description: The DHCP name associated with the device. + type: string +- contextPath: ExtraHop.Device.CdpName + description: The Cisco Discovery Protocol name associated with the device. + type: string +- contextPath: ExtraHop.Device.NetbiosName + description: The NetBIOS name associated with the device. + type: string +- contextPath: ExtraHop.Device.Url + description: Link to the device details page in ExtraHop. + type: string tests: - Endpoint Enrichment - Generic v2.1 - Test diff --git a/Playbooks/playbook-Endpoint_Enrichment_-_Generic_v2.1_CHANGELOG.md b/Playbooks/playbook-Endpoint_Enrichment_-_Generic_v2.1_CHANGELOG.md new file mode 100644 index 000000000000..d692a8812fa9 --- /dev/null +++ b/Playbooks/playbook-Endpoint_Enrichment_-_Generic_v2.1_CHANGELOG.md @@ -0,0 +1,2 @@ +## [Unreleased] +Added ExtraHop Reveal(x) as a supported integration to enrich an endpoint by hostname. \ No newline at end of file diff --git a/Playbooks/playbook-ExtraHop_-_CVE-2019-0708_(BlueKeep).yml b/Playbooks/playbook-ExtraHop_-_CVE-2019-0708_(BlueKeep).yml new file mode 100644 index 000000000000..c67fd8c6d917 --- /dev/null +++ b/Playbooks/playbook-ExtraHop_-_CVE-2019-0708_(BlueKeep).yml @@ -0,0 +1,676 @@ +id: ExtraHop - CVE-2019-0708 (BlueKeep) +version: -1 +fromversion: 4.5.0 +name: ExtraHop - CVE-2019-0708 (BlueKeep) +description: |- + This server received a Remote Desktop Protocol (RDP) connection request that is consistent with a known vulnerability, also known as BlueKeep, in older versions of Microsoft Windows. This vulnerability allows an unauthenticated attacker to remotely run arbitrary code on an RDP server. The attacker can then tamper with data or install malware that could propagate to other Windows devices across the network. Investigate to determine if this server is hosting a version affected by CVE-2019-0708: Windows 7, Windows XP, Windows Vista, Windows Server 2003, and Windows Server 2008. + + MITIGATION OPTIONS + - Disable Remote Desktop Services if they are not required + - Implement Network Level Authentication (NLA) on systems running supported versions of Windows 7, Windows Server 2008, and Windows Server 2008 R2 + - Configure firewalls to block traffic on TCP port 3389 +starttaskid: "0" +tasks: + "0": + id: "0" + taskid: 44709a0e-a454-49dc-86dc-07bc12acf25d + type: start + task: + id: 44709a0e-a454-49dc-86dc-07bc12acf25d + version: -1 + name: "" + description: "" + iscommand: false + brand: "" + nexttasks: + '#none#': + - "15" + separatecontext: false + view: |- + { + "position": { + "x": -10, + "y": -460 + } + } + note: false + timertriggers: [] + ignoreworker: false + "2": + id: "2" + taskid: afa75cf0-4935-4b71-8816-585d782d18a8 + type: title + task: + id: afa75cf0-4935-4b71-8816-585d782d18a8 + version: -1 + name: Done + description: "" + type: title + iscommand: false + brand: "" + separatecontext: false + view: |- + { + "position": { + "x": -10, + "y": 790 + } + } + note: false + timertriggers: [] + ignoreworker: false + "15": + id: "15" + taskid: 2700d930-33f2-439b-8782-cdeb704eceed + type: condition + task: + id: 2700d930-33f2-439b-8782-cdeb704eceed + version: -1 + name: Is ExtraHop Reveal(x) enabled? + description: Checks if there is an active instance of the ExtraHop Reveal(x) + integration enabled. + scriptName: Exists + type: condition + iscommand: false + brand: "" + nexttasks: + '#default#': + - "2" + "yes": + - "16" + scriptarguments: + value: + complex: + root: modules + filters: + - - operator: isEqualString + left: + value: + simple: brand + iscontext: true + right: + value: + simple: ExtraHop v2 + - - operator: isEqualString + left: + value: + simple: state + iscontext: true + right: + value: + simple: active + separatecontext: false + view: |- + { + "position": { + "x": -10, + "y": -320 + } + } + note: false + timertriggers: [] + ignoreworker: false + "16": + id: "16" + taskid: 1b3cd97e-fed5-406e-8574-61224e3df17b + type: regular + task: + id: 1b3cd97e-fed5-406e-8574-61224e3df17b + version: -1 + name: Run CVE search for BlueKeep vulnerability + description: Search CVE by ID. + script: CVE Search|||cve-search + type: regular + iscommand: true + brand: CVE Search + nexttasks: + '#none#': + - "17" + - "24" + scriptarguments: + cveId: + simple: CVE-2019-0708 + continueonerror: true + separatecontext: false + view: |- + { + "position": { + "x": 210, + "y": -120 + } + } + note: false + timertriggers: [] + ignoreworker: false + "17": + id: "17" + taskid: 237c1ad2-3e95-4c44-8442-6c5d70ba2e7c + type: playbook + task: + id: 237c1ad2-3e95-4c44-8442-6c5d70ba2e7c + version: -1 + name: ExtraHop - Get Peers by Host + description: Given a host, the playbook will retrieve the peer network devices + that communicated with that host in a given time range. In addition to a + list of peers and protocols (sorted by bytes) the playbook returns a link + to the ExtraHop Live Activity Map to visualize the peer relationships. + playbookName: ExtraHop - Get Peers by Host + type: playbook + iscommand: false + brand: "" + nexttasks: + '#none#': + - "21" + scriptarguments: + from_time: + complex: + root: incident + accessor: occurred + transformers: + - operator: toUnix + - operator: subtraction + args: + by: + value: + simple: "1800" + ip: + complex: + root: incident + accessor: participants + transformers: + - operator: WhereFieldEquals + args: + equalTo: + value: + simple: victim + field: + value: + simple: role + getField: + value: + simple: ipaddress + mac: + complex: + root: incident + accessor: participants + transformers: + - operator: WhereFieldEquals + args: + equalTo: + value: + simple: victim + field: + value: + simple: role + getField: + value: + simple: macaddress + name: + complex: + root: incident + accessor: participants + transformers: + - operator: WhereFieldEquals + args: + equalTo: + value: + simple: victim + field: + value: + simple: role + getField: + value: + simple: dnsname + until_time: + complex: + root: incident + accessor: occurred + transformers: + - operator: toUnix + - operator: addition + args: + by: + value: + simple: "1800" + separatecontext: true + loop: + iscommand: false + exitCondition: "" + wait: 1 + view: |- + { + "position": { + "x": 210, + "y": 50 + } + } + note: false + timertriggers: [] + ignoreworker: false + "19": + id: "19" + taskid: 0fa6c81c-87a3-476f-80d7-dc4171df2ac3 + type: condition + task: + id: 0fa6c81c-87a3-476f-80d7-dc4171df2ac3 + version: -1 + name: Email team to block offender IP address + description: Ask ExtraHop analysts whether or not to automatically block the + offender IP address. + type: condition + iscommand: false + brand: "" + nexttasks: + '#default#': + - "20" + "Yes": + - "23" + separatecontext: false + view: |- + { + "position": { + "x": 620, + "y": 410 + } + } + note: false + timertriggers: [] + ignoreworker: false + message: + to: + simple: ExtraHop + subject: + simple: CVE-2019-0708 RDP Exploit Attempt - Block Offender IP? + body: + complex: + root: incident + accessor: participants + transformers: + - operator: WhereFieldEquals + args: + equalTo: + value: + simple: offender + field: + value: + simple: role + getField: + value: + simple: ipaddress + methods: + - email + format: "" + bcc: null + cc: null + timings: + retriescount: 2 + retriesinterval: 360 + completeafterreplies: 1 + replyOptions: + - "Yes" + - "No" + "20": + id: "20" + taskid: 0539b3a2-867d-4d0f-8074-028dfb73c781 + type: regular + task: + id: 0539b3a2-867d-4d0f-8074-028dfb73c781 + version: -1 + name: Guided investigation steps and mitigation options + description: |- + Investigate to determine if the victim server is hosting a version affected by CVE-2019-0708: Windows 7, Windows XP, Windows Vista, Windows Server 2003, and Windows Server 2008. + + Mitigation Options + - Disable Remote Desktop Services if they are not required + - Implement Network Level Authentication (NLA) on systems running supported versions of Windows 7, Windows Server 2008, and Windows Server 2008 R2 + - Configure firewalls to block traffic on TCP port 3389 + type: regular + iscommand: false + brand: "" + nexttasks: + '#none#': + - "2" + separatecontext: false + view: |- + { + "position": { + "x": 210, + "y": 590 + } + } + note: false + timertriggers: [] + ignoreworker: false + "21": + id: "21" + taskid: f123a474-b51e-4bc5-830f-b6308fc70937 + type: regular + task: + id: f123a474-b51e-4bc5-830f-b6308fc70937 + version: -1 + name: Get associated transaction records from ExtraHop Reveal(x) + description: Query records associated with this detection from ExtraHop. + script: '|||extrahop-query-records' + type: regular + iscommand: true + brand: "" + nexttasks: + '#none#': + - "22" + scriptarguments: + field1: + simple: clientAddr + field2: + simple: serverAddr + limit: {} + match_type: {} + offset: {} + operator1: + simple: '=' + operator2: + simple: '=' + query_from: + complex: + root: incident + accessor: occurred + transformers: + - operator: toUnix + - operator: multiply + args: + by: + value: + simple: "1000" + query_until: + complex: + root: incident + accessor: occurred + transformers: + - operator: toUnix + - operator: addition + args: + by: + value: + simple: "2" + - operator: multiply + args: + by: + value: + simple: "1000" + types: + simple: rdp_close,rdp_tick + value1: + complex: + root: incident + accessor: participants + transformers: + - operator: WhereFieldEquals + args: + equalTo: + value: + simple: offender + field: + value: + simple: role + getField: + value: + simple: ipaddress + value2: + complex: + root: incident + accessor: participants + transformers: + - operator: WhereFieldEquals + args: + equalTo: + value: + simple: victim + field: + value: + simple: role + getField: + value: + simple: ipaddress + continueonerror: true + separatecontext: false + view: |- + { + "position": { + "x": 210, + "y": 230 + } + } + note: false + timertriggers: [] + ignoreworker: false + "22": + id: "22" + taskid: 6b73a498-5e96-4479-86ec-7a09799e5892 + type: regular + task: + id: 6b73a498-5e96-4479-86ec-7a09799e5892 + version: -1 + name: Get associated PCAP file from ExtraHop Reveal(x) + description: Search for the specific packets associated with this detection + in ExtraHop and return the pcap file. + script: '|||extrahop-search-packets' + type: regular + iscommand: true + brand: "" + nexttasks: + '#none#': + - "20" + scriptarguments: + bpf: {} + ip1: + complex: + root: incident + accessor: participants + transformers: + - operator: WhereFieldEquals + args: + equalTo: + value: + simple: offender + field: + value: + simple: role + getField: + value: + simple: ipaddress + ip2: + complex: + root: incident + accessor: participants + transformers: + - operator: WhereFieldEquals + args: + equalTo: + value: + simple: victim + field: + value: + simple: role + getField: + value: + simple: ipaddress + limit_bytes: {} + limit_search_duration: {} + output: {} + port1: {} + port2: + simple: "3389" + query_from: + complex: + root: incident + accessor: occurred + transformers: + - operator: toUnix + - operator: multiply + args: + by: + value: + simple: "1000" + query_until: + complex: + root: incident + accessor: occurred + transformers: + - operator: toUnix + - operator: addition + args: + by: + value: + simple: "2" + - operator: multiply + args: + by: + value: + simple: "1000" + continueonerror: true + separatecontext: false + view: |- + { + "position": { + "x": 210, + "y": 410 + } + } + note: false + timertriggers: [] + ignoreworker: false + "23": + id: "23" + taskid: 5892b97f-fcb0-48ef-843a-dfbbf0a5beb8 + type: playbook + task: + id: 5892b97f-fcb0-48ef-843a-dfbbf0a5beb8 + version: -1 + name: Block IP - Generic v2 + description: |- + This playbook blocks malicious IPs using all integrations that you have enabled. + + Supported integrations for this playbook: + * Check Point Firewall + * Palo Alto Networks Minemeld + * Palo Alto Networks PAN-OS + * Zscaler + playbookName: Block IP - Generic v2 + type: playbook + iscommand: false + brand: "" + nexttasks: + '#none#': + - "2" + scriptarguments: + IP: + complex: + root: incident + accessor: participants + transformers: + - operator: WhereFieldEquals + args: + equalTo: + value: + simple: offender + field: + value: + simple: role + getField: + value: + simple: ipaddress + IPBlacklistMiner: {} + separatecontext: true + loop: + iscommand: false + exitCondition: "" + wait: 1 + view: |- + { + "position": { + "x": 840, + "y": 590 + } + } + note: false + timertriggers: [] + ignoreworker: false + "24": + id: "24" + taskid: b400891d-eb98-40b6-898d-89e7d4a32e38 + type: condition + task: + id: b400891d-eb98-40b6-898d-89e7d4a32e38 + version: -1 + name: Automatically block the offender IP address? + description: Check the playbook inputs to see if automatically blocking the + offender IP address is desired. + type: condition + iscommand: false + brand: "" + nexttasks: + '#default#': + - "19" + "yes": + - "23" + separatecontext: false + conditions: + - label: "yes" + condition: + - - operator: isEqualString + left: + value: + simple: inputs.AutoBlockIp + iscontext: true + right: + value: + simple: "True" + view: |- + { + "position": { + "x": 620, + "y": 50 + } + } + note: false + timertriggers: [] + ignoreworker: false +view: |- + { + "linkLabelsPosition": { + "15_2_#default#": 0.12, + "19_20_#default#": 0.33, + "19_23_Yes": 0.57, + "24_19_#default#": 0.55 + }, + "paper": { + "dimensions": { + "height": 1315, + "width": 1230, + "x": -10, + "y": -460 + } + } + } +inputs: +- key: AutoBlockIp + value: + simple: "False" + required: false + description: |- + Enable the "Block IP" capability automatically (can be either "True" or "False"). + The "Block IP" sub-playbook will block the offender IP address in the relevant integrations. +outputs: +- contextPath: CVE + description: Details on the CVE. + type: unknown +- contextPath: ExtraHop.Device + description: 'Details on the host and any peer devices found. ' + type: unknown +- contextPath: ExtraHop.ActivityMap + description: The link to a visual activity map in ExtraHop. + type: string +- contextPath: ExtraHop.Record.Source + description: Associated transaction records from ExtraHop. + type: unknown +tests: +- ExtraHop_v2-Test \ No newline at end of file diff --git a/Playbooks/playbook-ExtraHop_-_Default.yml b/Playbooks/playbook-ExtraHop_-_Default.yml new file mode 100644 index 000000000000..c956dae88a01 --- /dev/null +++ b/Playbooks/playbook-ExtraHop_-_Default.yml @@ -0,0 +1,333 @@ +id: ExtraHop - Default +version: -1 +fromversion: 4.5.0 +name: ExtraHop - Default +description: Default playbook to run for all ExtraHop Detection incidents. This playbook + handles ticket tracking as well as triggering specific playbooks based on the name + of the ExtraHop Detection. +starttaskid: "0" +tasks: + "0": + id: "0" + taskid: e05c49e8-d5fc-49cc-8e4f-febae049f470 + type: start + task: + id: e05c49e8-d5fc-49cc-8e4f-febae049f470 + version: -1 + name: "" + description: "" + iscommand: false + brand: "" + nexttasks: + '#none#': + - "15" + separatecontext: false + view: |- + { + "position": { + "x": 50, + "y": 50 + } + } + note: false + timertriggers: [] + ignoreworker: false + "2": + id: "2" + taskid: aacb39b5-ff6b-405e-8891-e03e73e4b101 + type: title + task: + id: aacb39b5-ff6b-405e-8891-e03e73e4b101 + version: -1 + name: Done + description: "" + type: title + iscommand: false + brand: "" + separatecontext: false + view: |- + { + "position": { + "x": 50, + "y": 920 + } + } + note: false + timertriggers: [] + ignoreworker: false + "15": + id: "15" + taskid: c46704ba-c334-4b3b-887f-fa1dd8339fd0 + type: condition + task: + id: c46704ba-c334-4b3b-887f-fa1dd8339fd0 + version: -1 + name: Is ExtraHop Reveal(x) enabled? + description: Checks if there is an active instance of the ExtraHop Reveal(x) + integration enabled. + scriptName: Exists + type: condition + iscommand: false + brand: "" + nexttasks: + '#default#': + - "2" + "yes": + - "18" + - "19" + scriptarguments: + value: + complex: + root: modules + filters: + - - operator: isEqualString + left: + value: + simple: brand + iscontext: true + right: + value: + simple: ExtraHop v2 + - - operator: isEqualString + left: + value: + simple: state + iscontext: true + right: + value: + simple: active + separatecontext: false + view: |- + { + "position": { + "x": 50, + "y": 195 + } + } + note: false + timertriggers: [] + ignoreworker: false + "16": + id: "16" + taskid: b24f8753-bb48-4a77-8b97-a33ed472cd05 + type: playbook + task: + id: b24f8753-bb48-4a77-8b97-a33ed472cd05 + version: -1 + name: ExtraHop - Ticket Tracking + description: Links the Demisto incident back to the ExtraHop detection that + created it for ticket tracking purposes. + playbookName: ExtraHop - Ticket Tracking + type: playbook + iscommand: false + brand: "" + nexttasks: + '#none#': + - "17" + separatecontext: true + loop: + iscommand: false + exitCondition: "" + wait: 1 + view: |- + { + "position": { + "x": 280, + "y": 500 + } + } + note: false + timertriggers: [] + ignoreworker: false + "17": + id: "17" + taskid: a67d8b24-4516-46c0-85a0-3fd3cf7c2279 + type: regular + task: + id: a67d8b24-4516-46c0-85a0-3fd3cf7c2279 + version: -1 + name: Add initial investigation notes + description: This task is for the ExtraHop analyst to enter notes on the ExtraHop + Detection that created this Incident. Used as a method of initial investigation + and tracking notes within the Work Plan. + type: regular + iscommand: false + brand: "" + nexttasks: + '#none#': + - "2" + separatecontext: false + view: |- + { + "position": { + "x": 280, + "y": 685 + } + } + note: false + timertriggers: [] + ignoreworker: false + "18": + id: "18" + taskid: 03bac09d-d03d-45d5-86f1-4209973b4a4d + type: title + task: + id: 03bac09d-d03d-45d5-86f1-4209973b4a4d + version: -1 + name: Detection Playbooks + description: Check whether the values provided in arguments are equal. If either + of the arguments are missing, no is returned. + type: title + iscommand: false + brand: "" + nexttasks: + '#none#': + - "20" + separatecontext: false + view: |- + { + "position": { + "x": -180, + "y": 370 + } + } + note: false + timertriggers: [] + ignoreworker: false + "19": + id: "19" + taskid: f4749919-007f-47da-85ce-4428c0000d64 + type: title + task: + id: f4749919-007f-47da-85ce-4428c0000d64 + version: -1 + name: Ticket Tracking + description: "" + type: title + iscommand: false + brand: "" + nexttasks: + '#none#': + - "16" + separatecontext: false + view: |- + { + "position": { + "x": 280, + "y": 370 + } + } + note: false + timertriggers: [] + ignoreworker: false + "20": + id: "20" + taskid: 7a4202c3-81a2-4275-8ceb-474fa9f90a39 + type: condition + task: + id: 7a4202c3-81a2-4275-8ceb-474fa9f90a39 + version: -1 + name: Does the detection have a playbook? + description: Check if the incoming detection has a specific playbook to run. + type: condition + iscommand: false + brand: "" + nexttasks: + '#default#': + - "2" + BlueKeep: + - "21" + separatecontext: false + conditions: + - label: BlueKeep + condition: + - - operator: containsString + left: + value: + simple: incident.name + iscontext: true + right: + value: + simple: CVE-2019-0708 + view: |- + { + "position": { + "x": -180, + "y": 500 + } + } + note: false + timertriggers: [] + ignoreworker: false + "21": + id: "21" + taskid: ecbb3f9e-7e2b-4497-800d-b13e7dfcb858 + type: playbook + task: + id: ecbb3f9e-7e2b-4497-800d-b13e7dfcb858 + version: -1 + name: ExtraHop - CVE-2019-0708 (BlueKeep) + description: |- + This server received a Remote Desktop Protocol (RDP) connection request that is consistent with a known vulnerability, also known as BlueKeep, in older versions of Microsoft Windows. This vulnerability allows an unauthenticated attacker to remotely run arbitrary code on an RDP server. The attacker can then tamper with data or install malware that could propagate to other Windows devices across the network. Investigate to determine if this server is hosting a version affected by CVE-2019-0708: Windows 7, Windows XP, Windows Vista, Windows Server 2003, and Windows Server 2008. + + MITIGATION OPTIONS + - Disable Remote Desktop Services if they are not required + - Implement Network Level Authentication (NLA) on systems running supported versions of Windows 7, Windows Server 2008, and Windows Server 2008 R2 + - Configure firewalls to block traffic on TCP port 3389 + playbookName: ExtraHop - CVE-2019-0708 (BlueKeep) + type: playbook + iscommand: false + brand: "" + nexttasks: + '#none#': + - "2" + scriptarguments: + AutoBlockIp: + simple: "False" + separatecontext: true + loop: + iscommand: false + exitCondition: "" + wait: 1 + view: |- + { + "position": { + "x": -290, + "y": 730 + } + } + note: false + timertriggers: [] + ignoreworker: false +view: |- + { + "linkLabelsPosition": { + "15_2_#default#": 0.18, + "20_21_BlueKeep": 0.44, + "20_2_#default#": 0.19 + }, + "paper": { + "dimensions": { + "height": 935, + "width": 950, + "x": -290, + "y": 50 + } + } + } +inputs: [] +outputs: +- contextPath: CVE + description: Details on the CVE. + type: unknown +- contextPath: ExtraHop.Device + description: 'Details on the host and any peer devices found. ' + type: unknown +- contextPath: ExtraHop.ActivityMap + description: The link to a visual activity map in ExtraHop. + type: string +- contextPath: ExtraHop.Record.Source + description: Associated transaction records from ExtraHop. + type: unknown +tests: +- ExtraHop_v2-Test \ No newline at end of file diff --git a/Playbooks/playbook-ExtraHop_-_Get_Peers_by_Host.yml b/Playbooks/playbook-ExtraHop_-_Get_Peers_by_Host.yml new file mode 100644 index 000000000000..9a76fdf05c6b --- /dev/null +++ b/Playbooks/playbook-ExtraHop_-_Get_Peers_by_Host.yml @@ -0,0 +1,414 @@ +id: ExtraHop - Get Peers by Host +version: -1 +fromversion: 4.5.0 +name: ExtraHop - Get Peers by Host +description: Given a host, the playbook will retrieve the peer network devices that + communicated with that host in a given time range. In addition to a list of peers + and protocols (sorted by bytes) the playbook returns a link to the ExtraHop Live + Activity Map to visualize the peer relationships. +starttaskid: "0" +tasks: + "0": + id: "0" + taskid: bf60ce0f-ce07-4119-8d54-0ce64f1a0e00 + type: start + task: + id: bf60ce0f-ce07-4119-8d54-0ce64f1a0e00 + version: -1 + name: "" + description: "" + iscommand: false + brand: "" + nexttasks: + '#none#': + - "15" + separatecontext: false + view: |- + { + "position": { + "x": 50, + "y": 50 + } + } + note: false + timertriggers: [] + ignoreworker: false + "2": + id: "2" + taskid: 2fbd50da-8e6e-4b1a-8b1f-5cf90cebc303 + type: title + task: + id: 2fbd50da-8e6e-4b1a-8b1f-5cf90cebc303 + version: -1 + name: Done + description: "" + type: title + iscommand: false + brand: "" + separatecontext: false + view: |- + { + "position": { + "x": 70, + "y": 1220 + } + } + note: false + timertriggers: [] + ignoreworker: false + "3": + id: "3" + taskid: cf740c00-0812-4696-8dc1-33877ccf12d5 + type: regular + task: + id: cf740c00-0812-4696-8dc1-33877ccf12d5 + version: -1 + name: Search for peer devices in ExtraHop Reveal(x) + description: Get the list of all of the peers that communicated with the given + host in the specified time range. + script: '|||extrahop-get-peers' + type: regular + iscommand: true + brand: "" + nexttasks: + '#none#': + - "2" + scriptarguments: + ip_or_id: + simple: ${ExtraHop.Device.Id} + peer_role: {} + protocol: {} + query_from: + complex: + root: inputs.from_time + filters: + - - operator: isNotEmpty + left: + value: + simple: inputs.from_time + iscontext: true + transformers: + - operator: multiply + args: + by: + value: + simple: "1000" + query_until: + complex: + root: inputs.until_time + filters: + - - operator: isNotEmpty + left: + value: + simple: inputs.until_time + iscontext: true + transformers: + - operator: multiply + args: + by: + value: + simple: "1000" + separatecontext: false + view: |- + { + "position": { + "x": 360, + "y": 1020 + } + } + note: false + timertriggers: [] + ignoreworker: false + "7": + id: "7" + taskid: 1b5c7cbd-6f0c-4a82-8314-335cd0e92066 + type: regular + task: + id: 1b5c7cbd-6f0c-4a82-8314-335cd0e92066 + version: -1 + name: Search for device in ExtraHop Reveal(x) + description: Search for the device within ExtraHop using the provided name, + IP address, and MAC address. + script: '|||extrahop-device-search' + type: regular + iscommand: true + brand: "" + nexttasks: + '#none#': + - "11" + scriptarguments: + active_from: {} + active_until: {} + activity: {} + discover_time: {} + ip: + simple: ${inputs.ip} + l3_only: {} + limit: + simple: "1" + mac: + simple: ${inputs.mac} + match_type: {} + name: + simple: ${inputs.name} + operator: {} + role: {} + software: {} + tag: {} + vendor: {} + vlan: {} + continueonerror: true + separatecontext: false + view: |- + { + "position": { + "x": 360, + "y": 540 + } + } + note: false + timertriggers: [] + ignoreworker: false + "9": + id: "9" + taskid: bcd55624-cc38-49fe-8f93-f45bc97a5d4b + type: condition + task: + id: bcd55624-cc38-49fe-8f93-f45bc97a5d4b + version: -1 + name: Is there a host? + description: Check if the host information required to search for peers was + provided. + type: condition + iscommand: false + brand: "" + nexttasks: + '#default#': + - "2" + "yes": + - "7" + separatecontext: false + conditions: + - label: "yes" + condition: + - - operator: isNotEmpty + left: + value: + simple: inputs.name + iscontext: true + - operator: isNotEmpty + left: + value: + simple: inputs.ip + iscontext: true + - operator: isNotEmpty + left: + value: + simple: inputs.mac + iscontext: true + view: |- + { + "position": { + "x": 160, + "y": 370 + } + } + note: false + timertriggers: [] + ignoreworker: false + "11": + id: "11" + taskid: 4703272c-c182-4ecf-8e41-4705ed8d0c54 + type: condition + task: + id: 4703272c-c182-4ecf-8e41-4705ed8d0c54 + version: -1 + name: Was a device found? + description: Check if a device was found. + type: condition + iscommand: false + brand: "" + nexttasks: + '#default#': + - "2" + "yes": + - "3" + - "16" + separatecontext: false + conditions: + - label: "yes" + condition: + - - operator: hasLength + left: + value: + simple: ExtraHop.Device + iscontext: true + right: + value: + simple: "1" + view: |- + { + "position": { + "x": 360, + "y": 720 + } + } + note: false + timertriggers: [] + ignoreworker: false + "15": + id: "15" + taskid: f93ea96a-09bf-4503-8fe6-fc791422d554 + type: condition + task: + id: f93ea96a-09bf-4503-8fe6-fc791422d554 + version: -1 + name: Is ExtraHop Reveal(x) enabled? + description: Checks if there is an active instance of the ExtraHop Reveal(x) + integration enabled. + scriptName: Exists + type: condition + iscommand: false + brand: "" + nexttasks: + '#default#': + - "2" + "yes": + - "9" + scriptarguments: + value: + complex: + root: modules + filters: + - - operator: isEqualString + left: + value: + simple: brand + iscontext: true + right: + value: + simple: ExtraHop v2 + - - operator: isEqualString + left: + value: + simple: state + iscontext: true + right: + value: + simple: active + separatecontext: false + view: |- + { + "position": { + "x": 50, + "y": 195 + } + } + note: false + timertriggers: [] + ignoreworker: false + "16": + id: "16" + taskid: ed8c477b-6860-429c-8c8b-888a1ac3e1d7 + type: regular + task: + id: ed8c477b-6860-429c-8c8b-888a1ac3e1d7 + version: -1 + name: Get a link to a live activity map in ExtraHop Reveal(x) + description: Get a link to a live activity map for the given device in the specified + time range. + script: '|||extrahop-get-activity-map' + type: regular + iscommand: true + brand: "" + nexttasks: + '#none#': + - "2" + scriptarguments: + from_time: + complex: + root: inputs.from_time + filters: + - - operator: isNotEmpty + left: + value: + simple: inputs.from_time + iscontext: true + ip_or_id: + simple: ${ExtraHop.Device.Id} + peer_role: {} + protocol: {} + time_interval: {} + until_time: + complex: + root: inputs.until_time + filters: + - - operator: isNotEmpty + left: + value: + simple: inputs.until_time + iscontext: true + separatecontext: false + view: |- + { + "position": { + "x": 760, + "y": 1020 + } + } + note: false + timertriggers: [] + ignoreworker: false +view: |- + { + "linkLabelsPosition": { + "11_16_yes": 0.29, + "11_2_#default#": 0.28, + "11_3_yes": 0.58, + "15_2_#default#": 0.29, + "15_9_yes": 0.53, + "9_2_#default#": 0.24, + "9_7_yes": 0.44 + }, + "paper": { + "dimensions": { + "height": 1235, + "width": 1090, + "x": 50, + "y": 50 + } + } + } +inputs: +- key: name + value: {} + required: false + description: The name of the device. This searches for matches on all ExtraHop name + fields (DHCP, DNS, NetBIOS, Cisco Discovery Protocol, etc). +- key: ip + value: {} + required: false + description: The IP address of the device. +- key: mac + value: {} + required: false + description: The MAC address of the device. +- key: from_time + value: {} + required: false + description: The beginning timestamp of the time range the playbook will use to + search, expressed in seconds since the epoch. +- key: until_time + value: {} + required: false + description: The ending timestamp of the time range the playbook will use to search, + expressed in seconds since the epoch. +outputs: +- contextPath: ExtraHop.Device + description: 'Details on the host and any peer devices found. ' + type: unknown +- contextPath: ExtraHop.ActivityMap + description: The link to a visual activity map in ExtraHop. + type: string +tests: +- ExtraHop_v2-Test \ No newline at end of file diff --git a/Playbooks/playbook-ExtraHop_-_Ticket_Tracking.yml b/Playbooks/playbook-ExtraHop_-_Ticket_Tracking.yml new file mode 100644 index 000000000000..e664da4c4999 --- /dev/null +++ b/Playbooks/playbook-ExtraHop_-_Ticket_Tracking.yml @@ -0,0 +1,736 @@ +id: ExtraHop - Ticket Tracking +version: -1 +fromversion: 4.5.0 +name: ExtraHop - Ticket Tracking +description: Links the Demisto incident back to the ExtraHop detection that created + it for ticket tracking purposes. +starttaskid: "0" +tasks: + "0": + id: "0" + taskid: 71394f2c-bc76-4885-8bab-b55ce0094789 + type: start + task: + id: 71394f2c-bc76-4885-8bab-b55ce0094789 + version: -1 + name: "" + description: "" + iscommand: false + brand: "" + nexttasks: + '#none#': + - "15" + separatecontext: false + view: |- + { + "position": { + "x": -10, + "y": -460 + } + } + note: false + timertriggers: [] + ignoreworker: false + "1": + id: "1" + taskid: be00a185-8d20-4e46-8012-4ae44b3687fc + type: regular + task: + id: be00a185-8d20-4e46-8012-4ae44b3687fc + version: -1 + name: Track the incident status in ExtraHop Reveal(x) + description: Link the ExtraHop Detection to the corresponding Demisto Investigation. This + uses the ExtraHop ticket tracking functionality to properly display ticket + status within ExtraHop. + script: '|||extrahop-track-ticket' + type: regular + iscommand: true + brand: "" + nexttasks: + '#none#': + - "12" + scriptarguments: + detection_id: + complex: + root: foundIncidents + accessor: CustomFields.detectionid + incident_close_reason: + complex: + root: foundIncidents + accessor: closeReason + incident_id: + complex: + root: foundIncidents + accessor: id + incident_owner: + complex: + root: foundIncidents + accessor: owner + incident_status: + complex: + root: foundIncidents + accessor: status + continueonerror: true + separatecontext: false + view: |- + { + "position": { + "x": 170, + "y": 1110 + } + } + note: false + timertriggers: [] + ignoreworker: false + "2": + id: "2" + taskid: f4953d89-2219-4d74-8acf-d819728d0ac9 + type: title + task: + id: f4953d89-2219-4d74-8acf-d819728d0ac9 + version: -1 + name: Done + description: "" + type: title + iscommand: false + brand: "" + separatecontext: false + view: |- + { + "position": { + "x": -100, + "y": 1640 + } + } + note: false + timertriggers: [] + ignoreworker: false + "3": + id: "3" + taskid: 6f9852cc-7a6e-4d2f-8bef-86fb205e5408 + type: regular + task: + id: 6f9852cc-7a6e-4d2f-8bef-86fb205e5408 + version: -1 + name: Mark the incident as tracked + description: Update the incident to reflect the Detection Ticketed status. + script: Builtin|||setIncident + type: regular + iscommand: true + brand: Builtin + nexttasks: + '#none#': + - "4" + scriptarguments: + addLabels: {} + affecteddata: {} + affecteddatatype: {} + affectedindividualscontactinformation: {} + app: {} + approximatenumberofaffecteddatasubjects: {} + assetid: {} + attachmentcount: {} + attachmentextension: {} + attachmenthash: {} + attachmentid: {} + attachmentname: {} + attachmentsize: {} + attachmenttype: {} + bugtraq: {} + city: {} + closeNotes: {} + closeReason: {} + companyaddress: {} + companycity: {} + companycountry: {} + companyhasinsuranceforthebreach: {} + companyname: {} + companypostalcode: {} + contactaddress: {} + contactname: {} + country: {} + countrywherebusinesshasitsmainestablishment: {} + countrywherethebreachtookplace: {} + customFields: {} + cve: {} + cvss: {} + dataencryptionstatus: {} + datetimeofthebreach: {} + deleteEmptyField: {} + dest: {} + destntdomain: {} + details: {} + detectionendtime: {} + detectionid: {} + detectionticketed: + simple: "true" + detectionupdatetime: {} + detectionurl: {} + dpoemailaddress: {} + duration: {} + emailaddress: {} + emailbcc: {} + emailbody: {} + emailbodyformat: {} + emailbodyhtml: {} + emailcc: {} + emailclientname: {} + emailfrom: {} + emailhtml: {} + emailinreplyto: {} + emailkeywords: {} + emailmessageid: {} + emailreceived: {} + emailreplyto: {} + emailreturnpath: {} + emailsenderip: {} + emailsize: {} + emailsource: {} + emailsubject: {} + emailto: {} + emailtocount: {} + emailurlclicked: {} + extrahopapplianceid: {} + extrahophostname: {} + filehash: {} + filename: {} + filepath: {} + id: + simple: ${ExtraHop.TicketId} + isthedatasubjecttodpia: {} + labels: {} + likelyimpact: {} + maliciouscauseifthecauseisamaliciousattack: {} + malwarefamily: {} + measurestomitigate: {} + name: {} + occurred: {} + owner: {} + participants: {} + phase: {} + possiblecauseofthebreach: {} + postalcode: {} + rawparticipants: {} + replacePlaybook: {} + riskscore: {} + roles: {} + sectorofaffectedparty: {} + severity: {} + signature: {} + sizenumberofemployees: {} + sizeturnover: {} + sla: {} + slaField: {} + src: {} + srcntdomain: {} + srcuser: {} + systems: {} + telephoneno: {} + type: {} + user: {} + vendorid: {} + vendorproduct: {} + vulnerabilitycategory: {} + whereisdatahosted: {} + separatecontext: false + view: |- + { + "position": { + "x": 490, + "y": 600 + } + } + note: false + timertriggers: [] + ignoreworker: false + "4": + id: "4" + taskid: 8185a734-72c0-4461-83d4-774c4cc8652a + type: regular + task: + id: 8185a734-72c0-4461-83d4-774c4cc8652a + version: -1 + name: Search for any untracked ExtraHop Detections + description: Searches Demisto incidents for any ExtraHop Detections that are + untracked. + scriptName: SearchIncidents + type: regular + iscommand: false + brand: "" + nexttasks: + '#none#': + - "10" + scriptarguments: + details: {} + fromclosedate: {} + fromdate: {} + fromduedate: {} + id: {} + level: {} + name: {} + notstatus: {} + owner: {} + page: {} + query: + simple: type:"ExtraHop Detection" and incident.detectionticketed:F and incident.created:>="1 + day ago" + reason: {} + size: {} + sort: {} + status: {} + toclosedate: {} + todate: {} + toduedate: {} + type: {} + separatecontext: false + view: |- + { + "position": { + "x": 170, + "y": 770 + } + } + note: false + timertriggers: [] + ignoreworker: false + "6": + id: "6" + taskid: 75eb04ec-c770-4120-8d70-56513ce2201b + type: regular + task: + id: 75eb04ec-c770-4120-8d70-56513ce2201b + version: -1 + name: Mark the incident as tracked + description: Update the incident to reflect the Detection Ticketed status. + script: Builtin|||setIncident + type: regular + iscommand: true + brand: Builtin + nexttasks: + '#none#': + - "2" + scriptarguments: + addLabels: {} + affecteddata: {} + affecteddatatype: {} + affectedindividualscontactinformation: {} + app: {} + approximatenumberofaffecteddatasubjects: {} + assetid: {} + attachmentcount: {} + attachmentextension: {} + attachmenthash: {} + attachmentid: {} + attachmentname: {} + attachmentsize: {} + attachmenttype: {} + bugtraq: {} + city: {} + closeNotes: {} + closeReason: {} + companyaddress: {} + companycity: {} + companycountry: {} + companyhasinsuranceforthebreach: {} + companyname: {} + companypostalcode: {} + contactaddress: {} + contactname: {} + country: {} + countrywherebusinesshasitsmainestablishment: {} + countrywherethebreachtookplace: {} + customFields: {} + cve: {} + cvss: {} + dataencryptionstatus: {} + datetimeofthebreach: {} + deleteEmptyField: {} + dest: {} + destntdomain: {} + details: {} + detectionendtime: {} + detectionid: {} + detectionticketed: + simple: "true" + detectionupdatetime: {} + detectionurl: {} + dpoemailaddress: {} + duration: {} + emailaddress: {} + emailbcc: {} + emailbody: {} + emailbodyformat: {} + emailbodyhtml: {} + emailcc: {} + emailclientname: {} + emailfrom: {} + emailhtml: {} + emailinreplyto: {} + emailkeywords: {} + emailmessageid: {} + emailreceived: {} + emailreplyto: {} + emailreturnpath: {} + emailsenderip: {} + emailsize: {} + emailsource: {} + emailsubject: {} + emailto: {} + emailtocount: {} + emailurlclicked: {} + extrahopapplianceid: {} + extrahophostname: {} + filehash: {} + filename: {} + filepath: {} + id: + simple: ${ExtraHop.TicketId} + isthedatasubjecttodpia: {} + labels: {} + likelyimpact: {} + maliciouscauseifthecauseisamaliciousattack: {} + malwarefamily: {} + measurestomitigate: {} + name: {} + occurred: {} + owner: {} + participants: {} + phase: {} + possiblecauseofthebreach: {} + postalcode: {} + rawparticipants: {} + replacePlaybook: {} + riskscore: {} + roles: {} + sectorofaffectedparty: {} + severity: {} + signature: {} + sizenumberofemployees: {} + sizeturnover: {} + sla: {} + slaField: {} + src: {} + srcntdomain: {} + srcuser: {} + systems: {} + telephoneno: {} + type: {} + user: {} + vendorid: {} + vendorproduct: {} + vulnerabilitycategory: {} + whereisdatahosted: {} + separatecontext: false + view: |- + { + "position": { + "x": 170, + "y": 1465 + } + } + note: false + timertriggers: [] + ignoreworker: false + "7": + id: "7" + taskid: 50b89e52-0733-477b-8929-8b595f704ca4 + type: regular + task: + id: 50b89e52-0733-477b-8929-8b595f704ca4 + version: -1 + name: Track the incident status in ExtraHop Reveal(x) + description: Link the ExtraHop Detection to the corresponding Demisto Investigation. This + uses the ExtraHop ticket tracking functionality to properly display ticket + status within ExtraHop. + script: '|||extrahop-track-ticket' + type: regular + iscommand: true + brand: "" + nexttasks: + '#none#': + - "11" + scriptarguments: + detection_id: + simple: ${incident.detectionid} + incident_close_reason: + simple: ${incident.closeReason} + incident_id: + simple: ${incident.id} + incident_owner: + simple: ${incident.owner} + incident_status: + simple: ${incident.status} + continueonerror: true + separatecontext: false + view: |- + { + "position": { + "x": 490, + "y": 230 + } + } + note: false + timertriggers: [] + ignoreworker: false + "9": + id: "9" + taskid: 40271f8c-840d-4e71-86c5-57a28bc24aea + type: condition + task: + id: 40271f8c-840d-4e71-86c5-57a28bc24aea + version: -1 + name: Are the required fields present? + description: Checks if the required detection and incident IDs are present. + type: condition + iscommand: false + brand: "" + nexttasks: + '#default#': + - "4" + "yes": + - "7" + separatecontext: false + conditions: + - label: "yes" + condition: + - - operator: isNotEmpty + left: + value: + simple: incident.id + iscontext: true + - - operator: isNotEmpty + left: + value: + simple: incident.detectionid + iscontext: true + view: |- + { + "position": { + "x": 170, + "y": 50 + } + } + note: false + timertriggers: [] + ignoreworker: false + "10": + id: "10" + taskid: 76071ff8-9c4d-494d-8b73-aa4368199fb5 + type: condition + task: + id: 76071ff8-9c4d-494d-8b73-aa4368199fb5 + version: -1 + name: Were there any incidents found? + description: Checks if there were any untracked ExtraHop Detections found. + type: condition + iscommand: false + brand: "" + nexttasks: + '#default#': + - "2" + "yes": + - "1" + separatecontext: false + conditions: + - label: "yes" + condition: + - - operator: isNotEmpty + left: + value: + simple: foundIncidents.id + iscontext: true + view: |- + { + "position": { + "x": 170, + "y": 930 + } + } + note: false + timertriggers: [] + ignoreworker: false + "11": + id: "11" + taskid: e553a569-662c-460e-87f0-f69efaf2901a + type: condition + task: + id: e553a569-662c-460e-87f0-f69efaf2901a + version: -1 + name: Was the incident successfully tracked? + description: Check if the ticket tracking was successful. + type: condition + iscommand: false + brand: "" + nexttasks: + '#default#': + - "4" + "yes": + - "3" + separatecontext: false + conditions: + - label: "yes" + condition: + - - operator: isNotEmpty + left: + value: + simple: ExtraHop.TicketId + iscontext: true + view: |- + { + "position": { + "x": 490, + "y": 390 + } + } + note: false + timertriggers: [] + ignoreworker: false + "12": + id: "12" + taskid: 624c3b07-31d8-45ca-8f6f-332974515fef + type: condition + task: + id: 624c3b07-31d8-45ca-8f6f-332974515fef + version: -1 + name: Was the incident successfully tracked? + description: Check if the ticket tracking was successful. + type: condition + iscommand: false + brand: "" + nexttasks: + '#default#': + - "2" + "yes": + - "6" + separatecontext: false + conditions: + - label: "yes" + condition: + - - operator: isNotEmpty + left: + value: + simple: ExtraHop.TicketId + iscontext: true + view: |- + { + "position": { + "x": 170, + "y": 1275 + } + } + note: false + timertriggers: [] + ignoreworker: false + "13": + id: "13" + taskid: 1619242b-d813-4dfb-8801-cd45a61906f3 + type: regular + task: + id: 1619242b-d813-4dfb-8801-cd45a61906f3 + version: -1 + name: Assign an ExtraHop analyst to the incident + description: Assign an analyst randomly from the pool of users with the ExtraHop + role. + scriptName: AssignAnalystToIncident + type: regular + iscommand: false + brand: "" + nexttasks: + '#none#': + - "9" + scriptarguments: + assignBy: {} + email: {} + roles: + simple: ExtraHop + username: {} + continueonerror: true + separatecontext: false + view: |- + { + "position": { + "x": 170, + "y": -110 + } + } + note: false + timertriggers: [] + ignoreworker: false + "15": + id: "15" + taskid: dffb9228-cc49-4adf-88f5-13001f85ba70 + type: condition + task: + id: dffb9228-cc49-4adf-88f5-13001f85ba70 + version: -1 + name: Is ExtraHop Reveal(x) enabled? + description: Checks if there is an active instance of the ExtraHop Reveal(x) + integration enabled. + scriptName: Exists + type: condition + iscommand: false + brand: "" + nexttasks: + '#default#': + - "2" + "yes": + - "13" + scriptarguments: + value: + complex: + root: modules + filters: + - - operator: isEqualString + left: + value: + simple: brand + iscontext: true + right: + value: + simple: ExtraHop v2 + - - operator: isEqualString + left: + value: + simple: state + iscontext: true + right: + value: + simple: active + separatecontext: false + view: |- + { + "position": { + "x": -10, + "y": -320 + } + } + note: false + timertriggers: [] + ignoreworker: false +view: |- + { + "linkLabelsPosition": { + "10_1_yes": 0.42, + "10_2_#default#": 0.2, + "11_3_yes": 0.49, + "11_4_#default#": 0.45, + "12_2_#default#": 0.31, + "12_6_yes": 0.47, + "15_13_yes": 0.55, + "15_2_#default#": 0.1, + "9_4_#default#": 0.31, + "9_7_yes": 0.44 + }, + "paper": { + "dimensions": { + "height": 2165, + "width": 970, + "x": -100, + "y": -460 + } + } + } +inputs: [] +outputs: [] +tests: +- ExtraHop_v2-Test \ No newline at end of file diff --git a/Scripts/ExtraHopTrackIncidents/ExtraHopTrackIncidents.py b/Scripts/ExtraHopTrackIncidents/ExtraHopTrackIncidents.py new file mode 100644 index 000000000000..3450b453ffb7 --- /dev/null +++ b/Scripts/ExtraHopTrackIncidents/ExtraHopTrackIncidents.py @@ -0,0 +1,42 @@ +import demistomock as demisto +from CommonServerPython import * +dArgs = demisto.args() +incidents = demisto.incidents() +if incidents: + incident = incidents[0] + + # Only track the incident if it's an ExtraHop Detection + if incident.get('type') == 'ExtraHop Detection': + + if incident.get('id') or incident.get('investigationId'): + + args = { + 'incident_id': incident.get('id') or incident.get('investigationId'), + 'detection_id': incident.get('CustomFields', {}).get('detectionid', None), + 'incident_owner': incident.get('owner', None), + 'incident_status': incident.get('status', None), + 'incident_close_reason': incident.get('closeReason', None) + } + + # Field Trigger value change + if 'name' in dArgs: + if dArgs['name'] == 'owner': + args['incident_owner'] = dArgs['new'] + elif dArgs['name'] == 'status': + args['incident_status'] = dArgs['new'] + + track_ticket = demisto.executeCommand("extrahop-track-ticket", args)[0] + + if isError(track_ticket): + demisto.results(track_ticket) + else: + demisto.results({ + "Type": entryTypes["note"], + "ContentsFormat": formats["text"], + "Contents": track_ticket['Contents'] + }) + + else: + return_warning("Could not identify the Incident ID or Investigation ID.") +else: + return_warning("No Incidents to process.") diff --git a/Scripts/ExtraHopTrackIncidents/ExtraHopTrackIncidents.yml b/Scripts/ExtraHopTrackIncidents/ExtraHopTrackIncidents.yml new file mode 100644 index 000000000000..bcdcb425faad --- /dev/null +++ b/Scripts/ExtraHopTrackIncidents/ExtraHopTrackIncidents.yml @@ -0,0 +1,23 @@ +commonfields: + id: ExtraHopTrackIncidents + version: -1 +name: ExtraHopTrackIncidents +type: python +tags: +- incidents +- ExtraHop +- field-change-triggered +comment: Links an incident investigation back to the ExtraHop Detection that created + it. +script: '-' +system: false +enabled: true +scripttarget: 0 +dependson: + must: + - 'ExtraHop v2|||extrahop-track-ticket' +runonce: false +dockerimage: demisto/python3:3.7.2.200 +runas: DBotWeakRole +tests: +- ExtraHop_v2-Test \ No newline at end of file diff --git a/TestPlaybooks/playbook-ExtraHop_v2-Test.yml b/TestPlaybooks/playbook-ExtraHop_v2-Test.yml new file mode 100644 index 000000000000..61b35d542ec8 --- /dev/null +++ b/TestPlaybooks/playbook-ExtraHop_v2-Test.yml @@ -0,0 +1,549 @@ +id: ExtraHop_v2-Test +version: -1 +name: ExtraHop_v2-Test +starttaskid: "0" +tasks: + "0": + id: "0" + taskid: 7f000fa5-26f6-4fc5-8a2e-1a42ae7464ca + type: start + task: + id: 7f000fa5-26f6-4fc5-8a2e-1a42ae7464ca + version: -1 + name: "" + iscommand: false + brand: "" + nexttasks: + '#none#': + - "11" + separatecontext: false + view: |- + { + "position": { + "x": 450, + "y": 30 + } + } + note: false + timertriggers: [] + ignoreworker: false + "5": + id: "5" + taskid: c5914d68-d75f-4cf1-8447-d06cfc3f1d6c + type: condition + task: + id: c5914d68-d75f-4cf1-8447-d06cfc3f1d6c + version: -1 + name: Found alert rules? + type: condition + iscommand: false + brand: "" + nexttasks: + "yes": + - "12" + separatecontext: false + conditions: + - label: "yes" + condition: + - - operator: greaterThan + left: + value: + complex: + root: ExtraHop + accessor: Alert + transformers: + - operator: count + iscontext: true + right: + value: + simple: "0" + - - operator: isExists + left: + value: + simple: ExtraHop.Alert.[0].Id + iscontext: true + view: |- + { + "position": { + "x": 450, + "y": 360 + } + } + note: false + timertriggers: [] + ignoreworker: false + "6": + id: "6" + taskid: 64e466a2-2800-4a1f-8e46-292ad44dd60b + type: condition + task: + id: 64e466a2-2800-4a1f-8e46-292ad44dd60b + version: -1 + name: Found advanced analysis device? + type: condition + iscommand: false + brand: "" + nexttasks: + "yes": + - "19" + separatecontext: false + conditions: + - label: "yes" + condition: + - - operator: isExists + left: + value: + complex: + root: ExtraHop + accessor: '[1].Device' + transformers: + - operator: WhereFieldEquals + args: + equalTo: + value: + simple: advanced + field: + value: + simple: Analysis + getField: {} + iscontext: true + view: |- + { + "position": { + "x": 450, + "y": 740 + } + } + note: false + timertriggers: [] + ignoreworker: false + "8": + id: "8" + taskid: af552a3a-b4c3-4130-81a3-c31c46ff4dfc + type: condition + task: + id: af552a3a-b4c3-4130-81a3-c31c46ff4dfc + version: -1 + name: Verify the device is on the watchlist + type: condition + iscommand: false + brand: "" + nexttasks: + "yes": + - "9" + separatecontext: false + conditions: + - label: "yes" + condition: + - - operator: isTrue + left: + value: + simple: ExtraHop.[2].Device.[0].OnWatchlist + iscontext: true + view: |- + { + "position": { + "x": 450, + "y": 1230 + } + } + note: false + timertriggers: [] + ignoreworker: false + "9": + id: "9" + taskid: 30ffa3d3-e040-4317-8a21-494b81d8131e + type: regular + task: + id: 30ffa3d3-e040-4317-8a21-494b81d8131e + version: -1 + name: Add a device to the watchlist + description: Add a device to the watchlist in ExtraHop. + script: ExtraHop v2|||extrahop-edit-watchlist + type: regular + iscommand: true + brand: ExtraHop v2 + nexttasks: + '#none#': + - "10" + scriptarguments: + add: + simple: ${ExtraHop.[1].Device.[0].Id} + remove: {} + separatecontext: false + view: |- + { + "position": { + "x": 450, + "y": 1420 + } + } + note: false + timertriggers: [] + ignoreworker: false + "10": + id: "10" + taskid: 0ed6f37c-f1e3-4b95-8742-49f0b95af49e + type: regular + task: + id: 0ed6f37c-f1e3-4b95-8742-49f0b95af49e + version: -1 + name: Remove a device from the watchlist + description: Remove a device from the watchlist in ExtraHop. + script: ExtraHop v2|||extrahop-edit-watchlist + type: regular + iscommand: true + brand: ExtraHop v2 + nexttasks: + '#none#': + - "14" + scriptarguments: + add: {} + remove: + simple: ${ExtraHop.[1].Device.[0].Id} + separatecontext: false + view: |- + { + "position": { + "x": 450, + "y": 1600 + } + } + note: false + timertriggers: [] + ignoreworker: false + "11": + id: "11" + taskid: 4ab78872-d011-4e67-8fe0-ac7054ae0c36 + type: regular + task: + id: 4ab78872-d011-4e67-8fe0-ac7054ae0c36 + version: -1 + name: Get ExtraHop alert rules + description: Get all alert rules from ExtraHop. + script: ExtraHop v2|||extrahop-get-alerts + type: regular + iscommand: true + brand: ExtraHop v2 + nexttasks: + '#none#': + - "5" + separatecontext: false + view: |- + { + "position": { + "x": 450, + "y": 180 + } + } + note: false + timertriggers: [] + ignoreworker: false + "12": + id: "12" + taskid: f2af6df9-e437-4663-897e-2d6a90172172 + type: regular + task: + id: f2af6df9-e437-4663-897e-2d6a90172172 + version: -1 + name: Search ExtraHop for devices + description: Search for devices in ExtraHop. + script: ExtraHop v2|||extrahop-device-search + type: regular + iscommand: true + brand: ExtraHop v2 + nexttasks: + '#none#': + - "6" + scriptarguments: + active_from: {} + active_until: {} + activity: {} + discover_time: {} + ip: {} + l3_only: + simple: "true" + limit: + simple: "500" + mac: {} + match_type: {} + name: {} + operator: {} + role: {} + software: {} + tag: {} + vendor: {} + vlan: {} + separatecontext: false + view: |- + { + "position": { + "x": 450, + "y": 560 + } + } + note: false + timertriggers: [] + ignoreworker: false + "13": + id: "13" + taskid: 3fdedbab-98ff-4782-8fb1-63eaa0fb2a41 + type: regular + task: + id: 3fdedbab-98ff-4782-8fb1-63eaa0fb2a41 + version: -1 + name: Get all devices on the ExtraHop watchlist + description: Get all devices on the watchlist in ExtraHop. + script: ExtraHop v2|||extrahop-get-watchlist + type: regular + iscommand: true + brand: ExtraHop v2 + nexttasks: + '#none#': + - "8" + separatecontext: false + view: |- + { + "position": { + "x": 450, + "y": 1060 + } + } + note: false + timertriggers: [] + ignoreworker: false + "14": + id: "14" + taskid: c89e7963-96bc-4970-8299-81aaf8f66e3f + type: regular + task: + id: c89e7963-96bc-4970-8299-81aaf8f66e3f + version: -1 + name: Get the peer devices of the test device + description: Get all peers for a device from ExtraHop. + script: ExtraHop v2|||extrahop-get-peers + type: regular + iscommand: true + brand: ExtraHop v2 + nexttasks: + '#none#': + - "15" + scriptarguments: + ip_or_id: + simple: ${EHTestDeviceId} + peer_role: {} + protocol: {} + query_from: {} + query_until: {} + separatecontext: false + view: |- + { + "position": { + "x": 450, + "y": 1780 + } + } + note: false + timertriggers: [] + ignoreworker: false + "15": + id: "15" + taskid: 6880ce11-be62-4af3-8f1b-9f89ebea9bc8 + type: regular + task: + id: 6880ce11-be62-4af3-8f1b-9f89ebea9bc8 + version: -1 + name: Get the network protocols of the test device + script: ExtraHop v2|||extrahop-get-protocols + type: regular + iscommand: true + brand: ExtraHop v2 + nexttasks: + '#none#': + - "16" + scriptarguments: + ip_or_id: + simple: ${EHTestDeviceId} + query_from: {} + query_until: {} + separatecontext: false + view: |- + { + "position": { + "x": 450, + "y": 1970 + } + } + note: false + timertriggers: [] + ignoreworker: false + "16": + id: "16" + taskid: 3c114d9f-7a77-4510-885c-cc9e992e421b + type: regular + task: + id: 3c114d9f-7a77-4510-885c-cc9e992e421b + version: -1 + name: Get a link to an activity map of the test device + description: Get a link to a Live Activity Map in ExtraHop. + script: ExtraHop v2|||extrahop-get-activity-map + type: regular + iscommand: true + brand: ExtraHop v2 + nexttasks: + '#none#': + - "17" + scriptarguments: + from_time: {} + ip_or_id: + simple: ${EHTestDeviceId} + peer_role: {} + protocol: {} + time_interval: {} + until_time: {} + separatecontext: false + view: |- + { + "position": { + "x": 450, + "y": 2160 + } + } + note: false + timertriggers: [] + ignoreworker: false + "17": + id: "17" + taskid: ef005a03-a034-43d3-8151-9428203d99ee + type: regular + task: + id: ef005a03-a034-43d3-8151-9428203d99ee + version: -1 + name: Add a tag on the test device + description: Add a tag from a device in ExtraHop. + script: ExtraHop v2|||extrahop-tag-devices + type: regular + iscommand: true + brand: ExtraHop v2 + nexttasks: + '#none#': + - "18" + scriptarguments: + add: + simple: ${EHTestDeviceId} + remove: {} + tag: + simple: test-playbook + separatecontext: false + view: |- + { + "position": { + "x": 450, + "y": 2360 + } + } + note: false + timertriggers: [] + ignoreworker: false + "18": + id: "18" + taskid: 7f70cf49-7724-47c4-8efe-4cbe2976d298 + type: regular + task: + id: 7f70cf49-7724-47c4-8efe-4cbe2976d298 + version: -1 + name: Remove a tag from the test device + description: Remove a tag from a device in ExtraHop. + script: ExtraHop v2|||extrahop-tag-devices + type: regular + iscommand: true + brand: ExtraHop v2 + scriptarguments: + add: {} + remove: + simple: ${EHTestDeviceId} + tag: + simple: test-playbook + separatecontext: false + view: |- + { + "position": { + "x": 450, + "y": 2560 + } + } + note: false + timertriggers: [] + ignoreworker: false + "19": + id: "19" + taskid: 610c4350-db3d-4543-8f47-eed73657b134 + type: regular + task: + id: 610c4350-db3d-4543-8f47-eed73657b134 + version: -1 + name: Set test device ID to context + description: Sets a value into the context with the given context key + scriptName: Set + type: regular + iscommand: false + brand: "" + nexttasks: + '#none#': + - "13" + scriptarguments: + append: {} + key: + simple: EHTestDeviceId + value: + complex: + root: ExtraHop + accessor: '[1].Device' + transformers: + - operator: WhereFieldEquals + args: + equalTo: + value: + simple: advanced + field: + value: + simple: Analysis + getField: + value: + simple: Id + - operator: slice + args: + from: + value: + simple: "0" + to: + value: + simple: "1" + separatecontext: false + view: |- + { + "position": { + "x": 450, + "y": 900 + } + } + note: false + timertriggers: [] + ignoreworker: false +view: |- + { + "linkLabelsPosition": { + "5_12_yes": 0.5, + "8_9_yes": 0.36 + }, + "paper": { + "dimensions": { + "height": 2625, + "width": 380, + "x": 450, + "y": 30 + } + } + } +inputs: [] +outputs: [] diff --git a/Tests/conf.json b/Tests/conf.json index 48a59d8f33da..4f8be91c1814 100644 --- a/Tests/conf.json +++ b/Tests/conf.json @@ -208,6 +208,10 @@ "integrations": "ExtraHop", "playbookID": "ExtraHop-Test" }, + { + "integrations": "ExtraHop v2", + "playbookID": "ExtraHop_v2-Test" + }, { "playbookID": "Test CommonServer" }, diff --git a/Tests/secrets_white_list.json b/Tests/secrets_white_list.json index a2e84a50fa10..2f89ca6f3b2a 100644 --- a/Tests/secrets_white_list.json +++ b/Tests/secrets_white_list.json @@ -208,7 +208,12 @@ "123.176.102.168", "1.1.1.69", "5.6.4.1", - "18.219.190.57" + "18.219.190.57", + "172.16.34.231", + "172.16.34.161", + "172.16.34.152", + "172.16.34.11", + "172.16.34.23" ], "ipv6": [ "2603:10b6:208:160::47", @@ -1100,7 +1105,10 @@ "http://www.msn.com", "http://schemas.openxmlformats.org", "http://upper-int.ru", - "walla.com" + "walla.com", + "docs.extrahop.com", + "extrahop.com", + "test1.extrahop.com" ], "md5": [ "c8092abd8d581750c0530fa1fc8d8318", diff --git a/release_notes.py b/release_notes.py index f4de151c85a2..c0797f1fc26b 100644 --- a/release_notes.py +++ b/release_notes.py @@ -33,6 +33,7 @@ "close": "Close", "quickView": "Quick View", "indicatorsDetails": "Indicator Details", + "mobile": "Mobile", } RELEASE_NOTES_ORDER = [INTEGRATIONS_DIR, SCRIPTS_DIR, PLAYBOOKS_DIR, REPORTS_DIR,