diff --git a/packages/carbon_black_cloud/0.1.0/changelog.yml b/packages/carbon_black_cloud/0.1.0/changelog.yml new file mode 100755 index 0000000000..01f7b8a94a --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/changelog.yml @@ -0,0 +1,6 @@ +# newer versions go on top +- version: 0.1.0 + changes: + - description: Initial draft of the package. + type: enhancement + link: https://github.com/elastic/integrations/pull/2760 diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/alert/agent/stream/aws-s3.yml.hbs b/packages/carbon_black_cloud/0.1.0/data_stream/alert/agent/stream/aws-s3.yml.hbs new file mode 100755 index 0000000000..e02c596614 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/alert/agent/stream/aws-s3.yml.hbs @@ -0,0 +1,24 @@ +bucket_arn: {{bucket_arn}} +number_of_workers: {{number_of_workers}} +bucket_list_interval: {{interval}} +access_key_id: {{access_key_id}} +secret_access_key: {{secret_access_key}} +bucket_list_prefix: {{bucket_list_prefix}} +expand_event_list_from_field: Records +{{#if proxy_url}} +proxy_url: {{proxy_url}} +{{/if}} +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/alert/agent/stream/httpjson.yml.hbs b/packages/carbon_black_cloud/0.1.0/data_stream/alert/agent/stream/httpjson.yml.hbs new file mode 100755 index 0000000000..2f738b21a6 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/alert/agent/stream/httpjson.yml.hbs @@ -0,0 +1,52 @@ +config_version: 2 +interval: {{interval}} +request.timeout: 2m +request.method: POST + +{{#if proxy_url}} +request.proxy_url: {{proxy_url}} +{{/if}} +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} + +request.url: {{hostname}}/appservices/v6/orgs/{{org_key}}/alerts/_search +request.transforms: + - set: + target: header.X-Auth-Token + value: {{custom_api_secret_key}}/{{custom_api_id}} + - set: + target: body.criteria.last_update_time.start + value: '[[.cursor.last_update_timestamp]]' + default: '[[formatDate ((now (parseDuration "-{{initial_interval}}")).Add (parseDuration "-15m")) "RFC3339"]]' + - set: + target: body.criteria.last_update_time.end + value: '[[formatDate (now (parseDuration "-15m")) "RFC3339"]]' + - set: + target: body.sort + value: '[{ "field": "last_update_time", "order": "ASC"}]' + value_type: json +response.pagination: + - set: + target: body.criteria.last_update_time.start + value: '[[if (ne .last_response.body.num_found .last_response.body.num_available)]][[.last_event.last_update_time]][[else]][[.last_response.terminate_pagination]][[end]]' + fail_on_template_error: true +cursor: + last_update_timestamp: + value: '[[.last_event.last_update_time]]' +response.split: + target: body.results +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/alert/elasticsearch/ingest_pipeline/default.yml b/packages/carbon_black_cloud/0.1.0/data_stream/alert/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..e221f8910f --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/alert/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,294 @@ +--- +description: Pipeline for parsing Carbon Black Cloud alerts. +processors: + - set: + field: ecs.version + value: "8.0.0" + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: json + ignore_failure: true + - fingerprint: + fields: + - json.id + - json.create_time + - json.last_update_time + target_field: _id + ignore_missing: true + - date: + field: json.create_time + target_field: "@timestamp" + ignore_failure: true + formats: + - ISO8601 + - set: + field: event.kind + value: alert + - rename: + field: json.id + target_field: event.id + ignore_missing: true + - rename: + field: json.first_event_time + target_field: event.start + ignore_missing: true + - rename: + field: json.last_event_time + target_field: event.end + ignore_missing: true + - rename: + field: json.severity + target_field: event.severity + ignore_missing: true + - urldecode: + field: json.alert_url + target_field: event.url + ignore_missing: true + - rename: + field: json.reason + target_field: event.reason + ignore_missing: true + - convert: + field: json.device_id + target_field: host.id + type: string + ignore_missing: true + - set: + field: host.os.type + value: windows + if: ctx?.json?.device_os == "WINDOWS" + - set: + field: host.os.type + value: linux + if: ctx?.json?.device_os == "LINUX" + - set: + field: host.os.type + value: macos + if: ctx?.json?.device_os == "MAC" + - set: + field: event.kind + value: alert + - rename: + field: json.device_os_version + target_field: host.os.version + ignore_missing: true + - rename: + field: json.device_name + target_field: host.hostname + ignore_missing: true + - append: + field: host.ip + value: "{{{json.device_internal_ip}}}" + if: ctx?.json?.device_internal_ip != null + allow_duplicates: false + ignore_failure: true + - append: + field: host.ip + value: "{{{json.device_external_ip}}}" + if: ctx?.json?.device_external_ip != null + allow_duplicates: false + ignore_failure: true + - rename: + field: json.device_username + target_field: user.name + ignore_missing: true + - append: + field: related.ip + value: + - "{{{json.device_internal_ip}}}" + - "{{{json.device_external_ip}}}" + allow_duplicates: false + - append: + field: related.user + value: "{{{user.name}}}" + allow_duplicates: false + - append: + field: related.hosts + value: "{{{host.hostname}}}" + allow_duplicates: false + - append: + field: related.hash + value: + - "{{{json.threat_cause_actor_md5}}}" + - "{{{json.threat_cause_actor_sha256}}}" + allow_duplicates: false + - rename: + field: json.process_name + target_field: process.name + ignore_missing: true + - rename: + field: json.process_path + target_field: process.executable + ignore_missing: true + - rename: + field: json.process_guid + target_field: process.entity_id + ignore_missing: true + - rename: + field: json.vendor_name + target_field: carbon_black_cloud.alert.vendor_name + ignore_missing: true + - rename: + field: json.product_name + target_field: carbon_black_cloud.alert.product_name + ignore_missing: true + - rename: + field: json.serial_number + target_field: carbon_black_cloud.alert.serial_number + ignore_missing: true + - rename: + field: json.policy_id + target_field: carbon_black_cloud.alert.policy.id + ignore_missing: true + - rename: + field: json.policy_name + target_field: carbon_black_cloud.alert.policy.name + ignore_missing: true + - rename: + field: json.threat_id + target_field: carbon_black_cloud.alert.threat_id + ignore_missing: true + - rename: + field: json.policy_applied + target_field: carbon_black_cloud.alert.policy.applied + ignore_missing: true + - rename: + field: json.threat_activity_c2 + target_field: carbon_black_cloud.alert.threat_activity.c2 + ignore_missing: true + - rename: + field: json.threat_activity_dlp + target_field: carbon_black_cloud.alert.threat_activity.dlp + ignore_missing: true + - rename: + field: json.threat_activity_phish + target_field: carbon_black_cloud.alert.threat_activity.phish + ignore_missing: true + - rename: + field: json.threat_cause_actor_name + target_field: carbon_black_cloud.alert.threat_cause.actor.name + ignore_missing: true + - rename: + field: json.threat_cause_actor_process_pid + target_field: carbon_black_cloud.alert.threat_cause.actor.process_pid + ignore_missing: true + - rename: + field: json.threat_cause_actor_sha256 + target_field: carbon_black_cloud.alert.threat_cause.actor.sha256 + ignore_missing: true + - rename: + field: json.threat_cause_actor_md5 + target_field: carbon_black_cloud.alert.threat_cause.actor.md5 + ignore_missing: true + - rename: + field: json.threat_cause_cause_event_id + target_field: carbon_black_cloud.alert.threat_cause.cause_event_id + ignore_missing: true + - rename: + field: json.threat_cause_parent_guid + target_field: carbon_black_cloud.alert.threat_cause.process.parent.guid + ignore_missing: true + - rename: + field: json.threat_cause_process_guid + target_field: carbon_black_cloud.alert.threat_cause.process.guid + ignore_missing: true + - rename: + field: json.threat_cause_reputation + target_field: carbon_black_cloud.alert.threat_cause.reputation + ignore_missing: true + - rename: + field: json.threat_cause_threat_category + target_field: carbon_black_cloud.alert.threat_cause.threat_category + ignore_missing: true + - rename: + field: json.threat_cause_vector + target_field: carbon_black_cloud.alert.threat_cause.vector + ignore_missing: true + - rename: + field: json.ioc_field + target_field: carbon_black_cloud.alert.ioc.field + ignore_missing: true + - rename: + field: json.ioc_hit + target_field: carbon_black_cloud.alert.ioc.hit + ignore_missing: true + - rename: + field: json.ioc_id + target_field: carbon_black_cloud.alert.ioc.id + ignore_missing: true + - rename: + field: json.report_id + target_field: carbon_black_cloud.alert.report.id + ignore_missing: true + - rename: + field: json.report_name + target_field: carbon_black_cloud.alert.report.name + ignore_missing: true + - rename: + field: json.org_key + target_field: carbon_black_cloud.alert.organization_key + ignore_missing: true + - rename: + field: json.device_location + target_field: carbon_black_cloud.alert.device.location + ignore_missing: true + - rename: + field: json.device_os + target_field: carbon_black_cloud.alert.device.os + ignore_missing: true + - rename: + field: json.device_internal_ip + target_field: carbon_black_cloud.alert.device.internal_ip + ignore_missing: true + - rename: + field: json.device_external_ip + target_field: carbon_black_cloud.alert.device.external_ip + ignore_missing: true + - remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_failure: true + ignore_missing: true + - lowercase: + field: json.category + ignore_missing: true + - script: + description: Adds all the remaining fields in fields under carbon_black_cloud.alert + lang: painless + if: ctx?.json != null + source: | + for (Map.Entry m : ctx.json.entrySet()) { + ctx.carbon_black_cloud.alert[m.getKey()] = m.getValue(); + } + - remove: + field: + - json + - carbon_black_cloud.alert.create_time + - carbon_black_cloud.alert.device_id + - carbon_black_cloud.alert.alert_url + ignore_missing: true + - script: + description: Drops null/empty values recursively + lang: painless + source: | + boolean dropEmptyFields(Object object) { + if (object == null || object == "") { + return true; + } else if (object instanceof Map) { + ((Map) object).values().removeIf(value -> dropEmptyFields(value)); + return (((Map) object).size() == 0); + } else if (object instanceof List) { + ((List) object).removeIf(value -> dropEmptyFields(value)); + return (((List) object).length == 0); + } + return false; + } + dropEmptyFields(ctx); +on_failure: + - set: + field: error.message + value: "{{{_ingest.on_failure_message}}}" diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/alert/fields/agent.yml b/packages/carbon_black_cloud/0.1.0/data_stream/alert/fields/agent.yml new file mode 100755 index 0000000000..e313ec8287 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/alert/fields/agent.yml @@ -0,0 +1,204 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + +- name: input.type + type: keyword + description: Input type +- name: log.offset + type: long + description: Log offset diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/alert/fields/base-fields.yml b/packages/carbon_black_cloud/0.1.0/data_stream/alert/fields/base-fields.yml new file mode 100755 index 0000000000..14fb618ea4 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/alert/fields/base-fields.yml @@ -0,0 +1,20 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. +- name: event.module + type: constant_keyword + description: Event module. + value: carbon_black_cloud +- name: event.dataset + type: constant_keyword + description: Event dataset. + value: carbon_black_cloud.alert diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/alert/fields/ecs.yml b/packages/carbon_black_cloud/0.1.0/data_stream/alert/fields/ecs.yml new file mode 100755 index 0000000000..b2ddcd3746 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/alert/fields/ecs.yml @@ -0,0 +1,107 @@ +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: event.end contains the date when the event ended or when the activity was last observed. + name: event.end + type: date +- description: Unique ID to describe the event. + name: event.id + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. + `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. + The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. + name: event.kind + type: keyword +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: |- + Reason why this event happened, according to the source. + This describes the why of a particular action or outcome captured in the event. Where `event.action` captures the action from the event, `event.reason` describes why that action was taken. For example, a web proxy with an `event.action` which denied the request may also populate `event.reason` with the reason why (e.g. `blocked site`). + name: event.reason + type: keyword +- description: |- + The numeric severity of the event according to your event source. + What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. + The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. + name: event.severity + type: long +- description: event.start contains the date when the event started or when the activity was first observed. + name: event.start + type: date +- description: |- + URL linking to an external system to continue investigation of this event. + This URL links to another system where in-depth investigation of the specific occurrence of this event can take place. Alert events, indicated by `event.kind:alert`, are a common use case for this field. + name: event.url + type: keyword +- description: |- + Hostname of the host. + It normally contains what the `hostname` command returns on the host machine. + name: host.hostname + type: keyword +- description: |- + Unique host id. + As hostname is not always unique, use values that are meaningful in your environment. + Example: The current usage of `beat.name`. + name: host.id + type: keyword +- description: Host ip addresses. + name: host.ip + type: ip +- description: |- + Use the `os.type` field to categorize the operating system into one of the broad commercial families. + One of these following values should be used (lowercase): linux, macos, unix, windows. + If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. + name: host.os.type + type: keyword +- description: Operating system version as a raw string. + name: host.os.version + type: keyword +- description: |- + Unique identifier for the process. + The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. + Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts. + name: process.entity_id + type: keyword +- description: Absolute path to the process executable. + multi_fields: + - name: text + type: match_only_text + name: process.executable + type: keyword +- description: |- + Process name. + Sometimes called program name or similar. + multi_fields: + - name: text + type: match_only_text + name: process.name + type: keyword +- description: All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). + name: related.hash + type: keyword +- description: All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases. + name: related.hosts + type: keyword +- description: All of the IPs seen on your event. + name: related.ip + type: ip +- description: All the user names or other user identifiers seen on the event. + name: related.user + type: keyword +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: Short name or login of the user. + multi_fields: + - name: text + type: match_only_text + name: user.name + type: keyword diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/alert/fields/fields.yml b/packages/carbon_black_cloud/0.1.0/data_stream/alert/fields/fields.yml new file mode 100755 index 0000000000..3eca3a1515 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/alert/fields/fields.yml @@ -0,0 +1,218 @@ +- name: carbon_black_cloud.alert + type: group + fields: + - name: blocked_threat_category + type: keyword + description: The category of threat which we were able to take action on. + - name: category + type: keyword + description: The category of the alert. + - name: count + type: long + - name: created_by_event_id + type: keyword + description: Event identifier that initiated the alert. + - name: device + type: group + fields: + - name: location + type: keyword + description: The Location of device. + - name: os + type: keyword + description: OS of the device. + - name: internal_ip + type: ip + description: Internal IP of the device. + - name: external_ip + type: ip + description: External IP of the device. + - name: document_guid + type: keyword + description: Unique ID of document. + - name: ioc + type: group + fields: + - name: field + type: keyword + description: The field the indicator of comprise (IOC) hit contains. + - name: hit + type: keyword + description: IOC field value or IOC query that matches. + - name: id + type: keyword + description: The identifier of the IOC that cause the hit. + - name: kill_chain_status + type: keyword + description: The stage within the Cyber Kill Chain sequence most closely associated with the attributes of the alert. + - name: last_update_time + type: date + description: The last time the alert was updated as an ISO 8601 UTC timestamp. + - name: legacy_alert_id + type: keyword + description: The legacy identifier for the alert. + - name: not_blocked_threat_category + type: keyword + description: Other potentially malicious activity involved in the threat that we weren't able to take action on (either due to policy config, or not having a relevant rule). + - name: notes_present + type: boolean + description: Indicates if notes are associated with the threat_id. + - name: organization_key + type: keyword + description: The unique identifier for the organization associated with the alert. + - name: policy + type: group + fields: + - name: applied + type: keyword + description: Whether a policy was applied. + - name: id + type: long + description: The identifier for the policy associated with the device at the time of the alert. + - name: name + type: keyword + description: The name of the policy associated with the device at the time of the alert. + - name: product_id + type: keyword + description: The hexadecimal id of the USB device's product. + - name: product_name + type: keyword + description: The name of the USB device’s vendor. + - name: reason_code + type: keyword + description: Shorthand enum for the full-text reason. + - name: report + type: group + fields: + - name: id + type: keyword + description: The identifier of the report that contains the IOC. + - name: name + type: keyword + description: The name of the report that contains the IOC. + - name: run_state + type: keyword + description: Whether the threat in the alert ran. + - name: sensor_action + type: keyword + description: The action taken by the sensor, according to the rule of the policy. + - name: serial_number + type: keyword + description: The serial number of the USB device. + - name: status + type: keyword + description: status of alert. + - name: tags + type: keyword + description: Tags associated with the alert. + - name: target_value + type: keyword + description: The priority of the device assigned by the policy. + - name: threat_activity + type: group + fields: + - name: c2 + type: keyword + description: Whether the alert involved a command and control (c2) server. + - name: dlp + type: keyword + description: Whether the alert involved data loss prevention (DLP). + - name: phish + type: keyword + description: Whether the alert involved phishing. + - name: threat_cause + type: group + fields: + - name: actor + type: group + fields: + - name: md5 + type: keyword + description: MD5 of the threat cause actor. + - name: name + type: keyword + description: 'The name can be one of the following: process commandline, process name, or analytic matched threat. Analytic matched threats are Exploit, Malware, PUP, or Trojan.' + - name: process_pid + type: keyword + description: Process identifier (PID) of the actor process. + - name: sha256 + type: keyword + description: SHA256 of the threat cause actor. + - name: cause_event_id + type: keyword + description: ID of the Event that triggered the threat. + - name: process + type: group + fields: + - name: guid + type: keyword + description: The global unique identifier of the process. + - name: parent + type: group + fields: + - name: guid + type: keyword + description: The global unique identifier of the process. + - name: reputation + type: keyword + description: Reputation of the threat cause. + - name: threat_category + type: keyword + description: Category of the threat cause. + - name: vector + type: keyword + description: The source of the threat cause. + - name: threat_id + type: keyword + description: The identifier of a threat which this alert belongs. Threats are comprised of a combination of factors that can be repeated across devices. + - name: threat_indicators + type: group + description: List of the threat indicators that make up the threat. + fields: + - name: process_name + type: keyword + description: Process name associated with threat. + - name: sha256 + type: keyword + description: Sha256 associated with threat. + - name: ttps + type: keyword + description: Tactics, techniques and procedures associated with threat. + - name: type + type: keyword + description: Type of alert. + - name: vendor_id + type: keyword + description: The hexadecimal id of the USB device's vendor. + - name: vendor_name + type: keyword + description: The name of the USB device’s vendor. + - name: watchlists + type: group + description: List of watchlists associated with an alert. + fields: + - name: id + type: keyword + description: The identifier of watchlist. + - name: name + type: keyword + description: The name of the watchlist. + - name: workflow + type: group + description: Tracking system for alerts as they are triaged and resolved. + fields: + - name: changed_by + type: keyword + description: The name of user who changed the workflow. + - name: comment + type: keyword + description: Comment associated with workflow. + - name: last_update_time + type: date + description: The last update time of workflow. + - name: remediation + type: keyword + description: N/A + - name: state + type: keyword + description: The state of workflow. diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/alert/manifest.yml b/packages/carbon_black_cloud/0.1.0/data_stream/alert/manifest.yml new file mode 100755 index 0000000000..477667ce22 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/alert/manifest.yml @@ -0,0 +1,95 @@ +title: Alert +type: logs +streams: + - input: httpjson + title: Collect alerts from Carbon Black Cloud + description: Collect alerts from Carbon Black Cloud. + template_path: httpjson.yml.hbs + vars: + - name: interval + type: text + title: Interval + description: Interval to fetch alerts from Carbon Black Cloud. + multi: false + required: true + show_user: true + default: 1m + - name: initial_interval + type: text + title: Initial Interval + description: How far back to pull the alerts from the Carbon Black Cloud API. + default: 24h + multi: false + required: true + show_user: true + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - carbon_black_cloud-alert + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original`. + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + - input: aws-s3 + title: Collect alerts from Carbon Black Cloud + description: Collect alerts from Carbon Black Cloud. + template_path: aws-s3.yml.hbs + vars: + - name: bucket_list_prefix + type: text + title: Bucket Prefix + description: Prefix to apply for the list request to the S3 bucket. + multi: false + required: true + show_user: true + - name: interval + type: text + title: Interval + description: Interval to fetch alerts from AWS S3 bucket. + multi: false + required: true + show_user: true + default: 1m + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - carbon_black_cloud-alert + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original`. + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: >- + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/alert/sample_event.json b/packages/carbon_black_cloud/0.1.0/data_stream/alert/sample_event.json new file mode 100755 index 0000000000..0fe469f67e --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/alert/sample_event.json @@ -0,0 +1,113 @@ +{ + "@timestamp": "2020-11-17T22:05:13.000Z", + "agent": { + "ephemeral_id": "3102b667-53be-4efc-b035-9d72bef2853f", + "hostname": "docker-fleet-agent", + "id": "1465e432-24f3-456b-98ab-e79cdc8d86f6", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "7.17.0" + }, + "carbon_black_cloud": { + "alert": { + "category": "warning", + "device": { + "external_ip": "81.2.69.143", + "internal_ip": "81.2.69.144", + "location": "UNKNOWN", + "os": "WINDOWS" + }, + "last_update_time": "2020-11-17T22:05:13Z", + "legacy_alert_id": "C8EB7306-AF26-4A9A-B677-814B3AF69720", + "organization_key": "ABCD6X3T", + "policy": { + "applied": "APPLIED", + "id": 6997287, + "name": "Standard" + }, + "product_id": "0x5406", + "product_name": "U3 Cruzer Micro", + "reason_code": "6D578342-9DE5-4353-9C25-1D3D857BFC5B:DCAEB1FA-513C-4026-9AB6-37A935873FBC", + "run_state": "DID_NOT_RUN", + "sensor_action": "DENY", + "serial_number": "0875920EF7C2A304", + "target_value": "MEDIUM", + "threat_cause": { + "cause_event_id": "FCEE2AF0-D832-4C9F-B988-F11B46028C9E", + "threat_category": "NON_MALWARE", + "vector": "REMOVABLE_MEDIA" + }, + "threat_id": "t5678", + "type": "DEVICE_CONTROL", + "vendor_id": "0x0781", + "vendor_name": "SanDisk", + "workflow": { + "changed_by": "Carbon Black", + "last_update_time": "2020-11-17T22:02:16Z", + "state": "OPEN" + } + } + }, + "data_stream": { + "dataset": "carbon_black_cloud.alert", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "1465e432-24f3-456b-98ab-e79cdc8d86f6", + "snapshot": false, + "version": "7.17.0" + }, + "event": { + "agent_id_status": "verified", + "created": "2022-04-05T10:25:54.372Z", + "dataset": "carbon_black_cloud.alert", + "end": "2020-11-17T22:02:16Z", + "id": "test1", + "ingested": "2022-04-05T10:25:57Z", + "kind": "alert", + "original": "{\"alert_url\":\"https://defense-eap01.conferdeploy.net/alerts?orgId=1889976\",\"category\":\"WARNING\",\"create_time\":\"2020-11-17T22:05:13Z\",\"device_external_ip\":\"81.2.69.143\",\"device_id\":2,\"device_internal_ip\":\"81.2.69.144\",\"device_location\":\"UNKNOWN\",\"device_name\":\"DESKTOP-002\",\"device_os\":\"WINDOWS\",\"device_os_version\":\"Windows 10 x64\",\"device_username\":\"test34@demo.com\",\"first_event_time\":\"2020-11-17T22:02:16Z\",\"id\":\"test1\",\"last_event_time\":\"2020-11-17T22:02:16Z\",\"last_update_time\":\"2020-11-17T22:05:13Z\",\"legacy_alert_id\":\"C8EB7306-AF26-4A9A-B677-814B3AF69720\",\"org_key\":\"ABCD6X3T\",\"policy_applied\":\"APPLIED\",\"policy_id\":6997287,\"policy_name\":\"Standard\",\"product_id\":\"0x5406\",\"product_name\":\"U3 Cruzer Micro\",\"reason\":\"Access attempted on unapproved USB device SanDisk U3 Cruzer Micro (SN: 0875920EF7C2A304). A Deny Policy Action was applied.\",\"reason_code\":\"6D578342-9DE5-4353-9C25-1D3D857BFC5B:DCAEB1FA-513C-4026-9AB6-37A935873FBC\",\"run_state\":\"DID_NOT_RUN\",\"sensor_action\":\"DENY\",\"serial_number\":\"0875920EF7C2A304\",\"severity\":3,\"target_value\":\"MEDIUM\",\"threat_cause_cause_event_id\":\"FCEE2AF0-D832-4C9F-B988-F11B46028C9E\",\"threat_cause_threat_category\":\"NON_MALWARE\",\"threat_cause_vector\":\"REMOVABLE_MEDIA\",\"threat_id\":\"t5678\",\"type\":\"DEVICE_CONTROL\",\"vendor_id\":\"0x0781\",\"vendor_name\":\"SanDisk\",\"workflow\":{\"changed_by\":\"Carbon Black\",\"comment\":\"\",\"last_update_time\":\"2020-11-17T22:02:16Z\",\"remediation\":\"\",\"state\":\"OPEN\"}}", + "reason": "Access attempted on unapproved USB device SanDisk U3 Cruzer Micro (SN: 0875920EF7C2A304). A Deny Policy Action was applied.", + "severity": 3, + "start": "2020-11-17T22:02:16Z", + "url": "https://defense-eap01.conferdeploy.net/alerts?orgId=1889976" + }, + "host": { + "hostname": "DESKTOP-002", + "id": "2", + "ip": [ + "81.2.69.144", + "81.2.69.143" + ], + "os": { + "type": "windows", + "version": "Windows 10 x64" + } + }, + "input": { + "type": "httpjson" + }, + "related": { + "hosts": [ + "DESKTOP-002" + ], + "ip": [ + "81.2.69.144", + "81.2.69.143" + ], + "user": [ + "test34@demo.com" + ] + }, + "tags": [ + "preserve_original_event", + "forwarded", + "carbon_black_cloud-alert" + ], + "user": { + "name": "test34@demo.com" + } +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/agent/stream/httpjson.yml.hbs b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/agent/stream/httpjson.yml.hbs new file mode 100755 index 0000000000..310b6e05d5 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/agent/stream/httpjson.yml.hbs @@ -0,0 +1,45 @@ +config_version: 2 +interval: {{interval}} +request.method: POST +{{#if proxy_url }} +request.proxy_url: {{proxy_url}} +{{/if}} +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} +request.url: {{hostname}}/vulnerability/assessment/api/v1/orgs/{{org_key}}/devices/vulnerabilities/summary/_search +request.transforms: + - set: + target: header.X-Auth-Token + value: {{custom_api_secret_key}}/{{custom_api_id}} + - set: + target: body.start + value: '0' + value_type: int + - set: + target: body.rows + value: '10000' + value_type: int +request.timeout: 2m +response.pagination: + - set: + target: body.start + value: '[[if (eq (len .last_response.body.results) 0)]][[.last_response.terminate_pagination]][[else]][[mul .last_response.page .body.rows]][[end]]' + value_type: int + fail_on_template_error: true +response.split: + target: body.results +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/elasticsearch/ingest_pipeline/default.yml b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..94f7482f37 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,132 @@ +--- +description: Pipeline for parsing Carbon Black Cloud Asset Vulnerability Summary. +processors: +- rename: + field: message + target_field: event.original + ignore_missing: true +- set: + field: ecs.version + value: '8.0.0' +- json: + field: event.original + target_field: json +- rename: + field: json.host_name + target_field: host.hostname + ignore_missing: true +- convert: + field: json.device_id + type: string + target_field: host.id + ignore_missing: true +- rename: + field: json.name + target_field: host.name + ignore_missing: true +- rename: + field: json.os_info.os_name + target_field: host.os.name + ignore_missing: true +- set: + field: host.os.type + value: windows + if: ctx?.json?.os_info.os_type == "WINDOWS" +- set: + field: host.os.type + value: ubuntu + if: ctx?.json?.os_info.os_type == "UBUNTU" +- set: + field: host.os.type + value: centos + if: ctx?.json?.os_info.os_type == "CENTOS" +- remove : + field: json.os_info.os_type + ignore_missing: true +- remove : + field: json.device_id + ignore_missing: true +- rename: + field: json.os_info.os_version + target_field: host.os.version + ignore_missing: true +- rename: + field: json.highest_risk_score + target_field: vulnerability.score.base + ignore_missing: true +- rename: + field: json.severity + target_field: vulnerability.severity + ignore_missing: true +- date: + field: json.last_sync_ts + formats: + - ISO8601 + target_field: carbon_black_cloud.asset_vulnerability_summary.last_sync.timestamp +- remove: + field: json.last_sync_ts + ignore_missing: true +- rename: + field: json.sync_status + target_field: carbon_black_cloud.asset_vulnerability_summary.sync.status + ignore_missing: true +- rename: + field: json.sync_type + target_field: carbon_black_cloud.asset_vulnerability_summary.sync.type + ignore_missing: true +- rename: + field: json.type + target_field: carbon_black_cloud.asset_vulnerability_summary.type + ignore_missing: true +- rename: + field: json.vm_id + target_field: carbon_black_cloud.asset_vulnerability_summary.vm.id + ignore_missing: true +- rename: + field: json.vm_name + target_field: carbon_black_cloud.asset_vulnerability_summary.vm.name + ignore_missing: true +- rename: + field: json.vuln_count + target_field: carbon_black_cloud.asset_vulnerability_summary.vuln_count + ignore_missing: true +- append: + field: related.hosts + value: "{{{host.hostname}}}" + allow_duplicates: false +- script: + description: Adds all the remaining fields in fields under carbon_black_cloud.asset_vulnerability_summary + lang: painless + if: ctx?.json != null + source: | + for (Map.Entry m : ctx.json.entrySet()) { + ctx.carbon_black_cloud.asset_vulnerability_summary[m.getKey()] = m.getValue(); + } +- remove: + field: json + ignore_missing: true +- script: + description: Drops null/empty values recursively + lang: painless + source: | + boolean dropEmptyFields(Object object) { + if (object == null || object == "") { + return true; + } else if (object instanceof Map) { + ((Map) object).values().removeIf(value -> dropEmptyFields(value)); + return (((Map) object).size() == 0); + } else if (object instanceof List) { + ((List) object).removeIf(value -> dropEmptyFields(value)); + return (((List) object).length == 0); + } + return false; + } + dropEmptyFields(ctx); +- remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_missing: true +on_failure: +- set: + field: error.message + value: '{{{ _ingest.on_failure_message }}}' diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/fields/agent.yml b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/fields/agent.yml new file mode 100755 index 0000000000..e313ec8287 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/fields/agent.yml @@ -0,0 +1,204 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + +- name: input.type + type: keyword + description: Input type +- name: log.offset + type: long + description: Log offset diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/fields/base-fields.yml b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/fields/base-fields.yml new file mode 100755 index 0000000000..e6791517a6 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/fields/base-fields.yml @@ -0,0 +1,20 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. +- name: event.module + type: constant_keyword + description: Event module + value: carbon_black_cloud +- name: event.dataset + type: constant_keyword + description: Event dataset + value: carbon_black_cloud.asset_vulnerability_summary diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/fields/ecs.yml b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/fields/ecs.yml new file mode 100755 index 0000000000..bae6099a14 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/fields/ecs.yml @@ -0,0 +1,57 @@ +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: |- + Hostname of the host. + It normally contains what the `hostname` command returns on the host machine. + name: host.hostname + type: keyword +- description: |- + Unique host id. + As hostname is not always unique, use values that are meaningful in your environment. + Example: The current usage of `beat.name`. + name: host.id + type: keyword +- description: |- + Name of the host. + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. + name: host.name + type: keyword +- description: Operating system name, without the version. + multi_fields: + - name: text + type: match_only_text + name: host.os.name + type: keyword +- description: |- + Use the `os.type` field to categorize the operating system into one of the broad commercial families. + One of these following values should be used (lowercase): linux, macos, unix, windows. + If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. + name: host.os.type + type: keyword +- description: Operating system version as a raw string. + name: host.os.version + type: keyword +- description: All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases. + name: related.hosts + type: keyword +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: |- + Scores can range from 0.0 to 10.0, with 10.0 being the most severe. + Base scores cover an assessment for exploitability metrics (attack vector, complexity, privileges, and user interaction), impact metrics (confidentiality, integrity, and availability), and scope. For example (https://www.first.org/cvss/specification-document) + name: vulnerability.score.base + type: float +- description: The severity of the vulnerability can help with metrics and internal prioritization regarding remediation. For example (https://nvd.nist.gov/vuln-metrics/cvss) + name: vulnerability.severity + type: keyword diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/fields/fields.yml b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/fields/fields.yml new file mode 100755 index 0000000000..a70b2974e8 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/fields/fields.yml @@ -0,0 +1,39 @@ +- name: carbon_black_cloud.asset_vulnerability_summary + type: group + fields: + - name: os_info + type: group + fields: + - name: os_arch + type: keyword + description: The identifier is for the Operating system architecture. + - name: last_sync + type: group + fields: + - name: timestamp + type: date + description: The identifier is for the Last sync time. + - name: sync + type: group + fields: + - name: status + type: keyword + description: The identifier is for the Device sync status. + - name: type + type: keyword + description: The identifier is for the Whether a manual sync was triggered for the device, or if it was a scheduled sync. + - name: type + type: keyword + description: The identifier is for the Device type. + - name: vm + type: group + fields: + - name: id + type: keyword + description: The identifier is for the Virtual Machine ID. + - name: name + type: keyword + description: The identifier is for the Virtual Machine name. + - name: vuln_count + type: integer + description: The identifier is for the Number of vulnerabilities at this level. diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/manifest.yml b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/manifest.yml new file mode 100755 index 0000000000..b7bf78f84d --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/manifest.yml @@ -0,0 +1,42 @@ +title: Asset Vulnerability Summary +type: logs +streams: + - input: httpjson + title: Collect asset vulnerability summary from Carbon Black Cloud + description: Collect asset vulnerability summary from Carbon Black Cloud. + template_path: httpjson.yml.hbs + vars: + - name: interval + type: text + title: Interval + description: Interval to query asset vulnerability summary in Carbon Black Cloud. + multi: false + required: true + show_user: true + default: 1h + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - carbon_black_cloud-asset-vulnerability-summary + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original`. + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/sample_event.json b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/sample_event.json new file mode 100755 index 0000000000..054b5b4ed5 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/asset_vulnerability_summary/sample_event.json @@ -0,0 +1,76 @@ +{ + "@timestamp": "2022-04-05T12:07:27.035Z", + "agent": { + "ephemeral_id": "90b0b6ec-10f9-41d4-94a5-b47c68f6b376", + "hostname": "docker-fleet-agent", + "id": "1465e432-24f3-456b-98ab-e79cdc8d86f6", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "7.17.0" + }, + "carbon_black_cloud": { + "asset_vulnerability_summary": { + "last_sync": { + "timestamp": "2022-01-17T08:33:37.384Z" + }, + "os_info": { + "os_arch": "64-bit" + }, + "sync": { + "status": "COMPLETED", + "type": "SCHEDULED" + }, + "type": "ENDPOINT", + "vuln_count": 1770 + } + }, + "data_stream": { + "dataset": "carbon_black_cloud.asset_vulnerability_summary", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "1465e432-24f3-456b-98ab-e79cdc8d86f6", + "snapshot": false, + "version": "7.17.0" + }, + "event": { + "agent_id_status": "verified", + "created": "2022-04-05T12:07:27.035Z", + "dataset": "carbon_black_cloud.asset_vulnerability_summary", + "ingested": "2022-04-05T12:07:27Z", + "original": "{\"cve_ids\":null,\"device_id\":8,\"highest_risk_score\":10,\"host_name\":\"DESKTOP-008\",\"last_sync_ts\":\"2022-01-17T08:33:37.384932Z\",\"name\":\"DESKTOP-008KK\",\"os_info\":{\"os_arch\":\"64-bit\",\"os_name\":\"Microsoft Windows 10 Education\",\"os_type\":\"WINDOWS\",\"os_version\":\"10.0.17763\"},\"severity\":\"CRITICAL\",\"sync_status\":\"COMPLETED\",\"sync_type\":\"SCHEDULED\",\"type\":\"ENDPOINT\",\"vm_id\":\"\",\"vm_name\":\"\",\"vuln_count\":1770}" + }, + "host": { + "hostname": "DESKTOP-008", + "id": "8", + "name": "DESKTOP-008KK", + "os": { + "name": "Microsoft Windows 10 Education", + "type": "windows", + "version": "10.0.17763" + } + }, + "input": { + "type": "httpjson" + }, + "related": { + "hosts": [ + "DESKTOP-008" + ] + }, + "tags": [ + "preserve_original_event", + "forwarded", + "carbon_black_cloud-asset-vulnerability-summary" + ], + "vulnerability": { + "score": { + "base": 10 + }, + "severity": "CRITICAL" + } +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/audit/agent/stream/httpjson.yml.hbs b/packages/carbon_black_cloud/0.1.0/data_stream/audit/agent/stream/httpjson.yml.hbs new file mode 100755 index 0000000000..2693bd2bbb --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/audit/agent/stream/httpjson.yml.hbs @@ -0,0 +1,32 @@ +config_version: 2 +interval: {{interval}} +request.method: GET + +{{#if proxy_url}} +request.proxy_url: {{proxy_url}} +{{/if}} +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} + +request.url: {{hostname}}/integrationServices/v3/auditlogs +request.transforms: + - set: + target: header.X-Auth-Token + value: {{api_secret_key}}/{{api_id}} +response.split: + target: body.notifications +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/audit/elasticsearch/ingest_pipeline/default.yml b/packages/carbon_black_cloud/0.1.0/data_stream/audit/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..09c8373acb --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/audit/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,93 @@ +--- +description: Pipeline for parsing Carbon Black Cloud audit logs +processors: + - set: + field: ecs.version + value: '8.0.0' + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: json + ignore_failure: true + - date: + field: json.eventTime + target_field: "@timestamp" + ignore_failure: true + formats: + - UNIX_MS + - set: + field: event.kind + value: event + - set: + field: event.outcome + value: success + - set: + field: event.outcome + value: failed + if: ctx?.json?.flagged == true + - rename: + field: json.description + target_field: event.reason + - rename: + field: json.clientIp + target_field: client.ip + ignore_missing: true + - rename: + field: json.loginName + target_field: client.user.id + ignore_missing: true + - rename: + field: json.eventId + target_field: event.id + ignore_missing: true + - rename: + field: json.orgName + target_field: organization.name + ignore_missing: true + - urldecode: + field: json.requestUrl + target_field: url.original + ignore_missing: true + - rename: + field: json.verbose + target_field: carbon_black_cloud.audit.verbose + ignore_missing: true + - rename: + field: json.flagged + target_field: carbon_black_cloud.audit.flagged + ignore_missing: true + - append: + field: related.ip + value: "{{{client.ip}}}" + allow_duplicates: false + - remove: + field: json + - script: + description: Drops null/empty values recursively + lang: painless + source: | + boolean dropEmptyFields(Object object) { + if (object == null || object == "") { + return true; + } else if (object instanceof Map) { + ((Map) object).values().removeIf(value -> dropEmptyFields(value)); + return (((Map) object).size() == 0); + } else if (object instanceof List) { + ((List) object).removeIf(value -> dropEmptyFields(value)); + return (((List) object).length == 0); + } + return false; + } + dropEmptyFields(ctx); + - remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_failure: true + ignore_missing: true +on_failure: + - set: + field: error.message + value: "{{{_ingest.on_failure_message}}}" diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/audit/fields/agent.yml b/packages/carbon_black_cloud/0.1.0/data_stream/audit/fields/agent.yml new file mode 100755 index 0000000000..e313ec8287 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/audit/fields/agent.yml @@ -0,0 +1,204 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + +- name: input.type + type: keyword + description: Input type +- name: log.offset + type: long + description: Log offset diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/audit/fields/base-fields.yml b/packages/carbon_black_cloud/0.1.0/data_stream/audit/fields/base-fields.yml new file mode 100755 index 0000000000..a14e71251a --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/audit/fields/base-fields.yml @@ -0,0 +1,20 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. +- name: event.module + type: constant_keyword + description: Event module. + value: carbon_black_cloud +- name: event.dataset + type: constant_keyword + description: Event dataset. + value: carbon_black_cloud.audit diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/audit/fields/ecs.yml b/packages/carbon_black_cloud/0.1.0/data_stream/audit/fields/ecs.yml new file mode 100755 index 0000000000..b5cd2cc086 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/audit/fields/ecs.yml @@ -0,0 +1,55 @@ +- description: IP address of the client (IPv4 or IPv6). + name: client.ip + type: ip +- description: Unique identifier of the user. + name: client.user.id + type: keyword +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: Unique ID to describe the event. + name: event.id + type: keyword +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the lowest level in the ECS category hierarchy. + `event.outcome` simply denotes whether the event represents a success or a failure from the perspective of the entity that produced the event. + Note that when a single transaction is described in multiple events, each event may populate different values of `event.outcome`, according to their perspective. + Also note that in the case of a compound event (a single event that contains multiple logical events), this field should be populated with the value that best captures the overall success or failure from the perspective of the event producer. + Further note that not all events will have an associated outcome. For example, this field is generally not populated for metric events, events with `event.type:info`, or any events for which an outcome does not make logical sense. + name: event.outcome + type: keyword +- description: |- + Reason why this event happened, according to the source. + This describes the why of a particular action or outcome captured in the event. Where `event.action` captures the action from the event, `event.reason` describes why that action was taken. For example, a web proxy with an `event.action` which denied the request may also populate `event.reason` with the reason why (e.g. `blocked site`). + name: event.reason + type: keyword +- description: Organization name. + multi_fields: + - name: text + type: match_only_text + name: organization.name + type: keyword +- description: All of the IPs seen on your event. + name: related.ip + type: ip +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: |- + Unmodified original url as seen in the event source. + Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. + This field is meant to represent the URL as it was observed, complete or not. + multi_fields: + - name: text + type: match_only_text + name: url.original + type: wildcard diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/audit/fields/fields.yml b/packages/carbon_black_cloud/0.1.0/data_stream/audit/fields/fields.yml new file mode 100755 index 0000000000..24af5d42b9 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/audit/fields/fields.yml @@ -0,0 +1,9 @@ +- name: carbon_black_cloud.audit + type: group + fields: + - name: flagged + type: boolean + description: true if action is failed otherwise false. + - name: verbose + type: boolean + description: true if verbose audit log otherwise false. diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/audit/manifest.yml b/packages/carbon_black_cloud/0.1.0/data_stream/audit/manifest.yml new file mode 100755 index 0000000000..929093a4ef --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/audit/manifest.yml @@ -0,0 +1,42 @@ +title: Audit +type: logs +streams: + - input: httpjson + title: Collect audit logs from Carbon Black Cloud + description: Collect audit logs from Carbon Black Cloud. + template_path: httpjson.yml.hbs + vars: + - name: interval + type: text + title: Interval + description: Interval to fetch audit logs from Carbon Black Cloud. + multi: false + required: true + show_user: true + default: 1m + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - carbon_black_cloud-audit + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original`. + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/audit/sample_event.json b/packages/carbon_black_cloud/0.1.0/data_stream/audit/sample_event.json new file mode 100755 index 0000000000..5c1a9fe549 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/audit/sample_event.json @@ -0,0 +1,62 @@ +{ + "@timestamp": "2022-02-10T16:04:30.263Z", + "agent": { + "ephemeral_id": "73949384-44ec-4f97-ad25-de968d945811", + "id": "926269e0-99fc-41d6-aee2-6eed3c276741", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "carbon_black_cloud": { + "audit": { + "flagged": false, + "verbose": false + } + }, + "client": { + "ip": "10.10.10.10", + "user": { + "id": "abc@demo.com" + } + }, + "data_stream": { + "dataset": "carbon_black_cloud.audit", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "926269e0-99fc-41d6-aee2-6eed3c276741", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "created": "2022-03-14T03:11:56.654Z", + "dataset": "carbon_black_cloud.audit", + "id": "2122f8ce8xxxxxxxxxxxxx", + "ingested": "2022-03-14T03:12:00Z", + "kind": "event", + "original": "{\"clientIp\":\"10.10.10.10\",\"description\":\"Logged in successfully\",\"eventId\":\"2122f8ce8xxxxxxxxxxxxx\",\"eventTime\":1644509070263,\"flagged\":false,\"loginName\":\"abc@demo.com\",\"orgName\":\"cb-xxxx-xxxx.com\",\"requestUrl\":null,\"verbose\":false}", + "outcome": "success", + "reason": "Logged in successfully" + }, + "input": { + "type": "httpjson" + }, + "organization": { + "name": "cb-xxxx-xxxx.com" + }, + "related": { + "ip": [ + "10.10.10.10" + ] + }, + "tags": [ + "preserve_original_event", + "forwarded", + "carbon_black_cloud-audit" + ] +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/agent/stream/aws-s3.yml.hbs b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/agent/stream/aws-s3.yml.hbs new file mode 100755 index 0000000000..e02c596614 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/agent/stream/aws-s3.yml.hbs @@ -0,0 +1,24 @@ +bucket_arn: {{bucket_arn}} +number_of_workers: {{number_of_workers}} +bucket_list_interval: {{interval}} +access_key_id: {{access_key_id}} +secret_access_key: {{secret_access_key}} +bucket_list_prefix: {{bucket_list_prefix}} +expand_event_list_from_field: Records +{{#if proxy_url}} +proxy_url: {{proxy_url}} +{{/if}} +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/elasticsearch/ingest_pipeline/default.yml b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..ace560f554 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,575 @@ +--- +description: Pipeline for parsing Carbon Black Cloud Endpoint Events. +processors: + - set: + field: ecs.version + value: '8.0.0' + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: json + ignore_failure: true + - date: + field: json.create_time + target_field: "@timestamp" + ignore_failure: true + formats: + - ISO8601 + - rename: + field: json.action + target_field: event.action + ignore_missing: true + - rename: + field: json.event_id + target_field: event.id + ignore_missing: true + - rename: + field: json.event_description + target_field: event.reason + ignore_missing: true + - rename: + field: json.filemod_name + target_field: file.path + ignore_missing: true + - rename: + field: json.modload_name + target_field: dll.path + ignore_missing: true + - set: + field: network.transport + value: udp + if: ctx?.json?.netconn_protocol == "PROTO_UDP" + - set: + field: network.transport + value: tcp + if: ctx?.json?.netconn_protocol == "PROTO_TCP" + - set: + field: network.direction + value: inbound + if: ctx?.json?.netconn_inbound == true + - set: + field: network.direction + value: outbound + if: ctx?.json?.netconn_inbound == false + - rename: + field: json.remote_port + target_field: source.port + ignore_missing: true + - rename: + field: json.remote_ip + target_field: source.ip + ignore_missing: true + - rename: + field: json.netconn_domain + target_field: source.address + ignore_missing: true + - rename: + field: json.local_port + target_field: client.port + ignore_missing: true + - rename: + field: json.local_ip + target_field: client.ip + ignore_missing: true + - convert: + field: json.device_id + target_field: host.id + type: string + ignore_missing: true + - set: + field: host.os.type + value: windows + if: ctx?.json?.device_os == "WINDOWS" + - set: + field: host.os.type + value: linux + if: ctx?.json?.device_os == "LINUX" + - set: + field: host.os.type + value: macos + if: ctx?.json?.device_os == "MAC" + - rename: + field: json.device_name + target_field: host.hostname + ignore_missing: true + - rename: + field: json.device_group + target_field: host.os.family + ignore_missing: true + - append: + field: host.ip + value: "{{{json.device_internal_ip}}}" + if: ctx?.json?.device_internal_ip != null + allow_duplicates: false + ignore_failure: true + - append: + field: host.ip + value: "{{{json.device_external_ip}}}" + if: ctx?.json?.device_external_ip != null + allow_duplicates: false + ignore_failure: true + - rename: + field: json.device_group + target_field: host.os.family + ignore_missing: true + - rename: + field: json.process_cmdline + target_field: process.command_line + ignore_missing: true + - rename: + field: json.process_guid + target_field: process.entity_id + ignore_missing: true + - rename: + field: json.process_path + target_field: process.executable + ignore_missing: true + - rename: + field: json.process_pid + target_field: process.pid + ignore_missing: true + - rename: + field: json.parent_cmdline + target_field: process.parent.command_line + ignore_missing: true + - rename: + field: json.parent_guid + target_field: process.parent.entity_id + ignore_missing: true + - rename: + field: json.parent_path + target_field: process.parent.executable + ignore_missing: true + - rename: + field: json.parent_pid + target_field: process.parent.pid + ignore_missing: true + - rename: + field: json.regmod_name + target_field: registry.path + ignore_missing: true + - append: + field: related.ip + value: + - "{{{json.device_internal_ip}}}" + - "{{{json.device_external_ip}}}" + - "{{{json.netconn_proxy_ip}}}" + - "{{{source.ip}}}" + - "{{{client.ip}}}" + allow_duplicates: false + - append: + field: related.user + value: + - "{{{json.process_username}}}" + - "{{{json.childproc_username}}}" + allow_duplicates: false + - append: + field: related.hosts + value: "{{{host.hostname}}}" + allow_duplicates: false + - script: + description: Dynamically map MD5 and SHA256 hash + lang: painless + source: | + void mapHashField(def ctx, def hashes, def key) { + for (hash in hashes) { + if (hash.length() == 32) {ctx["json"][key + "_md5"] = hash;} + if (hash.length() == 64) {ctx["json"][key + "_sha256"] = hash;} + } + } + if (ctx.json?.process_hash instanceof List) { + mapHashField(ctx, ctx.json?.process_hash, "process_hash"); + } + if (ctx.json?.parent_hash instanceof List) { + mapHashField(ctx, ctx.json?.parent_hash, "parent_hash"); + } + if (ctx.json?.filemod_hash instanceof List) { + mapHashField(ctx, ctx.json?.filemod_hash, "filemod_hash"); + } + if (ctx.json?.childproc_hash instanceof List) { + mapHashField(ctx, ctx.json?.childproc_hash, "childproc_hash"); + } + if (ctx.json?.crossproc_hash instanceof List) { + mapHashField(ctx, ctx.json?.crossproc_hash, "crossproc_hash"); + } + if (ctx.json?.scriptload_hash instanceof List) { + mapHashField(ctx, ctx.json?.scriptload_hash, "scriptload_hash"); + } + - rename: + field: json.process_hash_md5 + target_field: process.hash.md5 + ignore_missing: true + - rename: + field: json.process_hash_sha256 + target_field: process.hash.sha256 + ignore_missing: true + - rename: + field: json.parent_hash_md5 + target_field: process.parent.hash.md5 + ignore_missing: true + - rename: + field: json.parent_hash_sha256 + target_field: process.parent.hash.sha256 + ignore_missing: true + - rename: + field: json.backend_timestamp + target_field: carbon_black_cloud.endpoint_event.backend.timestamp + ignore_missing: true + - rename: + field: json.device_timestamp + target_field: carbon_black_cloud.endpoint_event.device.timestamp + ignore_missing: true + - rename: + field: json.device_os + target_field: carbon_black_cloud.endpoint_event.device.os + ignore_missing: true + - rename: + field: json.childproc_name + target_field: carbon_black_cloud.endpoint_event.childproc.name + ignore_missing: true + - rename: + field: json.org_key + target_field: carbon_black_cloud.endpoint_event.organization_key + ignore_missing: true + - rename: + field: json.process_duration + target_field: carbon_black_cloud.endpoint_event.process.duration + ignore_missing: true + - foreach: + field: json.process_publisher + processor: + split: + field: _ingest._value.state + separator: " \\| " + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.process_publisher + target_field: carbon_black_cloud.endpoint_event.process.publisher + ignore_missing: true + - rename: + field: json.process_reputation + target_field: carbon_black_cloud.endpoint_event.process.reputation + ignore_missing: true + - rename: + field: json.process_terminated + target_field: carbon_black_cloud.endpoint_event.process.terminated + ignore_missing: true + - rename: + field: json.process_username + target_field: carbon_black_cloud.endpoint_event.process.username + ignore_missing: true + - rename: + field: json.parent_reputation + target_field: carbon_black_cloud.endpoint_event.process.parent.reputation + ignore_missing: true + - rename: + field: json.target_cmdline + target_field: carbon_black_cloud.endpoint_event.target_cmdline + ignore_missing: true + - rename: + field: json.type + target_field: carbon_black_cloud.endpoint_event.type + ignore_missing: true + +# Mapping for endpoint.event.crossproc event type + + - rename: + field: json.crossproc_action + target_field: carbon_black_cloud.endpoint_event.crossproc.action + ignore_missing: true + - rename: + field: json.crossproc_api + target_field: carbon_black_cloud.endpoint_event.crossproc.api + ignore_missing: true + - rename: + field: json.crossproc_guid + target_field: carbon_black_cloud.endpoint_event.crossproc.guid + ignore_missing: true + - rename: + field: json.crossproc_name + target_field: carbon_black_cloud.endpoint_event.crossproc.name + ignore_missing: true + - rename: + field: json.crossproc_target + target_field: carbon_black_cloud.endpoint_event.crossproc.target + ignore_missing: true + - rename: + field: json.crossproc_reputation + target_field: carbon_black_cloud.endpoint_event.crossproc.reputation + ignore_missing: true + - foreach: + field: json.crossproc_publisher + processor: + split: + field: _ingest._value.state + separator: " \\| " + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.crossproc_publisher + target_field: carbon_black_cloud.endpoint_event.crossproc.publisher + ignore_missing: true + - rename: + field: json.crossproc_hash_md5 + target_field: carbon_black_cloud.endpoint_event.crossproc.hash.md5 + ignore_missing: true + - rename: + field: json.crossproc_hash_sha256 + target_field: carbon_black_cloud.endpoint_event.crossproc.hash.sha256 + ignore_missing: true + +# Mapping for endpoint.event.filemod event type + + - rename: + field: json.filemod_hash_md5 + target_field: file.hash.md5 + ignore_missing: true + - rename: + field: json.filemod_hash_sha256 + target_field: file.hash.sha256 + ignore_missing: true + +# Mapping for endpoint.event.fileless_scriptload event type + + - rename: + field: json.fileless_scriptload_cmdline + target_field: carbon_black_cloud.endpoint_event.fileless_scriptload.cmdline + ignore_missing: true + - rename: + field: json.fileless_scriptload_cmdline_length + target_field: carbon_black_cloud.endpoint_event.fileless_scriptload.cmdline_length + ignore_missing: true + - rename: + field: json.fileless_scriptload_hash_md5 + target_field: carbon_black_cloud.endpoint_event.fileless_scriptload.hash.md5 + ignore_missing: true + - rename: + field: json.fileless_scriptload_hash_sha256 + target_field: carbon_black_cloud.endpoint_event.fileless_scriptload.hash.sha256 + ignore_missing: true + +# Mapping for endpoint.event.moduleload event type + + - rename: + field: json.modload_md5 + target_field: dll.hash.md5 + ignore_missing: true + - rename: + field: json.modload_sha256 + target_field: dll.hash.sha256 + ignore_missing: true + - rename: + field: json.modload_effective_reputation + target_field: carbon_black_cloud.endpoint_event.modload.effective_reputation + ignore_missing: true + - rename: + field: json.modload_count + target_field: carbon_black_cloud.endpoint_event.modload.count + ignore_missing: true + - foreach: + field: json.modload_publisher + processor: + split: + field: _ingest._value.state + separator: " \\| " + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.modload_publisher + target_field: carbon_black_cloud.endpoint_event.modload.publisher + ignore_missing: true + +# Mapping for endpoint.event.netconn_proxy event type + + - rename: + field: json.netconn_proxy_domain + target_field: carbon_black_cloud.endpoint_event.netconn.proxy.domain + ignore_missing: true + - rename: + field: json.netconn_proxy_port + target_field: carbon_black_cloud.endpoint_event.netconn.proxy.port + ignore_missing: true + - rename: + field: json.netconn_proxy_ip + target_field: carbon_black_cloud.endpoint_event.netconn.proxy.ip + ignore_missing: true + +# Mapping for endpoint.event.procstart event type + + - rename: + field: json.childproc_guid + target_field: carbon_black_cloud.endpoint_event.childproc.guid + ignore_missing: true + - rename: + field: json.childproc_name + target_field: carbon_black_cloud.endpoint_event.childproc.name + ignore_missing: true + - rename: + field: json.childproc_pid + target_field: carbon_black_cloud.endpoint_event.childproc.pid + ignore_missing: true + - foreach: + field: json.childproc_publisher + processor: + split: + field: _ingest._value.state + separator: " \\| " + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.childproc_publisher + target_field: carbon_black_cloud.endpoint_event.childproc.publisher + ignore_missing: true + - rename: + field: json.childproc_reputation + target_field: carbon_black_cloud.endpoint_event.childproc.reputation + ignore_missing: true + - rename: + field: json.childproc_username + target_field: carbon_black_cloud.endpoint_event.childproc.username + ignore_missing: true + - rename: + field: json.childproc_hash_md5 + target_field: carbon_black_cloud.endpoint_event.childproc.hash.md5 + ignore_missing: true + - rename: + field: json.childproc_hash_sha256 + target_field: carbon_black_cloud.endpoint_event.childproc.hash.sha256 + ignore_missing: true + +# Mapping for NGAV endpoint.event.scriptload event type + + - rename: + field: json.scriptload_name + target_field: carbon_black_cloud.endpoint_event.scriptload.name + ignore_missing: true + - foreach: + field: json.scriptload_publisher + processor: + split: + field: _ingest._value.state + separator: " \\| " + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.scriptload_publisher + target_field: carbon_black_cloud.endpoint_event.scriptload.publisher + ignore_missing: true + - rename: + field: json.scriptload_count + target_field: carbon_black_cloud.endpoint_event.scriptload.count + ignore_missing: true + - rename: + field: json.scriptload_hash_md5 + target_field: carbon_black_cloud.endpoint_event.scriptload.hash.md5 + ignore_missing: true + - rename: + field: json.scriptload_hash_sha256 + target_field: carbon_black_cloud.endpoint_event.scriptload.hash.sha256 + ignore_missing: true + - rename: + field: json.scriptload_effective_reputation + target_field: carbon_black_cloud.endpoint_event.scriptload.effective_reputation + ignore_missing: true + - rename: + field: json.scriptload_reputation + target_field: carbon_black_cloud.endpoint_event.scriptload.reputation + ignore_missing: true + - rename: + field: json.device_internal_ip + target_field: carbon_black_cloud.endpoint_event.device.internal_ip + ignore_missing: true + - rename: + field: json.device_external_ip + target_field: carbon_black_cloud.endpoint_event.device.external_ip + ignore_missing: true + - remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_failure: true + - append: + field: related.hash + value: + - "{{{process.hash.md5}}}" + - "{{{process.hash.sha256}}}" + - "{{{process.parent.hash.md5}}}" + - "{{{process.parent.hash.sha256}}}" + - "{{{file.hash.md5}}}" + - "{{{file.hash.sha256}}}" + - "{{{dll.hash.md5}}}" + - "{{{dll.hash.sha256}}}" + - "{{{carbon_black_cloud.endpoint_event.childproc.hash.md5}}}" + - "{{{carbon_black_cloud.endpoint_event.childproc.hash.sha256}}}" + - "{{{carbon_black_cloud.endpoint_event.crossproc.hash.md5}}}" + - "{{{carbon_black_cloud.endpoint_event.crossproc.hash.sha256}}}" + - "{{{carbon_black_cloud.endpoint_event.fileless_scriptload.hash.md5}}}" + - "{{{carbon_black_cloud.endpoint_event.fileless_scriptload.hash.sha256}}}" + - "{{{carbon_black_cloud.endpoint_event.scriptload.hash.md5}}}" + - "{{{carbon_black_cloud.endpoint_event.scriptload.hash.sha256}}}" + allow_duplicates: false + - script: + description: Adds all the remaining fields in fields under carbon_black_cloud.endpoint_event + lang: painless + if: ctx?.json != null + source: | + for (Map.Entry m : ctx.json.entrySet()) { + ctx.carbon_black_cloud.endpoint_event[m.getKey()] = m.getValue(); + } + - remove: + field: + - json + - carbon_black_cloud.endpoint_event.create_time + - carbon_black_cloud.endpoint_event.device_id + - carbon_black_cloud.endpoint_event.process_hash + - carbon_black_cloud.endpoint_event.parent_hash + - carbon_black_cloud.endpoint_event.crossproc_hash + - carbon_black_cloud.endpoint_event.filemod_hash + - carbon_black_cloud.endpoint_event.childproc_hash + - carbon_black_cloud.endpoint_event.modload_hash + - carbon_black_cloud.endpoint_event.scriptload_hash + - carbon_black_cloud.endpoint_event.netconn_inbound + - carbon_black_cloud.endpoint_event.netconn_protocol + ignore_missing: true + - script: + description: Drops null/empty values recursively + lang: painless + source: | + boolean dropEmptyFields(Object object) { + if (object == null || object == "") { + return true; + } else if (object instanceof Map) { + ((Map) object).values().removeIf(value -> dropEmptyFields(value)); + return (((Map) object).size() == 0); + } else if (object instanceof List) { + ((List) object).removeIf(value -> dropEmptyFields(value)); + return (((List) object).length == 0); + } + return false; + } + dropEmptyFields(ctx); + - script: + description: Remove duplicate values + lang: painless + source: | + if (ctx?.related?.user != null) { + ctx.related.user = new HashSet(ctx.related.user) + } + if (ctx?.related?.hash != null) { + ctx.related.hash = new HashSet(ctx.related.hash) + } + if (ctx?.related?.ip != null) { + ctx.related.ip = new HashSet(ctx.related.ip) + } +on_failure: + - set: + field: error.message + value: "{{{_ingest.on_failure_message}}}" diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/fields/agent.yml b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/fields/agent.yml new file mode 100755 index 0000000000..e313ec8287 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/fields/agent.yml @@ -0,0 +1,204 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + +- name: input.type + type: keyword + description: Input type +- name: log.offset + type: long + description: Log offset diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/fields/base-fields.yml b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/fields/base-fields.yml new file mode 100755 index 0000000000..9b3253d2db --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/fields/base-fields.yml @@ -0,0 +1,20 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. +- name: event.module + type: constant_keyword + description: Event module. + value: carbon_black_cloud +- name: event.dataset + type: constant_keyword + description: Event dataset. + value: carbon_black_cloud.endpoint_event diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/fields/ecs.yml b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/fields/ecs.yml new file mode 100755 index 0000000000..79da70b595 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/fields/ecs.yml @@ -0,0 +1,183 @@ +- description: IP address of the client (IPv4 or IPv6). + name: client.ip + type: ip +- description: Port of the client. + name: client.port + type: long +- description: MD5 hash. + name: dll.hash.md5 + type: keyword +- description: SHA256 hash. + name: dll.hash.sha256 + type: keyword +- description: Full file path of the library. + name: dll.path + type: keyword +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: |- + The action captured by the event. + This describes the information in the event. It is more specific than `event.category`. Examples are `group-add`, `process-started`, `file-created`. The value is normally defined by the implementer. + name: event.action + type: keyword +- description: Unique ID to describe the event. + name: event.id + type: keyword +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: |- + Reason why this event happened, according to the source. + This describes the why of a particular action or outcome captured in the event. Where `event.action` captures the action from the event, `event.reason` describes why that action was taken. For example, a web proxy with an `event.action` which denied the request may also populate `event.reason` with the reason why (e.g. `blocked site`). + name: event.reason + type: keyword +- description: MD5 hash. + name: file.hash.md5 + type: keyword +- description: SHA256 hash. + name: file.hash.sha256 + type: keyword +- description: Full path to the file, including the file name. It should include the drive letter, when appropriate. + multi_fields: + - name: text + type: match_only_text + name: file.path + type: keyword +- description: |- + Hostname of the host. + It normally contains what the `hostname` command returns on the host machine. + name: host.hostname + type: keyword +- description: |- + Unique host id. + As hostname is not always unique, use values that are meaningful in your environment. + Example: The current usage of `beat.name`. + name: host.id + type: keyword +- description: Host ip addresses. + name: host.ip + type: ip +- description: OS family (such as redhat, debian, freebsd, windows). + name: host.os.family + type: keyword +- description: Operating system name, without the version. + multi_fields: + - name: text + type: match_only_text + name: host.os.name + type: keyword +- description: |- + Direction of the network traffic. + Recommended values are: + * ingress + * egress + * inbound + * outbound + * internal + * external + * unknown + + When mapping events from a host-based monitoring context, populate this field from the host's point of view, using the values "ingress" or "egress". + When mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of the network perimeter, using the values "inbound", "outbound", "internal" or "external". + Note that "internal" is not crossing perimeter boundaries, and is meant to describe communication between two hosts within the perimeter. Note also that "external" is meant to describe traffic between two hosts that are external to the perimeter. This could for example be useful for ISPs or VPN service providers. + name: network.direction + type: keyword +- description: |- + Same as network.iana_number, but instead using the Keyword name of the transport layer (udp, tcp, ipv6-icmp, etc.) + The field value must be normalized to lowercase for querying. + name: network.transport + type: keyword +- description: |- + Full command line that started the process, including the absolute path to the executable, and all arguments. + Some arguments may be filtered to protect sensitive information. + multi_fields: + - name: text + type: match_only_text + name: process.command_line + type: wildcard +- description: |- + Unique identifier for the process. + The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. + Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts. + name: process.entity_id + type: keyword +- description: Absolute path to the process executable. + multi_fields: + - name: text + type: match_only_text + name: process.executable + type: keyword +- description: MD5 hash. + name: process.hash.md5 + type: keyword +- description: SHA256 hash. + name: process.hash.sha256 + type: keyword +- description: |- + Full command line that started the process, including the absolute path to the executable, and all arguments. + Some arguments may be filtered to protect sensitive information. + multi_fields: + - name: text + type: match_only_text + name: process.parent.command_line + type: wildcard +- description: |- + Unique identifier for the process. + The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. + Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts. + name: process.parent.entity_id + type: keyword +- description: Absolute path to the process executable. + multi_fields: + - name: text + type: match_only_text + name: process.parent.executable + type: keyword +- description: MD5 hash. + name: process.parent.hash.md5 + type: keyword +- description: SHA256 hash. + name: process.parent.hash.sha256 + type: keyword +- description: Process id. + name: process.parent.pid + type: long +- description: Process id. + name: process.pid + type: long +- description: Full path, including hive, key and value + name: registry.path + type: keyword +- description: All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). + name: related.hash + type: keyword +- description: All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases. + name: related.hosts + type: keyword +- description: All of the IPs seen on your event. + name: related.ip + type: ip +- description: All the user names or other user identifiers seen on the event. + name: related.user + type: keyword +- description: |- + Some event source addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. + Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. + name: source.address + type: keyword +- description: IP address of the source (IPv4 or IPv6). + name: source.ip + type: ip +- description: Port of the source. + name: source.port + type: long +- description: List of keywords used to tag each event. + name: tags + type: keyword diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/fields/fields.yml b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/fields/fields.yml new file mode 100755 index 0000000000..199988ffb6 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/fields/fields.yml @@ -0,0 +1,239 @@ +- name: carbon_black_cloud.endpoint_event + type: group + fields: + - name: alert_id + type: keyword + description: The ID of the Alert this event is associated with. + - name: backend + type: group + fields: + - name: timestamp + type: keyword + description: Time when the backend received the batch of events. + - name: childproc + type: group + fields: + - name: guid + type: keyword + description: Unique ID of the child process. + - name: hash + type: group + fields: + - name: md5 + type: keyword + description: Cryptographic MD5 hashes of the executable file backing the child process. + - name: sha256 + type: keyword + description: Cryptographic SHA256 hashes of the executable file backing the child process. + - name: name + type: keyword + description: Full path to the target of the crossproc event on the device's local file system. + - name: pid + type: long + description: OS-reported Process ID of the child process. + - name: publisher + type: group + description: Signature entry for the childproc as reported by the endpoint. + fields: + - name: name + type: keyword + description: The name of the publisher. + - name: state + type: keyword + description: The state of the publisher. + - name: reputation + type: keyword + description: Carbon Black Cloud Reputation string for the childproc. + - name: username + type: keyword + description: The username associated with the user context that the child process was started under. + - name: crossproc + type: group + fields: + - name: action + type: keyword + description: The action taken on cross-process. + - name: api + type: keyword + description: Name of the operating system API called by the actor process. + - name: guid + type: keyword + description: Unique ID of the cross process. + - name: hash + type: group + fields: + - name: md5 + type: keyword + description: Cryptographic MD5 hashes of the target of the crossproc event. + - name: sha256 + type: keyword + description: Cryptographic SHA256 hashes of the target of the crossproc event. + - name: name + type: keyword + description: Full path to the target of the crossproc event on the device's local file system. + - name: publisher + type: group + description: Signature entry for the crossproc as reported by the endpoint. + fields: + - name: name + type: keyword + description: The name of the publisher. + - name: state + type: keyword + description: The state of the publisher. + - name: reputation + type: keyword + description: Carbon Black Cloud Reputation string for the crossproc. + - name: target + type: boolean + description: True if the process was the target of the cross-process event; false if the process was the actor. + - name: device + type: group + fields: + - name: os + type: keyword + description: Os name. + - name: timestamp + type: keyword + description: Time seen on sensor. + - name: internal_ip + type: ip + description: Internal IP of the device. + - name: external_ip + type: ip + description: External IP of the device. + - name: event_origin + type: keyword + description: Indicates which product the event came from. "EDR" indicates the event originated from Enterprise EDR. "NGAV" indicates the event originated from Endpoint Standard. + - name: fileless_scriptload + type: group + fields: + - name: cmdline + type: keyword + description: Deobfuscated script content run in a fileless context by the process. + - name: cmdline_length + type: keyword + description: Character count of the deobfuscated script content run in a fileless context. + - name: hash + type: group + fields: + - name: md5 + type: keyword + description: MD5 hash of the deobfuscated script content run by the process in a fileless context. + - name: sha256 + type: keyword + description: SHA-256 hash of the deobfuscated script content run by the process in a fileless context. + - name: modload + type: group + fields: + - name: count + type: long + description: Count of modload events reported by the sensor since last initialization. + - name: effective_reputation + type: keyword + description: Effective reputation(s) of the loaded module(s); applied by the sensor when the event occurred. + - name: publisher + type: group + description: Signature entry for the moduleload as reported by the endpoint. + fields: + - name: name + type: keyword + description: The name of the publisher. + - name: state + type: keyword + description: The state of the publisher. + - name: netconn + type: group + fields: + - name: proxy + type: group + fields: + - name: domain + type: keyword + description: DNS name associated with the "proxy" end of this network connection; may be empty if the name cannot be inferred or the connection is made direct to/from a proxy IP address. + - name: ip + type: keyword + description: IPv4 or IPv6 address in string format associated with the "proxy" end of this network connection. + - name: port + type: keyword + description: UDP/TCP port number associated with the "proxy" end of this network connection. + - name: organization_key + type: keyword + description: The organization key associated with the console instance. + - name: process + type: group + fields: + - name: duration + type: long + description: The time difference in seconds between the process start and process terminate event. + - name: parent + type: group + fields: + - name: reputation + type: keyword + description: Reputation of the parent process; applied when event is processed by the Carbon Black Cloud i.e. after sensor delivers event to the cloud. + - name: publisher + type: group + description: Signature entry for the process as reported by the endpoint. + fields: + - name: name + type: keyword + description: The name of the publisher. + - name: state + type: keyword + description: The state of the publisher. + - name: reputation + type: keyword + description: Reputation of the actor process; applied when event is processed by the Carbon Black Cloud i.e. after sensor delivers event to the cloud. + - name: terminated + type: boolean + description: True if process was terminated elase false. + - name: username + type: keyword + description: The username associated with the user context that this process was started under. + - name: schema + type: long + description: The schema version. The current schema version is "1". This schema version will only be incremented if the field definitions are changed in a backwards-incompatible way. + - name: scriptload + type: group + fields: + - name: count + type: long + description: Count of scriptload events across all processes reported by the sensor since last initialization. + - name: effective_reputation + type: keyword + description: Effective reputation(s) of the script file(s) loaded at process launch; applied by the sensor when the event occurred. + - name: hash + type: group + fields: + - name: md5 + type: keyword + description: Cryptographic MD5 hashes of the target of the scriptload event. + - name: sha256 + type: keyword + description: Cryptographic SHA256 hashes of the target of the scriptload event. + - name: name + type: keyword + description: Full path to the target of the crossproc event on the device's local file system. + - name: publisher + type: group + description: Signature entry for the scriptload as reported by the endpoint. + fields: + - name: name + type: keyword + description: The name of the publisher. + - name: state + type: keyword + description: The state of the publisher. + - name: reputation + type: keyword + description: Carbon Black Cloud Reputation string for the scriptload. + - name: sensor_action + type: keyword + description: The sensor action taken on event. + - name: target_cmdline + type: keyword + description: Process command line associated with the target process. + - name: type + type: keyword + description: The event type. diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/manifest.yml b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/manifest.yml new file mode 100755 index 0000000000..0f52e82022 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/manifest.yml @@ -0,0 +1,48 @@ +title: Endpoint Event +type: logs +streams: + - input: aws-s3 + title: Collect endpoint events from Carbon Black Cloud + description: Collect endpoint events from Carbon Black Cloud. + template_path: aws-s3.yml.hbs + vars: + - name: bucket_list_prefix + type: text + title: Bucket Prefix + description: Prefix to apply for the list request to the S3 bucket. + multi: false + required: true + show_user: true + - name: interval + type: text + title: Interval + description: Interval to fetch endpoint events from AWS S3 bucket. + multi: false + required: true + show_user: true + default: 1m + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - carbon_black_cloud-endpoint-event + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original`. + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: >- + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/sample_event.json b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/sample_event.json new file mode 100755 index 0000000000..958377158a --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/endpoint_event/sample_event.json @@ -0,0 +1,96 @@ +{ + "process": { + "parent": { + "pid": 1684, + "entity_id": "XXXXXXXX-003d902d-00000694-00000000-1d7540221dedd62", + "command_line": "C:\\WindowsAzure\\GuestAgent_2.7.41491.1010_2021-05-11_233023\\GuestAgent\\WindowsAzureGuestAgent.exe", + "executable": "c:\\windowsazure\\guestagent_2.7.41491.1010_2021-05-11_233023\\guestagent\\windowsazureguestagent.exe", + "hash": { + "sha256": "44a1975b2197484bb22a0eb673e67e7ee9ec20265e9f6347f5e06b6447ac82c5", + "md5": "03dd698da2671383c9b4f868c9931879" + } + }, + "pid": 4880, + "entity_id": "XXXXXXXX-003d902d-00001310-00000000-1d81e748c4adb37", + "command_line": "\"route.exe\" print", + "executable": "c:\\windows\\system32\\route.exe", + "hash": { + "sha256": "9e9c7696859b94b1c33a532fa4d5c648226cf3361121dd899e502b8949fb11a6", + "md5": "2498272dc48446891182747428d02a30" + } + }, + "ecs": { + "version": "8.0.0" + }, + "carbon_black_cloud": { + "endpoint_event": { + "schema": 1, + "event_origin": "EDR", + "process": { + "duration": 2, + "parent": { + "reputation": "REP_RESOLVING" + }, + "publisher": [ + { + "name": "Microsoft Windows", + "state": [ + "FILE_SIGNATURE_STATE_SIGNED", + "FILE_SIGNATURE_STATE_VERIFIED", + "FILE_SIGNATURE_STATE_TRUSTED", + "FILE_SIGNATURE_STATE_OS", + "FILE_SIGNATURE_STATE_CATALOG_SIGNED" + ] + } + ], + "reputation": "REP_RESOLVING", + "terminated": true, + "username": "NT AUTHORITY\\SYSTEM" + }, + "organization_key": "XXXXXXXX", + "backend": { + "timestamp": "2022-02-10 11:52:50 +0000 UTC" + }, + "target_cmdline": "\"route.exe\" print", + "type": "endpoint.event.procend", + "device": { + "os": "WINDOWS", + "timestamp": "2022-02-10 11:51:35.0684097 +0000 UTC", + "external_ip": "67.43.156.12" + }, + "sensor_action": "ACTION_ALLOW" + } + }, + "host": { + "hostname": "client-cb2", + "id": "4034605", + "os": { + "type": "windows" + }, + "ip": [ + "67.43.156.13" + ] + }, + "event": { + "action": "ACTION_PROCESS_TERMINATE", + "orignal": "{\"type\":\"endpoint.event.procend\",\"process_guid\":\"XXXXXXXX-003d902d-00001310-00000000-1d81e748c4adb37\",\"parent_guid\":\"XXXXXXXX-003d902d-00000694-00000000-1d7540221dedd62\",\"backend_timestamp\":\"2022-02-10 11:52:50 +0000 UTC\",\"org_key\":\"XXXXXXXX\",\"device_id\":\"4034605\",\"device_name\":\"client-cb2\",\"device_external_ip\":\"67.43.156.13\",\"device_os\":\"WINDOWS\",\"device_group\":\"\",\"action\":\"ACTION_PROCESS_TERMINATE\",\"schema\":1,\"device_timestamp\":\"2022-02-10 11:51:35.0684097 +0000 UTC\",\"process_terminated\":true,\"process_duration\":2,\"process_reputation\":\"REP_RESOLVING\",\"parent_reputation\":\"REP_RESOLVING\",\"process_pid\":4880,\"parent_pid\":1684,\"process_publisher\":[{\"name\":\"Microsoft Windows\",\"state\":\"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED\"}],\"process_path\":\"c:\\\\windows\\\\system32\\\\route.exe\",\"parent_path\":\"c:\\\\windowsazure\\\\guestagent_2.7.41491.1010_2021-05-11_233023\\\\guestagent\\\\windowsazureguestagent.exe\",\"process_hash\":[\"2498272dc48446891182747428d02a30\",\"9e9c7696859b94b1c33a532fa4d5c648226cf3361121dd899e502b8949fb11a6\"],\"parent_hash\":[\"03dd698da2671383c9b4f868c9931879\",\"44a1975b2197484bb22a0eb673e67e7ee9ec20265e9f6347f5e06b6447ac82c5\"],\"process_cmdline\":\"\\\"route.exe\\\" print\",\"parent_cmdline\":\"C:\\\\WindowsAzure\\\\GuestAgent_2.7.41491.1010_2021-05-11_233023\\\\GuestAgent\\\\WindowsAzureGuestAgent.exe\",\"process_username\":\"NT AUTHORITY\\\\SYSTEM\",\"sensor_action\":\"ACTION_ALLOW\",\"event_origin\":\"EDR\",\"target_cmdline\":\"\\\"route.exe\\\" print\"}" + }, + "data_stream": { + "dataset": "carbon_black_cloud.endpoint_event", + "namespace": "ep", + "type": "logs" + }, + "elastic_agent": { + "id": "3b20ea47-9610-412d-97e3-47cd19b7e4d5", + "snapshot": true, + "version": "8.0.0" + }, + "input": { + "type": "aws-s3" + }, + "tags": [ + "preserve_original_event", + "forwarded", + "carbon_black_cloud-endpoint-event" + ] +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/agent/stream/aws-s3.yml.hbs b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/agent/stream/aws-s3.yml.hbs new file mode 100755 index 0000000000..e02c596614 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/agent/stream/aws-s3.yml.hbs @@ -0,0 +1,24 @@ +bucket_arn: {{bucket_arn}} +number_of_workers: {{number_of_workers}} +bucket_list_interval: {{interval}} +access_key_id: {{access_key_id}} +secret_access_key: {{secret_access_key}} +bucket_list_prefix: {{bucket_list_prefix}} +expand_event_list_from_field: Records +{{#if proxy_url}} +proxy_url: {{proxy_url}} +{{/if}} +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/elasticsearch/ingest_pipeline/default.yml b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..34cfd2b869 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,281 @@ +--- +description: Pipeline for parsing Carbon Black Cloud watchlist hit. +processors: + - set: + field: ecs.version + value: '8.0.0' + - set: + field: event.kind + value: event + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: json + ignore_failure: true + - date: + field: json.create_time + target_field: "@timestamp" + ignore_failure: true + formats: + - ISO8601 + - rename: + field: json.severity + target_field: event.severity + ignore_missing: true + - convert: + field: json.device_id + target_field: host.id + type: string + ignore_missing: true + - set: + field: host.os.type + value: windows + if: ctx?.json?.device_os == "WINDOWS" + - set: + field: host.os.type + value: linux + if: ctx?.json?.device_os == "LINUX" + - set: + field: host.os.type + value: macos + if: ctx?.json?.device_os == "MAC" + - rename: + field: json.device_os_version + target_field: host.os.version + ignore_missing: true + - rename: + field: json.device_name + target_field: host.hostname + ignore_missing: true + - append: + field: host.ip + value: "{{{json.device_internal_ip}}}" + if: ctx?.json?.device_internal_ip != null + allow_duplicates: false + ignore_failure: true + - append: + field: host.ip + value: "{{{json.device_external_ip}}}" + if: ctx?.json?.device_external_ip != null + allow_duplicates: false + ignore_failure: true + - rename: + field: json.process_cmdline + target_field: process.command_line + ignore_missing: true + - rename: + field: json.process_guid + target_field: process.entity_id + ignore_missing: true + - rename: + field: json.process_path + target_field: process.executable + ignore_missing: true + - rename: + field: json.process_pid + target_field: process.pid + ignore_missing: true + - rename: + field: json.parent_cmdline + target_field: process.parent.command_line + ignore_missing: true + - rename: + field: json.parent_guid + target_field: process.parent.entity_id + ignore_missing: true + - rename: + field: json.parent_path + target_field: process.parent.executable + ignore_missing: true + - rename: + field: json.parent_pid + target_field: process.parent.pid + ignore_missing: true + - append: + field: related.ip + value: + - "{{{json.device_internal_ip}}}" + - "{{{json.device_external_ip}}}" + allow_duplicates: false + - append: + field: related.user + value: + - "{{{json.parent_username}}}" + - "{{{json.process_username}}}" + allow_duplicates: false + - append: + field: related.hosts + value: "{{{host.hostname}}}" + allow_duplicates: false + - script: + description: Dynamically map MD5 and SHA256 hash + lang: painless + source: | + void mapHashField(def ctx, def hashes, def key) { + for (hash in hashes) { + if (hash.length() == 32) {ctx["json"][key + "_md5"] = hash;} + if (hash.length() == 64) {ctx["json"][key + "_sha256"] = hash;} + } + } + if (ctx.json?.process_hash instanceof List) { + mapHashField(ctx, ctx.json?.process_hash, "process_hash"); + } + if (ctx.json?.parent_hash instanceof List) { + mapHashField(ctx, ctx.json?.parent_hash, "parent_hash"); + } + - rename: + field: json.process_hash_md5 + target_field: process.hash.md5 + ignore_missing: true + - rename: + field: json.process_hash_sha256 + target_field: process.hash.sha256 + ignore_missing: true + - rename: + field: json.parent_hash_md5 + target_field: process.parent.hash.md5 + ignore_missing: true + - rename: + field: json.parent_hash_sha256 + target_field: process.parent.hash.sha256 + ignore_missing: true + - append: + field: related.hash + value: + - "{{{process.hash.md5}}}" + - "{{{process.hash.sha256}}}" + - "{{{process.parent.hash.md5}}}" + - "{{{process.parent.hash.sha256}}}" + allow_duplicates: false + - rename: + field: json.device_os + target_field: carbon_black_cloud.watchlist_hit.device.os + ignore_missing: true + - rename: + field: json.device_internal_ip + target_field: carbon_black_cloud.watchlist_hit.device.internal_ip + ignore_missing: true + - rename: + field: json.device_external_ip + target_field: carbon_black_cloud.watchlist_hit.device.external_ip + ignore_missing: true + - rename: + field: json.ioc_hit + target_field: carbon_black_cloud.watchlist_hit.ioc.hit + ignore_missing: true + - rename: + field: json.ioc_id + target_field: carbon_black_cloud.watchlist_hit.ioc.id + ignore_missing: true + - rename: + field: json.org_key + target_field: carbon_black_cloud.watchlist_hit.organization_key + ignore_missing: true + - foreach: + field: json.parent_publisher + processor: + split: + field: _ingest._value.state + separator: " \\| " + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.parent_publisher + target_field: carbon_black_cloud.watchlist_hit.process.parent.publisher + ignore_missing: true + - rename: + field: json.parent_reputation + target_field: carbon_black_cloud.watchlist_hit.process.parent.reputation + ignore_missing: true + - rename: + field: json.parent_username + target_field: carbon_black_cloud.watchlist_hit.process.parent.username + ignore_missing: true + - foreach: + field: json.process_publisher + processor: + split: + field: _ingest._value.state + separator: " \\| " + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.process_publisher + target_field: carbon_black_cloud.watchlist_hit.process.publisher + ignore_missing: true + - rename: + field: json.process_reputation + target_field: carbon_black_cloud.watchlist_hit.process.reputation + ignore_missing: true + - rename: + field: json.process_username + target_field: carbon_black_cloud.watchlist_hit.process.username + ignore_missing: true + - rename: + field: json.report_id + target_field: carbon_black_cloud.watchlist_hit.report.id + ignore_missing: true + - rename: + field: json.report_name + target_field: carbon_black_cloud.watchlist_hit.report.name + ignore_missing: true + - rename: + field: json.report_tags + target_field: carbon_black_cloud.watchlist_hit.report.tags + ignore_missing: true + - script: + description: Drops null/empty values recursively + lang: painless + source: | + boolean dropEmptyFields(Object object) { + if (object == null || object == "") { + return true; + } else if (object instanceof Map) { + ((Map) object).values().removeIf(value -> dropEmptyFields(value)); + return (((Map) object).size() == 0); + } else if (object instanceof List) { + ((List) object).removeIf(value -> dropEmptyFields(value)); + return (((List) object).length == 0); + } + return false; + } + dropEmptyFields(ctx); + - remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_failure: true + - script: + description: Adds all the remaining fields in fields under carbon_black_cloud.watchlist_hit + lang: painless + if: ctx?.json != null + source: | + for (Map.Entry m : ctx.json.entrySet()) { + ctx.carbon_black_cloud.watchlist_hit[m.getKey()] = m.getValue(); + } + - remove: + field: + - json + - carbon_black_cloud.watchlist_hit.create_time + - carbon_black_cloud.watchlist_hit.device_id + - carbon_black_cloud.watchlist_hit.process_hash + - carbon_black_cloud.watchlist_hit.parent_hash + ignore_missing: true + - script: + description: Remove duplicate values + lang: painless + source: | + if (ctx?.related?.user != null) { + ctx.related.user = new HashSet(ctx.related.user) + } + if (ctx?.related?.hash != null) { + ctx.related.hash = new HashSet(ctx.related.hash) + } +on_failure: + - set: + field: error.message + value: "{{{_ingest.on_failure_message}}}" diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/fields/agent.yml b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/fields/agent.yml new file mode 100755 index 0000000000..e313ec8287 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/fields/agent.yml @@ -0,0 +1,204 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + +- name: input.type + type: keyword + description: Input type +- name: log.offset + type: long + description: Log offset diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/fields/base-fields.yml b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/fields/base-fields.yml new file mode 100755 index 0000000000..89df536282 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/fields/base-fields.yml @@ -0,0 +1,20 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. +- name: event.module + type: constant_keyword + description: Event module. + value: carbon_black_cloud +- name: event.dataset + type: constant_keyword + description: Event dataset. + value: carbon_black_cloud.watchlist_hit diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/fields/ecs.yml b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/fields/ecs.yml new file mode 100755 index 0000000000..ef721dde49 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/fields/ecs.yml @@ -0,0 +1,117 @@ +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. + `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. + The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. + name: event.kind + type: keyword +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: |- + The numeric severity of the event according to your event source. + What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. + The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. + name: event.severity + type: long +- description: |- + Hostname of the host. + It normally contains what the `hostname` command returns on the host machine. + name: host.hostname + type: keyword +- description: |- + Unique host id. + As hostname is not always unique, use values that are meaningful in your environment. + Example: The current usage of `beat.name`. + name: host.id + type: keyword +- description: Host ip addresses. + name: host.ip + type: ip +- description: |- + Use the `os.type` field to categorize the operating system into one of the broad commercial families. + One of these following values should be used (lowercase): linux, macos, unix, windows. + If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. + name: host.os.type + type: keyword +- description: |- + Full command line that started the process, including the absolute path to the executable, and all arguments. + Some arguments may be filtered to protect sensitive information. + multi_fields: + - name: text + type: match_only_text + name: process.command_line + type: wildcard +- description: |- + Unique identifier for the process. + The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. + Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts. + name: process.entity_id + type: keyword +- description: Absolute path to the process executable. + multi_fields: + - name: text + type: match_only_text + name: process.executable + type: keyword +- description: MD5 hash. + name: process.hash.md5 + type: keyword +- description: SHA256 hash. + name: process.hash.sha256 + type: keyword +- description: |- + Full command line that started the process, including the absolute path to the executable, and all arguments. + Some arguments may be filtered to protect sensitive information. + multi_fields: + - name: text + type: match_only_text + name: process.parent.command_line + type: wildcard +- description: |- + Unique identifier for the process. + The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. + Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts. + name: process.parent.entity_id + type: keyword +- description: Absolute path to the process executable. + multi_fields: + - name: text + type: match_only_text + name: process.parent.executable + type: keyword +- description: MD5 hash. + name: process.parent.hash.md5 + type: keyword +- description: SHA256 hash. + name: process.parent.hash.sha256 + type: keyword +- description: Process id. + name: process.parent.pid + type: long +- description: Process id. + name: process.pid + type: long +- description: All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). + name: related.hash + type: keyword +- description: All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases. + name: related.hosts + type: keyword +- description: All of the IPs seen on your event. + name: related.ip + type: ip +- description: All the user names or other user identifiers seen on the event. + name: related.user + type: keyword +- description: List of keywords used to tag each event. + name: tags + type: keyword diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/fields/fields.yml b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/fields/fields.yml new file mode 100755 index 0000000000..25cb25005e --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/fields/fields.yml @@ -0,0 +1,89 @@ +- name: carbon_black_cloud.watchlist_hit + type: group + fields: + - name: device + type: group + fields: + - name: os + type: keyword + description: OS Type of device (Windows/OSX/Linux). + - name: internal_ip + type: ip + description: Internal IP of the device. + - name: external_ip + type: ip + description: External IP of the device. + - name: ioc + type: group + fields: + - name: field + type: keyword + description: Field the IOC hit contains. + - name: hit + type: keyword + description: IOC field value, or IOC query that matches. + - name: id + type: keyword + description: ID of the IOC that caused the hit. + - name: organization_key + type: keyword + description: The organization key associated with the console instance. + - name: process + type: group + fields: + - name: parent + type: group + fields: + - name: publisher + type: group + description: signature entry for the process as reported by the endpoint. + fields: + - name: name + type: keyword + description: The name of the publisher. + - name: state + type: keyword + description: The state of the publisher. + - name: reputation + type: keyword + description: Reputation of the actor process; applied when event is processed by the Carbon Black Cloud i.e. after sensor delivers event to the cloud. + - name: username + type: keyword + description: The username associated with the user context that this process was started under. + - name: publisher + type: group + description: signature entry for the process as reported by the endpoint. + - name: reputation + type: keyword + description: Reputation of the actor process; applied when event is processed by the Carbon Black Cloud i.e. after sensor delivers event to the cloud. + - name: username + type: keyword + description: The username associated with the user context that this process was started under. + - name: report + type: group + fields: + - name: id + type: keyword + description: ID of the watchlist report(s) that detected a hit on the process. + - name: name + type: keyword + description: Name of the watchlist report(s) that detected a hit on the process. + - name: tags + type: keyword + description: List of tags associated with the report(s) that detected a hit on the process. + - name: schema + type: long + description: Schema version. + - name: type + type: keyword + description: The watchlist hit type. + - name: watchlists + type: group + description: List of watchlists that contain the report of the ioc hit. + fields: + - name: id + type: keyword + description: The ID of the watchlists. + - name: name + type: keyword + description: The name of the watchlists. diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/manifest.yml b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/manifest.yml new file mode 100755 index 0000000000..7782458210 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/manifest.yml @@ -0,0 +1,48 @@ +title: Watchlist Hit +type: logs +streams: + - input: aws-s3 + title: Collect watchlist hit from Carbon Black Cloud + description: Collect watchlist hit from Carbon Black Cloud. + template_path: aws-s3.yml.hbs + vars: + - name: bucket_list_prefix + type: text + title: Bucket Prefix + description: Prefix to apply for the list request to the S3 bucket. + multi: false + required: true + show_user: true + - name: interval + type: text + title: Interval + description: Interval to fetch watchlist hit from AWS S3 bucket. + multi: false + required: true + show_user: true + default: 1m + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - carbon_black_cloud-watchlist-hit + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original`. + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: >- + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. diff --git a/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/sample_event.json b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/sample_event.json new file mode 100755 index 0000000000..0a5e6c32fb --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/data_stream/watchlist_hit/sample_event.json @@ -0,0 +1,130 @@ +{ + "tags": [ + "preserve_original_event", + "forwarded", + "carbon_black_cloud-watchlist-hit" + ], + "input": { + "type": "aws-s3" + }, + "data_stream": { + "namespace": "default", + "type": "logs", + "dataset": "carbon_black_cloud.watchlist_hit" + }, + "agent": { + "id": "e0d5f508-9616-400f-b26b-bb1aa6638b80", + "type": "filebeat", + "version": "8.0.0" + }, + "ecs": { + "version": "8.0.0" + }, + "process": { + "parent": { + "pid": 4076, + "entity_id": "7DESJ9GN-00442a47-00000fec-00000000-1d81ed87d4655d1", + "command_line": "C:\\WINDOWS\\system32\\cmd.exe /c \"sc query aella_conf | findstr RUNNING \u003e null\"", + "executable": "c:\\windows\\syswow64\\cmd.exe", + "hash": { + "sha256": "4d89fc34d5f0f9babd022271c585a9477bf41e834e46b991deaa0530fdb25e22", + "md5": "d0fce3afa6aa1d58ce9fa336cc2b675b" + } + }, + "pid": 7516, + "entity_id": "7DESJ9GN-00442a47-00001d5c-00000000-1d81ed87d63d2c6", + "command_line": "sc query aella_conf ", + "executable": "c:\\windows\\syswow64\\sc.exe", + "hash": { + "sha256": "4fe6d9eb8109fb79ff645138de7cff37906867aade589bd68afa503a9ab3cfb2", + "md5": "d9d7684b8431a0d10d0e76fe9f5ffec8" + } + }, + "carbon_black_cloud": { + "watchlist_hit": { + "schema": 1, + "process": { + "parent": { + "publisher": [ + { + "name": "Microsoft Windows", + "state": [ + "FILE_SIGNATURE_STATE_SIGNED", + "FILE_SIGNATURE_STATE_VERIFIED", + "FILE_SIGNATURE_STATE_TRUSTED", + "FILE_SIGNATURE_STATE_OS", + "FILE_SIGNATURE_STATE_CATALOG_SIGNED" + ] + } + ], + "reputation": "REP_WHITE", + "username": "NT AUTHORITY\\SYSTEM" + }, + "publisher": [ + { + "name": "Microsoft Windows", + "state": [ + "FILE_SIGNATURE_STATE_SIGNED", + "FILE_SIGNATURE_STATE_VERIFIED", + "FILE_SIGNATURE_STATE_TRUSTED", + "FILE_SIGNATURE_STATE_OS", + "FILE_SIGNATURE_STATE_CATALOG_SIGNED" + ] + } + ], + "reputation": "REP_WHITE", + "username": "NT AUTHORITY\\SYSTEM" + }, + "organization_key": "xxxxxxxx", + "report": { + "name": "Discovery - System Service Discovery Detected", + "id": "CFnKBKLTv6hUkBGFobRdg-565571", + "tags": [ + "attack", + "attackframework", + "threathunting", + "hunting", + "t1007", + "recon", + "discovery", + "windows" + ] + }, + "watchlists": [ + { + "name": "ATT\u0026CK Framework", + "id": "P5f9AW29TGmTOvBW156Cig" + } + ], + "type": "watchlist.hit", + "ioc": { + "hit": "((process_name:sc.exe -parent_name:svchost.exe) AND process_cmdline:query) -enriched:true", + "id": "565571-0" + }, + "device": { + "internal_ip": "10.10.156.12", + "external_ip": "67.43.156.12", + "os": "WINDOWS" + } + } + }, + "host": { + "hostname": "Carbonblack-win1", + "os": { + "type": "windows" + }, + "ip": [ + "10.10.156.12", + "67.43.156.12" + ], + "id": "4467271" + }, + "event": { + "kind": "event", + "severity": 3, + "agent_id_status": "verified", + "ingested": "2022-02-17T07:23:31Z", + "original": "{\"schema\":1,\"create_time\":\"2022-02-10T23:54:32.449Z\",\"device_external_ip\":\"205.234.30.196\",\"device_id\":4467271,\"device_internal_ip\":\"10.33.4.214\",\"device_name\":\"Carbonblack-win1\",\"device_os\":\"WINDOWS\",\"ioc_hit\":\"((process_name:sc.exe -parent_name:svchost.exe) AND process_cmdline:query) -enriched:true\",\"ioc_id\":\"565571-0\",\"org_key\":\"7DESJ9GN\",\"parent_cmdline\":\"C:\\\\WINDOWS\\\\system32\\\\cmd.exe /c \\\"sc query aella_conf | findstr RUNNING \\u003e null\\\"\",\"parent_guid\":\"7DESJ9GN-00442a47-00000fec-00000000-1d81ed87d4655d1\",\"parent_hash\":[\"d0fce3afa6aa1d58ce9fa336cc2b675b\",\"4d89fc34d5f0f9babd022271c585a9477bf41e834e46b991deaa0530fdb25e22\"],\"parent_path\":\"c:\\\\windows\\\\syswow64\\\\cmd.exe\",\"parent_pid\":4076,\"parent_publisher\":[{\"name\":\"Microsoft Windows\",\"state\":\"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED\"}],\"parent_reputation\":\"REP_WHITE\",\"parent_username\":\"NT AUTHORITY\\\\SYSTEM\",\"process_cmdline\":\"sc query aella_conf \",\"process_guid\":\"7DESJ9GN-00442a47-00001d5c-00000000-1d81ed87d63d2c6\",\"process_hash\":[\"d9d7684b8431a0d10d0e76fe9f5ffec8\",\"4fe6d9eb8109fb79ff645138de7cff37906867aade589bd68afa503a9ab3cfb2\"],\"process_path\":\"c:\\\\windows\\\\syswow64\\\\sc.exe\",\"process_pid\":7516,\"process_publisher\":[{\"name\":\"Microsoft Windows\",\"state\":\"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED\"}],\"process_reputation\":\"REP_WHITE\",\"process_username\":\"NT AUTHORITY\\\\SYSTEM\",\"report_id\":\"CFnKBKLTv6hUkBGFobRdg-565571\",\"report_name\":\"Discovery - System Service Discovery Detected\",\"report_tags\":[\"attack\",\"attackframework\",\"threathunting\",\"hunting\",\"t1007\",\"recon\",\"discovery\",\"windows\"],\"severity\":3,\"type\":\"watchlist.hit\",\"watchlists\":[{\"id\":\"P5f9AW29TGmTOvBW156Cig\",\"name\":\"ATT\\u0026CK Framework\"}]}", + "dataset": "carbon_black_cloud.watchlist_hit" + } +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/docs/README.md b/packages/carbon_black_cloud/0.1.0/docs/README.md new file mode 100755 index 0000000000..da9e5a67df --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/docs/README.md @@ -0,0 +1,1037 @@ +# Carbon Black Cloud + +The Carbon Black Cloud integration collects and parses data from the Carbon Black Cloud REST APIs and AWS S3 bucket. + +## Compatibility + +This module has been tested against `Alerts API(v6)`, `Audit Log Events (v3)` and `Vulnerability Assessment (v1)`. + +## Requirements + +### In order to ingest data from the AWS S3 bucket you must: +1. Configure the [Data Forwarder](https://docs.vmware.com/en/VMware-Carbon-Black-Cloud/services/carbon-black-cloud-user-guide/GUID-F68F63DD-2271-4088-82C9-71D675CD0535.html) to ingest data into an AWS S3 bucket. +2. Create an [AWS Access Keys and Secret Access Keys](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys). + + +### In order to ingest data from the APIs you must generate API keys and API Secret Keys: +1. In Carbon Black Cloud, On the left navigation pane, click **Settings > API Access**. +2. Click Add API Key. +3. Give the API key a unique name and description. + - Select the appropriate access level type. Please check required Access Levels & Permissions for integration in below table. + **Note:** To use a custom access level, select Custom from the Access Level type drop-down menu and specify the Custom Access Level. + - Optional: Add authorized IP addresses. + - You can restrict the use of an API key to a specific set of IP addresses for security reasons. + **Note:** Authorized IP addresses are not available with Custom keys. +4. To apply the changes, click Save. + +#### Access Levels & Permissions +- The following tables indicate which type of API Key access level is required. If the type is Custom then the permission that is required will also be included. + +| Data stream | Access Level and Permissions | +| --------------------------- | ------------------------------------------ | +| Audit | API | +| Alert | Custom orgs.alerts (Read) | +| Asset Vulnerability Summary | Custom vulnerabilityAssessment.data (Read) | + + +## Note + +- The alert data stream has a 15-minute delay to ensure that no occurrences are missed. + +## Logs + +### Audit + +This is the `audit` dataset. + +An example event for `audit` looks as following: + +```json +{ + "@timestamp": "2022-02-10T16:04:30.263Z", + "agent": { + "ephemeral_id": "73949384-44ec-4f97-ad25-de968d945811", + "id": "926269e0-99fc-41d6-aee2-6eed3c276741", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "carbon_black_cloud": { + "audit": { + "flagged": false, + "verbose": false + } + }, + "client": { + "ip": "10.10.10.10", + "user": { + "id": "abc@demo.com" + } + }, + "data_stream": { + "dataset": "carbon_black_cloud.audit", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "926269e0-99fc-41d6-aee2-6eed3c276741", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "created": "2022-03-14T03:11:56.654Z", + "dataset": "carbon_black_cloud.audit", + "id": "2122f8ce8xxxxxxxxxxxxx", + "ingested": "2022-03-14T03:12:00Z", + "kind": "event", + "original": "{\"clientIp\":\"10.10.10.10\",\"description\":\"Logged in successfully\",\"eventId\":\"2122f8ce8xxxxxxxxxxxxx\",\"eventTime\":1644509070263,\"flagged\":false,\"loginName\":\"abc@demo.com\",\"orgName\":\"cb-xxxx-xxxx.com\",\"requestUrl\":null,\"verbose\":false}", + "outcome": "success", + "reason": "Logged in successfully" + }, + "input": { + "type": "httpjson" + }, + "organization": { + "name": "cb-xxxx-xxxx.com" + }, + "related": { + "ip": [ + "10.10.10.10" + ] + }, + "tags": [ + "preserve_original_event", + "forwarded", + "carbon_black_cloud-audit" + ] +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| carbon_black_cloud.audit.flagged | true if action is failed otherwise false. | boolean | +| carbon_black_cloud.audit.verbose | true if verbose audit log otherwise false. | boolean | +| client.ip | IP address of the client (IPv4 or IPv6). | ip | +| client.user.id | Unique identifier of the user. | keyword | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| event.dataset | Event dataset. | constant_keyword | +| event.id | Unique ID to describe the event. | keyword | +| event.module | Event module. | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.outcome | This is one of four ECS Categorization Fields, and indicates the lowest level in the ECS category hierarchy. `event.outcome` simply denotes whether the event represents a success or a failure from the perspective of the entity that produced the event. Note that when a single transaction is described in multiple events, each event may populate different values of `event.outcome`, according to their perspective. Also note that in the case of a compound event (a single event that contains multiple logical events), this field should be populated with the value that best captures the overall success or failure from the perspective of the event producer. Further note that not all events will have an associated outcome. For example, this field is generally not populated for metric events, events with `event.type:info`, or any events for which an outcome does not make logical sense. | keyword | +| event.reason | Reason why this event happened, according to the source. This describes the why of a particular action or outcome captured in the event. Where `event.action` captures the action from the event, `event.reason` describes why that action was taken. For example, a web proxy with an `event.action` which denied the request may also populate `event.reason` with the reason why (e.g. `blocked site`). | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Input type | keyword | +| log.offset | Log offset | long | +| organization.name | Organization name. | keyword | +| organization.name.text | Multi-field of `organization.name`. | match_only_text | +| related.ip | All of the IPs seen on your event. | ip | +| tags | List of keywords used to tag each event. | keyword | +| url.original | Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not. | wildcard | +| url.original.text | Multi-field of `url.original`. | match_only_text | + + +### Alert + +This is the `alert` dataset. + +An example event for `alert` looks as following: + +```json +{ + "@timestamp": "2020-11-17T22:05:13.000Z", + "agent": { + "ephemeral_id": "3102b667-53be-4efc-b035-9d72bef2853f", + "hostname": "docker-fleet-agent", + "id": "1465e432-24f3-456b-98ab-e79cdc8d86f6", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "7.17.0" + }, + "carbon_black_cloud": { + "alert": { + "category": "warning", + "device": { + "external_ip": "81.2.69.143", + "internal_ip": "81.2.69.144", + "location": "UNKNOWN", + "os": "WINDOWS" + }, + "last_update_time": "2020-11-17T22:05:13Z", + "legacy_alert_id": "C8EB7306-AF26-4A9A-B677-814B3AF69720", + "organization_key": "ABCD6X3T", + "policy": { + "applied": "APPLIED", + "id": 6997287, + "name": "Standard" + }, + "product_id": "0x5406", + "product_name": "U3 Cruzer Micro", + "reason_code": "6D578342-9DE5-4353-9C25-1D3D857BFC5B:DCAEB1FA-513C-4026-9AB6-37A935873FBC", + "run_state": "DID_NOT_RUN", + "sensor_action": "DENY", + "serial_number": "0875920EF7C2A304", + "target_value": "MEDIUM", + "threat_cause": { + "cause_event_id": "FCEE2AF0-D832-4C9F-B988-F11B46028C9E", + "threat_category": "NON_MALWARE", + "vector": "REMOVABLE_MEDIA" + }, + "threat_id": "t5678", + "type": "DEVICE_CONTROL", + "vendor_id": "0x0781", + "vendor_name": "SanDisk", + "workflow": { + "changed_by": "Carbon Black", + "last_update_time": "2020-11-17T22:02:16Z", + "state": "OPEN" + } + } + }, + "data_stream": { + "dataset": "carbon_black_cloud.alert", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "1465e432-24f3-456b-98ab-e79cdc8d86f6", + "snapshot": false, + "version": "7.17.0" + }, + "event": { + "agent_id_status": "verified", + "created": "2022-04-05T10:25:54.372Z", + "dataset": "carbon_black_cloud.alert", + "end": "2020-11-17T22:02:16Z", + "id": "test1", + "ingested": "2022-04-05T10:25:57Z", + "kind": "alert", + "original": "{\"alert_url\":\"https://defense-eap01.conferdeploy.net/alerts?orgId=1889976\",\"category\":\"WARNING\",\"create_time\":\"2020-11-17T22:05:13Z\",\"device_external_ip\":\"81.2.69.143\",\"device_id\":2,\"device_internal_ip\":\"81.2.69.144\",\"device_location\":\"UNKNOWN\",\"device_name\":\"DESKTOP-002\",\"device_os\":\"WINDOWS\",\"device_os_version\":\"Windows 10 x64\",\"device_username\":\"test34@demo.com\",\"first_event_time\":\"2020-11-17T22:02:16Z\",\"id\":\"test1\",\"last_event_time\":\"2020-11-17T22:02:16Z\",\"last_update_time\":\"2020-11-17T22:05:13Z\",\"legacy_alert_id\":\"C8EB7306-AF26-4A9A-B677-814B3AF69720\",\"org_key\":\"ABCD6X3T\",\"policy_applied\":\"APPLIED\",\"policy_id\":6997287,\"policy_name\":\"Standard\",\"product_id\":\"0x5406\",\"product_name\":\"U3 Cruzer Micro\",\"reason\":\"Access attempted on unapproved USB device SanDisk U3 Cruzer Micro (SN: 0875920EF7C2A304). A Deny Policy Action was applied.\",\"reason_code\":\"6D578342-9DE5-4353-9C25-1D3D857BFC5B:DCAEB1FA-513C-4026-9AB6-37A935873FBC\",\"run_state\":\"DID_NOT_RUN\",\"sensor_action\":\"DENY\",\"serial_number\":\"0875920EF7C2A304\",\"severity\":3,\"target_value\":\"MEDIUM\",\"threat_cause_cause_event_id\":\"FCEE2AF0-D832-4C9F-B988-F11B46028C9E\",\"threat_cause_threat_category\":\"NON_MALWARE\",\"threat_cause_vector\":\"REMOVABLE_MEDIA\",\"threat_id\":\"t5678\",\"type\":\"DEVICE_CONTROL\",\"vendor_id\":\"0x0781\",\"vendor_name\":\"SanDisk\",\"workflow\":{\"changed_by\":\"Carbon Black\",\"comment\":\"\",\"last_update_time\":\"2020-11-17T22:02:16Z\",\"remediation\":\"\",\"state\":\"OPEN\"}}", + "reason": "Access attempted on unapproved USB device SanDisk U3 Cruzer Micro (SN: 0875920EF7C2A304). A Deny Policy Action was applied.", + "severity": 3, + "start": "2020-11-17T22:02:16Z", + "url": "https://defense-eap01.conferdeploy.net/alerts?orgId=1889976" + }, + "host": { + "hostname": "DESKTOP-002", + "id": "2", + "ip": [ + "81.2.69.144", + "81.2.69.143" + ], + "os": { + "type": "windows", + "version": "Windows 10 x64" + } + }, + "input": { + "type": "httpjson" + }, + "related": { + "hosts": [ + "DESKTOP-002" + ], + "ip": [ + "81.2.69.144", + "81.2.69.143" + ], + "user": [ + "test34@demo.com" + ] + }, + "tags": [ + "preserve_original_event", + "forwarded", + "carbon_black_cloud-alert" + ], + "user": { + "name": "test34@demo.com" + } +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| carbon_black_cloud.alert.blocked_threat_category | The category of threat which we were able to take action on. | keyword | +| carbon_black_cloud.alert.category | The category of the alert. | keyword | +| carbon_black_cloud.alert.count | | long | +| carbon_black_cloud.alert.created_by_event_id | Event identifier that initiated the alert. | keyword | +| carbon_black_cloud.alert.device.external_ip | External IP of the device. | ip | +| carbon_black_cloud.alert.device.internal_ip | Internal IP of the device. | ip | +| carbon_black_cloud.alert.device.location | The Location of device. | keyword | +| carbon_black_cloud.alert.device.os | OS of the device. | keyword | +| carbon_black_cloud.alert.document_guid | Unique ID of document. | keyword | +| carbon_black_cloud.alert.ioc.field | The field the indicator of comprise (IOC) hit contains. | keyword | +| carbon_black_cloud.alert.ioc.hit | IOC field value or IOC query that matches. | keyword | +| carbon_black_cloud.alert.ioc.id | The identifier of the IOC that cause the hit. | keyword | +| carbon_black_cloud.alert.kill_chain_status | The stage within the Cyber Kill Chain sequence most closely associated with the attributes of the alert. | keyword | +| carbon_black_cloud.alert.last_update_time | The last time the alert was updated as an ISO 8601 UTC timestamp. | date | +| carbon_black_cloud.alert.legacy_alert_id | The legacy identifier for the alert. | keyword | +| carbon_black_cloud.alert.not_blocked_threat_category | Other potentially malicious activity involved in the threat that we weren't able to take action on (either due to policy config, or not having a relevant rule). | keyword | +| carbon_black_cloud.alert.notes_present | Indicates if notes are associated with the threat_id. | boolean | +| carbon_black_cloud.alert.organization_key | The unique identifier for the organization associated with the alert. | keyword | +| carbon_black_cloud.alert.policy.applied | Whether a policy was applied. | keyword | +| carbon_black_cloud.alert.policy.id | The identifier for the policy associated with the device at the time of the alert. | long | +| carbon_black_cloud.alert.policy.name | The name of the policy associated with the device at the time of the alert. | keyword | +| carbon_black_cloud.alert.product_id | The hexadecimal id of the USB device's product. | keyword | +| carbon_black_cloud.alert.product_name | The name of the USB device’s vendor. | keyword | +| carbon_black_cloud.alert.reason_code | Shorthand enum for the full-text reason. | keyword | +| carbon_black_cloud.alert.report.id | The identifier of the report that contains the IOC. | keyword | +| carbon_black_cloud.alert.report.name | The name of the report that contains the IOC. | keyword | +| carbon_black_cloud.alert.run_state | Whether the threat in the alert ran. | keyword | +| carbon_black_cloud.alert.sensor_action | The action taken by the sensor, according to the rule of the policy. | keyword | +| carbon_black_cloud.alert.serial_number | The serial number of the USB device. | keyword | +| carbon_black_cloud.alert.status | status of alert. | keyword | +| carbon_black_cloud.alert.tags | Tags associated with the alert. | keyword | +| carbon_black_cloud.alert.target_value | The priority of the device assigned by the policy. | keyword | +| carbon_black_cloud.alert.threat_activity.c2 | Whether the alert involved a command and control (c2) server. | keyword | +| carbon_black_cloud.alert.threat_activity.dlp | Whether the alert involved data loss prevention (DLP). | keyword | +| carbon_black_cloud.alert.threat_activity.phish | Whether the alert involved phishing. | keyword | +| carbon_black_cloud.alert.threat_cause.actor.md5 | MD5 of the threat cause actor. | keyword | +| carbon_black_cloud.alert.threat_cause.actor.name | The name can be one of the following: process commandline, process name, or analytic matched threat. Analytic matched threats are Exploit, Malware, PUP, or Trojan. | keyword | +| carbon_black_cloud.alert.threat_cause.actor.process_pid | Process identifier (PID) of the actor process. | keyword | +| carbon_black_cloud.alert.threat_cause.actor.sha256 | SHA256 of the threat cause actor. | keyword | +| carbon_black_cloud.alert.threat_cause.cause_event_id | ID of the Event that triggered the threat. | keyword | +| carbon_black_cloud.alert.threat_cause.process.guid | The global unique identifier of the process. | keyword | +| carbon_black_cloud.alert.threat_cause.process.parent.guid | The global unique identifier of the process. | keyword | +| carbon_black_cloud.alert.threat_cause.reputation | Reputation of the threat cause. | keyword | +| carbon_black_cloud.alert.threat_cause.threat_category | Category of the threat cause. | keyword | +| carbon_black_cloud.alert.threat_cause.vector | The source of the threat cause. | keyword | +| carbon_black_cloud.alert.threat_id | The identifier of a threat which this alert belongs. Threats are comprised of a combination of factors that can be repeated across devices. | keyword | +| carbon_black_cloud.alert.threat_indicators.process_name | Process name associated with threat. | keyword | +| carbon_black_cloud.alert.threat_indicators.sha256 | Sha256 associated with threat. | keyword | +| carbon_black_cloud.alert.threat_indicators.ttps | Tactics, techniques and procedures associated with threat. | keyword | +| carbon_black_cloud.alert.type | Type of alert. | keyword | +| carbon_black_cloud.alert.vendor_id | The hexadecimal id of the USB device's vendor. | keyword | +| carbon_black_cloud.alert.vendor_name | The name of the USB device’s vendor. | keyword | +| carbon_black_cloud.alert.watchlists.id | The identifier of watchlist. | keyword | +| carbon_black_cloud.alert.watchlists.name | The name of the watchlist. | keyword | +| carbon_black_cloud.alert.workflow.changed_by | The name of user who changed the workflow. | keyword | +| carbon_black_cloud.alert.workflow.comment | Comment associated with workflow. | keyword | +| carbon_black_cloud.alert.workflow.last_update_time | The last update time of workflow. | date | +| carbon_black_cloud.alert.workflow.remediation | N/A | keyword | +| carbon_black_cloud.alert.workflow.state | The state of workflow. | keyword | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| event.dataset | Event dataset. | constant_keyword | +| event.end | event.end contains the date when the event ended or when the activity was last observed. | date | +| event.id | Unique ID to describe the event. | keyword | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module. | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.reason | Reason why this event happened, according to the source. This describes the why of a particular action or outcome captured in the event. Where `event.action` captures the action from the event, `event.reason` describes why that action was taken. For example, a web proxy with an `event.action` which denied the request may also populate `event.reason` with the reason why (e.g. `blocked site`). | keyword | +| event.severity | The numeric severity of the event according to your event source. What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. | long | +| event.start | event.start contains the date when the event started or when the activity was first observed. | date | +| event.url | URL linking to an external system to continue investigation of this event. This URL links to another system where in-depth investigation of the specific occurrence of this event can take place. Alert events, indicated by `event.kind:alert`, are a common use case for this field. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.type | Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Input type | keyword | +| log.offset | Log offset | long | +| process.entity_id | Unique identifier for the process. The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts. | keyword | +| process.executable | Absolute path to the process executable. | keyword | +| process.executable.text | Multi-field of `process.executable`. | match_only_text | +| process.name | Process name. Sometimes called program name or similar. | keyword | +| process.name.text | Multi-field of `process.name`. | match_only_text | +| related.hash | All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). | keyword | +| related.hosts | All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases. | keyword | +| related.ip | All of the IPs seen on your event. | ip | +| related.user | All the user names or other user identifiers seen on the event. | keyword | +| tags | List of keywords used to tag each event. | keyword | +| user.name | Short name or login of the user. | keyword | +| user.name.text | Multi-field of `user.name`. | match_only_text | + + +### Endpoint Event + +This is the `endpoint_event` dataset. + +An example event for `endpoint_event` looks as following: + +```json +{ + "process": { + "parent": { + "pid": 1684, + "entity_id": "XXXXXXXX-003d902d-00000694-00000000-1d7540221dedd62", + "command_line": "C:\\WindowsAzure\\GuestAgent_2.7.41491.1010_2021-05-11_233023\\GuestAgent\\WindowsAzureGuestAgent.exe", + "executable": "c:\\windowsazure\\guestagent_2.7.41491.1010_2021-05-11_233023\\guestagent\\windowsazureguestagent.exe", + "hash": { + "sha256": "44a1975b2197484bb22a0eb673e67e7ee9ec20265e9f6347f5e06b6447ac82c5", + "md5": "03dd698da2671383c9b4f868c9931879" + } + }, + "pid": 4880, + "entity_id": "XXXXXXXX-003d902d-00001310-00000000-1d81e748c4adb37", + "command_line": "\"route.exe\" print", + "executable": "c:\\windows\\system32\\route.exe", + "hash": { + "sha256": "9e9c7696859b94b1c33a532fa4d5c648226cf3361121dd899e502b8949fb11a6", + "md5": "2498272dc48446891182747428d02a30" + } + }, + "ecs": { + "version": "8.0.0" + }, + "carbon_black_cloud": { + "endpoint_event": { + "schema": 1, + "event_origin": "EDR", + "process": { + "duration": 2, + "parent": { + "reputation": "REP_RESOLVING" + }, + "publisher": [ + { + "name": "Microsoft Windows", + "state": [ + "FILE_SIGNATURE_STATE_SIGNED", + "FILE_SIGNATURE_STATE_VERIFIED", + "FILE_SIGNATURE_STATE_TRUSTED", + "FILE_SIGNATURE_STATE_OS", + "FILE_SIGNATURE_STATE_CATALOG_SIGNED" + ] + } + ], + "reputation": "REP_RESOLVING", + "terminated": true, + "username": "NT AUTHORITY\\SYSTEM" + }, + "organization_key": "XXXXXXXX", + "backend": { + "timestamp": "2022-02-10 11:52:50 +0000 UTC" + }, + "target_cmdline": "\"route.exe\" print", + "type": "endpoint.event.procend", + "device": { + "os": "WINDOWS", + "timestamp": "2022-02-10 11:51:35.0684097 +0000 UTC", + "external_ip": "67.43.156.12" + }, + "sensor_action": "ACTION_ALLOW" + } + }, + "host": { + "hostname": "client-cb2", + "id": "4034605", + "os": { + "type": "windows" + }, + "ip": [ + "67.43.156.13" + ] + }, + "event": { + "action": "ACTION_PROCESS_TERMINATE", + "orignal": "{\"type\":\"endpoint.event.procend\",\"process_guid\":\"XXXXXXXX-003d902d-00001310-00000000-1d81e748c4adb37\",\"parent_guid\":\"XXXXXXXX-003d902d-00000694-00000000-1d7540221dedd62\",\"backend_timestamp\":\"2022-02-10 11:52:50 +0000 UTC\",\"org_key\":\"XXXXXXXX\",\"device_id\":\"4034605\",\"device_name\":\"client-cb2\",\"device_external_ip\":\"67.43.156.13\",\"device_os\":\"WINDOWS\",\"device_group\":\"\",\"action\":\"ACTION_PROCESS_TERMINATE\",\"schema\":1,\"device_timestamp\":\"2022-02-10 11:51:35.0684097 +0000 UTC\",\"process_terminated\":true,\"process_duration\":2,\"process_reputation\":\"REP_RESOLVING\",\"parent_reputation\":\"REP_RESOLVING\",\"process_pid\":4880,\"parent_pid\":1684,\"process_publisher\":[{\"name\":\"Microsoft Windows\",\"state\":\"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED\"}],\"process_path\":\"c:\\\\windows\\\\system32\\\\route.exe\",\"parent_path\":\"c:\\\\windowsazure\\\\guestagent_2.7.41491.1010_2021-05-11_233023\\\\guestagent\\\\windowsazureguestagent.exe\",\"process_hash\":[\"2498272dc48446891182747428d02a30\",\"9e9c7696859b94b1c33a532fa4d5c648226cf3361121dd899e502b8949fb11a6\"],\"parent_hash\":[\"03dd698da2671383c9b4f868c9931879\",\"44a1975b2197484bb22a0eb673e67e7ee9ec20265e9f6347f5e06b6447ac82c5\"],\"process_cmdline\":\"\\\"route.exe\\\" print\",\"parent_cmdline\":\"C:\\\\WindowsAzure\\\\GuestAgent_2.7.41491.1010_2021-05-11_233023\\\\GuestAgent\\\\WindowsAzureGuestAgent.exe\",\"process_username\":\"NT AUTHORITY\\\\SYSTEM\",\"sensor_action\":\"ACTION_ALLOW\",\"event_origin\":\"EDR\",\"target_cmdline\":\"\\\"route.exe\\\" print\"}" + }, + "data_stream": { + "dataset": "carbon_black_cloud.endpoint_event", + "namespace": "ep", + "type": "logs" + }, + "elastic_agent": { + "id": "3b20ea47-9610-412d-97e3-47cd19b7e4d5", + "snapshot": true, + "version": "8.0.0" + }, + "input": { + "type": "aws-s3" + }, + "tags": [ + "preserve_original_event", + "forwarded", + "carbon_black_cloud-endpoint-event" + ] +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| carbon_black_cloud.endpoint_event.alert_id | The ID of the Alert this event is associated with. | keyword | +| carbon_black_cloud.endpoint_event.backend.timestamp | Time when the backend received the batch of events. | keyword | +| carbon_black_cloud.endpoint_event.childproc.guid | Unique ID of the child process. | keyword | +| carbon_black_cloud.endpoint_event.childproc.hash.md5 | Cryptographic MD5 hashes of the executable file backing the child process. | keyword | +| carbon_black_cloud.endpoint_event.childproc.hash.sha256 | Cryptographic SHA256 hashes of the executable file backing the child process. | keyword | +| carbon_black_cloud.endpoint_event.childproc.name | Full path to the target of the crossproc event on the device's local file system. | keyword | +| carbon_black_cloud.endpoint_event.childproc.pid | OS-reported Process ID of the child process. | long | +| carbon_black_cloud.endpoint_event.childproc.publisher.name | The name of the publisher. | keyword | +| carbon_black_cloud.endpoint_event.childproc.publisher.state | The state of the publisher. | keyword | +| carbon_black_cloud.endpoint_event.childproc.reputation | Carbon Black Cloud Reputation string for the childproc. | keyword | +| carbon_black_cloud.endpoint_event.childproc.username | The username associated with the user context that the child process was started under. | keyword | +| carbon_black_cloud.endpoint_event.crossproc.action | The action taken on cross-process. | keyword | +| carbon_black_cloud.endpoint_event.crossproc.api | Name of the operating system API called by the actor process. | keyword | +| carbon_black_cloud.endpoint_event.crossproc.guid | Unique ID of the cross process. | keyword | +| carbon_black_cloud.endpoint_event.crossproc.hash.md5 | Cryptographic MD5 hashes of the target of the crossproc event. | keyword | +| carbon_black_cloud.endpoint_event.crossproc.hash.sha256 | Cryptographic SHA256 hashes of the target of the crossproc event. | keyword | +| carbon_black_cloud.endpoint_event.crossproc.name | Full path to the target of the crossproc event on the device's local file system. | keyword | +| carbon_black_cloud.endpoint_event.crossproc.publisher.name | The name of the publisher. | keyword | +| carbon_black_cloud.endpoint_event.crossproc.publisher.state | The state of the publisher. | keyword | +| carbon_black_cloud.endpoint_event.crossproc.reputation | Carbon Black Cloud Reputation string for the crossproc. | keyword | +| carbon_black_cloud.endpoint_event.crossproc.target | True if the process was the target of the cross-process event; false if the process was the actor. | boolean | +| carbon_black_cloud.endpoint_event.device.external_ip | External IP of the device. | ip | +| carbon_black_cloud.endpoint_event.device.internal_ip | Internal IP of the device. | ip | +| carbon_black_cloud.endpoint_event.device.os | Os name. | keyword | +| carbon_black_cloud.endpoint_event.device.timestamp | Time seen on sensor. | keyword | +| carbon_black_cloud.endpoint_event.event_origin | Indicates which product the event came from. "EDR" indicates the event originated from Enterprise EDR. "NGAV" indicates the event originated from Endpoint Standard. | keyword | +| carbon_black_cloud.endpoint_event.fileless_scriptload.cmdline | Deobfuscated script content run in a fileless context by the process. | keyword | +| carbon_black_cloud.endpoint_event.fileless_scriptload.cmdline_length | Character count of the deobfuscated script content run in a fileless context. | keyword | +| carbon_black_cloud.endpoint_event.fileless_scriptload.hash.md5 | MD5 hash of the deobfuscated script content run by the process in a fileless context. | keyword | +| carbon_black_cloud.endpoint_event.fileless_scriptload.hash.sha256 | SHA-256 hash of the deobfuscated script content run by the process in a fileless context. | keyword | +| carbon_black_cloud.endpoint_event.modload.count | Count of modload events reported by the sensor since last initialization. | long | +| carbon_black_cloud.endpoint_event.modload.effective_reputation | Effective reputation(s) of the loaded module(s); applied by the sensor when the event occurred. | keyword | +| carbon_black_cloud.endpoint_event.modload.publisher.name | The name of the publisher. | keyword | +| carbon_black_cloud.endpoint_event.modload.publisher.state | The state of the publisher. | keyword | +| carbon_black_cloud.endpoint_event.netconn.proxy.domain | DNS name associated with the "proxy" end of this network connection; may be empty if the name cannot be inferred or the connection is made direct to/from a proxy IP address. | keyword | +| carbon_black_cloud.endpoint_event.netconn.proxy.ip | IPv4 or IPv6 address in string format associated with the "proxy" end of this network connection. | keyword | +| carbon_black_cloud.endpoint_event.netconn.proxy.port | UDP/TCP port number associated with the "proxy" end of this network connection. | keyword | +| carbon_black_cloud.endpoint_event.organization_key | The organization key associated with the console instance. | keyword | +| carbon_black_cloud.endpoint_event.process.duration | The time difference in seconds between the process start and process terminate event. | long | +| carbon_black_cloud.endpoint_event.process.parent.reputation | Reputation of the parent process; applied when event is processed by the Carbon Black Cloud i.e. after sensor delivers event to the cloud. | keyword | +| carbon_black_cloud.endpoint_event.process.publisher.name | The name of the publisher. | keyword | +| carbon_black_cloud.endpoint_event.process.publisher.state | The state of the publisher. | keyword | +| carbon_black_cloud.endpoint_event.process.reputation | Reputation of the actor process; applied when event is processed by the Carbon Black Cloud i.e. after sensor delivers event to the cloud. | keyword | +| carbon_black_cloud.endpoint_event.process.terminated | True if process was terminated elase false. | boolean | +| carbon_black_cloud.endpoint_event.process.username | The username associated with the user context that this process was started under. | keyword | +| carbon_black_cloud.endpoint_event.schema | The schema version. The current schema version is "1". This schema version will only be incremented if the field definitions are changed in a backwards-incompatible way. | long | +| carbon_black_cloud.endpoint_event.scriptload.count | Count of scriptload events across all processes reported by the sensor since last initialization. | long | +| carbon_black_cloud.endpoint_event.scriptload.effective_reputation | Effective reputation(s) of the script file(s) loaded at process launch; applied by the sensor when the event occurred. | keyword | +| carbon_black_cloud.endpoint_event.scriptload.hash.md5 | Cryptographic MD5 hashes of the target of the scriptload event. | keyword | +| carbon_black_cloud.endpoint_event.scriptload.hash.sha256 | Cryptographic SHA256 hashes of the target of the scriptload event. | keyword | +| carbon_black_cloud.endpoint_event.scriptload.name | Full path to the target of the crossproc event on the device's local file system. | keyword | +| carbon_black_cloud.endpoint_event.scriptload.publisher.name | The name of the publisher. | keyword | +| carbon_black_cloud.endpoint_event.scriptload.publisher.state | The state of the publisher. | keyword | +| carbon_black_cloud.endpoint_event.scriptload.reputation | Carbon Black Cloud Reputation string for the scriptload. | keyword | +| carbon_black_cloud.endpoint_event.sensor_action | The sensor action taken on event. | keyword | +| carbon_black_cloud.endpoint_event.target_cmdline | Process command line associated with the target process. | keyword | +| carbon_black_cloud.endpoint_event.type | The event type. | keyword | +| client.ip | IP address of the client (IPv4 or IPv6). | ip | +| client.port | Port of the client. | long | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| dll.hash.md5 | MD5 hash. | keyword | +| dll.hash.sha256 | SHA256 hash. | keyword | +| dll.path | Full file path of the library. | keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| event.action | The action captured by the event. This describes the information in the event. It is more specific than `event.category`. Examples are `group-add`, `process-started`, `file-created`. The value is normally defined by the implementer. | keyword | +| event.dataset | Event dataset. | constant_keyword | +| event.id | Unique ID to describe the event. | keyword | +| event.module | Event module. | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.reason | Reason why this event happened, according to the source. This describes the why of a particular action or outcome captured in the event. Where `event.action` captures the action from the event, `event.reason` describes why that action was taken. For example, a web proxy with an `event.action` which denied the request may also populate `event.reason` with the reason why (e.g. `blocked site`). | keyword | +| file.hash.md5 | MD5 hash. | keyword | +| file.hash.sha256 | SHA256 hash. | keyword | +| file.path | Full path to the file, including the file name. It should include the drive letter, when appropriate. | keyword | +| file.path.text | Multi-field of `file.path`. | match_only_text | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Input type | keyword | +| log.offset | Log offset | long | +| network.direction | Direction of the network traffic. Recommended values are: \* ingress \* egress \* inbound \* outbound \* internal \* external \* unknown When mapping events from a host-based monitoring context, populate this field from the host's point of view, using the values "ingress" or "egress". When mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of the network perimeter, using the values "inbound", "outbound", "internal" or "external". Note that "internal" is not crossing perimeter boundaries, and is meant to describe communication between two hosts within the perimeter. Note also that "external" is meant to describe traffic between two hosts that are external to the perimeter. This could for example be useful for ISPs or VPN service providers. | keyword | +| network.transport | Same as network.iana_number, but instead using the Keyword name of the transport layer (udp, tcp, ipv6-icmp, etc.) The field value must be normalized to lowercase for querying. | keyword | +| process.command_line | Full command line that started the process, including the absolute path to the executable, and all arguments. Some arguments may be filtered to protect sensitive information. | wildcard | +| process.command_line.text | Multi-field of `process.command_line`. | match_only_text | +| process.entity_id | Unique identifier for the process. The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts. | keyword | +| process.executable | Absolute path to the process executable. | keyword | +| process.executable.text | Multi-field of `process.executable`. | match_only_text | +| process.hash.md5 | MD5 hash. | keyword | +| process.hash.sha256 | SHA256 hash. | keyword | +| process.parent.command_line | Full command line that started the process, including the absolute path to the executable, and all arguments. Some arguments may be filtered to protect sensitive information. | wildcard | +| process.parent.command_line.text | Multi-field of `process.parent.command_line`. | match_only_text | +| process.parent.entity_id | Unique identifier for the process. The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts. | keyword | +| process.parent.executable | Absolute path to the process executable. | keyword | +| process.parent.executable.text | Multi-field of `process.parent.executable`. | match_only_text | +| process.parent.hash.md5 | MD5 hash. | keyword | +| process.parent.hash.sha256 | SHA256 hash. | keyword | +| process.parent.pid | Process id. | long | +| process.pid | Process id. | long | +| registry.path | Full path, including hive, key and value | keyword | +| related.hash | All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). | keyword | +| related.hosts | All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases. | keyword | +| related.ip | All of the IPs seen on your event. | ip | +| related.user | All the user names or other user identifiers seen on the event. | keyword | +| source.address | Some event source addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. | keyword | +| source.ip | IP address of the source (IPv4 or IPv6). | ip | +| source.port | Port of the source. | long | +| tags | List of keywords used to tag each event. | keyword | + + +### Watchlist Hit + +This is the `watchlist_hit` dataset. + +An example event for `watchlist_hit` looks as following: + +```json +{ + "tags": [ + "preserve_original_event", + "forwarded", + "carbon_black_cloud-watchlist-hit" + ], + "input": { + "type": "aws-s3" + }, + "data_stream": { + "namespace": "default", + "type": "logs", + "dataset": "carbon_black_cloud.watchlist_hit" + }, + "agent": { + "id": "e0d5f508-9616-400f-b26b-bb1aa6638b80", + "type": "filebeat", + "version": "8.0.0" + }, + "ecs": { + "version": "8.0.0" + }, + "process": { + "parent": { + "pid": 4076, + "entity_id": "7DESJ9GN-00442a47-00000fec-00000000-1d81ed87d4655d1", + "command_line": "C:\\WINDOWS\\system32\\cmd.exe /c \"sc query aella_conf | findstr RUNNING \u003e null\"", + "executable": "c:\\windows\\syswow64\\cmd.exe", + "hash": { + "sha256": "4d89fc34d5f0f9babd022271c585a9477bf41e834e46b991deaa0530fdb25e22", + "md5": "d0fce3afa6aa1d58ce9fa336cc2b675b" + } + }, + "pid": 7516, + "entity_id": "7DESJ9GN-00442a47-00001d5c-00000000-1d81ed87d63d2c6", + "command_line": "sc query aella_conf ", + "executable": "c:\\windows\\syswow64\\sc.exe", + "hash": { + "sha256": "4fe6d9eb8109fb79ff645138de7cff37906867aade589bd68afa503a9ab3cfb2", + "md5": "d9d7684b8431a0d10d0e76fe9f5ffec8" + } + }, + "carbon_black_cloud": { + "watchlist_hit": { + "schema": 1, + "process": { + "parent": { + "publisher": [ + { + "name": "Microsoft Windows", + "state": [ + "FILE_SIGNATURE_STATE_SIGNED", + "FILE_SIGNATURE_STATE_VERIFIED", + "FILE_SIGNATURE_STATE_TRUSTED", + "FILE_SIGNATURE_STATE_OS", + "FILE_SIGNATURE_STATE_CATALOG_SIGNED" + ] + } + ], + "reputation": "REP_WHITE", + "username": "NT AUTHORITY\\SYSTEM" + }, + "publisher": [ + { + "name": "Microsoft Windows", + "state": [ + "FILE_SIGNATURE_STATE_SIGNED", + "FILE_SIGNATURE_STATE_VERIFIED", + "FILE_SIGNATURE_STATE_TRUSTED", + "FILE_SIGNATURE_STATE_OS", + "FILE_SIGNATURE_STATE_CATALOG_SIGNED" + ] + } + ], + "reputation": "REP_WHITE", + "username": "NT AUTHORITY\\SYSTEM" + }, + "organization_key": "xxxxxxxx", + "report": { + "name": "Discovery - System Service Discovery Detected", + "id": "CFnKBKLTv6hUkBGFobRdg-565571", + "tags": [ + "attack", + "attackframework", + "threathunting", + "hunting", + "t1007", + "recon", + "discovery", + "windows" + ] + }, + "watchlists": [ + { + "name": "ATT\u0026CK Framework", + "id": "P5f9AW29TGmTOvBW156Cig" + } + ], + "type": "watchlist.hit", + "ioc": { + "hit": "((process_name:sc.exe -parent_name:svchost.exe) AND process_cmdline:query) -enriched:true", + "id": "565571-0" + }, + "device": { + "internal_ip": "10.10.156.12", + "external_ip": "67.43.156.12", + "os": "WINDOWS" + } + } + }, + "host": { + "hostname": "Carbonblack-win1", + "os": { + "type": "windows" + }, + "ip": [ + "10.10.156.12", + "67.43.156.12" + ], + "id": "4467271" + }, + "event": { + "kind": "event", + "severity": 3, + "agent_id_status": "verified", + "ingested": "2022-02-17T07:23:31Z", + "original": "{\"schema\":1,\"create_time\":\"2022-02-10T23:54:32.449Z\",\"device_external_ip\":\"205.234.30.196\",\"device_id\":4467271,\"device_internal_ip\":\"10.33.4.214\",\"device_name\":\"Carbonblack-win1\",\"device_os\":\"WINDOWS\",\"ioc_hit\":\"((process_name:sc.exe -parent_name:svchost.exe) AND process_cmdline:query) -enriched:true\",\"ioc_id\":\"565571-0\",\"org_key\":\"7DESJ9GN\",\"parent_cmdline\":\"C:\\\\WINDOWS\\\\system32\\\\cmd.exe /c \\\"sc query aella_conf | findstr RUNNING \\u003e null\\\"\",\"parent_guid\":\"7DESJ9GN-00442a47-00000fec-00000000-1d81ed87d4655d1\",\"parent_hash\":[\"d0fce3afa6aa1d58ce9fa336cc2b675b\",\"4d89fc34d5f0f9babd022271c585a9477bf41e834e46b991deaa0530fdb25e22\"],\"parent_path\":\"c:\\\\windows\\\\syswow64\\\\cmd.exe\",\"parent_pid\":4076,\"parent_publisher\":[{\"name\":\"Microsoft Windows\",\"state\":\"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED\"}],\"parent_reputation\":\"REP_WHITE\",\"parent_username\":\"NT AUTHORITY\\\\SYSTEM\",\"process_cmdline\":\"sc query aella_conf \",\"process_guid\":\"7DESJ9GN-00442a47-00001d5c-00000000-1d81ed87d63d2c6\",\"process_hash\":[\"d9d7684b8431a0d10d0e76fe9f5ffec8\",\"4fe6d9eb8109fb79ff645138de7cff37906867aade589bd68afa503a9ab3cfb2\"],\"process_path\":\"c:\\\\windows\\\\syswow64\\\\sc.exe\",\"process_pid\":7516,\"process_publisher\":[{\"name\":\"Microsoft Windows\",\"state\":\"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED\"}],\"process_reputation\":\"REP_WHITE\",\"process_username\":\"NT AUTHORITY\\\\SYSTEM\",\"report_id\":\"CFnKBKLTv6hUkBGFobRdg-565571\",\"report_name\":\"Discovery - System Service Discovery Detected\",\"report_tags\":[\"attack\",\"attackframework\",\"threathunting\",\"hunting\",\"t1007\",\"recon\",\"discovery\",\"windows\"],\"severity\":3,\"type\":\"watchlist.hit\",\"watchlists\":[{\"id\":\"P5f9AW29TGmTOvBW156Cig\",\"name\":\"ATT\\u0026CK Framework\"}]}", + "dataset": "carbon_black_cloud.watchlist_hit" + } +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| carbon_black_cloud.watchlist_hit.device.external_ip | External IP of the device. | ip | +| carbon_black_cloud.watchlist_hit.device.internal_ip | Internal IP of the device. | ip | +| carbon_black_cloud.watchlist_hit.device.os | OS Type of device (Windows/OSX/Linux). | keyword | +| carbon_black_cloud.watchlist_hit.ioc.field | Field the IOC hit contains. | keyword | +| carbon_black_cloud.watchlist_hit.ioc.hit | IOC field value, or IOC query that matches. | keyword | +| carbon_black_cloud.watchlist_hit.ioc.id | ID of the IOC that caused the hit. | keyword | +| carbon_black_cloud.watchlist_hit.organization_key | The organization key associated with the console instance. | keyword | +| carbon_black_cloud.watchlist_hit.process.parent.publisher.name | The name of the publisher. | keyword | +| carbon_black_cloud.watchlist_hit.process.parent.publisher.state | The state of the publisher. | keyword | +| carbon_black_cloud.watchlist_hit.process.parent.reputation | Reputation of the actor process; applied when event is processed by the Carbon Black Cloud i.e. after sensor delivers event to the cloud. | keyword | +| carbon_black_cloud.watchlist_hit.process.parent.username | The username associated with the user context that this process was started under. | keyword | +| carbon_black_cloud.watchlist_hit.process.reputation | Reputation of the actor process; applied when event is processed by the Carbon Black Cloud i.e. after sensor delivers event to the cloud. | keyword | +| carbon_black_cloud.watchlist_hit.process.username | The username associated with the user context that this process was started under. | keyword | +| carbon_black_cloud.watchlist_hit.report.id | ID of the watchlist report(s) that detected a hit on the process. | keyword | +| carbon_black_cloud.watchlist_hit.report.name | Name of the watchlist report(s) that detected a hit on the process. | keyword | +| carbon_black_cloud.watchlist_hit.report.tags | List of tags associated with the report(s) that detected a hit on the process. | keyword | +| carbon_black_cloud.watchlist_hit.schema | Schema version. | long | +| carbon_black_cloud.watchlist_hit.type | The watchlist hit type. | keyword | +| carbon_black_cloud.watchlist_hit.watchlists.id | The ID of the watchlists. | keyword | +| carbon_black_cloud.watchlist_hit.watchlists.name | The name of the watchlists. | keyword | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| event.dataset | Event dataset. | constant_keyword | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module. | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.severity | The numeric severity of the event according to your event source. What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. | long | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.type | Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Input type | keyword | +| log.offset | Log offset | long | +| process.command_line | Full command line that started the process, including the absolute path to the executable, and all arguments. Some arguments may be filtered to protect sensitive information. | wildcard | +| process.command_line.text | Multi-field of `process.command_line`. | match_only_text | +| process.entity_id | Unique identifier for the process. The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts. | keyword | +| process.executable | Absolute path to the process executable. | keyword | +| process.executable.text | Multi-field of `process.executable`. | match_only_text | +| process.hash.md5 | MD5 hash. | keyword | +| process.hash.sha256 | SHA256 hash. | keyword | +| process.parent.command_line | Full command line that started the process, including the absolute path to the executable, and all arguments. Some arguments may be filtered to protect sensitive information. | wildcard | +| process.parent.command_line.text | Multi-field of `process.parent.command_line`. | match_only_text | +| process.parent.entity_id | Unique identifier for the process. The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts. | keyword | +| process.parent.executable | Absolute path to the process executable. | keyword | +| process.parent.executable.text | Multi-field of `process.parent.executable`. | match_only_text | +| process.parent.hash.md5 | MD5 hash. | keyword | +| process.parent.hash.sha256 | SHA256 hash. | keyword | +| process.parent.pid | Process id. | long | +| process.pid | Process id. | long | +| related.hash | All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). | keyword | +| related.hosts | All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases. | keyword | +| related.ip | All of the IPs seen on your event. | ip | +| related.user | All the user names or other user identifiers seen on the event. | keyword | +| tags | List of keywords used to tag each event. | keyword | + + +### Asset Vulnerability Summary + +This is the `asset_vulnerability_summary` dataset. + +An example event for `asset_vulnerability_summary` looks as following: + +```json +{ + "@timestamp": "2022-04-05T12:07:27.035Z", + "agent": { + "ephemeral_id": "90b0b6ec-10f9-41d4-94a5-b47c68f6b376", + "hostname": "docker-fleet-agent", + "id": "1465e432-24f3-456b-98ab-e79cdc8d86f6", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "7.17.0" + }, + "carbon_black_cloud": { + "asset_vulnerability_summary": { + "last_sync": { + "timestamp": "2022-01-17T08:33:37.384Z" + }, + "os_info": { + "os_arch": "64-bit" + }, + "sync": { + "status": "COMPLETED", + "type": "SCHEDULED" + }, + "type": "ENDPOINT", + "vuln_count": 1770 + } + }, + "data_stream": { + "dataset": "carbon_black_cloud.asset_vulnerability_summary", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "1465e432-24f3-456b-98ab-e79cdc8d86f6", + "snapshot": false, + "version": "7.17.0" + }, + "event": { + "agent_id_status": "verified", + "created": "2022-04-05T12:07:27.035Z", + "dataset": "carbon_black_cloud.asset_vulnerability_summary", + "ingested": "2022-04-05T12:07:27Z", + "original": "{\"cve_ids\":null,\"device_id\":8,\"highest_risk_score\":10,\"host_name\":\"DESKTOP-008\",\"last_sync_ts\":\"2022-01-17T08:33:37.384932Z\",\"name\":\"DESKTOP-008KK\",\"os_info\":{\"os_arch\":\"64-bit\",\"os_name\":\"Microsoft Windows 10 Education\",\"os_type\":\"WINDOWS\",\"os_version\":\"10.0.17763\"},\"severity\":\"CRITICAL\",\"sync_status\":\"COMPLETED\",\"sync_type\":\"SCHEDULED\",\"type\":\"ENDPOINT\",\"vm_id\":\"\",\"vm_name\":\"\",\"vuln_count\":1770}" + }, + "host": { + "hostname": "DESKTOP-008", + "id": "8", + "name": "DESKTOP-008KK", + "os": { + "name": "Microsoft Windows 10 Education", + "type": "windows", + "version": "10.0.17763" + } + }, + "input": { + "type": "httpjson" + }, + "related": { + "hosts": [ + "DESKTOP-008" + ] + }, + "tags": [ + "preserve_original_event", + "forwarded", + "carbon_black_cloud-asset-vulnerability-summary" + ], + "vulnerability": { + "score": { + "base": 10 + }, + "severity": "CRITICAL" + } +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| carbon_black_cloud.asset_vulnerability_summary.last_sync.timestamp | The identifier is for the Last sync time. | date | +| carbon_black_cloud.asset_vulnerability_summary.os_info.os_arch | The identifier is for the Operating system architecture. | keyword | +| carbon_black_cloud.asset_vulnerability_summary.sync.status | The identifier is for the Device sync status. | keyword | +| carbon_black_cloud.asset_vulnerability_summary.sync.type | The identifier is for the Whether a manual sync was triggered for the device, or if it was a scheduled sync. | keyword | +| carbon_black_cloud.asset_vulnerability_summary.type | The identifier is for the Device type. | keyword | +| carbon_black_cloud.asset_vulnerability_summary.vm.id | The identifier is for the Virtual Machine ID. | keyword | +| carbon_black_cloud.asset_vulnerability_summary.vm.name | The identifier is for the Virtual Machine name. | keyword | +| carbon_black_cloud.asset_vulnerability_summary.vuln_count | The identifier is for the Number of vulnerabilities at this level. | integer | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| event.dataset | Event dataset | constant_keyword | +| event.module | Event module | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.type | Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Input type | keyword | +| log.offset | Log offset | long | +| related.hosts | All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases. | keyword | +| tags | List of keywords used to tag each event. | keyword | +| vulnerability.score.base | Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Base scores cover an assessment for exploitability metrics (attack vector, complexity, privileges, and user interaction), impact metrics (confidentiality, integrity, and availability), and scope. For example (https://www.first.org/cvss/specification-document) | float | +| vulnerability.severity | The severity of the vulnerability can help with metrics and internal prioritization regarding remediation. For example (https://nvd.nist.gov/vuln-metrics/cvss) | keyword | diff --git a/packages/carbon_black_cloud/0.1.0/img/carbon_black_cloud-logo.svg b/packages/carbon_black_cloud/0.1.0/img/carbon_black_cloud-logo.svg new file mode 100755 index 0000000000..180cc3d212 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/img/carbon_black_cloud-logo.svg @@ -0,0 +1,91 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/carbon_black_cloud/0.1.0/img/carbon_black_cloud-screenshot.png b/packages/carbon_black_cloud/0.1.0/img/carbon_black_cloud-screenshot.png new file mode 100755 index 0000000000..6fda3c108d Binary files /dev/null and b/packages/carbon_black_cloud/0.1.0/img/carbon_black_cloud-screenshot.png differ diff --git a/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-869252c0-8d71-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-869252c0-8d71-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..129cd1c62a --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-869252c0-8d71-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,42 @@ +{ + "attributes": { + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.audit\\\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"table\":null,\"vis\":{\"params\":{\"colWidth\":[{\"colIndex\":0,\"width\":831}]}}},\"gridData\":{\"h\":15,\"i\":\"c8d90872-b3b3-447d-a9fc-ada6409efeb2\",\"w\":48,\"x\":0,\"y\":0},\"panelIndex\":\"c8d90872-b3b3-447d-a9fc-ada6409efeb2\",\"panelRefName\":\"panel_0\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"16128cf1-2134-46a9-9fd3-19889a2a6c9e\",\"w\":24,\"x\":0,\"y\":15},\"panelIndex\":\"16128cf1-2134-46a9-9fd3-19889a2a6c9e\",\"panelRefName\":\"panel_1\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"84a10ea8-959c-4fe7-852d-835b3786ed17\",\"w\":24,\"x\":24,\"y\":15},\"panelIndex\":\"84a10ea8-959c-4fe7-852d-835b3786ed17\",\"panelRefName\":\"panel_2\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":18,\"i\":\"cd3e5a79-3640-47ff-95cd-c54debb5ee2d\",\"w\":48,\"x\":0,\"y\":30},\"panelIndex\":\"cd3e5a79-3640-47ff-95cd-c54debb5ee2d\",\"panelRefName\":\"panel_3\",\"type\":\"search\",\"version\":\"7.17.0\"}]", + "timeRestore": false, + "title": "[Carbon Black Cloud] Audit Logs", + "version": 1 + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-869252c0-8d71-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "dashboard": "7.17.0" + }, + "references": [ + { + "id": "carbon_black_cloud-ee2098d0-8d70-11ec-ac12-4bc77fa14e95", + "name": "panel_0", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-0f420ad0-8d71-11ec-ac12-4bc77fa14e95", + "name": "panel_1", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-a6d2a900-8d70-11ec-ac12-4bc77fa14e95", + "name": "panel_2", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-4272e690-8d71-11ec-ac12-4bc77fa14e95", + "name": "panel_3", + "type": "search" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-a94cd3a0-962a-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-a94cd3a0-962a-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..e3f216759c --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-a94cd3a0-962a-11ec-864c-3332b2a355f7.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"savedVis\":{\"data\":{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Event Type\",\"field\":\"carbon_black_cloud.endpoint_event.type\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"searchSource\":{\"filter\":[],\"index\":\"logs-*\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"\",\"type\":\"pie\",\"uiState\":{\"vis\":{\"legendOpen\":true}}},\"vis\":{\"legendOpen\":true}},\"gridData\":{\"h\":15,\"i\":\"f19543f7-04f5-42dd-849b-5f2fd8ca15f8\",\"w\":24,\"x\":0,\"y\":0},\"panelIndex\":\"f19543f7-04f5-42dd-849b-5f2fd8ca15f8\",\"title\":\"[Carbon Black Cloud] Top 10 Event Types\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"bee43023-c427-4176-ba31-2c4831cbc44e\",\"w\":24,\"x\":24,\"y\":0},\"panelIndex\":\"bee43023-c427-4176-ba31-2c4831cbc44e\",\"panelRefName\":\"panel_0\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"1727b9fb-4ba0-4f78-aa54-0d52db62b624\",\"w\":24,\"x\":0,\"y\":15},\"panelIndex\":\"1727b9fb-4ba0-4f78-aa54-0d52db62b624\",\"panelRefName\":\"panel_1\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"10a11498-6416-4b72-adc6-78a5d7937428\",\"w\":24,\"x\":24,\"y\":15},\"panelIndex\":\"10a11498-6416-4b72-adc6-78a5d7937428\",\"panelRefName\":\"panel_2\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"719006b6-32b2-4ed0-aecd-a1a1f37b471b\",\"w\":24,\"x\":0,\"y\":30},\"panelIndex\":\"719006b6-32b2-4ed0-aecd-a1a1f37b471b\",\"panelRefName\":\"panel_3\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"735f366c-91c5-4f33-961f-4db200acc05c\",\"w\":24,\"x\":24,\"y\":30},\"panelIndex\":\"735f366c-91c5-4f33-961f-4db200acc05c\",\"panelRefName\":\"panel_4\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"14a95a5a-61e8-459c-95bc-d1b11eed9054\",\"w\":24,\"x\":0,\"y\":45},\"panelIndex\":\"14a95a5a-61e8-459c-95bc-d1b11eed9054\",\"panelRefName\":\"panel_5\",\"title\":\"[Carbon Black Cloud] Top 10 Device External IP\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"3cc67760-3bba-4282-b91e-db120e8abe4e\",\"w\":24,\"x\":24,\"y\":45},\"panelIndex\":\"3cc67760-3bba-4282-b91e-db120e8abe4e\",\"panelRefName\":\"panel_6\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"9df5251e-52af-4509-b30e-d62f8ef9a3a3\",\"w\":24,\"x\":0,\"y\":60},\"panelIndex\":\"9df5251e-52af-4509-b30e-d62f8ef9a3a3\",\"panelRefName\":\"panel_7\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"04d664de-8814-4314-8f6e-2774b11ab572\",\"w\":24,\"x\":24,\"y\":60},\"panelIndex\":\"04d664de-8814-4314-8f6e-2774b11ab572\",\"panelRefName\":\"panel_8\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"c80e4ab0-c5b5-4916-9025-d006a37aa7ba\",\"w\":24,\"x\":0,\"y\":75},\"panelIndex\":\"c80e4ab0-c5b5-4916-9025-d006a37aa7ba\",\"panelRefName\":\"panel_9\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"f57a7bf6-bc25-433b-8019-6489124907b6\",\"w\":24,\"x\":24,\"y\":75},\"panelIndex\":\"f57a7bf6-bc25-433b-8019-6489124907b6\",\"panelRefName\":\"panel_10\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"c9984aec-8f3f-456a-aa80-b1fc314eb681\",\"w\":24,\"x\":0,\"y\":90},\"panelIndex\":\"c9984aec-8f3f-456a-aa80-b1fc314eb681\",\"panelRefName\":\"panel_11\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"3232147b-0914-4432-ba42-0c6c03414e4b\",\"w\":24,\"x\":24,\"y\":90},\"panelIndex\":\"3232147b-0914-4432-ba42-0c6c03414e4b\",\"panelRefName\":\"panel_12\",\"title\":\"[Carbon Black Cloud] Top 10 Effective Reputation of Loaded Modules\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":16,\"i\":\"391470e2-57a0-46c7-86bd-f66c6eb2ed66\",\"w\":48,\"x\":0,\"y\":105},\"panelIndex\":\"391470e2-57a0-46c7-86bd-f66c6eb2ed66\",\"panelRefName\":\"panel_13\",\"type\":\"search\",\"version\":\"7.17.0\"}]", + "timeRestore": false, + "title": "[Carbon Black Cloud] Endpoint Event", + "version": 1 + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-a94cd3a0-962a-11ec-864c-3332b2a355f7", + "migrationVersion": { + "dashboard": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "f19543f7-04f5-42dd-849b-5f2fd8ca15f8:kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "carbon_black_cloud-3afe1750-9630-11ec-864c-3332b2a355f7", + "name": "panel_0", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-11df3480-9630-11ec-864c-3332b2a355f7", + "name": "panel_1", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-c6cfa8d0-962f-11ec-864c-3332b2a355f7", + "name": "panel_2", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-2d324250-963e-11ec-864c-3332b2a355f7", + "name": "panel_3", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-949c1d00-9628-11ec-864c-3332b2a355f7", + "name": "panel_4", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-f28910d0-9628-11ec-864c-3332b2a355f7", + "name": "panel_5", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-76fe1db0-962e-11ec-864c-3332b2a355f7", + "name": "panel_6", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-ae34ca40-962e-11ec-864c-3332b2a355f7", + "name": "panel_7", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-f7681be0-962e-11ec-864c-3332b2a355f7", + "name": "panel_8", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-2be6ad50-962f-11ec-864c-3332b2a355f7", + "name": "panel_9", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-53d65ef0-962f-11ec-864c-3332b2a355f7", + "name": "panel_10", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-7a6261e0-962f-11ec-864c-3332b2a355f7", + "name": "panel_11", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-a7ce1420-9630-11ec-864c-3332b2a355f7", + "name": "panel_12", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-6494a7e0-9640-11ec-864c-3332b2a355f7", + "name": "panel_13", + "type": "search" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-af030950-8d73-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-af030950-8d73-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..4a9c10d677 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-af030950-8d73-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,147 @@ +{ + "attributes": { + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"savedVis\":{\"data\":{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Category\",\"field\":\"carbon_black_cloud.alert.category\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"searchSource\":{\"filter\":[],\"index\":\"logs-*\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"\",\"type\":\"pie\",\"uiState\":{\"vis\":{\"legendOpen\":true}}}},\"gridData\":{\"h\":15,\"i\":\"a63e66da-6fdb-432e-8cd3-9beeceb7187e\",\"w\":16,\"x\":0,\"y\":0},\"panelIndex\":\"a63e66da-6fdb-432e-8cd3-9beeceb7187e\",\"panelRefName\":\"panel_0\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"savedVis\":{\"data\":{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Alert Type\",\"field\":\"carbon_black_cloud.alert.type\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":5},\"schema\":\"segment\",\"type\":\"terms\"}],\"searchSource\":{\"filter\":[],\"index\":\"logs-*\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"\",\"type\":\"pie\",\"uiState\":{\"vis\":{\"legendOpen\":true}}}},\"gridData\":{\"h\":15,\"i\":\"3b39bb5c-6d43-4bac-9551-dd3db3def5da\",\"w\":16,\"x\":16,\"y\":0},\"panelIndex\":\"3b39bb5c-6d43-4bac-9551-dd3db3def5da\",\"panelRefName\":\"panel_1\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"5e9e34e5-35be-4f6c-922a-fb15daf002ab\",\"w\":16,\"x\":32,\"y\":0},\"panelIndex\":\"5e9e34e5-35be-4f6c-922a-fb15daf002ab\",\"panelRefName\":\"panel_2\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"7cba8aeb-90ad-4db5-8050-6093f8b51f56\",\"w\":24,\"x\":0,\"y\":15},\"panelIndex\":\"7cba8aeb-90ad-4db5-8050-6093f8b51f56\",\"panelRefName\":\"panel_3\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"vis\":{\"legendOpen\":true}},\"gridData\":{\"h\":15,\"i\":\"bb01cff3-1557-42ad-ad1a-0cca9f44b658\",\"w\":24,\"x\":24,\"y\":15},\"panelIndex\":\"bb01cff3-1557-42ad-ad1a-0cca9f44b658\",\"panelRefName\":\"panel_4\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"fdcee22b-9a7d-4b00-af40-ebe01d7e8b28\",\"w\":24,\"x\":0,\"y\":30},\"panelIndex\":\"fdcee22b-9a7d-4b00-af40-ebe01d7e8b28\",\"panelRefName\":\"panel_5\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"3d50fe5a-b808-407c-830e-1badfb14b4b4\",\"w\":24,\"x\":24,\"y\":30},\"panelIndex\":\"3d50fe5a-b808-407c-830e-1badfb14b4b4\",\"panelRefName\":\"panel_6\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"e7610078-a6b5-47e0-9739-ee08f84a39c8\",\"w\":24,\"x\":0,\"y\":45},\"panelIndex\":\"e7610078-a6b5-47e0-9739-ee08f84a39c8\",\"panelRefName\":\"panel_7\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"93081e97-c841-4eb2-bfa3-6d214cb10282\",\"w\":24,\"x\":24,\"y\":45},\"panelIndex\":\"93081e97-c841-4eb2-bfa3-6d214cb10282\",\"panelRefName\":\"panel_8\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"920d0841-19a5-4052-a5c6-4c2bcea8feee\",\"w\":24,\"x\":0,\"y\":60},\"panelIndex\":\"920d0841-19a5-4052-a5c6-4c2bcea8feee\",\"panelRefName\":\"panel_9\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"2aab11a6-0445-43ae-b852-de68e72bc9f6\",\"w\":24,\"x\":24,\"y\":60},\"panelIndex\":\"2aab11a6-0445-43ae-b852-de68e72bc9f6\",\"panelRefName\":\"panel_10\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"64eae241-7f78-45c4-9ec8-f2c1195a5fa2\",\"w\":24,\"x\":0,\"y\":75},\"panelIndex\":\"64eae241-7f78-45c4-9ec8-f2c1195a5fa2\",\"panelRefName\":\"panel_11\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"8f0964cf-d899-481f-b1e2-138d3e24f67f\",\"w\":24,\"x\":24,\"y\":75},\"panelIndex\":\"8f0964cf-d899-481f-b1e2-138d3e24f67f\",\"panelRefName\":\"panel_12\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"vis\":{\"params\":{\"colWidth\":[{\"colIndex\":1,\"width\":494}]}}},\"gridData\":{\"h\":15,\"i\":\"5cf45870-ceae-4231-9fe7-1dc62ff55c16\",\"w\":24,\"x\":0,\"y\":90},\"panelIndex\":\"5cf45870-ceae-4231-9fe7-1dc62ff55c16\",\"panelRefName\":\"panel_13\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"01a42219-92ef-4f03-b8a3-3eb1f498c1f7\",\"w\":24,\"x\":24,\"y\":90},\"panelIndex\":\"01a42219-92ef-4f03-b8a3-3eb1f498c1f7\",\"panelRefName\":\"panel_14\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"2afa241a-c05d-4c21-b993-d00d655e53f6\",\"w\":24,\"x\":0,\"y\":105},\"panelIndex\":\"2afa241a-c05d-4c21-b993-d00d655e53f6\",\"panelRefName\":\"panel_15\",\"title\":\"[Carbon Black Cloud] Distribution of Alerts by IOC Field\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"5ac185d0-99d0-473f-9cf5-4898053b1fa8\",\"w\":24,\"x\":24,\"y\":105},\"panelIndex\":\"5ac185d0-99d0-473f-9cf5-4898053b1fa8\",\"panelRefName\":\"panel_16\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"9248238a-0980-423a-a19c-44102fdc173c\",\"w\":24,\"x\":0,\"y\":120},\"panelIndex\":\"9248238a-0980-423a-a19c-44102fdc173c\",\"panelRefName\":\"panel_17\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"48aa679f-815f-4196-bca9-b3d7784aef73\",\"w\":24,\"x\":24,\"y\":120},\"panelIndex\":\"48aa679f-815f-4196-bca9-b3d7784aef73\",\"panelRefName\":\"panel_18\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"669a2361-cb74-4def-a571-4af3ab5082b9\",\"w\":24,\"x\":0,\"y\":135},\"panelIndex\":\"669a2361-cb74-4def-a571-4af3ab5082b9\",\"panelRefName\":\"panel_19\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"83e71096-5c60-41e7-a258-ec2036fcf872\",\"w\":24,\"x\":24,\"y\":150},\"panelIndex\":\"83e71096-5c60-41e7-a258-ec2036fcf872\",\"panelRefName\":\"panel_20\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"ab2c450c-e97f-41ba-bffe-3c0672b64320\",\"w\":24,\"x\":0,\"y\":150},\"panelIndex\":\"ab2c450c-e97f-41ba-bffe-3c0672b64320\",\"panelRefName\":\"panel_21\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"3df6d550-3202-40b6-a2ad-0909b7e5dd6b\",\"w\":24,\"x\":24,\"y\":165},\"panelIndex\":\"3df6d550-3202-40b6-a2ad-0909b7e5dd6b\",\"panelRefName\":\"panel_22\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"vis\":{\"params\":{\"colWidth\":[{\"colIndex\":0,\"width\":1134}]}}},\"gridData\":{\"h\":15,\"i\":\"bab343d8-bdda-4558-8353-f4530b69a3b9\",\"w\":24,\"x\":0,\"y\":165},\"panelIndex\":\"bab343d8-bdda-4558-8353-f4530b69a3b9\",\"panelRefName\":\"panel_23\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":27,\"i\":\"7a714638-9485-4da1-bc85-38df2ef49e99\",\"w\":48,\"x\":0,\"y\":180},\"panelIndex\":\"7a714638-9485-4da1-bc85-38df2ef49e99\",\"panelRefName\":\"panel_24\",\"type\":\"search\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"savedVis\":{\"data\":{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Threat Cause Actor Name\",\"field\":\"carbon_black_cloud.alert.threat_cause.actor.name\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"searchSource\":{\"filter\":[],\"index\":\"logs-*\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"\",\"type\":\"table\",\"uiState\":{}}},\"gridData\":{\"h\":15,\"i\":\"360b92d6-049c-42de-903f-f22ab75c0afc\",\"w\":24,\"x\":24,\"y\":135},\"panelIndex\":\"360b92d6-049c-42de-903f-f22ab75c0afc\",\"title\":\"[Carbon Black Cloud] Top 10 Threat Cause Actor Name\",\"type\":\"visualization\",\"version\":\"7.17.0\"}]", + "timeRestore": false, + "title": "[Carbon Black Cloud] Alerts", + "version": 1 + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-af030950-8d73-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "dashboard": "7.17.0" + }, + "references": [ + { + "id": "carbon_black_cloud-52fde850-8d73-11ec-ac12-4bc77fa14e95", + "name": "panel_0", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-f3f635b0-8d72-11ec-ac12-4bc77fa14e95", + "name": "panel_1", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-ff34eaa0-8d79-11ec-ac12-4bc77fa14e95", + "name": "panel_2", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-9a533f40-8d80-11ec-ac12-4bc77fa14e95", + "name": "panel_3", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-1b554010-8d73-11ec-ac12-4bc77fa14e95", + "name": "panel_4", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-906f65c0-8d81-11ec-ac12-4bc77fa14e95", + "name": "panel_5", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-0a8f5e90-8d79-11ec-ac12-4bc77fa14e95", + "name": "panel_6", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-5c122d10-8d83-11ec-ac12-4bc77fa14e95", + "name": "panel_7", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-2eafd430-8d83-11ec-ac12-4bc77fa14e95", + "name": "panel_8", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-cc2d3630-8d83-11ec-ac12-4bc77fa14e95", + "name": "panel_9", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-993b8650-8d83-11ec-ac12-4bc77fa14e95", + "name": "panel_10", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-97ab53f0-8d84-11ec-ac12-4bc77fa14e95", + "name": "panel_11", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-8af47260-8d87-11ec-ac12-4bc77fa14e95", + "name": "panel_12", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-d33296f0-8d79-11ec-ac12-4bc77fa14e95", + "name": "panel_13", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-f93958c0-8d83-11ec-ac12-4bc77fa14e95", + "name": "panel_14", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-5c6ce550-8d85-11ec-ac12-4bc77fa14e95", + "name": "panel_15", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-ee77a260-8d84-11ec-ac12-4bc77fa14e95", + "name": "panel_16", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-6efc6240-8d8a-11ec-ac12-4bc77fa14e95", + "name": "panel_17", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-ee670e50-8d89-11ec-ac12-4bc77fa14e95", + "name": "panel_18", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-10f699d0-8d8b-11ec-ac12-4bc77fa14e95", + "name": "panel_19", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-a5d6fa30-8d8c-11ec-ac12-4bc77fa14e95", + "name": "panel_20", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-d49a3710-8d96-11ec-ac12-4bc77fa14e95", + "name": "panel_21", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-928cff80-8d8a-11ec-ac12-4bc77fa14e95", + "name": "panel_22", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-89932a20-8d86-11ec-ac12-4bc77fa14e95", + "name": "panel_23", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-6e41bd70-8d8d-11ec-ac12-4bc77fa14e95", + "name": "panel_24", + "type": "search" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-db61a3d0-9534-11ec-8b9d-35e42c3f7fcf.json b/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-db61a3d0-9534-11ec-8b9d-35e42c3f7fcf.json new file mode 100755 index 0000000000..ee0df3955b --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-db61a3d0-9534-11ec-8b9d-35e42c3f7fcf.json @@ -0,0 +1,67 @@ +{ + "attributes": { + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.asset_vulnerability_summary\\\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"table\":null,\"vis\":{\"legendOpen\":true}},\"gridData\":{\"h\":15,\"i\":\"604c7824-2086-4750-bd55-42ffffa9fc11\",\"w\":24,\"x\":0,\"y\":0},\"panelIndex\":\"604c7824-2086-4750-bd55-42ffffa9fc11\",\"panelRefName\":\"panel_0\",\"title\":\"[Carbon Black Cloud] Distribution of Asset Vulnerability Summary by OS Type, OS Version\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"table\":null,\"vis\":{\"legendOpen\":false}},\"gridData\":{\"h\":15,\"i\":\"bd12665d-43af-45c1-b05e-556ed72556fa\",\"w\":24,\"x\":24,\"y\":0},\"panelIndex\":\"bd12665d-43af-45c1-b05e-556ed72556fa\",\"panelRefName\":\"panel_1\",\"title\":\"[Carbon Black Cloud] Distribution of Asset Vulnerability Summary by Sync Status\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"table\":null,\"vis\":{\"legendOpen\":false}},\"gridData\":{\"h\":15,\"i\":\"fab676af-f870-4fd6-ac5d-3e17a224aaa8\",\"w\":24,\"x\":0,\"y\":15},\"panelIndex\":\"fab676af-f870-4fd6-ac5d-3e17a224aaa8\",\"panelRefName\":\"panel_2\",\"title\":\"[Carbon Black Cloud] Distribution of Asset Vulnerability Summary by Severity\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"e3d4c200-17e9-4303-9073-b9dc8c95a790\",\"w\":24,\"x\":24,\"y\":15},\"panelIndex\":\"e3d4c200-17e9-4303-9073-b9dc8c95a790\",\"panelRefName\":\"panel_3\",\"title\":\"[Carbon Black Cloud] Top 10 Hosts with Highest Vulnerability Count\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"table\":null,\"vis\":{\"legendOpen\":false}},\"gridData\":{\"h\":15,\"i\":\"624500b9-5f23-4c1c-b84b-83c5f20b72bb\",\"w\":24,\"x\":0,\"y\":30},\"panelIndex\":\"624500b9-5f23-4c1c-b84b-83c5f20b72bb\",\"panelRefName\":\"panel_4\",\"title\":\"[Carbon Black Cloud] Distribution of Asset Vulnerability Summary by Sync Type\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"0ec67461-93e2-49df-bcd9-3407fabd5832\",\"w\":24,\"x\":24,\"y\":30},\"panelIndex\":\"0ec67461-93e2-49df-bcd9-3407fabd5832\",\"panelRefName\":\"panel_5\",\"title\":\"[Carbon Black Cloud] Top 10 Hosts with Highest Risk Score\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"66d4f664-5644-48c9-b179-ddd94e1a3e46\",\"w\":24,\"x\":24,\"y\":45},\"panelIndex\":\"66d4f664-5644-48c9-b179-ddd94e1a3e46\",\"panelRefName\":\"panel_6\",\"title\":\"[Carbon Black Cloud] Top 10 OS Names\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":20,\"i\":\"6e5579cc-cd91-4f7b-a221-e9bed77aa2b5\",\"w\":48,\"x\":0,\"y\":60},\"panelIndex\":\"6e5579cc-cd91-4f7b-a221-e9bed77aa2b5\",\"panelRefName\":\"panel_7\",\"title\":\"[Carbon Black Cloud] Asset Vulnerability Assessment Essential Details\",\"type\":\"search\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"vis\":{\"legendOpen\":false}},\"gridData\":{\"h\":15,\"i\":\"244dc3ee-7810-4f22-b915-bc0a8118fb2a\",\"w\":24,\"x\":0,\"y\":45},\"panelIndex\":\"244dc3ee-7810-4f22-b915-bc0a8118fb2a\",\"panelRefName\":\"panel_8\",\"type\":\"visualization\",\"version\":\"7.17.0\"}]", + "timeRestore": false, + "title": "[Carbon Black Cloud] Asset Vulnerability Summary", + "version": 1 + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-db61a3d0-9534-11ec-8b9d-35e42c3f7fcf", + "migrationVersion": { + "dashboard": "7.17.0" + }, + "references": [ + { + "id": "carbon_black_cloud-56130b90-954a-11ec-8b9d-35e42c3f7fcf", + "name": "panel_0", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-7caf3b20-954a-11ec-8b9d-35e42c3f7fcf", + "name": "panel_1", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-70cdb250-954a-11ec-8b9d-35e42c3f7fcf", + "name": "panel_2", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-6bfd1770-954a-11ec-8b9d-35e42c3f7fcf", + "name": "panel_3", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-792a3310-954a-11ec-8b9d-35e42c3f7fcf", + "name": "panel_4", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-750fefe0-954a-11ec-8b9d-35e42c3f7fcf", + "name": "panel_5", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-68a6c080-954a-11ec-8b9d-35e42c3f7fcf", + "name": "panel_6", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-dcc2d650-90a6-11ec-8b9d-35e42c3f7fcf", + "name": "panel_7", + "type": "search" + }, + { + "id": "carbon_black_cloud-2d1eedf0-9629-11ec-8b9d-35e42c3f7fcf", + "name": "panel_8", + "type": "visualization" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-e226d530-9554-11ec-96f0-8de26c63c826.json b/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-e226d530-9554-11ec-96f0-8de26c63c826.json new file mode 100755 index 0000000000..94761c84e1 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/dashboard/carbon_black_cloud-e226d530-9554-11ec-96f0-8de26c63c826.json @@ -0,0 +1,107 @@ +{ + "attributes": { + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.watchlist_hit\\\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"8dc3cf12-046a-4901-b213-c29985291e77\",\"w\":24,\"x\":0,\"y\":0},\"panelIndex\":\"8dc3cf12-046a-4901-b213-c29985291e77\",\"panelRefName\":\"panel_0\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"savedVis\":{\"data\":{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Device External IP\",\"field\":\"carbon_black_cloud.watchlist_hit.device.external_ip\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"searchSource\":{\"filter\":[],\"index\":\"logs-*\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.watchlist_hit\\\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"\",\"type\":\"table\",\"uiState\":{}}},\"gridData\":{\"h\":15,\"i\":\"4f7b5cef-a7e9-44a9-8769-44d5326a8df4\",\"w\":24,\"x\":24,\"y\":0},\"panelIndex\":\"4f7b5cef-a7e9-44a9-8769-44d5326a8df4\",\"title\":\"[Carbon Black Cloud] Top 10 Device External IPs\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"savedVis\":{\"data\":{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Watchlist Hit Name\",\"field\":\"carbon_black_cloud.watchlist_hit.watchlists.name\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"searchSource\":{\"filter\":[],\"index\":\"logs-*\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.watchlist_hit\\\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Watchlist Hit Names\",\"type\":\"table\",\"uiState\":{}}},\"gridData\":{\"h\":15,\"i\":\"3d454d18-6baa-40de-aa94-4ebfaee9a759\",\"w\":24,\"x\":0,\"y\":15},\"panelIndex\":\"3d454d18-6baa-40de-aa94-4ebfaee9a759\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"savedVis\":{\"data\":{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Severity\",\"field\":\"event.severity\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"searchSource\":{\"filter\":[],\"index\":\"logs-*\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.watchlist_hit\\\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"[Carbon Black Cloud] Distribution of Watchlist Hit by Severity\",\"type\":\"pie\",\"uiState\":{\"vis\":{\"legendOpen\":true}}},\"vis\":{\"legendOpen\":true}},\"gridData\":{\"h\":15,\"i\":\"b0289aae-02bb-472e-8a22-07ff9f5d2372\",\"w\":24,\"x\":24,\"y\":15},\"panelIndex\":\"b0289aae-02bb-472e-8a22-07ff9f5d2372\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"savedVis\":{\"data\":{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Process Reputation\",\"field\":\"carbon_black_cloud.watchlist_hit.process.reputation\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":5},\"schema\":\"segment\",\"type\":\"terms\"}],\"searchSource\":{\"filter\":[],\"index\":\"logs-*\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset: \\\"carbon_black_cloud.watchlist_hit\\\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"\",\"type\":\"pie\",\"uiState\":{\"vis\":{\"legendOpen\":true}}},\"vis\":{\"legendOpen\":true}},\"gridData\":{\"h\":15,\"i\":\"d29f5a98-736d-4f47-877e-b4552d15f889\",\"w\":24,\"x\":0,\"y\":30},\"panelIndex\":\"d29f5a98-736d-4f47-877e-b4552d15f889\",\"title\":\"[Carbon Black Cloud] Distribution of Watchlist Hit by Process Reputation\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"savedVis\":{\"data\":{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Parent Process Reputation\",\"field\":\"carbon_black_cloud.watchlist_hit.process.parent.reputation\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":5},\"schema\":\"segment\",\"type\":\"terms\"}],\"searchSource\":{\"filter\":[],\"index\":\"logs-*\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset: \\\"carbon_black_cloud.watchlist_hit\\\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"[Carbon Black Cloud] Distribution of Watchlist Hit by Process Reputation\",\"type\":\"pie\",\"uiState\":{\"vis\":{\"legendOpen\":true}}},\"vis\":{\"legendOpen\":true}},\"gridData\":{\"h\":15,\"i\":\"ae5c96d5-b7d6-45f8-b57b-42cc190f990b\",\"w\":24,\"x\":24,\"y\":30},\"panelIndex\":\"ae5c96d5-b7d6-45f8-b57b-42cc190f990b\",\"title\":\"[Carbon Black Cloud] Distribution of Watchlist Hit by Parent Process Reputation\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"f3ba83bc-4f34-4131-9a0c-bac18ec92ac0\",\"w\":24,\"x\":0,\"y\":45},\"panelIndex\":\"f3ba83bc-4f34-4131-9a0c-bac18ec92ac0\",\"panelRefName\":\"panel_1\",\"title\":\"[Carbon Black Cloud] Top 10 Process Publisher Names\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"5271fb1f-64a6-461e-b2de-4abc76736af6\",\"w\":24,\"x\":24,\"y\":45},\"panelIndex\":\"5271fb1f-64a6-461e-b2de-4abc76736af6\",\"panelRefName\":\"panel_2\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"9c2fdcbe-43cb-4070-88ef-03e6e5082636\",\"w\":24,\"x\":0,\"y\":60},\"panelIndex\":\"9c2fdcbe-43cb-4070-88ef-03e6e5082636\",\"panelRefName\":\"panel_3\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"bc0503e7-6c6d-4edf-a76e-17a74f7d0957\",\"w\":24,\"x\":24,\"y\":60},\"panelIndex\":\"bc0503e7-6c6d-4edf-a76e-17a74f7d0957\",\"panelRefName\":\"panel_4\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"vis\":{\"legendOpen\":true}},\"gridData\":{\"h\":15,\"i\":\"d02cda3a-ceef-4766-b25b-456733be2a66\",\"w\":24,\"x\":0,\"y\":75},\"panelIndex\":\"d02cda3a-ceef-4766-b25b-456733be2a66\",\"panelRefName\":\"panel_5\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"5b66a72e-ce08-441c-8705-bb632b896745\",\"w\":24,\"x\":24,\"y\":75},\"panelIndex\":\"5b66a72e-ce08-441c-8705-bb632b896745\",\"panelRefName\":\"panel_6\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"6bff08c7-8ffb-423e-87de-f7585aa6bc86\",\"w\":24,\"x\":0,\"y\":90},\"panelIndex\":\"6bff08c7-8ffb-423e-87de-f7585aa6bc86\",\"panelRefName\":\"panel_7\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"437c123b-c447-476e-a28b-f3d965a50968\",\"w\":24,\"x\":24,\"y\":90},\"panelIndex\":\"437c123b-c447-476e-a28b-f3d965a50968\",\"panelRefName\":\"panel_8\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"33d80097-0089-4b48-8fd9-5dcda9e58e48\",\"w\":24,\"x\":0,\"y\":105},\"panelIndex\":\"33d80097-0089-4b48-8fd9-5dcda9e58e48\",\"panelRefName\":\"panel_9\",\"title\":\"[Carbon Black Cloud] Top 10 Process Publisher States\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"50a006ac-7108-47e5-adef-876c15fc8b44\",\"w\":24,\"x\":24,\"y\":105},\"panelIndex\":\"50a006ac-7108-47e5-adef-876c15fc8b44\",\"panelRefName\":\"panel_10\",\"title\":\"[Carbon Black Cloud] Top 10 Parent Process Publisher States\",\"type\":\"visualization\",\"version\":\"7.17.0\"},{\"embeddableConfig\":{\"enhancements\":{}},\"gridData\":{\"h\":31,\"i\":\"cfec84cb-87af-4b98-b855-17372eee70c8\",\"w\":48,\"x\":0,\"y\":120},\"panelIndex\":\"cfec84cb-87af-4b98-b855-17372eee70c8\",\"panelRefName\":\"panel_11\",\"type\":\"search\",\"version\":\"7.17.0\"}]", + "timeRestore": false, + "title": "[Carbon Black Cloud] Watchlist Hit", + "version": 1 + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-e226d530-9554-11ec-96f0-8de26c63c826", + "migrationVersion": { + "dashboard": "7.17.0" + }, + "references": [ + { + "id": "carbon_black_cloud-c3786990-9555-11ec-96f0-8de26c63c826", + "name": "panel_0", + "type": "visualization" + }, + { + "id": "logs-*", + "name": "4f7b5cef-a7e9-44a9-8769-44d5326a8df4:kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "3d454d18-6baa-40de-aa94-4ebfaee9a759:kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b0289aae-02bb-472e-8a22-07ff9f5d2372:kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d29f5a98-736d-4f47-877e-b4552d15f889:kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ae5c96d5-b7d6-45f8-b57b-42cc190f990b:kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "carbon_black_cloud-3aa59c50-955a-11ec-96f0-8de26c63c826", + "name": "panel_1", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-6fcd17f0-955a-11ec-96f0-8de26c63c826", + "name": "panel_2", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-bb323db0-955a-11ec-96f0-8de26c63c826", + "name": "panel_3", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-de59dff0-955a-11ec-96f0-8de26c63c826", + "name": "panel_4", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-17537cc0-955c-11ec-96f0-8de26c63c826", + "name": "panel_5", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-4dc9e690-955c-11ec-96f0-8de26c63c826", + "name": "panel_6", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-715f3ec0-955c-11ec-96f0-8de26c63c826", + "name": "panel_7", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-cb70a610-955c-11ec-96f0-8de26c63c826", + "name": "panel_8", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-0296fef0-955d-11ec-96f0-8de26c63c826", + "name": "panel_9", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-28323940-955d-11ec-96f0-8de26c63c826", + "name": "panel_10", + "type": "visualization" + }, + { + "id": "carbon_black_cloud-3ea9c2a0-955e-11ec-96f0-8de26c63c826", + "name": "panel_11", + "type": "search" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-3ea9c2a0-955e-11ec-96f0-8de26c63c826.json b/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-3ea9c2a0-955e-11ec-96f0-8de26c63c826.json new file mode 100755 index 0000000000..fde5382f93 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-3ea9c2a0-955e-11ec-96f0-8de26c63c826.json @@ -0,0 +1,39 @@ +{ + "attributes": { + "columns": [ + "carbon_black_cloud.watchlist_hit.watchlists.name", + "process.command_line", + "process.parent.command_line", + "process.executable", + "process.parent.executable", + "carbon_black_cloud.watchlist_hit.ioc.id", + "carbon_black_cloud.watchlist_hit.ioc.hit" + ], + "description": "", + "grid": {}, + "hideChart": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset: \\\"carbon_black_cloud.watchlist_hit\\\"\"}}" + }, + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "title": "[Carbon Black Cloud] Watchlist Hit Essential Details" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-3ea9c2a0-955e-11ec-96f0-8de26c63c826", + "migrationVersion": { + "search": "7.9.3" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "search" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-4272e690-8d71-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-4272e690-8d71-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..fdc104f3b2 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-4272e690-8d71-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,36 @@ +{ + "attributes": { + "columns": [ + "event.id", + "client.user.id", + "event.reason", + "client.ip" + ], + "description": "", + "grid": {}, + "hideChart": true, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.audit\\\"\"}}" + }, + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "title": "[Carbon Black Cloud] Audit Essential Details" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-4272e690-8d71-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "search": "7.9.3" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "search" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-6494a7e0-9640-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-6494a7e0-9640-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..800a5cb006 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-6494a7e0-9640-11ec-864c-3332b2a355f7.json @@ -0,0 +1,39 @@ +{ + "attributes": { + "columns": [ + "carbon_black_cloud.endpoint_event.type", + "process.command_line", + "process.parent.command_line", + "dll.path", + "carbon_black_cloud.endpoint_event.target_cmdline", + "process.executable", + "process.parent.executable" + ], + "description": "", + "grid": {}, + "hideChart": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "title": "[Carbon Black Cloud] Endpoint Events Essential Details" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-6494a7e0-9640-11ec-864c-3332b2a355f7", + "migrationVersion": { + "search": "7.9.3" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "search" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-6e41bd70-8d8d-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-6e41bd70-8d8d-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..1a37e59347 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-6e41bd70-8d8d-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,37 @@ +{ + "attributes": { + "columns": [ + "event.id", + "event.reason", + "event.url", + "carbon_black_cloud.alert.threat_indicators.process_name", + "carbon_black_cloud.alert.category" + ], + "description": "", + "grid": {}, + "hideChart": true, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "title": "[Carbon Black Cloud] Alerts Essential Details" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-6e41bd70-8d8d-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "search": "7.9.3" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "search" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-dcc2d650-90a6-11ec-8b9d-35e42c3f7fcf.json b/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-dcc2d650-90a6-11ec-8b9d-35e42c3f7fcf.json new file mode 100755 index 0000000000..c060c3bd41 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/search/carbon_black_cloud-dcc2d650-90a6-11ec-8b9d-35e42c3f7fcf.json @@ -0,0 +1,36 @@ +{ + "attributes": { + "columns": [ + "host.hostname", + "vulnerability.severity", + "vulnerability.score.base", + "carbon_black_cloud.asset_vulnerability_summary.vuln_count" + ], + "description": "", + "grid": {}, + "hideChart": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.asset_vulnerability_summary\\\"\"}}" + }, + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "title": "[Carbon Black Cloud] Asset Vulnerability Assessment Essential Details" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-dcc2d650-90a6-11ec-8b9d-35e42c3f7fcf", + "migrationVersion": { + "search": "7.9.3" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "search" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-0296fef0-955d-11ec-96f0-8de26c63c826.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-0296fef0-955d-11ec-96f0-8de26c63c826.json new file mode 100755 index 0000000000..bf6bf9170c --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-0296fef0-955d-11ec-96f0-8de26c63c826.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.watchlist_hit\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Process Publisher State", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Process Publisher State\",\"field\":\"carbon_black_cloud.watchlist_hit.process.publisher.state\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Process Publisher State\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-0296fef0-955d-11ec-96f0-8de26c63c826", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-0a8f5e90-8d79-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-0a8f5e90-8d79-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..329118ed72 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-0a8f5e90-8d79-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by OS, OS version", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"OS\",\"field\":\"host.os.type\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":5},\"schema\":\"segment\",\"type\":\"terms\"},{\"enabled\":true,\"id\":\"3\",\"params\":{\"customLabel\":\"OS Version\",\"field\":\"host.os.version\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":5},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":true,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by OS, OS version\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-0a8f5e90-8d79-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-0f420ad0-8d71-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-0f420ad0-8d71-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..fb78529067 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-0f420ad0-8d71-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.audit\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Client IPs", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Client IPs\",\"field\":\"client.ip\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Client IPs\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-0f420ad0-8d71-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-10f699d0-8d8b-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-10f699d0-8d8b-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..edfb4ab922 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-10f699d0-8d8b-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Threat Indicators TTPS", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Threat Indicators TTPS\",\"field\":\"carbon_black_cloud.alert.threat_indicators.ttps\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Count\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Threat Indicators TTPS\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-10f699d0-8d8b-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-11df3480-9630-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-11df3480-9630-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..e058315a1e --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-11df3480-9630-11ec-864c-3332b2a355f7.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Actions", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Actions\",\"field\":\"event.action\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Count\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Top 10 Actions\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-11df3480-9630-11ec-864c-3332b2a355f7", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-17537cc0-955c-11ec-96f0-8de26c63c826.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-17537cc0-955c-11ec-96f0-8de26c63c826.json new file mode 100755 index 0000000000..e9926e3521 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-17537cc0-955c-11ec-96f0-8de26c63c826.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset: \\\"carbon_black_cloud.watchlist_hit\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Watchlist Hit by OS", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"OS\",\"field\":\"carbon_black_cloud.watchlist_hit.device.os\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":5},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"[Carbon Black Cloud] Distribution of Watchlist Hit by OS\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-17537cc0-955c-11ec-96f0-8de26c63c826", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-1b554010-8d73-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-1b554010-8d73-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..5c97a8d4eb --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-1b554010-8d73-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Severity", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Severity\",\"field\":\"event.severity\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Severity\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-1b554010-8d73-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-28323940-955d-11ec-96f0-8de26c63c826.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-28323940-955d-11ec-96f0-8de26c63c826.json new file mode 100755 index 0000000000..8bb3adabfb --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-28323940-955d-11ec-96f0-8de26c63c826.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.watchlist_hit\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Parent Process Publisher State", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Parent Process Publisher State\",\"field\":\"carbon_black_cloud.watchlist_hit.process.parent.publisher.state\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Parent Process Publisher State\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-28323940-955d-11ec-96f0-8de26c63c826", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-2be6ad50-962f-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-2be6ad50-962f-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..7bec55f465 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-2be6ad50-962f-11ec-864c-3332b2a355f7.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Child Process Username", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Child Process Username\",\"field\":\"carbon_black_cloud.endpoint_event.childproc.username\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":9},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Child Process Username\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-2be6ad50-962f-11ec-864c-3332b2a355f7", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-2d1eedf0-9629-11ec-8b9d-35e42c3f7fcf.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-2d1eedf0-9629-11ec-8b9d-35e42c3f7fcf.json new file mode 100755 index 0000000000..e4b7fe64f8 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-2d1eedf0-9629-11ec-8b9d-35e42c3f7fcf.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.asset_vulnerability_summary\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Asset Vulnerability Summary by Type", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Type\",\"field\":\"carbon_black_cloud.asset_vulnerability_summary.type\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":false,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"[Carbon Black Cloud] Distribution of Asset Vulnerability Summary by Type\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-2d1eedf0-9629-11ec-8b9d-35e42c3f7fcf", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-2d324250-963e-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-2d324250-963e-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..6b1cb56ea0 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-2d324250-963e-11ec-864c-3332b2a355f7.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Endpoint Events by Event Origin", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Event Origin\",\"field\":\"carbon_black_cloud.endpoint_event.event_origin\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Endpoint Events by Event Origin\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-2d324250-963e-11ec-864c-3332b2a355f7", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-2eafd430-8d83-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-2eafd430-8d83-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..c59f3f2623 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-2eafd430-8d83-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Category of the Threat Cause", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Category of the Threat Cause\",\"field\":\"carbon_black_cloud.alert.threat_cause.threat_category\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Count\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Category of the Threat Cause\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-2eafd430-8d83-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-3aa59c50-955a-11ec-96f0-8de26c63c826.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-3aa59c50-955a-11ec-96f0-8de26c63c826.json new file mode 100755 index 0000000000..0a01e78828 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-3aa59c50-955a-11ec-96f0-8de26c63c826.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset: \\\"carbon_black_cloud.watchlist_hit\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Process Publisher Name", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Process Publisher Name\",\"field\":\"carbon_black_cloud.watchlist_hit.process.publisher.name\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Process Publisher Name\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-3aa59c50-955a-11ec-96f0-8de26c63c826", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-3afe1750-9630-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-3afe1750-9630-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..682f389163 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-3afe1750-9630-11ec-864c-3332b2a355f7.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Endpoint Events by OS", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Device OS\",\"field\":\"carbon_black_cloud.endpoint_event.device.os\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"[Carbon Black Cloud] Distribution of Endpoint Events by OS\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-3afe1750-9630-11ec-864c-3332b2a355f7", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-4dc9e690-955c-11ec-96f0-8de26c63c826.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-4dc9e690-955c-11ec-96f0-8de26c63c826.json new file mode 100755 index 0000000000..7af6d5ad55 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-4dc9e690-955c-11ec-96f0-8de26c63c826.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset: \\\"carbon_black_cloud.watchlist_hit\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 IOC Hits", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"IOC Hit\",\"field\":\"carbon_black_cloud.watchlist_hit.ioc.hit\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 IOC Hits\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-4dc9e690-955c-11ec-96f0-8de26c63c826", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-52fde850-8d73-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-52fde850-8d73-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..1c116157a2 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-52fde850-8d73-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Category", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Category\",\"field\":\"carbon_black_cloud.alert.category\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Category\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-52fde850-8d73-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-53d65ef0-962f-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-53d65ef0-962f-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..3ced47d3fe --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-53d65ef0-962f-11ec-864c-3332b2a355f7.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Process Publisher State", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Process Publisher State\",\"field\":\"carbon_black_cloud.endpoint_event.process.publisher.state\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Process Publisher State\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-53d65ef0-962f-11ec-864c-3332b2a355f7", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-56130b90-954a-11ec-8b9d-35e42c3f7fcf.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-56130b90-954a-11ec-8b9d-35e42c3f7fcf.json new file mode 100755 index 0000000000..60cf2f819b --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-56130b90-954a-11ec-8b9d-35e42c3f7fcf.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.asset_vulnerability_summary\\\"\"}}" + }, + "title": "Distribution of Asset Vulnerability Summary by OS Type, OS Version", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"3\",\"params\":{\"customLabel\":\"OS Type\",\"field\":\"host.os.type\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"OS Version\",\"field\":\"host.os.version\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"row\":true,\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"Distribution of Asset Vulnerability Summary by OS Type, OS Version\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-56130b90-954a-11ec-8b9d-35e42c3f7fcf", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-5a5dad90-954a-11ec-8b9d-35e42c3f7fcf.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-5a5dad90-954a-11ec-8b9d-35e42c3f7fcf.json new file mode 100755 index 0000000000..411603d6cc --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-5a5dad90-954a-11ec-8b9d-35e42c3f7fcf.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.asset_vulnerability_summary\\\"\"}}" + }, + "title": "Distribution of Asset Vulnerability Summary by Type", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"field\":\"carbon_black_cloud.asset_vulnerability_summary.type\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":2},\"schema\":\"group\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":75,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Count\"},\"type\":\"value\"}]},\"title\":\"Distribution of Asset Vulnerability Summary by Type\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-5a5dad90-954a-11ec-8b9d-35e42c3f7fcf", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-5c122d10-8d83-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-5c122d10-8d83-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..811d8c6112 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-5c122d10-8d83-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Source of the Threat Cause", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Source of the Threat Cause\",\"field\":\"carbon_black_cloud.alert.threat_cause.vector\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Count\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Source of the Threat Cause\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-5c122d10-8d83-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-5c6ce550-8d85-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-5c6ce550-8d85-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..e390c83ecc --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-5c6ce550-8d85-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by IOC field", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"IOC Field\",\"field\":\"carbon_black_cloud.alert.ioc.field\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Count\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by IOC field\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-5c6ce550-8d85-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-5f690780-954a-11ec-8b9d-35e42c3f7fcf.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-5f690780-954a-11ec-8b9d-35e42c3f7fcf.json new file mode 100755 index 0000000000..bdd43d6d65 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-5f690780-954a-11ec-8b9d-35e42c3f7fcf.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.asset_vulnerability_summary\\\"\"}}" + }, + "title": "Distribution of Asset Vulnerability Summary by OS Type", + "uiStateJSON": "{\"vis\":{\"legendOpen\":false}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"field\":\"host.os.type\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":3},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":false,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"Distribution of Asset Vulnerability Summary by OS Type\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-5f690780-954a-11ec-8b9d-35e42c3f7fcf", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-6496b680-954a-11ec-8b9d-35e42c3f7fcf.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-6496b680-954a-11ec-8b9d-35e42c3f7fcf.json new file mode 100755 index 0000000000..a8622511b3 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-6496b680-954a-11ec-8b9d-35e42c3f7fcf.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.asset_vulnerability_summary\\\"\"}}" + }, + "title": "Distribution of Asset Vulnerability Summary by OS Architecture", + "uiStateJSON": "{\"vis\":{\"legendOpen\":false}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"field\":\"host.architecture\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":3},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":false,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":true,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"Distribution of Asset Vulnerability Summary by OS Architecture\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-6496b680-954a-11ec-8b9d-35e42c3f7fcf", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-68a6c080-954a-11ec-8b9d-35e42c3f7fcf.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-68a6c080-954a-11ec-8b9d-35e42c3f7fcf.json new file mode 100755 index 0000000000..02160d4bea --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-68a6c080-954a-11ec-8b9d-35e42c3f7fcf.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.asset_vulnerability_summary\\\"\"}}" + }, + "title": "Top 10 OS Names", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"OS Names\",\"field\":\"host.os.name\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"row\":false,\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"Top 10 OS Names\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-68a6c080-954a-11ec-8b9d-35e42c3f7fcf", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-6bfd1770-954a-11ec-8b9d-35e42c3f7fcf.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-6bfd1770-954a-11ec-8b9d-35e42c3f7fcf.json new file mode 100755 index 0000000000..6c64141f00 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-6bfd1770-954a-11ec-8b9d-35e42c3f7fcf.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.asset_vulnerability_summary\\\"\"}}" + }, + "title": "Top 10 Hosts with Highest Vulnerability Count", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Vulnerability Count\",\"field\":\"carbon_black_cloud.asset_vulnerability_summary.vuln_count\"},\"schema\":\"metric\",\"type\":\"max\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Hostname\",\"field\":\"host.hostname\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"Top 10 Hosts with Highest Vulnerability Count\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-6bfd1770-954a-11ec-8b9d-35e42c3f7fcf", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-6efc6240-8d8a-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-6efc6240-8d8a-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..630d474e6e --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-6efc6240-8d8a-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Workflow State", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Workflow State\",\"field\":\"carbon_black_cloud.alert.workflow.state\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":5},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Workflow State\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-6efc6240-8d8a-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-6fcd17f0-955a-11ec-96f0-8de26c63c826.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-6fcd17f0-955a-11ec-96f0-8de26c63c826.json new file mode 100755 index 0000000000..228daf684c --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-6fcd17f0-955a-11ec-96f0-8de26c63c826.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset: \\\"carbon_black_cloud.watchlist_hit\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Parent Process Publisher Names", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Parent Process Publisher Name\",\"field\":\"carbon_black_cloud.watchlist_hit.process.parent.publisher.name\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Parent Process Publisher Names\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-6fcd17f0-955a-11ec-96f0-8de26c63c826", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-70cdb250-954a-11ec-8b9d-35e42c3f7fcf.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-70cdb250-954a-11ec-8b9d-35e42c3f7fcf.json new file mode 100755 index 0000000000..1bd12c5d2e --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-70cdb250-954a-11ec-8b9d-35e42c3f7fcf.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.asset_vulnerability_summary\\\"\"}}" + }, + "title": "Distribution of Asset Vulnerability Summary by Severity", + "uiStateJSON": "{\"vis\":{\"legendOpen\":false}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Severity\",\"field\":\"vulnerability.severity\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":false,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"Distribution of Asset Vulnerability Summary by Severity\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-70cdb250-954a-11ec-8b9d-35e42c3f7fcf", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-715f3ec0-955c-11ec-96f0-8de26c63c826.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-715f3ec0-955c-11ec-96f0-8de26c63c826.json new file mode 100755 index 0000000000..0a3d26dad2 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-715f3ec0-955c-11ec-96f0-8de26c63c826.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset: \\\"carbon_black_cloud.watchlist_hit\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Report Names", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Report Name\",\"field\":\"carbon_black_cloud.watchlist_hit.report.name\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Report Names\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-715f3ec0-955c-11ec-96f0-8de26c63c826", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-750fefe0-954a-11ec-8b9d-35e42c3f7fcf.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-750fefe0-954a-11ec-8b9d-35e42c3f7fcf.json new file mode 100755 index 0000000000..6e873422cb --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-750fefe0-954a-11ec-8b9d-35e42c3f7fcf.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.asset_vulnerability_summary\\\"\"}}" + }, + "title": "Top 10 Hosts with Highest Risk Score", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Risk Score\",\"field\":\"vulnerability.score.base\"},\"schema\":\"metric\",\"type\":\"max\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Hostname\",\"field\":\"host.hostname\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"Top 10 Hosts with Highest Risk Score\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-750fefe0-954a-11ec-8b9d-35e42c3f7fcf", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-76fe1db0-962e-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-76fe1db0-962e-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..48a0ff614a --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-76fe1db0-962e-11ec-864c-3332b2a355f7.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Process Publisher Name", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Process Publisher Name\",\"field\":\"carbon_black_cloud.endpoint_event.process.publisher.name\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Process Publisher Name\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-76fe1db0-962e-11ec-864c-3332b2a355f7", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-792a3310-954a-11ec-8b9d-35e42c3f7fcf.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-792a3310-954a-11ec-8b9d-35e42c3f7fcf.json new file mode 100755 index 0000000000..b549ad14a1 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-792a3310-954a-11ec-8b9d-35e42c3f7fcf.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.asset_vulnerability_summary\\\"\"}}" + }, + "title": "Distribution of Asset Vulnerability Summary by Sync Type", + "uiStateJSON": "{\"vis\":{\"legendOpen\":false}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Sync type\",\"field\":\"carbon_black_cloud.asset_vulnerability_summary.sync.type\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":false,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"Distribution of Asset Vulnerability Summary by Sync Type\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-792a3310-954a-11ec-8b9d-35e42c3f7fcf", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-7a6261e0-962f-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-7a6261e0-962f-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..116934a90e --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-7a6261e0-962f-11ec-864c-3332b2a355f7.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Child Process Publisher State", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Child Process Publisher State\",\"field\":\"carbon_black_cloud.endpoint_event.childproc.publisher.state\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Child Process Publisher State\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-7a6261e0-962f-11ec-864c-3332b2a355f7", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-7caf3b20-954a-11ec-8b9d-35e42c3f7fcf.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-7caf3b20-954a-11ec-8b9d-35e42c3f7fcf.json new file mode 100755 index 0000000000..ebce21d74d --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-7caf3b20-954a-11ec-8b9d-35e42c3f7fcf.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.asset_vulnerability_summary\\\"\"}}" + }, + "title": "Distribution of Asset Vulnerability Summary by Sync Status", + "uiStateJSON": "{\"vis\":{\"legendOpen\":false}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Sync Status\",\"field\":\"carbon_black_cloud.asset_vulnerability_summary.sync.status\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":false,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"Distribution of Asset Vulnerability Summary by Sync Status\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-7caf3b20-954a-11ec-8b9d-35e42c3f7fcf", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-80778dc0-954a-11ec-8b9d-35e42c3f7fcf.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-80778dc0-954a-11ec-8b9d-35e42c3f7fcf.json new file mode 100755 index 0000000000..8f11ac69cf --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-80778dc0-954a-11ec-8b9d-35e42c3f7fcf.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.asset_vulnerability_summary\\\"\"}}" + }, + "title": "Top 10 Hosts with Severity", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Severity\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Hostname\",\"field\":\"host.hostname\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderAgg\":{\"enabled\":true,\"id\":\"2-orderAgg\",\"params\":{\"field\":\"vulnerability.severity\"},\"schema\":\"orderAgg\",\"type\":\"cardinality\"},\"orderBy\":\"custom\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"Top 10 Hosts with Severity\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-80778dc0-954a-11ec-8b9d-35e42c3f7fcf", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-89932a20-8d86-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-89932a20-8d86-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..5d57824451 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-89932a20-8d86-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 IOC Hit", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"IOC Hit\",\"field\":\"carbon_black_cloud.alert.ioc.hit\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 IOC Hit\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-89932a20-8d86-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-8af47260-8d87-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-8af47260-8d87-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..dd5f86134d --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-8af47260-8d87-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Watchlist Hit", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Watchlist Hit\",\"field\":\"carbon_black_cloud.alert.watchlists.name\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Count\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Watchlist Hit\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-8af47260-8d87-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-906f65c0-8d81-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-906f65c0-8d81-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..60669ee962 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-906f65c0-8d81-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Threat Cause Reputation", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Threat Cause Reputation\",\"field\":\"carbon_black_cloud.alert.threat_cause.reputation\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Count\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Threat Cause Reputation\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-906f65c0-8d81-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-928cff80-8d8a-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-928cff80-8d8a-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..19ad6bf381 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-928cff80-8d8a-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Threat Indicators Process Name", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Threat Indicators Process Name\",\"field\":\"carbon_black_cloud.alert.threat_indicators.process_name\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Threat Indicators Process Name\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-928cff80-8d8a-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-949c1d00-9628-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-949c1d00-9628-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..7992c14128 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-949c1d00-9628-11ec-864c-3332b2a355f7.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Devices", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Device Name\",\"field\":\"host.hostname\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Devices\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-949c1d00-9628-11ec-864c-3332b2a355f7", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-97ab53f0-8d84-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-97ab53f0-8d84-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..ebcc102bf4 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-97ab53f0-8d84-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Run State", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Run State\",\"field\":\"carbon_black_cloud.alert.run_state\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Run State\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-97ab53f0-8d84-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-993b8650-8d83-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-993b8650-8d83-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..bf3592d08f --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-993b8650-8d83-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Blocked Threat Category", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Blocked Threat Category\",\"field\":\"carbon_black_cloud.alert.blocked_threat_category\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Count\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Blocked Threat Category\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-993b8650-8d83-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-9a533f40-8d80-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-9a533f40-8d80-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..1025e00226 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-9a533f40-8d80-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Sensor Action", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Sensor Action\",\"field\":\"carbon_black_cloud.alert.sensor_action\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Count\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Sensor Action\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-9a533f40-8d80-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-a5d6fa30-8d8c-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-a5d6fa30-8d8c-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..c4ce665f33 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-a5d6fa30-8d8c-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Device Username", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Username\",\"field\":\"user.name\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Device Username\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-a5d6fa30-8d8c-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-a6d2a900-8d70-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-a6d2a900-8d70-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..7db345ec9b --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-a6d2a900-8d70-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.audit\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Audit Logs by Flag Status", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Flagged\",\"field\":\"carbon_black_cloud.audit.flagged\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":5},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"[Carbon Black Cloud] Distribution of Audit Logs by Flag Status\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-a6d2a900-8d70-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-a7ce1420-9630-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-a7ce1420-9630-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..37864260d1 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-a7ce1420-9630-11ec-864c-3332b2a355f7.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Effective reputation of the loaded modules", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Effective Reputation of Loaded Modules\",\"field\":\"carbon_black_cloud.endpoint_event.modload.effective_reputation\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Effective reputation of the loaded modules\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-a7ce1420-9630-11ec-864c-3332b2a355f7", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ae34ca40-962e-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ae34ca40-962e-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..cf20544145 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ae34ca40-962e-11ec-864c-3332b2a355f7.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Child Process Publisher Name", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Child Process Publisher Name\",\"field\":\"carbon_black_cloud.endpoint_event.childproc.publisher.name\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":8},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Child Process Publisher Name\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-ae34ca40-962e-11ec-864c-3332b2a355f7", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-bb323db0-955a-11ec-96f0-8de26c63c826.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-bb323db0-955a-11ec-96f0-8de26c63c826.json new file mode 100755 index 0000000000..dd2d0ee97a --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-bb323db0-955a-11ec-96f0-8de26c63c826.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset: \\\"carbon_black_cloud.watchlist_hit\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Process Usernames", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Process Username\",\"field\":\"carbon_black_cloud.watchlist_hit.process.username\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Process Usernames\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-bb323db0-955a-11ec-96f0-8de26c63c826", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-c3786990-9555-11ec-96f0-8de26c63c826.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-c3786990-9555-11ec-96f0-8de26c63c826.json new file mode 100755 index 0000000000..bb4fb20b4b --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-c3786990-9555-11ec-96f0-8de26c63c826.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.watchlist_hit\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Device Names", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Device Name\",\"field\":\"host.hostname\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Device Names\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-c3786990-9555-11ec-96f0-8de26c63c826", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-c6cfa8d0-962f-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-c6cfa8d0-962f-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..3a76cb6cae --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-c6cfa8d0-962f-11ec-864c-3332b2a355f7.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Endpoint Events by Sensor Actions", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Sensor Action\",\"field\":\"carbon_black_cloud.endpoint_event.sensor_action\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Endpoint Events by Sensor Actions\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-c6cfa8d0-962f-11ec-864c-3332b2a355f7", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-cb70a610-955c-11ec-96f0-8de26c63c826.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-cb70a610-955c-11ec-96f0-8de26c63c826.json new file mode 100755 index 0000000000..29d985b4d8 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-cb70a610-955c-11ec-96f0-8de26c63c826.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.watchlist_hit\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Watchlist Hit by Report Tags", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Watchlist Hit by Report Tag\",\"field\":\"carbon_black_cloud.watchlist_hit.report.tags\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":75,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Watchlist Hit by Report Tags\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-cb70a610-955c-11ec-96f0-8de26c63c826", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-cc2d3630-8d83-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-cc2d3630-8d83-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..50933d86cc --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-cc2d3630-8d83-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Not Blocked Threat Category", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Not Blocked Threat Category\",\"field\":\"carbon_black_cloud.alert.not_blocked_threat_category\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Count\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Not Blocked Threat Category\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-cc2d3630-8d83-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-d33296f0-8d79-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-d33296f0-8d79-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..bf02f82c2e --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-d33296f0-8d79-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Policy Names", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Policy Name\",\"field\":\"carbon_black_cloud.alert.policy.name\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Policy Names\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-d33296f0-8d79-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-d49a3710-8d96-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-d49a3710-8d96-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..bfebab9f24 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-d49a3710-8d96-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Reason Codes", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Reason Codes\",\"field\":\"carbon_black_cloud.alert.reason_code\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Reason Codes\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-d49a3710-8d96-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-de59dff0-955a-11ec-96f0-8de26c63c826.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-de59dff0-955a-11ec-96f0-8de26c63c826.json new file mode 100755 index 0000000000..85bf297c56 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-de59dff0-955a-11ec-96f0-8de26c63c826.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset: \\\"carbon_black_cloud.watchlist_hit\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Parent Process Usernames", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Parent Process Username\",\"field\":\"carbon_black_cloud.watchlist_hit.process.parent.username\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Parent Process Usernames\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-de59dff0-955a-11ec-96f0-8de26c63c826", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ee2098d0-8d70-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ee2098d0-8d70-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..2ad0964cbb --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ee2098d0-8d70-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.audit\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Request URLs", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"URL\",\"field\":\"url.original\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Request URLs\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-ee2098d0-8d70-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ee670e50-8d89-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ee670e50-8d89-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..cb945df49b --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ee670e50-8d89-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Kill Chain Status", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Kill Chain Status\",\"field\":\"carbon_black_cloud.alert.kill_chain_status\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Count\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Kill Chain Status\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-ee670e50-8d89-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ee77a260-8d84-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ee77a260-8d84-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..fc1c6812f0 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ee77a260-8d84-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Process Name", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Process Name\",\"field\":\"process.name\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Count\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Process Name\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-ee77a260-8d84-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f28910d0-9628-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f28910d0-9628-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..3c04444ca9 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f28910d0-9628-11ec-864c-3332b2a355f7.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Device External IP", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Device External IP\",\"field\":\"carbon_black_cloud.endpoint_event.device.external_ip\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Device External IP\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-f28910d0-9628-11ec-864c-3332b2a355f7", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f3f635b0-8d72-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f3f635b0-8d72-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..a79db35e93 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f3f635b0-8d72-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Alert Type", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Alert Type\",\"field\":\"carbon_black_cloud.alert.type\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":5},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Alert Type\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-f3f635b0-8d72-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f75eabb0-8d8b-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f75eabb0-8d8b-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..d3f393c0d5 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f75eabb0-8d8b-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Threat Cause Actor Name", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Threat Cause Actor Name\",\"field\":\"carbon_black_cloud.alert.threat_cause.actor.name\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"detailedTooltip\":true,\"grid\":{\"categoryLines\":false},\"labels\":{},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"radiusRatio\":0,\"seriesParams\":[{\"circlesRadius\":1,\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"thresholdLine\":{\"color\":\"#E7664C\",\"show\":false,\"style\":\"full\",\"value\":10,\"width\":1},\"times\":[],\"truncateLegend\":true,\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Count\"},\"type\":\"value\"}]},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Threat Cause Actor Name\",\"type\":\"horizontal_bar\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-f75eabb0-8d8b-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f7681be0-962e-11ec-864c-3332b2a355f7.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f7681be0-962e-11ec-864c-3332b2a355f7.json new file mode 100755 index 0000000000..84fedf340e --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f7681be0-962e-11ec-864c-3332b2a355f7.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.endpoint_event\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Top 10 Process Username", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Process Username\",\"field\":\"carbon_black_cloud.endpoint_event.process.username\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"params\":{\"autoFitRowToContent\":false,\"perPage\":10,\"percentageCol\":\"\",\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showToolbar\":false,\"showTotal\":false,\"totalFunc\":\"sum\"},\"title\":\"[Carbon Black Cloud] Top 10 Process Username\",\"type\":\"table\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-f7681be0-962e-11ec-864c-3332b2a355f7", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f93958c0-8d83-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f93958c0-8d83-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..1c30c4f320 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-f93958c0-8d83-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Policy Applied", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Policy Applied\",\"field\":\"carbon_black_cloud.alert.policy.applied\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":5},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Policy Applied\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-f93958c0-8d83-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ff34eaa0-8d79-11ec-ac12-4bc77fa14e95.json b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ff34eaa0-8d79-11ec-ac12-4bc77fa14e95.json new file mode 100755 index 0000000000..4a17555983 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/kibana/visualization/carbon_black_cloud-ff34eaa0-8d79-11ec-ac12-4bc77fa14e95.json @@ -0,0 +1,25 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"query\":{\"language\":\"kuery\",\"query\":\"data_stream.dataset : \\\"carbon_black_cloud.alert\\\"\"}}" + }, + "title": "[Carbon Black Cloud] Distribution of Alerts by Target Value", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "version": 1, + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Target Value\",\"field\":\"carbon_black_cloud.alert.target_value\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTooltip\":true,\"distinctColors\":false,\"isDonut\":false,\"labels\":{\"last_level\":false,\"percentDecimals\":2,\"position\":\"default\",\"show\":true,\"truncate\":100,\"values\":true,\"valuesFormat\":\"percent\"},\"legendPosition\":\"right\",\"maxLegendLines\":1,\"nestedLegend\":false,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"truncateLegend\":true,\"type\":\"pie\"},\"title\":\"[Carbon Black Cloud] Distribution of Alerts by Target Value\",\"type\":\"pie\"}" + }, + "coreMigrationVersion": "7.17.0", + "id": "carbon_black_cloud-ff34eaa0-8d79-11ec-ac12-4bc77fa14e95", + "migrationVersion": { + "visualization": "7.17.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/carbon_black_cloud/0.1.0/manifest.yml b/packages/carbon_black_cloud/0.1.0/manifest.yml new file mode 100755 index 0000000000..1aa7fd9804 --- /dev/null +++ b/packages/carbon_black_cloud/0.1.0/manifest.yml @@ -0,0 +1,136 @@ +format_version: 1.0.0 +name: carbon_black_cloud +title: Carbon Black Cloud +version: 0.1.0 +license: basic +description: This Elastic integration collects logs from Carbon Black Cloud +type: integration +categories: + - security +release: beta +conditions: + kibana.version: ^7.17.0 || ^8.0.0 +screenshots: + - src: /img/carbon_black_cloud-screenshot.png + title: Carbon Black Cloud alert dashboard screenshot + size: 600x600 + type: image/png +icons: + - src: /img/carbon_black_cloud-logo.svg + title: Carbon Black Cloud logo + size: 32x32 + type: image/svg+xml +policy_templates: + - name: carbon_black_cloud + title: Carbon Black Cloud + description: Collect Logs from Carbon Black Cloud + inputs: + - type: httpjson + title: Collect Carbon Black Cloud logs via API + description: Collect Carbon Black Cloud logs via API + vars: + - name: hostname + type: text + title: Hostname + description: Carbon Black Cloud console Hostname. Find hostname in the console dashboard at the beginning of the web address (Add https:// before the hostname). + required: true + - name: org_key + type: text + title: Organization Key + description: Organization Key. + required: true + - name: custom_api_id + type: text + title: Custom API ID + description: API ID with Custom Access Level type. + required: true + - name: custom_api_secret_key + type: password + title: Custom API Secret Key + description: API Secret Key with Custom Access Level type + required: true + - name: api_id + type: text + title: API ID + description: API ID with API Access Level type. + required: true + - name: api_secret_key + type: password + title: API Secret Key + description: API Secret Key with API Access Level type + required: true + - name: proxy_url + type: text + title: Proxy URL + multi: false + required: false + show_user: false + description: URL to proxy connections in the form of http[s]://:@:. Please ensure your username and password are in URL encoded format. + - name: ssl + type: yaml + title: SSL Configuration + description: i.e. certificate_authorities, supported_protocols, verification_mode etc. + multi: false + required: false + show_user: false + default: | + #certificate_authorities: + # - | + # -----BEGIN CERTIFICATE----- + # MIIDCjCCAfKgAwIBAgITJ706Mu2wJlKckpIvkWxEHvEyijANBgkqhkiG9w0BAQsF + # ADAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwIBcNMTkwNzIyMTkyOTA0WhgPMjExOTA2 + # MjgxOTI5MDRaMBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEB + # BQADggEPADCCAQoCggEBANce58Y/JykI58iyOXpxGfw0/gMvF0hUQAcUrSMxEO6n + # fZRA49b4OV4SwWmA3395uL2eB2NB8y8qdQ9muXUdPBWE4l9rMZ6gmfu90N5B5uEl + # 94NcfBfYOKi1fJQ9i7WKhTjlRkMCgBkWPkUokvBZFRt8RtF7zI77BSEorHGQCk9t + # /D7BS0GJyfVEhftbWcFEAG3VRcoMhF7kUzYwp+qESoriFRYLeDWv68ZOvG7eoWnP + # PsvZStEVEimjvK5NSESEQa9xWyJOmlOKXhkdymtcUd/nXnx6UTCFgnkgzSdTWV41 + # CI6B6aJ9svCTI2QuoIq2HxX/ix7OvW1huVmcyHVxyUECAwEAAaNTMFEwHQYDVR0O + # BBYEFPwN1OceFGm9v6ux8G+DZ3TUDYxqMB8GA1UdIwQYMBaAFPwN1OceFGm9v6ux + # 8G+DZ3TUDYxqMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAG5D + # 874A4YI7YUwOVsVAdbWtgp1d0zKcPRR+r2OdSbTAV5/gcS3jgBJ3i1BN34JuDVFw + # 3DeJSYT3nxy2Y56lLnxDeF8CUTUtVQx3CuGkRg1ouGAHpO/6OqOhwLLorEmxi7tA + # H2O8mtT0poX5AnOAhzVy7QW0D/k4WaoLyckM5hUa6RtvgvLxOwA0U+VGurCDoctu + # 8F4QOgTAWyh8EZIwaKCliFRSynDpv3JTUwtfZkxo6K6nce1RhCWFAsMvDZL8Dgc0 + # yvgJ38BRsFOtkRuAGSf6ZUwTO8JJRRIFnpUzXflAnGivK9M13D5GEQMmIl6U9Pvk + # sxSmbIUfc2SGJGCJD4I= + # -----END CERTIFICATE----- + - type: aws-s3 + title: Collect Carbon Black Cloud logs via AWS S3 + description: Collect Carbon Black Cloud logs via AWS S3 + vars: + - name: bucket_arn + type: text + title: Bucket ARN + multi: false + required: true + show_user: true + - name: access_key_id + type: password + title: Access Key ID + multi: false + required: true + show_user: true + - name: secret_access_key + type: password + title: Secret Access Key + multi: false + required: true + show_user: true + - name: number_of_workers + type: integer + title: Number of Workers + multi: false + required: false + show_user: false + default: 5 + description: Number of workers that will process the S3 objects listed. + - name: proxy_url + type: text + title: Proxy URL + multi: false + required: false + show_user: false + description: URL to proxy connections in the form of http[s]://:@:. Please ensure your username and password are in URL encoded format. +owner: + github: elastic/security-external-integrations diff --git a/packages/checkpoint/1.3.5/changelog.yml b/packages/checkpoint/1.3.5/changelog.yml new file mode 100755 index 0000000000..241789fb63 --- /dev/null +++ b/packages/checkpoint/1.3.5/changelog.yml @@ -0,0 +1,106 @@ +# newer versions go on top +- version: "1.3.5" + changes: + - description: Added link to check point documentation. + type: enhancement + link: https://github.com/elastic/integrations/pull/2926 +- version: "1.3.4" + changes: + - description: Change mapping type of checkpoint.source_object to keyword from integer. + type: bugfix + link: https://github.com/elastic/integrations/pull/2951 +- version: "1.3.3" + changes: + - description: Add documentation for multi-fields + type: enhancement + link: https://github.com/elastic/integrations/pull/2916 +- version: "1.3.2" + changes: + - description: Fix field mapping conflicts for `checkpoint.icmp_type`, `checkpoint.icmp_code` & `checkpoint.email_recipients_num` + type: bugfix + link: https://github.com/elastic/integrations/pull/2895 +- version: "1.3.1" + changes: + - description: Add Ingest Pipeline script to map IANA Protocol Numbers + type: bugfix + link: https://github.com/elastic/integrations/pull/2470 +- version: "1.3.0" + changes: + - description: Update to ECS 8.0 + type: enhancement + link: https://github.com/elastic/integrations/pull/2387 +- version: "1.2.2" + changes: + - description: Regenerate test files using the new GeoIP database + type: bugfix + link: https://github.com/elastic/integrations/pull/2339 +- version: "1.2.1" + changes: + - description: Change test public IPs to the supported subset + type: bugfix + link: https://github.com/elastic/integrations/pull/2327 +- version: "1.2.0" + changes: + - description: Add 8.0.0 version constraint + type: enhancement + link: https://github.com/elastic/integrations/pull/2231 +- version: "1.1.2" + changes: + - description: Update Title and Description. + type: enhancement + link: https://github.com/elastic/integrations/pull/1951 +- version: "1.1.1" + changes: + - description: Fix logic that checks for the 'forwarded' tag + type: bugfix + link: https://github.com/elastic/integrations/pull/1803 +- version: "1.1.0" + changes: + - description: Update to ECS 1.12.0 + type: enhancement + link: https://github.com/elastic/integrations/pull/1653 +- version: "1.0.0" + changes: + - description: make GA + type: enhancement + link: https://github.com/elastic/integrations/pull/1605 +- version: "0.8.2" + changes: + - description: Convert to generated ECS fields + type: enhancement + link: https://github.com/elastic/integrations/pull/1470 +- version: '0.8.1' + changes: + - description: update to ECS 1.11.0 + type: enhancement + link: https://github.com/elastic/integrations/pull/1376 +- version: "0.8.0" + changes: + - description: Update integration description + type: enhancement + link: https://github.com/elastic/integrations/pull/1364 +- version: "0.7.0" + changes: + - description: Set "event.module" and "event.dataset" + type: enhancement + link: https://github.com/elastic/integrations/pull/1256 +- version: "0.6.0" + changes: + - description: update to ECS 1.10.0 and syncing module changes + type: enhancement + link: https://github.com/elastic/integrations/pull/1033 +- version: "0.5.2" + changes: + - description: update to ECS 1.9.0 + type: enhancement + link: https://github.com/elastic/integrations/pull/839 +- version: "0.5.1" + changes: + - description: Change kibana.version constraint to be more conservative. + type: bugfix + link: https://github.com/elastic/integrations/pull/749 +- version: "0.1.0" + changes: + - description: initial release + type: enhancement # can be one of: enhancement, bugfix, breaking-change + link: https://github.com/elastic/integrations/pull/220 diff --git a/packages/checkpoint/1.3.5/data_stream/firewall/agent/stream/log.yml.hbs b/packages/checkpoint/1.3.5/data_stream/firewall/agent/stream/log.yml.hbs new file mode 100755 index 0000000000..24ecbba6d7 --- /dev/null +++ b/packages/checkpoint/1.3.5/data_stream/firewall/agent/stream/log.yml.hbs @@ -0,0 +1,38 @@ +paths: +{{#each paths as |path i|}} + - {{path}} +{{/each}} +exclude_files: [".gz$"] +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +processors: +- add_locale: ~ +{{#if processors}} +{{processors}} +{{/if}} +{{#if internal_zones.length}} +- add_fields: + target: _temp_ + fields: + internal_zones: + {{#each internal_zones as |zone i|}} + - {{zone}} + {{/each}} +{{/if}} +{{#if external_zones.length}} +- add_fields: + target: _temp_ + fields: + external_zones: + {{#each external_zones as |zone i|}} + - {{zone}} + {{/each}} +{{/if}} diff --git a/packages/checkpoint/1.3.5/data_stream/firewall/agent/stream/tcp.yml.hbs b/packages/checkpoint/1.3.5/data_stream/firewall/agent/stream/tcp.yml.hbs new file mode 100755 index 0000000000..9ccc9d6fc3 --- /dev/null +++ b/packages/checkpoint/1.3.5/data_stream/firewall/agent/stream/tcp.yml.hbs @@ -0,0 +1,34 @@ +host: "{{syslog_host}}:{{syslog_port}}" +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +processors: +- add_locale: ~ +{{#if processors}} +{{processors}} +{{/if}} +{{#if internal_zones.length}} +- add_fields: + target: _temp_ + fields: + internal_zones: + {{#each internal_zones as |zone i|}} + - {{zone}} + {{/each}} +{{/if}} +{{#if external_zones.length}} +- add_fields: + target: _temp_ + fields: + external_zones: + {{#each external_zones as |zone i|}} + - {{zone}} + {{/each}} +{{/if}} \ No newline at end of file diff --git a/packages/checkpoint/1.3.5/data_stream/firewall/agent/stream/udp.yml.hbs b/packages/checkpoint/1.3.5/data_stream/firewall/agent/stream/udp.yml.hbs new file mode 100755 index 0000000000..9ccc9d6fc3 --- /dev/null +++ b/packages/checkpoint/1.3.5/data_stream/firewall/agent/stream/udp.yml.hbs @@ -0,0 +1,34 @@ +host: "{{syslog_host}}:{{syslog_port}}" +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +processors: +- add_locale: ~ +{{#if processors}} +{{processors}} +{{/if}} +{{#if internal_zones.length}} +- add_fields: + target: _temp_ + fields: + internal_zones: + {{#each internal_zones as |zone i|}} + - {{zone}} + {{/each}} +{{/if}} +{{#if external_zones.length}} +- add_fields: + target: _temp_ + fields: + external_zones: + {{#each external_zones as |zone i|}} + - {{zone}} + {{/each}} +{{/if}} \ No newline at end of file diff --git a/packages/checkpoint/1.3.5/data_stream/firewall/elasticsearch/ingest_pipeline/default.yml b/packages/checkpoint/1.3.5/data_stream/firewall/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..f50e09ade7 --- /dev/null +++ b/packages/checkpoint/1.3.5/data_stream/firewall/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,795 @@ +--- +description: Pipeline for parsing checkpoint firewall logs +processors: + - set: + field: ecs.version + value: '8.0.0' + - rename: + field: message + target_field: event.original + ignore_missing: true + - grok: + field: event.original + patterns: + - '%{SYSLOG5424PRI}%{NONNEGINT:syslog5424_ver} +(?:%{TIMESTAMP_ISO8601:syslog5424_ts}|-) + +(?:%{IPORHOST:syslog5424_host}|-) +(-|%{SYSLOG5424PRINTASCII:syslog5424_app}) + +(-|%{SYSLOG5424PRINTASCII:syslog5424_proc}) +(?::-|%{SYSLOG5424PRINTASCII:syslog5424_msgid}) + +\[%{GREEDYDATA:syslog5424_sd}\]$' + - kv: + field: syslog5424_sd + field_split: "; " + value_split: ":" + trim_key: " " + trim_value: " " + prefix: checkpoint. + strip_brackets: true + ignore_failure: true + exclude_keys: + - flags + - layer_uuid + - originsicname + - __policy_id_tag + - version + - rounded_bytes + - db_tag + - update_service + - remove: + field: + - syslog5424_sd + - syslog5424_app + - syslog5424_host + - syslog5424_msgid + - syslog5424_pri + - syslog5424_proc + - syslog5424_ver + - host + ignore_missing: true + - rename: + field: "@timestamp" + target_field: "event.created" + ignore_missing: true + - date: + field: "syslog5424_ts" + formats: ["ISO8601", "UNIX"] + if: "ctx.checkpoint?.time == null" + - append: + field: event.category + value: network + if: ctx.checkpoint?.operation != 'Log In' + - set: + field: observer.vendor + value: Checkpoint + - set: + field: observer.type + value: firewall + if: ctx.checkpoint?.type == null + - set: + field: observer.product + value: "{{checkpoint.product}}" + ignore_empty_value: true + - rename: + field: checkpoint.src + target_field: source.ip + ignore_missing: true + - rename: + field: checkpoint.client_ip + target_field: source.ip + ignore_missing: true + if: ctx.source?.ip == null + - rename: + field: checkpoint.xlatesrc + target_field: source.nat.ip + if: "ctx.checkpoint?.xlatesrc != '0.0.0.0'" + ignore_missing: true + - rename: + field: checkpoint.dst + target_field: destination.ip + ignore_missing: true + - rename: + field: checkpoint.xlatedst + target_field: destination.nat.ip + if: "ctx.checkpoint?.xlatedst != '0.0.0.0'" + ignore_missing: true + - rename: + field: checkpoint.uid + target_field: source.user.id + ignore_missing: true + - rename: + field: checkpoint.administrator + target_field: source.user.name + ignore_missing: true + - rename: + field: checkpoint.source_user_name + target_field: source.user.name + if: ctx.source?.user?.name == null + ignore_missing: true + - convert: + field: checkpoint.client_outbound_packets + target_field: source.packets + type: long + ignore_failure: true + ignore_missing: true + - convert: + field: checkpoint.server_outbound_packets + target_field: destination.packets + type: long + ignore_failure: true + ignore_missing: true + - convert: + field: checkpoint.client_outbound_bytes + target_field: source.bytes + type: long + ignore_failure: true + ignore_missing: true + - convert: + field: checkpoint.sent_byte + target_field: source.bytes + type: long + ignore_failure: true + ignore_missing: true + if: ctx.source?.bytes == null + - convert: + field: checkpoint.server_outbound_bytes + target_field: destination.bytes + type: long + ignore_failure: true + ignore_missing: true + - convert: + field: checkpoint.received_bytes + target_field: destination.bytes + type: long + ignore_failure: true + ignore_missing: true + if: ctx.destination?.bytes == null + - convert: + field: checkpoint.service + target_field: destination.port + type: long + ignore_failure: true + ignore_missing: true + - convert: + field: checkpoint.xlatedport + target_field: destination.nat.port + type: long + ignore_failure: true + ignore_missing: true + if: "ctx.checkpoint?.xlatedport != '0'" + - convert: + field: checkpoint.s_port + target_field: source.port + type: long + ignore_failure: true + ignore_missing: true + - convert: + field: checkpoint.xlatesport + target_field: source.nat.port + type: long + ignore_failure: true + ignore_missing: true + if: "ctx.checkpoint?.xlatesport != '0'" + - rename: + field: checkpoint.mac_source_address + target_field: source.mac + ignore_missing: true + - rename: + field: checkpoint.from + target_field: source.user.email + ignore_missing: true + - rename: + field: checkpoint.src_machine_name + target_field: source.domain + ignore_missing: true + - rename: + field: checkpoint.destination_dns_hostname + target_field: destination.domain + ignore_missing: true + - rename: + field: checkpoint.dst_machine_name + target_field: destination.domain + if: ctx.server?.domain == null + ignore_missing: true + - rename: + field: checkpoint.src_user_group + target_field: source.user.group.name + ignore_missing: true + - append: + field: event.category + value: authentication + if: ctx.checkpoint?.operation == 'Log In' + - set: + field: event.kind + value: alert + if: "['Prevent', 'Detect', 'Quarantine'].contains(ctx.checkpoint?.rule_action)" + - set: + field: event.kind + value: event + if: ctx.event?.kind == null + - set: + field: event.outcome + value: success + if: "['Accept', 'Allow'].contains(ctx.checkpoint?.rule_action)" + - append: + field: event.type + value: + - allowed + - connection + if: "['Accept', 'Allow'].contains(ctx.checkpoint?.rule_action)" + - set: + field: event.outcome + value: success + if: ctx.checkpoint?.audit_status == 'Success' + - set: + field: event.outcome + value: failure + if: ctx.checkpoint?.audit_status == 'Failure' + - set: + field: event.outcome + value: success + if: "['Drop', 'Reject', 'Block', 'Prevent'].contains(ctx.checkpoint?.rule_action)" + - append: + field: event.type + value: + - connection + - denied + if: "['Drop', 'Reject', 'Block', 'Prevent'].contains(ctx.checkpoint?.rule_action)" + - append: + field: event.category + value: malware + if: ctx.checkpoint?.malware_action != null + - append: + field: event.category + value: intrusion_detection + if: "['Detect', 'Prevent'].contains(ctx.checkpoint?.rule_action)" + - append: + field: related.ip + value: "{{source.ip}}" + if: ctx.source?.ip != null + - append: + field: related.ip + value: "{{source.nat.ip}}" + if: ctx.source?.nat?.ip != null + - append: + field: related.ip + value: "{{destination.ip}}" + if: ctx.destination?.ip != null + - append: + field: related.ip + value: "{{destination.nat.ip}}" + if: ctx.destination?.nat?.ip != null + - append: + field: related.hash + value: "{{checkpoint.file_md5}}" + if: ctx.checkpoint?.file_md5 != null + - append: + field: related.hash + value: "{{checkpoint.file_sha1}}" + if: ctx.checkpoint?.file_sha1 != null + - append: + field: related.hash + value: "{{checkpoint.file_sha256}}" + if: ctx.checkpoint?.file_sha256 != null + - rename: + field: checkpoint.to + target_field: destination.user.email + ignore_missing: true + - rename: + field: checkpoint.usercheck_incident_uid + target_field: destination.user.id + ignore_missing: true + - rename: + field: checkpoint.service_name + target_field: destination.service.name + ignore_missing: true + - rename: + field: checkpoint.mac_destination_address + target_field: destination.mac + ignore_missing: true + - rename: + field: checkpoint.dns_type + target_field: dns.question.type + ignore_missing: true + - rename: + field: checkpoint.domain_name + target_field: dns.question.name + ignore_missing: true + - rename: + field: checkpoint.dns_message_type + target_field: dns.type + ignore_missing: true + - rename: + field: checkpoint.tid + target_field: dns.id + ignore_missing: true + - rename: + field: checkpoint.loguid + target_field: event.id + ignore_missing: true + - convert: + field: checkpoint.sequencenum + target_field: event.sequence + type: long + ignore_failure: true + ignore_missing: true + - convert: + field: checkpoint.severity + target_field: event.severity + type: long + ignore_failure: true + ignore_missing: true + - rename: + field: checkpoint.action + target_field: event.action + ignore_missing: true + - rename: + field: checkpoint.packet_capture + target_field: event.url + ignore_missing: true + - rename: + field: checkpoint.start_time + target_field: event.start + ignore_missing: true + - rename: + field: checkpoint.first_detection + target_field: event.start + ignore_missing: true + if: ctx.event?.start == null + - rename: + field: checkpoint.last_detection + target_field: event.end + ignore_missing: true + - rename: + field: checkpoint.app_risk + target_field: event.risk_score + ignore_missing: true + - rename: + field: checkpoint.file_id + target_field: file.inode + ignore_missing: true + - rename: + field: checkpoint.file_type + target_field: file.type + ignore_missing: true + - rename: + field: checkpoint.file_name + target_field: file.name + ignore_missing: true + - convert: + field: checkpoint.file_size + target_field: file.size + type: long + ignore_failure: true + ignore_missing: true + - rename: + field: checkpoint.file_md5 + target_field: file.hash.md5 + ignore_missing: true + - rename: + field: checkpoint.file_sha1 + target_field: file.hash.sha1 + ignore_missing: true + - rename: + field: checkpoint.file_sha256 + target_field: file.hash.sha256 + ignore_missing: true + - rename: + field: checkpoint.dlp_file_name + target_field: file.name + ignore_missing: true + - rename: + field: checkpoint.user_group + target_field: group.name + ignore_missing: true + - rename: + field: checkpoint.os_version + target_field: host.os.version + ignore_missing: true + - rename: + field: checkpoint.os_name + target_field: host.os.name + ignore_missing: true + - rename: + field: checkpoint.method + target_field: http.request.method + ignore_missing: true + - rename: + field: checkpoint.referrer + target_field: http.request.referrer + ignore_missing: true + - rename: + field: checkpoint.service_id + target_field: network.application + ignore_missing: true + - rename: + field: checkpoint.ifdir + target_field: network.direction + ignore_missing: true + - rename: + field: checkpoint.bytes + target_field: network.bytes + ignore_missing: true + - rename: + field: checkpoint.proto + target_field: network.iana_number + ignore_missing: true + - script: + lang: painless + ignore_failure: true + if: ctx?.network?.iana_number != null + source: | + def iana_number = ctx.network.iana_number; + if (iana_number == '0') { + ctx.network.transport = 'hopopt'; + } else if (iana_number == '1') { + ctx.network.transport = 'icmp'; + } else if (iana_number == '2') { + ctx.network.transport = 'igmp'; + } else if (iana_number == '6') { + ctx.network.transport = 'tcp'; + } else if (iana_number == '8') { + ctx.network.transport = 'egp'; + } else if (iana_number == '17') { + ctx.network.transport = 'udp'; + } else if (iana_number == '47') { + ctx.network.transport = 'gre'; + } else if (iana_number == '50') { + ctx.network.transport = 'esp'; + } else if (iana_number == '58') { + ctx.network.transport = 'ipv6-icmp'; + } else if (iana_number == '112') { + ctx.network.transport = 'vrrp'; + } else if (iana_number == '132') { + ctx.network.transport = 'sctp'; + } + - rename: + field: checkpoint.packets + target_field: network.packets + ignore_missing: true + - rename: + field: checkpoint.layer_name + target_field: network.name + ignore_missing: true + - rename: + field: checkpoint.app_name + target_field: network.application + ignore_missing: true + - rename: + field: checkpoint.client_inbound_interface + target_field: observer.ingress.interface.name + ignore_missing: true + - rename: + field: checkpoint.client_outbound_interface + target_field: observer.egress.interface.name + ignore_missing: true + - rename: + field: checkpoint.ifname + target_field: observer.ingress.interface.name + ignore_missing: true + if: ctx.network?.direction == 'inbound' + - rename: + field: checkpoint.ifname + target_field: observer.egress.interface.name + ignore_missing: true + if: ctx.network?.direction == 'outbound' + - rename: + field: checkpoint.type + target_field: observer.type + ignore_missing: true + - rename: + field: checkpoint.origin + target_field: observer.name + ignore_missing: true + - rename: + field: checkpoint.origin_ip + target_field: observer.ip + ignore_missing: true + - rename: + field: checkpoint.endpoint_ip + target_field: observer.ip + ignore_missing: true + if: ctx.observer?.ip == null + - rename: + field: checkpoint.outzone + target_field: observer.egress.zone + ignore_missing: true + - rename: + field: checkpoint.inzone + target_field: observer.ingress.zone + ignore_missing: true + - rename: + field: checkpoint.security_outzone + target_field: observer.egress.zone + ignore_missing: true + if: ctx.observer?.egress?.zone == null + - rename: + field: checkpoint.security_inzone + target_field: observer.ingress.zone + ignore_missing: true + if: ctx.observer?.ingress?.zone == null + - rename: + field: checkpoint.update_version + target_field: observer.version + ignore_missing: true + - rename: + field: checkpoint.process_md5 + target_field: process.hash.md5 + ignore_missing: true + - rename: + field: checkpoint.process_name + target_field: process.name + ignore_missing: true + - rename: + field: checkpoint.parent_process_md5 + target_field: process.parent.hash.md5 + ignore_missing: true + - rename: + field: checkpoint.parent_process_name + target_field: process.parent.name + ignore_missing: true + - rename: + field: checkpoint.matched_category + target_field: rule.category + ignore_missing: true + - rename: + field: checkpoint.categories + target_field: rule.category + ignore_missing: true + if: ctx.rule?.category == null + - rename: + field: checkpoint.malware_action + target_field: rule.description + ignore_missing: true + - rename: + field: checkpoint.malware_rule_id + target_field: rule.id + ignore_missing: true + - rename: + field: checkpoint.app_rule_id + target_field: rule.id + ignore_missing: true + if: ctx.rule?.id == null + - rename: + field: checkpoint.objectname + target_field: rule.name + ignore_missing: true + - rename: + field: checkpoint.rule_name + target_field: rule.name + ignore_missing: true + if: ctx.rule?.name == null + - rename: + field: checkpoint.malware_rule_name + target_field: rule.name + ignore_missing: true + if: ctx.rule?.name == null + - rename: + field: checkpoint.app_rule_name + target_field: rule.name + ignore_missing: true + if: ctx.rule?.name == null + - rename: + field: checkpoint.dlp_rule_name + target_field: rule.name + ignore_missing: true + if: ctx.rule?.name == null + - rename: + field: checkpoint.smartdefence_profile + target_field: rule.ruleset + ignore_missing: true + - rename: + field: checkpoint.policy + target_field: rule.ruleset + ignore_missing: true + if: ctx.rule?.ruleset == null + - rename: + field: checkpoint.rule_uid + target_field: rule.uuid + ignore_missing: true + - rename: + field: checkpoint.dlp_rule_uid + target_field: rule.uuid + ignore_missing: true + if: ctx.rule?.uuid == null + - rename: + field: checkpoint.url + target_field: url.original + ignore_missing: true + - rename: + field: checkpoint.resource + target_field: url.original + ignore_missing: true + if: ctx.url?.original == null + - rename: + field: checkpoint.http_host + target_field: url.domain + ignore_missing: true + - rename: + field: checkpoint.web_client_type + target_field: user_agent.name + ignore_missing: true + - rename: + field: checkpoint.user_agent + target_field: user_agent.original + ignore_missing: true + - rename: + field: checkpoint.industry_reference + target_field: vulnerability.id + ignore_missing: true + - date: + field: "checkpoint.time" + formats: ["ISO8601", "UNIX"] + if: "ctx.checkpoint?.time != null" + - rename: + field: checkpoint.message + target_field: message + ignore_missing: true + - rename: + field: checkpoint.reason + target_field: message + ignore_missing: true + if: ctx.message == null + - rename: + field: checkpoint.subject + target_field: message + ignore_missing: true + if: ctx.message == null + - gsub: + field: checkpoint.sys_message + pattern: ^:" + replacement: "" + if: ctx.checkpoint?.sys_message != null + - append: + field: related.user + value: "{{source.user.name}}" + if: ctx.source?.user?.name != null + - append: + field: related.user + value: "{{destination.user.name}}" + if: ctx.destination?.user?.name != null + - script: + lang: painless + source: "ctx.network.bytes = ctx.source.bytes + ctx.destination.bytes" + if: ctx?.source?.bytes != null && ctx?.destination?.bytes != null && ctx?.network?.bytes == null + ignore_failure: true + - script: + lang: painless + source: "ctx.network.packets = ctx.source.packets + ctx.destination.packets" + if: ctx?.source?.packets != null && ctx?.destination?.packets != null && ctx?.network?.packets == null + ignore_failure: true + - rename: + field: checkpoint.action_reason + target_field: checkpoint.action_reason_msg + if: ctx.checkpoint?.action_reason != null && ctx.checkpoint?.action_reason.contains(" ") + ignore_missing: true + - geoip: + field: source.ip + target_field: source.geo + ignore_missing: true + if: ctx.source?.geo == null + - geoip: + field: destination.ip + target_field: destination.geo + ignore_missing: true + if: ctx.destination?.geo == null + - geoip: + database_file: GeoLite2-ASN.mmdb + field: source.ip + target_field: source.as + properties: + - asn + - organization_name + ignore_missing: true + - geoip: + database_file: GeoLite2-ASN.mmdb + field: destination.ip + target_field: destination.as + properties: + - asn + - organization_name + ignore_missing: true + - rename: + field: source.as.asn + target_field: source.as.number + ignore_missing: true + - rename: + field: source.as.organization_name + target_field: source.as.organization.name + ignore_missing: true + - rename: + field: destination.as.asn + target_field: destination.as.number + ignore_missing: true + - rename: + field: destination.as.organization_name + target_field: destination.as.organization.name + ignore_missing: true + # Handle zone-based network directionality + - set: + field: network.direction + value: inbound + if: > + ctx?._temp_?.external_zones != null && + ctx?._temp_?.internal_zones != null && + ctx?.observer?.ingress?.zone != null && + ctx?.observer?.egress?.zone != null && + ctx._temp_.external_zones.contains(ctx.observer.ingress.zone) && + ctx._temp_.internal_zones.contains(ctx.observer.egress.zone) + - set: + field: network.direction + value: outbound + if: > + ctx?._temp_?.external_zones != null && + ctx?._temp_?.internal_zones != null && + ctx?.observer?.ingress?.zone != null && + ctx?.observer?.egress?.zone != null && + ctx._temp_.external_zones.contains(ctx.observer.egress.zone) && + ctx._temp_.internal_zones.contains(ctx.observer.ingress.zone) + - set: + field: network.direction + value: internal + if: > + ctx?._temp_?.external_zones != null && + ctx?._temp_?.internal_zones != null && + ctx?.observer?.ingress?.zone != null && + ctx?.observer?.egress?.zone != null && + ctx._temp_.internal_zones.contains(ctx.observer.egress.zone) && + ctx._temp_.internal_zones.contains(ctx.observer.ingress.zone) + - set: + field: network.direction + value: external + if: > + ctx?._temp_?.external_zones != null && + ctx?._temp_?.internal_zones != null && + ctx?.observer?.ingress?.zone != null && + ctx?.observer?.egress?.zone != null && + ctx._temp_.external_zones.contains(ctx.observer.egress.zone) && + ctx._temp_.external_zones.contains(ctx.observer.ingress.zone) + - set: + field: network.direction + value: unknown + if: > + ctx?._temp_?.external_zones != null && + ctx?._temp_?.internal_zones != null && + ctx?.observer?.ingress?.zone != null && + ctx?.observer?.egress?.zone != null && + ( + ( + !ctx._temp_.external_zones.contains(ctx.observer.egress.zone) && + !ctx._temp_.internal_zones.contains(ctx.observer.egress.zone) + ) || + ( + !ctx._temp_.external_zones.contains(ctx.observer.ingress.zone) && + !ctx._temp_.internal_zones.contains(ctx.observer.ingress.zone) + ) + ) + - remove: + field: + - checkpoint.client_outbound_packets + - checkpoint.server_outbound_packets + - checkpoint.client_outbound_bytes + - checkpoint.sent_byte + - checkpoint.server_outbound_bytes + - checkpoint.received_bytes + - checkpoint.service + - checkpoint.xlatedport + - checkpoint.s_port + - checkpoint.xlatesport + - checkpoint.sequencenum + - checkpoint.file_size + - checkpoint.product + - checkpoint.severity + - checkpoint.xlatesrc + - checkpoint.xlatedst + - checkpoint.uid + - checkpoint.time + - syslog5424_ts + - _temp_ + ignore_missing: true + - remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_failure: true + ignore_missing: true +on_failure: + - set: + field: error.message + value: "{{ _ingest.on_failure_message }}" diff --git a/packages/checkpoint/1.3.5/data_stream/firewall/fields/agent.yml b/packages/checkpoint/1.3.5/data_stream/firewall/fields/agent.yml new file mode 100755 index 0000000000..79a7a39864 --- /dev/null +++ b/packages/checkpoint/1.3.5/data_stream/firewall/fields/agent.yml @@ -0,0 +1,180 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: "Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on." + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: "The cloud account or organization id used to identify different entities in a multi-tenant environment.\nExamples: AWS account id, Google Cloud ORG Id, or other unique identifier." + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: "Container fields are used for meta information about the specific container that is the source of information.\nThese fields help correlate data based containers from any runtime." + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: "A host is defined as a general computing instance.\nECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes." + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: "Name of the domain of which the host is a member.\nFor example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider." + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: "Hostname of the host.\nIt normally contains what the `hostname` command returns on the host machine." + - name: id + level: core + type: keyword + ignore_above: 1024 + description: "Unique host id.\nAs hostname is not always unique, use values that are meaningful in your environment.\nExample: The current usage of `beat.name`." + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: "Name of the host.\nIt can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use." + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: "Type of host.\nFor Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment." + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + diff --git a/packages/checkpoint/1.3.5/data_stream/firewall/fields/base-fields.yml b/packages/checkpoint/1.3.5/data_stream/firewall/fields/base-fields.yml new file mode 100755 index 0000000000..6bdf832a14 --- /dev/null +++ b/packages/checkpoint/1.3.5/data_stream/firewall/fields/base-fields.yml @@ -0,0 +1,20 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module + value: checkpoint +- name: event.dataset + type: constant_keyword + description: Event dataset + value: checkpoint.firewall +- name: '@timestamp' + type: date + description: Event timestamp. diff --git a/packages/checkpoint/1.3.5/data_stream/firewall/fields/beats.yml b/packages/checkpoint/1.3.5/data_stream/firewall/fields/beats.yml new file mode 100755 index 0000000000..e272492dea --- /dev/null +++ b/packages/checkpoint/1.3.5/data_stream/firewall/fields/beats.yml @@ -0,0 +1,15 @@ +- description: Type of Filebeat input. + name: input.type + type: keyword +- description: Flags for the log file. + name: log.flags + type: keyword +- description: Offset of the entry in the log file. + name: log.offset + type: long +- description: Name of the service data is collected from. + name: destination.service.name + type: keyword +- description: Source address of logs received over the network. + name: log.source.address + type: keyword diff --git a/packages/checkpoint/1.3.5/data_stream/firewall/fields/ecs.yml b/packages/checkpoint/1.3.5/data_stream/firewall/fields/ecs.yml new file mode 100755 index 0000000000..2ab1a56523 --- /dev/null +++ b/packages/checkpoint/1.3.5/data_stream/firewall/fields/ecs.yml @@ -0,0 +1,493 @@ +- description: Unique container id. + name: container.id + type: keyword +- description: Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. + name: destination.as.number + type: long +- description: Organization name. + multi_fields: + - name: text + type: match_only_text + name: destination.as.organization.name + type: keyword +- description: Bytes sent from the destination to the source. + name: destination.bytes + type: long +- description: |- + The domain name of the destination system. + This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. + name: destination.domain + type: keyword +- description: City name. + name: destination.geo.city_name + type: keyword +- description: Name of the continent. + name: destination.geo.continent_name + type: keyword +- description: Country ISO code. + name: destination.geo.country_iso_code + type: keyword +- description: Country name. + name: destination.geo.country_name + type: keyword +- description: Longitude and latitude. + level: core + name: destination.geo.location + type: geo_point +- description: |- + User-defined description of a location, at the level of granularity they care about. + Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. + Not typically used in automated geolocation. + name: destination.geo.name + type: keyword +- description: Region ISO code. + name: destination.geo.region_iso_code + type: keyword +- description: Region name. + name: destination.geo.region_name + type: keyword +- description: IP address of the destination (IPv4 or IPv6). + name: destination.ip + type: ip +- description: |- + MAC address of the destination. + The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen. + name: destination.mac + type: keyword +- description: |- + Translated ip of destination based NAT sessions (e.g. internet to private DMZ) + Typically used with load balancers, firewalls, or routers. + name: destination.nat.ip + type: ip +- description: |- + Port the source session is translated to by NAT Device. + Typically used with load balancers, firewalls, or routers. + name: destination.nat.port + type: long +- description: Packets sent from the destination to the source. + name: destination.packets + type: long +- description: Port of the destination. + name: destination.port + type: long +- description: User email address. + name: destination.user.email + type: keyword +- description: Unique identifier of the user. + name: destination.user.id + type: keyword +- description: Short name or login of the user. + multi_fields: + - name: text + type: match_only_text + name: destination.user.name + type: keyword +- description: The DNS packet identifier assigned by the program that generated the query. The identifier is copied to the response. + name: dns.id + type: keyword +- description: |- + The name being queried. + If the name field contains non-printable characters (below 32 or above 126), those characters should be represented as escaped base 10 integers (\DDD). Back slashes and quotes should be escaped. Tabs, carriage returns, and line feeds should be converted to \t, \r, and \n respectively. + name: dns.question.name + type: keyword +- description: The type of record being queried. + name: dns.question.type + type: keyword +- description: |- + The type of DNS event captured, query or answer. + If your source of DNS events only gives you DNS queries, you should only create dns events of type `dns.type:query`. + If your source of DNS events gives you answers as well, you should create one event per query (optionally as soon as the query is seen). And a second event containing all query details as well as an array of answers. + name: dns.type + type: keyword +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: Error message. + name: error.message + type: match_only_text +- description: |- + The action captured by the event. + This describes the information in the event. It is more specific than `event.category`. Examples are `group-add`, `process-started`, `file-created`. The value is normally defined by the implementer. + name: event.action + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. + `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. + This field is an array. This will allow proper categorization of some events that fall in multiple categories. + name: event.category + type: keyword +- description: |- + event.created contains the date/time when the event was first read by an agent, or by your pipeline. + This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. + In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. + In case the two timestamps are identical, @timestamp should be used. + name: event.created + type: date +- description: event.end contains the date when the event ended or when the activity was last observed. + name: event.end + type: date +- description: Unique ID to describe the event. + name: event.id + type: keyword +- description: |- + Timestamp when an event arrived in the central data store. + This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. + In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`. + name: event.ingested + type: date +- description: |- + This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. + `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. + The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. + name: event.kind + type: keyword +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the lowest level in the ECS category hierarchy. + `event.outcome` simply denotes whether the event represents a success or a failure from the perspective of the entity that produced the event. + Note that when a single transaction is described in multiple events, each event may populate different values of `event.outcome`, according to their perspective. + Also note that in the case of a compound event (a single event that contains multiple logical events), this field should be populated with the value that best captures the overall success or failure from the perspective of the event producer. + Further note that not all events will have an associated outcome. For example, this field is generally not populated for metric events, events with `event.type:info`, or any events for which an outcome does not make logical sense. + name: event.outcome + type: keyword +- description: Risk score or priority of the event (e.g. security solutions). Use your system's original value here. + name: event.risk_score + type: float +- description: |- + Sequence number of the event. + The sequence number is a value published by some event sources, to make the exact ordering of events unambiguous, regardless of the timestamp precision. + name: event.sequence + type: long +- description: |- + The numeric severity of the event according to your event source. + What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. + The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. + name: event.severity + type: long +- description: event.start contains the date when the event started or when the activity was first observed. + name: event.start + type: date +- description: |- + This field should be populated when the event's timestamp does not include timezone information already (e.g. default Syslog timestamps). It's optional otherwise. + Acceptable timezone formats are: a canonical ID (e.g. "Europe/Amsterdam"), abbreviated (e.g. "EST") or an HH:mm differential (e.g. "-05:00"). + name: event.timezone + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. + `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. + This field is an array. This will allow proper categorization of some events that fall in multiple event types. + name: event.type + type: keyword +- description: |- + URL linking to an external system to continue investigation of this event. + This URL links to another system where in-depth investigation of the specific occurrence of this event can take place. Alert events, indicated by `event.kind:alert`, are a common use case for this field. + name: event.url + type: keyword +- description: MD5 hash. + name: file.hash.md5 + type: keyword +- description: SHA1 hash. + name: file.hash.sha1 + type: keyword +- description: SHA256 hash. + name: file.hash.sha256 + type: keyword +- description: Inode representing the file in the filesystem. + name: file.inode + type: keyword +- description: Name of the file including the extension, without the directory. + name: file.name + type: keyword +- description: |- + File size in bytes. + Only relevant when `file.type` is "file". + name: file.size + type: long +- description: File type (file, dir, or symlink). + name: file.type + type: keyword +- description: Name of the group. + name: group.name + type: keyword +- description: |- + Name of the host. + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. + name: host.name + type: keyword +- description: Operating system name, without the version. + multi_fields: + - name: text + type: match_only_text + name: host.os.name + type: keyword +- description: Operating system version as a raw string. + name: host.os.version + type: keyword +- description: |- + HTTP request method. + The value should retain its casing from the original event. For example, `GET`, `get`, and `GeT` are all considered valid values for this field. + name: http.request.method + type: keyword +- description: Referrer for this HTTP request. + name: http.request.referrer + type: keyword +- description: |- + For log events the message field contains the log message, optimized for viewing in a log viewer. + For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. + If multiple messages exist, they can be combined into one message. + name: message + type: match_only_text +- description: |- + When a specific application or service is identified from network connection details (source/dest IPs, ports, certificates, or wire format), this field captures the application's or service's name. + For example, the original event identifies the network connection being from a specific web service in a `https` network connection, like `facebook` or `twitter`. + The field value must be normalized to lowercase for querying. + name: network.application + type: keyword +- description: |- + Total bytes transferred in both directions. + If `source.bytes` and `destination.bytes` are known, `network.bytes` is their sum. + name: network.bytes + type: long +- description: |- + Direction of the network traffic. + Recommended values are: + * ingress + * egress + * inbound + * outbound + * internal + * external + * unknown + + When mapping events from a host-based monitoring context, populate this field from the host's point of view, using the values "ingress" or "egress". + When mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of the network perimeter, using the values "inbound", "outbound", "internal" or "external". + Note that "internal" is not crossing perimeter boundaries, and is meant to describe communication between two hosts within the perimeter. Note also that "external" is meant to describe traffic between two hosts that are external to the perimeter. This could for example be useful for ISPs or VPN service providers. + name: network.direction + type: keyword +- description: IANA Protocol Number (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Standardized list of protocols. This aligns well with NetFlow and sFlow related logs which use the IANA Protocol Number. + name: network.iana_number + type: keyword +- description: |- + Same as network.iana_number, but instead using the Keyword name of the transport layer (udp, tcp, ipv6-icmp, etc.) + The field value must be normalized to lowercase for querying. + name: network.transport + type: keyword +- description: Name given by operators to sections of their network. + name: network.name + type: keyword +- description: |- + Total packets transferred in both directions. + If `source.packets` and `destination.packets` are known, `network.packets` is their sum. + name: network.packets + type: long +- description: Interface name as reported by the system. + name: observer.egress.interface.name + type: keyword +- description: Network zone of outbound traffic as reported by the observer to categorize the destination area of egress traffic, e.g. Internal, External, DMZ, HR, Legal, etc. + name: observer.egress.zone + type: keyword +- description: Interface name as reported by the system. + name: observer.ingress.interface.name + type: keyword +- description: Network zone of incoming traffic as reported by the observer to categorize the source area of ingress traffic. e.g. internal, External, DMZ, HR, Legal, etc. + name: observer.ingress.zone + type: keyword +- description: IP addresses of the observer. + name: observer.ip + type: ip +- description: |- + Custom name of the observer. + This is a name that can be given to an observer. This can be helpful for example if multiple firewalls of the same model are used in an organization. + If no custom name is needed, the field can be left empty. + name: observer.name + type: keyword +- description: The product name of the observer. + name: observer.product + type: keyword +- description: |- + The type of the observer the data is coming from. + There is no predefined list of observer types. Some examples are `forwarder`, `firewall`, `ids`, `ips`, `proxy`, `poller`, `sensor`, `APM server`. + name: observer.type + type: keyword +- description: Vendor name of the observer. + name: observer.vendor + type: keyword +- description: Observer version. + name: observer.version + type: keyword +- description: MD5 hash. + name: process.hash.md5 + type: keyword +- description: |- + Process name. + Sometimes called program name or similar. + multi_fields: + - name: text + type: match_only_text + name: process.name + type: keyword +- description: MD5 hash. + name: process.parent.hash.md5 + type: keyword +- description: |- + Process name. + Sometimes called program name or similar. + multi_fields: + - name: text + type: match_only_text + name: process.parent.name + type: keyword +- description: All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). + name: related.hash + type: keyword +- description: All of the IPs seen on your event. + name: related.ip + type: ip +- description: All the user names or other user identifiers seen on the event. + name: related.user + type: keyword +- description: A categorization value keyword used by the entity using the rule for detection of this event. + name: rule.category + type: keyword +- description: The description of the rule generating the event. + name: rule.description + type: keyword +- description: A rule ID that is unique within the scope of an agent, observer, or other entity using the rule for detection of this event. + name: rule.id + type: keyword +- description: The name of the rule or signature generating the event. + name: rule.name + type: keyword +- description: Name of the ruleset, policy, group, or parent category in which the rule used to generate this event is a member. + name: rule.ruleset + type: keyword +- description: A rule ID that is unique within the scope of a set or group of agents, observers, or other entities using the rule for detection of this event. + name: rule.uuid + type: keyword +- description: Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. + name: source.as.number + type: long +- description: Organization name. + multi_fields: + - name: text + type: match_only_text + name: source.as.organization.name + type: keyword +- description: Bytes sent from the source to the destination. + name: source.bytes + type: long +- description: |- + The domain name of the source system. + This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. + name: source.domain + type: keyword +- description: City name. + name: source.geo.city_name + type: keyword +- description: Name of the continent. + name: source.geo.continent_name + type: keyword +- description: Country ISO code. + name: source.geo.country_iso_code + type: keyword +- description: Country name. + name: source.geo.country_name + type: keyword +- description: Longitude and latitude. + level: core + name: source.geo.location + type: geo_point +- description: |- + User-defined description of a location, at the level of granularity they care about. + Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. + Not typically used in automated geolocation. + name: source.geo.name + type: keyword +- description: Region ISO code. + name: source.geo.region_iso_code + type: keyword +- description: Region name. + name: source.geo.region_name + type: keyword +- description: IP address of the source (IPv4 or IPv6). + name: source.ip + type: ip +- description: |- + MAC address of the source. + The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen. + name: source.mac + type: keyword +- description: |- + Translated ip of source based NAT sessions (e.g. internal client to internet) + Typically connections traversing load balancers, firewalls, or routers. + name: source.nat.ip + type: ip +- description: |- + Translated port of source based NAT sessions. (e.g. internal client to internet) + Typically used with load balancers, firewalls, or routers. + name: source.nat.port + type: long +- description: Packets sent from the source to the destination. + name: source.packets + type: long +- description: Port of the source. + name: source.port + type: long +- description: User email address. + name: source.user.email + type: keyword +- description: Name of the group. + name: source.user.group.name + type: keyword +- description: Unique identifier of the user. + name: source.user.id + type: keyword +- description: Short name or login of the user. + multi_fields: + - name: text + type: match_only_text + name: source.user.name + type: keyword +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: |- + Domain of the url, such as "www.elastic.co". + In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. + If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. + name: url.domain + type: keyword +- description: |- + Unmodified original url as seen in the event source. + Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. + This field is meant to represent the URL as it was observed, complete or not. + multi_fields: + - name: text + type: match_only_text + name: url.original + type: wildcard +- description: Name of the user agent. + name: user_agent.name + type: keyword +- description: Unparsed user_agent string. + multi_fields: + - name: text + type: match_only_text + name: user_agent.original + type: keyword +- description: The identification (ID) is the number portion of a vulnerability entry. It includes a unique identification number for the vulnerability. For example (https://cve.mitre.org/about/faqs.html#what_is_cve_id)[Common Vulnerabilities and Exposure CVE ID] + name: vulnerability.id + type: keyword +- description: |- + Full path to the log file this event came from, including the file name. It should include the drive letter, when appropriate. + If the event wasn't read from a log file, do not populate this field. + name: log.file.path + type: keyword diff --git a/packages/checkpoint/1.3.5/data_stream/firewall/fields/fields.yml b/packages/checkpoint/1.3.5/data_stream/firewall/fields/fields.yml new file mode 100755 index 0000000000..a389420a0c --- /dev/null +++ b/packages/checkpoint/1.3.5/data_stream/firewall/fields/fields.yml @@ -0,0 +1,1626 @@ +- name: checkpoint + type: group + release: beta + fields: + - name: action_reason + type: integer + description: | + Connection drop reason. + - name: action_reason_msg + type: keyword + overwrite: true + description: | + Connection drop reason message. + - name: additional_info + type: keyword + description: | + ID of original file/mail which are sent by admin. + - name: additional_ip + type: keyword + description: | + DNS host name. + - name: additional_rdata + type: keyword + description: | + List of additional resource records. + - name: alert + type: keyword + description: | + Alert level of matched rule (for connection logs). + - name: allocated_ports + type: integer + description: | + Amount of allocated ports. + - name: analyzed_on + type: keyword + description: | + Check Point ThreatCloud / emulator name. + - name: answer_rdata + type: keyword + description: | + List of answer resource records to the questioned domains. + - name: anti_virus_type + type: keyword + description: | + Anti virus type. + - name: app_desc + type: keyword + description: | + Application description. + - name: app_id + type: integer + description: | + Application ID. + - name: app_package + type: keyword + description: | + Unique identifier of the application on the protected mobile device. + - name: app_properties + type: keyword + description: | + List of all found categories. + - name: app_repackaged + type: keyword + description: | + Indicates whether the original application was repackage not by the official developer. + - name: app_sid_id + type: keyword + description: | + Unique SHA identifier of a mobile application. + - name: app_sig_id + type: keyword + description: | + IOC indicator description. + - name: app_version + type: keyword + description: | + Version of the application downloaded on the protected mobile device. + - name: appi_name + type: keyword + description: | + Name of application downloaded on the protected mobile device. + - name: arrival_time + type: keyword + description: | + Email arrival timestamp. + - name: attachments_num + type: integer + description: | + Number of attachments in the mail. + - name: attack_status + type: keyword + description: | + In case of a malicious event on an endpoint computer, the status of the attack. + - name: audit_status + type: keyword + description: | + Audit Status. Can be Success or Failure. + - name: auth_method + type: keyword + description: | + Password authentication protocol used (PAP or EAP). + - name: authority_rdata + type: keyword + description: | + List of authoritative servers. + - name: authorization + type: keyword + description: | + Authorization HTTP header value. + - name: bcc + type: keyword + description: | + List of BCC addresses. + - name: blade_name + type: keyword + description: | + Blade name. + - name: broker_publisher + type: ip + description: | + IP address of the broker publisher who shared the session information. + - name: browse_time + type: keyword + description: | + Application session browse time. + - name: c_bytes + type: integer + description: | + Boolean value indicates whether bytes sent from the client side are used. + - name: calc_desc + type: keyword + description: | + Log description. + - name: capacity + type: integer + description: | + Capacity of the ports. + - name: capture_uuid + type: keyword + description: | + UUID generated for the capture. Used when enabling the capture when logging. + - name: cc + type: keyword + description: | + The Carbon Copy address of the email. + - name: certificate_resource + type: keyword + description: | + HTTPS resource Possible values: SNI or domain name (DN). + - name: certificate_validation + type: keyword + description: | + Precise error, describing HTTPS certificate failure under "HTTPS categorize websites" feature. + - name: cgnet + type: keyword + description: | + Describes NAT allocation for specific subscriber. + - name: chunk_type + type: keyword + description: | + Chunck of the sctp stream. + - name: client_name + type: keyword + description: | + Client Application or Software Blade that detected the event. + - name: client_type + type: keyword + description: | + Endpoint Connect. + - name: client_type_os + type: keyword + description: | + Client OS detected in the HTTP request. + - name: client_version + type: keyword + description: | + Build version of SandBlast Agent client installed on the computer. + - name: cluster_info + type: keyword + description: | + Cluster information. Possible options: Failover reason/cluster state changes/CP cluster or 3rd party. + - name: comment + type: keyword + - name: community + type: keyword + description: | + Community name for the IPSec key and the use of the IKEv. + - name: confidence_level + type: integer + description: | + Confidence level determined by ThreatCloud. + - name: conn_direction + type: keyword + description: Connection direction + - name: connection_uid + type: keyword + description: | + Calculation of md5 of the IP and user name as UID. + - name: connectivity_level + type: keyword + description: | + Log for a new connection in wire mode. + - name: conns_amount + type: integer + description: | + Connections amount of aggregated log info. + - name: content_disposition + type: keyword + description: | + Indicates how the content is expected to be displayed inline in the browser. + - name: content_length + type: keyword + description: | + Indicates the size of the entity-body of the HTTP header. + - name: content_risk + type: integer + description: | + File risk. + - name: content_type + type: keyword + description: | + Mail content type. Possible values: application/msword, text/html, image/gif etc. + - name: context_num + type: integer + description: | + Serial number of the log for a specific connection. + - name: cookieI + type: keyword + description: | + Initiator cookie. + - name: cookieR + type: keyword + description: | + Responder cookie. + - name: cp_message + type: integer + description: | + Used to log a general message. + - name: cvpn_category + type: keyword + description: | + Mobile Access application type. + - name: cvpn_resource + type: keyword + description: | + Mobile Access application. + - name: data_type_name + type: keyword + description: | + Data type in rulebase that was matched. + - name: db_ver + type: keyword + description: Database version + - name: dce-rpc_interface_uuid + type: keyword + description: | + Log for new RPC state - UUID values + - name: delivery_time + type: keyword + description: | + Timestamp of when email was delivered (MTA finished handling the email. + - name: desc + type: keyword + description: | + Override application description. + - name: description + type: keyword + description: | + Additional explanation how the security gateway enforced the connection. + - name: destination_object + type: keyword + description: | + Matched object name on destination column. + - name: detected_on + type: keyword + description: | + System and applications version the file was emulated on. + - name: developer_certificate_name + type: keyword + description: | + Name of the developer's certificate that was used to sign the mobile application. + - name: diameter_app_ID + type: integer + description: | + The ID of diameter application. + - name: diameter_cmd_code + type: integer + description: | + Diameter not allowed application command id. + - name: diameter_msg_type + type: keyword + description: | + Diameter message type. + - name: dlp_action_reason + type: keyword + description: | + Action chosen reason. + - name: dlp_additional_action + type: keyword + description: | + Watermark/None. + - name: dlp_categories + type: keyword + description: | + Data type category. + - name: dlp_data_type_name + type: keyword + description: | + Matched data type. + - name: dlp_data_type_uid + type: keyword + description: | + Unique ID of the matched data type. + - name: dlp_fingerprint_files_number + type: integer + description: | + Number of successfully scanned files in repository. + - name: dlp_fingerprint_long_status + type: keyword + description: | + Scan status - long format. + - name: dlp_fingerprint_short_status + type: keyword + description: | + Scan status - short format. + - name: dlp_incident_uid + type: keyword + description: | + Unique ID of the matched rule. + - name: dlp_recipients + type: keyword + description: | + Mail recipients. + - name: dlp_related_incident_uid + type: keyword + description: | + Other ID related to this one. + - name: dlp_relevant_data_types + type: keyword + description: | + In case of Compound/Group: the inner data types that were matched. + - name: dlp_repository_directories_number + type: integer + description: | + Number of directories in repository. + - name: dlp_repository_files_number + type: integer + description: | + Number of files in repository. + - name: dlp_repository_id + type: keyword + description: | + ID of scanned repository. + - name: dlp_repository_not_scanned_directories_percentage + type: integer + description: | + Percentage of directories the Security Gateway was unable to read. + - name: dlp_repository_reached_directories_number + type: integer + description: | + Number of scanned directories in repository. + - name: dlp_repository_root_path + type: keyword + description: | + Repository path. + - name: dlp_repository_scan_progress + type: integer + description: | + Scan percentage. + - name: dlp_repository_scanned_directories_number + type: integer + description: | + Amount of directories scanned. + - name: dlp_repository_scanned_files_number + type: integer + description: | + Number of scanned files in repository. + - name: dlp_repository_scanned_total_size + type: integer + description: | + Size scanned. + - name: dlp_repository_skipped_files_number + type: integer + description: | + Skipped number of files because of configuration. + - name: dlp_repository_total_size + type: integer + description: | + Repository size. + - name: dlp_repository_unreachable_directories_number + type: integer + description: | + Number of directories the Security Gateway was unable to read. + - name: dlp_rule_name + type: keyword + description: | + Matched rule name. + - name: dlp_subject + type: keyword + description: | + Mail subject. + - name: dlp_template_score + type: keyword + description: | + Template data type match score. + - name: dlp_transint + type: keyword + description: | + HTTP/SMTP/FTP. + - name: dlp_violation_description + type: keyword + description: | + Violation descriptions described in the rulebase. + - name: dlp_watermark_profile + type: keyword + description: | + Watermark which was applied. + - name: dlp_word_list + type: keyword + description: | + Phrases matched by data type. + - name: dns_query + type: keyword + description: | + DNS query. + - name: drop_reason + type: keyword + description: | + Drop reason description. + - name: dropped_file_hash + type: keyword + description: | + List of file hashes dropped from the original file. + - name: dropped_file_name + type: keyword + description: | + List of names dropped from the original file. + - name: dropped_file_type + type: keyword + description: | + List of file types dropped from the original file. + - name: dropped_file_verdict + type: keyword + description: | + List of file verdics dropped from the original file. + - name: dropped_incoming + type: integer + description: | + Number of incoming bytes dropped when using UP-limit feature. + - name: dropped_outgoing + type: integer + description: | + Number of outgoing bytes dropped when using UP-limit feature. + - name: dropped_total + type: integer + description: | + Amount of dropped packets (both incoming and outgoing). + - name: drops_amount + type: integer + description: | + Amount of multicast packets dropped. + - name: dst_country + type: keyword + description: | + Destination country. + - name: dst_phone_number + type: keyword + description: | + Destination IP-Phone. + - name: dst_user_name + type: keyword + description: | + Connected user name on the destination IP. + - name: dstkeyid + type: keyword + description: | + Responder Spi ID. + - name: duplicate + type: keyword + description: | + Log marked as duplicated, when mail is split and the Security Gateway sees it twice. + - name: duration + type: keyword + description: "Scan duration. \n" + - name: elapsed + type: keyword + description: | + Time passed since start time. + - name: email_content + type: keyword + description: | + Mail contents. Possible options: attachments/links & attachments/links/text only. + - name: email_control + type: keyword + description: | + Engine name. + - name: email_control_analysis + type: keyword + description: | + Message classification, received from spam vendor engine. + - name: email_headers + type: keyword + description: | + String containing all the email headers. + - name: email_id + type: keyword + description: | + Email number in smtp connection. + - name: email_message_id + type: keyword + description: | + Email session id (uniqe ID of the mail). + - name: email_queue_id + type: keyword + description: | + Postfix email queue id. + - name: email_queue_name + type: keyword + description: | + Postfix email queue name. + - name: email_recipients_num + type: long + description: | + Amount of recipients whom the mail was sent to. + - name: email_session_id + type: keyword + description: | + Connection uuid. + - name: email_spam_category + type: keyword + description: | + Email categories. Possible values: spam/not spam/phishing. + - name: email_status + type: keyword + description: | + Describes the email's state. Possible options: delivered, deferred, skipped, bounced, hold, new, scan_started, scan_ended + - name: email_subject + type: keyword + description: | + Original email subject. + - name: emulated_on + type: keyword + description: | + Images the files were emulated on. + - name: encryption_failure + type: keyword + description: | + Message indicating why the encryption failed. + - name: end_time + type: keyword + description: | + TCP connection end time. + - name: end_user_firewall_type + type: keyword + description: | + End user firewall type. + - name: esod_access_status + type: keyword + description: | + Access denied. + - name: esod_associated_policies + type: keyword + description: | + Associated policies. + - name: esod_noncompliance_reason + type: keyword + description: | + Non-compliance reason. + - name: esod_rule_action + type: keyword + description: | + Unknown rule action. + - name: esod_rule_name + type: keyword + description: | + Unknown rule name. + - name: esod_rule_type + type: keyword + description: | + Unknown rule type. + - name: esod_scan_status + type: keyword + description: | + Scan failed. + - name: event_count + type: long + description: | + Number of events associated with the log. + - name: expire_time + type: keyword + description: | + Connection closing time. + - name: extension_version + type: keyword + description: | + Build version of the SandBlast Agent browser extension. + - name: extracted_file_hash + type: keyword + description: | + Archive hash in case of extracted files. + - name: extracted_file_names + type: keyword + description: | + Names of extracted files in case of an archive. + - name: extracted_file_type + type: keyword + description: | + Types of extracted files in case of an archive. + - name: extracted_file_uid + type: keyword + description: | + UID of extracted files in case of an archive. + - name: extracted_file_verdict + type: keyword + description: | + Verdict of extracted files in case of an archive. + - name: failure_impact + type: keyword + description: | + The impact of update service failure. + - name: failure_reason + type: keyword + description: | + MTA failure description. + - name: file_direction + type: keyword + description: | + File direction. Possible options: upload/download. + - name: file_name + type: keyword + description: | + Malicious file name. + - name: files_names + type: keyword + description: | + List of files requested by FTP. + - name: first_hit_time + type: integer + description: | + First hit time in current interval. + - name: fs-proto + type: keyword + description: | + The file share protocol used in mobile acess file share application. + - name: ftp_user + type: keyword + description: | + FTP username. + - name: fw_message + type: keyword + description: | + Used for various firewall errors. + - name: fw_subproduct + type: keyword + description: | + Can be vpn/non vpn. + - name: hide_ip + type: ip + description: | + Source IP which will be used after CGNAT. + - name: hit + type: integer + description: | + Number of hits on a rule. + - name: host_time + type: keyword + description: | + Local time on the endpoint computer. + - name: http_host + type: keyword + description: | + Domain name of the server that the HTTP request is sent to. + - name: http_location + type: keyword + description: | + Response header, indicates the URL to redirect a page to. + - name: http_server + type: keyword + description: | + Server HTTP header value, contains information about the software used by the origin server, which handles the request. + - name: https_inspection_action + type: keyword + description: | + HTTPS inspection action (Inspect/Bypass/Error). + - name: https_inspection_rule_id + type: keyword + description: | + ID of the matched rule. + - name: https_inspection_rule_name + type: keyword + description: | + Name of the matched rule. + - name: https_validation + type: keyword + description: | + Precise error, describing HTTPS inspection failure. + - name: icap_more_info + type: integer + description: | + Free text for verdict. + - name: icap_server_name + type: keyword + description: | + Server name. + - name: icap_server_service + type: keyword + description: | + Service name, as given in the ICAP URI + - name: icap_service_id + type: integer + description: | + Service ID, can work with multiple servers, treated as services. + - name: icmp + type: keyword + description: | + Number of packets, received by the client. + - name: icmp_code + type: long + description: | + In case a connection is ICMP, code info will be added to the log. + - name: icmp_type + type: long + description: | + In case a connection is ICMP, type info will be added to the log. + - name: id + type: integer + description: | + Override application ID. + - name: ike + type: keyword + description: | + IKEMode (PHASE1, PHASE2, etc..). + - name: ike_ids + type: keyword + description: | + All QM ids. + - name: impacted_files + type: keyword + description: | + In case of an infection on an endpoint computer, the list of files that the malware impacted. + - name: incident_extension + type: keyword + description: | + Matched data type. + - name: indicator_description + type: keyword + description: | + IOC indicator description. + - name: indicator_name + type: keyword + description: | + IOC indicator name. + - name: indicator_reference + type: keyword + description: | + IOC indicator reference. + - name: indicator_uuid + type: keyword + description: | + IOC indicator uuid. + - name: info + type: keyword + description: | + Special log message. + - name: information + type: keyword + description: | + Policy installation status for a specific blade. + - name: inspection_category + type: keyword + description: | + Inspection category: protocol anomaly, signature etc. + - name: inspection_item + type: keyword + description: | + Blade element performed inspection. + - name: inspection_profile + type: keyword + description: | + Profile which the activated protection belongs to. + - name: inspection_settings_log + type: keyword + description: | + Indicats that the log was released by inspection settings. + - name: installed_products + type: keyword + description: | + List of installed Endpoint Software Blades. + - name: int_end + type: integer + description: | + Subscriber end int which will be used for NAT. + - name: int_start + type: integer + description: | + Subscriber start int which will be used for NAT. + - name: interface_name + type: keyword + description: | + Designated interface for mirror And decrypt. + - name: internal_error + type: keyword + description: | + Internal error, for troubleshooting + - name: invalid_file_size + type: integer + description: | + File_size field is valid only if this field is set to 0. + - name: ip_option + type: integer + description: | + IP option that was dropped. + - name: isp_link + type: keyword + description: | + Name of ISP link. + - name: last_hit_time + type: integer + description: | + Last hit time in current interval. + - name: last_rematch_time + type: keyword + description: | + Connection rematched time. + - name: layer_name + type: keyword + description: | + Layer name. + - name: layer_uuid + type: keyword + description: | + Layer UUID. + - name: limit_applied + type: integer + description: | + Indicates whether the session was actually date limited. + - name: limit_requested + type: integer + description: | + Indicates whether data limit was requested for the session. + - name: link_probing_status_update + type: keyword + description: | + IP address response status. + - name: links_num + type: integer + description: | + Number of links in the mail. + - name: log_delay + type: integer + description: | + Time left before deleting template. + - name: log_id + type: integer + description: | + Unique identity for logs. + - name: logid + type: keyword + description: | + System messages + - name: long_desc + type: keyword + description: | + More information on the process (usually describing error reason in failure). + - name: machine + type: keyword + description: | + L2TP machine which triggered the log and the log refers to it. + - name: malware_family + type: keyword + description: | + Additional information on protection. + - name: match_fk + type: integer + description: | + Rule number. + - name: match_id + type: integer + description: | + Private key of the rule + - name: matched_file + type: keyword + description: | + Unique ID of the matched data type. + - name: matched_file_percentage + type: integer + description: | + Fingerprint: match percentage of the traffic. + - name: matched_file_text_segments + type: integer + description: | + Fingerprint: number of text segments matched by this traffic. + - name: media_type + type: keyword + description: | + Media used (audio, video, etc.) + - name: message + type: keyword + description: | + ISP link has failed. + - name: message_info + type: keyword + description: | + Used for information messages, for example:NAT connection has ended. + - name: message_size + type: integer + description: | + Mail/post size. + - name: method + type: keyword + description: | + HTTP method. + - name: methods + type: keyword + description: | + IPSEc methods. + - name: mime_from + type: keyword + description: | + Sender's address. + - name: mime_to + type: keyword + description: | + List of receiver address. + - name: mirror_and_decrypt_type + type: keyword + description: | + Information about decrypt and forward. Possible values: Mirror only, Decrypt and mirror, Partial mirroring (HTTPS inspection Bypass). + - name: mitre_collection + type: keyword + description: | + The adversary is trying to collect data of interest to achieve his goal. + - name: mitre_command_and_control + type: keyword + description: | + The adversary is trying to communicate with compromised systems in order to control them. + - name: mitre_credential_access + type: keyword + description: | + The adversary is trying to steal account names and passwords. + - name: mitre_defense_evasion + type: keyword + description: | + The adversary is trying to avoid being detected. + - name: mitre_discovery + type: keyword + description: | + The adversary is trying to expose information about your environment. + - name: mitre_execution + type: keyword + description: | + The adversary is trying to run malicious code. + - name: mitre_exfiltration + type: keyword + description: | + The adversary is trying to steal data. + - name: mitre_impact + type: keyword + description: | + The adversary is trying to manipulate, interrupt, or destroy your systems and data. + - name: mitre_initial_access + type: keyword + description: | + The adversary is trying to break into your network. + - name: mitre_lateral_movement + type: keyword + description: | + The adversary is trying to explore your environment. + - name: mitre_persistence + type: keyword + description: | + The adversary is trying to maintain his foothold. + - name: mitre_privilege_escalation + type: keyword + description: | + The adversary is trying to gain higher-level permissions. + - name: monitor_reason + type: keyword + description: | + Aggregated logs of monitored packets. + - name: msgid + type: keyword + description: | + Message ID. + - name: name + type: keyword + description: | + Application name. + - name: nat46 + type: keyword + description: | + NAT 46 status, in most cases "enabled". + - name: nat_addtnl_rulenum + type: integer + description: | + When matching 2 automatic rules , second rule match will be shown otherwise field will be 0. + - name: nat_exhausted_pool + type: keyword + description: | + 4-tuple of an exhausted pool. + - name: nat_rulenum + type: integer + description: | + NAT rulebase first matched rule. + - name: needs_browse_time + type: integer + description: | + Browse time required for the connection. + - name: next_hop_ip + type: keyword + description: | + Next hop IP address. + - name: next_scheduled_scan_date + type: keyword + description: | + Next scan scheduled time according to time object. + - name: number_of_errors + type: integer + description: | + Number of files that were not scanned due to an error. + - name: objecttable + type: keyword + description: | + Table of affected objects. + - name: objecttype + type: keyword + description: | + The type of the affected object. + - name: observable_comment + type: keyword + description: | + IOC observable signature description. + - name: observable_id + type: keyword + description: | + IOC observable signature id. + - name: observable_name + type: keyword + description: | + IOC observable signature name. + - name: operation + type: keyword + description: | + Operation made by Threat Extraction. + - name: operation_number + type: keyword + description: | + The operation nuber. + - name: origin_sic_name + type: keyword + description: | + Machine SIC. + - name: original_queue_id + type: keyword + description: | + Original postfix email queue id. + - name: outgoing_url + type: keyword + description: | + URL related to this log (for HTTP). + - name: packet_amount + type: integer + description: | + Amount of packets dropped. + - name: packet_capture_unique_id + type: keyword + description: | + Identifier of the packet capture files. + - name: parent_file_hash + type: keyword + description: | + Archive's hash in case of extracted files. + - name: parent_file_name + type: keyword + description: | + Archive's name in case of extracted files. + - name: parent_file_uid + type: keyword + description: | + Archive's UID in case of extracted files. + - name: parent_process_username + type: keyword + description: | + Owner username of the parent process of the process that triggered the attack. + - name: parent_rule + type: integer + description: | + Parent rule number, in case of inline layer. + - name: peer_gateway + type: ip + description: | + Main IP of the peer Security Gateway. + - name: peer_ip + type: keyword + description: | + IP address which the client connects to. + - name: peer_ip_probing_status_update + type: keyword + description: | + IP address response status. + - name: performance_impact + type: integer + description: | + Protection performance impact. + - name: policy_mgmt + type: keyword + description: | + Name of the Management Server that manages this Security Gateway. + - name: policy_name + type: keyword + description: | + Name of the last policy that this Security Gateway fetched. + - name: ports_usage + type: integer + description: | + Percentage of allocated ports. + - name: ppp + type: keyword + description: | + Authentication status. + - name: precise_error + type: keyword + description: | + HTTP parser error. + - name: process_username + type: keyword + description: | + Owner username of the process that triggered the attack. + - name: properties + type: keyword + description: | + Application categories. + - name: protection_id + type: keyword + description: | + Protection malware id. + - name: protection_name + type: keyword + description: | + Specific signature name of the attack. + - name: protection_type + type: keyword + description: | + Type of protection used to detect the attack. + - name: protocol + type: keyword + description: | + Protocol detected on the connection. + - name: proxy_machine_name + type: integer + description: | + Machine name connected to proxy IP. + - name: proxy_src_ip + type: ip + description: | + Sender source IP (even when using proxy). + - name: proxy_user_dn + type: keyword + description: | + User distinguished name connected to proxy IP. + - name: proxy_user_name + type: keyword + description: | + User name connected to proxy IP. + - name: query + type: keyword + description: | + DNS query. + - name: question_rdata + type: keyword + description: | + List of question records domains. + - name: referrer + type: keyword + description: | + Referrer HTTP request header, previous web page address. + - name: referrer_parent_uid + type: keyword + description: | + Log UUID of the referring application. + - name: referrer_self_uid + type: keyword + description: | + UUID of the current log. + - name: registered_ip-phones + type: keyword + description: | + Registered IP-Phones. + - name: reject_category + type: keyword + description: | + Authentication failure reason. + - name: reject_id + type: keyword + description: | + A reject ID that corresponds to the one presented in the Mobile Access error page. + - name: rematch_info + type: keyword + description: | + Information sent when old connections cannot be matched during policy installation. + - name: remediated_files + type: keyword + description: | + In case of an infection and a successful cleaning of that infection, this is a list of remediated files on the computer. + - name: reply_status + type: integer + description: | + ICAP reply status code, e.g. 200 or 204. + - name: risk + type: keyword + description: | + Risk level we got from the engine. + - name: rpc_prog + type: integer + description: | + Log for new RPC state - prog values. + - name: rule + type: integer + description: | + Matched rule number. + - name: rule_action + type: keyword + description: | + Action of the matched rule in the access policy. + - name: rulebase_id + type: integer + description: | + Layer number. + - name: scan_direction + type: keyword + description: | + Scan direction. + - name: scan_hosts_day + type: integer + description: | + Number of unique hosts during the last day. + - name: scan_hosts_hour + type: integer + description: | + Number of unique hosts during the last hour. + - name: scan_hosts_week + type: integer + description: | + Number of unique hosts during the last week. + - name: scan_id + type: keyword + description: | + Sequential number of scan. + - name: scan_mail + type: integer + description: | + Number of emails that were scanned by "AB malicious activity" engine. + - name: scan_results + type: keyword + description: | + "Infected"/description of a failure. + - name: scheme + type: keyword + description: | + Describes the scheme used for the log. + - name: scope + type: keyword + description: | + IP related to the attack. + - name: scrub_activity + type: keyword + description: | + The result of the extraction + - name: scrub_download_time + type: keyword + description: | + File download time from resource. + - name: scrub_time + type: keyword + description: | + Extraction process duration. + - name: scrub_total_time + type: keyword + description: | + Threat extraction total file handling time. + - name: scrubbed_content + type: keyword + description: | + Active content that was found. + - name: sctp_association_state + type: keyword + description: | + The bad state you were trying to update to. + - name: sctp_error + type: keyword + description: | + Error information, what caused sctp to fail on out_of_state. + - name: scv_message_info + type: keyword + description: | + Drop reason. + - name: scv_user + type: keyword + description: | + Username whose packets are dropped on SCV. + - name: securexl_message + type: keyword + description: | + Two options for a SecureXL message: 1. Missed accounting records after heavy load on logging system. 2. FW log message regarding a packet drop. + - name: session_id + type: keyword + description: | + Log uuid. + - name: session_uid + type: keyword + description: | + HTTP session-id. + - name: short_desc + type: keyword + description: | + Short description of the process that was executed. + - name: sig_id + type: keyword + description: | + Application's signature ID which how it was detected by. + - name: similar_communication + type: keyword + description: | + Network action found similar to the malicious file. + - name: similar_hashes + type: keyword + description: | + Hashes found similar to the malicious file. + - name: similar_strings + type: keyword + description: | + Strings found similar to the malicious file. + - name: similiar_iocs + type: keyword + description: | + Other IoCs similar to the ones found, related to the malicious file. + - name: sip_reason + type: keyword + description: | + Explains why 'source_ip' isn't allowed to redirect (handover). + - name: site_name + type: keyword + description: | + Site name. + - name: source_interface + type: keyword + description: | + External Interface name for source interface or Null if not found. + - name: source_object + type: keyword + description: | + Matched object name on source column. + - name: source_os + type: keyword + description: | + OS which generated the attack. + - name: special_properties + type: integer + description: | + If this field is set to '1' the log will not be shown (in use for monitoring scan progress). + - name: specific_data_type_name + type: keyword + description: | + Compound/Group scenario, data type that was matched. + - name: speed + type: integer + description: | + Current scan speed. + - name: spyware_name + type: keyword + description: | + Spyware name. + - name: spyware_type + type: keyword + description: | + Spyware type. + - name: src_country + type: keyword + description: | + Country name, derived from connection source IP address. + - name: src_phone_number + type: keyword + description: | + Source IP-Phone. + - name: src_user_dn + type: keyword + description: | + User distinguished name connected to source IP. + - name: src_user_name + type: keyword + description: | + User name connected to source IP + - name: srckeyid + type: keyword + description: | + Initiator Spi ID. + - name: status + type: keyword + description: | + Ok/Warning/Error. + - name: status_update + type: keyword + description: | + Last time log was updated. + - name: sub_policy_name + type: keyword + description: | + Layer name. + - name: sub_policy_uid + type: keyword + description: | + Layer uid. + - name: subscriber + type: ip + description: | + Source IP before CGNAT. + - name: summary + type: keyword + description: | + Summary message of a non-compliant DNS traffic drops or detects. + - name: suppressed_logs + type: integer + description: | + Aggregated connections for five minutes on the same source, destination and port. + - name: sync + type: keyword + description: | + Sync status and the reason (stable, at risk). + - name: sys_message + type: keyword + description: | + System messages + - name: tcp_end_reason + type: keyword + description: | + Reason for TCP connection closure. + - name: tcp_flags + type: keyword + description: | + TCP packet flags (SYN, ACK, etc.,). + - name: tcp_packet_out_of_state + type: keyword + description: | + State violation. + - name: tcp_state + type: keyword + description: | + Log reinting a tcp state change. + - name: te_verdict_determined_by + type: keyword + description: | + Emulators determined file verdict. + - name: ticket_id + type: keyword + description: | + Unique ID per file. + - name: tls_server_host_name + type: keyword + description: | + SNI/CN from encrypted TLS connection used by URLF for categorization. + - name: top_archive_file_name + type: keyword + description: | + In case of archive file: the file that was sent/received. + - name: total_attachments + type: integer + description: | + The number of attachments in an email. + - name: triggered_by + type: keyword + description: | + The name of the mechanism that triggered the Software Blade to enforce a protection. + - name: trusted_domain + type: keyword + description: In case of phishing event, the domain, which the attacker was impersonating. + - name: unique_detected_day + type: integer + description: | + Detected virus for a specific host during the last day. + - name: unique_detected_hour + type: integer + description: | + Detected virus for a specific host during the last hour. + - name: unique_detected_week + type: integer + description: | + Detected virus for a specific host during the last week. + - name: update_status + type: keyword + description: Status of database update + - name: url + type: keyword + description: | + Translated URL. + - name: user + type: keyword + description: | + Source user name. + - name: user_agent + type: keyword + description: | + String identifying requesting software user agent. + - name: vendor_list + type: keyword + description: | + The vendor name that provided the verdict for a malicious URL. + - name: verdict + type: keyword + description: | + TE engine verdict Possible values: Malicious/Benign/Error. + - name: via + type: keyword + description: | + Via header is added by proxies for tracking purposes to avoid sending reqests in loop. + - name: voip_attach_action_info + type: keyword + description: | + Attachment action Info. + - name: voip_attach_sz + type: integer + description: | + Attachment size. + - name: voip_call_dir + type: keyword + description: | + Call direction: in/out. + - name: voip_call_id + type: keyword + description: | + Call-ID. + - name: voip_call_state + type: keyword + description: | + Call state. Possible values: in/out. + - name: voip_call_term_time + type: keyword + description: | + Call termination time stamp. + - name: voip_config + type: keyword + description: | + Configuration. + - name: voip_duration + type: keyword + description: | + Call duration (seconds). + - name: voip_est_codec + type: keyword + description: | + Estimated codec. + - name: voip_exp + type: integer + description: | + Expiration. + - name: voip_from_user_type + type: keyword + description: | + Source IP-Phone type. + - name: voip_log_type + type: keyword + description: | + VoIP log types. Possible values: reject, call, registration. + - name: voip_media_codec + type: keyword + description: | + Estimated codec. + - name: voip_media_ipp + type: keyword + description: | + Media IP protocol. + - name: voip_media_port + type: keyword + description: | + Media int. + - name: voip_method + type: keyword + description: | + Registration request. + - name: voip_reason_info + type: keyword + description: | + Information. + - name: voip_reg_int + type: integer + description: | + Registration port. + - name: voip_reg_ipp + type: integer + description: | + Registration IP protocol. + - name: voip_reg_period + type: integer + description: | + Registration period. + - name: voip_reg_server + type: ip + description: | + Registrar server IP address. + - name: voip_reg_user_type + type: keyword + description: | + Registered IP-Phone type. + - name: voip_reject_reason + type: keyword + description: | + Reject reason. + - name: voip_to_user_type + type: keyword + description: | + Destination IP-Phone type. + - name: vpn_feature_name + type: keyword + description: | + L2TP /IKE / Link Selection. + - name: watermark + type: keyword + description: | + Reports whether watermark is added to the cleaned file. + - name: web_server_type + type: keyword + description: | + Web server detected in the HTTP response. + - name: word_list + type: keyword + description: | + Words matched by data type. diff --git a/packages/checkpoint/1.3.5/data_stream/firewall/manifest.yml b/packages/checkpoint/1.3.5/data_stream/firewall/manifest.yml new file mode 100755 index 0000000000..48cc36a98f --- /dev/null +++ b/packages/checkpoint/1.3.5/data_stream/firewall/manifest.yml @@ -0,0 +1,93 @@ +type: logs +title: Check Point firewall logs +streams: + - input: udp + vars: + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + template_path: udp.yml.hbs + title: Check Point firewall logs (syslog over UDP) + description: Collect Check Point firewall logs using udp input + - input: tcp + vars: + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + template_path: tcp.yml.hbs + title: Check Point firewall logs (syslog over TCP) + description: Collect Check Point firewall logs using tcp input + - input: logfile + vars: + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + template_path: log.yml.hbs + title: Check Point firewall logs (log) + description: Collect Check Point firewall logs using log input diff --git a/packages/checkpoint/1.3.5/data_stream/firewall/sample_event.json b/packages/checkpoint/1.3.5/data_stream/firewall/sample_event.json new file mode 100755 index 0000000000..bf273392bc --- /dev/null +++ b/packages/checkpoint/1.3.5/data_stream/firewall/sample_event.json @@ -0,0 +1,64 @@ +{ + "@timestamp": "2020-03-29T13:19:20.000Z", + "agent": { + "ephemeral_id": "7c0059da-6518-4067-9e8d-0f1b316dfef5", + "id": "ba9ee39d-37f1-433a-8800-9d424cb9dd11", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0-beta1" + }, + "checkpoint": { + "sys_message": "The eth0 interface is not protected by the anti-spoofing feature. Your network may be at risk" + }, + "data_stream": { + "dataset": "checkpoint.firewall", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "ba9ee39d-37f1-433a-8800-9d424cb9dd11", + "snapshot": false, + "version": "8.0.0-beta1" + }, + "event": { + "agent_id_status": "verified", + "category": [ + "network" + ], + "created": "2021-12-25T09:18:51.178Z", + "dataset": "checkpoint.firewall", + "id": "{0x5e80a059,0x0,0x6401a8c0,0x3c7878a}", + "ingested": "2021-12-25T09:18:52Z", + "kind": "event", + "sequence": 1, + "timezone": "+00:00" + }, + "input": { + "type": "udp" + }, + "log": { + "source": { + "address": "192.168.32.7:52492" + } + }, + "network": { + "direction": "inbound" + }, + "observer": { + "ingress": { + "interface": { + "name": "daemon" + } + }, + "name": "192.168.1.100", + "product": "System Monitor", + "type": "firewall", + "vendor": "Checkpoint" + }, + "tags": [ + "forwarded" + ] +} \ No newline at end of file diff --git a/packages/checkpoint/1.3.5/docs/README.md b/packages/checkpoint/1.3.5/docs/README.md new file mode 100755 index 0000000000..883b9f0073 --- /dev/null +++ b/packages/checkpoint/1.3.5/docs/README.md @@ -0,0 +1,662 @@ +# Check Point Integration + +This integration is for [Check Point](https://sc1.checkpoint.com/documents/latest/APIs/#introduction~v1.8%20) products. It includes the +following datasets for receiving logs: + +- `firewall` dataset: consists of log entries from the [Log Exporter]( + https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk122323) + in the Syslog format. + +## Compatibility + +This module has been tested against Check Point Log Exporter on R80.X but should also work with R77.30. + +## Logs + +### Firewall + +Consists of log entries from the Log Exporter in the Syslog format. + +An example event for `firewall` looks as following: + +```json +{ + "@timestamp": "2020-03-29T13:19:20.000Z", + "agent": { + "ephemeral_id": "7c0059da-6518-4067-9e8d-0f1b316dfef5", + "id": "ba9ee39d-37f1-433a-8800-9d424cb9dd11", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0-beta1" + }, + "checkpoint": { + "sys_message": "The eth0 interface is not protected by the anti-spoofing feature. Your network may be at risk" + }, + "data_stream": { + "dataset": "checkpoint.firewall", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "ba9ee39d-37f1-433a-8800-9d424cb9dd11", + "snapshot": false, + "version": "8.0.0-beta1" + }, + "event": { + "agent_id_status": "verified", + "category": [ + "network" + ], + "created": "2021-12-25T09:18:51.178Z", + "dataset": "checkpoint.firewall", + "id": "{0x5e80a059,0x0,0x6401a8c0,0x3c7878a}", + "ingested": "2021-12-25T09:18:52Z", + "kind": "event", + "sequence": 1, + "timezone": "+00:00" + }, + "input": { + "type": "udp" + }, + "log": { + "source": { + "address": "192.168.32.7:52492" + } + }, + "network": { + "direction": "inbound" + }, + "observer": { + "ingress": { + "interface": { + "name": "daemon" + } + }, + "name": "192.168.1.100", + "product": "System Monitor", + "type": "firewall", + "vendor": "Checkpoint" + }, + "tags": [ + "forwarded" + ] +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| checkpoint.action_reason | Connection drop reason. | integer | +| checkpoint.action_reason_msg | Connection drop reason message. | keyword | +| checkpoint.additional_info | ID of original file/mail which are sent by admin. | keyword | +| checkpoint.additional_ip | DNS host name. | keyword | +| checkpoint.additional_rdata | List of additional resource records. | keyword | +| checkpoint.alert | Alert level of matched rule (for connection logs). | keyword | +| checkpoint.allocated_ports | Amount of allocated ports. | integer | +| checkpoint.analyzed_on | Check Point ThreatCloud / emulator name. | keyword | +| checkpoint.answer_rdata | List of answer resource records to the questioned domains. | keyword | +| checkpoint.anti_virus_type | Anti virus type. | keyword | +| checkpoint.app_desc | Application description. | keyword | +| checkpoint.app_id | Application ID. | integer | +| checkpoint.app_package | Unique identifier of the application on the protected mobile device. | keyword | +| checkpoint.app_properties | List of all found categories. | keyword | +| checkpoint.app_repackaged | Indicates whether the original application was repackage not by the official developer. | keyword | +| checkpoint.app_sid_id | Unique SHA identifier of a mobile application. | keyword | +| checkpoint.app_sig_id | IOC indicator description. | keyword | +| checkpoint.app_version | Version of the application downloaded on the protected mobile device. | keyword | +| checkpoint.appi_name | Name of application downloaded on the protected mobile device. | keyword | +| checkpoint.arrival_time | Email arrival timestamp. | keyword | +| checkpoint.attachments_num | Number of attachments in the mail. | integer | +| checkpoint.attack_status | In case of a malicious event on an endpoint computer, the status of the attack. | keyword | +| checkpoint.audit_status | Audit Status. Can be Success or Failure. | keyword | +| checkpoint.auth_method | Password authentication protocol used (PAP or EAP). | keyword | +| checkpoint.authority_rdata | List of authoritative servers. | keyword | +| checkpoint.authorization | Authorization HTTP header value. | keyword | +| checkpoint.bcc | List of BCC addresses. | keyword | +| checkpoint.blade_name | Blade name. | keyword | +| checkpoint.broker_publisher | IP address of the broker publisher who shared the session information. | ip | +| checkpoint.browse_time | Application session browse time. | keyword | +| checkpoint.c_bytes | Boolean value indicates whether bytes sent from the client side are used. | integer | +| checkpoint.calc_desc | Log description. | keyword | +| checkpoint.capacity | Capacity of the ports. | integer | +| checkpoint.capture_uuid | UUID generated for the capture. Used when enabling the capture when logging. | keyword | +| checkpoint.cc | The Carbon Copy address of the email. | keyword | +| checkpoint.certificate_resource | HTTPS resource Possible values: SNI or domain name (DN). | keyword | +| checkpoint.certificate_validation | Precise error, describing HTTPS certificate failure under "HTTPS categorize websites" feature. | keyword | +| checkpoint.cgnet | Describes NAT allocation for specific subscriber. | keyword | +| checkpoint.chunk_type | Chunck of the sctp stream. | keyword | +| checkpoint.client_name | Client Application or Software Blade that detected the event. | keyword | +| checkpoint.client_type | Endpoint Connect. | keyword | +| checkpoint.client_type_os | Client OS detected in the HTTP request. | keyword | +| checkpoint.client_version | Build version of SandBlast Agent client installed on the computer. | keyword | +| checkpoint.cluster_info | Cluster information. Possible options: Failover reason/cluster state changes/CP cluster or 3rd party. | keyword | +| checkpoint.comment | | keyword | +| checkpoint.community | Community name for the IPSec key and the use of the IKEv. | keyword | +| checkpoint.confidence_level | Confidence level determined by ThreatCloud. | integer | +| checkpoint.conn_direction | Connection direction | keyword | +| checkpoint.connection_uid | Calculation of md5 of the IP and user name as UID. | keyword | +| checkpoint.connectivity_level | Log for a new connection in wire mode. | keyword | +| checkpoint.conns_amount | Connections amount of aggregated log info. | integer | +| checkpoint.content_disposition | Indicates how the content is expected to be displayed inline in the browser. | keyword | +| checkpoint.content_length | Indicates the size of the entity-body of the HTTP header. | keyword | +| checkpoint.content_risk | File risk. | integer | +| checkpoint.content_type | Mail content type. Possible values: application/msword, text/html, image/gif etc. | keyword | +| checkpoint.context_num | Serial number of the log for a specific connection. | integer | +| checkpoint.cookieI | Initiator cookie. | keyword | +| checkpoint.cookieR | Responder cookie. | keyword | +| checkpoint.cp_message | Used to log a general message. | integer | +| checkpoint.cvpn_category | Mobile Access application type. | keyword | +| checkpoint.cvpn_resource | Mobile Access application. | keyword | +| checkpoint.data_type_name | Data type in rulebase that was matched. | keyword | +| checkpoint.db_ver | Database version | keyword | +| checkpoint.dce-rpc_interface_uuid | Log for new RPC state - UUID values | keyword | +| checkpoint.delivery_time | Timestamp of when email was delivered (MTA finished handling the email. | keyword | +| checkpoint.desc | Override application description. | keyword | +| checkpoint.description | Additional explanation how the security gateway enforced the connection. | keyword | +| checkpoint.destination_object | Matched object name on destination column. | keyword | +| checkpoint.detected_on | System and applications version the file was emulated on. | keyword | +| checkpoint.developer_certificate_name | Name of the developer's certificate that was used to sign the mobile application. | keyword | +| checkpoint.diameter_app_ID | The ID of diameter application. | integer | +| checkpoint.diameter_cmd_code | Diameter not allowed application command id. | integer | +| checkpoint.diameter_msg_type | Diameter message type. | keyword | +| checkpoint.dlp_action_reason | Action chosen reason. | keyword | +| checkpoint.dlp_additional_action | Watermark/None. | keyword | +| checkpoint.dlp_categories | Data type category. | keyword | +| checkpoint.dlp_data_type_name | Matched data type. | keyword | +| checkpoint.dlp_data_type_uid | Unique ID of the matched data type. | keyword | +| checkpoint.dlp_fingerprint_files_number | Number of successfully scanned files in repository. | integer | +| checkpoint.dlp_fingerprint_long_status | Scan status - long format. | keyword | +| checkpoint.dlp_fingerprint_short_status | Scan status - short format. | keyword | +| checkpoint.dlp_incident_uid | Unique ID of the matched rule. | keyword | +| checkpoint.dlp_recipients | Mail recipients. | keyword | +| checkpoint.dlp_related_incident_uid | Other ID related to this one. | keyword | +| checkpoint.dlp_relevant_data_types | In case of Compound/Group: the inner data types that were matched. | keyword | +| checkpoint.dlp_repository_directories_number | Number of directories in repository. | integer | +| checkpoint.dlp_repository_files_number | Number of files in repository. | integer | +| checkpoint.dlp_repository_id | ID of scanned repository. | keyword | +| checkpoint.dlp_repository_not_scanned_directories_percentage | Percentage of directories the Security Gateway was unable to read. | integer | +| checkpoint.dlp_repository_reached_directories_number | Number of scanned directories in repository. | integer | +| checkpoint.dlp_repository_root_path | Repository path. | keyword | +| checkpoint.dlp_repository_scan_progress | Scan percentage. | integer | +| checkpoint.dlp_repository_scanned_directories_number | Amount of directories scanned. | integer | +| checkpoint.dlp_repository_scanned_files_number | Number of scanned files in repository. | integer | +| checkpoint.dlp_repository_scanned_total_size | Size scanned. | integer | +| checkpoint.dlp_repository_skipped_files_number | Skipped number of files because of configuration. | integer | +| checkpoint.dlp_repository_total_size | Repository size. | integer | +| checkpoint.dlp_repository_unreachable_directories_number | Number of directories the Security Gateway was unable to read. | integer | +| checkpoint.dlp_rule_name | Matched rule name. | keyword | +| checkpoint.dlp_subject | Mail subject. | keyword | +| checkpoint.dlp_template_score | Template data type match score. | keyword | +| checkpoint.dlp_transint | HTTP/SMTP/FTP. | keyword | +| checkpoint.dlp_violation_description | Violation descriptions described in the rulebase. | keyword | +| checkpoint.dlp_watermark_profile | Watermark which was applied. | keyword | +| checkpoint.dlp_word_list | Phrases matched by data type. | keyword | +| checkpoint.dns_query | DNS query. | keyword | +| checkpoint.drop_reason | Drop reason description. | keyword | +| checkpoint.dropped_file_hash | List of file hashes dropped from the original file. | keyword | +| checkpoint.dropped_file_name | List of names dropped from the original file. | keyword | +| checkpoint.dropped_file_type | List of file types dropped from the original file. | keyword | +| checkpoint.dropped_file_verdict | List of file verdics dropped from the original file. | keyword | +| checkpoint.dropped_incoming | Number of incoming bytes dropped when using UP-limit feature. | integer | +| checkpoint.dropped_outgoing | Number of outgoing bytes dropped when using UP-limit feature. | integer | +| checkpoint.dropped_total | Amount of dropped packets (both incoming and outgoing). | integer | +| checkpoint.drops_amount | Amount of multicast packets dropped. | integer | +| checkpoint.dst_country | Destination country. | keyword | +| checkpoint.dst_phone_number | Destination IP-Phone. | keyword | +| checkpoint.dst_user_name | Connected user name on the destination IP. | keyword | +| checkpoint.dstkeyid | Responder Spi ID. | keyword | +| checkpoint.duplicate | Log marked as duplicated, when mail is split and the Security Gateway sees it twice. | keyword | +| checkpoint.duration | Scan duration. | keyword | +| checkpoint.elapsed | Time passed since start time. | keyword | +| checkpoint.email_content | Mail contents. Possible options: attachments/links & attachments/links/text only. | keyword | +| checkpoint.email_control | Engine name. | keyword | +| checkpoint.email_control_analysis | Message classification, received from spam vendor engine. | keyword | +| checkpoint.email_headers | String containing all the email headers. | keyword | +| checkpoint.email_id | Email number in smtp connection. | keyword | +| checkpoint.email_message_id | Email session id (uniqe ID of the mail). | keyword | +| checkpoint.email_queue_id | Postfix email queue id. | keyword | +| checkpoint.email_queue_name | Postfix email queue name. | keyword | +| checkpoint.email_recipients_num | Amount of recipients whom the mail was sent to. | long | +| checkpoint.email_session_id | Connection uuid. | keyword | +| checkpoint.email_spam_category | Email categories. Possible values: spam/not spam/phishing. | keyword | +| checkpoint.email_status | Describes the email's state. Possible options: delivered, deferred, skipped, bounced, hold, new, scan_started, scan_ended | keyword | +| checkpoint.email_subject | Original email subject. | keyword | +| checkpoint.emulated_on | Images the files were emulated on. | keyword | +| checkpoint.encryption_failure | Message indicating why the encryption failed. | keyword | +| checkpoint.end_time | TCP connection end time. | keyword | +| checkpoint.end_user_firewall_type | End user firewall type. | keyword | +| checkpoint.esod_access_status | Access denied. | keyword | +| checkpoint.esod_associated_policies | Associated policies. | keyword | +| checkpoint.esod_noncompliance_reason | Non-compliance reason. | keyword | +| checkpoint.esod_rule_action | Unknown rule action. | keyword | +| checkpoint.esod_rule_name | Unknown rule name. | keyword | +| checkpoint.esod_rule_type | Unknown rule type. | keyword | +| checkpoint.esod_scan_status | Scan failed. | keyword | +| checkpoint.event_count | Number of events associated with the log. | long | +| checkpoint.expire_time | Connection closing time. | keyword | +| checkpoint.extension_version | Build version of the SandBlast Agent browser extension. | keyword | +| checkpoint.extracted_file_hash | Archive hash in case of extracted files. | keyword | +| checkpoint.extracted_file_names | Names of extracted files in case of an archive. | keyword | +| checkpoint.extracted_file_type | Types of extracted files in case of an archive. | keyword | +| checkpoint.extracted_file_uid | UID of extracted files in case of an archive. | keyword | +| checkpoint.extracted_file_verdict | Verdict of extracted files in case of an archive. | keyword | +| checkpoint.failure_impact | The impact of update service failure. | keyword | +| checkpoint.failure_reason | MTA failure description. | keyword | +| checkpoint.file_direction | File direction. Possible options: upload/download. | keyword | +| checkpoint.file_name | Malicious file name. | keyword | +| checkpoint.files_names | List of files requested by FTP. | keyword | +| checkpoint.first_hit_time | First hit time in current interval. | integer | +| checkpoint.fs-proto | The file share protocol used in mobile acess file share application. | keyword | +| checkpoint.ftp_user | FTP username. | keyword | +| checkpoint.fw_message | Used for various firewall errors. | keyword | +| checkpoint.fw_subproduct | Can be vpn/non vpn. | keyword | +| checkpoint.hide_ip | Source IP which will be used after CGNAT. | ip | +| checkpoint.hit | Number of hits on a rule. | integer | +| checkpoint.host_time | Local time on the endpoint computer. | keyword | +| checkpoint.http_host | Domain name of the server that the HTTP request is sent to. | keyword | +| checkpoint.http_location | Response header, indicates the URL to redirect a page to. | keyword | +| checkpoint.http_server | Server HTTP header value, contains information about the software used by the origin server, which handles the request. | keyword | +| checkpoint.https_inspection_action | HTTPS inspection action (Inspect/Bypass/Error). | keyword | +| checkpoint.https_inspection_rule_id | ID of the matched rule. | keyword | +| checkpoint.https_inspection_rule_name | Name of the matched rule. | keyword | +| checkpoint.https_validation | Precise error, describing HTTPS inspection failure. | keyword | +| checkpoint.icap_more_info | Free text for verdict. | integer | +| checkpoint.icap_server_name | Server name. | keyword | +| checkpoint.icap_server_service | Service name, as given in the ICAP URI | keyword | +| checkpoint.icap_service_id | Service ID, can work with multiple servers, treated as services. | integer | +| checkpoint.icmp | Number of packets, received by the client. | keyword | +| checkpoint.icmp_code | In case a connection is ICMP, code info will be added to the log. | long | +| checkpoint.icmp_type | In case a connection is ICMP, type info will be added to the log. | long | +| checkpoint.id | Override application ID. | integer | +| checkpoint.ike | IKEMode (PHASE1, PHASE2, etc..). | keyword | +| checkpoint.ike_ids | All QM ids. | keyword | +| checkpoint.impacted_files | In case of an infection on an endpoint computer, the list of files that the malware impacted. | keyword | +| checkpoint.incident_extension | Matched data type. | keyword | +| checkpoint.indicator_description | IOC indicator description. | keyword | +| checkpoint.indicator_name | IOC indicator name. | keyword | +| checkpoint.indicator_reference | IOC indicator reference. | keyword | +| checkpoint.indicator_uuid | IOC indicator uuid. | keyword | +| checkpoint.info | Special log message. | keyword | +| checkpoint.information | Policy installation status for a specific blade. | keyword | +| checkpoint.inspection_category | Inspection category: protocol anomaly, signature etc. | keyword | +| checkpoint.inspection_item | Blade element performed inspection. | keyword | +| checkpoint.inspection_profile | Profile which the activated protection belongs to. | keyword | +| checkpoint.inspection_settings_log | Indicats that the log was released by inspection settings. | keyword | +| checkpoint.installed_products | List of installed Endpoint Software Blades. | keyword | +| checkpoint.int_end | Subscriber end int which will be used for NAT. | integer | +| checkpoint.int_start | Subscriber start int which will be used for NAT. | integer | +| checkpoint.interface_name | Designated interface for mirror And decrypt. | keyword | +| checkpoint.internal_error | Internal error, for troubleshooting | keyword | +| checkpoint.invalid_file_size | File_size field is valid only if this field is set to 0. | integer | +| checkpoint.ip_option | IP option that was dropped. | integer | +| checkpoint.isp_link | Name of ISP link. | keyword | +| checkpoint.last_hit_time | Last hit time in current interval. | integer | +| checkpoint.last_rematch_time | Connection rematched time. | keyword | +| checkpoint.layer_name | Layer name. | keyword | +| checkpoint.layer_uuid | Layer UUID. | keyword | +| checkpoint.limit_applied | Indicates whether the session was actually date limited. | integer | +| checkpoint.limit_requested | Indicates whether data limit was requested for the session. | integer | +| checkpoint.link_probing_status_update | IP address response status. | keyword | +| checkpoint.links_num | Number of links in the mail. | integer | +| checkpoint.log_delay | Time left before deleting template. | integer | +| checkpoint.log_id | Unique identity for logs. | integer | +| checkpoint.logid | System messages | keyword | +| checkpoint.long_desc | More information on the process (usually describing error reason in failure). | keyword | +| checkpoint.machine | L2TP machine which triggered the log and the log refers to it. | keyword | +| checkpoint.malware_family | Additional information on protection. | keyword | +| checkpoint.match_fk | Rule number. | integer | +| checkpoint.match_id | Private key of the rule | integer | +| checkpoint.matched_file | Unique ID of the matched data type. | keyword | +| checkpoint.matched_file_percentage | Fingerprint: match percentage of the traffic. | integer | +| checkpoint.matched_file_text_segments | Fingerprint: number of text segments matched by this traffic. | integer | +| checkpoint.media_type | Media used (audio, video, etc.) | keyword | +| checkpoint.message | ISP link has failed. | keyword | +| checkpoint.message_info | Used for information messages, for example:NAT connection has ended. | keyword | +| checkpoint.message_size | Mail/post size. | integer | +| checkpoint.method | HTTP method. | keyword | +| checkpoint.methods | IPSEc methods. | keyword | +| checkpoint.mime_from | Sender's address. | keyword | +| checkpoint.mime_to | List of receiver address. | keyword | +| checkpoint.mirror_and_decrypt_type | Information about decrypt and forward. Possible values: Mirror only, Decrypt and mirror, Partial mirroring (HTTPS inspection Bypass). | keyword | +| checkpoint.mitre_collection | The adversary is trying to collect data of interest to achieve his goal. | keyword | +| checkpoint.mitre_command_and_control | The adversary is trying to communicate with compromised systems in order to control them. | keyword | +| checkpoint.mitre_credential_access | The adversary is trying to steal account names and passwords. | keyword | +| checkpoint.mitre_defense_evasion | The adversary is trying to avoid being detected. | keyword | +| checkpoint.mitre_discovery | The adversary is trying to expose information about your environment. | keyword | +| checkpoint.mitre_execution | The adversary is trying to run malicious code. | keyword | +| checkpoint.mitre_exfiltration | The adversary is trying to steal data. | keyword | +| checkpoint.mitre_impact | The adversary is trying to manipulate, interrupt, or destroy your systems and data. | keyword | +| checkpoint.mitre_initial_access | The adversary is trying to break into your network. | keyword | +| checkpoint.mitre_lateral_movement | The adversary is trying to explore your environment. | keyword | +| checkpoint.mitre_persistence | The adversary is trying to maintain his foothold. | keyword | +| checkpoint.mitre_privilege_escalation | The adversary is trying to gain higher-level permissions. | keyword | +| checkpoint.monitor_reason | Aggregated logs of monitored packets. | keyword | +| checkpoint.msgid | Message ID. | keyword | +| checkpoint.name | Application name. | keyword | +| checkpoint.nat46 | NAT 46 status, in most cases "enabled". | keyword | +| checkpoint.nat_addtnl_rulenum | When matching 2 automatic rules , second rule match will be shown otherwise field will be 0. | integer | +| checkpoint.nat_exhausted_pool | 4-tuple of an exhausted pool. | keyword | +| checkpoint.nat_rulenum | NAT rulebase first matched rule. | integer | +| checkpoint.needs_browse_time | Browse time required for the connection. | integer | +| checkpoint.next_hop_ip | Next hop IP address. | keyword | +| checkpoint.next_scheduled_scan_date | Next scan scheduled time according to time object. | keyword | +| checkpoint.number_of_errors | Number of files that were not scanned due to an error. | integer | +| checkpoint.objecttable | Table of affected objects. | keyword | +| checkpoint.objecttype | The type of the affected object. | keyword | +| checkpoint.observable_comment | IOC observable signature description. | keyword | +| checkpoint.observable_id | IOC observable signature id. | keyword | +| checkpoint.observable_name | IOC observable signature name. | keyword | +| checkpoint.operation | Operation made by Threat Extraction. | keyword | +| checkpoint.operation_number | The operation nuber. | keyword | +| checkpoint.origin_sic_name | Machine SIC. | keyword | +| checkpoint.original_queue_id | Original postfix email queue id. | keyword | +| checkpoint.outgoing_url | URL related to this log (for HTTP). | keyword | +| checkpoint.packet_amount | Amount of packets dropped. | integer | +| checkpoint.packet_capture_unique_id | Identifier of the packet capture files. | keyword | +| checkpoint.parent_file_hash | Archive's hash in case of extracted files. | keyword | +| checkpoint.parent_file_name | Archive's name in case of extracted files. | keyword | +| checkpoint.parent_file_uid | Archive's UID in case of extracted files. | keyword | +| checkpoint.parent_process_username | Owner username of the parent process of the process that triggered the attack. | keyword | +| checkpoint.parent_rule | Parent rule number, in case of inline layer. | integer | +| checkpoint.peer_gateway | Main IP of the peer Security Gateway. | ip | +| checkpoint.peer_ip | IP address which the client connects to. | keyword | +| checkpoint.peer_ip_probing_status_update | IP address response status. | keyword | +| checkpoint.performance_impact | Protection performance impact. | integer | +| checkpoint.policy_mgmt | Name of the Management Server that manages this Security Gateway. | keyword | +| checkpoint.policy_name | Name of the last policy that this Security Gateway fetched. | keyword | +| checkpoint.ports_usage | Percentage of allocated ports. | integer | +| checkpoint.ppp | Authentication status. | keyword | +| checkpoint.precise_error | HTTP parser error. | keyword | +| checkpoint.process_username | Owner username of the process that triggered the attack. | keyword | +| checkpoint.properties | Application categories. | keyword | +| checkpoint.protection_id | Protection malware id. | keyword | +| checkpoint.protection_name | Specific signature name of the attack. | keyword | +| checkpoint.protection_type | Type of protection used to detect the attack. | keyword | +| checkpoint.protocol | Protocol detected on the connection. | keyword | +| checkpoint.proxy_machine_name | Machine name connected to proxy IP. | integer | +| checkpoint.proxy_src_ip | Sender source IP (even when using proxy). | ip | +| checkpoint.proxy_user_dn | User distinguished name connected to proxy IP. | keyword | +| checkpoint.proxy_user_name | User name connected to proxy IP. | keyword | +| checkpoint.query | DNS query. | keyword | +| checkpoint.question_rdata | List of question records domains. | keyword | +| checkpoint.referrer | Referrer HTTP request header, previous web page address. | keyword | +| checkpoint.referrer_parent_uid | Log UUID of the referring application. | keyword | +| checkpoint.referrer_self_uid | UUID of the current log. | keyword | +| checkpoint.registered_ip-phones | Registered IP-Phones. | keyword | +| checkpoint.reject_category | Authentication failure reason. | keyword | +| checkpoint.reject_id | A reject ID that corresponds to the one presented in the Mobile Access error page. | keyword | +| checkpoint.rematch_info | Information sent when old connections cannot be matched during policy installation. | keyword | +| checkpoint.remediated_files | In case of an infection and a successful cleaning of that infection, this is a list of remediated files on the computer. | keyword | +| checkpoint.reply_status | ICAP reply status code, e.g. 200 or 204. | integer | +| checkpoint.risk | Risk level we got from the engine. | keyword | +| checkpoint.rpc_prog | Log for new RPC state - prog values. | integer | +| checkpoint.rule | Matched rule number. | integer | +| checkpoint.rule_action | Action of the matched rule in the access policy. | keyword | +| checkpoint.rulebase_id | Layer number. | integer | +| checkpoint.scan_direction | Scan direction. | keyword | +| checkpoint.scan_hosts_day | Number of unique hosts during the last day. | integer | +| checkpoint.scan_hosts_hour | Number of unique hosts during the last hour. | integer | +| checkpoint.scan_hosts_week | Number of unique hosts during the last week. | integer | +| checkpoint.scan_id | Sequential number of scan. | keyword | +| checkpoint.scan_mail | Number of emails that were scanned by "AB malicious activity" engine. | integer | +| checkpoint.scan_results | "Infected"/description of a failure. | keyword | +| checkpoint.scheme | Describes the scheme used for the log. | keyword | +| checkpoint.scope | IP related to the attack. | keyword | +| checkpoint.scrub_activity | The result of the extraction | keyword | +| checkpoint.scrub_download_time | File download time from resource. | keyword | +| checkpoint.scrub_time | Extraction process duration. | keyword | +| checkpoint.scrub_total_time | Threat extraction total file handling time. | keyword | +| checkpoint.scrubbed_content | Active content that was found. | keyword | +| checkpoint.sctp_association_state | The bad state you were trying to update to. | keyword | +| checkpoint.sctp_error | Error information, what caused sctp to fail on out_of_state. | keyword | +| checkpoint.scv_message_info | Drop reason. | keyword | +| checkpoint.scv_user | Username whose packets are dropped on SCV. | keyword | +| checkpoint.securexl_message | Two options for a SecureXL message: 1. Missed accounting records after heavy load on logging system. 2. FW log message regarding a packet drop. | keyword | +| checkpoint.session_id | Log uuid. | keyword | +| checkpoint.session_uid | HTTP session-id. | keyword | +| checkpoint.short_desc | Short description of the process that was executed. | keyword | +| checkpoint.sig_id | Application's signature ID which how it was detected by. | keyword | +| checkpoint.similar_communication | Network action found similar to the malicious file. | keyword | +| checkpoint.similar_hashes | Hashes found similar to the malicious file. | keyword | +| checkpoint.similar_strings | Strings found similar to the malicious file. | keyword | +| checkpoint.similiar_iocs | Other IoCs similar to the ones found, related to the malicious file. | keyword | +| checkpoint.sip_reason | Explains why 'source_ip' isn't allowed to redirect (handover). | keyword | +| checkpoint.site_name | Site name. | keyword | +| checkpoint.source_interface | External Interface name for source interface or Null if not found. | keyword | +| checkpoint.source_object | Matched object name on source column. | keyword | +| checkpoint.source_os | OS which generated the attack. | keyword | +| checkpoint.special_properties | If this field is set to '1' the log will not be shown (in use for monitoring scan progress). | integer | +| checkpoint.specific_data_type_name | Compound/Group scenario, data type that was matched. | keyword | +| checkpoint.speed | Current scan speed. | integer | +| checkpoint.spyware_name | Spyware name. | keyword | +| checkpoint.spyware_type | Spyware type. | keyword | +| checkpoint.src_country | Country name, derived from connection source IP address. | keyword | +| checkpoint.src_phone_number | Source IP-Phone. | keyword | +| checkpoint.src_user_dn | User distinguished name connected to source IP. | keyword | +| checkpoint.src_user_name | User name connected to source IP | keyword | +| checkpoint.srckeyid | Initiator Spi ID. | keyword | +| checkpoint.status | Ok/Warning/Error. | keyword | +| checkpoint.status_update | Last time log was updated. | keyword | +| checkpoint.sub_policy_name | Layer name. | keyword | +| checkpoint.sub_policy_uid | Layer uid. | keyword | +| checkpoint.subscriber | Source IP before CGNAT. | ip | +| checkpoint.summary | Summary message of a non-compliant DNS traffic drops or detects. | keyword | +| checkpoint.suppressed_logs | Aggregated connections for five minutes on the same source, destination and port. | integer | +| checkpoint.sync | Sync status and the reason (stable, at risk). | keyword | +| checkpoint.sys_message | System messages | keyword | +| checkpoint.tcp_end_reason | Reason for TCP connection closure. | keyword | +| checkpoint.tcp_flags | TCP packet flags (SYN, ACK, etc.,). | keyword | +| checkpoint.tcp_packet_out_of_state | State violation. | keyword | +| checkpoint.tcp_state | Log reinting a tcp state change. | keyword | +| checkpoint.te_verdict_determined_by | Emulators determined file verdict. | keyword | +| checkpoint.ticket_id | Unique ID per file. | keyword | +| checkpoint.tls_server_host_name | SNI/CN from encrypted TLS connection used by URLF for categorization. | keyword | +| checkpoint.top_archive_file_name | In case of archive file: the file that was sent/received. | keyword | +| checkpoint.total_attachments | The number of attachments in an email. | integer | +| checkpoint.triggered_by | The name of the mechanism that triggered the Software Blade to enforce a protection. | keyword | +| checkpoint.trusted_domain | In case of phishing event, the domain, which the attacker was impersonating. | keyword | +| checkpoint.unique_detected_day | Detected virus for a specific host during the last day. | integer | +| checkpoint.unique_detected_hour | Detected virus for a specific host during the last hour. | integer | +| checkpoint.unique_detected_week | Detected virus for a specific host during the last week. | integer | +| checkpoint.update_status | Status of database update | keyword | +| checkpoint.url | Translated URL. | keyword | +| checkpoint.user | Source user name. | keyword | +| checkpoint.user_agent | String identifying requesting software user agent. | keyword | +| checkpoint.vendor_list | The vendor name that provided the verdict for a malicious URL. | keyword | +| checkpoint.verdict | TE engine verdict Possible values: Malicious/Benign/Error. | keyword | +| checkpoint.via | Via header is added by proxies for tracking purposes to avoid sending reqests in loop. | keyword | +| checkpoint.voip_attach_action_info | Attachment action Info. | keyword | +| checkpoint.voip_attach_sz | Attachment size. | integer | +| checkpoint.voip_call_dir | Call direction: in/out. | keyword | +| checkpoint.voip_call_id | Call-ID. | keyword | +| checkpoint.voip_call_state | Call state. Possible values: in/out. | keyword | +| checkpoint.voip_call_term_time | Call termination time stamp. | keyword | +| checkpoint.voip_config | Configuration. | keyword | +| checkpoint.voip_duration | Call duration (seconds). | keyword | +| checkpoint.voip_est_codec | Estimated codec. | keyword | +| checkpoint.voip_exp | Expiration. | integer | +| checkpoint.voip_from_user_type | Source IP-Phone type. | keyword | +| checkpoint.voip_log_type | VoIP log types. Possible values: reject, call, registration. | keyword | +| checkpoint.voip_media_codec | Estimated codec. | keyword | +| checkpoint.voip_media_ipp | Media IP protocol. | keyword | +| checkpoint.voip_media_port | Media int. | keyword | +| checkpoint.voip_method | Registration request. | keyword | +| checkpoint.voip_reason_info | Information. | keyword | +| checkpoint.voip_reg_int | Registration port. | integer | +| checkpoint.voip_reg_ipp | Registration IP protocol. | integer | +| checkpoint.voip_reg_period | Registration period. | integer | +| checkpoint.voip_reg_server | Registrar server IP address. | ip | +| checkpoint.voip_reg_user_type | Registered IP-Phone type. | keyword | +| checkpoint.voip_reject_reason | Reject reason. | keyword | +| checkpoint.voip_to_user_type | Destination IP-Phone type. | keyword | +| checkpoint.vpn_feature_name | L2TP /IKE / Link Selection. | keyword | +| checkpoint.watermark | Reports whether watermark is added to the cleaned file. | keyword | +| checkpoint.web_server_type | Web server detected in the HTTP response. | keyword | +| checkpoint.word_list | Words matched by data type. | keyword | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| destination.as.number | Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. | long | +| destination.as.organization.name | Organization name. | keyword | +| destination.as.organization.name.text | Multi-field of `destination.as.organization.name`. | match_only_text | +| destination.bytes | Bytes sent from the destination to the source. | long | +| destination.domain | The domain name of the destination system. This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. | keyword | +| destination.geo.city_name | City name. | keyword | +| destination.geo.continent_name | Name of the continent. | keyword | +| destination.geo.country_iso_code | Country ISO code. | keyword | +| destination.geo.country_name | Country name. | keyword | +| destination.geo.location | Longitude and latitude. | geo_point | +| destination.geo.name | User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation. | keyword | +| destination.geo.region_iso_code | Region ISO code. | keyword | +| destination.geo.region_name | Region name. | keyword | +| destination.ip | IP address of the destination (IPv4 or IPv6). | ip | +| destination.mac | MAC address of the destination. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen. | keyword | +| destination.nat.ip | Translated ip of destination based NAT sessions (e.g. internet to private DMZ) Typically used with load balancers, firewalls, or routers. | ip | +| destination.nat.port | Port the source session is translated to by NAT Device. Typically used with load balancers, firewalls, or routers. | long | +| destination.packets | Packets sent from the destination to the source. | long | +| destination.port | Port of the destination. | long | +| destination.service.name | Name of the service data is collected from. | keyword | +| destination.user.email | User email address. | keyword | +| destination.user.id | Unique identifier of the user. | keyword | +| destination.user.name | Short name or login of the user. | keyword | +| destination.user.name.text | Multi-field of `destination.user.name`. | match_only_text | +| dns.id | The DNS packet identifier assigned by the program that generated the query. The identifier is copied to the response. | keyword | +| dns.question.name | The name being queried. If the name field contains non-printable characters (below 32 or above 126), those characters should be represented as escaped base 10 integers (\DDD). Back slashes and quotes should be escaped. Tabs, carriage returns, and line feeds should be converted to \t, \r, and \n respectively. | keyword | +| dns.question.type | The type of record being queried. | keyword | +| dns.type | The type of DNS event captured, query or answer. If your source of DNS events only gives you DNS queries, you should only create dns events of type `dns.type:query`. If your source of DNS events gives you answers as well, you should create one event per query (optionally as soon as the query is seen). And a second event containing all query details as well as an array of answers. | keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| error.message | Error message. | match_only_text | +| event.action | The action captured by the event. This describes the information in the event. It is more specific than `event.category`. Examples are `group-add`, `process-started`, `file-created`. The value is normally defined by the implementer. | keyword | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset | constant_keyword | +| event.end | event.end contains the date when the event ended or when the activity was last observed. | date | +| event.id | Unique ID to describe the event. | keyword | +| event.ingested | Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` \< `event.created` \< `event.ingested`. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.outcome | This is one of four ECS Categorization Fields, and indicates the lowest level in the ECS category hierarchy. `event.outcome` simply denotes whether the event represents a success or a failure from the perspective of the entity that produced the event. Note that when a single transaction is described in multiple events, each event may populate different values of `event.outcome`, according to their perspective. Also note that in the case of a compound event (a single event that contains multiple logical events), this field should be populated with the value that best captures the overall success or failure from the perspective of the event producer. Further note that not all events will have an associated outcome. For example, this field is generally not populated for metric events, events with `event.type:info`, or any events for which an outcome does not make logical sense. | keyword | +| event.risk_score | Risk score or priority of the event (e.g. security solutions). Use your system's original value here. | float | +| event.sequence | Sequence number of the event. The sequence number is a value published by some event sources, to make the exact ordering of events unambiguous, regardless of the timestamp precision. | long | +| event.severity | The numeric severity of the event according to your event source. What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. | long | +| event.start | event.start contains the date when the event started or when the activity was first observed. | date | +| event.timezone | This field should be populated when the event's timestamp does not include timezone information already (e.g. default Syslog timestamps). It's optional otherwise. Acceptable timezone formats are: a canonical ID (e.g. "Europe/Amsterdam"), abbreviated (e.g. "EST") or an HH:mm differential (e.g. "-05:00"). | keyword | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| event.url | URL linking to an external system to continue investigation of this event. This URL links to another system where in-depth investigation of the specific occurrence of this event can take place. Alert events, indicated by `event.kind:alert`, are a common use case for this field. | keyword | +| file.hash.md5 | MD5 hash. | keyword | +| file.hash.sha1 | SHA1 hash. | keyword | +| file.hash.sha256 | SHA256 hash. | keyword | +| file.inode | Inode representing the file in the filesystem. | keyword | +| file.name | Name of the file including the extension, without the directory. | keyword | +| file.size | File size in bytes. Only relevant when `file.type` is "file". | long | +| file.type | File type (file, dir, or symlink). | keyword | +| group.name | Name of the group. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | match_only_text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| http.request.method | HTTP request method. The value should retain its casing from the original event. For example, `GET`, `get`, and `GeT` are all considered valid values for this field. | keyword | +| http.request.referrer | Referrer for this HTTP request. | keyword | +| input.type | Type of Filebeat input. | keyword | +| log.file.path | Full path to the log file this event came from, including the file name. It should include the drive letter, when appropriate. If the event wasn't read from a log file, do not populate this field. | keyword | +| log.flags | Flags for the log file. | keyword | +| log.offset | Offset of the entry in the log file. | long | +| log.source.address | Source address of logs received over the network. | keyword | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| network.application | When a specific application or service is identified from network connection details (source/dest IPs, ports, certificates, or wire format), this field captures the application's or service's name. For example, the original event identifies the network connection being from a specific web service in a `https` network connection, like `facebook` or `twitter`. The field value must be normalized to lowercase for querying. | keyword | +| network.bytes | Total bytes transferred in both directions. If `source.bytes` and `destination.bytes` are known, `network.bytes` is their sum. | long | +| network.direction | Direction of the network traffic. Recommended values are: \* ingress \* egress \* inbound \* outbound \* internal \* external \* unknown When mapping events from a host-based monitoring context, populate this field from the host's point of view, using the values "ingress" or "egress". When mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of the network perimeter, using the values "inbound", "outbound", "internal" or "external". Note that "internal" is not crossing perimeter boundaries, and is meant to describe communication between two hosts within the perimeter. Note also that "external" is meant to describe traffic between two hosts that are external to the perimeter. This could for example be useful for ISPs or VPN service providers. | keyword | +| network.iana_number | IANA Protocol Number (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Standardized list of protocols. This aligns well with NetFlow and sFlow related logs which use the IANA Protocol Number. | keyword | +| network.name | Name given by operators to sections of their network. | keyword | +| network.packets | Total packets transferred in both directions. If `source.packets` and `destination.packets` are known, `network.packets` is their sum. | long | +| network.transport | Same as network.iana_number, but instead using the Keyword name of the transport layer (udp, tcp, ipv6-icmp, etc.) The field value must be normalized to lowercase for querying. | keyword | +| observer.egress.interface.name | Interface name as reported by the system. | keyword | +| observer.egress.zone | Network zone of outbound traffic as reported by the observer to categorize the destination area of egress traffic, e.g. Internal, External, DMZ, HR, Legal, etc. | keyword | +| observer.ingress.interface.name | Interface name as reported by the system. | keyword | +| observer.ingress.zone | Network zone of incoming traffic as reported by the observer to categorize the source area of ingress traffic. e.g. internal, External, DMZ, HR, Legal, etc. | keyword | +| observer.ip | IP addresses of the observer. | ip | +| observer.name | Custom name of the observer. This is a name that can be given to an observer. This can be helpful for example if multiple firewalls of the same model are used in an organization. If no custom name is needed, the field can be left empty. | keyword | +| observer.product | The product name of the observer. | keyword | +| observer.type | The type of the observer the data is coming from. There is no predefined list of observer types. Some examples are `forwarder`, `firewall`, `ids`, `ips`, `proxy`, `poller`, `sensor`, `APM server`. | keyword | +| observer.vendor | Vendor name of the observer. | keyword | +| observer.version | Observer version. | keyword | +| process.hash.md5 | MD5 hash. | keyword | +| process.name | Process name. Sometimes called program name or similar. | keyword | +| process.name.text | Multi-field of `process.name`. | match_only_text | +| process.parent.hash.md5 | MD5 hash. | keyword | +| process.parent.name | Process name. Sometimes called program name or similar. | keyword | +| process.parent.name.text | Multi-field of `process.parent.name`. | match_only_text | +| related.hash | All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). | keyword | +| related.ip | All of the IPs seen on your event. | ip | +| related.user | All the user names or other user identifiers seen on the event. | keyword | +| rule.category | A categorization value keyword used by the entity using the rule for detection of this event. | keyword | +| rule.description | The description of the rule generating the event. | keyword | +| rule.id | A rule ID that is unique within the scope of an agent, observer, or other entity using the rule for detection of this event. | keyword | +| rule.name | The name of the rule or signature generating the event. | keyword | +| rule.ruleset | Name of the ruleset, policy, group, or parent category in which the rule used to generate this event is a member. | keyword | +| rule.uuid | A rule ID that is unique within the scope of a set or group of agents, observers, or other entities using the rule for detection of this event. | keyword | +| source.as.number | Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. | long | +| source.as.organization.name | Organization name. | keyword | +| source.as.organization.name.text | Multi-field of `source.as.organization.name`. | match_only_text | +| source.bytes | Bytes sent from the source to the destination. | long | +| source.domain | The domain name of the source system. This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. | keyword | +| source.geo.city_name | City name. | keyword | +| source.geo.continent_name | Name of the continent. | keyword | +| source.geo.country_iso_code | Country ISO code. | keyword | +| source.geo.country_name | Country name. | keyword | +| source.geo.location | Longitude and latitude. | geo_point | +| source.geo.name | User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation. | keyword | +| source.geo.region_iso_code | Region ISO code. | keyword | +| source.geo.region_name | Region name. | keyword | +| source.ip | IP address of the source (IPv4 or IPv6). | ip | +| source.mac | MAC address of the source. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen. | keyword | +| source.nat.ip | Translated ip of source based NAT sessions (e.g. internal client to internet) Typically connections traversing load balancers, firewalls, or routers. | ip | +| source.nat.port | Translated port of source based NAT sessions. (e.g. internal client to internet) Typically used with load balancers, firewalls, or routers. | long | +| source.packets | Packets sent from the source to the destination. | long | +| source.port | Port of the source. | long | +| source.user.email | User email address. | keyword | +| source.user.group.name | Name of the group. | keyword | +| source.user.id | Unique identifier of the user. | keyword | +| source.user.name | Short name or login of the user. | keyword | +| source.user.name.text | Multi-field of `source.user.name`. | match_only_text | +| tags | List of keywords used to tag each event. | keyword | +| url.domain | Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. | keyword | +| url.original | Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not. | wildcard | +| url.original.text | Multi-field of `url.original`. | match_only_text | +| user_agent.name | Name of the user agent. | keyword | +| user_agent.original | Unparsed user_agent string. | keyword | +| user_agent.original.text | Multi-field of `user_agent.original`. | match_only_text | +| vulnerability.id | The identification (ID) is the number portion of a vulnerability entry. It includes a unique identification number for the vulnerability. For example (https://cve.mitre.org/about/faqs.html#what_is_cve_id)[Common Vulnerabilities and Exposure CVE ID] | keyword | + diff --git a/packages/checkpoint/1.3.5/img/checkpoint-logo.svg b/packages/checkpoint/1.3.5/img/checkpoint-logo.svg new file mode 100755 index 0000000000..e71866e78c --- /dev/null +++ b/packages/checkpoint/1.3.5/img/checkpoint-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/checkpoint/1.3.5/manifest.yml b/packages/checkpoint/1.3.5/manifest.yml new file mode 100755 index 0000000000..eda8fa7bec --- /dev/null +++ b/packages/checkpoint/1.3.5/manifest.yml @@ -0,0 +1,109 @@ +name: checkpoint +title: Check Point +version: 1.3.5 +release: ga +description: Collect logs from Check Point with Elastic Agent. +type: integration +format_version: 1.0.0 +license: basic +categories: [security] +conditions: + kibana.version: "^7.16.0 || ^8.0.0" +icons: + - src: /img/checkpoint-logo.svg + title: Check Point + size: 216x216 + type: image/svg+xml +policy_templates: + - name: checkpoint + title: Check Point logs + description: Collect logs from Check Point instances + inputs: + - type: logfile + title: "Collect Check Point firewall logs (input: logfile)" + description: "Collecting firewall logs from Check Point instances (input: logfile)" + vars: + - name: paths + type: text + title: Paths + multi: true + required: true + show_user: true + - name: internal_zones + type: text + title: Internal Zones + multi: true + required: false + show_user: false + default: + - trust + - name: external_zones + type: text + title: External Zones + multi: true + required: false + show_user: false + default: + - untrust + - type: tcp + vars: + - name: syslog_host + type: text + title: Syslog Host + multi: false + required: true + show_user: true + default: localhost + - name: syslog_port + type: integer + title: Syslog Port + multi: false + required: true + show_user: true + default: 9001 + - name: internal_zones + type: text + title: Internal Zones + multi: true + required: false + show_user: false + - name: external_zones + type: text + title: External Zones + multi: true + required: false + show_user: false + title: "Collect Check Point firewall logs (input: tcp)" + description: "Collecting firewall logs from Check Point instances (input: tcp)" + - type: udp + vars: + - name: syslog_host + type: text + title: Syslog Host + multi: false + required: true + show_user: true + default: localhost + - name: syslog_port + type: integer + title: Syslog Port + multi: false + required: true + show_user: true + default: 9001 + - name: internal_zones + type: text + title: Internal Zones + multi: true + required: false + show_user: false + - name: external_zones + type: text + title: External Zones + multi: true + required: false + show_user: false + title: "Collect Check Point firewall logs (input: udp)" + description: "Collecting firewall logs from Check Point instances (input: udp)" +owner: + github: elastic/security-external-integrations diff --git a/packages/cisco_ftd/2.0.3/changelog.yml b/packages/cisco_ftd/2.0.3/changelog.yml new file mode 100755 index 0000000000..542c1ac491 --- /dev/null +++ b/packages/cisco_ftd/2.0.3/changelog.yml @@ -0,0 +1,61 @@ +# newer versions go on top +- version: "2.0.3" + changes: + - description: Make fields agree with ECS + type: bugfix + link: https://github.com/elastic/integrations/pull/3018 +- version: "2.0.2" + changes: + - description: Update observer to ftd and idps to better match this integration. + type: bugfix + link: https://github.com/elastic/integrations/pull/2551 +- version: "2.0.1" + changes: + - description: Add documentation for multi-fields + type: enhancement + link: https://github.com/elastic/integrations/pull/2916 +- version: "2.0.0" + changes: + - description: Update to ECS 8.0 + type: enhancement + link: https://github.com/elastic/integrations/pull/2391 +- version: "1.2.2" + changes: + - description: Regenerate test files using the new GeoIP database + type: bugfix + link: https://github.com/elastic/integrations/pull/2339 +- version: "1.2.1" + changes: + - description: Change test public IPs to the supported subset + type: bugfix + link: https://github.com/elastic/integrations/pull/2327 +- version: "1.2.0" + changes: + - description: Add 8.0.0 version constraint + type: enhancement + link: https://github.com/elastic/integrations/pull/2258 +- version: "1.1.2" + changes: + - description: Update Title and Description. + type: enhancement + link: https://github.com/elastic/integrations/pull/1954 +- version: "1.1.1" + changes: + - description: Fix logic that checks for the 'forwarded' tag + type: bugfix + link: https://github.com/elastic/integrations/pull/1806 +- version: "1.1.0" + changes: + - description: Update to ECS 1.12.0 + type: enhancement + link: https://github.com/elastic/integrations/pull/1783 +- version: "1.0.1" + changes: + - description: Adding missing ECS fields + type: bugfix + link: https://github.com/elastic/integrations/pull/1731 +- version: "1.0.0" + changes: + - description: Initial version to split Cisco FTD out from the general Cisco package + type: enhancement + link: https://github.com/elastic/integrations/pull/1586 diff --git a/packages/cisco_ftd/2.0.3/data_stream/log/agent/stream/stream.yml.hbs b/packages/cisco_ftd/2.0.3/data_stream/log/agent/stream/stream.yml.hbs new file mode 100755 index 0000000000..28ea4aaa98 --- /dev/null +++ b/packages/cisco_ftd/2.0.3/data_stream/log/agent/stream/stream.yml.hbs @@ -0,0 +1,20 @@ +paths: +{{#each paths as |path i|}} + - {{path}} +{{/each}} +exclude_files: [".gz$"] +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +processors: +- add_locale: ~ +{{#if processors}} +{{processors}} +{{/if}} \ No newline at end of file diff --git a/packages/cisco_ftd/2.0.3/data_stream/log/agent/stream/udp.yml.hbs b/packages/cisco_ftd/2.0.3/data_stream/log/agent/stream/udp.yml.hbs new file mode 100755 index 0000000000..e129442a23 --- /dev/null +++ b/packages/cisco_ftd/2.0.3/data_stream/log/agent/stream/udp.yml.hbs @@ -0,0 +1,16 @@ +host: "{{udp_host}}:{{udp_port}}" +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +processors: +- add_locale: ~ +{{#if processors}} +{{processors}} +{{/if}} \ No newline at end of file diff --git a/packages/cisco_ftd/2.0.3/data_stream/log/elasticsearch/ingest_pipeline/default.yml b/packages/cisco_ftd/2.0.3/data_stream/log/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..1a9ed3a9a8 --- /dev/null +++ b/packages/cisco_ftd/2.0.3/data_stream/log/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,1962 @@ +--- +description: "Pipeline for Cisco FTD logs" +processors: + - rename: + field: message + target_field: event.original + ignore_missing: true + - set: + field: ecs.version + value: "8.0.0" + # + # Parse the syslog header + # + # This populates the host.hostname, process.name, timestamp and other fields + # from the header and stores the message contents in _temp_.full_message. + - grok: + field: event.original + patterns: + - "(?:%{SYSLOG_HEADER})?\\s*%{GREEDYDATA:_temp_.full_message}" + pattern_definitions: + SYSLOG_HEADER: "(?:%{SYSLOGFACILITY}\\s*)?(?:%{FTD_DATE:_temp_.raw_date}:?\\s+)?(?:%{PROCESS_HOST}|%{HOST_PROCESS})(?:{DATA})?%{SYSLOG_END}?" + SYSLOGFACILITY: "<%{NONNEGINT:syslog.facility.code:int}(?:.%{NONNEGINT:syslog.priority:int})?>" + # Beginning with version 6.3, Firepower Threat Defense provides the option to enable timestamp as per RFC 5424. + FTD_DATE: "(?:%{TIMESTAMP_ISO8601}|%{ASA_DATE})" + ASA_DATE: "(?:%{DAY} )?%{MONTH} *%{MONTHDAY}(?: %{YEAR})? %{TIME}(?: %{TZ})?" + PROCESS: "(?:[^%\\s:\\[]+)" + SYSLOG_END: "(?:(:|\\s)\\s+)" + # exactly match the syntax for firepower management logs + PROCESS_HOST: "(?:%{PROCESS:process.name}:\\s%{SYSLOGHOST:host.name})" + HOST_PROCESS: "(?:%{SYSLOGHOST:host.hostname}:?\\s+)?(?:%{PROCESS:process.name}?(?:\\[%{POSINT:process.pid:long}\\])?)?" + + # + # Parse FTD/ASA style message + # + # This parses the header of an EMBLEM-style message for FTD and ASA prefixes. + - grok: + field: _temp_.full_message + patterns: + - "%{FTD_PREFIX}-(?:%{FTD_SUFFIX:_temp_.cisco.suffix}-)?%{NONNEGINT:event.severity:int}-%{POSINT:_temp_.cisco.message_id}?:?\\s*%{GREEDYDATA:message}" + # Before version 6.3, messages for connection, security intelligence, and intrusion events didn't include an event type ID in the message header. + - "%{GREEDYDATA:message}" + pattern_definitions: + FTD_SUFFIX: "[^0-9-]+" + # Before version 6.3, FTD used ASA prefix in syslog messages + FTD_PREFIX: "%{DATA}%(?:[A-Z]+)" + + # + # Create missing fields when no %FTD label is present + # + # message_id is needed in order for some processors below to work. + - set: + field: _temp_.cisco.message_id + value: "" + if: "ctx?._temp_?.cisco?.message_id == null" + + # + # set default event.severity to 7 (debug): + # + # This value is read from the EMBLEM header and won't be present if this is not + # an emblem message (firewalls can be configured to report other kinds of events) + - set: + field: event.severity + value: 7 + if: "ctx?.event?.severity == null" + + # + # Parse the date included in FTD logs + # + - date: + if: "ctx.event?.timezone == null && ctx._temp_?.raw_date != null" + field: "_temp_.raw_date" + target_field: "@timestamp" + formats: + - "ISO8601" + - "MMM d HH:mm:ss" + - "MMM dd HH:mm:ss" + - "EEE MMM d HH:mm:ss" + - "EEE MMM dd HH:mm:ss" + - "MMM d HH:mm:ss z" + - "MMM dd HH:mm:ss z" + - "EEE MMM d HH:mm:ss z" + - "EEE MMM dd HH:mm:ss z" + - "MMM d yyyy HH:mm:ss" + - "MMM dd yyyy HH:mm:ss" + - "EEE MMM d yyyy HH:mm:ss" + - "EEE MMM dd yyyy HH:mm:ss" + - "MMM d yyyy HH:mm:ss z" + - "MMM dd yyyy HH:mm:ss z" + - "EEE MMM d yyyy HH:mm:ss z" + - "EEE MMM dd yyyy HH:mm:ss z" + on_failure: + [ + { + "append": + { + "field": "error.message", + "value": "{{ _ingest.on_failure_message }}", + }, + }, + ] + - date: + if: "ctx.event?.timezone != null && ctx._temp_?.raw_date != null" + timezone: "{{ event.timezone }}" + field: "_temp_.raw_date" + target_field: "@timestamp" + formats: + - "ISO8601" + - "MMM d HH:mm:ss" + - "MMM dd HH:mm:ss" + - "EEE MMM d HH:mm:ss" + - "EEE MMM dd HH:mm:ss" + - "MMM d HH:mm:ss z" + - "MMM dd HH:mm:ss z" + - "EEE MMM d HH:mm:ss z" + - "EEE MMM dd HH:mm:ss z" + - "MMM d yyyy HH:mm:ss" + - "MMM dd yyyy HH:mm:ss" + - "EEE MMM d yyyy HH:mm:ss" + - "EEE MMM dd yyyy HH:mm:ss" + - "MMM d yyyy HH:mm:ss z" + - "MMM dd yyyy HH:mm:ss z" + - "EEE MMM d yyyy HH:mm:ss z" + - "EEE MMM dd yyyy HH:mm:ss z" + on_failure: + [ + { + "append": + { + "field": "error.message", + "value": "{{ _ingest.on_failure_message }}", + }, + }, + ] + + # + # Set log.level + # + - set: + field: "log.level" + if: "ctx.event.severity == 0" + value: unknown + - set: + field: "log.level" + if: "ctx.event.severity == 1" + value: alert + - set: + field: "log.level" + if: "ctx.event.severity == 2" + value: critical + - set: + field: "log.level" + if: "ctx.event.severity == 3" + value: error + - set: + field: "log.level" + if: "ctx.event.severity == 4" + value: warning + - set: + field: "log.level" + if: "ctx.event.severity == 5" + value: notification + - set: + field: "log.level" + if: "ctx.event.severity == 6" + value: informational + - set: + field: "log.level" + if: "ctx.event.severity == 7" + value: debug + + # + # Firewall messages + # + # This set of messages is shared between FTD and ASA. + - set: + if: 'ctx._temp_.cisco.message_id != ""' + field: "event.action" + value: "firewall-rule" + - dissect: + if: "ctx._temp_.cisco.message_id == '106001'" + field: "message" + description: "106001" + pattern: "%{network.direction} %{network.transport} connection %{event.outcome} from %{source.address}/%{source.port} to %{destination.address}/%{destination.port} flags %{} on interface %{_temp_.cisco.source_interface}" + - dissect: + if: "ctx._temp_.cisco.message_id == '106002'" + field: "message" + description: "106002" + pattern: "%{network.transport} Connection %{event.outcome} by %{network.direction} list %{_temp_.cisco.list_id} src %{source.address} dest %{destination.address}" + - dissect: + if: "ctx._temp_.cisco.message_id == '106006'" + field: "message" + description: "106006" + pattern: "%{event.outcome} %{network.direction} %{network.transport} from %{source.address}/%{source.port} to %{destination.address}/%{destination.port} on interface %{_temp_.cisco.source_interface}" + - dissect: + if: "ctx._temp_.cisco.message_id == '106007'" + field: "message" + description: "106007" + pattern: "%{event.outcome} %{network.direction} %{network.transport} from %{source.address}/%{source.port} to %{destination.address}/%{destination.port} due to %{network.protocol} %{}" + - grok: + if: "ctx._temp_.cisco.message_id == '106010'" + field: "message" + description: "106010" + patterns: + - "%{NOTSPACE:event.outcome} %{NOTSPACE:network.direction} %{NOTSPACE:network.transport} src %{NOTSPACE:_temp_.cisco.source_interface}:%{NOTSPACE:source.address}/%{POSINT:source.port} (%{DATA})?dst %{NOTSPACE:_temp_.cisco.destination_interface}:%{NOTSPACE:destination.address}/%{POSINT:destination.port}(%{GREEDYDATA})?" + - dissect: + if: "ctx._temp_.cisco.message_id == '106013'" + field: "message" + description: "106013" + pattern: "Dropping echo request from %{source.address} to PAT address %{destination.address}" + - set: + if: "ctx._temp_.cisco.message_id == '106013'" + field: "network.transport" + description: "106013" + value: icmp + - set: + if: "ctx._temp_.cisco.message_id == '106013'" + field: "network.direction" + description: "106013" + value: inbound + - grok: + if: "ctx._temp_.cisco.message_id == '106014'" + field: "message" + description: "106014" + patterns: + - "%{NOTSPACE:event.outcome} %{NOTSPACE:network.direction} %{NOTSPACE:network.transport} src %{NOTSPACE:_temp_.cisco.source_interface}:%{NOTSPACE:source.address} (%{DATA})?dst %{NOTSPACE:_temp_.cisco.destination_interface}:(?[^ (]*)(%{GREEDYDATA})?" + - grok: + if: "ctx._temp_.cisco.message_id == '106015'" + field: "message" + description: "106015" + patterns: + - "%{NOTSPACE:event.outcome} %{NOTSPACE:network.transport} %{NOTSPACE} %{NOTSPACE} from %{IP:source.address}/%{POSINT:source.port} to %{IP:destination.address}/%{POSINT:destination.port} flags %{DATA} on interface %{NOTSPACE:_temp_.cisco.source_interface}" + - dissect: + if: "ctx._temp_.cisco.message_id == '106016'" + field: "message" + pattern: "%{event.outcome} IP spoof from (%{source.address}) to %{destination.address} on interface %{_temp_.cisco.source_interface}" + description: "106016" + - dissect: + if: "ctx._temp_.cisco.message_id == '106017'" + field: "message" + pattern: "%{event.outcome} IP due to Land Attack from %{source.address} to %{destination.address}" + description: "106017" + - dissect: + if: "ctx._temp_.cisco.message_id == '106018'" + field: "message" + pattern: "%{network.transport} packet type %{_temp_.cisco.icmp_type} %{event.outcome} by %{network.direction} list %{_temp_.cisco.list_id} src %{source.address} dest %{destination.address}" + description: "106018" + - dissect: + if: "ctx._temp_.cisco.message_id == '106020'" + field: "message" + pattern: "%{event.outcome} IP teardrop fragment (size = %{}, offset = %{}) from %{source.address} to %{destination.address}" + description: "106020" + - dissect: + if: "ctx._temp_.cisco.message_id == '106021'" + field: "message" + pattern: "%{event.outcome} %{network.transport} reverse path check from %{source.address} to %{destination.address} on interface %{_temp_.cisco.source_interface}" + description: "106021" + - dissect: + if: "ctx._temp_.cisco.message_id == '106022'" + field: "message" + pattern: "%{event.outcome} %{network.transport} connection spoof from %{source.address} to %{destination.address} on interface %{_temp_.cisco.source_interface}" + description: "106022" + - grok: + if: "ctx._temp_.cisco.message_id == '106023'" + field: "message" + description: "106023" + patterns: + - ^%{NOTSPACE:event.outcome} %{NOTSPACE:network.transport} src %{NOTSPACE:_temp_.cisco.source_interface}:%{IPORHOST:source.address}(/%{POSINT:source.port})?\s*(%{GREEDYDATA:_temp_.cisco.source_username} )?dst %{NOTSPACE:_temp_.cisco.destination_interface}:%{IPORHOST:destination.address}(/%{POSINT:destination.port})?%{DATA}by access.group "%{NOTSPACE:_temp_.cisco.list_id}" + - dissect: + if: "ctx._temp_.cisco.message_id == '106027'" + field: "message" + description: "106027" + pattern: '%{} %{event.outcome} src %{source.address} dst %{destination.address} by access-group "%{_temp_.cisco.list_id}"' + - dissect: + if: "ctx._temp_.cisco.message_id == '106100'" + field: "message" + description: "106100" + pattern: "access-list %{_temp_.cisco.list_id} %{event.outcome} %{network.transport} %{_temp_.cisco.source_interface}/%{source.address}(%{source.port})%{}-> %{_temp_.cisco.destination_interface}/%{destination.address}(%{destination.port})%{}" + - dissect: + if: "ctx._temp_.cisco.message_id == '106102' || ctx._temp_.cisco.message_id == '106103'" + field: "message" + description: "106103" + pattern: "access-list %{_temp_.cisco.list_id} %{event.outcome} %{network.transport} for user %{user.name} %{_temp_.cisco.source_interface}/%{source.address}(%{source.port})%{}-> %{_temp_.cisco.destination_interface}/%{destination.address}(%{destination.port})%{}" + - dissect: + if: "ctx._temp_.cisco.message_id == '111004'" + field: "message" + description: "111004" + pattern: "%{source.address} end configuration: %{_temp_.cisco.cli_outcome}" + - set: + field: event.outcome + description: "111004" + value: "success" + if: "ctx._temp_.cisco.message_id == '111004' && ctx?._temp_?.cisco?.cli_outcome == 'OK'" + - set: + field: event.outcome + description: "111004" + value: "failure" + if: "ctx._temp_.cisco.message_id == '111004' && ctx?._temp_?.cisco?.cli_outcome == 'FAILED'" + - remove: + field: _temp_.cisco.cli_outcome + ignore_missing: true + - append: + field: event.type + description: "111004" + value: "change" + if: "ctx._temp_.cisco.message_id == '111004'" + - grok: + if: "ctx._temp_.cisco.message_id == '111009'" + description: "111009" + field: "message" + patterns: + - "^%{NOTSPACE} '%{NOTSPACE:server.user.name}' executed %{NOTSPACE} %{GREEDYDATA:_temp_.cisco.command_line_arguments}" + - grok: + if: "ctx._temp_.cisco.message_id == '111010'" + field: "message" + description: "111010" + patterns: + - "User '%{NOTSPACE:server.user.name}', running %{QUOTEDSTRING} from IP %{IP:source.address}, executed %{QUOTEDSTRING:_temp_.cisco.command_line_arguments}" + - dissect: + if: "ctx._temp_.cisco.message_id == '113019'" + field: "message" + description: "113019" + pattern: "Group = %{}, Username = %{source.user.name}, IP = %{destination.address}, Session disconnected. Session Type: %{}, Duration: %{_temp_.duration_hms}, Bytes xmt: %{source.bytes}, Bytes rcv: %{destination.bytes}, Reason: %{message}" + - grok: + if: '["302013", "302015"].contains(ctx._temp_.cisco.message_id)' + field: "message" + description: "302013, 302015" + patterns: + - "Built %{NOTSPACE:network.direction} %{NOTSPACE:network.transport} connection %{NUMBER:_temp_.cisco.connection_id} for %{NOTSPACE:_temp_.cisco.source_interface}:%{IP:source.address}/%{NUMBER:source.port} \\(%{IP:_temp_.natsrcip}/%{NUMBER:_temp_.cisco.mapped_source_port}\\)(\\(%{NOTSPACE:_temp_.cisco.source_username}\\))? to %{NOTSPACE:_temp_.cisco.destination_interface}:%{NOTSPACE:destination.address}/%{NUMBER:destination.port} \\(%{NOTSPACE:_temp_.natdstip}/%{NUMBER:_temp_.cisco.mapped_destination_port}\\)( \\(%{NOTSPACE:destination.user.name}\\))?%{GREEDYDATA}" + - dissect: + if: "ctx._temp_.cisco.message_id == '303002'" + field: "message" + description: "303002" + pattern: "%{network.protocol} connection from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port}, user %{client.user.name} %{} file %{file.path}" + - dissect: + if: "ctx._temp_.cisco.message_id == '302012'" + field: "message" + description: "302012" + pattern: "Teardown %{} %{network.transport} translation from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} duration %{_temp_.duration_hms}" + - grok: + if: "ctx._temp_.cisco.message_id == '302020'" + field: "message" + description: "302020" + patterns: + - "Built %{NOTSPACE:network.direction} %{NOTSPACE:network.protocol} connection for faddr (?:%{NOTCOLON:_temp_.cisco.source_interface}:)?%{ECSDESTIPORHOST}/%{NUMBER}\\s*(?:\\(%{NOTSPACE:_temp_.cisco.destination_username}\\) )?gaddr (?:%{NOTCOLON}:)?%{MAPPEDSRC}/%{NUMBER} laddr (?:%{NOTCOLON:_temp_.cisco.source_interface}:)?%{ECSSOURCEIPORHOST}/%{NUMBER}\\s*(?:\\(%{NOTSPACE:_temp_.cisco.source_username}\\) )?(type %{NUMBER:_temp_.cisco.icmp_type} code %{NUMBER:_temp_.cisco.icmp_code})?" + pattern_definitions: + NOTCOLON: "[^:]*" + ECSSOURCEIPORHOST: "(?:%{IP:source.address}|%{HOSTNAME:source.domain})" + ECSDESTIPORHOST: "(?:%{IP:destination.address}|%{HOSTNAME:destination.domain})" + MAPPEDSRC: "(?:%{DATA:_temp_.natsrcip}|%{HOSTNAME})" + - dissect: + if: "ctx._temp_.cisco.message_id == '302022'" + field: "message" + description: "302022" + pattern: "Built %{} stub %{network.transport} connection for %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} %{} to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} %{}" + - dissect: + if: "ctx._temp_.cisco.message_id == '302023'" + field: "message" + description: "302023" + pattern: "Teardown stub %{network.transport} connection for %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} duration %{_temp_.duration_hms} forwarded bytes %{network.bytes} %{event.reason}" + - grok: + if: "ctx._temp_.cisco.message_id == '304001'" + field: "message" + description: "304001" + patterns: + - "%{IP:source.address} %{DATA} (%{NOTSPACE}@)?%{IP:destination.address}:%{GREEDYDATA:url.original}" + - set: + if: "ctx._temp_.cisco.message_id == '304001'" + field: "event.outcome" + description: "304001" + value: success + - dissect: + if: "ctx._temp_.cisco.message_id == '304002'" + field: "message" + description: "304002" + pattern: "Access %{event.outcome} URL %{url.original} SRC %{source.address} %{}EST %{destination.address} on interface %{_temp_.cisco.source_interface}" + - grok: + if: "ctx._temp_.cisco.message_id == '305011'" + field: "message" + description: "305011" + patterns: + - Built %{NOTSPACE} %{NOTSPACE:network.transport} translation from %{NOTSPACE:_temp_.cisco.source_interface}:%{IP:source.address}/%{NUMBER:source.port}(\(%{NOTSPACE:source.user.name}\))? to %{NOTSPACE:_temp_.cisco.destination_interface}:%{IP:destination.address}/%{NUMBER:destination.port} + - dissect: + if: "ctx._temp_.cisco.message_id == '313001'" + field: "message" + description: "313001" + pattern: "%{event.outcome} %{network.transport} type=%{_temp_.cisco.icmp_type}, code=%{_temp_.cisco.icmp_code} from %{source.address} on interface %{_temp_.cisco.source_interface}" + - dissect: + if: "ctx._temp_.cisco.message_id == '313004'" + field: "message" + description: "313004" + pattern: "%{event.outcome} %{network.transport} type=%{_temp_.cisco.icmp_type}, from%{}addr %{source.address} on interface %{_temp_.cisco.source_interface} to %{destination.address}: no matching session" + - dissect: + if: "ctx._temp_.cisco.message_id == '313005'" + field: "message" + description: "313005" + pattern: "No matching connection for %{network.transport} error message: %{} on %{_temp_.cisco.source_interface} interface.%{}riginal IP payload: %{}" + - dissect: + if: "ctx._temp_.cisco.message_id == '313008'" + field: "message" + description: "313008" + pattern: "%{event.outcome} %{network.transport} type=%{_temp_.cisco.icmp_type}, code=%{_temp_.cisco.icmp_code} from %{source.address} on interface %{_temp_.cisco.source_interface}" + - dissect: + if: "ctx._temp_.cisco.message_id == '313009'" + field: "message" + description: "313009" + pattern: "%{event.outcome} invalid %{network.transport} code %{_temp_.cisco.icmp_code}, for %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}" + - dissect: + if: "ctx._temp_.cisco.message_id == '322001'" + field: "message" + description: "322001" + pattern: "%{event.outcome} MAC address %{source.mac}, possible spoof attempt on interface %{_temp_.cisco.source_interface}" + - dissect: + if: "ctx._temp_.cisco.message_id == '338001'" + field: "message" + description: "338001" + pattern: "Dynamic filter %{event.outcome} black%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}source %{} resolved from %{_temp_.cisco.list_id} list: %{source.domain}, threat-level: %{_temp_.cisco.threat_level}, category: %{_temp_.cisco.threat_category}" + - set: + if: "ctx._temp_.cisco.message_id == '338001'" + field: "server.domain" + description: "338001" + value: "{{source.domain}}" + ignore_empty_value: true + - dissect: + if: "ctx._temp_.cisco.message_id == '338002'" + field: "message" + description: "338002" + pattern: "Dynamic %{}ilter %{event.outcome} black%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}destination %{} resolved from %{_temp_.cisco.list_id} list: %{destination.domain}" + - set: + if: "ctx._temp_.cisco.message_id == '338002'" + field: "server.domain" + description: "338002" + value: "{{destination.domain}}" + ignore_empty_value: true + - dissect: + if: "ctx._temp_.cisco.message_id == '338003'" + field: "message" + description: "338003" + pattern: "Dynamic %{}ilter %{event.outcome} black%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}source %{} resolved from %{_temp_.cisco.list_id} list: %{}, threat-level: %{_temp_.cisco.threat_level}, category: %{_temp_.cisco.threat_category}" + - dissect: + if: "ctx._temp_.cisco.message_id == '338004'" + field: "message" + description: "338004" + pattern: "Dynamic %{}ilter %{event.outcome} black%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}destination %{} resolved from %{_temp_.cisco.list_id} list: %{}, threat-level: %{_temp_.cisco.threat_level}, category: %{_temp_.cisco.threat_category}" + - dissect: + if: "ctx._temp_.cisco.message_id == '338005'" + field: "message" + description: "338005" + pattern: "Dynamic %{}ilter %{event.outcome} black%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}source %{} resolved from %{_temp_.cisco.list_id} list: %{source.domain}, threat-level: %{_temp_.cisco.threat_level}, category: %{_temp_.cisco.threat_category}" + - set: + if: "ctx._temp_.cisco.message_id == '338005'" + field: "server.domain" + description: "338005" + value: "{{source.domain}}" + ignore_empty_value: true + - dissect: + if: "ctx._temp_.cisco.message_id == '338006'" + field: "message" + description: "338006" + pattern: "Dynamic %{}ilter %{event.outcome} black%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}destination %{} resolved from %{_temp_.cisco.list_id} list: %{destination.domain}, threat-level: %{_temp_.cisco.threat_level}, category: %{_temp_.cisco.threat_category}" + - set: + if: "ctx._temp_.cisco.message_id == '338006'" + field: "server.domain" + description: "338006" + value: "{{destination.domain}}" + ignore_empty_value: true + - dissect: + if: "ctx._temp_.cisco.message_id == '338007'" + field: "message" + description: "338007" + pattern: "Dynamic %{}ilter %{event.outcome} black%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}source %{} resolved from %{_temp_.cisco.list_id} list: %{}, threat-level: %{_temp_.cisco.threat_level}, category: %{_temp_.cisco.threat_category}" + - dissect: + if: "ctx._temp_.cisco.message_id == '338008'" + field: "message" + description: "338008" + pattern: "Dynamic %{}ilter %{event.outcome} black%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}destination %{} resolved from %{_temp_.cisco.list_id} list: %{}, threat-level: %{_temp_.cisco.threat_level}, category: %{_temp_.cisco.threat_category}" + - dissect: + if: "ctx._temp_.cisco.message_id == '338101'" + field: "message" + description: "338101" + pattern: "Dynamic %{}ilter %{event.outcome} white%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}source %{} resolved from %{_temp_.cisco.list_id} list: %{source.domain}" + - set: + if: "ctx._temp_.cisco.message_id == '338101'" + field: "server.domain" + description: "338101" + value: "{{source.domain}}" + ignore_empty_value: true + - dissect: + if: "ctx._temp_.cisco.message_id == '338102'" + field: "message" + description: "338102" + pattern: "Dynamic %{}ilter %{event.outcome} white%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}destination %{} resolved from %{_temp_.cisco.list_id} list: %{destination.domain}" + - set: + if: "ctx._temp_.cisco.message_id == '338102'" + field: "server.domain" + description: "338102" + value: "{{destination.domain}}" + ignore_empty_value: true + - dissect: + if: "ctx._temp_.cisco.message_id == '338103'" + field: "message" + description: "338103" + pattern: "Dynamic %{}ilter %{event.outcome} white%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}source %{} resolved from %{_temp_.cisco.list_id} list: %{}" + - dissect: + if: "ctx._temp_.cisco.message_id == '338104'" + field: "message" + description: "338104" + pattern: "Dynamic %{}ilter %{event.outcome} white%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}destination %{} resolved from %{_temp_.cisco.list_id} list: %{}" + - dissect: + if: "ctx._temp_.cisco.message_id == '338201'" + field: "message" + description: "338201" + pattern: "Dynamic %{}ilter %{event.outcome} grey%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}source %{} resolved from %{_temp_.cisco.list_id} list: %{source.domain}, threat-level: %{_temp_.cisco.threat_level}, category: %{_temp_.cisco.threat_category}" + - set: + if: "ctx._temp_.cisco.message_id == '338201'" + field: "server.domain" + description: "338201" + value: "{{source.domain}}" + ignore_empty_value: true + - dissect: + if: "ctx._temp_.cisco.message_id == '338202'" + field: "message" + description: "338202" + pattern: "Dynamic %{}ilter %{event.outcome} grey%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}destination %{} resolved from %{_temp_.cisco.list_id} list: %{destination.domain}, threat-level: %{_temp_.cisco.threat_level}, category: %{_temp_.cisco.threat_category}" + - set: + if: "ctx._temp_.cisco.message_id == '338202'" + field: "server.domain" + description: "338202" + value: "{{destination.domain}}" + ignore_empty_value: true + - dissect: + if: "ctx._temp_.cisco.message_id == '338203'" + field: "message" + description: "338203" + pattern: "Dynamic %{}ilter %{event.outcome} grey%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}source %{} resolved from %{_temp_.cisco.list_id} list: %{source.domain}, threat-level: %{_temp_.cisco.threat_level}, category: %{_temp_.cisco.threat_category}" + - set: + if: "ctx._temp_.cisco.message_id == '338203'" + field: "server.domain" + description: "338203" + value: "{{source.domain}}" + ignore_empty_value: true + - dissect: + if: "ctx._temp_.cisco.message_id == '338204'" + field: "message" + description: "338204" + pattern: "Dynamic %{}ilter %{event.outcome} grey%{}d %{network.transport} traffic from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})%{}destination %{} resolved from %{_temp_.cisco.list_id} list: %{destination.domain}, threat-level: %{_temp_.cisco.threat_level}, category: %{_temp_.cisco.threat_category}" + - set: + if: "ctx._temp_.cisco.message_id == '338204'" + field: "server.domain" + description: "338204" + value: "{{destination.domain}}" + ignore_empty_value: true + - dissect: + if: "ctx._temp_.cisco.message_id == '338301'" + field: "message" + description: "338301" + pattern: "Intercepted DNS reply for domain %{source.domain} from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port}, matched %{_temp_.cisco.list_id}" + - set: + if: "ctx._temp_.cisco.message_id == '338301'" + field: "client.address" + description: "338301" + value: "{{destination.address}}" + ignore_empty_value: true + - set: + if: "ctx._temp_.cisco.message_id == '338301'" + field: "client.port" + description: "338301" + value: "{{destination.port}}" + ignore_empty_value: true + - set: + if: "ctx._temp_.cisco.message_id == '338301'" + field: "server.address" + description: "338301" + value: "{{source.address}}" + ignore_empty_value: true + - set: + if: "ctx._temp_.cisco.message_id == '338301'" + field: "server.port" + description: "338301" + value: "{{source.port}}" + ignore_empty_value: true + - dissect: + if: "ctx._temp_.cisco.message_id == '502103'" + field: "message" + description: "502103" + pattern: "User priv level changed: Uname: %{server.user.name} From: %{_temp_.cisco.privilege.old} To: %{_temp_.cisco.privilege.new}" + - append: + if: "ctx._temp_.cisco.message_id == '502103'" + field: "event.type" + description: "502103" + value: + - "group" + - "change" + - append: + if: "ctx._temp_.cisco.message_id == '502103'" + field: "event.category" + description: "502103" + value: "iam" + - dissect: + if: "ctx._temp_.cisco.message_id == '507003'" + field: "message" + description: "507003" + pattern: "%{network.transport} flow from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} terminated by inspection engine, reason - %{message}" + - dissect: + if: '["605004", "605005"].contains(ctx._temp_.cisco.message_id)' + field: "message" + description: "605004, 605005" + pattern: 'Login %{event.outcome} from %{source.address}/%{source.port} to %{_temp_.cisco.destination_interface}:%{destination.address}/%{network.protocol} for user "%{source.user.name}"' + - dissect: + if: "ctx._temp_.cisco.message_id == '609001'" + field: "message" + description: "609001" + pattern: "Built local-host %{_temp_.cisco.source_interface}:%{source.address}" + - dissect: + if: "ctx._temp_.cisco.message_id == '609002'" + field: "message" + description: "609002" + pattern: "Teardown local-host %{_temp_.cisco.source_interface}:%{source.address} duration %{_temp_.duration_hms}" + - dissect: + if: '["611102", "611101"].contains(ctx._temp_.cisco.message_id)' + field: "message" + description: "611102, 611101" + pattern: "User authentication %{event.outcome}: IP address: %{source.address}, Uname: %{server.user.name}" + - dissect: + if: "ctx._temp_.cisco.message_id == '710003'" + field: "message" + description: "710003" + pattern: "%{network.transport} access %{event.outcome} by ACL from %{source.address}/%{source.port} to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port}" + - dissect: + if: "ctx._temp_.cisco.message_id == '710005'" + field: "message" + description: "710005" + pattern: "%{network.transport} request %{event.outcome} from %{source.address}/%{source.port} to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port}" + - dissect: + if: "ctx._temp_.cisco.message_id == '713049'" + field: "message" + description: "713049" + pattern: "Group = %{}, IP = %{source.address}, Security negotiation complete for LAN-to-LAN Group (%{}) %{}, Inbound SPI = %{}, Outbound SPI = %{}" + - grok: + if: "ctx._temp_.cisco.message_id == '716002'" + field: "message" + description: "716002" + patterns: + - "Group <%{NOTSPACE:_temp_.cisco.webvpn.group_name}> User <%{NOTSPACE:source.user.name}> IP <%{IP:source.address}> WebVPN session terminated: %{GREEDYDATA:event.reason}." + - "Group %{NOTSPACE:_temp_.cisco.webvpn.group_name} User %{NOTSPACE:source.user.name} IP %{IP:source.address} WebVPN session terminated: %{GREEDYDATA:event.reason}." + - grok: + if: "ctx._temp_.cisco.message_id == '722051'" + field: "message" + description: "722051" + patterns: + - "Group <%{NOTSPACE:_temp_.cisco.webvpn.group_name}> User <%{NOTSPACE:source.user.name}> IP <%{IP:source.address}> IPv4 Address <%{IP:_temp_.cisco.assigned_ip}> %{GREEDYDATA}" + - "Group %{NOTSPACE:_temp_.cisco.webvpn.group_name} User %{NOTSPACE:source.user.name} IP %{IP:source.address} IPv4 Address %{IP:_temp_.cisco.assigned_ip} %{GREEDYDATA}" + - dissect: + if: "ctx._temp_.cisco.message_id == '733100'" + field: "message" + description: "733100" + pattern: "[%{_temp_.cisco.burst.object}] drop %{_temp_.cisco.burst.id} exceeded. Current burst rate is %{_temp_.cisco.burst.current_rate} per second, max configured rate is %{_temp_.cisco.burst.configured_rate}; Current average rate is %{_temp_.cisco.burst.avg_rate} per second, max configured rate is %{_temp_.cisco.burst.configured_avg_rate}; Cumulative total count is %{_temp_.cisco.burst.cumulative_count}" + - dissect: + if: "ctx._temp_.cisco.message_id == '734001'" + field: "message" + description: "734001" + pattern: "DAP: User %{user.email}, Addr %{source.address}, Connection %{_temp_.cisco.connection_type}: The following DAP records were selected for this connection: %{_temp_.cisco.dap_records->}" + - dissect: + if: "ctx._temp_.cisco.message_id == '805001'" + field: "message" + description: "805001" + pattern: "Offloaded %{network.transport} for connection %{_temp_.cisco.connection_id} from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})" + - dissect: + if: "ctx._temp_.cisco.message_id == '805002'" + field: "message" + description: "805002" + pattern: "%{network.transport} Flow is no longer offloaded for connection %{_temp_.cisco.connection_id} from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} (%{_temp_.natsrcip}/%{_temp_.cisco.mapped_source_port}) to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} (%{_temp_.natdstip}/%{_temp_.cisco.mapped_destination_port})" + - split: + field: "_temp_.cisco.dap_records" + separator: ",\\s+" + ignore_missing: true + - dissect: + if: "ctx._temp_.cisco.message_id == '434002'" + field: "message" + pattern: "SFR requested to %{event.action} %{network.protocol} packet from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port}" + - dissect: + if: "ctx._temp_.cisco.message_id == '434004'" + field: "message" + pattern: "SFR requested ASA to %{event.action} further packet redirection and process %{network.protocol} flow from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} locally" + - dissect: + if: "ctx._temp_.cisco.message_id == '110002'" + field: "message" + pattern: "%{event.reason} for %{network.protocol} from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} to %{destination.address}/%{destination.port}" + - dissect: + if: "ctx._temp_.cisco.message_id == '419002'" + field: "message" + pattern: "%{event.reason}from %{_temp_.cisco.source_interface}:%{source.address}/%{source.port} to %{_temp_.cisco.destination_interface}:%{destination.address}/%{destination.port} %{+event.reason}" + - dissect: + if: '["602303", "602304"].contains(ctx._temp_.cisco.message_id)' + field: "message" + pattern: "%{network.type}: An %{network.direction} %{network.inner} SA (SPI= %{}) between %{source.address} and %{destination.address} (user= %{user.name}) has been %{event.action}." + - dissect: + if: "ctx._temp_.cisco.message_id == '750002'" + field: "message" + pattern: "Local:%{source.address}:%{source.port} Remote:%{destination.address}:%{destination.port} Username:%{user.name} %{event.reason}" + - dissect: + if: "ctx._temp_.cisco.message_id == '713120'" + field: "message" + pattern: "Group = %{}, IP = %{source.address}, %{event.reason} (msgid=%{event.id})" + - dissect: + if: "ctx._temp_.cisco.message_id == '713202'" + field: "message" + pattern: "IP = %{source.address}, %{event.reason}. %{} packet." + - dissect: + if: "ctx._temp_.cisco.message_id == '750003'" + field: "message" + pattern: "Local:%{source.address}:%{source.port} Remote:%{destination.address}:%{destination.port} Username:%{user.name} %{event.reason} ERROR:%{+event.reason}" + - grok: + if: '["713905", "713904", "713906", "713902", "713901"].contains(ctx._temp_.cisco.message_id)' + field: "message" + patterns: + - "^(Group = %{IP}, )?(IP = %{IP:source.address}, )?%{GREEDYDATA:event.reason}$" + # Handle ecs action outcome protocol + - set: + if: '["434002", "434004"].contains(ctx._temp_.cisco.message_id)' + field: "event.outcome" + value: "unknown" + - set: + if: '["419002"].contains(ctx._temp_.cisco.message_id)' + field: "network.protocol" + value: "tcp" + - set: + if: '["110002"].contains(ctx._temp_.cisco.message_id)' + field: "event.outcome" + value: "failure" + - set: + if: '["713120"].contains(ctx._temp_.cisco.message_id)' + field: "event.outcome" + value: "success" + - set: + if: '["602303", "602304"].contains(ctx._temp_.cisco.message_id)' + field: "event.outcome" + value: "success" + - set: + if: '["713905", "713904", "713906", "713902", "713901", "710005"].contains(ctx._temp_.cisco.message_id)' + field: "event.outcome" + value: "failure" + - set: + if: '["750002", "750003"].contains(ctx._temp_.cisco.message_id)' + field: "event.action" + value: "connection-started" + - set: + if: '["750003", "713905", "713904", "713906", "713902", "713901"].contains(ctx._temp_.cisco.message_id)' + field: "event.action" + value: "error" + - append: + if: '["750003", "713905", "713904", "713906", "713902", "713901"].contains(ctx._temp_.cisco.message_id)' + field: "event.type" + value: "error" + + # + # Handle 302xxx messages (Flow expiration a.k.a "Teardown") + # + - set: + if: '["302012", "302014", "302016", "302018", "302020", "302021", "302036", "302304", "302306", "609001", "609002"].contains(ctx._temp_.cisco.message_id)' + field: "event.action" + value: "flow-expiration" + description: "302012, 302014, 302016, 302018, 302020, 302021, 302036, 302304, 302306, 609001, 609002" + - grok: + field: "message" + if: '["302014", "302016", "302018", "302021", "302036", "302304", "302306"].contains(ctx._temp_.cisco.message_id)' + description: "302014, 302016, 302018, 302021, 302036, 302304, 302306" + patterns: + - ^Teardown %{NOTSPACE:network.transport} (?:state-bypass )?connection %{NOTSPACE:_temp_.cisco.connection_id} (?:for|from) %{NOTCOLON:_temp_.cisco.source_interface}:%{DATA:source.address}/%{NUMBER:source.port:int}\s*(?:%{NOTSPACE:_temp_.cisco.source_username} )?to %{NOTCOLON:_temp_.cisco.destination_interface}:%{DATA:destination.address}/%{NUMBER:destination.port:int}\s*(?:%{NOTSPACE:_temp_.cisco.destination_username} )?duration (?:%{TIME:_temp_.duration_hms} bytes %{NUMBER:network.bytes}) %{NOTCOLON:event.reason} from %{NOTCOLON:_temp_.cisco.termination_initiator} \(%{NOTSPACE:_temp_.cisco.termination_user}\) + - ^Teardown %{NOTSPACE:network.transport} (?:state-bypass )?connection %{NOTSPACE:_temp_.cisco.connection_id} (?:for|from) %{NOTCOLON:_temp_.cisco.source_interface}:%{DATA:source.address}/%{NUMBER:source.port:int}\s*(?:%{NOTSPACE:_temp_.cisco.source_username} )?to %{NOTCOLON:_temp_.cisco.destination_interface}:%{DATA:destination.address}/%{NUMBER:destination.port:int}\s*(?:%{NOTSPACE:_temp_.cisco.destination_username} )?duration (?:%{TIME:_temp_.duration_hms} bytes %{NUMBER:network.bytes}) %{NOTCOLON:event.reason} from %{NOTCOLON:_temp_.cisco.termination_initiator} + - ^Teardown %{NOTSPACE:network.transport} (?:state-bypass )?connection %{NOTSPACE:_temp_.cisco.connection_id} (?:for|from) %{NOTCOLON:_temp_.cisco.source_interface}:%{DATA:source.address}/%{NUMBER:source.port:int}\s*(?:%{NOTSPACE:_temp_.cisco.source_username} )?to %{NOTCOLON:_temp_.cisco.destination_interface}:%{DATA:destination.address}/%{NUMBER:destination.port:int}\s*(?:%{NOTSPACE:_temp_.cisco.destination_username} )?duration (?:%{TIME:_temp_.duration_hms} bytes %{NUMBER:network.bytes}) %{NOTCOLON:event.reason} \(%{NOTSPACE:_temp_.cisco.termination_user}\) + - ^Teardown %{NOTSPACE:network.transport} (?:state-bypass )?connection %{NOTSPACE:_temp_.cisco.connection_id} (?:for|from) %{NOTCOLON:_temp_.cisco.source_interface}:%{DATA:source.address}/%{NUMBER:source.port:int}\s*(?:%{NOTSPACE:_temp_.cisco.source_username} )?to %{NOTCOLON:_temp_.cisco.destination_interface}:%{DATA:destination.address}/%{NUMBER:destination.port:int}\s*(?:%{NOTSPACE:_temp_.cisco.destination_username} )?duration (?:%{TIME:_temp_.duration_hms} bytes %{NUMBER:network.bytes}) \(%{NOTSPACE:_temp_.cisco.termination_user}\) + - ^Teardown %{NOTSPACE:network.transport} (?:state-bypass )?connection %{NOTSPACE:_temp_.cisco.connection_id} (?:for|from) %{NOTCOLON:_temp_.cisco.source_interface}:%{DATA:source.address}/%{NUMBER:source.port:int}\s*(?:%{NOTSPACE:_temp_.cisco.source_username} )?to %{NOTCOLON:_temp_.cisco.destination_interface}:%{DATA:destination.address}/%{NUMBER:destination.port:int}\s*(?:%{NOTSPACE:_temp_.cisco.destination_username} )?duration (?:%{TIME:_temp_.duration_hms} bytes %{NUMBER:network.bytes}) %{NOTCOLON:event.reason} + - ^Teardown %{NOTSPACE:network.transport} (?:state-bypass )?connection %{NOTSPACE:_temp_.cisco.connection_id} (?:for|from) %{NOTCOLON:_temp_.cisco.source_interface}:%{DATA:source.address}/%{NUMBER:source.port:int}\s*(?:%{NOTSPACE:_temp_.cisco.source_username} )?to %{NOTCOLON:_temp_.cisco.destination_interface}:%{DATA:destination.address}/%{NUMBER:destination.port:int}\s*(?:%{NOTSPACE:_temp_.cisco.destination_username} )?duration (?:%{TIME:_temp_.duration_hms} bytes %{NUMBER:network.bytes}) + - ^Teardown %{NOTSPACE:network.transport} connection for faddr (?:%{NOTCOLON:_temp_.cisco.source_interface}:)?%{ECSDESTIPORHOST}/%{NUMBER}\s*(?:\(%{NOTSPACE:_temp_.cisco.destination_username}\) )?gaddr (?:%{NOTCOLON}:)?%{MAPPEDSRC}/%{NUMBER} laddr (?:%{NOTCOLON:_temp_.cisco.source_interface}:)?%{ECSSOURCEIPORHOST}/%{NUMBER}\s*(?:\(%{NOTSPACE:_temp_.cisco.source_username}\))?(\s*type %{NUMBER:_temp_.cisco.icmp_type} code %{NUMBER:_temp_.cisco.icmp_code})? + pattern_definitions: + NOTCOLON: "[^:]*" + ECSSOURCEIPORHOST: "(?:%{IP:source.address}|%{HOSTNAME:source.domain})" + ECSDESTIPORHOST: "(?:%{IP:destination.address}|%{HOSTNAME:destination.domain})" + MAPPEDSRC: "(?:%{DATA:_temp_.natsrcip}|%{HOSTNAME})" + + # + # Decode FTD's Security Event Syslog Messages + # + # 43000x messages are security event syslog messages specific to FTD. + # Format is a comma-separated sequence of key: value pairs. + # + # The result of this decoding is saved as _temp_.orig_security.{Key}: {Value} + - kv: + if: '["430001", "430002", "430003", "430004", "430005", ""].contains(ctx._temp_.cisco.message_id)' + field: "message" + description: "430001, 430002, 430003, 430004, 430005" + field_split: ",(?=[A-za-z1-9\\s]+:)" + value_split: ":" + target_field: "_temp_.orig_security" + trim_key: " " + trim_value: " " + ignore_failure: true + + # + # Remove _temp_.full_message. + # + # The field has been used as temporary buffer while decoding. The full message + # is kept under event.original. Processors below can still add a message field, as some + # security events contain an explanatory Message field. + - remove: + field: + - message + - _temp_.full_message + ignore_missing: true + + # + # Populate ECS fields from Security Events + # + # This script uses the key-value pairs from Security Events to populate + # the appropriate ECS fields. + # + # A single key can be mapped to multiple ECS fields, and more than one key can + # map to the same ECS field, which results in an array being created. + # + # This script performs an additional job: + # + # Before FTD version 6.3, the message_id was not included in Security Events. + # As this field encodes the kind of event (intrusion, connection, malware...) + # the script below will guess the right message_id from the keys present in + # the event. + # + # The reason for overloading this script with different behaviors is + # that this pipeline is already reaching the limit on script compilations. + # + #******************************************************************************* + # Code generated by go generate. DO NOT EDIT. + #******************************************************************************* + - script: + if: ctx._temp_?.orig_security != null + params: + ACPolicy: + target: ac_policy + id: ["430001", "430002", "430003"] + ecs: [_temp_.cisco.rule_name] + AccessControlRuleAction: + target: access_control_rule_action + id: ["430002", "430003"] + ecs: [event.outcome] + AccessControlRuleName: + target: access_control_rule_name + id: ["430002", "430003"] + ecs: [_temp_.cisco.rule_name] + AccessControlRuleReason: + target: access_control_rule_reason + id: ["430002", "430003"] + ApplicationProtocol: + target: application_protocol + ecs: [network.protocol] + ArchiveDepth: + target: archive_depth + id: ["430004", "430005"] + ArchiveFileName: + target: archive_file_name + id: ["430004", "430005"] + ecs: [file.name] + ArchiveFileStatus: + target: archive_file_status + id: ["430004", "430005"] + ArchiveSHA256: + target: archive_sha256 + id: ["430004", "430005"] + ecs: [file.hash.sha256] + Classification: + target: classification + id: ["430001"] + Client: + target: client + ecs: [network.application] + ClientVersion: + target: client_version + id: ["430002", "430003"] + ConnectionDuration: + target: connection_duration + id: ["430003"] + ecs: [event.duration] + DNS_Sinkhole: + target: dns_sinkhole + id: ["430002", "430003"] + DNS_TTL: + target: dns_ttl + id: ["430002", "430003"] + DNSQuery: + target: dns_query + id: ["430002", "430003"] + ecs: [dns.question.name] + DNSRecordType: + target: dns_record_type + id: ["430002", "430003"] + ecs: [dns.question.type] + DNSResponseType: + target: dns_response_type + id: ["430002", "430003"] + ecs: [dns.response_code] + DNSSICategory: + target: dnssi_category + id: ["430002", "430003"] + DstIP: + target: dst_ip + ecs: [destination.address] + DstPort: + target: dst_port + ecs: [destination.port] + EgressInterface: + target: egress_interface + id: ["430001", "430002", "430003"] + ecs: [_temp_.cisco.destination_interface] + EgressZone: + target: egress_zone + id: ["430001", "430002", "430003"] + Endpoint Profile: + target: endpoint_profile + id: ["430002", "430003"] + FileAction: + target: file_action + id: ["430004", "430005"] + FileCount: + target: file_count + id: ["430002", "430003"] + FileDirection: + target: file_direction + id: ["430004", "430005"] + FileName: + target: file_name + id: ["430004", "430005"] + ecs: [file.name] + FilePolicy: + target: file_policy + id: ["430004", "430005"] + ecs: [_temp_.cisco.rule_name] + FileSHA256: + target: file_sha256 + id: ["430004", "430005"] + ecs: [file.hash.sha256] + FileSandboxStatus: + target: file_sandbox_status + id: ["430004", "430005"] + FileSize: + target: file_size + id: ["430004", "430005"] + ecs: [file.size] + FileStorageStatus: + target: file_storage_status + id: ["430004", "430005"] + FileType: + target: file_type + id: ["430004", "430005"] + FirstPacketSecond: + target: first_packet_second + id: ["430004", "430005"] + ecs: [event.start] + GID: + target: gid + id: ["430001"] + ecs: [service.id] + HTTPReferer: + target: http_referer + id: ["430002", "430003"] + ecs: [http.request.referrer] + HTTPResponse: + target: http_response + id: ["430001", "430002", "430003"] + ecs: [http.response.status_code] + ICMPCode: + target: icmp_code + id: ["430001", "430002", "430003"] + ICMPType: + target: icmp_type + id: ["430001", "430002", "430003"] + IPReputationSICategory: + target: ip_reputation_si_category + id: ["430002", "430003"] + IPSCount: + target: ips_count + id: ["430002", "430003"] + IngressInterface: + target: ingress_interface + id: ["430001", "430002", "430003"] + ecs: [_temp_.cisco.source_interface] + IngressZone: + target: ingress_zone + id: ["430001", "430002", "430003"] + InitiatorBytes: + target: initiator_bytes + id: ["430003"] + ecs: [source.bytes] + InitiatorPackets: + target: initiator_packets + id: ["430003"] + ecs: [source.packets] + InlineResult: + target: inline_result + id: ["430001"] + ecs: [event.outcome] + IntrusionPolicy: + target: intrusion_policy + id: ["430001"] + ecs: [_temp_.cisco.rule_name] + MPLS_Label: + target: mpls_label + id: ["430001"] + Message: + target: message + id: ["430001"] + ecs: [message] + NAPPolicy: + target: nap_policy + id: ["430001", "430002", "430003"] + NetBIOSDomain: + target: net_bios_domain + id: ["430002", "430003"] + ecs: [host.hostname] + NumIOC: + target: num_ioc + id: ["430001"] + Prefilter Policy: + target: prefilter_policy + id: ["430002", "430003"] + Priority: + target: priority + id: ["430001"] + Protocol: + target: protocol + ecs: [network.transport] + ReferencedHost: + target: referenced_host + id: ["430002", "430003"] + ecs: [url.domain] + ResponderBytes: + target: responder_bytes + id: ["430003"] + ecs: [destination.bytes] + ResponderPackets: + target: responder_packets + id: ["430003"] + ecs: [destination.packets] + Revision: + target: revision + id: ["430001"] + SHA_Disposition: + target: sha_disposition + id: ["430004", "430005"] + SID: + target: sid + id: ["430001"] + SSLActualAction: + target: ssl_actual_action + ecs: [event.outcome] + SSLCertificate: + target: ssl_certificate + id: ["430002", "430003", "430004", "430005"] + SSLExpectedAction: + target: ssl_expected_action + id: ["430002", "430003"] + SSLFlowStatus: + target: ssl_flow_status + id: ["430002", "430003", "430004", "430005"] + SSLPolicy: + target: ssl_policy + id: ["430002", "430003"] + SSLRuleName: + target: ssl_rule_name + id: ["430002", "430003"] + SSLServerCertStatus: + target: ssl_server_cert_status + id: ["430002", "430003"] + SSLServerName: + target: ssl_server_name + id: ["430002", "430003"] + ecs: [server.domain] + SSLSessionID: + target: ssl_session_id + id: ["430002", "430003"] + SSLTicketID: + target: ssl_ticket_id + id: ["430002", "430003"] + SSLURLCategory: + target: sslurl_category + id: ["430002", "430003"] + SSLVersion: + target: ssl_version + id: ["430002", "430003"] + SSSLCipherSuite: + target: sssl_cipher_suite + id: ["430002", "430003"] + SecIntMatchingIP: + target: sec_int_matching_ip + id: ["430002", "430003"] + Security Group: + target: security_group + id: ["430002", "430003"] + SperoDisposition: + target: spero_disposition + id: ["430004", "430005"] + SrcIP: + target: src_ip + ecs: [source.address] + SrcPort: + target: src_port + ecs: [source.port] + TCPFlags: + target: tcp_flags + id: ["430002", "430003"] + ThreatName: + target: threat_name + id: ["430005"] + ecs: [_temp_.cisco.threat_category] + ThreatScore: + target: threat_score + id: ["430005"] + ecs: [_temp_.cisco.threat_level] + Tunnel or Prefilter Rule: + target: tunnel_or_prefilter_rule + id: ["430002", "430003"] + URI: + target: uri + id: ["430004", "430005"] + ecs: [url.original] + URL: + target: url + id: ["430002", "430003"] + ecs: [url.original] + URLCategory: + target: url_category + id: ["430002", "430003"] + URLReputation: + target: url_reputation + id: ["430002", "430003"] + URLSICategory: + target: urlsi_category + id: ["430002", "430003"] + User: + target: user + ecs: [user.id, user.name] + UserAgent: + target: user_agent + id: ["430002", "430003"] + ecs: [user_agent.original] + VLAN_ID: + target: vlan_id + id: ["430001", "430002", "430003"] + WebApplication: + target: web_application + ecs: [network.application] + originalClientSrcIP: + target: original_client_src_ip + id: ["430002", "430003"] + ecs: [client.address] + lang: painless + source: | + boolean isEmpty(def value) { + return (value instanceof AbstractList? value.size() : value.length()) == 0; + } + def appendOrCreate(Map dest, String[] path, def value) { + for (int i=0; i new HashMap()); + } + String key = path[path.length - 1]; + def existing = dest.get(key); + return existing == null? + dest.put(key, value) + : existing instanceof AbstractList? + existing.add(value) + : dest.put(key, new ArrayList([existing, value])); + } + def msg = ctx._temp_.orig_security; + def counters = new HashMap(); + def dest = new HashMap(); + ctx._temp_.cisco['security'] = dest; + for (entry in msg.entrySet()) { + def param = params.get(entry.getKey()); + if (param == null) { + continue; + } + param.getOrDefault('id', []).forEach( id -> counters[id] = 1 + counters.getOrDefault(id, 0) ); + if (!isEmpty(entry.getValue())) { + param.getOrDefault('ecs', []).forEach( field -> appendOrCreate(ctx, field.splitOnToken('.'), entry.getValue()) ); + dest[param.target] = entry.getValue(); + } + } + if (ctx._temp_.cisco.message_id != "") return; + def best; + for (entry in counters.entrySet()) { + if (best == null || best.getValue() < entry.getValue()) best = entry; + } + if (best != null) ctx._temp_.cisco.message_id = best.getKey(); + #******************************************************************************* + # End of generated code. + #******************************************************************************* + + # + # Normalize ECS field values + # + - script: + lang: painless + params: + "ctx._temp_.cisco.message_id": + target: event.action + map: + "430001": intrusion-detected + "430002": connection-started + "430003": connection-finished + "430004": file-detected + "430005": malware-detected + "dns.question.type": + map: + "a host address": A + "ip6 address": AAAA + "text strings": TXT + "a domain name pointer": PTR + "an authoritative name server": NS + "the canonical name for an alias": CNAME + "marks the start of a zone of authority": SOA + "mail exchange": MX + "server selection": SRV + "dns.response_code": + map: + "non-existent domain": NXDOMAIN + "server failure": SERVFAIL + "query refused": REFUSED + "no error": NOERROR + source: | + def getField(Map src, String[] path) { + for (int i=0; i new HashMap()); + } + dest[path[path.length-1]] = value; + } + for (entry in params.entrySet()) { + def srcField = entry.getKey(); + def param = entry.getValue(); + String oldVal = getField(ctx, srcField.splitOnToken('.')); + if (oldVal == null) continue; + def newVal = param.map?.getOrDefault(oldVal.toLowerCase(), null); + if (newVal != null) { + def dstField = param.getOrDefault('target', srcField); + setField(ctx, dstField.splitOnToken('.'), newVal); + } + } + - set: + if: "ctx.dns?.question?.type != null && ctx.dns?.response_code == null" + field: dns.response_code + value: NOERROR + - set: + if: 'ctx._temp_.cisco.message_id == "430001"' + field: event.action + value: intrusion-detected + - set: + if: 'ctx._temp_.cisco.message_id == "430002"' + field: event.action + value: connection-started + - set: + if: 'ctx._temp_.cisco.message_id == "430003"' + field: event.action + value: connection-finished + - set: + if: 'ctx._temp_.cisco.message_id == "430004"' + field: event.action + value: file-detected + - set: + if: 'ctx._temp_.cisco.message_id == "430005"' + field: event.action + value: malware-detected + + # + # Handle event.duration + # + # It can be set from ConnectionDuration FTD field above. This field holds + # seconds as a string. Copy it to _temp_.duration_hms so that the following + # processor converts it to the right value and populates start and end. + - set: + field: "_temp_.duration_hms" + value: "{{event.duration}}" + ignore_empty_value: true + + # + # Process the flow duration "hh:mm:ss" present in some messages + # This will fill event.start, event.end and event.duration + # + - script: + lang: painless + if: "ctx?._temp_?.duration_hms != null" + source: > + long parse_hms(String s) { + long cur = 0, total = 0; + for (char c: s.toCharArray()) { + if (c >= (char)'0' && c <= (char)'9') { + cur = (cur*10) + (long)c - (char)'0'; + } else if (c == (char)':') { + total = (total + cur) * 60; + cur = 0; + } else { + return 0; + } + } + return total + cur; + } + if (ctx?.event == null) { + ctx['event'] = new HashMap(); + } + String end = ctx['@timestamp']; + ctx.event['end'] = end; + long nanos = parse_hms(ctx._temp_.duration_hms) * 1000000000L; + ctx.event['duration'] = nanos; + ctx.event['start'] = ZonedDateTime.ofInstant( + Instant.parse(end).minusNanos(nanos), + ZoneOffset.UTC); + # + # Normalize protocol names + # + - lowercase: + field: "network.transport" + ignore_failure: true + - lowercase: + field: "network.protocol" + ignore_failure: true + - lowercase: + field: "network.application" + ignore_failure: true + - lowercase: + field: "file.type" + ignore_failure: true + - lowercase: + field: "network.direction" + ignore_failure: true + - lowercase: + field: "network.type" + ignore_failure: true + # + # Populate network.iana_number from network.transport. Also does reverse + # mapping in case network.transport contains the iana_number. + # + - script: + if: "ctx?.network?.transport != null" + lang: painless + params: + icmp: 1 + igmp: 2 + ipv4: 4 + tcp: 6 + egp: 8 + igp: 9 + pup: 12 + udp: 17 + rdp: 27 + irtp: 28 + dccp: 33 + idpr: 35 + ipv6: 41 + ipv6-route: 43 + ipv6-frag: 44 + rsvp: 46 + gre: 47 + esp: 50 + ipv6-icmp: 58 + ipv6-nonxt: 59 + ipv6-opts: 60 + source: > + def net = ctx.network; + def iana = params[net.transport]; + if (iana != null) { + net['iana_number'] = iana; + return; + } + def reverse = new HashMap(); + def[] arr = new def[] { null }; + for (entry in params.entrySet()) { + arr[0] = entry.getValue(); + reverse.put(String.format("%d", arr), entry.getKey()); + } + def trans = reverse[net.transport]; + if (trans != null) { + net['iana_number'] = net.transport; + net['transport'] = trans; + } + # + # Normalize event.outcome + # + - lowercase: + field: "event.outcome" + ignore_missing: true + - set: + field: "event.outcome" + if: 'ctx.event?.outcome == "est-allowed"' + value: success + - set: + field: "event.outcome" + if: 'ctx.event?.outcome == "permitted"' + value: success + - set: + field: "event.outcome" + if: 'ctx.event?.outcome == "allow"' + value: success + - set: + field: "event.outcome" + if: 'ctx.event?.outcome == "denied"' + value: failure + - set: + field: "event.outcome" + if: 'ctx.event?.outcome == "deny"' + value: failure + - set: + field: "event.outcome" + if: 'ctx.event?.outcome == "dropped"' + value: failure + - set: + field: "network.transport" + if: 'ctx.network?.transport == "icmpv6"' + value: "ipv6-icmp" + # + # Convert numeric fields to integer or long, as output of dissect and kv processors is always a string + # + - convert: + field: source.port + type: integer + ignore_failure: true + - convert: + field: destination.port + type: integer + ignore_failure: true + - convert: + field: source.bytes + type: long + ignore_failure: true + - convert: + field: destination.bytes + type: long + ignore_failure: true + - convert: + field: network.bytes + type: long + ignore_failure: true + - convert: + field: source.packets + type: integer + ignore_failure: true + - convert: + field: destination.packets + type: integer + ignore_failure: true + - convert: + field: _temp_.cisco.mapped_source_port + type: integer + ignore_failure: true + - convert: + field: _temp_.cisco.mapped_destination_port + type: integer + ignore_failure: true + - convert: + field: _temp_.cisco.icmp_code + type: integer + ignore_failure: true + - convert: + field: _temp_.cisco.icmp_type + type: integer + ignore_failure: true + - convert: + field: http.response.status_code + type: integer + ignore_failure: true + - convert: + field: file.size + type: integer + ignore_failure: true + - convert: + field: network.iana_number + type: string + ignore_failure: true + # + # Assign ECS .ip fields from .address is a valid IP address is found, + # otherwise set .domain field. + # + - grok: + field: source.address + patterns: + - "^(?:%{IP:source.ip}|%{GREEDYDATA:source.domain})$" + ignore_failure: true + - grok: + field: destination.address + patterns: + - "^(?:%{IP:destination.ip}|%{GREEDYDATA:destination.domain})$" + ignore_failure: true + - grok: + field: client.address + patterns: + - "^(?:%{IP:client.ip}|%{GREEDYDATA:client.domain})$" + ignore_failure: true + - grok: + field: server.address + patterns: + - "^(?:%{IP:server.ip}|%{GREEDYDATA:server.domain})$" + ignore_failure: true + # + # Geolocation for source and destination addresses + # + - geoip: + field: "source.ip" + target_field: "source.geo" + ignore_missing: true + - geoip: + field: "destination.ip" + target_field: "destination.geo" + ignore_missing: true + # + # IP Autonomous System (AS) Lookup + # + - geoip: + database_file: GeoLite2-ASN.mmdb + field: source.ip + target_field: source.as + properties: + - asn + - organization_name + ignore_missing: true + - geoip: + database_file: GeoLite2-ASN.mmdb + field: destination.ip + target_field: destination.as + properties: + - asn + - organization_name + ignore_missing: true + - rename: + field: source.as.asn + target_field: source.as.number + ignore_missing: true + - rename: + field: source.as.organization_name + target_field: source.as.organization.name + ignore_missing: true + - rename: + field: destination.as.asn + target_field: destination.as.number + ignore_missing: true + - rename: + field: destination.as.organization_name + target_field: destination.as.organization.name + ignore_missing: true + # + # Set mapped_{src|dst}_ip fields only if they consist of a valid IP address. + # + - grok: + field: _temp_.natsrcip + patterns: + - "^(?:%{IP:_temp_.cisco.mapped_source_ip}|%{GREEDYDATA:_temp_.cisco.mapped_source_host})$" + ignore_failure: true + - grok: + field: _temp_.natdstip + patterns: + - "^(?:%{IP:_temp_.cisco.mapped_destination_ip}|%{GREEDYDATA:_temp_.cisco.mapped_destination_host})$" + ignore_failure: true + # + # NAT fields + # + # The firewall always populates mapped ip and port even if there was no NAT. + # This populates both nat.ip and nat.port only when some translation is done. + # Fills nat.ip and nat.port even when only the ip or port changed. + - set: + field: source.nat.ip + value: "{{_temp_.cisco.mapped_source_ip}}" + if: "ctx?._temp_?.cisco?.mapped_source_ip != ctx?.source?.ip" + ignore_empty_value: true + - convert: + field: source.nat.ip + type: ip + ignore_missing: true + - set: + field: source.nat.port + value: "{{_temp_.cisco.mapped_source_port}}" + if: "ctx?._temp_?.cisco?.mapped_source_port != ctx?.source?.port" + ignore_empty_value: true + - convert: + field: source.nat.port + type: long + ignore_missing: true + - set: + field: destination.nat.ip + value: "{{_temp_.cisco.mapped_destination_ip}}" + if: "ctx?._temp_?.cisco.mapped_destination_ip != ctx?.destination?.ip" + ignore_empty_value: true + - convert: + field: destination.nat.ip + type: ip + ignore_missing: true + - set: + field: destination.nat.port + value: "{{_temp_.cisco.mapped_destination_port}}" + if: "ctx?._temp_?.cisco?.mapped_destination_port != ctx?.destination?.port" + ignore_empty_value: true + - convert: + field: destination.nat.port + type: long + ignore_missing: true + # + # Zone-based Network Directionality + # + # If external and internal zones are specified and our ingress/egress zones are + # populated, then we can classify traffic directionality based off of our defined + # zones rather than the logs. + - set: + field: network.direction + value: inbound + if: > + ctx?._temp_?.external_zones != null && + ctx?._temp_?.internal_zones != null && + ctx?.observer?.ingress?.zone != null && + ctx?.observer?.egress?.zone != null && + ctx._temp_.external_zones.contains(ctx.observer.ingress.zone) && + ctx._temp_.internal_zones.contains(ctx.observer.egress.zone) + - set: + field: network.direction + value: outbound + if: > + ctx?._temp_?.external_zones != null && + ctx?._temp_?.internal_zones != null && + ctx?.observer?.ingress?.zone != null && + ctx?.observer?.egress?.zone != null && + ctx._temp_.external_zones.contains(ctx.observer.egress.zone) && + ctx._temp_.internal_zones.contains(ctx.observer.ingress.zone) + - set: + field: network.direction + value: internal + if: > + ctx?._temp_?.external_zones != null && + ctx?._temp_?.internal_zones != null && + ctx?.observer?.ingress?.zone != null && + ctx?.observer?.egress?.zone != null && + ctx._temp_.internal_zones.contains(ctx.observer.egress.zone) && + ctx._temp_.internal_zones.contains(ctx.observer.ingress.zone) + - set: + field: network.direction + value: external + if: > + ctx?._temp_?.external_zones != null && + ctx?._temp_?.internal_zones != null && + ctx?.observer?.ingress?.zone != null && + ctx?.observer?.egress?.zone != null && + ctx._temp_.external_zones.contains(ctx.observer.egress.zone) && + ctx._temp_.external_zones.contains(ctx.observer.ingress.zone) + - set: + field: network.direction + value: unknown + if: > + ctx?._temp_?.external_zones != null && + ctx?._temp_?.internal_zones != null && + ctx?.observer?.egress?.zone != null && + ctx?.observer?.ingress?.zone != null && + ( + ( + !ctx._temp_.external_zones.contains(ctx.observer.egress.zone) && + !ctx._temp_.internal_zones.contains(ctx.observer.egress.zone) + ) || + ( + !ctx._temp_.external_zones.contains(ctx.observer.ingress.zone) && + !ctx._temp_.internal_zones.contains(ctx.observer.ingress.zone) + ) + ) + + - set: + field: _temp_.url_domain + value: "{{url.domain}}" + ignore_failure: true + if: ctx?.url?.domain != null + + - uri_parts: + field: url.original + ignore_failure: true + if: ctx?.url?.original != null + - append: + field: url.domain + value: "{{_temp_.url_domain}}" + ignore_failure: true + allow_duplicates: false + if: ctx?._temp_?.url_domain != null + + # + # Populate ECS event.code + # + - rename: + field: _temp_.cisco.message_id + target_field: event.code + ignore_failure: true + - remove: + field: + - _temp_.cisco.message_id + - event.code + if: 'ctx._temp_.cisco.message_id == ""' + ignore_failure: true + # + # Copy _temp_.cisco to its final destination, cisco.asa or cisco.ftd. + # + - rename: + field: _temp_.cisco + target_field: "cisco.ftd" + ignore_failure: true + # + # Remove temporary fields + # + - remove: + field: _temp_ + ignore_missing: true + # + # Rename some 7.x fields + # + - rename: + field: cisco.ftd.list_id + target_field: cisco.ftd.rule_name + ignore_missing: true + # ECS categorization + - script: + lang: painless + params: + connection-finished: + kind: event + category: + - network + type: + - connection + - end + connection-started: + kind: event + category: + - network + type: + - connection + - start + file-detected: + kind: alert + category: + - malware + type: + - info + firewall-rule: + kind: event + category: + - network + type: + - info + flow-expiration: + kind: event + category: + - network + type: + - connection + - end + intrusion-detected: + kind: alert + category: + - intrusion_detection + type: + - info + malware-detected: + kind: alert + category: + - malware + type: + - info + bypass: + kind: event + category: + - network + type: + - info + - change + error: + kind: event + outcome: failure + category: + - network + type: + - error + deleted: + kind: event + category: + - network + type: + - info + - deletion + - user + creation: + kind: event + category: + - network + type: + - info + - creation + - user + source: >- + if (ctx?.event?.action == null || !params.containsKey(ctx.event.action)) { + return; + } + ctx.event.kind = params.get(ctx.event.action).get('kind'); + ctx.event.category = params.get(ctx.event.action).get('category').clone(); + ctx.event.type = params.get(ctx.event.action).get('type').clone(); + if (ctx?.event?.outcome == null) { + return; + } + if (ctx.event.category.contains('network') || ctx.event.category.contains('intrusion_detection')) { + if (ctx.event.outcome == 'success') { + ctx.event.type.add('allowed'); + } + if (ctx.event.outcome == 'failure') { + ctx.event.type.add('denied'); + } + if (ctx.event.outcome == 'block') { + ctx.event.type.add('denied'); + } + } + + - set: + description: copy destination.user.name to user.name if it is not set + field: user.name + value: "{{destination.user.name}}" + ignore_empty_value: true + if: ctx?.user?.name == null + + # Configures observer fields with a copy from cisco and host fields. Later on these might replace host.hostname. + - set: + field: observer.hostname + value: "{{ host.hostname }}" + ignore_empty_value: true + - set: + field: observer.vendor + value: "Cisco" + ignore_empty_value: true + - set: + field: observer.type + value: "idps" + ignore_empty_value: true + - set: + field: observer.product + value: "ftd" + ignore_empty_value: true + - set: + field: observer.egress.interface.name + value: "{{ cisco.ftd.destination_interface }}" + ignore_empty_value: true + - set: + field: observer.ingress.interface.name + value: "{{ cisco.ftd.source_interface }}" + ignore_empty_value: true + - append: + field: related.ip + value: "{{source.ip}}" + if: "ctx?.source?.ip != null" + allow_duplicates: false + - append: + field: related.ip + value: "{{source.nat.ip}}" + if: "ctx?.source?.nat?.ip != null" + allow_duplicates: false + - append: + field: related.ip + value: "{{destination.ip}}" + if: "ctx?.destination?.ip != null" + allow_duplicates: false + - append: + field: related.ip + value: "{{destination.nat.ip}}" + if: "ctx?.destination?.nat?.ip != null" + allow_duplicates: false + - append: + field: related.user + value: "{{user.name}}" + if: ctx?.user?.name != null && ctx?.user?.name != '' + allow_duplicates: false + - append: + field: related.user + value: "{{server.user.name}}" + if: ctx?.server?.user?.name != null && ctx?.server?.user?.name != '' + allow_duplicates: false + - append: + field: related.user + value: "{{source.user.name}}" + if: ctx?.source?.user?.name != null && ctx?.source?.user?.name != '' + allow_duplicates: false + - append: + field: related.user + value: "{{destination.user.name}}" + if: ctx?.destination?.user?.name != null && ctx?.destination?.user?.name != '' + allow_duplicates: false + - append: + field: related.hash + value: "{{file.hash.sha256}}" + if: "ctx?.file?.hash?.sha256 != null" + allow_duplicates: false + - append: + field: related.hosts + value: "{{host.hostname}}" + if: ctx.host?.hostname != null && ctx.host?.hostname != '' + allow_duplicates: false + - append: + field: related.hosts + value: "{{observer.hostname}}" + if: ctx.observer?.hostname != null && ctx.observer?.hostname != '' + allow_duplicates: false + - append: + field: related.hosts + value: "{{destination.domain}}" + if: ctx.destination?.domain != null && ctx.destination?.domain != '' + allow_duplicates: false + - append: + field: related.hosts + value: "{{source.domain}}" + if: ctx.source?.domain != null && ctx.source?.domain != '' + allow_duplicates: false + - script: + lang: painless + description: This script processor iterates over the whole document to remove fields with null values. + source: | + void handleMap(Map map) { + for (def x : map.values()) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + map.values().removeIf(v -> v == null); + } + void handleList(List list) { + for (def x : list) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + } + handleMap(ctx); + - remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_failure: true + ignore_missing: true +on_failure: + # Copy any fields under _temp_.cisco to its final destination. Those can help + # with diagnosing the failure. + - rename: + field: _temp_.cisco + target_field: "cisco.ftd" + ignore_failure: true + # Remove _temp_ to avoid adding a lot of unnecessary fields to the index. + - remove: + field: _temp_ + ignore_missing: true + - append: + field: "error.message" + value: "{{ _ingest.on_failure_message }}" diff --git a/packages/cisco_ftd/2.0.3/data_stream/log/fields/agent.yml b/packages/cisco_ftd/2.0.3/data_stream/log/fields/agent.yml new file mode 100755 index 0000000000..d38a70bd6b --- /dev/null +++ b/packages/cisco_ftd/2.0.3/data_stream/log/fields/agent.yml @@ -0,0 +1,207 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + +- name: input.type + type: keyword + description: Input type. +- name: log.offset + type: long + description: Offset of the entry in the log file. +- name: log.source.address + type: keyword + description: Source address from which the log event was read / sent from. diff --git a/packages/cisco_ftd/2.0.3/data_stream/log/fields/base-fields.yml b/packages/cisco_ftd/2.0.3/data_stream/log/fields/base-fields.yml new file mode 100755 index 0000000000..e02b7e2a25 --- /dev/null +++ b/packages/cisco_ftd/2.0.3/data_stream/log/fields/base-fields.yml @@ -0,0 +1,20 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module + value: cisco_ftd +- name: event.dataset + type: constant_keyword + description: Event dataset + value: cisco_ftd.log +- name: "@timestamp" + type: date + description: Event timestamp. diff --git a/packages/cisco_ftd/2.0.3/data_stream/log/fields/ecs.yml b/packages/cisco_ftd/2.0.3/data_stream/log/fields/ecs.yml new file mode 100755 index 0000000000..e981c336d5 --- /dev/null +++ b/packages/cisco_ftd/2.0.3/data_stream/log/fields/ecs.yml @@ -0,0 +1,567 @@ +- description: |- + Date/time when the event originated. + This is the date/time extracted from the event, typically representing when the event was generated by the source. + If the event source has no original timestamp, this value is typically populated by the first time the event was received by the pipeline. + Required field for all events. + name: '@timestamp' + type: date +- description: Short name or login of the user. + multi_fields: + - name: text + type: match_only_text + name: client.user.name + type: keyword +- description: |- + Some event destination addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. + Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. + name: destination.address + type: keyword +- description: Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. + name: destination.as.number + type: long +- description: Organization name. + multi_fields: + - name: text + type: match_only_text + name: destination.as.organization.name + type: keyword +- description: Bytes sent from the destination to the source. + name: destination.bytes + type: long +- description: |- + The domain name of the destination system. + This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. + name: destination.domain + type: keyword +- description: City name. + name: destination.geo.city_name + type: keyword +- description: Name of the continent. + name: destination.geo.continent_name + type: keyword +- description: Country ISO code. + name: destination.geo.country_iso_code + type: keyword +- description: Country name. + name: destination.geo.country_name + type: keyword +- description: Longitude and latitude. + level: core + name: destination.geo.location + type: geo_point +- description: Region ISO code. + name: destination.geo.region_iso_code + type: keyword +- description: Region name. + name: destination.geo.region_name + type: keyword +- description: IP address of the destination (IPv4 or IPv6). + name: destination.ip + type: ip +- description: |- + Translated ip of destination based NAT sessions (e.g. internet to private DMZ) + Typically used with load balancers, firewalls, or routers. + name: destination.nat.ip + type: ip +- description: |- + Port the source session is translated to by NAT Device. + Typically used with load balancers, firewalls, or routers. + name: destination.nat.port + type: long +- description: Packets sent from the destination to the source. + name: destination.packets + type: long +- description: Port of the destination. + name: destination.port + type: long +- description: Short name or login of the user. + multi_fields: + - name: text + type: match_only_text + name: destination.user.name + type: keyword +- description: |- + The name being queried. + If the name field contains non-printable characters (below 32 or above 126), those characters should be represented as escaped base 10 integers (\DDD). Back slashes and quotes should be escaped. Tabs, carriage returns, and line feeds should be converted to \t, \r, and \n respectively. + name: dns.question.name + type: keyword +- description: The type of record being queried. + name: dns.question.type + type: keyword +- description: The DNS response code. + name: dns.response_code + type: keyword +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: Error message. + name: error.message + type: match_only_text +- description: |- + The action captured by the event. + This describes the information in the event. It is more specific than `event.category`. Examples are `group-add`, `process-started`, `file-created`. The value is normally defined by the implementer. + name: event.action + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. + `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. + This field is an array. This will allow proper categorization of some events that fall in multiple categories. + name: event.category + type: keyword +- description: |- + Identification code for this event, if one exists. + Some event sources use event codes to identify messages unambiguously, regardless of message language or wording adjustments over time. An example of this is the Windows Event ID. + name: event.code + type: keyword +- description: |- + event.created contains the date/time when the event was first read by an agent, or by your pipeline. + This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. + In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. + In case the two timestamps are identical, @timestamp should be used. + name: event.created + type: date +- description: |- + event.created contains the date/time when the event was first read by an agent, or by your pipeline. + This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. + In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. + In case the two timestamps are identical, @timestamp should be used. + name: event.created + type: date +- description: |- + Duration of the event in nanoseconds. + If event.start and event.end are known this value should be the difference between the end and start time. + name: event.duration + type: long +- description: event.end contains the date when the event ended or when the activity was last observed. + name: event.end + type: date +- description: |- + Timestamp when an event arrived in the central data store. + This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. + In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`. + name: event.ingested + type: date +- description: |- + This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. + `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. + The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. + name: event.kind + type: keyword +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the lowest level in the ECS category hierarchy. + `event.outcome` simply denotes whether the event represents a success or a failure from the perspective of the entity that produced the event. + Note that when a single transaction is described in multiple events, each event may populate different values of `event.outcome`, according to their perspective. + Also note that in the case of a compound event (a single event that contains multiple logical events), this field should be populated with the value that best captures the overall success or failure from the perspective of the event producer. + Further note that not all events will have an associated outcome. For example, this field is generally not populated for metric events, events with `event.type:info`, or any events for which an outcome does not make logical sense. + name: event.outcome + type: keyword +- description: |- + Source of the event. + Event transports such as Syslog or the Windows Event Log typically mention the source of an event. It can be the name of the software that generated the event (e.g. Sysmon, httpd), or of a subsystem of the operating system (kernel, Microsoft-Windows-Security-Auditing). + name: event.provider + type: keyword +- description: |- + Reason why this event happened, according to the source. + This describes the why of a particular action or outcome captured in the event. Where `event.action` captures the action from the event, `event.reason` describes why that action was taken. For example, a web proxy with an `event.action` which denied the request may also populate `event.reason` with the reason why (e.g. `blocked site`). + name: event.reason + type: keyword +- description: |- + The numeric severity of the event according to your event source. + What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. + The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. + name: event.severity + type: long +- description: event.start contains the date when the event started or when the activity was first observed. + name: event.start + type: date +- description: |- + This field should be populated when the event's timestamp does not include timezone information already (e.g. default Syslog timestamps). It's optional otherwise. + Acceptable timezone formats are: a canonical ID (e.g. "Europe/Amsterdam"), abbreviated (e.g. "EST") or an HH:mm differential (e.g. "-05:00"). + name: event.timezone + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. + `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. + This field is an array. This will allow proper categorization of some events that fall in multiple event types. + name: event.type + type: keyword +- description: SHA256 hash. + name: file.hash.sha256 + type: keyword +- description: Name of the file including the extension, without the directory. + name: file.name + type: keyword +- description: Full path to the file, including the file name. It should include the drive letter, when appropriate. + multi_fields: + - name: text + type: match_only_text + name: file.path + type: keyword +- description: |- + File size in bytes. + Only relevant when `file.type` is "file". + name: file.size + type: long +- description: Referrer for this HTTP request. + name: http.request.referrer + type: keyword +- description: HTTP response status code. + name: http.response.status_code + type: long +- description: |- + Custom key/value pairs. + Can be used to add meta information to events. Should not contain nested objects. All values are stored as keyword. + Example: `docker` and `k8s` labels. + name: labels + type: object +- description: |- + Full path to the log file this event came from, including the file name. It should include the drive letter, when appropriate. + If the event wasn't read from a log file, do not populate this field. + name: log.file.path + type: keyword +- description: |- + Original log level of the log event. + If the source of the event provides a log level or textual severity, this is the one that goes in `log.level`. If your source doesn't specify one, you may put your event transport's severity here (e.g. Syslog severity). + Some examples are `warn`, `err`, `i`, `informational`. + name: log.level + type: keyword +- description: |- + For log events the message field contains the log message, optimized for viewing in a log viewer. + For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. + If multiple messages exist, they can be combined into one message. + name: message + type: match_only_text +- description: |- + When a specific application or service is identified from network connection details (source/dest IPs, ports, certificates, or wire format), this field captures the application's or service's name. + For example, the original event identifies the network connection being from a specific web service in a `https` network connection, like `facebook` or `twitter`. + The field value must be normalized to lowercase for querying. + name: network.application + type: keyword +- description: |- + Total bytes transferred in both directions. + If `source.bytes` and `destination.bytes` are known, `network.bytes` is their sum. + name: network.bytes + type: long +- description: |- + Direction of the network traffic. + Recommended values are: + * ingress + * egress + * inbound + * outbound + * internal + * external + * unknown + + When mapping events from a host-based monitoring context, populate this field from the host's point of view, using the values "ingress" or "egress". + When mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of the network perimeter, using the values "inbound", "outbound", "internal" or "external". + Note that "internal" is not crossing perimeter boundaries, and is meant to describe communication between two hosts within the perimeter. Note also that "external" is meant to describe traffic between two hosts that are external to the perimeter. This could for example be useful for ISPs or VPN service providers. + name: network.direction + type: keyword +- description: IANA Protocol Number (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Standardized list of protocols. This aligns well with NetFlow and sFlow related logs which use the IANA Protocol Number. + name: network.iana_number + type: keyword +- description: Network.inner fields are added in addition to network.vlan fields to describe the innermost VLAN when q-in-q VLAN tagging is present. Allowed fields include vlan.id and vlan.name. Inner vlan fields are typically used when sending traffic with multiple 802.1q encapsulations to a network sensor (e.g. Zeek, Wireshark.) + name: network.inner + type: object +- description: VLAN ID as reported by the observer. + name: network.inner.vlan.id + type: keyword +- description: Optional VLAN name as reported by the observer. + name: network.inner.vlan.name + type: keyword +- description: |- + In the OSI Model this would be the Application Layer protocol. For example, `http`, `dns`, or `ssh`. + The field value must be normalized to lowercase for querying. + name: network.protocol + type: keyword +- description: |- + Same as network.iana_number, but instead using the Keyword name of the transport layer (udp, tcp, ipv6-icmp, etc.) + The field value must be normalized to lowercase for querying. + name: network.transport + type: keyword +- description: |- + In the OSI Model this would be the Network Layer. ipv4, ipv6, ipsec, pim, etc + The field value must be normalized to lowercase for querying. + name: network.type + type: keyword +- description: Interface name as reported by the system. + name: observer.egress.interface.name + type: keyword +- description: Network zone of outbound traffic as reported by the observer to categorize the destination area of egress traffic, e.g. Internal, External, DMZ, HR, Legal, etc. + name: observer.egress.zone + type: keyword +- description: Hostname of the observer. + name: observer.hostname + type: keyword +- description: Interface name as reported by the system. + name: observer.ingress.interface.name + type: keyword +- description: Network zone of incoming traffic as reported by the observer to categorize the source area of ingress traffic. e.g. internal, External, DMZ, HR, Legal, etc. + name: observer.ingress.zone + type: keyword +- description: IP addresses of the observer. + name: observer.ip + type: ip +- description: |- + Custom name of the observer. + This is a name that can be given to an observer. This can be helpful for example if multiple firewalls of the same model are used in an organization. + If no custom name is needed, the field can be left empty. + name: observer.name + type: keyword +- description: The product name of the observer. + name: observer.product + type: keyword +- description: |- + The type of the observer the data is coming from. + There is no predefined list of observer types. Some examples are `forwarder`, `firewall`, `ids`, `ips`, `proxy`, `poller`, `sensor`, `APM server`. + name: observer.type + type: keyword +- description: Vendor name of the observer. + name: observer.vendor + type: keyword +- description: Observer version. + name: observer.version + type: keyword +- description: |- + Process name. + Sometimes called program name or similar. + multi_fields: + - name: text + type: match_only_text + name: process.name + type: keyword +- description: Process id. + name: process.pid + type: long +- description: All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). + name: related.hash + type: keyword +- description: All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases. + name: related.hosts + type: keyword +- description: All of the IPs seen on your event. + name: related.ip + type: ip +- description: All the user names or other user identifiers seen on the event. + name: related.user + type: keyword +- description: |- + The domain name of the server system. + This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. + name: server.domain + type: keyword +- description: |- + Unique identifier of the running service. If the service is comprised of many nodes, the `service.id` should be the same for all nodes. + This id should uniquely identify the service. This makes it possible to correlate logs and metrics for one specific service, no matter which particular node emitted the event. + Note that if you need to see the events from one specific host of the service, you should filter on that `host.name` or `host.id` instead. + name: service.id + type: keyword +- description: |- + Some event source addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. + Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. + name: source.address + type: keyword +- description: Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. + name: source.as.number + type: long +- description: Organization name. + multi_fields: + - name: text + type: match_only_text + name: source.as.organization.name + type: keyword +- description: Bytes sent from the source to the destination. + name: source.bytes + type: long +- description: |- + The domain name of the source system. + This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. + name: source.domain + type: keyword +- description: City name. + name: source.geo.city_name + type: keyword +- description: Name of the continent. + name: source.geo.continent_name + type: keyword +- description: Country ISO code. + name: source.geo.country_iso_code + type: keyword +- description: Country name. + name: source.geo.country_name + type: keyword +- description: Longitude and latitude. + level: core + name: source.geo.location + type: geo_point +- description: Region ISO code. + name: source.geo.region_iso_code + type: keyword +- description: Region name. + name: source.geo.region_name + type: keyword +- description: IP address of the source (IPv4 or IPv6). + name: source.ip + type: ip +- description: |- + Translated ip of source based NAT sessions (e.g. internal client to internet) + Typically connections traversing load balancers, firewalls, or routers. + name: source.nat.ip + type: ip +- description: |- + Translated port of source based NAT sessions. (e.g. internal client to internet) + Typically used with load balancers, firewalls, or routers. + name: source.nat.port + type: long +- description: Packets sent from the source to the destination. + name: source.packets + type: long +- description: Port of the source. + name: source.port + type: long +- description: Short name or login of the user. + multi_fields: + - name: text + type: match_only_text + name: source.user.name + type: keyword +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: |- + Domain of the url, such as "www.elastic.co". + In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. + If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. + name: url.domain + type: keyword +- description: |- + The field contains the file extension from the original request url, excluding the leading dot. + The file extension is only set if it exists, as not every url has a file extension. + The leading period must not be included. For example, the value must be "png", not ".png". + Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). + name: url.extension + type: keyword +- description: |- + Portion of the url after the `#`, such as "top". + The `#` is not part of the fragment. + name: url.fragment + type: keyword +- description: If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. + multi_fields: + - name: text + type: match_only_text + name: url.full + type: wildcard +- description: |- + Unmodified original url as seen in the event source. + Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. + This field is meant to represent the URL as it was observed, complete or not. + multi_fields: + - name: text + type: match_only_text + name: url.original + type: wildcard +- description: Password of the request. + name: url.password + type: keyword +- description: Path of the request, such as "/search". + name: url.path + type: wildcard +- description: Port of the request, such as 443. + name: url.port + type: long +- description: |- + The query field describes the query string of the request, such as "q=elasticsearch". + The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. + name: url.query + type: keyword +- description: |- + The highest registered url domain, stripped of the subdomain. + For example, the registered domain for "foo.example.com" is "example.com". + This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk". + name: url.registered_domain + type: keyword +- description: |- + Scheme of the request, such as "https". + Note: The `:` is not part of the scheme. + name: url.scheme + type: keyword +- description: |- + The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. + For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period. + name: url.subdomain + type: keyword +- description: |- + The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". + This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk". + name: url.top_level_domain + type: keyword +- description: Username of the request. + name: url.username + type: keyword +- description: User email address. + name: user.email + type: keyword +- description: Unique identifier of the user. + name: user.id + type: keyword +- description: Short name or login of the user. + multi_fields: + - name: text + type: match_only_text + name: user.name + type: keyword +- description: Unparsed user_agent string. + multi_fields: + - name: text + type: match_only_text + name: user_agent.original + type: keyword +- description: |- + The domain name of the server system. + This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. + name: server.domain + type: keyword +- description: |- + Some event server addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. + Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. + name: server.address + type: keyword +- description: Port of the server. + name: server.port + type: long +- description: IP address of the server (IPv4 or IPv6). + name: server.ip + type: ip +- description: Short name or login of the user. + multi_fields: + - name: text + type: match_only_text + name: server.user.name + type: keyword +- description: |- + The domain name of the client system. + This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. + name: client.domain + type: keyword +- description: |- + Some event client addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. + Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. + name: client.address + type: keyword +- description: Port of the client. + name: client.port + type: long +- description: IP address of the client (IPv4 or IPv6). + name: client.ip + type: ip diff --git a/packages/cisco_ftd/2.0.3/data_stream/log/fields/fields.yml b/packages/cisco_ftd/2.0.3/data_stream/log/fields/fields.yml new file mode 100755 index 0000000000..cd3a6b2e3a --- /dev/null +++ b/packages/cisco_ftd/2.0.3/data_stream/log/fields/fields.yml @@ -0,0 +1,155 @@ +- name: cisco.ftd + type: group + fields: + - name: message_id + type: keyword + description: | + The Cisco FTD message identifier. + - name: suffix + type: keyword + description: | + Optional suffix after %FTD identifier. + - name: source_interface + type: keyword + description: | + Source interface for the flow or event. + - name: destination_interface + type: keyword + description: | + Destination interface for the flow or event. + - name: rule_name + type: keyword + description: | + Name of the Access Control List rule that matched this event. + - name: source_username + type: keyword + description: | + Name of the user that is the source for this event. + - name: destination_username + type: keyword + description: | + Name of the user that is the destination for this event. + - name: mapped_source_ip + type: ip + description: | + The translated source IP address. + - name: mapped_source_port + type: long + description: | + The translated source port. + - name: mapped_destination_ip + type: ip + description: | + The translated destination IP address. + - name: mapped_destination_port + type: long + description: | + The translated destination port. + - name: threat_level + type: keyword + description: | + Threat level for malware / botnet traffic. One of very-low, low, moderate, high or very-high. + - name: threat_category + type: keyword + description: | + Category for the malware / botnet traffic. For example: virus, botnet, trojan, etc. + - name: connection_id + type: keyword + description: | + Unique identifier for a flow. + - name: icmp_type + type: short + description: | + ICMP type. + - name: icmp_code + type: short + description: | + ICMP code. + - name: connection_type + type: keyword + description: | + The VPN connection type + - name: dap_records + type: keyword + description: | + The assigned DAP records + - name: mapped_destination_host + type: keyword + - name: username + type: keyword + - name: mapped_source_host + type: keyword + - name: command_line_arguments + default_field: false + type: keyword + description: | + The command line arguments logged by the local audit log + - name: assigned_ip + default_field: false + type: ip + description: | + The IP address assigned to a VPN client successfully connecting + - name: privilege.old + default_field: false + type: keyword + description: | + When a users privilege is changed this is the old value + - name: privilege.new + default_field: false + type: keyword + description: | + When a users privilege is changed this is the new value + - name: burst.object + default_field: false + type: keyword + description: | + The related object for burst warnings + - name: burst.id + default_field: false + type: keyword + description: | + The related rate ID for burst warnings + - name: burst.current_rate + default_field: false + type: keyword + description: | + The current burst rate seen + - name: burst.configured_rate + default_field: false + type: keyword + description: | + The current configured burst rate + - name: burst.avg_rate + default_field: false + type: keyword + description: | + The current average burst rate seen + - name: burst.configured_avg_rate + default_field: false + type: keyword + description: | + The current configured average burst rate allowed + - name: burst.cumulative_count + default_field: false + type: keyword + description: | + The total count of burst rate hits since the object was created or cleared + - name: security + type: flattened + description: Cisco FTD security event fields. + - name: webvpn.group_name + type: keyword + default_field: false + description: | + The WebVPN group name the user belongs to + - name: termination_user + default_field: false + type: keyword + description: |- + AAA name of user requesting termination +- name: syslog.facility.code + type: long + description: Syslog numeric facility of the event. +- name: syslog.priority + type: long + description: Syslog priority of the event. diff --git a/packages/cisco_ftd/2.0.3/data_stream/log/manifest.yml b/packages/cisco_ftd/2.0.3/data_stream/log/manifest.yml new file mode 100755 index 0000000000..4c7fab8f5d --- /dev/null +++ b/packages/cisco_ftd/2.0.3/data_stream/log/manifest.yml @@ -0,0 +1,87 @@ +title: Cisco FTD logs +type: logs +streams: + - input: udp + title: Cisco FTD logs + description: Collect Cisco FTD logs + template_path: udp.yml.hbs + vars: + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - cisco-ftd + - forwarded + - name: udp_host + type: text + title: UDP host to listen on + multi: false + required: true + show_user: true + default: localhost + - name: udp_port + type: integer + title: UDP Port to listen on + multi: false + required: true + show_user: true + default: 9003 + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + - input: logfile + enabled: false + title: Cisco FTD logs + description: Collect Cisco FTD logs from file + vars: + - name: paths + type: text + title: Paths + multi: true + required: true + show_user: true + default: + - /var/log/cisco-ftd.log + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - cisco-ftd + - forwarded + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + diff --git a/packages/cisco_ftd/2.0.3/data_stream/log/sample_event.json b/packages/cisco_ftd/2.0.3/data_stream/log/sample_event.json new file mode 100755 index 0000000000..f54ade25af --- /dev/null +++ b/packages/cisco_ftd/2.0.3/data_stream/log/sample_event.json @@ -0,0 +1,155 @@ +{ + "@timestamp": "2019-08-16T09:39:03.000Z", + "agent": { + "ephemeral_id": "fb59da35-f6e4-4052-ae20-539243c9049e", + "id": "7cefd7f8-53e3-4884-ab65-da99d71b166f", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0-beta1" + }, + "cisco": { + "ftd": { + "rule_name": "malware-and-file-policy", + "security": { + "application_protocol": "HTTP", + "client": "cURL", + "dst_ip": "81.2.69.144", + "dst_port": "80", + "file_action": "Malware Cloud Lookup", + "file_direction": "Download", + "file_name": "eicar_com.zip", + "file_policy": "malware-and-file-policy", + "file_sandbox_status": "File Size Is Too Small", + "file_sha256": "2546dcffc5ad854d4ddc64fbf056871cd5a00f2471cb7a5bfd4ac23b6e9eedad", + "file_size": "184", + "file_storage_status": "Not Stored (Disposition Was Pending)", + "file_type": "ZIP", + "first_packet_second": "2019-08-16T09:39:02Z", + "protocol": "tcp", + "sha_disposition": "Unavailable", + "spero_disposition": "Spero detection not performed on file", + "src_ip": "10.0.1.20", + "src_port": "46004", + "threat_name": "Win.Ransomware.Eicar::95.sbx.tg", + "uri": "http://www.eicar.org/download/eicar_com.zip", + "user": "No Authentication Required" + }, + "threat_category": "Win.Ransomware.Eicar::95.sbx.tg" + } + }, + "data_stream": { + "dataset": "cisco_ftd.log", + "namespace": "ep", + "type": "logs" + }, + "destination": { + "address": "81.2.69.144", + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.144", + "port": 80 + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "7cefd7f8-53e3-4884-ab65-da99d71b166f", + "snapshot": false, + "version": "8.0.0-beta1" + }, + "event": { + "action": "malware-detected", + "agent_id_status": "verified", + "category": [ + "malware" + ], + "code": "430005", + "dataset": "cisco_ftd.log", + "ingested": "2021-12-29T10:08:02Z", + "kind": "alert", + "original": "2019-08-16T09:39:03Z firepower %FTD-1-430005: SrcIP: 10.0.1.20, DstIP: 81.2.69.144, SrcPort: 46004, DstPort: 80, Protocol: tcp, FileDirection: Download, FileAction: Malware Cloud Lookup, FileSHA256: 2546dcffc5ad854d4ddc64fbf056871cd5a00f2471cb7a5bfd4ac23b6e9eedad, SHA_Disposition: Unavailable, SperoDisposition: Spero detection not performed on file, ThreatName: Win.Ransomware.Eicar::95.sbx.tg, FileName: eicar_com.zip, FileType: ZIP, FileSize: 184, ApplicationProtocol: HTTP, Client: cURL, User: No Authentication Required, FirstPacketSecond: 2019-08-16T09:39:02Z, FilePolicy: malware-and-file-policy, FileStorageStatus: Not Stored (Disposition Was Pending), FileSandboxStatus: File Size Is Too Small, URI: http://www.eicar.org/download/eicar_com.zip\n", + "severity": 1, + "start": "2019-08-16T09:39:02Z", + "timezone": "+00:00", + "type": [ + "info" + ] + }, + "file": { + "hash": { + "sha256": "2546dcffc5ad854d4ddc64fbf056871cd5a00f2471cb7a5bfd4ac23b6e9eedad" + }, + "name": "eicar_com.zip", + "size": 184 + }, + "host": { + "hostname": "firepower" + }, + "input": { + "type": "udp" + }, + "log": { + "level": "alert", + "source": { + "address": "192.168.128.6:54121" + } + }, + "network": { + "application": "curl", + "iana_number": "6", + "protocol": "http", + "transport": "tcp" + }, + "observer": { + "hostname": "firepower", + "product": "asa", + "type": "firewall", + "vendor": "Cisco" + }, + "related": { + "hash": [ + "2546dcffc5ad854d4ddc64fbf056871cd5a00f2471cb7a5bfd4ac23b6e9eedad" + ], + "hosts": [ + "firepower" + ], + "ip": [ + "10.0.1.20", + "81.2.69.144" + ], + "user": [ + "No Authentication Required" + ] + }, + "source": { + "address": "10.0.1.20", + "ip": "10.0.1.20", + "port": 46004 + }, + "tags": [ + "preserve_original_event", + "cisco-ftd", + "forwarded" + ], + "url": { + "domain": "www.eicar.org", + "extension": "zip", + "original": "http://www.eicar.org/download/eicar_com.zip", + "path": "/download/eicar_com.zip", + "scheme": "http" + }, + "user": { + "id": "No Authentication Required", + "name": "No Authentication Required" + } +} \ No newline at end of file diff --git a/packages/cisco_ftd/2.0.3/docs/README.md b/packages/cisco_ftd/2.0.3/docs/README.md new file mode 100755 index 0000000000..8498022b55 --- /dev/null +++ b/packages/cisco_ftd/2.0.3/docs/README.md @@ -0,0 +1,390 @@ +# Cisco FTD Integration + +This integration is for Cisco Firepower Threat Defence (FTD) device's logs. It includes the following +datasets for receiving logs over syslog or read from a file: + +- `log` dataset: supports Cisco Firepower Threat Defense (FTD) logs. + +## Logs + +### FTD + +The `log` dataset collects the Cisco Firepower Threat Defense (FTD) logs. + +An example event for `log` looks as following: + +```json +{ + "@timestamp": "2019-08-16T09:39:03.000Z", + "agent": { + "ephemeral_id": "fb59da35-f6e4-4052-ae20-539243c9049e", + "id": "7cefd7f8-53e3-4884-ab65-da99d71b166f", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0-beta1" + }, + "cisco": { + "ftd": { + "rule_name": "malware-and-file-policy", + "security": { + "application_protocol": "HTTP", + "client": "cURL", + "dst_ip": "81.2.69.144", + "dst_port": "80", + "file_action": "Malware Cloud Lookup", + "file_direction": "Download", + "file_name": "eicar_com.zip", + "file_policy": "malware-and-file-policy", + "file_sandbox_status": "File Size Is Too Small", + "file_sha256": "2546dcffc5ad854d4ddc64fbf056871cd5a00f2471cb7a5bfd4ac23b6e9eedad", + "file_size": "184", + "file_storage_status": "Not Stored (Disposition Was Pending)", + "file_type": "ZIP", + "first_packet_second": "2019-08-16T09:39:02Z", + "protocol": "tcp", + "sha_disposition": "Unavailable", + "spero_disposition": "Spero detection not performed on file", + "src_ip": "10.0.1.20", + "src_port": "46004", + "threat_name": "Win.Ransomware.Eicar::95.sbx.tg", + "uri": "http://www.eicar.org/download/eicar_com.zip", + "user": "No Authentication Required" + }, + "threat_category": "Win.Ransomware.Eicar::95.sbx.tg" + } + }, + "data_stream": { + "dataset": "cisco_ftd.log", + "namespace": "ep", + "type": "logs" + }, + "destination": { + "address": "81.2.69.144", + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.144", + "port": 80 + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "7cefd7f8-53e3-4884-ab65-da99d71b166f", + "snapshot": false, + "version": "8.0.0-beta1" + }, + "event": { + "action": "malware-detected", + "agent_id_status": "verified", + "category": [ + "malware" + ], + "code": "430005", + "dataset": "cisco_ftd.log", + "ingested": "2021-12-29T10:08:02Z", + "kind": "alert", + "original": "2019-08-16T09:39:03Z firepower %FTD-1-430005: SrcIP: 10.0.1.20, DstIP: 81.2.69.144, SrcPort: 46004, DstPort: 80, Protocol: tcp, FileDirection: Download, FileAction: Malware Cloud Lookup, FileSHA256: 2546dcffc5ad854d4ddc64fbf056871cd5a00f2471cb7a5bfd4ac23b6e9eedad, SHA_Disposition: Unavailable, SperoDisposition: Spero detection not performed on file, ThreatName: Win.Ransomware.Eicar::95.sbx.tg, FileName: eicar_com.zip, FileType: ZIP, FileSize: 184, ApplicationProtocol: HTTP, Client: cURL, User: No Authentication Required, FirstPacketSecond: 2019-08-16T09:39:02Z, FilePolicy: malware-and-file-policy, FileStorageStatus: Not Stored (Disposition Was Pending), FileSandboxStatus: File Size Is Too Small, URI: http://www.eicar.org/download/eicar_com.zip\n", + "severity": 1, + "start": "2019-08-16T09:39:02Z", + "timezone": "+00:00", + "type": [ + "info" + ] + }, + "file": { + "hash": { + "sha256": "2546dcffc5ad854d4ddc64fbf056871cd5a00f2471cb7a5bfd4ac23b6e9eedad" + }, + "name": "eicar_com.zip", + "size": 184 + }, + "host": { + "hostname": "firepower" + }, + "input": { + "type": "udp" + }, + "log": { + "level": "alert", + "source": { + "address": "192.168.128.6:54121" + } + }, + "network": { + "application": "curl", + "iana_number": "6", + "protocol": "http", + "transport": "tcp" + }, + "observer": { + "hostname": "firepower", + "product": "asa", + "type": "firewall", + "vendor": "Cisco" + }, + "related": { + "hash": [ + "2546dcffc5ad854d4ddc64fbf056871cd5a00f2471cb7a5bfd4ac23b6e9eedad" + ], + "hosts": [ + "firepower" + ], + "ip": [ + "10.0.1.20", + "81.2.69.144" + ], + "user": [ + "No Authentication Required" + ] + }, + "source": { + "address": "10.0.1.20", + "ip": "10.0.1.20", + "port": 46004 + }, + "tags": [ + "preserve_original_event", + "cisco-ftd", + "forwarded" + ], + "url": { + "domain": "www.eicar.org", + "extension": "zip", + "original": "http://www.eicar.org/download/eicar_com.zip", + "path": "/download/eicar_com.zip", + "scheme": "http" + }, + "user": { + "id": "No Authentication Required", + "name": "No Authentication Required" + } +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Date/time when the event originated. This is the date/time extracted from the event, typically representing when the event was generated by the source. If the event source has no original timestamp, this value is typically populated by the first time the event was received by the pipeline. Required field for all events. | date | +| cisco.ftd.assigned_ip | The IP address assigned to a VPN client successfully connecting | ip | +| cisco.ftd.burst.avg_rate | The current average burst rate seen | keyword | +| cisco.ftd.burst.configured_avg_rate | The current configured average burst rate allowed | keyword | +| cisco.ftd.burst.configured_rate | The current configured burst rate | keyword | +| cisco.ftd.burst.cumulative_count | The total count of burst rate hits since the object was created or cleared | keyword | +| cisco.ftd.burst.current_rate | The current burst rate seen | keyword | +| cisco.ftd.burst.id | The related rate ID for burst warnings | keyword | +| cisco.ftd.burst.object | The related object for burst warnings | keyword | +| cisco.ftd.command_line_arguments | The command line arguments logged by the local audit log | keyword | +| cisco.ftd.connection_id | Unique identifier for a flow. | keyword | +| cisco.ftd.connection_type | The VPN connection type | keyword | +| cisco.ftd.dap_records | The assigned DAP records | keyword | +| cisco.ftd.destination_interface | Destination interface for the flow or event. | keyword | +| cisco.ftd.destination_username | Name of the user that is the destination for this event. | keyword | +| cisco.ftd.icmp_code | ICMP code. | short | +| cisco.ftd.icmp_type | ICMP type. | short | +| cisco.ftd.mapped_destination_host | | keyword | +| cisco.ftd.mapped_destination_ip | The translated destination IP address. | ip | +| cisco.ftd.mapped_destination_port | The translated destination port. | long | +| cisco.ftd.mapped_source_host | | keyword | +| cisco.ftd.mapped_source_ip | The translated source IP address. | ip | +| cisco.ftd.mapped_source_port | The translated source port. | long | +| cisco.ftd.message_id | The Cisco FTD message identifier. | keyword | +| cisco.ftd.privilege.new | When a users privilege is changed this is the new value | keyword | +| cisco.ftd.privilege.old | When a users privilege is changed this is the old value | keyword | +| cisco.ftd.rule_name | Name of the Access Control List rule that matched this event. | keyword | +| cisco.ftd.security | Cisco FTD security event fields. | flattened | +| cisco.ftd.source_interface | Source interface for the flow or event. | keyword | +| cisco.ftd.source_username | Name of the user that is the source for this event. | keyword | +| cisco.ftd.suffix | Optional suffix after %FTD identifier. | keyword | +| cisco.ftd.termination_user | AAA name of user requesting termination | keyword | +| cisco.ftd.threat_category | Category for the malware / botnet traffic. For example: virus, botnet, trojan, etc. | keyword | +| cisco.ftd.threat_level | Threat level for malware / botnet traffic. One of very-low, low, moderate, high or very-high. | keyword | +| cisco.ftd.username | | keyword | +| cisco.ftd.webvpn.group_name | The WebVPN group name the user belongs to | keyword | +| client.address | Some event client addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. | keyword | +| client.domain | The domain name of the client system. This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. | keyword | +| client.ip | IP address of the client (IPv4 or IPv6). | ip | +| client.port | Port of the client. | long | +| client.user.name | Short name or login of the user. | keyword | +| client.user.name.text | Multi-field of `client.user.name`. | match_only_text | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| destination.address | Some event destination addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. | keyword | +| destination.as.number | Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. | long | +| destination.as.organization.name | Organization name. | keyword | +| destination.as.organization.name.text | Multi-field of `destination.as.organization.name`. | match_only_text | +| destination.bytes | Bytes sent from the destination to the source. | long | +| destination.domain | The domain name of the destination system. This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. | keyword | +| destination.geo.city_name | City name. | keyword | +| destination.geo.continent_name | Name of the continent. | keyword | +| destination.geo.country_iso_code | Country ISO code. | keyword | +| destination.geo.country_name | Country name. | keyword | +| destination.geo.location | Longitude and latitude. | geo_point | +| destination.geo.region_iso_code | Region ISO code. | keyword | +| destination.geo.region_name | Region name. | keyword | +| destination.ip | IP address of the destination (IPv4 or IPv6). | ip | +| destination.nat.ip | Translated ip of destination based NAT sessions (e.g. internet to private DMZ) Typically used with load balancers, firewalls, or routers. | ip | +| destination.nat.port | Port the source session is translated to by NAT Device. Typically used with load balancers, firewalls, or routers. | long | +| destination.packets | Packets sent from the destination to the source. | long | +| destination.port | Port of the destination. | long | +| destination.user.name | Short name or login of the user. | keyword | +| destination.user.name.text | Multi-field of `destination.user.name`. | match_only_text | +| dns.question.name | The name being queried. If the name field contains non-printable characters (below 32 or above 126), those characters should be represented as escaped base 10 integers (\DDD). Back slashes and quotes should be escaped. Tabs, carriage returns, and line feeds should be converted to \t, \r, and \n respectively. | keyword | +| dns.question.type | The type of record being queried. | keyword | +| dns.response_code | The DNS response code. | keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| error.message | Error message. | match_only_text | +| event.action | The action captured by the event. This describes the information in the event. It is more specific than `event.category`. Examples are `group-add`, `process-started`, `file-created`. The value is normally defined by the implementer. | keyword | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.code | Identification code for this event, if one exists. Some event sources use event codes to identify messages unambiguously, regardless of message language or wording adjustments over time. An example of this is the Windows Event ID. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset | constant_keyword | +| event.duration | Duration of the event in nanoseconds. If event.start and event.end are known this value should be the difference between the end and start time. | long | +| event.end | event.end contains the date when the event ended or when the activity was last observed. | date | +| event.ingested | Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` \< `event.created` \< `event.ingested`. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.outcome | This is one of four ECS Categorization Fields, and indicates the lowest level in the ECS category hierarchy. `event.outcome` simply denotes whether the event represents a success or a failure from the perspective of the entity that produced the event. Note that when a single transaction is described in multiple events, each event may populate different values of `event.outcome`, according to their perspective. Also note that in the case of a compound event (a single event that contains multiple logical events), this field should be populated with the value that best captures the overall success or failure from the perspective of the event producer. Further note that not all events will have an associated outcome. For example, this field is generally not populated for metric events, events with `event.type:info`, or any events for which an outcome does not make logical sense. | keyword | +| event.provider | Source of the event. Event transports such as Syslog or the Windows Event Log typically mention the source of an event. It can be the name of the software that generated the event (e.g. Sysmon, httpd), or of a subsystem of the operating system (kernel, Microsoft-Windows-Security-Auditing). | keyword | +| event.reason | Reason why this event happened, according to the source. This describes the why of a particular action or outcome captured in the event. Where `event.action` captures the action from the event, `event.reason` describes why that action was taken. For example, a web proxy with an `event.action` which denied the request may also populate `event.reason` with the reason why (e.g. `blocked site`). | keyword | +| event.severity | The numeric severity of the event according to your event source. What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. | long | +| event.start | event.start contains the date when the event started or when the activity was first observed. | date | +| event.timezone | This field should be populated when the event's timestamp does not include timezone information already (e.g. default Syslog timestamps). It's optional otherwise. Acceptable timezone formats are: a canonical ID (e.g. "Europe/Amsterdam"), abbreviated (e.g. "EST") or an HH:mm differential (e.g. "-05:00"). | keyword | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| file.hash.sha256 | SHA256 hash. | keyword | +| file.name | Name of the file including the extension, without the directory. | keyword | +| file.path | Full path to the file, including the file name. It should include the drive letter, when appropriate. | keyword | +| file.path.text | Multi-field of `file.path`. | match_only_text | +| file.size | File size in bytes. Only relevant when `file.type` is "file". | long | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| http.request.referrer | Referrer for this HTTP request. | keyword | +| http.response.status_code | HTTP response status code. | long | +| input.type | Input type. | keyword | +| labels | Custom key/value pairs. Can be used to add meta information to events. Should not contain nested objects. All values are stored as keyword. Example: `docker` and `k8s` labels. | object | +| log.file.path | Full path to the log file this event came from, including the file name. It should include the drive letter, when appropriate. If the event wasn't read from a log file, do not populate this field. | keyword | +| log.level | Original log level of the log event. If the source of the event provides a log level or textual severity, this is the one that goes in `log.level`. If your source doesn't specify one, you may put your event transport's severity here (e.g. Syslog severity). Some examples are `warn`, `err`, `i`, `informational`. | keyword | +| log.offset | Offset of the entry in the log file. | long | +| log.source.address | Source address from which the log event was read / sent from. | keyword | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| network.application | When a specific application or service is identified from network connection details (source/dest IPs, ports, certificates, or wire format), this field captures the application's or service's name. For example, the original event identifies the network connection being from a specific web service in a `https` network connection, like `facebook` or `twitter`. The field value must be normalized to lowercase for querying. | keyword | +| network.bytes | Total bytes transferred in both directions. If `source.bytes` and `destination.bytes` are known, `network.bytes` is their sum. | long | +| network.direction | Direction of the network traffic. Recommended values are: \* ingress \* egress \* inbound \* outbound \* internal \* external \* unknown When mapping events from a host-based monitoring context, populate this field from the host's point of view, using the values "ingress" or "egress". When mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of the network perimeter, using the values "inbound", "outbound", "internal" or "external". Note that "internal" is not crossing perimeter boundaries, and is meant to describe communication between two hosts within the perimeter. Note also that "external" is meant to describe traffic between two hosts that are external to the perimeter. This could for example be useful for ISPs or VPN service providers. | keyword | +| network.iana_number | IANA Protocol Number (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Standardized list of protocols. This aligns well with NetFlow and sFlow related logs which use the IANA Protocol Number. | keyword | +| network.inner | Network.inner fields are added in addition to network.vlan fields to describe the innermost VLAN when q-in-q VLAN tagging is present. Allowed fields include vlan.id and vlan.name. Inner vlan fields are typically used when sending traffic with multiple 802.1q encapsulations to a network sensor (e.g. Zeek, Wireshark.) | object | +| network.inner.vlan.id | VLAN ID as reported by the observer. | keyword | +| network.inner.vlan.name | Optional VLAN name as reported by the observer. | keyword | +| network.protocol | In the OSI Model this would be the Application Layer protocol. For example, `http`, `dns`, or `ssh`. The field value must be normalized to lowercase for querying. | keyword | +| network.transport | Same as network.iana_number, but instead using the Keyword name of the transport layer (udp, tcp, ipv6-icmp, etc.) The field value must be normalized to lowercase for querying. | keyword | +| network.type | In the OSI Model this would be the Network Layer. ipv4, ipv6, ipsec, pim, etc The field value must be normalized to lowercase for querying. | keyword | +| observer.egress.interface.name | Interface name as reported by the system. | keyword | +| observer.egress.zone | Network zone of outbound traffic as reported by the observer to categorize the destination area of egress traffic, e.g. Internal, External, DMZ, HR, Legal, etc. | keyword | +| observer.hostname | Hostname of the observer. | keyword | +| observer.ingress.interface.name | Interface name as reported by the system. | keyword | +| observer.ingress.zone | Network zone of incoming traffic as reported by the observer to categorize the source area of ingress traffic. e.g. internal, External, DMZ, HR, Legal, etc. | keyword | +| observer.ip | IP addresses of the observer. | ip | +| observer.name | Custom name of the observer. This is a name that can be given to an observer. This can be helpful for example if multiple firewalls of the same model are used in an organization. If no custom name is needed, the field can be left empty. | keyword | +| observer.product | The product name of the observer. | keyword | +| observer.type | The type of the observer the data is coming from. There is no predefined list of observer types. Some examples are `forwarder`, `firewall`, `ids`, `ips`, `proxy`, `poller`, `sensor`, `APM server`. | keyword | +| observer.vendor | Vendor name of the observer. | keyword | +| observer.version | Observer version. | keyword | +| process.name | Process name. Sometimes called program name or similar. | keyword | +| process.name.text | Multi-field of `process.name`. | match_only_text | +| process.pid | Process id. | long | +| related.hash | All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). | keyword | +| related.hosts | All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases. | keyword | +| related.ip | All of the IPs seen on your event. | ip | +| related.user | All the user names or other user identifiers seen on the event. | keyword | +| server.address | Some event server addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. | keyword | +| server.domain | The domain name of the server system. This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. | keyword | +| server.ip | IP address of the server (IPv4 or IPv6). | ip | +| server.port | Port of the server. | long | +| server.user.name | Short name or login of the user. | keyword | +| server.user.name.text | Multi-field of `server.user.name`. | match_only_text | +| service.id | Unique identifier of the running service. If the service is comprised of many nodes, the `service.id` should be the same for all nodes. This id should uniquely identify the service. This makes it possible to correlate logs and metrics for one specific service, no matter which particular node emitted the event. Note that if you need to see the events from one specific host of the service, you should filter on that `host.name` or `host.id` instead. | keyword | +| source.address | Some event source addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. | keyword | +| source.as.number | Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. | long | +| source.as.organization.name | Organization name. | keyword | +| source.as.organization.name.text | Multi-field of `source.as.organization.name`. | match_only_text | +| source.bytes | Bytes sent from the source to the destination. | long | +| source.domain | The domain name of the source system. This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. | keyword | +| source.geo.city_name | City name. | keyword | +| source.geo.continent_name | Name of the continent. | keyword | +| source.geo.country_iso_code | Country ISO code. | keyword | +| source.geo.country_name | Country name. | keyword | +| source.geo.location | Longitude and latitude. | geo_point | +| source.geo.region_iso_code | Region ISO code. | keyword | +| source.geo.region_name | Region name. | keyword | +| source.ip | IP address of the source (IPv4 or IPv6). | ip | +| source.nat.ip | Translated ip of source based NAT sessions (e.g. internal client to internet) Typically connections traversing load balancers, firewalls, or routers. | ip | +| source.nat.port | Translated port of source based NAT sessions. (e.g. internal client to internet) Typically used with load balancers, firewalls, or routers. | long | +| source.packets | Packets sent from the source to the destination. | long | +| source.port | Port of the source. | long | +| source.user.name | Short name or login of the user. | keyword | +| source.user.name.text | Multi-field of `source.user.name`. | match_only_text | +| syslog.facility.code | Syslog numeric facility of the event. | long | +| syslog.priority | Syslog priority of the event. | long | +| tags | List of keywords used to tag each event. | keyword | +| url.domain | Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. | keyword | +| url.extension | The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). | keyword | +| url.fragment | Portion of the url after the `#`, such as "top". The `#` is not part of the fragment. | keyword | +| url.full | If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. | wildcard | +| url.full.text | Multi-field of `url.full`. | match_only_text | +| url.original | Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not. | wildcard | +| url.original.text | Multi-field of `url.original`. | match_only_text | +| url.password | Password of the request. | keyword | +| url.path | Path of the request, such as "/search". | wildcard | +| url.port | Port of the request, such as 443. | long | +| url.query | The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. | keyword | +| url.registered_domain | The highest registered url domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk". | keyword | +| url.scheme | Scheme of the request, such as "https". Note: The `:` is not part of the scheme. | keyword | +| url.subdomain | The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period. | keyword | +| url.top_level_domain | The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk". | keyword | +| url.username | Username of the request. | keyword | +| user.email | User email address. | keyword | +| user.id | Unique identifier of the user. | keyword | +| user.name | Short name or login of the user. | keyword | +| user.name.text | Multi-field of `user.name`. | match_only_text | +| user_agent.original | Unparsed user_agent string. | keyword | +| user_agent.original.text | Multi-field of `user_agent.original`. | match_only_text | + diff --git a/packages/cisco_ftd/2.0.3/img/cisco.svg b/packages/cisco_ftd/2.0.3/img/cisco.svg new file mode 100755 index 0000000000..20ebebf197 --- /dev/null +++ b/packages/cisco_ftd/2.0.3/img/cisco.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/cisco_ftd/2.0.3/manifest.yml b/packages/cisco_ftd/2.0.3/manifest.yml new file mode 100755 index 0000000000..a8de9f596b --- /dev/null +++ b/packages/cisco_ftd/2.0.3/manifest.yml @@ -0,0 +1,31 @@ +format_version: 1.0.0 +name: cisco_ftd +title: Cisco FTD +version: 2.0.3 +license: basic +description: Collect logs from Cisco FTD with Elastic Agent. +type: integration +categories: + - network + - security +release: ga +conditions: + kibana.version: "^7.16.0 || ^8.0.0" +icons: + - src: /img/cisco.svg + title: cisco + size: 216x216 + type: image/svg+xml +policy_templates: + - name: cisco_ftd + title: Cisco FTD logs + description: Collect logs from Cisco FTD instances + inputs: + - type: udp + title: Collect logs from Cisco FTD via UDP + description: Collecting logs from Cisco FTD via UDP + - type: logfile + title: Collect logs from Cisco FTD via file + description: Collecting logs from Cisco FTD via file +owner: + github: elastic/security-external-integrations diff --git a/packages/ti_abusech/1.2.3/changelog.yml b/packages/ti_abusech/1.2.3/changelog.yml new file mode 100755 index 0000000000..92b8615399 --- /dev/null +++ b/packages/ti_abusech/1.2.3/changelog.yml @@ -0,0 +1,76 @@ +# newer versions go on top +- version: "1.2.3" + changes: + - description: Add mapping for event.created + type: enhancement + link: https://github.com/elastic/integrations/pull/3042 +- version: "1.2.2" + changes: + - description: Add documentation for multi-fields + type: enhancement + link: https://github.com/elastic/integrations/pull/2916 +- version: "1.2.1" + changes: + - description: Fix field mapping conflicts in `threat.indicator.file.x509.not_before/not_after` + type: bugfix + link: https://github.com/elastic/integrations/pull/2893 +- version: "1.2.0" + changes: + - description: Update to ECS 8.0 + type: enhancement + link: https://github.com/elastic/integrations/pull/2445 +- version: "1.1.5" + changes: + - description: Removes extra tag from dashboards + type: bugfix + link: https://github.com/elastic/integrations/pull/2544 +- version: "1.1.4" + changes: + - description: Regenerate test files using the new GeoIP database + type: bugfix + link: https://github.com/elastic/integrations/pull/2339 +- version: "1.1.3" + changes: + - description: Change test public IPs to the supported subset + type: bugfix + link: https://github.com/elastic/integrations/pull/2327 +- version: "1.1.2" + changes: + - description: Fixing typo in base-fields.yml + type: enhancement + link: https://github.com/elastic/integrations/pull/2331 +- version: "1.1.1" + changes: + - description: Update ECS fields for threat.feed.name + type: enhancement + link: https://github.com/elastic/integrations/pull/2293 +- version: "1.1.0" + changes: + - description: Adding dashboards and adding minor tweaks to pipeline + type: enhancement + link: https://github.com/elastic/integrations/pull/2072 +- version: "1.0.4" + changes: + - description: Bump minimum version in manifest + type: enhancement + link: https://github.com/elastic/integrations/pull/2072 +- version: "1.0.3" + changes: + - description: Bump minimum version + type: enhancement + link: https://github.com/elastic/integrations/pull/2063 +- version: "1.0.2" + changes: + - description: Update title and description. + type: enhancement + link: https://github.com/elastic/integrations/pull/1997 +- version: "1.0.1" + changes: + - description: Fix invisible package icon + type: enhancement + link: https://github.com/elastic/integrations/pull/1939 +- version: "1.0.0" + changes: + - description: Initial Release + type: enhancement + link: https://github.com/elastic/integrations/pull/1866 diff --git a/packages/ti_abusech/1.2.3/data_stream/malware/agent/stream/httpjson.yml.hbs b/packages/ti_abusech/1.2.3/data_stream/malware/agent/stream/httpjson.yml.hbs new file mode 100755 index 0000000000..457acc00d6 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malware/agent/stream/httpjson.yml.hbs @@ -0,0 +1,38 @@ +config_version: "2" +interval: {{interval}} +request.method: "GET" + +{{#if url}} +request.url: {{url}} +{{/if}} +{{#if proxy_url }} +request.proxy_url: {{proxy_url}} +{{/if}} +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} +{{#if http_client_timeout}} +request.timeout: {{http_client_timeout}} +{{/if}} +request.transforms: +- set: + target: header.Content-Type + value: application/json + +response.split: + target: body.payloads + +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/ti_abusech/1.2.3/data_stream/malware/elasticsearch/ingest_pipeline/default.yml b/packages/ti_abusech/1.2.3/data_stream/malware/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..8dcc275ab0 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malware/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,156 @@ +--- +description: Pipeline for parsing Abuse.ch URL Threat Intel +processors: + #################### + # Event ECS fields # + #################### + - set: + field: ecs.version + value: "8.0.0" + - set: + field: event.kind + value: enrichment + - set: + field: event.category + value: threat + - set: + field: event.type + value: indicator + + ###################### + # General ECS fields # + ###################### + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: abusech.malware + - fingerprint: + fields: + - abusech.malware.md5_hash + - abusech.malware.sha256_hash + target_field: "_id" + + ##################### + # Threat ECS Fields # + ##################### + - date: + field: abusech.malware.firstseen + target_field: threat.indicator.first_seen + formats: + - "yyyy-MM-dd HH:mm:ss z" + - "yyyy-MM-dd HH:mm:ss Z" + - "yyyy-MM-dd HH:mm:ss" + if: "ctx.abusech?.malware?.firstseen != null" + - set: + field: threat.indicator.type + value: file + - rename: + field: abusech.malware.file_size + target_field: threat.indicator.file.size + ignore_missing: true + - rename: + field: abusech.malware.file_type + target_field: threat.indicator.file.type + ignore_missing: true + # This includes a direct link to malicious files, we do not want them to appear in Kibana + # in case they are accidently clicked. + - remove: + field: abusech.malware.urlhaus_download + ignore_missing: true + - convert: + field: threat.indicator.file.size + type: long + ignore_missing: true + - convert: + field: abusech.malware.virustotal.percent + type: float + ignore_missing: true + - rename: + field: abusech.malware.md5_hash + target_field: threat.indicator.file.hash.md5 + ignore_missing: true + - rename: + field: abusech.malware.sha256_hash + target_field: threat.indicator.file.hash.sha256 + ignore_missing: true + - rename: + field: abusech.malware.imphash + target_field: threat.indicator.file.pe.imphash + ignore_missing: true + - rename: + field: abusech.malware.ssdeep + target_field: threat.indicator.file.hash.ssdeep + ignore_missing: true + - rename: + field: abusech.malware.tlsh + target_field: threat.indicator.file.hash.tlsh + ignore_missing: true + - append: + field: related.hash + value: "{{{threat.indicator.file.hash.md5}}}" + if: ctx?.threat?.indicator?.file?.hash?.md5 != null + - append: + field: related.hash + value: "{{{threat.indicator.file.hash.sha256}}}" + if: ctx?.threat?.indicator?.file?.hash?.sha256 != null + - append: + field: related.hash + value: "{{{threat.indicator.file.hash.ssdeep}}}" + if: ctx?.threat?.indicator?.file?.hash?.ssdeep != null + - append: + field: related.hash + value: "{{{threat.indicator.file.pe.imphash}}}" + if: ctx?.threat?.indicator?.file?.pe?.imphash != null + - append: + field: related.hash + value: "{{{threat.indicator.file.hash.tlsh}}}" + if: ctx?.threat?.indicator?.file?.hash?.tlsh != null + + ###################### + # Cleanup processors # + ###################### + - set: + field: threat.indicator.type + value: unknown + if: ctx?.threat?.indicator?.type == null + - script: + lang: painless + if: ctx?.abusech != null + source: | + void handleMap(Map map) { + for (def x : map.values()) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + map.values().removeIf(v -> v == null); + } + void handleList(List list) { + for (def x : list) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + } + handleMap(ctx); + - remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_failure: true + ignore_missing: true + - remove: + field: + - abusech.malware.firstseen + - message + ignore_missing: true +on_failure: + - set: + field: error.message + value: "{{ _ingest.on_failure_message }}" diff --git a/packages/ti_abusech/1.2.3/data_stream/malware/fields/agent.yml b/packages/ti_abusech/1.2.3/data_stream/malware/fields/agent.yml new file mode 100755 index 0000000000..da4e652c53 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malware/fields/agent.yml @@ -0,0 +1,198 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + diff --git a/packages/ti_abusech/1.2.3/data_stream/malware/fields/base-fields.yml b/packages/ti_abusech/1.2.3/data_stream/malware/fields/base-fields.yml new file mode 100755 index 0000000000..6803389c14 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malware/fields/base-fields.yml @@ -0,0 +1,28 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset name. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module + value: ti_abusech +- name: event.dataset + type: constant_keyword + description: Event dataset + value: ti_abusech.malware +- name: threat.feed.name + type: constant_keyword + description: Display friendly feed name + value: AbuseCH Malware +- name: threat.feed.dashboard_id + type: constant_keyword + description: Dashboard ID used for Kibana CTI UI + value: ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6 +- name: "@timestamp" + type: date + description: Event timestamp. diff --git a/packages/ti_abusech/1.2.3/data_stream/malware/fields/beats.yml b/packages/ti_abusech/1.2.3/data_stream/malware/fields/beats.yml new file mode 100755 index 0000000000..cb44bb2944 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malware/fields/beats.yml @@ -0,0 +1,12 @@ +- name: input.type + type: keyword + description: Type of Filebeat input. +- name: log.flags + type: keyword + description: Flags for the log file. +- name: log.offset + type: long + description: Offset of the entry in the log file. +- name: log.file.path + type: keyword + description: Path to the log file. diff --git a/packages/ti_abusech/1.2.3/data_stream/malware/fields/ecs.yml b/packages/ti_abusech/1.2.3/data_stream/malware/fields/ecs.yml new file mode 100755 index 0000000000..b819e36147 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malware/fields/ecs.yml @@ -0,0 +1,111 @@ +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: |- + For log events the message field contains the log message, optimized for viewing in a log viewer. + For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. + If multiple messages exist, they can be combined into one message. + name: message + type: match_only_text +- description: Error message. + name: error.message + type: match_only_text +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). + name: related.hash + type: keyword +- description: |- + event.created contains the date/time when the event was first read by an agent, or by your pipeline. + This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. + In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. + In case the two timestamps are identical, @timestamp should be used. + name: event.created + type: date +- description: |- + Timestamp when an event arrived in the central data store. + This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. + In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`. + name: event.ingested + type: date +- description: |- + This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. + `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. + The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. + name: event.kind + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. + `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. + This field is an array. This will allow proper categorization of some events that fall in multiple categories. + name: event.category + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. + `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. + This field is an array. This will allow proper categorization of some events that fall in multiple event types. + name: event.type + type: keyword +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: |- + Type of indicator as represented by Cyber Observable in STIX 2.0. + Recommended values: + * autonomous-system + * artifact + * directory + * domain-name + * email-addr + * file + * ipv4-addr + * ipv6-addr + * mac-addr + * mutex + * port + * process + * software + * url + * user-account + * windows-registry-key + * x509-certificate + name: threat.indicator.type + type: keyword +- description: The date and time when intelligence source first reported sighting this indicator. + name: threat.indicator.first_seen + type: date +- description: |- + File size in bytes. + Only relevant when `file.type` is "file". + name: threat.indicator.file.size + type: long +- description: File type (file, dir, or symlink). + name: threat.indicator.file.type + type: keyword +- description: MD5 hash. + name: threat.indicator.file.hash.md5 + type: keyword +- description: SHA256 hash. + name: threat.indicator.file.hash.sha256 + type: keyword +- description: |- + A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. + Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html. + name: threat.indicator.file.pe.imphash + type: keyword +- description: SSDEEP hash. + name: threat.indicator.file.hash.ssdeep + type: keyword +- description: The file's import tlsh, if available. + name: threat.indicator.file.hash.tlsh + type: keyword +- description: The name of the indicator's provider. + name: threat.indicator.provider + type: keyword diff --git a/packages/ti_abusech/1.2.3/data_stream/malware/fields/fields.yml b/packages/ti_abusech/1.2.3/data_stream/malware/fields/fields.yml new file mode 100755 index 0000000000..970fa42a04 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malware/fields/fields.yml @@ -0,0 +1,24 @@ +- name: abusech.malware + type: group + description: All fields related to AbuseCH URL indicators. + fields: + - name: signature + type: keyword + description: > + Malware familiy. + + - name: virustotal.result + type: keyword + description: > + AV detection ration. + + - name: virustotal.percent + type: float + description: > + AV detection in percent. + + - name: virustotal.link + type: keyword + description: > + Link to the Virustotal report. + diff --git a/packages/ti_abusech/1.2.3/data_stream/malware/manifest.yml b/packages/ti_abusech/1.2.3/data_stream/malware/manifest.yml new file mode 100755 index 0000000000..9b986685b1 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malware/manifest.yml @@ -0,0 +1,68 @@ +type: logs +title: AbuseCH Malware logs +streams: + - input: httpjson + vars: + - name: url + type: text + title: AbuseCH Malware API endpoint + multi: false + required: true + show_user: false + default: https://urlhaus-api.abuse.ch/v1/payloads/recent/ + - name: http_client_timeout + type: text + title: HTTP Client Timeout + multi: false + required: false + show_user: false + default: 30s + - name: proxy_url + type: text + title: Proxy URL + multi: false + required: false + show_user: false + description: URL to proxy connections in the form of http[s]://:@: + - name: interval + type: text + title: Interval + multi: false + required: true + show_user: true + default: 10m + - name: ssl + type: yaml + title: SSL + multi: false + required: false + show_user: false + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - abusech-malware + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + template_path: httpjson.yml.hbs + title: AbuseCH Malware logs + description: Collect AbuseCH Malware logs diff --git a/packages/ti_abusech/1.2.3/data_stream/malware/sample_event.json b/packages/ti_abusech/1.2.3/data_stream/malware/sample_event.json new file mode 100755 index 0000000000..5800635b7c --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malware/sample_event.json @@ -0,0 +1,69 @@ +{ + "@timestamp": "2022-04-11T08:43:51.252Z", + "abusech": { + "malware": {} + }, + "agent": { + "ephemeral_id": "3c096aaa-3fd9-4560-87fe-375b99890402", + "id": "0cd371ed-8f03-437b-909d-8daccf9843fc", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "data_stream": { + "dataset": "ti_abusech.malware", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "0cd371ed-8f03-437b-909d-8daccf9843fc", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "created": "2022-04-11T08:43:51.252Z", + "dataset": "ti_abusech.malware", + "ingested": "2022-04-11T08:43:52Z", + "kind": "enrichment", + "original": "{\"file_size\":\"1563\",\"file_type\":\"unknown\",\"firstseen\":\"2021-10-05 04:17:02\",\"imphash\":null,\"md5_hash\":\"9cd5a4f0231a47823c4adba7c8ef370f\",\"sha256_hash\":\"7c0852d514df7faf8fdbfa4f358cc235dd1b1a2d843cc65495d03b502e4099f2\",\"signature\":null,\"ssdeep\":\"48:yazkS7neW+mfe4CJjNXcq5Co4Fr1PpsHn:yrmGNt5mbP2n\",\"tlsh\":\"T109314C5E7822CA70B91AD69300C22D8C2F53EAF229E6686C3BDD4C86FA1344208CF1\",\"urlhaus_download\":\"https://urlhaus-api.abuse.ch/v1/download/7c0852d514df7faf8fdbfa4f358cc235dd1b1a2d843cc65495d03b502e4099f2/\",\"virustotal\":null}", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "9cd5a4f0231a47823c4adba7c8ef370f", + "7c0852d514df7faf8fdbfa4f358cc235dd1b1a2d843cc65495d03b502e4099f2", + "48:yazkS7neW+mfe4CJjNXcq5Co4Fr1PpsHn:yrmGNt5mbP2n", + "T109314C5E7822CA70B91AD69300C22D8C2F53EAF229E6686C3BDD4C86FA1344208CF1" + ] + }, + "tags": [ + "preserve_original_event", + "forwarded", + "abusech-malware" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "md5": "9cd5a4f0231a47823c4adba7c8ef370f", + "sha256": "7c0852d514df7faf8fdbfa4f358cc235dd1b1a2d843cc65495d03b502e4099f2", + "ssdeep": "48:yazkS7neW+mfe4CJjNXcq5Co4Fr1PpsHn:yrmGNt5mbP2n", + "tlsh": "T109314C5E7822CA70B91AD69300C22D8C2F53EAF229E6686C3BDD4C86FA1344208CF1" + }, + "pe": {}, + "size": 1563, + "type": "unknown" + }, + "first_seen": "2021-10-05T04:17:02.000Z", + "type": "file" + } + } +} \ No newline at end of file diff --git a/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/agent/stream/httpjson.yml.hbs b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/agent/stream/httpjson.yml.hbs new file mode 100755 index 0000000000..1684323a35 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/agent/stream/httpjson.yml.hbs @@ -0,0 +1,44 @@ +config_version: "2" +interval: {{interval}} +request.method: "POST" + +{{#if url}} +request.url: {{url}} +{{/if}} +{{#if proxy_url }} +request.proxy_url: {{proxy_url}} +{{/if}} +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} +{{#if http_client_timeout}} +request.timeout: {{http_client_timeout}} +{{/if}} +request.transforms: +- set: + target: header.Content-Type + value: application/x-www-form-urlencoded +- set: + target: url.params.query + value: get_recent +- set: + target: url.params.selector + value: time + +response.split: + target: body.data + +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/elasticsearch/ingest_pipeline/default.yml b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..74ba72f1ed --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,242 @@ +--- +description: Pipeline for parsing Abuse.ch URL Threat Intel +processors: + #################### + # Event ECS fields # + #################### + - set: + field: ecs.version + value: "8.0.0" + - set: + field: event.kind + value: enrichment + - set: + field: event.category + value: threat + - set: + field: event.type + value: indicator + + ###################### + # General ECS fields # + ###################### + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: abusech.malwarebazaar + - fingerprint: + fields: + - abusech.malwarebazaar.md5_hash + - abusech.malwarebazaar.sha256_hash + target_field: "_id" + + ##################### + # Threat ECS Fields # + ##################### + - date: + field: abusech.malwarebazaar.first_seen + target_field: threat.indicator.first_seen + formats: + - "yyyy-MM-dd HH:mm:ss z" + - "yyyy-MM-dd HH:mm:ss Z" + - "yyyy-MM-dd HH:mm:ss" + if: "ctx.abusech?.malwarebazaar?.first_seen != null" + - date: + field: abusech.malwarebazaar.last_seen + target_field: threat.indicator.last_seen + formats: + - "yyyy-MM-dd HH:mm:ss z" + - "yyyy-MM-dd HH:mm:ss Z" + - "yyyy-MM-dd HH:mm:ss" + if: "ctx.abusech?.malwarebazaar?.last_seen != null" + - set: + field: threat.indicator.type + value: file + - rename: + field: abusech.malwarebazaar.file_name + target_field: threat.indicator.file.name + ignore_missing: true + - rename: + field: abusech.malwarebazaar.file_type_mime + target_field: threat.indicator.file.mime_type + ignore_missing: true + - rename: + field: abusech.malwarebazaar.reporter + target_field: threat.indicator.provider + ignore_missing: true + - rename: + field: abusech.malwarebazaar.origin_country + target_field: threat.indicator.geo.country_iso_code + ignore_missing: true + - rename: + field: abusech.malwarebazaar.signature + target_field: threat.software.alias + ignore_missing: true + - foreach: + field: abusech.malwarebazaar.code_sign + ignore_missing: true + processor: + rename: + field: _ingest._value.subject_cn + target_field: threat.indicator.file.x509.subject.common_name + - foreach: + field: abusech.malwarebazaar.code_sign + ignore_missing: true + processor: + rename: + field: _ingest._value.issuer_cn + target_field: threat.indicator.file.x509.issuer.common_name + - foreach: + field: abusech.malwarebazaar.code_sign + ignore_missing: true + processor: + rename: + field: _ingest._value.algorithm + target_field: threat.indicator.file.x509.public_key_algorithm + - foreach: + field: abusech.malwarebazaar.code_sign + ignore_missing: true + processor: + rename: + field: _ingest._value.valid_from + target_field: threat.indicator.file.x509.not_before + - foreach: + field: abusech.malwarebazaar.code_sign + ignore_missing: true + processor: + rename: + field: _ingest._value.valid_to + target_field: threat.indicator.file.x509.not_after + - foreach: + field: abusech.malwarebazaar.code_sign + ignore_missing: true + processor: + rename: + field: _ingest._value.serial_number + target_field: threat.indicator.file.x509.serial_number + - rename: + field: abusech.malwarebazaar.file_size + target_field: threat.indicator.file.size + ignore_missing: true + - rename: + field: abusech.malwarebazaar.file_type + target_field: threat.indicator.file.extension + ignore_missing: true + - rename: + field: abusech.malwarebazaar.md5_hash + target_field: threat.indicator.file.hash.md5 + ignore_missing: true + - rename: + field: abusech.malwarebazaar.sha256_hash + target_field: threat.indicator.file.hash.sha256 + ignore_missing: true + - rename: + field: abusech.malwarebazaar.sha1_hash + target_field: threat.indicator.file.hash.sha1 + ignore_missing: true + - rename: + field: abusech.malwarebazaar.sha3_384_hash + target_field: threat.indicator.file.hash.sha384 + ignore_missing: true + - rename: + field: abusech.malwarebazaar.imphash + target_field: threat.indicator.file.pe.imphash + ignore_missing: true + - rename: + field: abusech.malwarebazaar.ssdeep + target_field: threat.indicator.file.hash.ssdeep + ignore_missing: true + - rename: + field: abusech.malwarebazaar.tlsh + target_field: threat.indicator.file.hash.tlsh + ignore_missing: true + - rename: + field: abusech.malwarebazaar.telfhash + target_field: threat.indicator.file.elf.telfhash + ignore_missing: true + - append: + field: related.hash + value: "{{ threat.indicator.file.hash.md5 }}" + if: ctx?.threat?.indicator?.file?.hash?.md5 != null + - append: + field: related.hash + value: "{{ threat.indicator.file.hash.sha256 }}" + if: ctx?.threat?.indicator?.file?.hash?.sha256 != null + - append: + field: related.hash + value: "{{ threat.indicator.file.hash.ssdeep }}" + if: ctx?.threat?.indicator?.file?.hash?.ssdeep != null + - append: + field: related.hash + value: "{{ threat.indicator.file.pe.imphash }}" + if: ctx?.threat?.indicator?.file?.pe?.imphash != null + - append: + field: related.hash + value: "{{ threat.indicator.file.elf.telfhash }}" + if: ctx?.threat?.indicator?.file?.elf?.telfhash != null + - append: + field: related.hash + value: "{{ threat.indicator.file.hash.tlsh }}" + if: ctx?.threat?.indicator?.file?.hash?.tlsh != null + - convert: + field: threat.indicator.file.size + type: long + ignore_missing: true + - convert: + field: abusech.malwarebazaar.intelligence.downloads + type: long + ignore_missing: true + - convert: + field: abusech.malwarebazaar.intelligence.uploads + type: long + ignore_missing: true + + ###################### + # Cleanup processors # + ###################### + - set: + field: threat.indicator.type + value: unknown + if: ctx?.threat?.indicator?.type == null + - script: + lang: painless + if: ctx?.abusech != null + source: | + void handleMap(Map map) { + for (def x : map.values()) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + map.values().removeIf(v -> v == null); + } + void handleList(List list) { + for (def x : list) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + } + handleMap(ctx); + - remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_failure: true + ignore_missing: true + - remove: + field: + - abusech.malwarebazaar.first_seen + - abusech.malwarebazaar.last_seen + - message + ignore_missing: true +on_failure: + - set: + field: error.message + value: "{{ _ingest.on_failure_message }}" diff --git a/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/agent.yml b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/agent.yml new file mode 100755 index 0000000000..da4e652c53 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/agent.yml @@ -0,0 +1,198 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + diff --git a/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/base-fields.yml b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/base-fields.yml new file mode 100755 index 0000000000..d71e6e59d4 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/base-fields.yml @@ -0,0 +1,28 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset name. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module + value: ti_abusech +- name: event.dataset + type: constant_keyword + description: Event dataset + value: ti_abusech.malwarebazaar +- name: threat.feed.name + type: constant_keyword + description: Display friendly feed name + value: AbuseCH MalwareBazaar +- name: threat.feed.dashboard_id + type: constant_keyword + description: Dashboard ID used for Kibana CTI UI + value: ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6 +- name: "@timestamp" + type: date + description: Event timestamp. diff --git a/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/beats.yml b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/beats.yml new file mode 100755 index 0000000000..cb44bb2944 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/beats.yml @@ -0,0 +1,12 @@ +- name: input.type + type: keyword + description: Type of Filebeat input. +- name: log.flags + type: keyword + description: Flags for the log file. +- name: log.offset + type: long + description: Offset of the entry in the log file. +- name: log.file.path + type: keyword + description: Path to the log file. diff --git a/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/ecs.yml b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/ecs.yml new file mode 100755 index 0000000000..685f7565cb --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/ecs.yml @@ -0,0 +1,160 @@ +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: |- + For log events the message field contains the log message, optimized for viewing in a log viewer. + For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. + If multiple messages exist, they can be combined into one message. + name: message + type: match_only_text +- description: Error message. + name: error.message + type: match_only_text +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). + name: related.hash + type: keyword +- description: |- + Timestamp when an event arrived in the central data store. + This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. + In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`. + name: event.ingested + type: date +- description: |- + This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. + `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. + The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. + name: event.kind + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. + `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. + This field is an array. This will allow proper categorization of some events that fall in multiple categories. + name: event.category + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. + `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. + This field is an array. This will allow proper categorization of some events that fall in multiple event types. + name: event.type + type: keyword +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: |- + Type of indicator as represented by Cyber Observable in STIX 2.0. + Recommended values: + * autonomous-system + * artifact + * directory + * domain-name + * email-addr + * file + * ipv4-addr + * ipv6-addr + * mac-addr + * mutex + * port + * process + * software + * url + * user-account + * windows-registry-key + * x509-certificate + name: threat.indicator.type + type: keyword +- description: |- + event.created contains the date/time when the event was first read by an agent, or by your pipeline. + This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. + In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. + In case the two timestamps are identical, @timestamp should be used. + name: event.created + type: date +- description: The date and time when intelligence source first reported sighting this indicator. + name: threat.indicator.first_seen + type: date +- description: The date and time when intelligence source last reported sighting this indicator. + name: threat.indicator.last_seen + type: date +- description: |- + File size in bytes. + Only relevant when `file.type` is "file". + name: threat.indicator.file.size + type: long +- description: File type (file, dir, or symlink). + name: threat.indicator.file.type + type: keyword +- description: Name of the file including the extension, without the directory. + name: threat.indicator.file.name + type: keyword +- description: |- + File extension, excluding the leading dot. + Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). + name: threat.indicator.file.extension + type: keyword +- description: SHA1 hash. + name: threat.indicator.file.hash.sha1 + type: keyword +- description: MIME type should identify the format of the file or stream of bytes using https://www.iana.org/assignments/media-types/media-types.xhtml[IANA official types], where possible. When more than one type is applicable, the most specific type should be used. + name: threat.indicator.file.mime_type + type: keyword +- description: |- + The alias(es) of the software for a set of related intrusion activity that are tracked by a common name in the security community. + While not required, you can use a MITRE ATT&CK® associated software description. + name: threat.software.alias + type: keyword +- description: MD5 hash. + name: threat.indicator.file.hash.md5 + type: keyword +- description: SHA256 hash. + name: threat.indicator.file.hash.sha256 + type: keyword +- description: SSDEEP hash. + name: threat.indicator.file.hash.ssdeep + type: keyword +- description: The file's sha384 hash, if available. + name: threat.indicator.file.hash.sha384 + type: keyword +- description: The file's import tlsh, if available. + name: threat.indicator.file.hash.tlsh + type: keyword +- description: |- + A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. + Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html. + name: threat.indicator.file.pe.imphash + type: keyword +- description: telfhash symbol hash for ELF file. + name: threat.indicator.file.elf.telfhash + type: keyword +- description: List of common names (CN) of subject. + name: threat.indicator.file.x509.subject.common_name + type: keyword +- description: List of common name (CN) of issuing certificate authority. + name: threat.indicator.file.x509.issuer.common_name + type: keyword +- description: Algorithm used to generate the public key. + name: threat.indicator.file.x509.public_key_algorithm + type: keyword +- description: Time at which the certificate is first considered valid. + name: threat.indicator.file.x509.not_before + type: date +- description: Time at which the certificate is no longer considered valid. + name: threat.indicator.file.x509.not_after + type: date +- description: Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters. + name: threat.indicator.file.x509.serial_number + type: keyword +- description: The name of the indicator's provider. + name: threat.indicator.provider + type: keyword +- description: Country ISO code. + name: threat.indicator.geo.country_iso_code + type: keyword diff --git a/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/fields.yml b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/fields.yml new file mode 100755 index 0000000000..8fab848b82 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/fields/fields.yml @@ -0,0 +1,45 @@ +- name: abusech.malwarebazaar + type: group + description: All fields related to AbuseCH URL indicators. + fields: + - name: tags + type: keyword + description: > + A list of tags associated with the queried malware sample. + + - name: intelligence + type: group + fields: + - name: downloads + type: long + description: > + Number of downloads from MalwareBazaar. + + - name: uploads + type: long + description: > + Number of uploads from MalwareBazaar. + + - name: mail + type: group + fields: + - name: Generic + type: keyword + description: > + Malware seen in generic spam traffic. + + - name: IT + type: keyword + description: > + Malware seen in IT spam traffic. + + - name: anonymous + type: long + description: > + Identifies if the sample was submitted anonymously. + + - name: code_sign + type: keyword + description: > + Code signing information for the sample. + diff --git a/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/manifest.yml b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/manifest.yml new file mode 100755 index 0000000000..61b6d55edc --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/manifest.yml @@ -0,0 +1,68 @@ +type: logs +title: AbuseCH MalwareBazaar logs +streams: + - input: httpjson + vars: + - name: url + type: text + title: AbuseCH MalwareBazaar API endpoint + multi: false + required: true + show_user: false + default: https://mb-api.abuse.ch/api/v1/ + - name: http_client_timeout + type: text + title: HTTP Client Timeout + multi: false + required: false + show_user: false + default: 30s + - name: proxy_url + type: text + title: Proxy URL + multi: false + required: false + show_user: false + description: URL to proxy connections in the form of http[s]://:@: + - name: interval + type: text + title: Interval + multi: false + required: true + show_user: true + default: 10m + - name: ssl + type: yaml + title: SSL + multi: false + required: false + show_user: false + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - abusech-malwarebazaar + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + template_path: httpjson.yml.hbs + title: AbuseCH MalwareBazaar logs + description: Collect AbuseCH MalwareBazaar logs diff --git a/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/sample_event.json b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/sample_event.json new file mode 100755 index 0000000000..b17ab22ddc --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/malwarebazaar/sample_event.json @@ -0,0 +1,95 @@ +{ + "@timestamp": "2022-04-11T08:44:21.828Z", + "abusech": { + "malwarebazaar": { + "anonymous": 0, + "code_sign": [], + "intelligence": { + "downloads": 11, + "uploads": 1 + }, + "tags": [ + "exe", + "RedLineStealer" + ] + } + }, + "agent": { + "ephemeral_id": "15657330-8e8b-49be-b82d-529320d9c53c", + "id": "0cd371ed-8f03-437b-909d-8daccf9843fc", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "data_stream": { + "dataset": "ti_abusech.malwarebazaar", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "0cd371ed-8f03-437b-909d-8daccf9843fc", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "created": "2022-04-11T08:44:21.828Z", + "dataset": "ti_abusech.malwarebazaar", + "ingested": "2022-04-11T08:44:22Z", + "kind": "enrichment", + "original": "{\"anonymous\":0,\"code_sign\":[],\"dhash_icon\":null,\"file_name\":\"7a6c03013a2f2ab8b9e8e7e5d226ea89e75da72c1519e.exe\",\"file_size\":432640,\"file_type\":\"exe\",\"file_type_mime\":\"application/x-dosexec\",\"first_seen\":\"2021-10-05 14:02:45\",\"imphash\":\"f34d5f2d4577ed6d9ceec516c1f5a744\",\"intelligence\":{\"clamav\":null,\"downloads\":\"11\",\"mail\":null,\"uploads\":\"1\"},\"last_seen\":null,\"md5_hash\":\"1fc1c2997c8f55ac10496b88e23f5320\",\"origin_country\":\"FR\",\"reporter\":\"abuse_ch\",\"sha1_hash\":\"42c7153680d7402e56fe022d1024aab49a9901a0\",\"sha256_hash\":\"7a6c03013a2f2ab8b9e8e7e5d226ea89e75da72c1519e78fd28b2253ea755c28\",\"sha3_384_hash\":\"d63e73b68973bc73ab559549aeee2141a48b8a3724aabc0d81fb14603c163a098a5a10be9f6d33b888602906c0d89955\",\"signature\":\"RedLineStealer\",\"ssdeep\":\"12288:jhhl1Eo+iEXvpb1C7drqAd1uUaJvzXGyO2F5V3bS1jsTacr:7lL\",\"tags\":[\"exe\",\"RedLineStealer\"],\"telfhash\":null,\"tlsh\":\"T13794242864BFC05994E3EEA12DDCA8FBD99A55E3640C743301B4633B8B52B84DE4F479\"}", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "1fc1c2997c8f55ac10496b88e23f5320", + "7a6c03013a2f2ab8b9e8e7e5d226ea89e75da72c1519e78fd28b2253ea755c28", + "12288:jhhl1Eo+iEXvpb1C7drqAd1uUaJvzXGyO2F5V3bS1jsTacr:7lL", + "f34d5f2d4577ed6d9ceec516c1f5a744", + "T13794242864BFC05994E3EEA12DDCA8FBD99A55E3640C743301B4633B8B52B84DE4F479" + ] + }, + "tags": [ + "preserve_original_event", + "forwarded", + "abusech-malwarebazaar" + ], + "threat": { + "indicator": { + "file": { + "elf": {}, + "extension": "exe", + "hash": { + "md5": "1fc1c2997c8f55ac10496b88e23f5320", + "sha1": "42c7153680d7402e56fe022d1024aab49a9901a0", + "sha256": "7a6c03013a2f2ab8b9e8e7e5d226ea89e75da72c1519e78fd28b2253ea755c28", + "sha384": "d63e73b68973bc73ab559549aeee2141a48b8a3724aabc0d81fb14603c163a098a5a10be9f6d33b888602906c0d89955", + "ssdeep": "12288:jhhl1Eo+iEXvpb1C7drqAd1uUaJvzXGyO2F5V3bS1jsTacr:7lL", + "tlsh": "T13794242864BFC05994E3EEA12DDCA8FBD99A55E3640C743301B4633B8B52B84DE4F479" + }, + "mime_type": "application/x-dosexec", + "name": "7a6c03013a2f2ab8b9e8e7e5d226ea89e75da72c1519e.exe", + "pe": { + "imphash": "f34d5f2d4577ed6d9ceec516c1f5a744" + }, + "size": 432640 + }, + "first_seen": "2021-10-05T14:02:45.000Z", + "geo": { + "country_iso_code": "FR" + }, + "provider": "abuse_ch", + "type": "file" + }, + "software": { + "alias": "RedLineStealer" + } + } +} \ No newline at end of file diff --git a/packages/ti_abusech/1.2.3/data_stream/url/agent/stream/httpjson.yml.hbs b/packages/ti_abusech/1.2.3/data_stream/url/agent/stream/httpjson.yml.hbs new file mode 100755 index 0000000000..92be22f0b6 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/url/agent/stream/httpjson.yml.hbs @@ -0,0 +1,38 @@ +config_version: "2" +interval: {{interval}} +request.method: "GET" + +{{#if url}} +request.url: {{url}} +{{/if}} +{{#if proxy_url }} +request.proxy_url: {{proxy_url}} +{{/if}} +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} +{{#if http_client_timeout}} +request.timeout: {{http_client_timeout}} +{{/if}} +request.transforms: +- set: + target: header.Content-Type + value: application/json + +response.split: + target: body.urls + +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/ti_abusech/1.2.3/data_stream/url/elasticsearch/ingest_pipeline/default.yml b/packages/ti_abusech/1.2.3/data_stream/url/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..1765d7608a --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/url/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,123 @@ +--- +description: Pipeline for parsing Abuse.ch URL Threat Intel +processors: + #################### + # Event ECS fields # + #################### + - set: + field: ecs.version + value: "8.0.0" + - set: + field: event.kind + value: enrichment + - set: + field: event.category + value: threat + - set: + field: event.type + value: indicator + + ###################### + # General ECS fields # + ###################### + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: abusech.url + - fingerprint: + fields: + - abusech.url.id + target_field: "_id" + + ##################### + # Threat ECS Fields # + ##################### + - set: + field: threat.indicator.type + value: url + - date: + field: abusech.url.date_added + target_field: threat.indicator.first_seen + formats: + - "yyyy-MM-dd HH:mm:ss z" + - "yyyy-MM-dd HH:mm:ss Z" + if: "ctx.abusech?.url?.date_added != null" + - uri_parts: + field: abusech.url.url + target_field: threat.indicator.url + keep_original: true + remove_if_successful: true + - set: + field: threat.indicator.url.full + value: "{{{threat.indicator.url.original}}}" + ignore_empty_value: true + - rename: + field: abusech.url.urlhaus_reference + target_field: threat.indicator.reference + ignore_missing: true + + # Host can be both IP addresses and domain names + - grok: + field: abusech.url.host + patterns: + - "(?:%{IP:threat.indicator.ip}|%{GREEDYDATA:threat.indicator.url.domain})" + ignore_failure: true + - rename: + field: abusech.url.reporter + target_field: threat.indicator.provider + ignore_missing: true + + ###################### + # Cleanup processors # + ###################### + - set: + field: threat.indicator.type + value: unknown + if: ctx?.threat?.indicator?.type == null + - convert: + field: abusech.url.larted + type: boolean + ignore_missing: true + - script: + lang: painless + if: ctx?.abusech != null + source: | + void handleMap(Map map) { + for (def x : map.values()) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + map.values().removeIf(v -> v == null); + } + void handleList(List list) { + for (def x : list) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + } + handleMap(ctx); + - remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_failure: true + ignore_missing: true + - remove: + field: + - abusech.url.date_added + - abusech.url.url + - abusech.url.host + - message + ignore_missing: true +on_failure: + - set: + field: error.message + value: "{{ _ingest.on_failure_message }}" diff --git a/packages/ti_abusech/1.2.3/data_stream/url/fields/agent.yml b/packages/ti_abusech/1.2.3/data_stream/url/fields/agent.yml new file mode 100755 index 0000000000..da4e652c53 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/url/fields/agent.yml @@ -0,0 +1,198 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + diff --git a/packages/ti_abusech/1.2.3/data_stream/url/fields/base-fields.yml b/packages/ti_abusech/1.2.3/data_stream/url/fields/base-fields.yml new file mode 100755 index 0000000000..516451aa4c --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/url/fields/base-fields.yml @@ -0,0 +1,28 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset name. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module + value: ti_abusech +- name: event.dataset + type: constant_keyword + description: Event dataset + value: ti_abusech.url +- name: threat.feed.name + type: constant_keyword + description: Display friendly feed name + value: AbuseCH URL +- name: threat.feed.dashboard_id + type: constant_keyword + description: Dashboard ID used for Kibana CTI UI + value: ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6 +- name: "@timestamp" + type: date + description: Event timestamp. diff --git a/packages/ti_abusech/1.2.3/data_stream/url/fields/beats.yml b/packages/ti_abusech/1.2.3/data_stream/url/fields/beats.yml new file mode 100755 index 0000000000..cb44bb2944 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/url/fields/beats.yml @@ -0,0 +1,12 @@ +- name: input.type + type: keyword + description: Type of Filebeat input. +- name: log.flags + type: keyword + description: Flags for the log file. +- name: log.offset + type: long + description: Offset of the entry in the log file. +- name: log.file.path + type: keyword + description: Path to the log file. diff --git a/packages/ti_abusech/1.2.3/data_stream/url/fields/ecs.yml b/packages/ti_abusech/1.2.3/data_stream/url/fields/ecs.yml new file mode 100755 index 0000000000..40047f4b1f --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/url/fields/ecs.yml @@ -0,0 +1,133 @@ +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: |- + For log events the message field contains the log message, optimized for viewing in a log viewer. + For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. + If multiple messages exist, they can be combined into one message. + name: message + type: match_only_text +- description: Error message. + name: error.message + type: match_only_text +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: |- + Timestamp when an event arrived in the central data store. + This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. + In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`. + name: event.ingested + type: date +- description: |- + This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. + `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. + The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. + name: event.kind + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. + `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. + This field is an array. This will allow proper categorization of some events that fall in multiple categories. + name: event.category + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. + `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. + This field is an array. This will allow proper categorization of some events that fall in multiple event types. + name: event.type + type: keyword +- description: |- + event.created contains the date/time when the event was first read by an agent, or by your pipeline. + This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. + In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. + In case the two timestamps are identical, @timestamp should be used. + name: event.created + type: date +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: |- + Type of indicator as represented by Cyber Observable in STIX 2.0. + Recommended values: + * autonomous-system + * artifact + * directory + * domain-name + * email-addr + * file + * ipv4-addr + * ipv6-addr + * mac-addr + * mutex + * port + * process + * software + * url + * user-account + * windows-registry-key + * x509-certificate + name: threat.indicator.type + type: keyword +- description: Reference URL linking to additional information about this indicator. + name: threat.indicator.reference + type: keyword +- description: The date and time when intelligence source first reported sighting this indicator. + name: threat.indicator.first_seen + type: date +- description: |- + Domain of the url, such as "www.elastic.co". + In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. + If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. + name: threat.indicator.url.domain + type: keyword +- description: If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.full + type: wildcard +- description: |- + The field contains the file extension from the original request url, excluding the leading dot. + The file extension is only set if it exists, as not every url has a file extension. + The leading period must not be included. For example, the value must be "png", not ".png". + Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). + name: threat.indicator.url.extension + type: keyword +- description: |- + Unmodified original url as seen in the event source. + Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. + This field is meant to represent the URL as it was observed, complete or not. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.original + type: wildcard +- description: Path of the request, such as "/search". + name: threat.indicator.url.path + type: wildcard +- description: Port of the request, such as 443. + name: threat.indicator.url.port + type: long +- description: |- + Scheme of the request, such as "https". + Note: The `:` is not part of the scheme. + name: threat.indicator.url.scheme + type: keyword +- description: |- + The query field describes the query string of the request, such as "q=elasticsearch". + The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. + name: threat.indicator.url.query + type: keyword +- description: Identifies a threat indicator as an IP address (irrespective of direction). + name: threat.indicator.ip + type: ip +- description: The name of the indicator's provider. + name: threat.indicator.provider + type: keyword diff --git a/packages/ti_abusech/1.2.3/data_stream/url/fields/fields.yml b/packages/ti_abusech/1.2.3/data_stream/url/fields/fields.yml new file mode 100755 index 0000000000..63f361d48e --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/url/fields/fields.yml @@ -0,0 +1,49 @@ +- name: abusech.url + type: group + description: All fields related to AbuseCH URL indicators. + fields: + - name: id + type: keyword + description: > + The ID of the indicator. + + - name: urlhaus_reference + type: keyword + description: > + Link to URLhaus entry. + + - name: url_status + type: keyword + description: > + The current status of the URL. Possible values are: online, offline and unknown. + + - name: threat + type: keyword + description: > + The threat corresponding to this malware URL. + + - name: reporter + type: keyword + description: > + The Twitter handle of the reporter that has reported this malware URL (or anonymous). + + - name: larted + type: boolean + description: > + Indicates whether the malware URL has been reported to the hosting provider (true or false) + + - name: tags + type: keyword + description: > + A list of tags associated with the queried malware URL + + - name: blacklists.spamhaus_dbl + type: keyword + description: > + If the indicator is listed on the spamhaus blacklist. + + - name: blacklists.surbl + type: keyword + description: > + If the indicator is listed on the surbl blacklist. + diff --git a/packages/ti_abusech/1.2.3/data_stream/url/manifest.yml b/packages/ti_abusech/1.2.3/data_stream/url/manifest.yml new file mode 100755 index 0000000000..d138d7f3ac --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/url/manifest.yml @@ -0,0 +1,68 @@ +type: logs +title: AbuseCH URL logs +streams: + - input: httpjson + vars: + - name: url + type: text + title: AbuseCH URL API endpoint + multi: false + required: true + show_user: false + default: https://urlhaus-api.abuse.ch/v1/urls/recent/ + - name: http_client_timeout + type: text + title: HTTP Client Timeout + multi: false + required: false + show_user: false + default: 30s + - name: proxy_url + type: text + title: Proxy URL + multi: false + required: false + show_user: false + description: URL to proxy connections in the form of http[s]://:@: + - name: interval + type: text + title: Interval + multi: false + required: true + show_user: true + default: 10m + - name: ssl + type: yaml + title: SSL + multi: false + required: false + show_user: false + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - abusech-url + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + template_path: httpjson.yml.hbs + title: AbuseCH URL logs + description: Collect AbuseCH URL logs diff --git a/packages/ti_abusech/1.2.3/data_stream/url/sample_event.json b/packages/ti_abusech/1.2.3/data_stream/url/sample_event.json new file mode 100755 index 0000000000..2ed40825e3 --- /dev/null +++ b/packages/ti_abusech/1.2.3/data_stream/url/sample_event.json @@ -0,0 +1,71 @@ +{ + "@timestamp": "2022-04-11T08:44:51.227Z", + "abusech": { + "url": { + "blacklists": { + "spamhaus_dbl": "not listed", + "surbl": "not listed" + }, + "id": "1656008", + "larted": true, + "threat": "malware_download", + "url_status": "online" + } + }, + "agent": { + "ephemeral_id": "7dd3429b-dcc4-46c1-8b32-b3d1452126fd", + "id": "0cd371ed-8f03-437b-909d-8daccf9843fc", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "data_stream": { + "dataset": "ti_abusech.url", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "0cd371ed-8f03-437b-909d-8daccf9843fc", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "created": "2022-04-11T08:44:51.227Z", + "dataset": "ti_abusech.url", + "ingested": "2022-04-11T08:44:52Z", + "kind": "enrichment", + "original": "{\"blacklists\":{\"spamhaus_dbl\":\"not listed\",\"surbl\":\"not listed\"},\"date_added\":\"2021-10-05 13:57:05 UTC\",\"host\":\"120.85.169.98\",\"id\":\"1656008\",\"larted\":\"true\",\"reporter\":\"tammeto\",\"tags\":null,\"threat\":\"malware_download\",\"url\":\"http://120.85.169.98:55871/mozi.m\",\"url_status\":\"online\",\"urlhaus_reference\":\"https://urlhaus.abuse.ch/url/1656008/\"}", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "preserve_original_event", + "forwarded", + "abusech-url" + ], + "threat": { + "indicator": { + "first_seen": "2021-10-05T13:57:05.000Z", + "ip": "120.85.169.98", + "provider": "tammeto", + "reference": "https://urlhaus.abuse.ch/url/1656008/", + "type": "url", + "url": { + "domain": "120.85.169.98", + "extension": "m", + "full": "http://120.85.169.98:55871/mozi.m", + "original": "http://120.85.169.98:55871/mozi.m", + "path": "/mozi.m", + "port": 55871, + "scheme": "http" + } + } + } +} \ No newline at end of file diff --git a/packages/ti_abusech/1.2.3/docs/README.md b/packages/ti_abusech/1.2.3/docs/README.md new file mode 100755 index 0000000000..7f0e4de6ec --- /dev/null +++ b/packages/ti_abusech/1.2.3/docs/README.md @@ -0,0 +1,262 @@ +# AbuseCH integration + +This integration is for AbuseCH logs. It includes the following datasets for retrieving logs from the AbuseCH API: + +- `url` dataset: Supports URL based indicators from AbuseCH API. +- `malware` dataset: Supports Malware based indicators from AbuseCH API. +- `malwarebazaar` dataset: Supports indicators from the MalwareBazaar from AbuseCH. + +## Logs + +### URL + +The AbuseCH URL data_stream retrieves threat intelligence indicators from the URL API endpoint `https://urlhaus-api.abuse.ch/v1/urls/recent/`. + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| abusech.url.blacklists.spamhaus_dbl | If the indicator is listed on the spamhaus blacklist. | keyword | +| abusech.url.blacklists.surbl | If the indicator is listed on the surbl blacklist. | keyword | +| abusech.url.id | The ID of the indicator. | keyword | +| abusech.url.larted | Indicates whether the malware URL has been reported to the hosting provider (true or false) | boolean | +| abusech.url.reporter | The Twitter handle of the reporter that has reported this malware URL (or anonymous). | keyword | +| abusech.url.tags | A list of tags associated with the queried malware URL | keyword | +| abusech.url.threat | The threat corresponding to this malware URL. | keyword | +| abusech.url.url_status | The current status of the URL. Possible values are: online, offline and unknown. | keyword | +| abusech.url.urlhaus_reference | Link to URLhaus entry. | keyword | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset name. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| error.message | Error message. | match_only_text | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset | constant_keyword | +| event.ingested | Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` \< `event.created` \< `event.ingested`. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Type of Filebeat input. | keyword | +| log.file.path | Path to the log file. | keyword | +| log.flags | Flags for the log file. | keyword | +| log.offset | Offset of the entry in the log file. | long | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| tags | List of keywords used to tag each event. | keyword | +| threat.feed.dashboard_id | Dashboard ID used for Kibana CTI UI | constant_keyword | +| threat.feed.name | Display friendly feed name | constant_keyword | +| threat.indicator.first_seen | The date and time when intelligence source first reported sighting this indicator. | date | +| threat.indicator.ip | Identifies a threat indicator as an IP address (irrespective of direction). | ip | +| threat.indicator.provider | The name of the indicator's provider. | keyword | +| threat.indicator.reference | Reference URL linking to additional information about this indicator. | keyword | +| threat.indicator.type | Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: \* autonomous-system \* artifact \* directory \* domain-name \* email-addr \* file \* ipv4-addr \* ipv6-addr \* mac-addr \* mutex \* port \* process \* software \* url \* user-account \* windows-registry-key \* x509-certificate | keyword | +| threat.indicator.url.domain | Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. | keyword | +| threat.indicator.url.extension | The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). | keyword | +| threat.indicator.url.full | If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. | wildcard | +| threat.indicator.url.full.text | Multi-field of `threat.indicator.url.full`. | match_only_text | +| threat.indicator.url.original | Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not. | wildcard | +| threat.indicator.url.original.text | Multi-field of `threat.indicator.url.original`. | match_only_text | +| threat.indicator.url.path | Path of the request, such as "/search". | wildcard | +| threat.indicator.url.port | Port of the request, such as 443. | long | +| threat.indicator.url.query | The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. | keyword | +| threat.indicator.url.scheme | Scheme of the request, such as "https". Note: The `:` is not part of the scheme. | keyword | + + +The AbuseCH malware data_stream retrieves threat intelligence indicators from the payload API endpoint `https://urlhaus-api.abuse.ch/v1/payloads/recent/`. + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| abusech.malware.signature | Malware familiy. | keyword | +| abusech.malware.virustotal.link | Link to the Virustotal report. | keyword | +| abusech.malware.virustotal.percent | AV detection in percent. | float | +| abusech.malware.virustotal.result | AV detection ration. | keyword | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset name. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| error.message | Error message. | match_only_text | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset | constant_keyword | +| event.ingested | Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` \< `event.created` \< `event.ingested`. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Type of Filebeat input. | keyword | +| log.file.path | Path to the log file. | keyword | +| log.flags | Flags for the log file. | keyword | +| log.offset | Offset of the entry in the log file. | long | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| related.hash | All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). | keyword | +| tags | List of keywords used to tag each event. | keyword | +| threat.feed.dashboard_id | Dashboard ID used for Kibana CTI UI | constant_keyword | +| threat.feed.name | Display friendly feed name | constant_keyword | +| threat.indicator.file.hash.md5 | MD5 hash. | keyword | +| threat.indicator.file.hash.sha256 | SHA256 hash. | keyword | +| threat.indicator.file.hash.ssdeep | SSDEEP hash. | keyword | +| threat.indicator.file.hash.tlsh | The file's import tlsh, if available. | keyword | +| threat.indicator.file.pe.imphash | A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html. | keyword | +| threat.indicator.file.size | File size in bytes. Only relevant when `file.type` is "file". | long | +| threat.indicator.file.type | File type (file, dir, or symlink). | keyword | +| threat.indicator.first_seen | The date and time when intelligence source first reported sighting this indicator. | date | +| threat.indicator.provider | The name of the indicator's provider. | keyword | +| threat.indicator.type | Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: \* autonomous-system \* artifact \* directory \* domain-name \* email-addr \* file \* ipv4-addr \* ipv6-addr \* mac-addr \* mutex \* port \* process \* software \* url \* user-account \* windows-registry-key \* x509-certificate | keyword | + + +The AbuseCH malwarebazaar data_stream retrieves threat intelligence indicators from the MalwareBazaar API endpoint `https://mb-api.abuse.ch/api/v1/`. + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| abusech.malwarebazaar.anonymous | Identifies if the sample was submitted anonymously. | long | +| abusech.malwarebazaar.code_sign | Code signing information for the sample. | keyword | +| abusech.malwarebazaar.intelligence.downloads | Number of downloads from MalwareBazaar. | long | +| abusech.malwarebazaar.intelligence.mail.Generic | Malware seen in generic spam traffic. | keyword | +| abusech.malwarebazaar.intelligence.mail.IT | Malware seen in IT spam traffic. | keyword | +| abusech.malwarebazaar.intelligence.uploads | Number of uploads from MalwareBazaar. | long | +| abusech.malwarebazaar.tags | A list of tags associated with the queried malware sample. | keyword | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset name. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| error.message | Error message. | match_only_text | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset | constant_keyword | +| event.ingested | Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` \< `event.created` \< `event.ingested`. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Type of Filebeat input. | keyword | +| log.file.path | Path to the log file. | keyword | +| log.flags | Flags for the log file. | keyword | +| log.offset | Offset of the entry in the log file. | long | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| related.hash | All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). | keyword | +| tags | List of keywords used to tag each event. | keyword | +| threat.feed.dashboard_id | Dashboard ID used for Kibana CTI UI | constant_keyword | +| threat.feed.name | Display friendly feed name | constant_keyword | +| threat.indicator.file.elf.telfhash | telfhash symbol hash for ELF file. | keyword | +| threat.indicator.file.extension | File extension, excluding the leading dot. Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). | keyword | +| threat.indicator.file.hash.md5 | MD5 hash. | keyword | +| threat.indicator.file.hash.sha1 | SHA1 hash. | keyword | +| threat.indicator.file.hash.sha256 | SHA256 hash. | keyword | +| threat.indicator.file.hash.sha384 | The file's sha384 hash, if available. | keyword | +| threat.indicator.file.hash.ssdeep | SSDEEP hash. | keyword | +| threat.indicator.file.hash.tlsh | The file's import tlsh, if available. | keyword | +| threat.indicator.file.mime_type | MIME type should identify the format of the file or stream of bytes using https://www.iana.org/assignments/media-types/media-types.xhtml[IANA official types], where possible. When more than one type is applicable, the most specific type should be used. | keyword | +| threat.indicator.file.name | Name of the file including the extension, without the directory. | keyword | +| threat.indicator.file.pe.imphash | A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html. | keyword | +| threat.indicator.file.size | File size in bytes. Only relevant when `file.type` is "file". | long | +| threat.indicator.file.type | File type (file, dir, or symlink). | keyword | +| threat.indicator.file.x509.issuer.common_name | List of common name (CN) of issuing certificate authority. | keyword | +| threat.indicator.file.x509.not_after | Time at which the certificate is no longer considered valid. | date | +| threat.indicator.file.x509.not_before | Time at which the certificate is first considered valid. | date | +| threat.indicator.file.x509.public_key_algorithm | Algorithm used to generate the public key. | keyword | +| threat.indicator.file.x509.serial_number | Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters. | keyword | +| threat.indicator.file.x509.subject.common_name | List of common names (CN) of subject. | keyword | +| threat.indicator.first_seen | The date and time when intelligence source first reported sighting this indicator. | date | +| threat.indicator.geo.country_iso_code | Country ISO code. | keyword | +| threat.indicator.last_seen | The date and time when intelligence source last reported sighting this indicator. | date | +| threat.indicator.provider | The name of the indicator's provider. | keyword | +| threat.indicator.type | Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: \* autonomous-system \* artifact \* directory \* domain-name \* email-addr \* file \* ipv4-addr \* ipv6-addr \* mac-addr \* mutex \* port \* process \* software \* url \* user-account \* windows-registry-key \* x509-certificate | keyword | +| threat.software.alias | The alias(es) of the software for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® associated software description. | keyword | diff --git a/packages/ti_abusech/1.2.3/img/abusech2.svg b/packages/ti_abusech/1.2.3/img/abusech2.svg new file mode 100755 index 0000000000..6a0c76dd2c --- /dev/null +++ b/packages/ti_abusech/1.2.3/img/abusech2.svg @@ -0,0 +1,76 @@ + + + + diff --git a/packages/ti_abusech/1.2.3/kibana/dashboard/ti_abusech-2457fb50-3bc3-11ec-ae8c-7d00429ad420.json b/packages/ti_abusech/1.2.3/kibana/dashboard/ti_abusech-2457fb50-3bc3-11ec-ae8c-7d00429ad420.json new file mode 100755 index 0000000000..59a4a7e24c --- /dev/null +++ b/packages/ti_abusech/1.2.3/kibana/dashboard/ti_abusech-2457fb50-3bc3-11ec-ae8c-7d00429ad420.json @@ -0,0 +1,137 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about URL type indicators from the AbuseCH integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"event.dataset\",\"negate\":false,\"params\":[\"ti_abusech.malware\",\"ti_abusech.malwarebazaar\",\"ti_abusech.url\"],\"type\":\"phrases\"},\"query\":{\"bool\":{\"minimum_should_match\":1,\"should\":[{\"match_phrase\":{\"event.dataset\":\"ti_abusech.malware\"}},{\"match_phrase\":{\"event.dataset\":\"ti_abusech.malwarebazaar\"}},{\"match_phrase\":{\"event.dataset\":\"ti_abusech.url\"}}]}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"threat.indicator.type\",\"negate\":false,\"params\":{\"query\":\"url\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"threat.indicator.type\":\"url\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n[AbuseCH Overview](/app/dashboards#/view/ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6) \\n[AbuseCH Files](/app/dashboards#/view/ti_abusech-6a90c980-3b32-11ec-ae50-2fdf1e96c6a6) \\n**[AbuseCH URLs (This Page)](/app/dashboards#/view/ti_abusech-2457fb50-3bc3-11ec-ae8c-7d00429ad420)** \\n\\n[Integrations Page](/app/integrations/detail/ti_abusech/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is an overview of the different threat intelligence indicators with a **threat.indicator.type: url**. \\n\\nThe dashboard is made to provide general statistics and show the health of your indicators like popular domains, file extensions, statistics about how many unique indicators are ingested and other relevant information.\",\"openLinksInNewTab\":false},\"title\":\"\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":39,\"i\":\"4c3ed6e1-8b4e-4eab-8d84-70ed4f506216\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"4c3ed6e1-8b4e-4eab-8d84-70ed4f506216\",\"title\":\"Files Navigation Textbox [Logs AbuseCH]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-88a112e1-6da1-49d3-9177-19f98280c200\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"88a112e1-6da1-49d3-9177-19f98280c200\":{\"columnOrder\":[\"604f1693-15a6-437d-af69-03588db8e471\"],\"columns\":{\"604f1693-15a6-437d-af69-03588db8e471\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Ports\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.port\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"604f1693-15a6-437d-af69-03588db8e471\",\"layerId\":\"88a112e1-6da1-49d3-9177-19f98280c200\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"c7c6e8dc-b649-434c-9650-8a1564d4d676\",\"w\":5,\"x\":7,\"y\":0},\"panelIndex\":\"c7c6e8dc-b649-434c-9650-8a1564d4d676\",\"title\":\"Unique Ports [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-a6fa56f8-32fa-405d-8771-dade4fe75d62\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"a6fa56f8-32fa-405d-8771-dade4fe75d62\":{\"columnOrder\":[\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\"],\"columns\":{\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Extensions\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.extension\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\",\"layerId\":\"a6fa56f8-32fa-405d-8771-dade4fe75d62\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"73a752f9-bde5-4396-8ede-e9e77a37182d\",\"w\":6,\"x\":12,\"y\":0},\"panelIndex\":\"73a752f9-bde5-4396-8ede-e9e77a37182d\",\"title\":\"Unique File Extensions [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-c94400ee-a135-4a99-9693-5879d29f7aad\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"c94400ee-a135-4a99-9693-5879d29f7aad\":{\"columnOrder\":[\"2934249f-fce5-4637-87ff-d2596d1b6ec5\"],\"columns\":{\"2934249f-fce5-4637-87ff-d2596d1b6ec5\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Domains\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.domain\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"2934249f-fce5-4637-87ff-d2596d1b6ec5\",\"layerId\":\"c94400ee-a135-4a99-9693-5879d29f7aad\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"02f1732b-a981-4fba-8b27-b944f2f3c98c\",\"w\":6,\"x\":18,\"y\":0},\"panelIndex\":\"02f1732b-a981-4fba-8b27-b944f2f3c98c\",\"title\":\"Unique Domains [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-72aa700a-49b6-4a2f-b380-24ebe7124ec1\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"72aa700a-49b6-4a2f-b380-24ebe7124ec1\":{\"columnOrder\":[\"0389e125-4ae6-412a-a4af-2fa28f18c412\"],\"columns\":{\"0389e125-4ae6-412a-a4af-2fa28f18c412\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"abusech.url.blacklists.spamhaus_dbl: * and not abusech.url.blacklists.spamhaus_dbl:\\\"not listed\\\" \"},\"isBucketed\":false,\"label\":\"Indicators on Spamhaus DBL\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"0389e125-4ae6-412a-a4af-2fa28f18c412\",\"layerId\":\"72aa700a-49b6-4a2f-b380-24ebe7124ec1\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"8272f9f8-d835-4e4c-9e63-7cdbfb14d190\",\"w\":6,\"x\":24,\"y\":0},\"panelIndex\":\"8272f9f8-d835-4e4c-9e63-7cdbfb14d190\",\"title\":\"Spamhaus Count [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-4fe4b45f-8f52-4794-a386-8e3f6352aa25\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"4fe4b45f-8f52-4794-a386-8e3f6352aa25\":{\"columnOrder\":[\"e7b09852-9ec8-4a42-a3c7-faf909c1997a\"],\"columns\":{\"e7b09852-9ec8-4a42-a3c7-faf909c1997a\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"abusech.url.blacklists.surbl: * and not abusech.url.blacklists.surbl:\\\"not listed\\\" \"},\"isBucketed\":false,\"label\":\"Indicators on SURBL\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"e7b09852-9ec8-4a42-a3c7-faf909c1997a\",\"layerId\":\"4fe4b45f-8f52-4794-a386-8e3f6352aa25\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"7c8e2070-5b71-4eb5-ae52-e95ef5a17ba6\",\"w\":6,\"x\":30,\"y\":0},\"panelIndex\":\"7c8e2070-5b71-4eb5-ae52-e95ef5a17ba6\",\"title\":\"Surbl Counter [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-8f36a8c1-19df-4eba-8fa5-4f259d349375\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"8f36a8c1-19df-4eba-8fa5-4f259d349375\":{\"columnOrder\":[\"efd6bc64-ffcd-42fe-8218-0795986addc4\"],\"columns\":{\"efd6bc64-ffcd-42fe-8218-0795986addc4\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"abusech.url.url_status: \\\"online\\\" \"},\"isBucketed\":false,\"label\":\"URL's Online\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"efd6bc64-ffcd-42fe-8218-0795986addc4\",\"layerId\":\"8f36a8c1-19df-4eba-8fa5-4f259d349375\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"a96389e6-d361-457e-afc1-0dbdb35ee7e0\",\"w\":6,\"x\":36,\"y\":0},\"panelIndex\":\"a96389e6-d361-457e-afc1-0dbdb35ee7e0\",\"title\":\"URLs Online [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-471ad94f-c181-4ffb-a640-1666974adb33\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"471ad94f-c181-4ffb-a640-1666974adb33\":{\"columnOrder\":[\"8cd8034f-16bf-4a7a-b816-950498dc1f90\"],\"columns\":{\"8cd8034f-16bf-4a7a-b816-950498dc1f90\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"abusech.url.url_status:\\\"offline\\\" \"},\"isBucketed\":false,\"label\":\"URL's Offline\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"8cd8034f-16bf-4a7a-b816-950498dc1f90\",\"layerId\":\"471ad94f-c181-4ffb-a640-1666974adb33\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"b2904153-3afd-41a7-8f5f-01b76b8346ec\",\"w\":6,\"x\":42,\"y\":0},\"panelIndex\":\"b2904153-3afd-41a7-8f5f-01b76b8346ec\",\"title\":\"URLs Offline [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-0f63318a-a857-4d83-89ce-a94e2242b79e\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"0f63318a-a857-4d83-89ce-a94e2242b79e\":{\"columnOrder\":[\"df0791a6-247c-4434-a43a-fdea7577ca34\",\"77a48096-02aa-4b7a-8a7b-131fc38988bd\"],\"columns\":{\"77a48096-02aa-4b7a-8a7b-131fc38988bd\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"df0791a6-247c-4434-a43a-fdea7577ca34\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.url.scheme\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"77a48096-02aa-4b7a-8a7b-131fc38988bd\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.scheme\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"df0791a6-247c-4434-a43a-fdea7577ca34\"],\"layerId\":\"0f63318a-a857-4d83-89ce-a94e2242b79e\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"metric\":\"77a48096-02aa-4b7a-8a7b-131fc38988bd\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"ab7ab31c-e76f-4613-b17d-fdd909f17e0d\",\"w\":18,\"x\":7,\"y\":8},\"panelIndex\":\"ab7ab31c-e76f-4613-b17d-fdd909f17e0d\",\"title\":\"Percentage of URL Schema used [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-9fa49c4c-5544-472d-afce-e51d6a5687fe\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"9fa49c4c-5544-472d-afce-e51d6a5687fe\":{\"columnOrder\":[\"15e2b5ad-2040-4253-89a6-60f085c66f86\",\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\"],\"columns\":{\"15e2b5ad-2040-4253-89a6-60f085c66f86\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.url.extension\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.extension\"},\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"15e2b5ad-2040-4253-89a6-60f085c66f86\",\"15e2b5ad-2040-4253-89a6-60f085c66f86\"],\"layerId\":\"9fa49c4c-5544-472d-afce-e51d6a5687fe\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"treemap\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":31,\"i\":\"fda93ed1-72f0-4489-80b7-9e69d14f30aa\",\"w\":23,\"x\":25,\"y\":8},\"panelIndex\":\"fda93ed1-72f0-4489-80b7-9e69d14f30aa\",\"title\":\"Most Popular File Extensions [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-db89074c-e1fe-4091-bdb1-e42a36e82bac\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"db89074c-e1fe-4091-bdb1-e42a36e82bac\":{\"columnOrder\":[\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\",\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\"],\"columns\":{\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Domains\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.domain\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"columnId\":\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\",\"isTransposed\":false},{\"columnId\":\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\",\"isTransposed\":false}],\"layerId\":\"db89074c-e1fe-4091-bdb1-e42a36e82bac\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"8994501a-1550-4cf2-857f-d6b6491ffb62\",\"w\":18,\"x\":7,\"y\":23},\"panelIndex\":\"8994501a-1550-4cf2-857f-d6b6491ffb62\",\"title\":\"Most Popular Domains [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs AbuseCH] URLs", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_abusech-2457fb50-3bc3-11ec-ae8c-7d00429ad420", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c7c6e8dc-b649-434c-9650-8a1564d4d676:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c7c6e8dc-b649-434c-9650-8a1564d4d676:indexpattern-datasource-layer-88a112e1-6da1-49d3-9177-19f98280c200", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "73a752f9-bde5-4396-8ede-e9e77a37182d:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "73a752f9-bde5-4396-8ede-e9e77a37182d:indexpattern-datasource-layer-a6fa56f8-32fa-405d-8771-dade4fe75d62", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "02f1732b-a981-4fba-8b27-b944f2f3c98c:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "02f1732b-a981-4fba-8b27-b944f2f3c98c:indexpattern-datasource-layer-c94400ee-a135-4a99-9693-5879d29f7aad", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8272f9f8-d835-4e4c-9e63-7cdbfb14d190:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8272f9f8-d835-4e4c-9e63-7cdbfb14d190:indexpattern-datasource-layer-72aa700a-49b6-4a2f-b380-24ebe7124ec1", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "7c8e2070-5b71-4eb5-ae52-e95ef5a17ba6:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "7c8e2070-5b71-4eb5-ae52-e95ef5a17ba6:indexpattern-datasource-layer-4fe4b45f-8f52-4794-a386-8e3f6352aa25", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "a96389e6-d361-457e-afc1-0dbdb35ee7e0:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "a96389e6-d361-457e-afc1-0dbdb35ee7e0:indexpattern-datasource-layer-8f36a8c1-19df-4eba-8fa5-4f259d349375", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b2904153-3afd-41a7-8f5f-01b76b8346ec:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b2904153-3afd-41a7-8f5f-01b76b8346ec:indexpattern-datasource-layer-471ad94f-c181-4ffb-a640-1666974adb33", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ab7ab31c-e76f-4613-b17d-fdd909f17e0d:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ab7ab31c-e76f-4613-b17d-fdd909f17e0d:indexpattern-datasource-layer-0f63318a-a857-4d83-89ce-a94e2242b79e", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "fda93ed1-72f0-4489-80b7-9e69d14f30aa:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "fda93ed1-72f0-4489-80b7-9e69d14f30aa:indexpattern-datasource-layer-9fa49c4c-5544-472d-afce-e51d6a5687fe", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8994501a-1550-4cf2-857f-d6b6491ffb62:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8994501a-1550-4cf2-857f-d6b6491ffb62:indexpattern-datasource-layer-db89074c-e1fe-4091-bdb1-e42a36e82bac", + "type": "index-pattern" + }, + { + "id": "ti_abusech-73511520-3b32-11ec-ae50-2fdf1e96c6a6", + "name": "tag-ti_abusech-73511520-3b32-11ec-ae50-2fdf1e96c6a6", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_abusech/1.2.3/kibana/dashboard/ti_abusech-6a90c980-3b32-11ec-ae50-2fdf1e96c6a6.json b/packages/ti_abusech/1.2.3/kibana/dashboard/ti_abusech-6a90c980-3b32-11ec-ae50-2fdf1e96c6a6.json new file mode 100755 index 0000000000..c27db69f53 --- /dev/null +++ b/packages/ti_abusech/1.2.3/kibana/dashboard/ti_abusech-6a90c980-3b32-11ec-ae50-2fdf1e96c6a6.json @@ -0,0 +1,147 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about file type indicators from the AbuseCH integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"event.dataset\",\"negate\":false,\"params\":[\"ti_abusech.malware\",\"ti_abusech.malwarebazaar\",\"ti_abusech.url\"],\"type\":\"phrases\"},\"query\":{\"bool\":{\"minimum_should_match\":1,\"should\":[{\"match_phrase\":{\"event.dataset\":\"ti_abusech.malware\"}},{\"match_phrase\":{\"event.dataset\":\"ti_abusech.malwarebazaar\"}},{\"match_phrase\":{\"event.dataset\":\"ti_abusech.url\"}}]}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index\",\"key\":\"threat.indicator.type\",\"negate\":false,\"params\":{\"query\":\"file\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"threat.indicator.type\":\"file\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n[AbuseCH Overview](/app/dashboards#/view/ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6) \\n**[AbuseCH Files (This Page)](/app/dashboards#/view/ti_abusech-6a90c980-3b32-11ec-ae50-2fdf1e96c6a6)** \\n[AbuseCH URLs](/app/dashboards#/view/ti_abusech-2457fb50-3bc3-11ec-ae8c-7d00429ad420) \\n\\n[Integrations Page](/app/integrations/detail/ti_abusech/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is an overview of the different threat intelligence indicators with a **threat.indicator.type: file**.\\n\\nThe dashboard is made to provide general statistics and show the health of your indicators like hash type counters, popular domains, statistics about how many unique indicators are ingested and other relevant information.\",\"openLinksInNewTab\":false},\"title\":\"Files Navigation Textbox [Logs AbuseCH]\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":46,\"i\":\"09ba3dc0-e2e2-4799-b47f-bb919bf290a1\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"09ba3dc0-e2e2-4799-b47f-bb919bf290a1\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-98786f76-dac4-4fc7-9cad-8bfce17bd00d\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-2e2257a0-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"98786f76-dac4-4fc7-9cad-8bfce17bd00d\":{\"columnOrder\":[\"8622e147-406f-4711-8f68-e2425614106e\"],\"columns\":{\"8622e147-406f-4711-8f68-e2425614106e\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique File types\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.type\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"8622e147-406f-4711-8f68-e2425614106e\",\"layerId\":\"98786f76-dac4-4fc7-9cad-8bfce17bd00d\",\"layerType\":\"data\"}},\"title\":\"Unique File Types [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"31ea16d1-7591-42a7-b773-6fca00e5db14\",\"w\":5,\"x\":7,\"y\":0},\"panelIndex\":\"31ea16d1-7591-42a7-b773-6fca00e5db14\",\"title\":\"Unique File Types [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-b83c382d-fab9-4e60-a632-475e221cc20c\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-d888e3e0-3b38-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"b83c382d-fab9-4e60-a632-475e221cc20c\":{\"columnOrder\":[\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\"],\"columns\":{\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique MD5\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.md5\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\",\"layerId\":\"b83c382d-fab9-4e60-a632-475e221cc20c\",\"layerType\":\"data\"}},\"title\":\"Unique MD5 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98\",\"w\":6,\"x\":12,\"y\":0},\"panelIndex\":\"4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98\",\"title\":\"Unique MD5 [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-85ad73b3-3b76-49f1-ad20-6256b58918f8\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-28549810-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"85ad73b3-3b76-49f1-ad20-6256b58918f8\":{\"columnOrder\":[\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\"],\"columns\":{\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SHA1\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.sha1\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\",\"layerId\":\"85ad73b3-3b76-49f1-ad20-6256b58918f8\",\"layerType\":\"data\"}},\"title\":\"Unique SHA1 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea\",\"w\":6,\"x\":18,\"y\":0},\"panelIndex\":\"e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea\",\"title\":\"Unique SHA1 [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-49b7070a-f1d3-46e1-a980-2f6d6d130167\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-5d6111a0-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"49b7070a-f1d3-46e1-a980-2f6d6d130167\":{\"columnOrder\":[\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\"],\"columns\":{\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SHA256\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.sha256\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\",\"layerId\":\"49b7070a-f1d3-46e1-a980-2f6d6d130167\",\"layerType\":\"data\"}},\"title\":\"Unique SHA256 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"93e32abe-87e3-469e-b7e9-a7ef7dfa2cce\",\"w\":6,\"x\":24,\"y\":0},\"panelIndex\":\"93e32abe-87e3-469e-b7e9-a7ef7dfa2cce\",\"title\":\"Unique SHA256 [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-12768311-834b-48d5-8aad-d17d139c2ae5\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-52e62840-3b3a-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"12768311-834b-48d5-8aad-d17d139c2ae5\":{\"columnOrder\":[\"0255894e-dd88-4eb1-b21b-0cccecb2cd1b\"],\"columns\":{\"0255894e-dd88-4eb1-b21b-0cccecb2cd1b\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique TLSH\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.tlsh\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"0255894e-dd88-4eb1-b21b-0cccecb2cd1b\",\"layerId\":\"12768311-834b-48d5-8aad-d17d139c2ae5\",\"layerType\":\"data\"}},\"title\":\"Unique TLSH [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"b77edd3f-b171-4e61-b519-169b5aade031\",\"w\":6,\"x\":30,\"y\":0},\"panelIndex\":\"b77edd3f-b171-4e61-b519-169b5aade031\",\"title\":\"Unique TLSH [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-9070dc46-c06d-4b64-a2c5-7b6d4056a14d\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-4f8c9d00-3b3a-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"9070dc46-c06d-4b64-a2c5-7b6d4056a14d\":{\"columnOrder\":[\"f1bdf831-1fd2-4dc8-b1f9-c6e05d93b801\"],\"columns\":{\"f1bdf831-1fd2-4dc8-b1f9-c6e05d93b801\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Imphash\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.pe.imphash\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"f1bdf831-1fd2-4dc8-b1f9-c6e05d93b801\",\"layerId\":\"9070dc46-c06d-4b64-a2c5-7b6d4056a14d\",\"layerType\":\"data\"}},\"title\":\"Unique Imphash [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"f9eb44f8-6174-4b12-a8ca-5c542687006b\",\"w\":6,\"x\":36,\"y\":0},\"panelIndex\":\"f9eb44f8-6174-4b12-a8ca-5c542687006b\",\"title\":\"Unique Imphash [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-e27d5a76-ae51-44fa-b17e-e486bbc01b56\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-88ef6dd0-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"e27d5a76-ae51-44fa-b17e-e486bbc01b56\":{\"columnOrder\":[\"b5cdfd94-1e22-4673-8216-59aca2131761\"],\"columns\":{\"b5cdfd94-1e22-4673-8216-59aca2131761\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SSDEEP\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.ssdeep\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"b5cdfd94-1e22-4673-8216-59aca2131761\",\"layerId\":\"e27d5a76-ae51-44fa-b17e-e486bbc01b56\",\"layerType\":\"data\"}},\"title\":\"Unique SSDEEP [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"c9d59178-9b19-4255-8098-653cb30f3d09\",\"w\":6,\"x\":42,\"y\":0},\"panelIndex\":\"c9d59178-9b19-4255-8098-653cb30f3d09\",\"title\":\"Unique SSDEEP [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-118b51de-bd55-4ed6-b916-c939ad73b2c3\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"b8c9d8e0-3bb8-11ec-ae8c-7d00429ad420\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"118b51de-bd55-4ed6-b916-c939ad73b2c3\":{\"columnOrder\":[\"1ada77b6-5741-44ff-a00d-4653fca22f84\",\"dcc2a7b9-e44b-4681-ba02-bdea442ca9a5\"],\"columns\":{\"1ada77b6-5741-44ff-a00d-4653fca22f84\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top Countries\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"dcc2a7b9-e44b-4681-ba02-bdea442ca9a5\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.geo.country_iso_code\"},\"dcc2a7b9-e44b-4681-ba02-bdea442ca9a5\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Countries\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"1ada77b6-5741-44ff-a00d-4653fca22f84\"],\"layerId\":\"118b51de-bd55-4ed6-b916-c939ad73b2c3\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"metric\":\"dcc2a7b9-e44b-4681-ba02-bdea442ca9a5\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"pie\"}},\"title\":\"Top Countries [Logs AbuseCH]\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":19,\"i\":\"6189e979-9121-4247-9942-fa7a3cc3839c\",\"w\":20,\"x\":7,\"y\":8},\"panelIndex\":\"6189e979-9121-4247-9942-fa7a3cc3839c\",\"title\":\"Top Countries [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-4ee4a490-3b37-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8\":{\"columnOrder\":[\"06b603cb-c9fb-493a-9ca4-e6502ca12054\",\"de0e531b-dda7-461f-9783-3ab9267d202e\"],\"columns\":{\"06b603cb-c9fb-493a-9ca4-e6502ca12054\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.file.type\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"de0e531b-dda7-461f-9783-3ab9267d202e\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.file.type\"},\"de0e531b-dda7-461f-9783-3ab9267d202e\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"06b603cb-c9fb-493a-9ca4-e6502ca12054\"],\"layerId\":\"222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"de0e531b-dda7-461f-9783-3ab9267d202e\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"treemap\"}},\"title\":\"File Types [Logs AbuseCH]\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":19,\"i\":\"5f1d0cf1-c331-4495-99d5-5e80d023c482\",\"w\":21,\"x\":27,\"y\":8},\"panelIndex\":\"5f1d0cf1-c331-4495-99d5-5e80d023c482\",\"title\":\"File Types [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"enhancements\":{},\"savedVis\":{\"data\":{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Based on count\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Most seen indicator tags\",\"field\":\"abusech.malwarebazaar.tags\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":5},\"schema\":\"segment\",\"type\":\"terms\"}],\"searchSource\":{\"filter\":[],\"index\":\"logs-*\",\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"maxFontSize\":72,\"minFontSize\":18,\"orientation\":\"single\",\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"scale\":\"linear\",\"showLabel\":true},\"title\":\"Most seen indicator tags [Logs AbuseCH]\",\"type\":\"tagcloud\",\"uiState\":{}}},\"gridData\":{\"h\":19,\"i\":\"d1788a2e-c400-4d7b-9251-a8e5a806b6ef\",\"w\":20,\"x\":7,\"y\":27},\"panelIndex\":\"d1788a2e-c400-4d7b-9251-a8e5a806b6ef\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-06d9ac79-2055-437e-892c-de9ee07fe674\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"2d0c0ec0-3bbf-11ec-ae8c-7d00429ad420\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"06d9ac79-2055-437e-892c-de9ee07fe674\":{\"columnOrder\":[\"35f5321a-27f4-4076-9d1d-d326187f4689\",\"df062557-78a5-4a78-93f1-34583c809bc3\"],\"columns\":{\"35f5321a-27f4-4076-9d1d-d326187f4689\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"File Names\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"df062557-78a5-4a78-93f1-34583c809bc3\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.file.name\"},\"df062557-78a5-4a78-93f1-34583c809bc3\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"columnId\":\"35f5321a-27f4-4076-9d1d-d326187f4689\",\"isTransposed\":false},{\"columnId\":\"df062557-78a5-4a78-93f1-34583c809bc3\",\"isTransposed\":false}],\"layerId\":\"06d9ac79-2055-437e-892c-de9ee07fe674\",\"layerType\":\"data\"}},\"title\":\"Most popular file names [Logs AbuseCH]\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":19,\"i\":\"b733385b-14f8-4469-b777-86d0139cc56b\",\"w\":21,\"x\":27,\"y\":27},\"panelIndex\":\"b733385b-14f8-4469-b777-86d0139cc56b\",\"title\":\"Most popular file names [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs AbuseCH] Files", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_abusech-6a90c980-3b32-11ec-ae50-2fdf1e96c6a6", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "31ea16d1-7591-42a7-b773-6fca00e5db14:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "31ea16d1-7591-42a7-b773-6fca00e5db14:indexpattern-datasource-layer-98786f76-dac4-4fc7-9cad-8bfce17bd00d", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98:indexpattern-datasource-layer-b83c382d-fab9-4e60-a632-475e221cc20c", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea:indexpattern-datasource-layer-85ad73b3-3b76-49f1-ad20-6256b58918f8", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "93e32abe-87e3-469e-b7e9-a7ef7dfa2cce:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "93e32abe-87e3-469e-b7e9-a7ef7dfa2cce:indexpattern-datasource-layer-49b7070a-f1d3-46e1-a980-2f6d6d130167", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b77edd3f-b171-4e61-b519-169b5aade031:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b77edd3f-b171-4e61-b519-169b5aade031:indexpattern-datasource-layer-12768311-834b-48d5-8aad-d17d139c2ae5", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f9eb44f8-6174-4b12-a8ca-5c542687006b:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f9eb44f8-6174-4b12-a8ca-5c542687006b:indexpattern-datasource-layer-9070dc46-c06d-4b64-a2c5-7b6d4056a14d", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c9d59178-9b19-4255-8098-653cb30f3d09:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c9d59178-9b19-4255-8098-653cb30f3d09:indexpattern-datasource-layer-e27d5a76-ae51-44fa-b17e-e486bbc01b56", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6189e979-9121-4247-9942-fa7a3cc3839c:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6189e979-9121-4247-9942-fa7a3cc3839c:indexpattern-datasource-layer-118b51de-bd55-4ed6-b916-c939ad73b2c3", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "5f1d0cf1-c331-4495-99d5-5e80d023c482:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "5f1d0cf1-c331-4495-99d5-5e80d023c482:indexpattern-datasource-layer-222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d1788a2e-c400-4d7b-9251-a8e5a806b6ef:kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b733385b-14f8-4469-b777-86d0139cc56b:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b733385b-14f8-4469-b777-86d0139cc56b:indexpattern-datasource-layer-06d9ac79-2055-437e-892c-de9ee07fe674", + "type": "index-pattern" + }, + { + "id": "ti_abusech-73511520-3b32-11ec-ae50-2fdf1e96c6a6", + "name": "tag-ti_abusech-73511520-3b32-11ec-ae50-2fdf1e96c6a6", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_abusech/1.2.3/kibana/dashboard/ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6.json b/packages/ti_abusech/1.2.3/kibana/dashboard/ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6.json new file mode 100755 index 0000000000..103067d9d5 --- /dev/null +++ b/packages/ti_abusech/1.2.3/kibana/dashboard/ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6.json @@ -0,0 +1,112 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about indicators ingested from the AbuseCH integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"event.dataset\",\"negate\":false,\"params\":[\"ti_abusech.malware\",\"ti_abusech.malwarebazaar\",\"ti_abusech.url\"],\"type\":\"phrases\"},\"query\":{\"bool\":{\"minimum_should_match\":1,\"should\":[{\"match_phrase\":{\"event.dataset\":\"ti_abusech.malware\"}},{\"match_phrase\":{\"event.dataset\":\"ti_abusech.malwarebazaar\"}},{\"match_phrase\":{\"event.dataset\":\"ti_abusech.url\"}}]}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n**[AbuseCH Overview (This Page)](/app/dashboards#/view/ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6)** \\n[AbuseCH Files](/app/dashboards#/view/ti_abusech-6a90c980-3b32-11ec-ae50-2fdf1e96c6a6) \\n[AbuseCH URLs](/app/dashboards#/view/ti_abusech-2457fb50-3bc3-11ec-ae8c-7d00429ad420) \\n\\n[Integrations Page](/app/integrations/detail/ti_abusech/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is a health overview related to the AbuseCH integration.\\n\\nThe dashboard is made to provide general statistics and show the health of the ingestion of indicators from AbuseCH. \\n\\nIt shows how many parts has been enabled (URL, Malware and MalwareBazaar), the ingestion rates (by default it fetches new updates every 10 minutes) and provides a few filters for drilling down to specific indicator types retrieved from AbuseCH.\",\"openLinksInNewTab\":false},\"title\":\"Overview Textbox [Logs AbuseCH]\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":39,\"i\":\"555e9e6c-04e9-4022-b6df-bda07dde30c4\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"555e9e6c-04e9-4022-b6df-bda07dde30c4\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"enhancements\":{},\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"logs-*\",\"key\":\"event.dataset\",\"negate\":false,\"params\":[\"ti_abusech.malware\",\"ti_abusech.malwarebazaar\",\"ti_abusech.url\"],\"type\":\"phrases\"},\"query\":{\"bool\":{\"minimum_should_match\":1,\"should\":[{\"match_phrase\":{\"event.dataset\":\"ti_abusech.malware\"}},{\"match_phrase\":{\"event.dataset\":\"ti_abusech.malwarebazaar\"}},{\"match_phrase\":{\"event.dataset\":\"ti_abusech.url\"}}]}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"logs-*\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"controls\":[{\"fieldName\":\"event.dataset\",\"id\":\"1635779550157\",\"indexPatternRefName\":\"control_e971fedd-6afd-4d03-93ac-d0c751acc254_0_index_pattern\",\"label\":\"Feed Name\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"},{\"fieldName\":\"threat.indicator.provider\",\"id\":\"1635779603363\",\"indexPatternRefName\":\"control_e971fedd-6afd-4d03-93ac-d0c751acc254_1_index_pattern\",\"label\":\"Indicator Provider\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"},{\"fieldName\":\"threat.indicator.type\",\"id\":\"1635779625911\",\"indexPatternRefName\":\"control_e971fedd-6afd-4d03-93ac-d0c751acc254_2_index_pattern\",\"label\":\"Indicator Type\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"}],\"pinFilters\":false,\"updateFiltersOnChange\":false,\"useTimeFilter\":false},\"title\":\"Feed and Indicator Selector [Logs AbuseCH]\",\"type\":\"input_control_vis\",\"uiState\":{}}},\"gridData\":{\"h\":7,\"i\":\"e971fedd-6afd-4d03-93ac-d0c751acc254\",\"w\":41,\"x\":7,\"y\":0},\"panelIndex\":\"e971fedd-6afd-4d03-93ac-d0c751acc254\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"description\":\"\",\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-070f5dbc-7687-4e97-9a57-5542b401c13f\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-1d376820-3b22-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"070f5dbc-7687-4e97-9a57-5542b401c13f\":{\"columnOrder\":[\"1e352b49-3b83-44a6-98fe-8703d30f2517\"],\"columns\":{\"1e352b49-3b83-44a6-98fe-8703d30f2517\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Total Indicators\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"1e352b49-3b83-44a6-98fe-8703d30f2517\",\"layerId\":\"070f5dbc-7687-4e97-9a57-5542b401c13f\",\"layerType\":\"data\"}},\"title\":\"Total Indicators [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{}},\"gridData\":{\"h\":8,\"i\":\"d37eb797-f273-43c2-9004-b947891cce55\",\"w\":6,\"x\":7,\"y\":7},\"panelIndex\":\"d37eb797-f273-43c2-9004-b947891cce55\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-df8e3a91-700b-428a-a763-525076e4d3c8\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-49830790-3b27-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"df8e3a91-700b-428a-a763-525076e4d3c8\":{\"columnOrder\":[\"e4f78e2f-f0a7-4cc6-96d0-af607ffbf326\"],\"columns\":{\"e4f78e2f-f0a7-4cc6-96d0-af607ffbf326\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Total Datastreams\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"event.dataset\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"e4f78e2f-f0a7-4cc6-96d0-af607ffbf326\",\"layerId\":\"df8e3a91-700b-428a-a763-525076e4d3c8\",\"layerType\":\"data\"}},\"title\":\"Total Datastreams [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"6509dcc9-bb9c-4c1f-80e9-612f67ada340\",\"w\":6,\"x\":7,\"y\":15},\"panelIndex\":\"6509dcc9-bb9c-4c1f-80e9-612f67ada340\",\"title\":\"Total Datastreams [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-1e757dc0-2e6d-4bd2-aa38-7da9133ca960\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-ec1a2c50-3b30-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"1e757dc0-2e6d-4bd2-aa38-7da9133ca960\":{\"columnOrder\":[\"66779b74-d127-4249-93e4-b8cd9c39b91f\",\"2bbd31c6-4a58-43e5-bab9-de9e7c2d2242\"],\"columns\":{\"2bbd31c6-4a58-43e5-bab9-de9e7c2d2242\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"66779b74-d127-4249-93e4-b8cd9c39b91f\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.provider\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"2bbd31c6-4a58-43e5-bab9-de9e7c2d2242\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.provider\"}}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"2bbd31c6-4a58-43e5-bab9-de9e7c2d2242\"],\"layerId\":\"1e757dc0-2e6d-4bd2-aa38-7da9133ca960\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"bar_horizontal\",\"showGridlines\":false,\"splitAccessor\":\"66779b74-d127-4249-93e4-b8cd9c39b91f\"}],\"legend\":{\"isVisible\":true,\"position\":\"right\",\"showSingleSeries\":false},\"preferredSeriesType\":\"bar_horizontal\",\"title\":\"Empty XY chart\",\"valueLabels\":\"inside\",\"xTitle\":\"Providers\",\"yLeftExtent\":{\"mode\":\"full\"},\"yRightExtent\":{\"mode\":\"full\"},\"yTitle\":\"Count\"}},\"title\":\"Total Indicators per Provider [Logs AbuseCH]\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"86d83606-4176-44b1-b3f3-011d5b5b4b58\",\"w\":23,\"x\":13,\"y\":7},\"panelIndex\":\"86d83606-4176-44b1-b3f3-011d5b5b4b58\",\"title\":\"Total Indicators per Provider [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-682732d8-8691-4c5a-bf89-de8e30d71dfb\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-62801870-3b2a-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"682732d8-8691-4c5a-bf89-de8e30d71dfb\":{\"columnOrder\":[\"dd629c44-e7db-438e-8656-340b94fd30d8\",\"bad802d8-b23f-4ef4-8dcf-4e92170595a7\"],\"columns\":{\"bad802d8-b23f-4ef4-8dcf-4e92170595a7\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"dd629c44-e7db-438e-8656-340b94fd30d8\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Indicators\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"bad802d8-b23f-4ef4-8dcf-4e92170595a7\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":3},\"scale\":\"ordinal\",\"sourceField\":\"event.dataset\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"dd629c44-e7db-438e-8656-340b94fd30d8\"],\"layerId\":\"682732d8-8691-4c5a-bf89-de8e30d71dfb\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"legendPosition\":\"right\",\"metric\":\"bad802d8-b23f-4ef4-8dcf-4e92170595a7\",\"nestedLegend\":false,\"numberDisplay\":\"percent\",\"percentDecimals\":2,\"truncateLegend\":true}],\"shape\":\"donut\"}},\"title\":\"Total Indicators per Datastream [Logs AbuseCH]\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"f654c447-12d2-41a4-9091-06169af11ba5\",\"w\":12,\"x\":36,\"y\":7},\"panelIndex\":\"f654c447-12d2-41a4-9091-06169af11ba5\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-8c0613c0-3b25-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\":{\"columnOrder\":[\"4d7ca99c-8a53-4a7f-96db-409251c0e391\",\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\",\"0726d151-9edf-41cb-ab52-473ab27cf8b7\"],\"columns\":{\"0726d151-9edf-41cb-ab52-473ab27cf8b7\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"4d7ca99c-8a53-4a7f-96db-409251c0e391\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of event.dataset\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"0726d151-9edf-41cb-ab52-473ab27cf8b7\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":3},\"scale\":\"ordinal\",\"sourceField\":\"event.dataset\"},\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"interval\":\"30s\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"curveType\":\"CURVE_MONOTONE_X\",\"fittingFunction\":\"Zero\",\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"0726d151-9edf-41cb-ab52-473ab27cf8b7\"],\"layerId\":\"c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"splitAccessor\":\"4d7ca99c-8a53-4a7f-96db-409251c0e391\",\"xAccessor\":\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\"}],\"legend\":{\"isInside\":false,\"isVisible\":true,\"position\":\"bottom\",\"shouldTruncate\":false,\"showSingleSeries\":true},\"preferredSeriesType\":\"line\",\"title\":\"Empty XY chart\",\"valueLabels\":\"hide\",\"valuesInLegend\":false,\"xTitle\":\"Date\",\"yLeftExtent\":{\"mode\":\"full\"},\"yRightExtent\":{\"mode\":\"full\"},\"yTitle\":\"Total Indicators\"}},\"title\":\"Indicators ingested per Datastream [Logs AbuseCH]\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"aab4fac0-d39c-4521-aa9b-0a49d5938e9e\",\"w\":41,\"x\":7,\"y\":23},\"panelIndex\":\"aab4fac0-d39c-4521-aa9b-0a49d5938e9e\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs AbuseCH] Overview", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_abusech-c0d8d1f0-3b20-11ec-ae50-2fdf1e96c6a6", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:control_e971fedd-6afd-4d03-93ac-d0c751acc254_0_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:control_e971fedd-6afd-4d03-93ac-d0c751acc254_1_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:control_e971fedd-6afd-4d03-93ac-d0c751acc254_2_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d37eb797-f273-43c2-9004-b947891cce55:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d37eb797-f273-43c2-9004-b947891cce55:indexpattern-datasource-layer-070f5dbc-7687-4e97-9a57-5542b401c13f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6509dcc9-bb9c-4c1f-80e9-612f67ada340:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6509dcc9-bb9c-4c1f-80e9-612f67ada340:indexpattern-datasource-layer-df8e3a91-700b-428a-a763-525076e4d3c8", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "86d83606-4176-44b1-b3f3-011d5b5b4b58:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "86d83606-4176-44b1-b3f3-011d5b5b4b58:indexpattern-datasource-layer-1e757dc0-2e6d-4bd2-aa38-7da9133ca960", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f654c447-12d2-41a4-9091-06169af11ba5:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f654c447-12d2-41a4-9091-06169af11ba5:indexpattern-datasource-layer-682732d8-8691-4c5a-bf89-de8e30d71dfb", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "aab4fac0-d39c-4521-aa9b-0a49d5938e9e:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "aab4fac0-d39c-4521-aa9b-0a49d5938e9e:indexpattern-datasource-layer-c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7", + "type": "index-pattern" + }, + { + "id": "ti_abusech-73511520-3b32-11ec-ae50-2fdf1e96c6a6", + "name": "tag-ti_abusech-73511520-3b32-11ec-ae50-2fdf1e96c6a6", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_abusech/1.2.3/kibana/tag/ti_abusech-73511520-3b32-11ec-ae50-2fdf1e96c6a6.json b/packages/ti_abusech/1.2.3/kibana/tag/ti_abusech-73511520-3b32-11ec-ae50-2fdf1e96c6a6.json new file mode 100755 index 0000000000..7cf7c3514a --- /dev/null +++ b/packages/ti_abusech/1.2.3/kibana/tag/ti_abusech-73511520-3b32-11ec-ae50-2fdf1e96c6a6.json @@ -0,0 +1,14 @@ +{ + "attributes": { + "color": "#6092C0", + "description": "", + "name": "AbuseCH" + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_abusech-73511520-3b32-11ec-ae50-2fdf1e96c6a6", + "migrationVersion": { + "tag": "8.0.0" + }, + "references": [], + "type": "tag" +} \ No newline at end of file diff --git a/packages/ti_abusech/1.2.3/manifest.yml b/packages/ti_abusech/1.2.3/manifest.yml new file mode 100755 index 0000000000..8368a0f80b --- /dev/null +++ b/packages/ti_abusech/1.2.3/manifest.yml @@ -0,0 +1,26 @@ +name: ti_abusech +title: AbuseCH +version: 1.2.3 +release: ga +description: Collect threat intelligence from AbuseCH API with Elastic Agent. +type: integration +format_version: 1.0.0 +license: basic +categories: [security] +conditions: + kibana.version: ^8.0.0 +icons: + - src: /img/abusech2.svg + title: AbuseCH + size: 512x512 + type: image/svg+xml +policy_templates: + - name: ti_abusech + title: AbuseCH API + description: Collect threat intelligence from the AbuseCH API + inputs: + - type: httpjson + title: "Collect AbuseCH logs via API" + description: "Collect AbuseCH logs via API" +owner: + github: elastic/security-external-integrations diff --git a/packages/ti_anomali/1.2.3/changelog.yml b/packages/ti_anomali/1.2.3/changelog.yml new file mode 100755 index 0000000000..4dc68d72e1 --- /dev/null +++ b/packages/ti_anomali/1.2.3/changelog.yml @@ -0,0 +1,56 @@ +# newer versions go on top +- version: "1.2.3" + changes: + - description: Add mapping for event.created + type: enhancement + link: https://github.com/elastic/integrations/pull/3042 +- version: "1.2.2" + changes: + - description: Add documentation for multi-fields + type: enhancement + link: https://github.com/elastic/integrations/pull/2916 +- version: "1.2.1" + changes: + - description: Adding first interval to Anomali Limo policy UI + type: bugfix + link: https://github.com/elastic/integrations/pull/2677 +- version: "1.2.0" + changes: + - description: Update to ECS 8.0 + type: enhancement + link: https://github.com/elastic/integrations/pull/2446 +- version: "1.1.3" + changes: + - description: Regenerate test files using the new GeoIP database + type: bugfix + link: https://github.com/elastic/integrations/pull/2339 +- version: "1.1.2" + changes: + - description: Change test public IPs to the supported subset + type: bugfix + link: https://github.com/elastic/integrations/pull/2327 +- version: "1.1.1" + changes: + - description: Fixing typo in base-fields.yml + type: enhancement + link: https://github.com/elastic/integrations/pull/2330 +- version: "1.1.0" + changes: + - description: Adding dashboards and threat.feed ECS fields + type: enhancement + link: https://github.com/elastic/integrations/pull/2292 +- version: "1.0.2" + changes: + - description: Bump minimum version + type: enhancement + link: https://github.com/elastic/integrations/pull/2063 +- version: "1.0.1" + changes: + - description: Update title and description. + type: enhancement + link: https://github.com/elastic/integrations/pull/1997 +- version: "1.0.0" + changes: + - description: Initial release + type: enhancement + link: https://github.com/elastic/integrations/pull/1911 diff --git a/packages/ti_anomali/1.2.3/data_stream/limo/agent/stream/httpjson.yml.hbs b/packages/ti_anomali/1.2.3/data_stream/limo/agent/stream/httpjson.yml.hbs new file mode 100755 index 0000000000..eabe1ecfca --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/limo/agent/stream/httpjson.yml.hbs @@ -0,0 +1,60 @@ +config_version: "2" +interval: {{interval}} +request.method: "GET" + +auth.basic.user: guest +auth.basic.password: guest + +{{#if url}} +request.url: {{url}} +{{/if}} +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} +{{#if http_client_timeout}} +request.timeout: {{http_client_timeout}} +{{/if}} +{{#if proxy_url}} +request.proxy_url: {{proxy_url}} +{{/if}} +request.redirect.forward_headers: true + +request.transforms: + - set: + target: header.Content-Type + value: application/vnd.oasis.taxii+json + - set: + target: header.Accept + value: application/vnd.oasis.taxii+json + - set: + target: header.Range + value: items 0-10000 + - set: + target: url.params.match[type] + value: indicator + - set: + target: url.params.added_after + value: '[[.cursor.timestamp]]' + default: '[[ formatDate (now (parseDuration "-{{first_interval}}")) "2006-01-02T15:04:05.000Z" ]]' + +response.split: + target: body.objects + +cursor: + timestamp: + value: '[[ .last_response.header.Get "X-TAXII-Date-Added-Last" ]]' + +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/ti_anomali/1.2.3/data_stream/limo/elasticsearch/ingest_pipeline/default.yml b/packages/ti_anomali/1.2.3/data_stream/limo/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..2e03b4daa0 --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/limo/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,180 @@ +--- +description: Pipeline for parsing Anomali Limo indicators +processors: + #################### + # Event ECS fields # + #################### + - set: + field: event.ingested + value: "{{_ingest.timestamp}}" + - set: + field: ecs.version + value: "8.0.0" + - set: + field: event.kind + value: enrichment + - set: + field: event.category + value: threat + - set: + field: event.type + value: indicator + + ###################### + # General ECS fields # + ###################### + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: anomali.limo + - fingerprint: + fields: + - anomali.limo.id + target_field: "_id" + ignore_missing: true + + ##################### + # Threat ECS Fields # + ##################### + ## File indicator operations + - date: + field: anomali.limo.created + formats: + - "yyyy-MM-dd'T'HH:mm:ssz" + - "yyyy-MM-dd'T'HH:mm:ssZ" + - "yyyy-MM-dd'T'HH:mm:ss.Sz" + - "yyyy-MM-dd'T'HH:mm:ss.SZ" + - "yyyy-MM-dd'T'HH:mm:ss.SSz" + - "yyyy-MM-dd'T'HH:mm:ss.SSZ" + - "yyyy-MM-dd'T'HH:mm:ss.SSSz" + - "yyyy-MM-dd'T'HH:mm:ss.SSSZ" + if: "ctx.anomali?.limo?.created != null" + - date: + field: anomali.limo.modified + target_field: anomali.limo.modified + formats: + - "yyyy-MM-dd'T'HH:mm:ssz" + - "yyyy-MM-dd'T'HH:mm:ssZ" + - "yyyy-MM-dd'T'HH:mm:ss.Sz" + - "yyyy-MM-dd'T'HH:mm:ss.SZ" + - "yyyy-MM-dd'T'HH:mm:ss.SSz" + - "yyyy-MM-dd'T'HH:mm:ss.SSZ" + - "yyyy-MM-dd'T'HH:mm:ss.SSSz" + - "yyyy-MM-dd'T'HH:mm:ss.SSSZ" + if: "ctx.anomali?.limo?.modified != null" + - date: + field: anomali.limo.valid_from + target_field: threat.indicator.first_seen + formats: + - "yyyy-MM-dd'T'HH:mm:ssz" + - "yyyy-MM-dd'T'HH:mm:ssZ" + - "yyyy-MM-dd'T'HH:mm:ss.Sz" + - "yyyy-MM-dd'T'HH:mm:ss.SZ" + - "yyyy-MM-dd'T'HH:mm:ss.SSz" + - "yyyy-MM-dd'T'HH:mm:ss.SSZ" + - "yyyy-MM-dd'T'HH:mm:ss.SSSz" + - "yyyy-MM-dd'T'HH:mm:ss.SSSZ" + if: "ctx.anomali?.limo?.valid_from != null" + - grok: + field: anomali.limo.pattern + patterns: + - "^\\[%{DATA:_tmp.threattype}:value%{SPACE}=%{SPACE}'%{DATA:_tmp.threatvalue}'\\]" + if: ctx.anomali?.limo?.pattern != null + - rename: + field: _tmp.threattype + target_field: threat.indicator.type + ignore_missing: true + - rename: + field: _tmp.threatvalue + target_field: threat.indicator.ip + ignore_missing: true + if: "['ipv4-addr', 'ipv6-addr'].contains(ctx.threat?.indicator?.type)" + - uri_parts: + field: _tmp.threatvalue + target_field: threat.indicator.url + keep_original: true + remove_if_successful: true + if: ctx.threat?.indicator?.type == 'url' + - set: + field: threat.indicator.url.full + value: "{{{threat.indicator.url.original}}}" + ignore_empty_value: true + - rename: + field: _tmp.threatvalue + target_field: threat.indicator.email.address + ignore_missing: true + if: ctx.threat?.indicator?.type == 'email-addr' + - rename: + field: _tmp.threatvalue + target_field: threat.indicator.url.domain + ignore_missing: true + if: ctx.threat?.indicator?.type == 'domain-name' + - set: + field: threat.indicator.type + value: unknown + if: ctx.threat?.indicator?.type == null + - foreach: + field: anomali.limo.labels + ignore_missing: true + processor: + append: + field: tags + value: "{{_ingest._value}}" + allow_duplicates: false + - grok: + field: anomali.limo.description + patterns: + - "^%{GREEDYDATA}Source: %{GREEDYDATA:threat.indicator.provider}" + ignore_missing: true + ignore_failure: true + ###################### + # Cleanup processors # + ###################### + - script: + lang: painless + if: ctx?.threatintel != null + source: | + void handleMap(Map map) { + for (def x : map.values()) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + map.values().removeIf(v -> v == null); + } + void handleList(List list) { + for (def x : list) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + } + handleMap(ctx); + - remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_failure: true + ignore_missing: true + - remove: + field: + - anomali.limo.pattern + ignore_missing: true + if: ctx.threat?.indicator?.pattern != null && ctx.threat?.indicator?.pattern != 'unknown' + - remove: + field: + - anomali.limo.created + - anomali.limo.pattern + - message + - _tmp + ignore_missing: true +on_failure: + - set: + field: error.message + value: "{{ _ingest.on_failure_message }}" diff --git a/packages/ti_anomali/1.2.3/data_stream/limo/fields/agent.yml b/packages/ti_anomali/1.2.3/data_stream/limo/fields/agent.yml new file mode 100755 index 0000000000..da4e652c53 --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/limo/fields/agent.yml @@ -0,0 +1,198 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + diff --git a/packages/ti_anomali/1.2.3/data_stream/limo/fields/base-fields.yml b/packages/ti_anomali/1.2.3/data_stream/limo/fields/base-fields.yml new file mode 100755 index 0000000000..126260c5af --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/limo/fields/base-fields.yml @@ -0,0 +1,28 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset name. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module + value: ti_anomali +- name: event.dataset + type: constant_keyword + description: Event dataset + value: ti_anomali.limo +- name: threat.feed.name + type: constant_keyword + description: Display friendly feed name + value: Anomali Limo +- name: threat.feed.dashboard_id + type: constant_keyword + description: Dashboard ID used for Kibana CTI UI + value: ti_anomali-96fe1e60-4261-11ec-b7be-d3026acdf1cf +- name: "@timestamp" + type: date + description: Event timestamp. diff --git a/packages/ti_anomali/1.2.3/data_stream/limo/fields/beats.yml b/packages/ti_anomali/1.2.3/data_stream/limo/fields/beats.yml new file mode 100755 index 0000000000..cb44bb2944 --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/limo/fields/beats.yml @@ -0,0 +1,12 @@ +- name: input.type + type: keyword + description: Type of Filebeat input. +- name: log.flags + type: keyword + description: Flags for the log file. +- name: log.offset + type: long + description: Offset of the entry in the log file. +- name: log.file.path + type: keyword + description: Path to the log file. diff --git a/packages/ti_anomali/1.2.3/data_stream/limo/fields/ecs.yml b/packages/ti_anomali/1.2.3/data_stream/limo/fields/ecs.yml new file mode 100755 index 0000000000..339e97eba8 --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/limo/fields/ecs.yml @@ -0,0 +1,133 @@ +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: |- + For log events the message field contains the log message, optimized for viewing in a log viewer. + For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. + If multiple messages exist, they can be combined into one message. + name: message + type: match_only_text +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: Error message. + name: error.message + type: match_only_text +- description: |- + This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. + `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. + This field is an array. This will allow proper categorization of some events that fall in multiple categories. + name: event.category + type: keyword +- description: |- + Timestamp when an event arrived in the central data store. + This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. + In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`. + name: event.ingested + type: date +- description: |- + This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. + `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. + The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. + name: event.kind + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. + `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. + This field is an array. This will allow proper categorization of some events that fall in multiple event types. + name: event.type + type: keyword +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: |- + event.created contains the date/time when the event was first read by an agent, or by your pipeline. + This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. + In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. + In case the two timestamps are identical, @timestamp should be used. + name: event.created + type: date +- description: The date and time when intelligence source first reported sighting this indicator. + name: threat.indicator.first_seen + type: date +- description: |- + Type of indicator as represented by Cyber Observable in STIX 2.0. + Recommended values: + * autonomous-system + * artifact + * directory + * domain-name + * email-addr + * file + * ipv4-addr + * ipv6-addr + * mac-addr + * mutex + * port + * process + * software + * url + * user-account + * windows-registry-key + * x509-certificate + name: threat.indicator.type + type: keyword +- description: Identifies a threat indicator as an IP address (irrespective of direction). + name: threat.indicator.ip + type: ip +- description: |- + Domain of the url, such as "www.elastic.co". + In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. + If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. + name: threat.indicator.url.domain + type: keyword +- description: If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.full + type: wildcard +- description: |- + The field contains the file extension from the original request url, excluding the leading dot. + The file extension is only set if it exists, as not every url has a file extension. + The leading period must not be included. For example, the value must be "png", not ".png". + Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). + name: threat.indicator.url.extension + type: keyword +- description: |- + Unmodified original url as seen in the event source. + Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. + This field is meant to represent the URL as it was observed, complete or not. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.original + type: wildcard +- description: Path of the request, such as "/search". + name: threat.indicator.url.path + type: wildcard +- description: Port of the request, such as 443. + name: threat.indicator.url.port + type: long +- description: |- + Scheme of the request, such as "https". + Note: The `:` is not part of the scheme. + name: threat.indicator.url.scheme + type: keyword +- description: |- + The query field describes the query string of the request, such as "q=elasticsearch". + The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. + name: threat.indicator.url.query + type: keyword +- description: Identifies a threat indicator as an email address (irrespective of direction). + name: threat.indicator.email.address + type: keyword +- description: The name of the indicator's provider. + name: threat.indicator.provider + type: keyword diff --git a/packages/ti_anomali/1.2.3/data_stream/limo/fields/fields.yml b/packages/ti_anomali/1.2.3/data_stream/limo/fields/fields.yml new file mode 100755 index 0000000000..1b2ca9057f --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/limo/fields/fields.yml @@ -0,0 +1,73 @@ +- name: anomali.limo + type: group + description: > + Fields for Anomali Threat Intel + + fields: + - name: id + type: keyword + description: > + The ID of the indicator. + + - name: name + type: keyword + description: > + The name of the indicator. + + - name: pattern + type: keyword + description: > + The pattern ID of the indicator. + + - name: valid_from + type: date + description: > + When the indicator was first found or is considered valid. + + - name: modified + type: date + description: > + When the indicator was last modified + + - name: labels + type: keyword + description: > + The labels related to the indicator + + - name: indicator + type: keyword + description: > + The value of the indicator, for example if the type is domain, this would be the value. + + - name: description + type: keyword + description: > + A description of the indicator. + + - name: title + type: keyword + description: > + Title describing the indicator. + + - name: content + type: keyword + description: > + Extra text or descriptive content related to the indicator. + + - name: type + type: keyword + description: > + The indicator type, can for example be "domain, email, FileHash-SHA256". + + - name: object_marking_refs + type: keyword + description: >- + The STIX reference object. + - name: definition_type + type: keyword + description: >- + Indicator tlp/definition type + - name: definition.tlp + type: keyword + description: >- + Indicator tlp/definition value diff --git a/packages/ti_anomali/1.2.3/data_stream/limo/manifest.yml b/packages/ti_anomali/1.2.3/data_stream/limo/manifest.yml new file mode 100755 index 0000000000..278b84f0e7 --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/limo/manifest.yml @@ -0,0 +1,76 @@ +type: logs +title: Anomali Limo +streams: + - input: httpjson + vars: + - name: url + type: text + title: Anomali Limo API URL + multi: false + required: true + show_user: false + default: https://limo.anomali.com/api/v1/taxii2/feeds/collections/41/objects + - name: http_client_timeout + type: text + title: HTTP Client Timeout + multi: false + required: false + show_user: false + default: 30s + - name: proxy_url + type: text + title: Proxy URL + multi: false + required: false + show_user: false + description: URL to proxy connections in the form of http[s]://:@: + - name: interval + type: text + title: Interval + multi: false + required: true + show_user: true + default: 10m + - name: initial_interval + type: text + title: Initial Interval + multi: false + required: true + show_user: true + default: 120h + description: How far back to look for indicators the first time the agent is started. + - name: ssl + type: yaml + title: SSL + multi: false + required: false + show_user: true + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - anomali-limo + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + template_path: httpjson.yml.hbs + title: Anomali Limo API + description: Collect indicators from the Anomali Limo API diff --git a/packages/ti_anomali/1.2.3/data_stream/limo/sample_event.json b/packages/ti_anomali/1.2.3/data_stream/limo/sample_event.json new file mode 100755 index 0000000000..5a4d3e2273 --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/limo/sample_event.json @@ -0,0 +1,56 @@ +{ + "@timestamp": "2017-01-20T00:00:00.000Z", + "agent": { + "ephemeral_id": "29217578-e780-4c3e-912d-0f35ce981fb4", + "id": "6b916c32-9ec1-4b93-a910-81540b3df79b", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "anomali": { + "limo": { + "definition": { + "tlp": "green" + }, + "definition_type": "tlp", + "id": "marking-definition--34098fce-860f-48ae-8e50-ebd3cc5e41da", + "type": "marking-definition" + } + }, + "data_stream": { + "dataset": "ti_anomali.limo", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "6b916c32-9ec1-4b93-a910-81540b3df79b", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "created": "2022-04-11T08:51:02.140Z", + "dataset": "ti_anomali.limo", + "ingested": "2022-04-11T08:51:03Z", + "kind": "enrichment", + "original": "{\"created\":\"2017-01-20T00:00:00.000Z\",\"definition\":{\"tlp\":\"green\"},\"definition_type\":\"tlp\",\"id\":\"marking-definition--34098fce-860f-48ae-8e50-ebd3cc5e41da\",\"type\":\"marking-definition\"}", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "preserve_original_event", + "forwarded", + "anomali-limo" + ], + "threat": { + "indicator": { + "type": "unknown" + } + } +} \ No newline at end of file diff --git a/packages/ti_anomali/1.2.3/data_stream/threatstream/agent/stream/http_endpoint.yml.hbs b/packages/ti_anomali/1.2.3/data_stream/threatstream/agent/stream/http_endpoint.yml.hbs new file mode 100755 index 0000000000..a38e42a199 --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/threatstream/agent/stream/http_endpoint.yml.hbs @@ -0,0 +1,47 @@ +type: http_endpoint +enabled: true + +{{#if listen_address}} +listen_address: {{listen_address}} +{{/if}} +{{#if listen_port}} +listen_port: {{listen_port}} +{{/if}} +{{#if url}} +url: {{url}} +{{/if}} +prefix: json +{{#if content_type}} +content_type: {{content_type}} +{{/if}} + +{{#if secret}} +hmac: + header: X-Filebeat-Signature + key: {{secret}} + type: sha256 + prefix: sha256= +{{/if}} + +{{#if ssl}} +ssl: {{ssl}} +{{/if}} + +{{#if preserve_original_event}} +preserve_original_event: true +{{/if}} + +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/ti_anomali/1.2.3/data_stream/threatstream/elasticsearch/ingest_pipeline/default.yml b/packages/ti_anomali/1.2.3/data_stream/threatstream/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..9d7e1297cb --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/threatstream/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,431 @@ +--- +description: Pipeline for parsing Anomali ThreatStream +processors: + # + # Set basic ECS fields. + # + - set: + field: event.ingested + value: "{{{ _ingest.timestamp }}}" + - set: + field: ecs.version + value: "8.0.0" + - fingerprint: + fields: + - event.dataset + - json.id + target_field: "_id" + ignore_missing: true + - set: + field: event.kind + value: enrichment + - set: + field: event.category + value: threat + - set: + field: event.type + value: indicator + + # + # Map itype field to STIX 2.0 Cyber Observable values (threat.indicator.type). + # + - script: + lang: painless + if: "ctx.json.itype != null" + description: > + Map itype field to STIX 2.0 Cyber Observable values (threat.indicator.type). + params: + actor_ip: ipv4-addr + adware_domain: domain-name + anon_proxy: ipv4-addr + anon_vpn: ipv4-addr + apt_domain: domain-name + apt_email: email-addr + apt_ip: ipv4-addr + apt_md5: file + apt_subject: email + apt_ua: url + apt_url: url + bot_ip: ipv4-addr + brute_ip: ipv4-addr + c2_domain: domain-name + c2_ip: ipv4-addr + c2_url: url + comm_proxy_domain: domain-name + comm_proxy_ip: ipv4-addr + compromised_domain: domain-name + compromised_ip: ipv4-addr + compromised_url: url + crypto_hash: file + crypto_ip: ipv4-addr + crypto_pool: domain + crypto_url: url + crypto_wallet: file + ddos_ip: ipv4-addr + disposable_email_domain: domain-name + dyn_dns: domain-name + exfil_domain: domain-name + exfil_ip: ipv4-addr + exfil_url: url + exploit_domain: domain-name + exploit_ip: ipv4-addr + exploit_url: url + free_email_domain: domain-name + geolocation_url: url + hack_tool: file + i2p_ip: ipv4-addr + ipcheck_url: url + mal_domain: domain-name + mal_email: email-addr + mal_ip: ipv4-addr + mal_md5: file + mal_sslcert_sh1: x509-certificate + mal_sslcert_sha1: x509-certificate + mal_ua: url + mal_url: url + p2pcnc: ipv4-addr + parked_domain: domain-name + parked_ip: ipv4-addr + parked_url: url + pastesite_url: url + phish_domain: domain-name + phish_email: email-addr + phish_ip: ipv4-addr + phish_url: url + proxy_ip: ipv4-addr + scan_ip: ipv4-addr + sinkhole_domain: domain-name + sinkhole_ip: ipv4-addr + spam_domain: domain-name + spam_email: email-addr + spam_ip: ipv4-addr + spam_url: url + speedtest_url: url + ssh_ip: ipv4-addr + suppress: suppress + suspicious_domain: domain-name + suspicious_email: email-addr + suspicious_ip: ipv4-addr + suspicious_reg_email: email-addr + suspicious_url: url + tor_ip: ipv4-addr + torrent_tracker_url: url + vpn_domain: domain-name + vps_ip: ipv4-addr + whois_bulk_reg_email: email-addr + whois_privacy_domain: domain-name + whois_privacy_email: email-addr + source: > + String mapping = params[ctx.json.itype]; + if (mapping != null) { + ctx["threatintel_indicator_type"] = mapping; + } + on_failure: + - append: + field: error.message + value: 'Unable to determine indicator type from "{{{ json.itype }}}": {{{ _ingest.on_failure_message }}}' + + - rename: + field: threatintel_indicator_type + target_field: threat.indicator.type + ignore_missing: true + + # + # Detect ipv6 for ipv4-addr types. + # + - set: + field: threat.indicator.type + value: ipv6-addr + if: 'ctx.threat?.indicator?.type == "ipv4-addr" && ctx.json?.srcip != null && ctx.json.srcip.contains(":")' + + # + # Map first and last seen dates. + # + - date: + field: json.date_first + target_field: threat.indicator.first_seen + formats: + - ISO8601 + if: "ctx.json?.date_first != null" + on_failure: + - append: + field: error.message + value: 'Error parsing date_first field value "{{{ json.date_first }}}": {{{ _ingest.on_failure_message }}}' + + - date: + field: json.date_last + target_field: threat.indicator.last_seen + formats: + - ISO8601 + if: "ctx.json?.date_last != null" + on_failure: + - append: + field: error.message + value: 'Error parsing date_last field value "{{{ json.date_last }}}": {{{ _ingest.on_failure_message }}}' + + # + # Map IP geolocation fields. + # + - convert: + field: json.lat + target_field: threat.indicator.geo.location.lat + type: double + if: "ctx.json?.lat != null && ctx.json?.lon != null" + on_failure: + - append: + field: error.message + value: 'Cannot convert lat field "{{{ json.lat }}}" to double: {{{ _ingest.on_failure_message }}}' + - convert: + field: json.lon + target_field: threat.indicator.geo.location.lon + type: double + if: "ctx.json?.lat != null && ctx.json?.lon != null" + on_failure: + - append: + field: error.message + value: 'Cannot convert lon field "{{{ json.lon }}}" to double: {{{ _ingest.on_failure_message }}}' + + # + # Map classification field to Traffic Light Protocol (TLP). + # Currently: + # public => White ("Disclosure is not limited.") + # private => Amber ("Limited disclosure, restricted to participants’ organizations."). + # + - append: + field: threat.indicator.marking.tlp + value: Amber + if: 'ctx.json?.classification == "private"' + - append: + field: threat.indicator.marking.tlp + value: White + if: 'ctx.json?.classification == "public"' + + # + # Convert confidence field (-1..100) to ECS confidence (0..10). + # + - script: + lang: painless + if: ctx.json?.confidence != null + description: > + Normalize confidence level. + source: > + def value = ctx.json.confidence; + if (value <= 0.0 || value > 100.0) { + ctx["threatintel_indicator_confidence"] = "None"; + return; + } + if (value >= 1.0 && value <= 29.0) { + ctx["threatintel_indicator_confidence"] = "Low"; + return; + } + if (value >= 30.0 && value <= 69.0) { + ctx["threatintel_indicator_confidence"] = "Med"; + return; + } + if (value >= 70 && value <= 100) { + ctx["threatintel_indicator_confidence"] = "High"; + return; + } + on_failure: + - append: + field: error.message + value: "failed to normalize confidence value `{{{ json.confidence }}}`: {{{ _ingest.on_failure_message }}}" + + - rename: + field: threatintel_indicator_confidence + target_field: threat.indicator.confidence + ignore_missing: true + + # + # Convert asn field. + # + - convert: + field: json.asn + target_field: threat.indicator.as.number + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: "Cannot convert asn field `{{{ json.asn }}}` to long: {{{ _ingest.on_failure_message }}}" + + - rename: + field: json.org + target_field: threat.indicator.as.organization.name + ignore_missing: true + + - rename: + field: json.email + target_field: threat.indicator.email.address + ignore_missing: true + + - rename: + field: json.srcip + target_field: threat.indicator.ip + ignore_missing: true + + - uri_parts: + field: json.url + target_field: threat.indicator.url + keep_original: true + remove_if_successful: true + if: "ctx.json?.url != null" + on_failure: + - append: + field: error.message + value: "Cannot parse url field `{{{ json.url }}}`: {{{ _ingest.on_failure_message }}}" + - set: + field: threat.indicator.url.full + value: "{{{threat.indicator.url.original}}}" + ignore_empty_value: true + - rename: + field: json.domain + target_field: threat.indicator.url.domain + ignore_missing: true + if: ctx.threat?.indicator?.url?.domain == null + - rename: + field: json.country + target_field: threat.indicator.geo.country_iso_code + ignore_missing: true + + # + # md5 field can actually contain different kinds of hash. + # Map to file.hash.* depending on hash length. + # + - rename: + field: json.md5 + target_field: threat.indicator.file.hash.md5 + if: "ctx.json?.md5 != null && ctx.json.md5.length() == 32" + + - rename: + field: json.md5 + target_field: threat.indicator.file.hash.sha1 + if: "ctx.json?.md5 != null && ctx.json.md5.length() == 40" + + - rename: + field: json.md5 + target_field: threat.indicator.file.hash.sha256 + if: "ctx.json?.md5 != null && ctx.json.md5.length() == 64" + + - rename: + field: json.md5 + target_field: threat.indicator.file.hash.sha512 + if: "ctx.json?.md5 != null && ctx.json.md5.length() == 128" + + - rename: + field: json.source + target_field: threat.indicator.provider + ignore_missing: true + + # + # Map field severity to event severity as follows: + # low => 3 + # medium => 5 + # high => 7 + # very-high => 9 + # + - set: + field: event.severity + value: 3 + if: 'ctx.json?.severity == "low"' + + - set: + field: event.severity + value: 5 + if: 'ctx.json?.severity == "medium"' + + - set: + field: event.severity + value: 7 + if: 'ctx.json?.severity == "high"' + + - set: + field: event.severity + value: 9 + if: 'ctx.json?.severity == "very-high"' + + # + # Field trusted_circles_ids is a comma-separated string + # that can contain leading and trailing separators (i.e. ",123,"). + # Need a script processor as split processor doesn't support + # removing non-trailing separators. + # + - script: + lang: painless + if: "ctx.json?.trusted_circle_ids != null && ctx.json?.trusted_circle_ids instanceof String" + description: > + Convert trusted_circles_ids from CSV to an array. + source: > + def lst = Stream.of(ctx.json.trusted_circle_ids.splitOnToken(',')).filter(s -> !s.isEmpty()).collect(Collectors.toList()); + if (lst.size() > 0) { + ctx.json.trusted_circle_ids = lst; + } else { + ctx.json.remove('trusted_circle_ids'); + } + # + # Split detail field and append each component to ECS tags field. + # + - split: + field: json.detail + separator: '(? + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + diff --git a/packages/ti_anomali/1.2.3/data_stream/threatstream/fields/base-fields.yml b/packages/ti_anomali/1.2.3/data_stream/threatstream/fields/base-fields.yml new file mode 100755 index 0000000000..378e9e1a15 --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/threatstream/fields/base-fields.yml @@ -0,0 +1,28 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset name. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module + value: ti_anomali +- name: event.dataset + type: constant_keyword + description: Event dataset + value: ti_anomali.threatstream +- name: threat.feed.name + type: constant_keyword + description: Display friendly feed name + value: Anomali ThreatStream +- name: threat.feed.dashboard_id + type: constant_keyword + description: Dashboard ID used for Kibana CTI UI + value: ti_anomali-96fe1e60-4261-11ec-b7be-d3026acdf1cf +- name: "@timestamp" + type: date + description: Event timestamp. diff --git a/packages/ti_anomali/1.2.3/data_stream/threatstream/fields/beats.yml b/packages/ti_anomali/1.2.3/data_stream/threatstream/fields/beats.yml new file mode 100755 index 0000000000..cb44bb2944 --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/threatstream/fields/beats.yml @@ -0,0 +1,12 @@ +- name: input.type + type: keyword + description: Type of Filebeat input. +- name: log.flags + type: keyword + description: Flags for the log file. +- name: log.offset + type: long + description: Offset of the entry in the log file. +- name: log.file.path + type: keyword + description: Path to the log file. diff --git a/packages/ti_anomali/1.2.3/data_stream/threatstream/fields/ecs.yml b/packages/ti_anomali/1.2.3/data_stream/threatstream/fields/ecs.yml new file mode 100755 index 0000000000..a2ee1797df --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/threatstream/fields/ecs.yml @@ -0,0 +1,191 @@ +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: |- + For log events the message field contains the log message, optimized for viewing in a log viewer. + For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. + If multiple messages exist, they can be combined into one message. + name: message + type: match_only_text +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: Error message. + name: error.message + type: match_only_text +- description: |- + The numeric severity of the event according to your event source. + What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. + The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. + name: event.severity + type: long +- description: |- + This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. + `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. + This field is an array. This will allow proper categorization of some events that fall in multiple categories. + name: event.category + type: keyword +- description: |- + Timestamp when an event arrived in the central data store. + This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. + In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`. + name: event.ingested + type: date +- description: |- + This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. + `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. + The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. + name: event.kind + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. + `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. + This field is an array. This will allow proper categorization of some events that fall in multiple event types. + name: event.type + type: keyword +- description: |- + event.created contains the date/time when the event was first read by an agent, or by your pipeline. + This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. + In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. + In case the two timestamps are identical, @timestamp should be used. + name: event.created + type: date +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: The date and time when intelligence source first reported sighting this indicator. + name: threat.indicator.first_seen + type: date +- description: The date and time when intelligence source last reported sighting this indicator. + name: threat.indicator.last_seen + type: date +- description: |- + Type of indicator as represented by Cyber Observable in STIX 2.0. + Recommended values: + * autonomous-system + * artifact + * directory + * domain-name + * email-addr + * file + * ipv4-addr + * ipv6-addr + * mac-addr + * mutex + * port + * process + * software + * url + * user-account + * windows-registry-key + * x509-certificate + name: threat.indicator.type + type: keyword +- description: Identifies a threat indicator as an IP address (irrespective of direction). + name: threat.indicator.ip + type: ip +- description: |- + Domain of the url, such as "www.elastic.co". + In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. + If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. + name: threat.indicator.url.domain + type: keyword +- description: If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.full + type: wildcard +- description: |- + The field contains the file extension from the original request url, excluding the leading dot. + The file extension is only set if it exists, as not every url has a file extension. + The leading period must not be included. For example, the value must be "png", not ".png". + Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). + name: threat.indicator.url.extension + type: keyword +- description: |- + Unmodified original url as seen in the event source. + Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. + This field is meant to represent the URL as it was observed, complete or not. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.original + type: wildcard +- description: Path of the request, such as "/search". + name: threat.indicator.url.path + type: wildcard +- description: Port of the request, such as 443. + name: threat.indicator.url.port + type: long +- description: |- + Scheme of the request, such as "https". + Note: The `:` is not part of the scheme. + name: threat.indicator.url.scheme + type: keyword +- description: |- + The query field describes the query string of the request, such as "q=elasticsearch". + The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. + name: threat.indicator.url.query + type: keyword +- description: MD5 hash. + name: threat.indicator.file.hash.md5 + type: keyword +- description: SHA1 hash. + name: threat.indicator.file.hash.sha1 + type: keyword +- description: SHA256 hash. + name: threat.indicator.file.hash.sha256 + type: keyword +- description: SHA512 hash. + name: threat.indicator.file.hash.sha512 + type: keyword +- description: Identifies a threat indicator as an email address (irrespective of direction). + name: threat.indicator.email.address + type: keyword +- description: The name of the indicator's provider. + name: threat.indicator.provider + type: keyword +- description: |- + Traffic Light Protocol sharing markings. + Recommended values are: + * WHITE + * GREEN + * AMBER + * RED + name: threat.indicator.marking.tlp + type: keyword +- description: |- + Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. + Expected values are: + * Not Specified + * None + * Low + * Medium + * High + name: threat.indicator.confidence + type: keyword +- description: Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. + name: threat.indicator.as.number + type: long +- description: Organization name. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.as.organization.name + type: keyword +- description: Longitude and latitude. + name: threat.indicator.geo.location.lat + type: geo_point +- description: Longitude and latitude. + name: threat.indicator.geo.location.lon + type: geo_point +- description: Country ISO code. + name: threat.indicator.geo.country_iso_code + type: keyword diff --git a/packages/ti_anomali/1.2.3/data_stream/threatstream/fields/fields.yml b/packages/ti_anomali/1.2.3/data_stream/threatstream/fields/fields.yml new file mode 100755 index 0000000000..5d8e4e57d9 --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/threatstream/fields/fields.yml @@ -0,0 +1,94 @@ +- name: anomali.threatstream + type: group + description: > + Fields for Anomali Threatstream + + fields: + - name: classification + type: keyword + description: > + Indicates whether an indicator is private or from a public feed and available publicly. Possible values: private, public. + + example: private + - name: confidence + type: short + description: > + The measure of the accuracy (from 0 to 100) assigned by ThreatStream's predictive analytics technology to indicators. + + - name: detail2 + type: text + description: > + Detail text for indicator. + + example: Imported by user 42. + - name: id + type: keyword + description: > + The ID of the indicator. + + - name: import_session_id + type: keyword + description: > + ID of the import session that created the indicator on ThreatStream. + + - name: itype + type: keyword + description: > + Indicator type. Possible values: "apt_domain", "apt_email", "apt_ip", "apt_url", "bot_ip", "c2_domain", "c2_ip", "c2_url", "i2p_ip", "mal_domain", "mal_email", "mal_ip", "mal_md5", "mal_url", "parked_ip", "phish_email", "phish_ip", "phish_url", "scan_ip", "spam_domain", "ssh_ip", "suspicious_domain", "tor_ip" and "torrent_tracker_url". + + - name: maltype + type: wildcard + description: > + Information regarding a malware family, a CVE ID, or another attack or threat, associated with the indicator. + + - name: md5 + type: keyword + description: > + Hash for the indicator. + + - name: resource_uri + type: keyword + description: > + Relative URI for the indicator details. + + - name: severity + type: keyword + description: > + Criticality associated with the threat feed that supplied the indicator. Possible values: low, medium, high, very-high. + + - name: source + type: keyword + description: > + Source for the indicator. + + example: Analyst + - name: source_feed_id + type: keyword + description: > + ID for the integrator source. + + - name: state + type: keyword + description: > + State for this indicator. + + example: active + - name: trusted_circle_ids + type: keyword + description: > + ID of the trusted circle that imported the indicator. + + - name: update_id + type: keyword + description: > + Update ID. + + - name: url + type: keyword + description: > + URL for the indicator. + + - name: value_type + type: keyword + description: >- + Data type of the indicator. Possible values: ip, domain, url, email, md5. diff --git a/packages/ti_anomali/1.2.3/data_stream/threatstream/manifest.yml b/packages/ti_anomali/1.2.3/data_stream/threatstream/manifest.yml new file mode 100755 index 0000000000..7bffc33668 --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/threatstream/manifest.yml @@ -0,0 +1,83 @@ +type: logs +title: Anomali Threatstream +streams: + - input: http_endpoint + vars: + - name: listen_address + type: text + title: Listen Address + description: Bind address for the listener. Use 0.0.0.0 to listen on all interfaces. + multi: false + required: true + show_user: true + default: localhost + - name: listen_port + type: integer + title: Listen Port + multi: false + required: true + show_user: true + default: 8181 + - name: url + type: text + title: Webhook path + description: URL path where the webhook will accept requests. + multi: false + required: true + show_user: false + default: /threatstream + - name: content_type + type: text + title: Webhook path + description: URL path where the webhook will accept requests. + multi: false + required: true + show_user: false + default: application/x-ndjson + - name: secret + type: text + title: HMAC secret key + description: Secret key to authenticate requests from the SDK. + multi: false + required: false + show_user: true + - name: ssl + type: yaml + title: TLS + description: Options for enabling TLS for the listening webhook endpoint. See the [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/configuration-ssl.html) for a list of all options. + multi: false + required: false + show_user: false + default: | + enabled: false + certificate: "/etc/pki/client/cert.pem" + key: "/etc/pki/client/cert.key" + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - anomali-threatstream + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + template_path: http_endpoint.yml.hbs + title: Anomali Threatstream + description: Receives indicators from Anomali Threatstream diff --git a/packages/ti_anomali/1.2.3/data_stream/threatstream/sample_event.json b/packages/ti_anomali/1.2.3/data_stream/threatstream/sample_event.json new file mode 100755 index 0000000000..3dd5e6c580 --- /dev/null +++ b/packages/ti_anomali/1.2.3/data_stream/threatstream/sample_event.json @@ -0,0 +1,77 @@ +{ + "@timestamp": "2022-04-11T08:52:31.294Z", + "agent": { + "ephemeral_id": "b49fcac4-6f07-4c25-8505-3306c6f56ca0", + "id": "6b916c32-9ec1-4b93-a910-81540b3df79b", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "anomali": { + "threatstream": { + "classification": "public", + "confidence": 56, + "detail2": "imported by user 723", + "id": "1785659799", + "import_session_id": "244", + "itype": "mal_md5", + "md5": "6466e2", + "resource_uri": "/api/v1/intelligence/P44706407813/", + "severity": "very-high", + "source_feed_id": "3759", + "state": "active", + "trusted_circle_ids": [ + "439", + "942", + "801" + ], + "update_id": "3898969521", + "value_type": "md5" + } + }, + "data_stream": { + "dataset": "ti_anomali.threatstream", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "6b916c32-9ec1-4b93-a910-81540b3df79b", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "dataset": "ti_anomali.threatstream", + "ingested": "2022-04-11T08:52:32Z", + "kind": "enrichment", + "original": "{\"classification\":\"public\",\"confidence\":56,\"date_first\":\"2020-10-08T12:22:16\",\"date_last\":\"2020-10-08T12:24:42\",\"detail2\":\"imported by user 723\",\"id\":1785659799,\"import_session_id\":244,\"itype\":\"mal_md5\",\"md5\":\"6466e2\",\"resource_uri\":\"/api/v1/intelligence/P44706407813/\",\"severity\":\"very-high\",\"source\":\"Default Organization\",\"source_feed_id\":3759,\"state\":\"active\",\"trusted_circle_ids\":\"439,942,801\",\"update_id\":3898969521,\"value_type\":\"md5\"}", + "severity": 9, + "type": "indicator" + }, + "input": { + "type": "http_endpoint" + }, + "tags": [ + "preserve_original_event", + "forwarded", + "anomali-threatstream" + ], + "threat": { + "indicator": { + "confidence": "Med", + "first_seen": "2020-10-08T12:22:16.000Z", + "last_seen": "2020-10-08T12:24:42.000Z", + "marking": { + "tlp": [ + "White" + ] + }, + "provider": "Default Organization", + "type": "file" + } + } +} \ No newline at end of file diff --git a/packages/ti_anomali/1.2.3/docs/README.md b/packages/ti_anomali/1.2.3/docs/README.md new file mode 100755 index 0000000000..1ecaf4bb7d --- /dev/null +++ b/packages/ti_anomali/1.2.3/docs/README.md @@ -0,0 +1,369 @@ +# Anomali Integration + +The Anomali integration supports the following datasets. + +- `limo` dataset: Support for Anomali Limo, a freely available Threat Intelligence service +- `threatstream` dataset: Support for Anomali ThreatStream, a commercial Threat Intelligence service. + +## Logs + +### Anomali Limo + +Anomali Limo offers multiple sources called collections. Each collection has a specific ID, which +then fits into the url used in this configuration. A list of different +collections can be found using the default guest/guest credentials at https://limo.anomali.com/api/v1/taxii2/feeds/collections/[Limo Collections]. + +An example if you want to use the feed with ID 42, the URL to configure would end up like this: +`https://limo.anomali.com/api/v1/taxii2/feeds/collections/41/objects` + +An example event for `limo` looks as following: + +```json +{ + "@timestamp": "2017-01-20T00:00:00.000Z", + "agent": { + "ephemeral_id": "29217578-e780-4c3e-912d-0f35ce981fb4", + "id": "6b916c32-9ec1-4b93-a910-81540b3df79b", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "anomali": { + "limo": { + "definition": { + "tlp": "green" + }, + "definition_type": "tlp", + "id": "marking-definition--34098fce-860f-48ae-8e50-ebd3cc5e41da", + "type": "marking-definition" + } + }, + "data_stream": { + "dataset": "ti_anomali.limo", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "6b916c32-9ec1-4b93-a910-81540b3df79b", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "created": "2022-04-11T08:51:02.140Z", + "dataset": "ti_anomali.limo", + "ingested": "2022-04-11T08:51:03Z", + "kind": "enrichment", + "original": "{\"created\":\"2017-01-20T00:00:00.000Z\",\"definition\":{\"tlp\":\"green\"},\"definition_type\":\"tlp\",\"id\":\"marking-definition--34098fce-860f-48ae-8e50-ebd3cc5e41da\",\"type\":\"marking-definition\"}", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "preserve_original_event", + "forwarded", + "anomali-limo" + ], + "threat": { + "indicator": { + "type": "unknown" + } + } +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| anomali.limo.content | Extra text or descriptive content related to the indicator. | keyword | +| anomali.limo.definition.tlp | Indicator tlp/definition value | keyword | +| anomali.limo.definition_type | Indicator tlp/definition type | keyword | +| anomali.limo.description | A description of the indicator. | keyword | +| anomali.limo.id | The ID of the indicator. | keyword | +| anomali.limo.indicator | The value of the indicator, for example if the type is domain, this would be the value. | keyword | +| anomali.limo.labels | The labels related to the indicator | keyword | +| anomali.limo.modified | When the indicator was last modified | date | +| anomali.limo.name | The name of the indicator. | keyword | +| anomali.limo.object_marking_refs | The STIX reference object. | keyword | +| anomali.limo.pattern | The pattern ID of the indicator. | keyword | +| anomali.limo.title | Title describing the indicator. | keyword | +| anomali.limo.type | The indicator type, can for example be "domain, email, FileHash-SHA256". | keyword | +| anomali.limo.valid_from | When the indicator was first found or is considered valid. | date | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset name. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| error.message | Error message. | match_only_text | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset | constant_keyword | +| event.ingested | Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` \< `event.created` \< `event.ingested`. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Type of Filebeat input. | keyword | +| log.file.path | Path to the log file. | keyword | +| log.flags | Flags for the log file. | keyword | +| log.offset | Offset of the entry in the log file. | long | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| tags | List of keywords used to tag each event. | keyword | +| threat.feed.dashboard_id | Dashboard ID used for Kibana CTI UI | constant_keyword | +| threat.feed.name | Display friendly feed name | constant_keyword | +| threat.indicator.email.address | Identifies a threat indicator as an email address (irrespective of direction). | keyword | +| threat.indicator.first_seen | The date and time when intelligence source first reported sighting this indicator. | date | +| threat.indicator.ip | Identifies a threat indicator as an IP address (irrespective of direction). | ip | +| threat.indicator.provider | The name of the indicator's provider. | keyword | +| threat.indicator.type | Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: \* autonomous-system \* artifact \* directory \* domain-name \* email-addr \* file \* ipv4-addr \* ipv6-addr \* mac-addr \* mutex \* port \* process \* software \* url \* user-account \* windows-registry-key \* x509-certificate | keyword | +| threat.indicator.url.domain | Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. | keyword | +| threat.indicator.url.extension | The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). | keyword | +| threat.indicator.url.full | If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. | wildcard | +| threat.indicator.url.full.text | Multi-field of `threat.indicator.url.full`. | match_only_text | +| threat.indicator.url.original | Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not. | wildcard | +| threat.indicator.url.original.text | Multi-field of `threat.indicator.url.original`. | match_only_text | +| threat.indicator.url.path | Path of the request, such as "/search". | wildcard | +| threat.indicator.url.port | Port of the request, such as 443. | long | +| threat.indicator.url.query | The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. | keyword | +| threat.indicator.url.scheme | Scheme of the request, such as "https". Note: The `:` is not part of the scheme. | keyword | + + +### Anomali Threatstream + +To configure the ThreatStream integration you first need to define an output +in the Anomali ThreatStream Integrator using the Elastic SDK provided by Anomali. +It will deliver indicators via HTTP or HTTPS to a elastic-agent instance running this integration. + +Configure an Integrator output with the following settings: + +* Indicator Filter: `*` (or use any desired filter). +* SDK Executable Command: `/path/to/python /path/to/anomali-sdk/main.py`. + Adjust the paths to the python executable and the directory where the Elastic SDK + has been unpacked. +* Metadata in JSON Format: `{"url": "https://elastic-agent:8080/", "server_certificate": "/path/to/cert.pem", "secret": "my secret"}`. + - `url`: Use the host and port where the integration will be running, and `http` or `https` accordingly. + - `server_certificate`: If using HTTPS, absolute path to the server certificate. Otherwise don't set + this field. + - `secret`: A shared secret string to authenticate messages between the SDK and the integration. + + +An example event for `threatstream` looks as following: + +```json +{ + "@timestamp": "2022-04-11T08:52:31.294Z", + "agent": { + "ephemeral_id": "b49fcac4-6f07-4c25-8505-3306c6f56ca0", + "id": "6b916c32-9ec1-4b93-a910-81540b3df79b", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "anomali": { + "threatstream": { + "classification": "public", + "confidence": 56, + "detail2": "imported by user 723", + "id": "1785659799", + "import_session_id": "244", + "itype": "mal_md5", + "md5": "6466e2", + "resource_uri": "/api/v1/intelligence/P44706407813/", + "severity": "very-high", + "source_feed_id": "3759", + "state": "active", + "trusted_circle_ids": [ + "439", + "942", + "801" + ], + "update_id": "3898969521", + "value_type": "md5" + } + }, + "data_stream": { + "dataset": "ti_anomali.threatstream", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "6b916c32-9ec1-4b93-a910-81540b3df79b", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "dataset": "ti_anomali.threatstream", + "ingested": "2022-04-11T08:52:32Z", + "kind": "enrichment", + "original": "{\"classification\":\"public\",\"confidence\":56,\"date_first\":\"2020-10-08T12:22:16\",\"date_last\":\"2020-10-08T12:24:42\",\"detail2\":\"imported by user 723\",\"id\":1785659799,\"import_session_id\":244,\"itype\":\"mal_md5\",\"md5\":\"6466e2\",\"resource_uri\":\"/api/v1/intelligence/P44706407813/\",\"severity\":\"very-high\",\"source\":\"Default Organization\",\"source_feed_id\":3759,\"state\":\"active\",\"trusted_circle_ids\":\"439,942,801\",\"update_id\":3898969521,\"value_type\":\"md5\"}", + "severity": 9, + "type": "indicator" + }, + "input": { + "type": "http_endpoint" + }, + "tags": [ + "preserve_original_event", + "forwarded", + "anomali-threatstream" + ], + "threat": { + "indicator": { + "confidence": "Med", + "first_seen": "2020-10-08T12:22:16.000Z", + "last_seen": "2020-10-08T12:24:42.000Z", + "marking": { + "tlp": [ + "White" + ] + }, + "provider": "Default Organization", + "type": "file" + } + } +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| anomali.threatstream.classification | Indicates whether an indicator is private or from a public feed and available publicly. Possible values: private, public. | keyword | +| anomali.threatstream.confidence | The measure of the accuracy (from 0 to 100) assigned by ThreatStream's predictive analytics technology to indicators. | short | +| anomali.threatstream.detail2 | Detail text for indicator. | text | +| anomali.threatstream.id | The ID of the indicator. | keyword | +| anomali.threatstream.import_session_id | ID of the import session that created the indicator on ThreatStream. | keyword | +| anomali.threatstream.itype | Indicator type. Possible values: "apt_domain", "apt_email", "apt_ip", "apt_url", "bot_ip", "c2_domain", "c2_ip", "c2_url", "i2p_ip", "mal_domain", "mal_email", "mal_ip", "mal_md5", "mal_url", "parked_ip", "phish_email", "phish_ip", "phish_url", "scan_ip", "spam_domain", "ssh_ip", "suspicious_domain", "tor_ip" and "torrent_tracker_url". | keyword | +| anomali.threatstream.maltype | Information regarding a malware family, a CVE ID, or another attack or threat, associated with the indicator. | wildcard | +| anomali.threatstream.md5 | Hash for the indicator. | keyword | +| anomali.threatstream.resource_uri | Relative URI for the indicator details. | keyword | +| anomali.threatstream.severity | Criticality associated with the threat feed that supplied the indicator. Possible values: low, medium, high, very-high. | keyword | +| anomali.threatstream.source | Source for the indicator. | keyword | +| anomali.threatstream.source_feed_id | ID for the integrator source. | keyword | +| anomali.threatstream.state | State for this indicator. | keyword | +| anomali.threatstream.trusted_circle_ids | ID of the trusted circle that imported the indicator. | keyword | +| anomali.threatstream.update_id | Update ID. | keyword | +| anomali.threatstream.url | URL for the indicator. | keyword | +| anomali.threatstream.value_type | Data type of the indicator. Possible values: ip, domain, url, email, md5. | keyword | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset name. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| error.message | Error message. | match_only_text | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset | constant_keyword | +| event.ingested | Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` \< `event.created` \< `event.ingested`. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.severity | The numeric severity of the event according to your event source. What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. | long | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Type of Filebeat input. | keyword | +| log.file.path | Path to the log file. | keyword | +| log.flags | Flags for the log file. | keyword | +| log.offset | Offset of the entry in the log file. | long | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| tags | List of keywords used to tag each event. | keyword | +| threat.feed.dashboard_id | Dashboard ID used for Kibana CTI UI | constant_keyword | +| threat.feed.name | Display friendly feed name | constant_keyword | +| threat.indicator.as.number | Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. | long | +| threat.indicator.as.organization.name | Organization name. | keyword | +| threat.indicator.as.organization.name.text | Multi-field of `threat.indicator.as.organization.name`. | match_only_text | +| threat.indicator.confidence | Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. Expected values are: \* Not Specified \* None \* Low \* Medium \* High | keyword | +| threat.indicator.email.address | Identifies a threat indicator as an email address (irrespective of direction). | keyword | +| threat.indicator.file.hash.md5 | MD5 hash. | keyword | +| threat.indicator.file.hash.sha1 | SHA1 hash. | keyword | +| threat.indicator.file.hash.sha256 | SHA256 hash. | keyword | +| threat.indicator.file.hash.sha512 | SHA512 hash. | keyword | +| threat.indicator.first_seen | The date and time when intelligence source first reported sighting this indicator. | date | +| threat.indicator.geo.country_iso_code | Country ISO code. | keyword | +| threat.indicator.geo.location.lat | Longitude and latitude. | geo_point | +| threat.indicator.geo.location.lon | Longitude and latitude. | geo_point | +| threat.indicator.ip | Identifies a threat indicator as an IP address (irrespective of direction). | ip | +| threat.indicator.last_seen | The date and time when intelligence source last reported sighting this indicator. | date | +| threat.indicator.marking.tlp | Traffic Light Protocol sharing markings. Recommended values are: \* WHITE \* GREEN \* AMBER \* RED | keyword | +| threat.indicator.provider | The name of the indicator's provider. | keyword | +| threat.indicator.type | Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: \* autonomous-system \* artifact \* directory \* domain-name \* email-addr \* file \* ipv4-addr \* ipv6-addr \* mac-addr \* mutex \* port \* process \* software \* url \* user-account \* windows-registry-key \* x509-certificate | keyword | +| threat.indicator.url.domain | Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. | keyword | +| threat.indicator.url.extension | The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). | keyword | +| threat.indicator.url.full | If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. | wildcard | +| threat.indicator.url.full.text | Multi-field of `threat.indicator.url.full`. | match_only_text | +| threat.indicator.url.original | Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not. | wildcard | +| threat.indicator.url.original.text | Multi-field of `threat.indicator.url.original`. | match_only_text | +| threat.indicator.url.path | Path of the request, such as "/search". | wildcard | +| threat.indicator.url.port | Port of the request, such as 443. | long | +| threat.indicator.url.query | The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. | keyword | +| threat.indicator.url.scheme | Scheme of the request, such as "https". Note: The `:` is not part of the scheme. | keyword | diff --git a/packages/ti_anomali/1.2.3/img/anomali.svg b/packages/ti_anomali/1.2.3/img/anomali.svg new file mode 100755 index 0000000000..e9cade7e61 --- /dev/null +++ b/packages/ti_anomali/1.2.3/img/anomali.svg @@ -0,0 +1,4950 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + 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 +jq7ra5d1cG32qudvrb337119ML2U52hj3J/t+X109kx+7ReP7BhtCvdbeS59TrLvEfNc/bv/e55W +Onr7ERpuOenc+W6XhXubd/JcxqX6HbtLV/VrU55CW21q4VrdHjwb/G0fMj2bFdd8Hyxj/hT3Squo +DpdOeXymPTrcs+3U2V/DLVw8dTZWikZcrdpjtmr0xMUbHq0rrURcQspjM+c6PFw13LPmRR/RD1aW +E9GWRE6yvdtLXC1TS4tO1dPhwTvzG9om/bpN1dt6LmnS6R5T7fSO6m2p3Xqte5aa+DxEN8ZXWW6h +7gvvKFXT9JSPuOpcyqtju4z26zrnTy7LxSpMNeue1cu12mektalW1JN5BokyLZdseoz0mPmT3eHV +wT26O1+D13WlmmnPjw6u+eZN1dZz7r16yjZJqIhaNjpZirveq+ULDdG+0u0XUqpu+ZR/u+PRdt2b +Kap5fVw/OS+vrrqUarZ4yLcvmrpeiOhFLaM96V8xF9V8NW9Sqn20ulNt+aP0smGlnqrP0c8oi07u +6VOvbsd7iuqtNPoZKmrdrrTMR+tHSXeodJcH7d+iJaT/q2WG6rvZCu/c/l0yVF3v8X3tqap5Vbyf +wh/1i5q7iVfLrzpTv/+uGRL6xzojvfG+zfz1cPVQHtN51+/SeV5x62ovOqUnJNQ8a4S5ebWpTuFx +DfXqy5/980eyGq9HsrP4P594vbU9iK9VNaqS8+Bd0+7ODuGv8GqIdBZ//5pX3MRT+LPRqEfWk3fv +M22ohXq/nrqbHq1QfaXn7gwLZQNLZiVUpNxD/6Ie7fNHpMsr/XcOb5Zm+/twsVB//9j9Xia0Q/Yz +ferP+oaopzrlOxVx6Szd0IeUeod0ys9cF6XaWR7z8Rb1rzzom+/k1NvukH9HVXpOP9HTeJL+qzor +Xa8O+rciMzpkr6t0oebqz++bmb6jn3pVMp/9yxS39uQdCZHsdycv6vlp9d2f1/89GSpp0qm7lhKh +llGP3errXf57iL7e1CdVt5Lqev0d0hWr6nh/w1OWkf2VdxUu3pg/2qw8pU61X713pxIPvXQ93Sv0 +NX12Uk9GV1P8qb3eL+taSHtKj3m692Rj1zrac/vXXe/cjBHe87RUT7+Hzqii7p4aS4/t0eARsU67 +vkNnXgf3NpNqtHdaeXvs3AgNIuahMq9DpvT+nO6dGc1h/eSNT2m1DhlNGtmhNLZ4uKfq9Pne1iCp +S4nQLKkdTYNYqKdKrrN7k75jd79jb1p9c9GurdLuDKKi2afMvI6eDp05k3nXV/UxM1bkVNM8vKP2 +81EzqGv3ZeEpM1dGRad4/ynbModqq+mR9NBpnR4to6jqMy1DS9WTZTCRkuxQotHfsTKmiqp3kur4 +7lSrnpfZRCUtveal1ZZq4Z4nJh41c2cpmSqisTKmk8i0Es2W66iZMkOsPGjGdle1NHXrSqfOIB7l +lpbZa+fJM2qz25SeehDttCfP7GnWUaL56BnDI91vHjpT+rOFuKTHN2unWqfm2+NCg4UHr3x6a3e0 +Xnb2zG3mrVkuHt84X5umRfnjQ3M8H73x/djd7xQa8/dppw7NfaduDDdRTfX6o4bGbvHUzRra1Vnh +GR2jse7RnZKWnXXP3WDmqU/1jg4WGiOts0c1nUVD2kNqzIpOTW+KZw2N0+TPNPOsmuP1zOfso5PG +tNpDibazRfu0MM1HH9ZtdVpfnys0us+DaNBsdadoNFalx9QUWVmektPOEZ7qXOdkU2v5n9podtNO +rfm50WRhHlSjia86zdedK6S1Y2rweVzTPOc5Q2OVdFTNvb5P8Wcnc02m9+yU0n7WuWqVSzaIPlRo +Es/OrSktutNjhQbXmKssD55Pj6IpqnXaHRrj5TE13kS80fFr9oWLv6N5LRcL6xjZmFVtb2hOV4+t +cT3pTK+sB/c8jX+qNzU6nj2kvbM39lKa6dHseo8d2jTLXG2PmjmttCxTVDtrXzTPvOMz5etLnWhn +FU268vxMUp1SRPwxmtKTicaOTqVZI/qWqmvPJZpL67EadO6WHk/Hcs1qRTLTRDSWdwfTJF7Zpq69 +o4jmrugYGt+laXbXPb7ZOrQeo9Fda5mWNY8RzS7i2cRSPLZmnZr6c0ezBv+v7YhGTXZOzZaiYZ0L +VWf7VTuEhaeuiGdbZzx6W1XfOaptS+Y7lfYstS2arVnLx7N9KR79JtquTX2dstlpc33ShuQyl23k +KiUrG5Iq0Qm9dtsps9pDddmRDqn2ZpWbriVz8AARIaIhAqKCCRk8eFAYBgQGwkMEChEWEMA0MHMA +QdVV/nw1F8tK9+zykGqa3Ui7q6XnvEfTeQ7ykH5j297nUjeNfD+bei4aFf7Gp72ZraZvU59n/7KT ++MO0s7MvS9Lb/ZVodLO83RZT9fxZmXW2ZOhDaKtodg4xL33D0/6Gty3NPHct07P8yw== + + + 1MyWivIYFm2pbdEw68zWsH4M636Oq3q2tWp325rpHsqbbWstj7NoTanItmiHZmhb9W01Nw9eD6+m +WdpaUh3TbEt0d+q8d3U+287a1qEP15ZeNcPLNDvjz5vndOGe8a6a/1E+rXj14X9JuL/3hN/KzHPo +s6K0r0nPaGe6k+bPq+gQy2zaRLTZ+XKPFhmi2e/ks2b776CV+Yj0eDuq2VpnpfV57bJDnw+RDBfP +LkPj+i5bjXdeme2++7bsUoswb7V1oY/H/Y1eLPQaTfTvl9A31xEevI+ZJp/Vx2vc3Dz+8+Arj2Il +w0KZsLeTeUprnp81S7Ps5FntXIXrsy9trXQPXq2tr3DViG7vt5MPfOu6OmRlt1d1Mrtbqtr73cWw +UCbwfa1tbR1t/WJYKBvQxaKro6pNWrSzV6g+VD3GujqrU1u/yldLV5Sv/VWecm3gWNIzLJQJTOAB +nR4fw0LZgH3uPnjYqVQ6O3bPqmMrH3vzJwnrrN3PJenJqJJs65XeudPVO8cr/ecSL/dk0jlU37l0 +ZuniQbRNz2HZHuPm/aQd+l2R76Czau9Yb+RDe1aztDSyd9U263zvRcc2Kff2V3Nx10YydB0q6+HZ +yemj0l1GRsUr4+apnZuSVxWtcJGUco/w5z7lzbC+Trvq7liKr0Uql6nycom8lLS4VYg2q1v0MSWa ++ugyLJQNHJqdI9t+WlGmr7y66cNzNNadY2JuHrM6e7RTeEl4FrH29uim2rQv01b5Ltdk0z36cW7a +nW+aqeokXZZiZu2p3d1tJe5W3el8ddqqStwyw0I5XJqKeyU9L+Pqf4d0ttWen3HRfElneOdF/KHh +LaZ+01q4d+flnvXsSKcyI8x7UxF1EdWaR/RRfwx9mnmFq+fVI+Neav6MW7eZstRrd6uF+XwhJpru +ZKS8s1T23V+vSX2fkf3qW+ftUuHq6ceq0Gd1rjTfWmXqMSvbqrKzVUh6tFurSizaur01HayykV7d +mveULH1kZa87WWUf2t1S1ZLzlgp/06V9S11PY1rS5XGpGp/0W2vqi75GdIR1diffe7zGeqaTVPF7 +qXgojVpHtvbWGdouFXPpFr+UfhHRfUtdevdVMyyUB96f/810FVL+LHrtJty8626vs1Q0ZqZP9err +sx2p1Z5p++0t1Vp1E/UYlW1d0rrqai+57k69zSU6RmWiKzx23bqWjPQqbavojl75WHnqqtYQC3Vd +VlpVtbTWn6vq6nnq+pq56GyVl46/u0iTKg817/YKf9SVVYZ039rqqm6VSvXGsFAmbFWtfU39rcVj +SnlIp2aXdra85sDgWqWRmrTI6Ivr0zyVnqvrVk/Tult3X/VS2ZbhK+215r+UdmX11R5+f1Wn0vZZ +mdreNpcZ1+4b2p7QinSaWGu9c7TWz7LojEupeereOxXZ3fXsGZ2ZaMzDxK/Taq7/a4p0MG2bR9cM +C2XCmkpvsUjPVrnqeYV7Z9f3Jfsdq4nO01iI+HX6a1Y/lt7cvWs6/c01UdlpzKRiWCgH+uyOtVh5 +q+m1Sn3eJpX3yoi2eheV0Vw3nn+LWki1erd3VYf53971Oq3dVhXeGiurrLQKb8taB6ly0VBvjape +tptZ6bfeyvvernXJtGcqW/qut5WLx6hsu8pbpcrU05+r7LtMy7R/zJu3O1XTO9LvVUZnzFqrC83f +VTta+7LMwj1WR5hWtnPVtAOjvmthLh3dq5vIMA9N1XrcOrZNB8Zod8VarURVQifdgUFVPN+XVbh3 +qbq5dawOrZu4hPYyw7LLZ0tYpmc9W9/o6Gvx1tD2VeX7bKkQD2HZvbTsWFl4KMvw67Mt1DuEtVfk +2+LLT0rbq7/udp22+P3RK339Sm3zymfqusvdujp3laY33Vql01avdjG9RlfWvVWl3en2Vrfa/dpl +dZNa3WoqHa3KYCkUDBc4RDQ4YOBQAUOFCb56pWPayj1DOkmmd6tnKdeKhrenbHh6zLt65yrhnfLR +53Ous8yidCbl3qZcdelp7s9aol037TCtfvrTtK+25LN6TKMmnp/qK5H+oF4J945qki2R/nQ1Et7S +qY6uaUtmerqIa9a925sTZWLZHu5pcTXvp8yITI/Q9lZ1UfdYWU9ztwwt0XrWkoxnpXp636TdiPb4 +dd0y4pf2Ze8ppZbhUiYZz7tFp+zUiKdJvmOj64p01Ttrmz9zOTVt577p/Qnt0Lb0nB0YE9Eq1vfO +Pplk+J+uEDdPlX8H5mn20jWtUeoh3DQ3pdVjtqj7OzCKtpuZpkg+Wg5M7TnF34Gx3e+i1WEsjexL +pGdhmilR+ZBoj319u1UmrVV6442i82oRzfRlmbaZeAevfPLapk/HdJbXQ9OtPXP1WVm++xbitWw/ +iTdFqrX256+2hVbHrsx6Le2Kdb8IferKGBKpb7dwbX+5d/o0I1I7q+Od5/M83flGvqXyHbMyZ3e0 +65XM7O6+PVxzrtPXRNyDutb1Watb9dYt/XtrLn31mXYqaTFvhLe+s9s81WNVJsmEeb0rHsMb9NaR +zVD1Jly16PqAAJSSEdnJyifvuodZpKfy6eCFh3bHzH5wLu1411znNo1kuUhEdmkyWf/ZTd3zxX3V +5RoWnSJzdJrdOen66ty0umObWVUunfcsmbWXVW7u/Sz9enTurfqUTdlYzmP+2ZJyba/n1meVc++r +x3xk/6lo9f+l2tZ5u27erpo/09+fN8qz6zGfWtfT2in9khbVlfDyXG960/opvb+49VK1df3q3PRR +9aTmb0WqX93UU3hFhos/0S0Ny6R6qoupiGmkq7c3tzQ8LppNqi1anl2lo5pNnxuoRDGNEmoWZhky +yBCVSZIEAzMSwDAoGA6IReOREXlqfhSABIJqQGpIMJEGJJGQeCQEGUOEAAIAAEAGAABkBiQUAAAU +zwSAMh82shkSoMqktk12QtGCafDa6sGEI0CvRTVwigB1seKv9dOjpicCdK8zc2OBaIgkGbPK/f+n +lqcIVvH/5zL9Q9v4f+69/2e/yJOL8v1zBYP1Rtw/D71iogusAaBdnJm9he6foKTobYfdPwEUgQm5 +fxZRlYhRrvO1ex+WjuuyUh8KLU84+ZwpcCl8M0QlYH8edw4D35tK50bGioz6lQegxZtm4TtI/d6b +2EwU76XjaQ4Te0k75jKwG+Vi069HIXfPk9Ovlu71JfYKY/otond5JaPwWop8pn6RpygE1dVZ/QrF +tdmr3+S8ZFS/BNd6hrQaQOJWk/rVYepT4OXXdaekFX4D3MG3jaKQDtW8Ffg19/umXIJcg9hRefx9 +ZbX+9u8r1QKofdvItuGcd7D/vqN6XDTI2P2+40bLKu4Lz1vbV/b7tjr5npgUwZ8Df98NMBUlre/L +fEe1v4CUYoIvt7WvwXiH2V/78g/AjrWv838dfrhkBYoihogbCSZpgthNPaiF9y3WrtOWSBq3r26H +GHnRCN4DuKGFz8qdlBqr7RdXKx4h4WusG75XrsOFqBuofGlW9IrowMfA8XAvcKif4Ug5tbkKgV5F +9SH01EG2zODC1dgKwdUbofSAm54Q6X+bMmAj+y2dqKr2PYlnY/K5MN52WJ1SB3OYc+ZAOC2qwCkO +F0XrQkWkyTnJL1XEoJcAm4oYf/gI7dr6jQRca0qhBZdAVG5PR6qbllD6hJ0NZ0AuQ+eDhNB2qcZb +BgdcioiP329aArxoSg71cKaINbT/qUYjZfGmazBFhJrEUHezYhWx34BjKCAuT0XEfJhbunBR9w+D +a/0EoMAZka2D0kJbNFuQj7OVTseMGB9khSAyB484/R2uzBizI4+4Gehxg+569Q2P6I4iSjD3RUGD +WNOXJGqNv2S5XxI9MyL0WhuyqMaPTBtAFp0bR6LCOxi034wWPqENPzgRtiNIoBolIfApELjj0MGH +Yif2as84e3zTEPNaO6j2yL+pviykZAGxml7wTuRNdXfj0gxqiaVCCjERSAQ25GH0qyagI8qtLSYu +1AcI6DtQrmNPrT5BRjY2T29XU3Y792IkfDlHjFbOboIId6bUhKhEXysq6WC/xHwA9aSXMWNGw1qU +gETKUiWJAJIVSjJyPcPkDsw8Nd/4CvD6xszuTUn2kAbqrtJmV/RIZiXi2JIWED9s6F3s1XQERGWR +u53BeqGN4rX3To7C0ZWcd/E+k7KEnwq+yqnVTL2iOsyZ8yAWrceuJ+VMb6B3mb31LoCMGqpo2atF +amII2UqHB3g4oE0h+iNFDlJxL9tSrd0XK4dfw9aiqPK0GCSfiZK7woEyE1VqOmQUOpxMwk4qyBPJ +VCaKr5npXJCJVstkpGMeTz9xruSl09GTJxYMJwrgD8WF2ExhudOpSO+gTrdVMtETqpkBLL+suIg4 +NrZltC12+v1Hyd9KYY95sRVM6QwAuvkSRQWammuuWkkpBKeoThlpqIDhdi1TYM659ZdcwQuitLij +WNAOQGYu5W4q9gm6EMdUY3xD3Koo7hc3i957AhItX4BXJYBUE54JSQEqMjhQjMZyw/3TsVCRW+qD +UecBugQnOc3qXw6LwR82rYqs5ai78BU2BjEXCUxrb4/GS/B8+AiYX/PzLd4bxXTYrCcF6gX4pHHO +0uZZpY2P1Mjjk8dw7dgYf4vlYKBAAzgNjZj0i7adKZggrYVllBWTGqqBUtOSXF65uCCx5ComXQJa +o5s3Tc/8rLRr4s2M6NQgjUthg3IXLAlP6lGINCoQZF6SIVVMkOw+PiEA00ldZncYwJnUVQ9PJCOY +swkTJGDHK4/NSSSLo5mJc6drekThVVJdiKSwSnrQiIv/M7RWDMhwd5aJEqmSRutOHQOwloTj9K+k +4LswEKj9Ps8b0Nn5bKS5EGkG5smI8tjzxdO/yWTSPaqoYnR11knvBNVELk/12ftpZoxsH9sSYkr7 +9yQEKy3EsPhVhaErHSsIlE9TyZ0wbgFI5oWI2w6/K6Xt/vSQgpiEPUPTW1rxKzoCT+3soE2EGefM +0p9gslhWLGOL3XLAXuW5W2kKZxRXCGTyIFQh3GpW0QsjNs0JY9hB2iCRICOudpJ+EhjN8aoXk822 +1w46ynQbQEg6jQxjy9J8/sU/aTjBS01UdiG44hbW7dA63y4OhAXltOim1aNcCTuVbVJl6NQGFAV1 +o/St6S5+Ct2k3n3Tl13ENDDhfBB/KN21j3hEshx3MqbRfnBQdyJxqTlNhsJdmKYl6JRZKHgfpEmh +Kj3HpxKZt+PcQ1JzzkY7oA6OQNL4vG3imkWH7u3ASFDKMojcBnoa5jsJMraLKxYkTS0DEwFYtSKr +9sNFyp+pw3OCCIrmsgCVNDI4SWoEw2E/Yfn2ngPlpTn6QIRfkHhDhbAVrjNgorVpX8TnlCbPzXXO +LFHowFKylEKkHWP4CBe6kPt/wNR838ChWXSMheH3sv1CCsVOlikhYGRXizMINaWmGnsEoGcqlgVy +TRxFuxsAJj2V5S+Cm2jVJ55ebrL9llGocD5GRaL6fUHWuP31DRT8iY7PDTpOviYYXA== + + + Pvg6+dlCt/DbRZ4dOMWD4/rLVUOcaW41xsrnMdrWvS5zK7Vp5EF1FufiTXWRZsKC3xOG34C0xdbu +Z7cLfbeoYCluMThbwR/D/cpIttT/q6O+0QrUJT0QH6XC9v/1hFoReBvq5NV3u2aKBc4TV9ojr79H +8g9rqRzVcwPy/dcUDyjCUjWsQ8fMQcTR6B+W5e4pOtK0Ldbl6n/gdP8u2987KViMFqjSaFPZMyYm +kd5YKos6C7etWMXVSZlJqhXs3LgTs+REmCUhzM0xdeS8qtlAh2LlTEwAcmUxMxAP6XnZfDjUpGWw +avYoKyE+Jn9SkuSluQQswEzp7gxBqS0jw5lkkQqJaF3E+7GbH/3cEZ05VL8xQzMIshlrt4LruxjR +I7ZyVc0eLAGKmMnQGCQyOKHAQNylA3p0CCoFks1w3AQMwMIy/2MSCRdNX4kcPJ+etgsuH76NQpCX +1q+MQNCWryrA58NZHfzr7EZS9FvEZPS+swHpnJ3vJMocfq/4DSM0iej1Zv1u7c7jWu2jyIMV7McD +7+CqXJW7cpEyDbvV6DTYp7ulktuem8yxVw2kSXFEHh4ST7+h5iSuzaub5EpDvTxMMVcr26hKFMe1 +nVfgTW2VmR6cBq7IWx2hF332+CZnalsDL8x25KJiT/ZshpDIBAyCv8a2WYbcR+yZEaxH2IgT4gkw +phR4d74A9F7l8dphuXrpgiBbVoZr6WZ9swV+YZFJa/m4iqksGF2V3GBtwum5K+hQanBa7ZTok6uA +A1QCqjaxs16hAq4mx0yt90uqScFWpTcXtSElyQkFWZCsPXXZjVfwBH8X3cZp4xG71ATlGRJSTJt3 +kK+WIA6ojVWX4KK0SSCEixOrYiwv6aMn2/qojY4DemwXUZ+ovBOJVHeDH3rDKmVa6AQ2Vx5EYod+ +dyDxByf+56X4tfBzXxfbBQD0QtzRA/aJh+EB5MGbX2dHLh1fSEeS33gHU45kCUyiVe7kNa13UcoF +qWhlK/3QEkPdVmrQkVaAydDUFxCWaGaadq4RqhwZtJL8kFyRowqhLUzVjuHm565rxXFXb3fwiifK +qwe90uhZOXK519KNOsW9Yo/SgiEi7jrqDzqmyegQoQZwjOZeUL4pfh/AKppJlE2wOEG+xMkMLBKW +7r10XO7ATzjQvmFnAWL5/knsfk+f1WKXMhBC/v2kEz5HSr2+jsWJBiwS+V2FQvaGgCeYr9iXnD+q +/91GVu2JYg0uhBgDbp597HoL7SwX4Nhu2CuTcMHqPSP6x1DZDLslRKE78yT6TJJfJansyxcfi1T2 ++n7hVFH04evB1FTWsughy71eNWuJwbrpCxzHh4WNbnAUKhyNLEsD8Exlv3UL4/++koRpK4hsFMZI +tQuY+hD6txMtYdo6YqDAh3vx7QVlty4R7ArKVgUyWp/tZWg5dXrtFD4WhBzQlHtIHQPG1UL1JKG+ +GTSD4dYOZ/SgFrQa2INz+JidkrnUzxLOxjHbDbdg/pXb+QylopQFAdqgieCJZgNQYTxdMgDisYL9 +fSpd/PSzZ0vX4+LHtBHkuCW0gQrSmOYtncya5mqk+zKLWKtZe5pZEGQ4raTiaJmSWxXUnu1nmnoy +0Vxq10xrwMIutbDBcPUO0SCFfsoBEVwtkpzCyayV17e2g9/2oGL1q+ABKGUxyOf78oPUQtOrLwbk +wRkzcZK/HRbBmxko7w1nTL4TQqYegEpjt+Dirk+6n/oMUS43n/o6BLaTTrjeefl2zdSF/nmBLauW +wMKovEk30OYX+lciRsWCZwW7NoycgmSI3QK2wgHACRZgK0V35QJXhdoB2xADVzv7Uc72ln20PKhM +GuVhGXmdoSgWz7rg/9w2WAI3z9GuvWhH2OvV29VynFVmt7bWBkWOU6sm7z6eqIz5buix4qp6sLRa +4rgQhQVKoVu1Wnr9Jp1aq+2YuqFVUqFtYHVoqI1K/Z0slVYLFDACmmKr1abAvtnvl/bETNuRipQa +jz6uftucSLuccA4U1RbWsVZHtYn7HAo/dPrFC9NqO6vjPmPtPaqeJv63O9ZOp8dZ5cZaB9z4pXwr +tBvPloaihhprC2Br/bq+2u7jfFM0oQs0FDpba55RUW2ZzTNoZWJi8+ibzA4g9eUlVE6Jv+V+WojW +Fct0qL0gWbs61VgNr23sVmuOSenW70vaSVJAyoCvA5dcV3CmjQTfapfSnlFMaHnhVtulIzVdg0yW +4lJp6IBUmz1vSUm1QQeoqPHLieHPKdVqhEf9ajH6/izTRaqHxivSdFVy2lp9A6EMhV2iPCCItuzq +sTYc5AwgEMyLHSYKYC0nzP1jVwg5C+SwIQm/f9OaDgprYVx+0/xq9fPZ/r7a0XB6d/PI/S0QtXKR +War2k0YcsvKpDVUrUdJU7Y2sY0Kg26lajrr+q5g+1/epKphaAda2VbWNX//ONYPtcj3Sdp3ee7Uz +OGZ9bXm95x57QFISHx7OQQ2HXy2/jUOIJlEuX21nNtilXnB8KV+tRUudsnDaV4vAh710PYdXvqW+ +2itZrhJJ5ABXrZByXl3+LrZMXJmMNyXIhFMbqYG7gvOpdGqPEBpKyN26IikCtGrD+9ZqjZkUtZ0c +g7xUx1aVVp+da8f3RETU+dy2aiND0JUxk5aCVftfaEEkLfP81VYJ5OhfrSouYsl0JX61Mktcv+yL +DukcHNhBaD7pq+0T1y1AR7M/AavDXjhsPyBNMX/eo5o5TSzwxH2ipk3CdEpNDadLeO64gv+vK8aa +tHd0LKDTW7xZWTNmrQmyC3EXrmVzzV7u/aFHm9dUszUxcm6l72sejqSIyF+zcU5TFK859uIW6GvC +6Tcd7L6mSdSs1cZ19tdETGjOa1Z6IuMdEp8YCaPXPHRk0WGR1+zKLQRWrymVODSv11TbylUGbGqm +lZitVrEZbWspPjZpB9VqXVuhILRcbDLqUYzP3hCbJW0uQXpiQi4YSnQqNVVDXpIGhZ6a5ftid7Pu +jNONskUsIpefuGCF1Xrb/swE5/m2wVtmZiXKhZwviNJ8u4stMOZbphqTXjdG32rwfFH1LYuqHXsi +05RR33KVxBTSv60A95LO/REoPAU7EOmWkCe5yFx7B8uZgesbE0uVVsZk4AqFsk3x9TbmBm6R1atZ +DVxW25zZNT5UfAOXk0dADFzisGAmFUJxZuBKeLsdTgN3qADJxwK3cXvzYoHr0mfMfmtKEmlDwgvc +veHndHu6wFU0X6uxwAUKHnMqJ3B7QVpQP4FrShktFARu4JUAKPdbijKrPTRiApdJnNHG/bb2FM7y +t9/GXBbfTTD7AWOa5cYasF/tFQT1ARBdxKETfF0JVWBuIy/D4arASxj1vV7JX94Lh5pqb5YmHLIJ +c1Aq4azYjWOGt2OXBr0VQTic3sisc/AMCIelBJwQvbf+w+FYgb6Jn9+tVTdctHwCUShJNwyW143d +DQ+oqnNDLViwbNgeKMkSyolnQ5c6M3VVUpQNdWPTBSwbgjrO4t3QIx2rj7vh863HZ0MjPtz04w37 +qhuqPv9w+I6EFMscjmgOQ1QLeskcNkBuh/vNHCKG0B4sc6hQXhIMc5iDArQ3aGE+c6jNgFgHmcOs +hpaxp6QXZA5bB6SZModlnR0qEXI1OWWHVdChMsla/4DB+fPhjIAk91o55o5RcLBDBRo/LAvLYWsP +0cFonnFoJ7jwuN2D3NRMX9FXbP446P9RUgsl8or8934fa6BWy6WwsuS3FguF6lhHKBtskPSGSuJ4 +PL1ATZPc2jmMBYYXlU7zeMq0R6mVAU9oNmEzwE0XwC9iO8ZqOaQhG57laX6P/VaujcaArzn8CyuI +FKK6UImlKmVheQJ2IJvUYRoYmgzSpxMAFD3f968ABRfQdxrUUZIQ2qdwqkGJXwHLhQI2O0ZY6r4W +XLAtAa1zmdqWkBCVFDKpbkQokGg7vnwgeZ4BKC634PhGiRDSg7twI/baLgOKhI9AqW7bKiKlHvGp +whTeCLEsXF/0iEq6Trv71M4s0x/LAyqIYF3MtkdyeugkOxkNscIe8DxHXue3m/kccM4UsPZuUi94 +07io1PNcfCrr4toN+mOCQt8Yb9EnjnJCxTzjDqJcaVZ2HZd/I6KWcpvJTiIA5OsU1ylvjgOap6P3 +idMnxiEpMTHHW2ab8iSyYg3f5cYuyUKlbLZ+T7hlPG3hLP+Qxx9MnYrF3UlK1Ld17z2Q3Hvx5EmN +jfYvqVE/TO5svS+L9KRngn2ycG0pQ2qDzC3d1vnLZkgo0a4+ZYDkXXOg3SCcUMZkoifwe8V9baLr +ihNfz7/NGzFM7nS1TKF/LvzziCMsVEQcGc5oTRl72ZoslyJRwhwPKm6X1eSz6fVwKlue95dxQcAK +gEuyrrTrhNR+DqfFHgf+hY3id9A6gBc9cuGvhh3YJrzdSsBuh1cvARMV8E0z5H7ZCuTdeSVgA+iB +ksOJ33HrKJhFYr1YXHoPI0j+ww1akdZ5SAuSsKCFL9x8IBSsd320auRWMGzMhFSrvAyTCa15RuLP +kAkcYloYE8Uyw8cBGznreQjbrk31q7i/KH4rJMlC0kg12N/enSYc4xq+8fTMjl+AWiPJRZ6GuB0A +OECV+MJ5KVE8pfe2BKOzOhTlScikm2HpIJbmqFu96xpvafvLdyVcZhCEJkraVpmRzj1w+66cQb0J +FtRVMjGIWxTk/3PdM0T+4upOPtOj43Oo+IKnhFLQFFeBeMoiI/3FffQUpQfftjrh2GAAxrBuDCIu +q68eZHME8AEkeb5dK3SGHrqsmY+A6pb03yu1oKmftOhR7cLDzB8mu5GQXtqg6b/vg3vVn1u97/VW +18cCK90whqZruRdXIR7NaQ8TJMdj1G5KtkCfUEV8tTN2w3Vh6smJ3yQT5lHN8jIKpVb/B0FDeqx6 +WFbEPTwnNtyLxdi+xeIkv7XkzFXTMWL3kdnFv+GHC42OhfYIHzhe8UhLX/3DShXhW1wbAdqcKmpe +n4V1X5csSv6C39Xxf5G2SzAL9P1Ok70JlhnJj4fOVwam7MtnUST/Ifrm5JvEZPNskdGxAlEaAF+7 +9UQIzg9/f7DXGKBRSe5pqP5Wy8Z3ao1GaI/sz0742D/Kkc/yV6mGRuat/GAFPLXTmI7Kn/b9WZsB +vZHE4oODdMMHL6YqZ2Dt81rtZgq0wnJIT3j3q7Al9MiHXkzlmPNn0k0yg/1siBYfNXkAsGYIfXKw +VvvTA2k+/yMmBtQDrih0bX7/V+hwWv8BvW3XAzXKRepIrMgX+5D2tKy3TXBX9BguZzedQeIvhcUM +Z+zAil1eQSMBD1SP1LAqd5ryCr+0JkB1BdoSIaNMQKDWfbAFo/9HBswU1yo+vKWXXSxneLjyJFEv +FaG6cgXqzWpULpMGKfKFu7DcvXozBLyTEOtxiHZRtfH+9LB3FQFwYAjusq88Tb3qvsetIyHcwLCT +nStBiq9jlafqKO6YrfIkz7fL80Vj2ds2kS76U8iP1go0UA7Azp/xSNPsFe8r0wnN9A== + + + fzW8RMAWbP7vwgoL8PsNMqBHa6keJD8YlsVSVjz7IvPIxTRBjfQUiMho4RJElKYlnGVZOWAbSzCh +MYVrCQdX8fm4Vdu+SjBNdNQ4wKnWLipo8DH9cuAxOCoPKCnUgQBwzwsB3d/7Ql65R070buenSNPN +Lr/5+/xSkG0dRYUpz1TcXATx+YkfcU9yvJ2Q35I2GqlG9VYLa916yDUTn5nezbCrGwv0On8W7HBC +KYtNdUajwYvVnZskC1YjsvUZ6EjmaulV2xiXOBlQvotoO/lteg/YFsBeer/mKm39B3zilI9gfomL +0jWfpcaeEOap8TRa9szEX3E0lhAbUXEkecMNs7mxRSd8hIksFbQJhbMRuI1AvPanZ32/si9NkNdy +7t0hHRuaB05wnHx31djkiJ0jogUydAMnw6lyqomwNwwXrVwd8Xb7WHRiG8yQisTX7hNKzqi5Q1M0 +RdsgSVDWTJ+KzkFZ9hHqfca+6x5SKAy0cijA1yNqBEyXLRMm8mzNKQtalCV+KJ/tKiqStAdWJwmh +DlQIzkFgpP5lGOIHysEnApHT7EBAoUm1Z7jelqIPoX9Jeje9UUcQpQL/eK0VQdc+FRwyUe+EemFh +5z7fZfz2FOOad8CD1XM+MzrNLGaJOH/I97TSkqu1gCI4VreYJvijGSfGitekRS+4H3mZWhqWyMCt +3JKAbzGltHeJfQIruLqTSUL75NbZXUVS3hdPVOQ1AjSvLi0Ia5/06QNlSV23I+UD0os3TovDODRC +LyYRYRhiKGRlgUGQ907RLQ1ea+KiirhlEbWFENkeMPbfSTb0/jsXX0gN4Ch8AuJF+yMILe2XcTFI +4SuKR4AhoYZVoF97JLcAKdQHcP1sy4aBifMrZ61TtPfTJVisM1+xOr/47s2iQOb6uBZu9Zzpg0qU +fDDCRzN4NJnNNrd3q2STPTSIoVUd82WOIe3nSQT8vNV3vN0ANAuLYcLJdrtFOhYrqFV/uH4wyACM +IseYpzlTdb2M6vvzW+9SeEOsI3mT1G8D5IzKH7DtAWWGqqlGRKc6NfWyuZueuWusbCHPLlvWUNbf +7dTU6N3KXSZnXkscwZo01cfY/W0wXt7PvLhEfroQiHpqaafuaa0aCZMb84sHMjkvAwLrtoE0tQPn +k3A18jt5kUMQUJIVqlviXDJ4XNCMYJpxy01Ikm/lAFNqefG1HMJua2bSrRjA/CXkdDUKMWivxrcU +4Ndiwc//qqv5JRwWdqxpU4dJui35FgGfPvdhbcaEGRxTsOaQJtqwK0YRBbrMadPoPigOJufEu3pU +H27Ods69oXLW+Rc2JUTcmIT6MfnXRS4zI+uksfOC+KxiCxZgjVxp3KYmKKvCmXQ/JMkm5EVy5JOh +Dr+SC1gZLPyLylgwLtL4IIklr8l0dwCVoWAdFqzvV1yJA5e1FjgbGJjs2pNB+hr+Wa1J58o9wttr +jX/v2eydduauBbo+mVDu6+lOwP9cW5FX89W02QSyCA3Sv8nMkRFL2sHMDivFzAD4uexXJEHWk5jG +ynyiW8vYGMoFXjCov9NUalo9ObKcwqnk6GPFOzqwa4NU1wDuzafDYDvXmpsLK6oGsRkJDil6JPC7 +kQUi1zc5U3Ss/wObqr9UyWbpnHZCzLwvg0XoOJV0vZ9Rva1vmDY/j+L84aZlhiEF4AvpZvulIFHI +Mz3rDjlFY+FG8Y2KE/kSC7CkRtYgsniDC/ynMjIvqxKU+B3qOMvFAnwHVDRYNIrcWcKDMGlOu2xC +JJYy/QGjEGQSbVJVO5UIBj7yQ73GlF/UgFoTUklUGVw34RZVvryeOsVVJf+8CsxPfk+UU0j3ejr4 +GU+8OREu9fkt4ddOv09Q89MpF52FdQep9/CIMCn8PzO/mR5Aza/Mb0pVpkND0NWGIqN6CQl9fRAe +qnlv9PQazJFJ9L3o6J2LEZsnQPpy6oUdBe3WV8wRFw/YLwIcFMjPsnV/4ZPSy0BGXYmcsMreXgOh +mEglGeZbjdxsC+IHKNaOkUxCXHJ8SlIT7PV2ZmN18N2qdwdmEOQ2Bo0Zo288uSBulFCYcuDGu9v3 +AvFBDpRkhFwPxxI71hvOScKIId8mzynZC6GJQMxLZPFXW5jyH0tAKiFUTi7JaCGSR/oKgqxo2Ycy +6xhFoDFU2XgBfS2GpDXG3faUTqzm1Vnaglhas2FkqDDTXh/T94D5Sv3Fi2DBStWCCXDXTtWF+T76 +ev5Q2Kk+lvc3jzcCMfQHKcMvG3y9f4OdqjZWXs7Iuj4tl+Z3D5oKQIYCWjAJj5BTEuaYe4ZKixLR +bGwueAYm67+LV4lLXdkE0uagFykh089EIocOEI9kwyXu2AzIXWrfdndnMxsdZ90Sv6w0gc8kKewH +EwT06QjXrVitFfOq3BaIqpNbOfjRhrkowDaIGgc1lOskUGXZAkIz4sLldHYyvDfnQOCQADfc4HCZ +YkPjcBfMNpumUfFgDn3Aw+A5V7rXH3c6Vu1fxjvuT5StugfaSGfJ08KFRLENb8n01H9Y/c7OGxMm ++4AEJDro9EdhSrMrQqoDdZQ2PplIrekacB2F7B4WtC5F1PnfzGX2bgpKBYvPARr2B2o1gmgrBlOz +W/DYEhcEftUQS4SG69tLeAmVoVlRhiifeJTtRhIHGp1OrVcdkKRC/MOPGXMxtaDQ5PIW3aG9iM3T +zoNhyLw41hCQ0g9otYGuF5nkvkPeis+Yi4I5WvRN97uiaDO5rjgsdX+vvmOTYlPeI9QlFg2gXDHZ +apPYOezrplz9NOF+sE4CFO/ao5iZMBA9h+Xvxm0NAFGCIzZ9VV4USB+THtKrkK0JTUjrKCIv43sA +A4RmCg3MPTYlhQx0Jq4b2uNRwki1teq1eZnvFlJ0SlywsUThb2gAgQ79lQSbV2LonikbQSEX65v1 +rSPPLOKHud4Si7wmTVeFPSWOmDIZ1aH8QCEZw1e7hxUvKjeXleuJjQ2TDPm2n2ek4W0VJjoKwo3B +8vahSUHyDz/VRm/5P8BhAPTn8Pl1KlwJlm6BGT6sEz7ypHnql4mw3B4YIxXO/GcnGNDcikicCpnm +cQlKxQwIRoVoFryuyiu7weuQUwa1y2FEiY2D8P/4/0lC1+e+RaPx6cdf3ZPAzBgZxKWuzVRpPo43 +ao+XenyDXCY9RRHbyHd6MbBbU3Kjbe9ljIGU+tibRs6a3bk76P1XQiRoj7MKGauH3Mx3elybAJBL +7T+aSAo9cpvOuGhDR1Vu8uDw170ZLceYNy2oKjquGVL+E6yEjneViYCasK7/DmpT3ee3U45S4peJ +ptA2awLlwFbGvao9SE5BJOpWc1EVM/07v6KHe5xYRbP+wc/T5jCLm8Pt7TJlbjgEdmt1XxqEa6Rm +rIZgVN/UvaqxpdcVN7x309J4bsa5NwcfAgVJKGdtxG0jAjmsxU03CsdgsCm4dNI5JDQ/YB5wk4Z5 +JX303klWIE080viJYXs54OrsK26G+md0YEUAIQgBzfJD9NnOWP7BmfFHefCiXb2Mx7aVul5blHIK +B0a97GqBrdtRNPAfmac40X0OdECitPpRKbvLSgBTaUupICcu/MmuNe5s7GR7OWR4Mm5V0hn/OyPm +3uL4R29RSQPef1zZ/+u/wn+CoD6oVHHpgQIOrNjZSkPMr0E8kvRNhB5U1lynKxXv14TW+6O0syrb +bhiIZYXGPHrQbIs42sBcrOxHqPuKvHeT2EmcejW3JcIavBa3MRPmNBhQ25pX8jdkUK95EHf4tIk2 +pu3fB7ZBwYpN/EaWOf8AvstKifvVXSh6UC0eCZSYMoHnPkjaiGC9rnVroCDdnfxj3JAjXT13is6V +LDlT7jwAJWgwoO3D8tYuIUsz6rnRWW01cdA8xoRO6OpD2tZGF97hQfDRWzx2IBJd5FCujsV/tP4j +F/4NqMqL2SDf+zntlxOP053Dzh0dwt62JQowLKDB9bZdO8DM0ZWrXhq1ZcyJmOwrqMO3U//odxb4 +YYLoy+KjpPgquKzqFi0uzNUdLjO1vtqgC2zPz9Uy1fL0sTGVb+gx7LM+oStpqCyL+8FdHPTDVKMH +3IXlrbmL9hlKt2lMb9Nz2y4Ml0dKBTH2W5uaUZu2ey9Rzh2hjDU6ryOB3OS8xE0EuWyuUF6mRiL4 +/2G8HO/qN0uS9zOlz0Iz3ip4+9C8y6PlYKDFf2T65CXjDOe0IcHExUL1HAiLrwRmRVm7XJ56CwtB +WLKbglA0fF8fiBrKgrh54vgZ67aC7Jhf16RMxEAOYTH4X1bOivI9Qr5f48+Qud1QGZXf0C311tp8 +VvNcNhlEK95lHdWdBLzhlmr7DkQxKaP13PgCIRC7a3HP77vxFXs9dydG/ixIlnlbc6+7Ig/5juxi +8jXeof2j4dApZ0pvkrsCjV6vdUqobka3b/25RlYXMnbPgm0XmrEunHrnnrgulFcTmva3UhfEVsjS +Oe95Fr9Kn++lrQwJ6qJvng9A9XR+2OG95UssnetuDM8BK1eW5Yq2+vbeVttHa6T323TOpq6iH9/T +3Z7YEYG/2eS2M4GK3rqVzKvaRU4f7Dpu7zw6NSTSTXRX7IcNnqAmv4UKxBPu3jbHeG0d9h/f2yHH +Ns+fR5ESfDhz5Pd5ed6V6H5TWHK9JK2T36gqHi9FcPluWVH7Dp+B4rO+DZLshGCLF6NyLge0PIxo +YUA3Or/7UX6vPi877dnWF8L+1ZXcsDSfwH6F7CgIfBiWekHF26t8xshI4FfIfCKF/1XlZWr+GVjt +26iSnwZ3Xz96JnCM4zCwgpvEm9wSPMj0+UKVqeqp3F5+lYhVYnNzuzyHgSg9XTU84Mga/n+gOevE +HFvnLkxwSDTYImHXUPo65//fq1XhgxgA9WI4xLkQLLjrb5Xg5Wes0iduAguguCVCxPpXFctnJ0cY +Rn/EXNi3cBy+SeP/jHTTfn4AbGBv+dhxu6GfyyIBfEBkwlimOGdKubTqbKwtpOxed+H3gvR/Um6z +yV66D5vc9JfBEJlGpxVXm1PGTNggSBB0+TnzsZah42UigV6UbikowzccmPkNP0NR3pPEhe2LmfM1 +cRCQsVqYijZAA/UfRTXdFaMC8hZTBSgFSUeBODJHwPpN1kY8EZUYdg8gZPXVCQhQ7FWxoYNqrqSP +Sj0Q5VcBrUt9mFYotyxdPTLZlWrife0v9ZxVlAQkQu5QFJaBlqN7Y0uJ8vasFtZ0sTo65CrA25Bb +j/aBqN0suJyCMAow1e+o+quqZyiQ5siq08CZYFPtzFmdqbhfG4gBmjhMSiCJQF4A7ftSoT8X4ABD +5WWIxSSs2owVPhiq7jX77igZwRHhqzmq6EEm9UKdxTGirVKKeir4EEAEjpv408hEzmfXQ5/V99ht +OZTCY+WuqUBPl3zck+4GwTNIzjzHVkfYe9XT1K0X3ktS9mQC38TnGfX5ExxM0DG6WnS85ROQ2AkJ +0/F+5ESzEOqGEJVjfIlI7/KXTc3sSopbWUGVZOW55LYqi/Rxyf4tSTZdjOS+I5tcHQ== + + + lXwLgm0AMU0KThlpUDWmbG0ntMjHgrj48x07S7op3xgxjIP7umfzBLESOGJUysxjAB9Q3ZBcvSoB +PB2MozL3yyfN3O+E8/wH3TK4EGVwkrWJ7udwIi3R3iet6pma0Gq2epZV93ZDTXK1bLfvc5HKf/x/ +naQWdEh4aiWcSVaqagq1WmGpV9g7WxhH9p3Esws6YAyqcga9IEND+Eoka7mPKxA7SjmS0oW0QN9z +HKjAt1CCPuwKW7jlBNeNMKHnzYHVg+cKNkOOyO2NLUqlSAzxniulFz4FVFJ9+ye7UAqV+g3wQ0JO +fNdFZe2EyGYjK5Ayin2eI1yzdfTFJlIjfyh3JvaAbqdy9q3jrVc37ajOO/qca3447Cf6fl2+1KLt +u1Wl/f2Nrt+/mdUhXnpxp+A0QbAE8FhPo0Cf6kxzZqvlD3fJEsWajyjyZf2SAc+/TjDcyJY9sK3s +R9RyccB3mL9WLk3vUrPanz/nTlXnxlW9JXqReEVb1TE09jOj4FdfY1/kLuLlYHbKm45eP8QaKrqt +P4ii3fflAKFqO01roYz8jw4QFrhYPyqebLHHnDXA+KVUv7IxqtZ9TVxZ+RTKdqiFW5DS3slfs5h6 +yFMMQrw3JRp9zxaeA3v06dPjhKVLb/El5yHXvrjOjWD9WT4GFwbsCngAHgB/IOwwwECi1WDouEOW +asfHPoH//uT65kx24bogAyFTXIyGy1WWUuwucDyWOA0onH5VBs07iTwAydoaPF6Ys6A1Cz7flD3z +sHSPl6o049Qz/vJPyK5YoK4+WVkeuH1PEFaihDwWhUbAIMR6wi4QKxZqSEqv/6ch+Hd40xhM9vT9 +D9j7JVoSdOWaVQMU2u8jl4wvkHaHttEE7awI7fHmLTrR9dzxKZcznTzTZ6Zt22ZLJBZTBHUsWfGy +PjrS4g4TidH9OQq9798mD0iCx0Dmru8pXfV9mTYT8pCLFIP/XFw50FChxazDzueFNfcLWO/pGPSf +9zixDHoNUY8Mxw5G0Pveb0BJtNWpSGd25j8kFq/pPScbTKYHfS0kQs1um57S03l4THo7nZ7u6Uea +UEjAN/VIgjgQ48VBp0tGOXU2hWe3GY7tVtjQ5HmcKEmyjpk19PKHmTkUVUFS0N323NT2fEZAln06 +do75tlBysnZ3PIXRATXnS785wlpVVK2f5rcgcPNKdZw5zXbYcJ6Uc9Y8ScrcCinxqeObVleajTzH ++AudRo1x1CdgpxMmHpHM90i0JeOV557yUQHTDI3A4Z5pfPKKFkp/CpUcl5ekmeQNzpVCNEMAiCBc +Q50ygKmIkU3EVBjI82/In92ykfeQyF8q2pLnd2AadtgCgrZbLpmwnV+vGoyM7TIohg87q/L6JKIS +7SulqswIpWCxwSos9dJs1yCPBOJTvkJpo6XPAaEoUNTRThq0SxiyVxLoEMJ8SI07asEiBubFRHEt +wbHslYBiB5mos+t6ZD/+ewuQHZjttextb3gn70Yq+nqnPHez8f1vbMhtxnv25KXiGDV665Dz1rzY +nsEyaw4YOoTDdkT+p/gCVQRdMKjRhSunYPc7VpKCpk/ng6XpprB2w8uPcT5Du37M3BsqdUll4Zt1 +z9KO0K7oI6Cl/gteqW523hazd4KeZrN7n27vvQ1/NBICNq9Hwy+bGO1K6A/ArwgRdBSf4uNqqf9j +DU2Wq98yAnMUrWTbTmaBK9aRn2OBMV9OMAtWrehxosu5WQdgW07+aY8KHDTzIIpH1H11x0xIh8u+ +IxnEr9YF97iu9jgr0N0BnbYrqd4106BDeIWGjtc4AT2k63xAPnPWu1poaDkVT6BpRXV2eaeTSSQR +lUjyiCxgXVVSuBhEqgZYAVrqbsKrV5q5RkH/G1JfffRItzs5mEGRDJuHvhbmNtcq1uSNLvQMNdcT +ri61rdQwC4iJ3yHZqjLy2BKQ4ewHWmCPR91kBFrh6z13e5zRtoEbVPeg00vr9sHZzylUuXUqaOr6 +W8wRhJv9lPsXkd7mtG7mRiBnp1OBtg6QAybPTZlXdMe2kRuZyQmh64PjIP2XIAz5R7G98L4TNKK2 +4BK1YZUTYhD5Z9WCWk79hjS7hxwIgO3Ht+76Chbmg0jhDyB0URQ4Rtz9tMHBXXIufoZJHc3YgrBV +xLhASF1uRWAlhOzCKK1NOBVF0YZsEKLgvOYdzRoqbwmqk7lC8MG7UDTmIgnnQUjMwgZJ3RsZ3dP1 +ubeqNvcWYGP3JGWyxAzsKFSWnyjzEoQy2o+yRPcN5HKy6LYzWc7mBhYdA1KI1QItp59QlG8pp4+1 +KJ+OwA0BVCOl2gOoKRvhzSSzlvbk0oVbk4lmbdSTD2AFhXZcikC3A/PoIcF0uYBKDYR4t8DU5SE8 +JLZMPQCLJUx0AzChh4ZRiGjicK3pRwG5EwYBAIIRKhJqIop4anwqGLbESCaY2RmxLoPAkkEwJZdI +KD8OiBhPVHgD1GTEhJ0Fr/81EO3AFACwrDnlZ3PB8tHxoAnQ7BD2niaH4Pi5kmxydRrlVPKnnSAH +flBiHHebY2QMOO4+QFPImprB45amMpByVkWfq1HELcU0XGYy2Gjnykum/5vesWTu5P2bXRbHse8Q +XNdE2hnP1vyXQb2e/fSXiX7uqUpgJtJFYW2GqvUSG1BKv8RT65U2UbJlAF48ohSadI1CwO0q4NVh +7MOPl5GYkwfx6aeAcz7HaGh1ZS4rYBmJ5CIxLgcD4cfKvcac77q6IBytwcTR8CoKrwhK5itMJ5Zc +JLH0nV+LZ+3jabj81J+aKrDjGa/ozufn2QMXf2z9usMilgFe/BSSX3DaWBILBmLcVYRwa8E2TneV +lPspRBnD2gskbDl9oIyHrlC/ceuiDpD1ANZ7JVvQ+JeJnlEg4YG0xZqo0J+N8veu122KjzXirRZW +puB+YWWTz4GCL7PbCEZMQoLECMwnPx/EZ9YRiaL0gCNhjV3oL7hXIAXDwNEKeAmpZ6dL4ArqbjMQ +jjndZheRF9TDaJ4a6tx/pvlcLxOePCvxaWVbXWvqnZRR7Nz4Z71ldjINRWev+ej/QJF7zDB2EP1k +Htn4q6GhTI4PJ8ExjjLJpZ7HJRXqW05jrp/B0eUE5QeG424hGv4x5n/sqHHF21YK0r2l5BPOV/hx +r+D14y7A5LVEnhxEKU5xN9Dr3BjaBCt4fzi04BY51er9TDVxttR4FNNG6l+s2QujtcS6CcyqNtBZ +Navh2IWJnZkGRlhpFdLavrLW0kqjWrWuYjReFCe1ffiL1qo8A3lnHQlU7Kqz+PqzWG9/m1MkWnJR +NBerEknMMWc7sFQcJKHkMIormho/INg2CXa5KNjsJlICJGZYhArZC1iD5T/s2wPQYN9oRF4e4L4J +kD4Sob9Pgy/FQ9aJEB/iYQKtKA8iJJlZ1WvoJc3uxwwSZlWp3BAjNgsGSI4BoM261JLcraSzGckm +fl8gYaaREN4ht3LDM8jaiu2N3oOPhXyoBSZLArXm3hhZPjVDzIqv3bJjzGyU412Kublmu5y3Ax45 +SKAwvW9rd6EMsCsTrivD1SWTUcaN0ZJy42aLdUDFLe1WxSbu4o+bDbmtoS5ntmVJhAuEYxnKTWap +3Gus8wE1Q68ycnsYQPImyl9yYwiLK3E/l4SsmApPKVKetx0I6hyo55ZHAnY/4C1ybzrKQOcG8TZL +vNG/x8BavGQJ491/Gm/wgFmyrAyGskbDJelmzACi58FCkzxlZZDpmuFjWT52Fgzcd0GR05ZNeKKz +A1YmsX5A6TIJNRc/S2SqySxqSVARGDQRyxd52wJI6V4SC0qt8AAnksKGSb3Ltlr2F4mTFIdSQp96 +JrRSyKNmw1LOZlQ6GaDnqm2SFToL17Gcedgj+l3t5KO79nzC3Uq3Kg/lKl7f7ORg1aWXOUMGlJSk +FUdJshkfI+tmCzeVK1JxZ9jKx1s7WFcPeE0nXjIxhjE7tK+7pTPa9cKVFhtKz6oeAjWMDbUQgIKy +2lDfZ5qle/lVRA9+a9jn1Pk4AElgWibfug4ycDAYYTuyI2l6FRRTk42kSDbBEgCl35w97IEuofVq +fJis6z+CvaTcIlqj15m69lGLsedvHF1P21vRnNRhYm3+GupvwY8+evbNL9yfPRqRzftGazt+eaXA +v6x/phPx4T0GXx17SLncNBcwr4TaG1A+8YFWCyJtVKjA6WCaWhYZ9x2RKlEi7cDhYlHkMUR0NIBP +DDoniNLAINPy56+LQOqHLHQ8eLEpeeUVww4l5o2MmWH4NjGuhijFC350FhT6i/PvHxBErGxFo+9v +7S5z3U3dODkDhzEQd3/gbr63W+bGHDaeTNRY3Muu2fD5wzKWD2EtvffO+0J5f7nB4uF9991PRf3p +Or1C2n2NANka3Wmoqq/gxP2+gkC3uu5ap4ISjBmr+Hv6+LrZvEuVwSzFVU+oBq5a2QKi0LAs5csw +JTFHsFEEm2+/V8rEhwEFgntmfFDfGwcGxL0lN/URj/1eagU9FLrJL7B1gY1bB/rABfrzVoGehVTi +VSoE4UvFoHooFWU8tnd+glak3XYF6yqp8xMMNyC/jTXgTsWxLJgQaZY95uewcj4efAV0BUGrXrjz +dDQXRf6EpShyi0ANUaLa1bNoTIqy1aHrS9xuk9gTiwH5OMqgHYtxX7LcIUx31vCu0u4ux9iH7hyI +/e5veRcm0SZZfZ5xUDS8yLbyTigBD2IWlvJuUETXMHgcJC0sGpR95jZBb2iD3hyHxYXCxdMbuunR +0DDNmb9bcAucXwSfrNCR3kZ4v4s//sFgxuj24cPyyWqAFMRIPtCtpB/ZvdgpWylZX8QMEXyuXZKI +9tyQFTrsc3UGuMQD9CIgH6N+c841dGdA2ipSHynpNA4AfOtcO9dtaHMY37AhKgi2x79Z+LbuvlpQ +OCs2WHN9E6YdCWqZMCBTox2o70T0h0LddFl0WvXXfrEpuab/LUsfVFbZVj1zq4iCktadNaWBpvyZ +qcr4b+qeY8mlHrglxQINBa6tmk3+mUYpQUjU24hrLi31JFr0GirDuaFh+LpeioumtOVx4RaDKjfN +RrRGTwRV/K0ItawKIDiYUQAaJQSyIl8G/u2meLH62EalJ8inOz6qlu9i8AEupFlCnpUfTP0b2p2J +d18nSOrNV6MHHo7/wyRc5ACDXsLDPVyeX26NA2NDA1B9rgJsvoo+c4APIBzXkQl9xgRGlWD4JdAg +SmNeCwxrSKDR0LjWZxxbCCxuxkVzYrBOjEEBpifKPxAJnyhVZ+jlQ8DcBHCSvgYnEI/4hN5AeLyE +dAl3wI9Jb14w4o88KdX6oI22S+Heewrd0rKVkolWh6X5+bYYWDrnM6beBetF/OMBVCulWVRS3pfm +o8rfAB8boKoX1nOGHAdvG2Yp+tKOghYy1ikKByp6GeM8xRi/jrHPLFbZGMerHmrFntVnUjCN6U0N +DApOOERFpfavsDhr7NQ1LFecq16O5GpVIX54xc8qEakNMYW9jJ1WkDpM329cePPsSw== + + + QXsGwJ8i5DRPdp2aTtMYIhd0IQVCs1T+AZvyg1iv5nmiC6xbTyeqzQgELyF86yomTyYce2WeEl2a +NsE05uouKmLgZCP2HntWJBQEQDxqBZW0PU74DSx84HVmRwxguwehq/kecCZ53mFYxJVlAJS5K1ah +wQ3rJoXK2cghdb5+gJ30Lbf053b23jJipPzjwOaUXObrfPufI6onUL0c626HOASadR8vYAn2al3k +JupuWpFmza1/bbaH3i6vOxYcEtCT7qSzj4B0evvdDkZsEAaJhGl8u3oz37QHA0UPcc7tYaWHabh9 +qCjzbwfWZOOLyaOSXSjkNCM7gMQ8LxZixiFHHDt/eU68/lxHWlYw4lFar6V1zEDlOW1E06z/eDUS +xP8i/+MpUJv/A3AbAW4ReRvo6CRkdSAJk2aIZHovZlHOTkO/S4uG+iG5HZ+GYum41vMyRB+HsuEn +OfpWQ1ZLykORJ9qTBM8CRdJri0eCSdc88S7qq9aklZ+YrOyl9yi5zEAJertn8CiKtFY9rhZUcwmO +hYHcc8siRQHR13sgTi5e6RfgkGYo6SYk/cYmZyXmROwYXSeKvBZ5bmklrOiS5U8yHDqbyxQv7NNP +qaD5pI1lon9PnAY3yIJT0QygULYpx/d04d/+25Md59xEgzzcCR20T9ZLKFtRBcI4wwqYQfwKsMgH +EWfFiN2dF42oQh1LPw+wRykFjxaP98ZujblUJCzCIYr0CF081fdgObeotkyH7b8ePpeqkXskHCw3 +M7rtOTYKn92migCnZgkBki5Cx9JFUz+UkqN/zH8mEwPmDWQQ9mbGJKkylEyepiToiEjWEHUJxp9H +bZgf3dRwlDnsrAX1v4TMQv08KVzc5i0WXMlw2WvILTjq8uTWNOD8BbmTZyaGW4Pyer04CnaiChap +KdVofwEpUKobqX5EIfou9C7xtL51kF4QH9wZBfhZGcOTC1ixPwZVY6XWviwILfes6yvonhgdnIfe +b7qRXUFYgJYZum5H6WvsKo8hMcNRLs8UrZiB8p3SWfu4cvGWZ8CRHNgBaHgG7biwnZE6B19E9SBl +K4uXYsaiZbAwS5COMjGNiabFNIUAgQFKsfeCkrELmfT0kg3eDlkBItTYgKhiicX0W2PEQ4iIj1xS +jKFZfGzYkgzUEfhuHvcg/lijazWdOlpVvjPlBY/ag6NfPgbopq0ybcG0geUtrRRqr04LgjEyLd7S +HsSGcQ2P5N5Od3K1J65QbQ7WRq9jlpZRHIxZFxt+1CuOWShkpnaChu9mrJ83Dmz03bgj5epnaSOQ +0jY0e0OxAUgxB6ZTkrzDUApKdRNytWdgKAUShX4ZB9b73lPfPKIwG1XacDTZNoGEmxb5QSGK3JLw +yW2GGflvnMh7U34FwaRgoY8tYEFR+Ds/gA698wPdFWidSQWeAt3P3BoJvM8bxQiuhBHkMoLSCKoR +nDPnmQt6BFGxUfWh1Re2wR5408NqZWE/16tp5POXraq4VeL+8OcqSF3lv6toZfRY9VX8u161YUVA +CowaPl8wVt5XUfCFn4AFAMISkxg2I5SqN+X6PkDLyWpSc1vKSZoE/JDb8/EqyLws5tV6C95k6b4B +hTVpQO2ImbLiYxnN+gbgaxjHsaXRBoU5YPyhvdCyc+ZDcXiNeT5h/k7aiyXAphn5daf/Q5iYY9e0 +r/sGMRvd7D6SaeYFSzBiUbjQr5E+OrFNVHkEC7x282fBKzpzdYz0o+X9YQwj4FdAKemZIbBlSoAy +T9D/v24HLStFm4xrEy7gk8+Vm6ahREz1vYdzoQMqo5iowB3tErftybepmmwOSsYsJ458P0H1yR0+ +lbI53HVk6qtFl10ZtUeq0yuQ3V2VdZWsuT70VgPfEj/m/8u12BjWKMkK8dyMMXjIQ/h4yvwRYjFT +/WBiPMCLwXmfMbKapHyThHBS+MRO3T7J8DMzy8M5UTp0mNjcjBYLC57q6lQNIGP80wiEsxIu28Ko +iLhMWVFVCaXSQ0H0HRT5HI3CLpZ2JCz8yakeT7Q3suRtci+eSvEBZYXkKm8pMhlSLAhPfs6nS4oo +9oIok+a/XsX+xjXfPBZyXw3g1xH4oHxvhPqrTDwCJX6DPV2CBipxJRosEyHLyWPshA2crENSdoiY +ohFXCK9QYJXaLDgFcmWhdBSVK+mi3KWk7iQj0CCEpmmc6C9Q/w9cqago+E81zRC2FrvQcAGEg0uK +K0CWGiGusQwEcVYCcjIIAxm29T2UnI58Fe+576CDSLy+iQH88A8RkH5Ajtd7cDH8Rd80f/8HTdXC +a10n6Bh02af7ohxAE6L+2IZg/Z6ckRRXBtWGyILjgKE+X9bPvmG/g1keNZG7Q/ntHtHUDk7ZlgYz +2pHAv+HVERonCdARQ+WItHVABw8EAFHjnU8MntXOuuNzb0jCBR+a3yMjRjrXkiow74p7urNHstij +BjQUOHKEfUAb2bVKHRABbjuPtc9rXAyJ9wPQMGwTpSGd7pHlITdPTJfxQFSw/8HGI5oOPglDpDmH +4UOGaGxdLglASK+INwiBPBCZQ+KID8pF4byKm48wAhKylK33IAYhYT4NFEJSONCY3aewHxiEYYra +S9nxTfZbY9L243HKlrRs9Btmy5u8d5xZxnMQJ6C5TqB4mgUowPshxyAA5hOEGEPxcuARWH6U3o1L +MhztPhEWNNyAZjmdP636+8xX8bxdUAhJtqEapAHF53+LQNJe4JHxOEJwtxbyrhxGBvQtVMOt7J/H +fQmSWiX9FtzHV0oeRLJPy+wS9PChHQ5y+JDxgUI91Mf0rXRSIcNlLacKfHDNqBkaJg5Zd+8vRg/j +9MAQHwL48fZr+rz6G/jHRK3JBQj9ZvL54+2NH7VUoYLsE0beGx+sAGgV2HEFgFvUup0R7EtrAVup +6AVmA1AwtSRg5gSRpylYjZTX/Gkzj21uuHGrmwG8eanZ6tybYOKbgx286ehmnw4RGC9GIxwF1s/4 +uza/h5Yv030Jl2cD7sBYPsJYLh4kCiwS5EZIaI9yfijkT9Cnk6iVix6K0YOBLQAcv0lwAbduyGvg +IMRQyNmgk4t8OBwPi00m5EDk5JH9hSpP8SIQkcSCJDXaJSJdL1skhmmJXfABwNZvHexh9BES8Sg2 +ir+v+KzhoRX7foVlsIdhHm039k5JHFzacc+S2xkJKDjHULpl6i5yur3VYbNvmxFOnQm8pRAhxQJB +6jYMBsgzxwtd6qf73TczKQn+AQI4HiQDZGSv4cSnRuemEgZXVIGKXtQhaHhljVkqW468xGquvNKZ +PiW0xmr5Z3KDhnEtCp0uD6djq5YOFqEF0z2vZTHSCpPmVUsLDBqaJ0Vi/BsCsTA7Z6RhPWJBL3vo +butdWLH7QZ3gU+bWClQFX2Qav/0JA6izSbU1+UBNZ9Dk3UykZfKFTMs8i2FTBBZOr7y6YulLFHV4 +Wpa04gVqGerbVFTSlwJADMt0hnfZ5Pe+p4Kjju+ZpqQpARlNVREwmqdExn8ixJS9x5mdNiOM7Tya +2DZmxvgyMnUIyrFlubgYv/cU3DpWN7hCDBcbMacdZh/m+F4mfyRz1cf8xdIWNw4ChRhLBL01auGz +AnBi8PWNmqBcSvsIZ1HZGM0YbsEKmIFpGjHDdhgAulyIZUubLmz5DgWjJK9qrWUSqsjHjYyTtnd8 +N6s9Yjkk9SQrfrQt30NnX/KxP3xoVT6Srw+vvI/XqKhx+rGsAHL/kF6iMEm0e0TN7WaBaha8lFhk +lhmYRbB2J88+gbdPZu6DDHdfV5LaWpSHS/Ho+jwJpbzl20sxihkgO58Qyy4UM60Q7wwC1WGqnb+f +Zxd5sbrAcVlgBm1iRleGq8LofVC8WCMOFKNxLOpVBTFITWVYOcAsoXmH6wAtQ9ne7AIiwPfqrzMq +OzMNfHiA3ocGYMAANBXZ9RfLvn+/+E/S+vhYHHuEFpWO3Y3sU8mv1+aCt6L1DcagZm07e7cgI1YA +tx8iHrh7TDmtfzzs3RUCdx50WBCHNkmINsS9xYuOPxaTY4JCcCe2ECblNny4fOxk5lTTYV/Jq0U1 +qdRdNkr0ikKSJ9EX9ibg0L2t4nE4DrKdpTv0KahZbqlVxFxpzrecGxoJ4xElmIZd45yVAy3OhUmx +AMYPsILgACz1V8LY0hgDOCFnPi8T4n7/FyNapgLPQUSkKj9KMeC/E7USFNiCZPXTeCgI+yhEdf2x +O7dNPp0TUCilb+JlF4X9mw6aFPTbVTFx3rdEfI2EV31zyLe3ALOIIquSbyIS35/9kEeXrw1LJAqm +HuvI2AQVMcJEdwlaAUPpkIgT7+Wm8EJ3jAnQeUoxSocn90mCIS7uJMjZQuHZy+NVgCbWhaY8dPlY +Kb+vh8j8kpaW3lho1iP5MPmu9mFU0OFhO/ZjIvgPSHUFnHq+y1EF8H50oXbzw1HHlMARkA69Bj9t +LcEM81OGOvZkiCMSkEhmjXUHsJABDJn/qyMke6AwIyh6AiU5QHH9yZkNSH0S1/HBiYNwP3ew1GJT +RCJyUOyRimoXx8Bq6dWnbWd+LS2Sk5BeHlIwke4XwsKR9XE+mKuSNH5OgG6SxXjNqwyN/u0v5raY +l0atubsftdjgcZ0MszsiwP6VC4DBZV84sFplKakJgTZ/WfFmA1UUE4lNHUr9wRwIlHmv0G/eU0Wu +5q91RxYsk7mLFaUIgVzk4uVJkDxCOKj/CCYqoER26i6Olei7zDCRcGjAB9j6g8QWESTAoN8Bpx0o +HgRiGyRZtVYeBIK52dCuiVUvQO007eNnyoDsGYgZOIM2rwdZXrA98EUflv9hlJtJr2hGV3wbYhAQ +yxW2oreC5Q0v+O1ChOwyzrpoRF2kpQt26SA6F8VctL0cqWYOI83xmn3PlXVScj8nZKoU7LvCHxzT +SSbOx7EAQBoOfHCfDBL16RGBXwx8tzosYsFnz50j+PvWp+jACu7Vm1ibB7ciXMRab9M6NRQYnphf +5hIs2XSdPyrnbe8mJD/lQQaaasaMGlmdeMiHfx4rwm8fIPwowTeuCvv7ZLYz5vdjOn48+gHGhS2/ +EhxYmL6K0YNvElB/GD8vmAeByh89SfrwFn2+h0f5iahLN0l4NiaMyKaJG50cVO+BxYRUcPI7IFwF +Uyalvn2w88ycCCg4oCK/vA/+TdxEMdTjdT5GJGaTvuXcUbTbrKyOW851gstoulwEeBn70wPgXAtn +UOOMQcgZtJxRirdGPzn85IcFMOqeEGWpgT+Ifim1nYI4+KSCX7LVtAJwXgEOsaBm3FLk1ii3UHNL +fW41WenRnZnuk9Ut6WJjyj7F2WXYC3in1OsqFW+l+LAUTEv9uJaa0e8kbsuUhi8DBON4XzHSS2ym +7K1PvGjdvo2UfluCUn4FFc6vSFz6XcovaayH45db+L3+VNM1xaR9ID9BVKSFsnxFprOocOkpmMKW +QoFlTKIcIy8J4RNePMGUTthXhJBOOVGEWZUJsc9Iy+f6C65I3zU65zr8pTgnWZvvUQ== + + + tN4aDsexHYWPXiJosJV0Ldmmg15pLiw8aiHiWCilHqrNiISXKb9WdeC6cJiiGCZbCVz69nSh3NWF +TrWHY1RWxYQqA1JhOBH4mGw3lCb1bLEpZ4B5PNINVCkDmU9rKMx2mukUFPuwlfrA5OjDSgYS16Sd +c9+Mairnt5RYhxRuYBp90OrlvFUYdjupyPRgBuMOKWY9ArPbPBDw1Zv0Phb+oni5u96WTFlBASt3 +7eqY3fNqdlfOmCLORj2RyepcKVCIwv7Eq4Uc8IwT/vGGLmmqvcP87wyBX91GoDAZy3Ln1uUdah0w +ldpmpwc3MNV0CVHDtpdt90fE0nTYcchtPRvEMEXnQIJWawCoIFr9giVQG1xDDjiBzH6Okx59PfYl +uHo1PK+piJJzYNdEZvAWV30KAjO9GFvLwoIErRPrZ8g+0lj1YdUYi/TqEgjMWxU6p4AiOsQVGb8D +fAi2PnfOwKYsqqkE6cknego+T//O0715MjNP7S9PJfJUejyJ78aTQ3jya5IIk9SVJQkkSdCQJLaR +hEUS+8xrBpUUQjretXsg/++e4+pazecngsyU2oDpFjZt2SX0cGpNf0NDkIF5wcfiMRAyWBGDdMQW +JVVxPI4Ax8ul2rdaneIMd08wLqN5Hb9shmT1UTDIQyL3mUbCwjBVHsTERIopYkxOg6O8OFJEjvzM +kXzoaJeo3jVOniagooMUJdDkovBXBCoiCBJVENxmRg+wtIPLkjVswBk1UC0DdRhI8QWqVGAKKtb3 +BAfX5QjCFwEWBDBUNwCJmCsfy1EviHqNQRn7jWm7eR5VMJRuKLl/QRx45A3XXJi1Zg+P6vEbuEk9 +2O8DWuY0CIpiaCsOIUBIJZBWHJvRHxcntZxVIPwdH0a1vHi/J6o64PpmrBlIgIvzGHgDTi5A6gzI +8L0PGeecCDVVObzQdSQ0Sdx3qBcypdGYSQ4N0eDthWSGE44iGVJxjFZcNlZenVgYc/QYg6w1pzju +hLInWAXEhYcM345C6jFTA0cinlNAyu3PfRJiBRsSFyjRi1pWs1RPvBK8jbV5BbiY5SYwrUFzPtLD +68z4CbI+Xf8jKM6K4FVY7oigMGC4MXSoFTIFeSOZzndHwcIr8bMQPCzNdv3NeD/0nIJyWV03WE5o +YrKs1ucKshWHmaaTe1Ja0cxmDAfxk455z53EtwBJvmMalvJKZIRbj2xcTkcFb8pm7wBXSDu4Mqi5 +YEUJFp2nUX2PasZa0z6j8EPhjruCpUyCty3LSUQ4MtqOAeTMHy5duNEP2Z9O2gha1/oycB8nxNi5 +kLHMMrkuADZRmOiD/6xfoKSmVMYbV507kk0jNuN9J+N6vYlhCugT/6gSWUcjQSqe0no4La7XRSYn +F2Hy7bf0LN8ul0ZliVm5tBSjNARmTsnyHBgN/8VfZR9thfYA1Nqj2BgDXfr/vQ7oZIKpNIs6hHAx +CVNVYi6+N3KDnOSoiTOZr5obhG5v41LkkCB4TpCdfRP9paN7wxIzviDyBhl7EJt9Gsns/DfgvZJt +K0zfSViHHFVA8d5zV0aJWWXksctzz1BohD4ruQXp2SYZB7OL94CyClt75NR9z8qdedSEoOCNk3de +zDOY2bXGhBGwI8LH1/yqiQxEK3fitREBAoiz76yKNyVzROYY4vQKZMfjxiYC9YSth2ISsd2GoWVl +B15JHIwSKar4WDspVtJDLivhHWuVkoY7TMMyWdYFcf/lTIFL2jByWG798wrRj5BqzAQmYzGylqPW +8bopAYyu9uRckTqGL3V44yRIfBXFH58owH2KjKsv02sPGLs9V+xaSbOQaF/GQhBgbJVQlHO15eET +YE1Ku+UczJShso01mPQoC4Xz029M3dWVgpHOKjO81ixEcJUl//KQMSSZojeqkpXeGlKxkarD9Hij +5XfrnwV6hI1YajZdISI7Uy6yYqp0V0D1UpVd2tgi1nGGiRmYhyX+nQIsueCqPfm/f/EBTJa0lpAa +eT7OZbtA8MB+KyvK+oX2aZ2KeccKUf1Wa+nKoRTPFCOfGV8ZpO4ACKtd8teVcrBo6nILQSO0oMGO +mjIIRdw+YzHlqF/rKXEbv7NvUhdiRGyZEC09RwBurCsVekmjRS9OQqHXrIXeydOXXnRkBA6ehHMI +IRB3QeFGa9P7HaFtVLzsC67UpSlJmVKSSiQinQIAKgDAA0cIOgjWCA5BQ2+zF82j1RGiTGrCaTjs +Yt+cr/ESpsbz17RC0cgnPBb+Fi7u8cjnaVWlxv5QyNe1hoZK0sb5IaJW3Io5Yqq19I8kijW5cGKZ +HXhaHlJWm1RIyfqV8m1WtSpx1QzxM47E+KuOK+YyFxrrpTjHJEM3daQaR8jYdgSR0YpXKKyRNhNj +Gy4SbkXjOKQkTvBnhg2JHdR0P2g2Ximug15yGkdF0Q42F5oDcgXFfKsZTZL5sBJCJvNtooyoyHjB +GNPMYipiTlnOWIm85oTxGGkalLGoI/Mr5pMdvK2IEvWP+XjlmYpVzT+5UEWYGGXyl8RpOiFO5dWM +12xGVL/2neZVgaY6NFkn3H8pODg35QkTl0R1HBXIM/1GQtUtVF4He0xcRvVQUUXBwbnOEOXkmlpI +xUT4/3xERIIzY0ZML1MxorZ+RqrIPChJOEVVUfwVe2UPqzmo/WzHubBqDqi6qvLM+YSDVGZsVjPP +q1JhnoOhZVpufErCVTXzoKZscjlEWkOeg9JLcY6nonKFxMwQuZhMnbpGZU4xFUJoI0ken4OJhijO +wdgkUqpsF/Wx+bBmB4VfQhUmXxjzlrBCNeGqlJjsmRJehhdU4xHaVEU15RnapfAcsOGiTeXez0GR +XlvKF1+lWirIHKOgqPZ/jTC0d+DaTITS5fOF35DoDo4dUkES0Wemimi/V13w/fdUEXGTDX3EiY0w +r6JPnG6ccaqw/FNVEm4sPntq1fhU7anGVw6JScR3Lhj4kN/00nbP0IIAAOAD+9AOnXDFuBu7hZAt +NjV0IBWmuEjByCgnkTCezrjCInwgJpqHVxLqJbQ9iJODCZFczvCLJMSKJN8cnlKNRBmpSuYVUrnJ +kLKm06SBQcqFhnhvKrPO9GE6zV9JJYoecpqQHmRFGRNyBxx5xWt02orkIlZCPlMKnSlIxguLkNpX +EnKhKjlGSAInpCAnEt3BWhKijSLkY5+jUh+6iWO0GirLVnGh8Urc+LjTOItyx1jkpUY4R/NSVjVi +kqBIpUYSti4v2YSaO4JGVEQyLMt+JUyNQhqKUEiRbmqsVuFVxhJrsOaomkPvcI+oC/E+8XkVL0/Q +G6rPYnWnRtPi5JU7Y7ydKopESaBXHXwjCpFNbhly/CCvOvDnPpB8ZJ9O0cFH+AqZikMWTEQhinem +YiYhXnUw3MLkTw2FzKe1GamGUQ05oB+O8UQzoT1NIipkHWkznNA85PUbphMxN3txhLj6JsNJhXJV +wSqGbw3fhOQU1PdiWahslwlZY0ges1NOG0lMSc1oMSeZCZVVQhaTucjkETEkI2mSz0gdKd5m6Qgn +0p1UrnrfCNxGkUfnTYWsKwWNa+3xqVVwJ6SbaDlukQlCE6G74kUbxefV1aJ4/Qin0WmKr1Kj1dW4 +uK69pNV4iCOsqkYRZlp3SRsa9D3BCEqcvtBP6hMp3xGMeEwe+E1kYg1yoYnTSEM9iZc3mfDoUWIW +nyeriVe/vdFX4nsuphiiJeyCGlk6p0+YT3mm8XK5FQ4v/y+32GnYCz5MXcDWw8sJI9K8SOyYWjBx +fgnjtHXCLsTbMB6vCK+AEao2gTWywozPxTTEBzppHFW55gWaJA9bihyDENmSRqJNZYUSL6XLLEoQ +U8hRL3tKAhVrVRkiVh2mlPO3/ZFqZuamIS1CtrA2YxpWlsNtpIM8gdqxZeNAYmnX7EDliFRRGpvE +KeLOEpv4CCZWIpwY9oohdvnFCLGleGBTTcIQuaHtkrZ0FlyWuGUIYpjlQQVJySeHpEY4OdoQOZg8 +mKmsaFk7Stmc7CJnWnbJeQWPwYl7MwPH0zgNJFesKltGse+OtoP6IOTp8XaNr2+5bbknOPEgX0IO +hTdHDReSybeHUzWTm8wNhSEV5Hu1gcHw6A5hfNp7QilycPCA/sqnYqJc+viuecME6y6WabXcROfY +QpUwoQilvierIEGbjdhp8R1ehAUPOqQ9xLBGu1ZWKaRdJzG09EiQXSUTpJQg0dzdHTikZVIJFXY1 +wcFiq3bHsPKwkfqWTVLuirhjRkLHx2uaUDLie8FAwYPerVIYoal2kCHrFPRHsnC3NHHTavEn6FXR +lB8i6DuKI1T0LcGIfZ6RmY5EfB6R/N5X6sQ3p1BPIr7bEhPlbf4vXkvYZ1Bt4nQK01pDwaiKOxZD +infGEDUv2lpVfDKK02LBtA8/jpckwmgVEeEEdrQGTci3TWgXQVEjp9w7n6jw0NOWAl8ljNguY09O +vGvsbT2w5vMqf0z3VN7ZLGb5L7dIBZIVyedm+EymE2+KtVmo3cT4fq4VlWd2ODfN4Z+LkF4Ncv6Z +j8shmxO9QT4URKc5+drUWObFilCuKYxj775ANfP6NV9RhJqxVeerH/ZpcT5DDvWZn4pz13ChPsTp +PEQeem/OqAkSOyiR4sxZd6BYxWYqNrMM558FjTKP/iFk01PEobGQBsco8xI7hGy+PGQLJSuWKcis +Yh6ZNya9v2rI5fQVWVby4OqgvGItVynvJ8EbaRFzrlM2qiCSzyEhNkWhZuxLJbPLSRFhXMX3L5Am +UhYR6Q4mFDRyMR/KuZxcWg3DtS/qhOIOTOMHdZRTmHYKucwa1lF6iVI3KfFsaNrkFHsYrhjyyhfY +xcVkGNq6TmeVl5bQrV4sCpbRPtycDAmLcST4E6xy/hEhBidGX33mUvHAWCvEjDOSc8PWkyDcREa+ +36G4yktGoZtMmJl8MneUBJHJ/FG8OeRicpiOGM6Ja2YyrtQKt839wzmugmgN2SgedoWoPWSfog3N +56VECNe8r6nnx2keNQu3zBtBoY938yoxTIzm8pmvxGFcJsaEVjjVn4US335BSChElQJkCHVnx4wH +vV3Q5t40ikUkBm3zaWPjE0XVXjMJ52Ix7xL3GEOHKBkVEXHeKpMgxbZMQ4pibItUJktHCg7akc2l +pnNVuOgVLMrBHjNUofM6kMv7EkciJfM6oKiaQj2wlLwg9yk4eEhRhSc6QfEIlUwPSB40FpEMl47H +cVPByziCOKypjyjCxiPyIlMyIX7CS4kEEuKL0hNjYtvYEpTVUlL9lCe2Kp7kC3t/KNRSoWGwFwtr ++hJxjPtfpPig1PngBBlSDbXkdXBqueLMECGOH1rFqEKZPyLDT4ydh02hrBNq0VDCF3NXENYb99ce +Y/r4xQkay9VBFgfzK/9BDantP+Rs7Ufn8VKDRB6ndegu9yALlT6iqYqX4hUsUZxWEZr5tIo0IUpW +0yhPuPg9K00ZVfuqO4tYsj57adMQHm8X6lpiUBSdawVrWlvmT7SobWSiLGzHKdbQ5Q== + + + ZDGPSNI5eCMYl/nD691FyrDOqnSDKNyJNCV0Vw76X4S+ygXzqY+i4bxKUuQyglypYJf9NPsZaw3v +81OXqJJAns0M5yOKQJ9LcEBKm4q8WiOlL9hN8sWi8XgliVXlI5lwMTYjdFD8JkyJrNNegdg0PKh9 +hsYmGgUSu6HZQWYMW9csHjlVtlacA5HKy+MH1nDcHi9wwWs9maSzeKo85+qQMKsOy8IQhxwl+WJZ +khlesWJCTRpzbJa2VOPUOH2bBytG0EQ4EpLPU2wJzabfVGwirAeaVS5VCbTdUnLkXG/KqVaiJcxM +PJuY+lTFUFiJVE3ih82GFTqiWBRotsona7l0K+fm016FW4u1kUnx5o5Mxo1Zkei8WtkwGwXP6NvW +2mxf5pLODi6XbWJzTLishGZkT0xlDiGZTGWWeawqf4WMoexgaKQxlM0ptnjIAc0dI9KIc6Gas8ZA +HkrN67A/r/qJRXOSerhLpHPPMNA7/tBK4YaIHVyo5pmrtpewtcYCKzyez50XUYjpruqlP0TqPEtH +NiWXeawOaE7kgtxDdahYP5bNDmi1KPGsZhOX2qyxM4Kdl8RCf8B6/XnNKLhEJqU5i7HptpjKprGD +Fc1q7tiDRGEVsc+YTs+8IPmE+SaUGNXB9+7r2mK/ksWD1D8Z2RSdSjUT3Fr8m9CB7KfuvZj1TYh7 +ubcHZVrRXrQytXQ3U7URUdT3Bc0XMyKhNp9XDYOdae5xP4fgHHzaGrMloikG39HsIUSBaDZ2Di6z +kDHOGdmQfZfxnRB/uBl9RppUs/liUqGSNDaM0YQsTA81GOVgj/gUM46N0qqPhxGogZ/NVTSvZaaY +Gntq6pkixic8FRVWMzPN5zXlGR363MXYOeOYyWa+yoyc3AuZy+q0rKMjhoQxyksz4StxcGVpN/IM +kp55mWJsIiKNxqhFCksblUBbSa0VTkrvCP/Tl8njQmHcLN9QXtulShSKGso3mzNakWsul64fS5CZ +BQEAQAlaz5S8ppwnL06CcK5pVT6SzzyvpBE1t9CDPa4K9TRq7BnRPD7lzqfBsE95fiHPW+OhR15b +KdQTNPPpzD1SgWJ2+dRZlOSUKZLKu1XRX3LOWrd08ypeXtUKlpiUM3IYDVG8qCol8nM0QiGTQ6aN +efwNi9weCSfDccpEIFGQPO5S3LShKfqcpFbhoJaqPm6JUzlFSV0UEuPNyiKN6qPkoKZmVJIvgiQW +ojLTNyjim9Wnpi9zdsCTbm8oKIruKN2IpXTVGEbjjTu0LHF7PckkpMj3qfk5IcqlorwSVDZ9TqNU +T6T4aPcdkkNV+VjxloXoUX9w5V3S+utwlIRZttBYaNG4XaF86CXhQNTTbsniTJSuFt13vlLtKaOG +hlMmRquPmpuUIxyKFOS++rksEMn6aoyopyraq8gmnvxOQSUhwqAXrU5BVv75HbKDb2ZH7ga/3f0n +iEU4nY3eHUNTehOjZaOPvo/y0FI7YkqM+LaSKwdbSmOh4MvPECXmSVZ0zH8TTQJ9JXupCXYawSCp +IiOGvlsNLi71RU9EitiLXi0uNKYg57I+XmoeMd8BuW6myLcEeyFKrIJukgclIu514oo+r3QgD8eP +xS5jMYvdG0qVo1lBu4cVCgoh2hzz8fUXw5wqO+6LsfGAMgrzJW9ozNw0dFA5EpcoGhl5IOxwJcrE +45nDUixqiYgYs0i1tIns4LIs47yEvCVGeWSRmiTNdJExEmzZwUnptNlDfoQ9LTWulyS9PMhubndS +fExuGQ/KVHpCanaVXo6Mg+yNEzPfkRxSxJgR6bk6ghVD/fTSeoMbGGUTEUOPitBD3NAKWaR9KNyT +iOnyEfoqHcWMQimkd7IoGRpbFBO5WChYdM5cylR6lMR8NJRhqaZO6B+xWBrsxUKzdwm5PCW7pbwx +zKV1bX1ZuLJ/CanGM6q6DOB5jIs+LBZxEhEo7lFwMN68VRNkrgOhYFiqXJqHxqmLJRre0RRv1P4z +ztiKSJIVF9MC0STq+NBGoqWH08qKG4+Pw9TKQXHXGPOiBtNKhrPD0Dplxkhhx+duiCXkrrGbVjAq +aOQR8s4rKSV3z7DqZvD2S4pSDrzN+unluCRDrzeFn29IJDHyGOVDr457rNVKqEjkMcpQzRpqJGnU +TWOQFjKo9S2UYAzZUQ6ZitIV5a4EhQ+n0uClCxx+vIX7hq0ES6Ohh1okqnF8RtnGS+uoz06s2B8k +XhQsyH7FjFTPTcqjkWpJhZ4xByOJDxeyMKbL0s5pFBCtbL4yNIF2UXBAwRFFBAW2yFy/x4XMXSpz +6uOaepDbu2IYzfm/W+dDwu7DGc8U9/0zr2vnNFK0c6YhOq7Fay/nJVzXIenIPbyGdzg7zT+PB7Mh +k6WSOD3koWw0IrZ9mSr8jqdMTgVVXazDfHBF66oFOcgtUUscRKIjx2WmSnO4/CPoRSJLxFvnUHUq +XXFR5mfCSrqoYp4okXjWcxGPaqNqNeMqKgtF2S6qimEU1VCUR4RSUqYaVaaCE2TR8ETxmG/NSPmB ++GK2yIQDCA+I7YqXkUOQvGZ70GpJbXXKUXkQ24O5qMock8Pr5zOny1SjHDULIyH1FlWg7FIO9lH3 +dI5UqmI+wqQt+fVgFdoWRalahX0oC2+KclJpROMai32it7zOZWvnKo32csmvexvXTQe0Vm3VGRQU +XS3BmZEZizEapz1kPiNDD6YqCXp1LRWRBFVdpqhS+REMkaBWhTiCVe6rEfeMUAiJ4IFD4u8nqynO +f5pKcuYlYqsk5OSMVBexhSZMqkLv50GXqFYeQ1E5KEVCbtbMhqRKeFsoNTfHJDGJ9PJGdkpj1Z8k +alMnVKkSKqeqrXivEamCQkqTt3Bbdsm2iGURoW6Ka2sZskw8eSF7UimyLLxdI70LuWV0SW1VXW4X +q/KZEFLZJNdvYbcsIW7BIU5JjBsjzaUg1UShjkTUhinp+ljUqKLSeiEhS12qPZXqCNWeklt7SlLm +rfCR0tQdUjI1qtMHvV2f1+zVYmWZNfxEZUsdQlLDeJFQyBP+g9YMN3LH5dfkmS6o1cWlOaRWc5Gm +FYNotDiNLKm5TnbMoJqD+B/8U6I7z1iX8OmpCilWZUS70zVou1H1ZRVInDpLWBMiP5AJJ9LIcD54 +LXeYD42BEfXKxpHbX5AwuCOfwTUk9dFMZOQQJWmVReRzRtZY5PG06jOlevifbUT7blfQocbqzvoL +FgZ9BvlBwZJ0mcTtj6Z0yLg/0vnx8f6lg0UfiW+mdxSyyiOka8nJSU2dJhEc8vLBqIan0mF8wIm5 +JsSpu2UYwgdF/HnXEVwHDKKYhakOZGc4SB3MZvjVkS7h2xM5qKBodTvF7jkCueRTOqhQlNwelqN8 +iLhcZU6rfLIIpQOKmsr9EJNFVTRC8k8gHZg8DDqgGMdKkEUTZQdjZg7ljz2qmkB0MNF5O6hiiHlA +rJiwxWuwDypKXKagCWMe1MUQPuBIoguth9Oi+orWXEBbWKqiPhgRVZzDNcgcCHkVOSiK/VMkd/Lh +hFyoNEGcBJED131wUZD/Tedg6jNSl+0VRA65KBrIhhmyigLZmFdR4MgPIgcrTeRkk0OmTQdTIkJy +bA7oaitwBzM7qFfQyOcOXpcgF8uvOxDv7NcDm6ZG1Sl5pU2RverHXUU0OA1tQ9QBbUKo4hQpu0bC +owfkg1ckRNF6QDLNqi/yTHGIJM50gkaVEGHtASPISKmmj08omVA9ebSpsQvHJl8aqAcjeZn8d3yS +7CTJAq3cmkSnTNSD+axMvjy8JwqWkssQCnF9iMXgaHDRyhFezadOoCdB9rCGKHvIY6XkrWpyCbmR +JfEIiuuQH7BcopEaKsWQpOxonSqsoomfMBVtRI6Fe0KVTCMR1kYPhIrViCDChYaNH4pCSsoYHpDF +NOTRFYiGxj7I0VA7KHJFkE1pQ+zAxTYcog1DI+TFJXzRUCXkjhKKuHiMRzhbJng2/3GKhVwRLpeQ +2eCWkKc2odjgOeB8QzuY2A3tXIsbckA8oGLHJsp8i7pIgvScqFA0ZbHnICmxi3pQu/saFKH0sUc8 +DzwSZ1PJYXWGV72Z0ai2Iyj1pkSVCZ/xQD4Tcw8txHAcxilVIpjjGcki5q6pd8/UCN0UFhJTMB3U +TaRppjDU0BA9oIzrVVXCoaB5bgnLg3Ex04SOJ0J5MMVQHrQtW2EOaFHjO1g8mHMohMUTJEixUFgU +0UjVS+5JaeoJbE2EqH9g39Q7RC485xQTZPUt45oecDUUcSFa2HcQfuCNTMT7HTw4e8MOWjOukoPf +9LVhB/+FRA3jz00pnCrsYEqCv5QEmQM/wpZ5bwolQxI4jvpWPWGvSAqeFT0H4VXLwbAnwbCKevAw +7BU3B+TikHmSqXxxVgl0CY1oFi4n/KTRPfRyRC38tKJxWeI7Guosfq08p4afE6/8Ypk+GWKZ4lOX +I1YaugwZJ/Ss1tEt5GVpMaJKVWUmp7KvIFNNbKpcB7FjOysasVOuKZ0qs+4aOpFQxRktWTYrHDKx +qnaAAyEXZXSZSYQKlojvBd8Z6lZRnS1edRlXyLoQWtGHZoRYKzpLZi4nk/CXjRRXXP3bVGdFw3cz +oxPDH4gr09Ck3MjHiw6ZhCEfShWt9JJHqKrrDKkwXHx2PyRcdRKGE5FK9dHWPWfKX8srFXNLLXYj +nZIrTLA4i+MLMgSNRKruoJkF+d9MTcVM3LSq0HTiEVSs0KeyoJe0Yc249NGDGkMvryZDztoraowN +Uxz0ochEpNHqXkqN2lMpOJ66E6IhmWo8I1X/pKhfx7/L0IXtQoKCKAJJxTAJFzUVRTKX7wiSI8oy +VDejxsT43oupRLMhDSn3qqQWC+LCc5AxiGqOIcRoTyLOcc+E6Nsdl5WYSnK2f2lKuu9S2JB+iIGK +HHUHve4KvrGKVAyJ24RDmOXYDOpMvutQQk4T9Wqd5YD80AUAAxABCTTQAAZC8AENHqABECAAAQsw +gQYQ2KADHMgAgwVIhUADCWwAAg1EkAALQJCBBRtsAAMHjACDDEKgQQUWfCCDA4zAAxpUYEE7sIEG +MqiABRh4IAMJcE4SCfUxgQYiUIAGG5CgABSwIAQR0GADEhRgFhGIQQhOIAELQKBBBhtksAEGIcAA +Ahdo4AALThACDSqwAAMPZAADG2SgAQRsAAIGEOCAGDTAgg1AgMEFIsDgARZ8IIMDRGcmjjRVkU6M +M8kzj4qR9QvneJEOe4RQcGC5zJY6KFnXTVAxWrPGP1ET9F7RWc1XUAHFDLsgKqhrpIKTZWiRUTAT +ErPVQim+g/EEOiU8uTJB6/epkQ3DiXofa+8kraF3HjT610qpL1yudlo41EhEpCENoZPF8VFjdpHI +s3GMWBUl4lenMNFqdqLxkOOhoJHoHlRdjFamULweHVtVn2G1RsEQ38EWlHHqNQnLTkGJ+C5FlZNY +JKS0hnHWZGhmvA5ethPxGxVaXOGSThIpihNSZyauCpGCp1nl7IjcRJxKM7TFilNBQg== + + + RJ9TRixzZIhoERRDUna08fD81iaVkFZp6FR0KHK70PxE4dJuCis0DZIpKrHSNclBIRLYm+S5QoiT +czLuJKpRRehcK++JnnFIiDSVnarUFEMtTcgaLaJTWErTqndiH610aOLK9J9aq9E3ika0y7DIQ6Gu +jZq0X43MsdGedlKDWLvmUg291KgVP/siybSGW3LK+0XJ5VYsxLg3VVCM3RkXJJWomsrhJZBYpggJ +5E4tsWTqe9CSTNiem16gVGgPZMiLhZLWRkN7QKXvpvdJnAyf2tP5qkzSYvaQ4Z2yiW+oBFkqtcz3 +Xg4s5WuRCp8YIbIZZL/vEayYkCByiecDIeFaR8mqGooOpqYnUSF1MGU56nDUPaNlOh24M0f9ko46 +RniZMYukLk+raup5JeoaF3YK1EA7kInqvJeKcg9mDry3i3E6NMsqWcNSsVQNVWWLpopa1KqGkW0F +WzWdmpbAg4u4pi46YmF6QEOlw/WoKgiVB9UQazCKhMHTUlCqDuHByojXfk9v2wntQTWopGIrSKJN +idXSrIQ6RQckQ50p9yPPlGltbYbKwk25ggudUDqYTfVCo3N0gkKhj9BU6ANfRfmDAQscgAQkeQ4c +q//ui7PTg3JgoUuBHvcBkSlFoT9EJ2yWedeLnB4UX7QgAAC4QIgtvCoyxctBNTL6LJ8HJgqkg02r +N0s0ctdPRn3ompuCRe4FEXkC0Qw5KIZVqh9wVdUDonBkI2tRHVSXpoYo7rvd6LMIkRn9Ii2Sa6WY ++KNkszRdK6RuKOhCUhtylBW+zpu8ZEJiDZkWukhrrHRChNJKTVMZEuIMlXPx55bdoUoP2JfLEmsx +kek36K1MkVkyihdFDckTmRXzSGKl3hI50lalct0DllBpjZ++Ta7NZbnSj6VZpUSjWQVfhvrVlCp7 +SDFKGqtZfSRC9SK9QkJ+SMjFvlJyhRRqTA5ZySgsOe5HVYmL1JWnz94IeU6Z02VcoWIvrNdtD6iq +fhszlsTspTbYB0U1E7R2fPCLYz5g8EP0MWsnxytC+QdimWLFikIcHaGSiKGqjRXHYjQRL1bSYZFU +4rHabJ6QEYdHi7b9qYWmfFjPB6ayRLpEwmS/dVA5zokTy3TO1MshFTLZ2qPI9PKUnnq1ihIlZtGk +JlFi15DokWr5JR+/WhxPTXiIrmor/LLQ1eAYFR6RkSgL62WqkEYRUY0rqlzzUrcUVZmoosoVbyCT +pq2aI3LXK6gcllNYrAhuxhN26JZEE84lmoS92qtcWohknJZlnGFXUnGRmFUtl5UnYtgVZWWZi4dE +VhNxKbGrylIXcawmevC6mEbcOcnIgTDMiDpJ/4mlnyhUiaJIBG+fTpXO/akm7gdKD0rrhCqmHEIu +b+RgJedGp9LzKaGypYySsFn9CLlxaZfN5mpMmrmrOI3pY6pJxhTy+WYUfX6lTLP/ksH3QUQzVYUm +So45dIpnrkMuskNRGwVikYaKZq154Sm/DLFpPtJGEZGDNHERTflC68ggy3XTSDTbxDkyitSPPOZY +vKSGFUGWCk04agbDf0DiGDbkwCEin6mRomMUMVNRJMarJpsMTXfgIp/iLn6sCKogScUl2um2fbrW +5JyQ2sGEJB7U0B0UF4QHD6IwDz4cP/pPzVPmO+XVG1NjBFFcGMoDiqCFoipLycxNjgd3EproeJWE +46Sa1MlZ+WCDeeCdYtLGOr3qSrW4eIFFj9fEd/XgtxBDOaIzFx2Y7sFJNU4PhGSdd1jFk/CA4uCm +S7eYxmoVHexEq4lI/aBqju4w1d4TmlH0lZGzlAaig7J4kkA64E0/jA56C1leq+bvPhtyww5VhBH7 +MGFvygStp9SJvEVYoYSy6C4zDKcDqmNWdGALPT2oX+YM84F94JqqPucPXDojvpeEIwgbNBnZAfWN +qoN5QFO8RtI7SGGtMYnmYIRKOlTp93N57eBBYmE4nFs4v7+J5w0zFvt9huF+ezsPflcj3pogt2Nw +beGRalJfWDzxCUYQDx51MF4Tkm7ckE5TYbx2cGIEj3HS3sVfrMvinkWEbhEefNz0sSkhqZFN7thm +4T5yR5D0ERmJfVulRjhyxxhVrsuHviHd9Bk54Etiiv6RTieIdJtmSyc0f0xMKhaZaE3WG9JpZhET +CSOiK/TtEbWZVrVidoroiWB/hpFRsBdLjdhErbCTFnuSRckeC7PjOA6udsninmnWicDOVGHJovym +FRtetNs1tijF3fbHduqon1J1K+akhVJXNGJZFclWXyUS20GSSmK1ElLI+6pU7gzNmNbXp4yj54Xu +kiZICUVpauhbWhGmUSfLJwdrlojHPQoRm79E9AyK6P2YqHRCFyLiksxmpExaYxgqnldHaGjqDkdd +SiV1/BexxPfJ/cd/8aPkq6hHcRH/PwpFB1M8aKwVbpoqj6KmvN/UA0bZd0xHFt6DKdPp78QnRsM4 +tWQxOpB4J8rxHrAcWrDC0MHWB00YHB9BYUhskwltB6SVN3msCubBiIjMTM1BKBDAwUsi3CkkYrIO +v+/UuAphY8iHTeeXPmgj+hDDgUyObBTE4KOIWBUxRESeryZxfMQJkT81kYZMps1z8I2RkjeS0xFR +4soGyV7JlwzRlKSGSoqjuqFW9jYqOmSzna5+FIVSD9h6W9zMrt3ORUqQ0OMpSx4ULYmkDeKpPCQ9 +XyFPLMSvVMpKBFdcqchKT/UUkyp9VShk1hfMutILaVbnPD26dqkr1Jfn5UDCJsdEXe0BhySkSRKd +2txf8nlTqIColDBH1sIk6J0qmoEGEACTEQhAQBwOhkTjgdFgSvMDFIAFuIg4PhKEwYAwQGx8G3Ja +GQAAAAAAABAAAAAAQMNRdEvu5EYOuA5PRIHwPwHra3YDKoo8eoIKw8JAVdFz2aTsCmh3Jyfbiej6 +w12UFVJXZLOzlr1joJnS0Gm3HRspPAMYSIFTsJTjtEdFcEN8dV6/U/Jdk67Fc5NndFF1Yc7crocj +wDQNwfNOQJyNIeqBrZuZI0//fV7OeHFIxiqjtQB8Ypo7dL+wIhEEHmjTWJ61HDGwiIYMqj718Icl +JoO4wLpIsgKhl5+E7QLECOrflXtd+miV9lHIbpVO0+JSaZF2YaCqoF7mYJdCwd1uriT7sKWRYIr/ +0yHD4MiR6+OWPLeP+ElI9m21l2uqZddz8p1FFrerQ3uQG4aF8N540250Oe6nluNud4fJV2BDqNUM +C9rEshpywsosbM7FvaGuO113mwHsNo5ipcRbHURw8RSa8PiAPWM61zqlLPonIBJgpTbW6YTeHxUj +uNthOLkGqZvy21P/3gs++JXtgqtOqau3lbmCx2EvQxVnP0LeSdzIkuV5sxB+2PoilWQ16jP3hLB7 +miQJPlCsySoF4jtkVRjF5te0FYNsfegEEBQ8dpepqp5DOFZ4T/drKsCOCtP5WUbtHlXoiMCRtxLc +XxNsATDGhJXnQhCAjAvrpjyPxwDZm8BJ7rE8/OyqxXI0Gf/qG5AEwtSqgRV6RWyVDiDtY4ZNH5fT +mvCFKq/bX1VeEn8aZNDoRbK5138BCM4+Q0+7KY8uhnpAZe5GIR6m+zCZ4yU9S+gaI1f0JQejvsm0 +m+TRJBQLayA4VFwo9vAIqs1Cn9bmaA5XWRZQP3KJpiJXUK8mX9K2CQP9ab9VmKePq4i1Qvli2ml5 +H6lVFr/rO12uQUFKbsEQymkEqmiWp5n4pjvoM0L4kdvGUg8tuHjWp50pT3rp4FybNE08KY3XfwMb +rAakof3cLlxpQMecblb+liSMbg8qVtUPVv+XSoiBVqc0ayNdaJaCk2Bcery77Yn9DJ2g4B+7Xm6d +2zdvi2GZI2QeASBIl0Vg6gEmNG08wxInwlydBSaD4NEnUnC7Rd5HR344Eq50qyr8JFyY9ZATZIci +5Nzl1pCBUsCaMOU3X9rEdwbiSdt8mW8zOaS2CGhLDCu/mHwOQnXCtGAdKxJzDYHt+HrmrJ5vax4A +9ycNPFmQ9PmX5F0w1tcNpDrAixuRDhgCnlxLWw5uaglIJUFgTfkcnQpF0JiiwtTFzKquRr4g2M9z +F2zwmS6xjm6Q2JQR8vPlpbpP6lGIMHXJw62EujaELzmJmXue0DwGHv2NFST+JYQhf+FBsnjFAynD +Zwe7Y1pYkyYxpksKVfe8BFUlKWmwY51kQpC+7qKbb53sveTCayhfi5KwroZOKOUNlC1JdCr5OE3O +URBKbATrAsYBYAPNheN//ohepNVspsKqgja1/lcK58RZuoBAvAVsFOQeG2bd0W8fVbEgkKuep3oV +MJBsvCpi57FVKVH+a/URoFQ9CIY4cLHio6GAG2k/CJR7MYWYsVUSpz/lo+01OPvFEtmBOXInuHrS +vaItop+cxiSyP3CWYaYFlGupLAeztcdEAFw3+ADusvfbWJmhOMDxDhhyOe0Y4iLeXNb59WCnOVQ0 +tdsDbUJdpO9pM8P6SsEgHmwHEU4e5U8p/wrWQXRqHBvAAdG0yRziO+pp3c3XNQ6pL2JhpPIyR4h9 +NK2kX/6Y22p59iS97/UCascDecYxNgnGXJ+cpk3+NcPWJYkRL+D0L7isKIjPOHDOtgIxuXlP5wwB +B46IXe/BcpudWGBCuLN+hjTny2CvN8zoesVDENmNrp5H8hrxG9IsWlcMdW3jKD8cWgalKRTlSuLD +BGZLbGY+dEfJC9Ln1ZOnu0UUasiExs7LosrVdA3FMDTkbh7On2M4VpUenh2qPzaETEq5yulBahks +VHPXaKpIbsxmxycrn3Lu1Ov4HUQcWt6vexK4a120tl7UFbpIAl0JkR1Z3HPG6uWV8KiflslcK7Vi +22mHnkQ6NRtkQQerf5RhLLTb3BnyGbXRfSUYZgLyc7/QRKoke2UIdiAFqVJWuM86linJTs9fwM10 +rEW1LcQxEK7rQ1ONmkHoh+DwZwq/iyD3d0cRubZiyx3jXJaviFrVQgHT+82KJNllCX8enSb4dB7R +HhDCRtTQPaZ0eJ14iSgHxBxU2pDkv1HelwwYC0I83eTbGlbz1sxN2OTSK3MbnvaskxlMuZ18LnqK +laW8bgqChjUVdR6vORRjIwqBKx3nlOHrj+GdBV2vj4clvPHxG7zYO55In/MMgNEkp07uxvLR/NH6 +JLqU2HFgcT63nTgcz2NqV3TRn9sGI6TDA35BGhf3J1CdciAasCE5hcZZfyCCcxo4jXWKciJxgRjG +oGkIKh1yqhM5tmyjdj7uZxY1i04BXFy+ffn119W9ZAmoeAdnf1XOCjpSmdUwy9a0GGkPVbjrkqw4 +apZvVUlH82jJ+JED/wtg0VVx+6v5GB/nUKw6LAYm9fkMSvF62ByGkKoo3HaiLGZ6zvP4rerCGbWf +0/5Bg4UWFbkxEu/M7w3dmnDA0e/CviHzbwc1Ojdi1Dw98M/sNH1WTlv5IvC0s/qTNVLzX/a+WVK6 +6PjKNVcGEntt69TjXm05wjc/2eWBpzEiT/jEMXeJmMKUAunF6fnFVZpxaF/sPDZrsg== + + + NQoUocqffm03byM0tdICLImIZhlQJa0wMlud/qnY5r4ZYRJ8Rf+bgTAhxdWp+d0OU5oi5w+o+LRC +rVFgoDkeHu/5P5drux5F6y0i3MedsFJZUU1V0KU+e0PAbi49IpQOYLjFObzcD5YaYWQIDlWVsRqL +qkiq4/NDpubsSaf9fGC71NCMoWUY6AKnxigkoa44cEVGgeBg/bL8dKwTEf67pjmwWjIAOQ88oN2g +7t1wbMZByzW/sKnYJKI6EKXZ6CPkDyt3FPVrDcRaTVJtdxl0iDLe7Ark4iPK7rQdCZJLZxKJQi/+ +NmoZqs9pDA2eVTj/X7zVM+Ev+DesADS3EIjC53xULYLucE4u/wq8+5qe8KYi4Z6fJ3eFuOzk5GtA +2JcQpFm6CGEUyY6Uc4QKEURILJ7q1EMQd4gaNEzpxv4chI0yzxpfl+df3NzxtR2+1uMhN3eTVSOg +4Q3LWutXygJoiCQGIYhpHyQxaNiF5sXBSz1RCJLyc7JiuzE8QmzceYBVfcuIW5N+H+vnC0BPERX0 +F3u044o1OfkxDuIyuNJgMlScsKxu5++4Of//DGGhZB/9iHnfo8hoeMVkT/UsGTw8n9mqi50QP9ak +5ga6QUY6v8RNMWO2lEFmKvxqkz9jR2QCPTHQbQtdJpVzOAOAEvn3+W+D32mmlkwYWrmBawtaNDkG +goXTRrIxReRB2arK+s9ZLgmPS1WZMLcwCTMdPqsGKuGZkMuzEIU0eG6ZnI7VTZHHv8qcoORrx+GC +ZBHTmeXqPIXy8OcMoiM2r1PIUv4AsTkVJsIdHOyBItgTk+/b/n618lEREGtGx8PnIR5LvuPhFfm2 +3DlU3dnsQod2cHYPs/w+oMOehIaLWVSf6Vdq1xhtT644ReqvSPkZc94JNnxXEFFyTwgwChoo7ez3 +mWdCW8n9jo3TUlcMS8lFRZw8LcqtVm7UmlrZZDFFLYS+QtJpjN5sMwu5g/G5jNH4xdoNcRcc23lR +Gy2JQcCdhcArH5D3KtY2g0uCR3hiYl070Pc97YwQpiIlYD0TfNAA7LqUI6+8kGoI6XmN2ziNHhNG +P+q2CdZb08nSPeUM8RJ86//WM9JcXr7Fja2QVihSmNRDcgrLu8MTLSsS6jYMpZaEntcyCqFzb1iC +qsIzaJyGCPp1vSgFNgoh0P4jKa8hHxqaAuKyaCCYiSr4eHK/tpLcT5InUKbQYD3RvePTgHtXxd9F +wHpUd5hX5mSZA41i2DuPW+KWxZ6z4fGoe53B73CTKzbViXI4SyapIzLGJgXJuM4CQhar6yNalrxH +rfyf+2SumI42d+2iiseQj4g18cjyGzmhdJuFcoUhinh2DcDQ2VyoIkobhws5yNC1V3pjjBuyJ8Iy +I2WzeTYj23mCRpPF0Clo8NxDHVYEH1EkfdmKIzWGuBw0bMEHiJsm9VLHkpGVdpc675Yk2tCiQqOA +zExkSxKf84R6XPhUmPw6DvkdECLsNADM5GY8IcWncy8ucQynNmTdcDRBaI1rbErsTNDOMUPVIaHs +0LifsqLANkHVW6Ip/h6RrOBh5WBrPgHVhONj7CmakD2e17RmuVqLVnzROsN5OOMd4s2xk+GDFRzW +Hqi8Uh12GdEwWBb91ILr1VjcIw80qrSaOMcASRPWz5iyToFMw5F6ftwo6OSvS5lXQtxsil/LVRNY +g9xRJJlKawYU9OhS3YJDZJj411C07YNdHgfOsoDn8aFmwseEO/G3ytpYdqFEMKa16AMmiocVIeuq +gwque1FTykEB7+582EsO3ZKAAmurCB0cUu5deA10Qn0Lie4aVi7glUySWXPDElcxCzlUpL4Z2biv +Vt3xkziizvsrdETlpZep+gRAK9rKRfLhZZX5eSDd6bxOpCkklEHUV26CMTSRCHQTI5DEpAaKRegx +iRGwiSmZYsZ0WCWDc5QjxlxP+Qp4gm7s5dD1uxqYVrxPPT2OWou8kywCbiqwMtcORGjSxLEsG0Sk +kuuoF2o+LATqWA55vgoPVVr0jCL6w4XHbdwVxwigbR22uEnbK7ERNH1IzzvlQtPuaQs0HWS4ACf7 +T/PH5AmtrxXuNTKRJLqfi+NESixrZjMbHUa9kJDnrLXlo5psB+2UmhAkMmUr8YzGqvBoUqEH9wN/ +y3vdObplhz4VYflANzBSGGxadirmYtM5nGda2Ox24CIH2OYmSS0sE96cbOd4WM0TNH5JKl1mTJrs +NpVmxtppHAmrcBSEKWYw/fCt7djTkFi0k3QmoguSwFdAeQPyEk2R6rTDJ/4LYJkkiicIflYE8723 +KbVhq9K2/BuDHqc64Vqjlh2Rmy+FLR+doz6UBeLDUcbQ67vrSTLdM12EGlI4BV8pYze0aalEuTpi +Riqo2oDBHBRzJGu8FImJbUurnZux0/WHZ2rBb8Yf43vKWHFFXzenRNVuJpImf26+ZpIqUbh+4Q3c +uMZHNjzBB4ZW/gcRd8Qce+/O8ZxgWq0Vkhmj+OH4HKbxLlrxM8QwSTW5FYWR6gvVkBwkSi0dTSFN ++mHjSyhhfgVgEJerFToRRRgGFS7Q4FghNUy88Mps5iHF9BoZo8ZgGyQEiA+GR1YjqxjXTYFjM8Gv +rfb7qX6LGzxYVykl/M6b02lVoZtGgF9YXqLSQm1CvGgJZrYw5UJpXSOq2IR2uRKzVAtces3dVhxz +MnWBBTk4BTbBp/dkIbCCxTl1DL8eDTmXSHW0BDnOb1E+vH0Aky6jtNOF4Jk/EGwOvFJ37nmumqow +V9bkNLmmQ5Gt9CbpHzYF9SBSzR1kLZhy86vZEo8o1AM2wMJeFmaawezWscv1lQmx8T9XJNom56e8 +sImGGwvLnXglQ3EFGX2wRjbloOFR8Ovi8EhiVlALdUZlKsBeXEmrB4TzF8RuAkyFaoFcVWKGyxT5 +7kv6IrpE1ca8EQtaeEURwE4diRZgLF5CA5ZatFhiElWPJrmtxXMgcRlJSAu/a83i6VZ0MXlPP0nD ++KwE7paAgxQoDtzcfKG4X8iOnLyG+wkmLN/gfbO94U94xaSiN4mGdzxn84QUpOYwqLKgF6lOIm7+ +oG4LAoJnMX97gME98Rnt8VvuVG/+WqZ4ojABOFYiPQkOtjqaywaJNQFK1UfooQpBIgwiziIjnh4J +HgYv6/QvkHZDxoCCKOoqn/U95K0P+hHrvONCNW6g5j6RknKmc7sDCtXtm8N0FmQqsxpi3DwCKBz6 +Abkjsli2Z2lUJJzzqU8bweTiHlfK5JAkRbpqrKsEp/EPJ5Pm1O4OCEBQM8wd7sTxG5NwgKidTxJe +1Q4ZJklCp8vsoJusyoGpOGd1JA0ugFcDe55kkNHWr9L5EG6B8Jj9FnkeWnm+p00xhDyqj0kKR/TL +Op99I27FvlmRzC1/CixzS/55Y8T0z1VKnpqA5OqIg2uIY8X1NY1IlKXNA8thpQHxbSIIx6Qf1+B0 +V+iHwL+JbexyzdGHA8/b2u8UY47zqFpo9D/oIyQG1Pdo3RSNpAuC34jXIQKZjcrd2zVjDHgMiD3d +MxuwnBesNyv4ssenf/9w1RUY8ExVgkphYWfT3Q7BLh/uOcU162uMgiiyfbG3AjMZjQCEE9zPMV2E +bIJnLdATT71mdiiPw7VVNwVtaD6DnCCmhXIIGE2tj6fg3yieVhO0CeWev3CrIYkNIspUfH6spx2v +vTieKHVcF3Z2UXgTAUdyUBgOSKqETlL0eKmwZTrdPbww71FcXcRABc8spNxZgaevLo1YelB+zly6 +F8CkCLm1RjNhAozoEmJB3lwA4Imjs6Z1jBRTRC0UR8Fns5LzK02aopgLEYccNQ86ajjPUJGsav7R +4PgEJMxCAEM3bHkAizT6xr1AcAcNCpLfI6GT36P6+vGCg9B/eE05u9wW4TkbVZtFOWfrrgHQm36Q +28wsduQFu/1r7DI18vikXQDrChhq1yVqh35fXV2Si+grT/D/wqrOirDimK+mBzoCAxxCRQ0zfnrY +liGYprEJHSirAhnYTj5LDHMiY+29y/13khwDSXVoKJ1Wuz5gSIC7F0hgEPc49oEQP7RE6jGYKrnO +WFhEo3WDiQ3+ts9I2BQsJcXrAXAlyf4i5N+D/k5lUk+dfmWZ+9i0NIigKt7EfkLim8yCbZieurD/ +CBng+uSeSL0j1w06E5YdVRv2BI3yH854GHqj+6BjibZwVWaSAczhM2N27N8PAsicsMaAeEjMI8rE +eBw8dcith4upTSxBtoow8F/pbOSO5XSbV+Tgt0rdXlY0MiT/ZGK2DcEpSUKdvVIV9iClgHf8/HWV +r0kWbL6GR7DHJQAhbKiQ0+ctshPMMyJkvx+RM0DfoMxFy79YIaLgJC+4QGn1hHD3DipaP69GT59t +bdx56COULFJYphIzgleCrdBBNSoT3WXYxf/dZQOqVNdhb9HMNpW7C6EiGonAAOumtL2MXoR18Zpo +gKMgQ7F+DX1PckAUQp4vaZ25I9+lFHEuSCYiXpE1Jn8OmZUhtRN34wSFKMw+us4ZatlaAEr98xFA +TJvY7DZitzWavXnJHbreaVZsEB6G7J7eHWiHHrYyg4e2W3upZbnzSKuUEtSIcCzTQzZ+cAb/cehM +lMsilE3RE5mlUhjiLogGFgfERrOGesIG2JjBBuWJ4r2zRvkvXu/D3jW1Ri6QxlNeKKhC0JVVXH77 +xP1qRkwfnglCThhnLmpQ/+mtzuii/yDBf/imarmlJzVVEZVHwGAlxSB6beGerggs2L7XtqHOtrmh +ddyXrQBmhpsYdCppIvCjHqYG+/uTcNwJjC2IYIBn4FtBsE/HZ0apOidKs3AKUSwChHeAGiISoiBG +MlEBuYnuXDMGrRtXY1l1CWe+ekYFscDvMo/vS+fjAyvTIKLxgj2ICYW2ixBbDjGBmKkhucosKtIY +ApS7s97zdRYOfmaljxPhvC2YFkhvC6TkxRskZsozv/YcWMPl5zDvERZi1mP89uchhp/pyxckdHHT +UJQVAQa096xrlcU933qgp9P6CGlBplF0vxHRTG3ALRa2fFFeYjmQrft5MKWl2A9hvk36lmgLPg8y +ArgW49X1OKFxogu3ZhbYwlUpjkK6Oh5CRtuU0ZpYfR9G7qqXgF6O+EtDesQ/bhXk849tldfHPQBy +/XTZFCDFvcjQVL25xJgK6u2EP3VXO44bqEYnRGCFWHr0XMFHx7qM3NkH5f5BE63hqD3HXjL/eV/h +63xKyKbV7ZwYiISKA5/9TKEbWxJ5LBslmlFJECadoD2aw9zJ7Et+kGM/IC+HLClCBRJ6tPFEybBt +1XkjlYQ3R4n2kC5qgKdXre+o8dBltsDvvqNw5GZD3UTCWdn8WMz/iULiYXY9oGE1q0hTKDkLmc6I +ixRQy4OgkGok1jOqLPNLhJrjsZ/Eyxo1u2jbcNKsbAMDRju5yujLEKPn37U/WqJVeEwCyfSJuD0G +gg+MIAy2CIwO+bIQVACA0AxGhVC3zD7GXOZl66xh1rurHNLAdcwrZnYJlpCUHg4hFQ== + + + BltsIzTX1WERLG94HaNaQkaKtxl7FkDwPx1O+86Q6UgEWa1jeS9dKDMwGnNUF0DwjTjoF8hnYXKZ +X18B+A8WjwpqQK6GcUNSVq/1d4vt45odVs9CJdKUonuVd2y1GoBhwcxBzYahXUznGMO1L32C/hD6 +o6WYfeniFBXB3DKVgEcaCXYN69cC2qb4VhLEhrW+SsynyRmHF/dF/R5t/EuDMqIW6BpKIacVRaM3 +s25vXzkwqqujzpppsPjGhzCC+y4kmqk3HyRFCJzJGiskR4hGojSWUL/59+ImPwPLfRWdxBbh4eoI +BT9JSQH3QpH31q+3FZczHJL0DRJIbrPkawlWTUHHxt/SebJMQkDmsxHPwLP9fFhzexanq4xURyOp +UKcNaM6OsyZ1v5YS4huuRzMbAJFnNdn6JGzQeGGMD8ZCr/woVi0AexxBZRLZQfhqX4SqAUZnxYVL +It2lE4lQv27eyzaYGXbNb4Lg67zqyk/DhorPOeks1k1zMDLBUJcjTmu5YkRUKtsNGoiveqlZCV86 +hefwz24jXWJk0YVNOlF6SGX2FXOGqtDwZVIIoYZAxublQF1ZeF+v2FNP6kKyhP9F6VZApBUc12TG +8lW0/jLeRMes9g/X2B106n4gjuVYOTkUs4+f4/8N2CCW3BaJ6lfQ+lUwJB9t+xHBlznLdRwZ6rg1 +EQlL3IloALyfU2QQ8tpiM54rzP34ol4HJhUjI3+DWOYFxHA1/U8TIH0EvdMEj6pNPvZZ4bA4l1Np +WlhjJNrF+p9stAJ0PY8dBEzyX06RN4nur2zRENGxdMWfoiideqgEN5lCBaFRCHk726qIeK4phl8G +mbYpQpN483jTkAE+v15NbH8cZaBsSAnTgemZYCynvNJsgi0vIoI/T3j4xCacUa0rCFDJywuhaJea +dJNPog3Va7LMzIRyl9wUszcwfS0rw8ZUnD5VYp0ZNJAOWg8A6ejz5QL7wKMICTJeqNvG5id0dhwe +pvld8s6K/5Rxnf5FmZ7bZ1HO5xopBTS+A7Zm8Tov46aSsfcPiNALEC/lCL8gW4NklnmyLkLqg275 +vPUL0rDRCQZ8n5vqOHJic2jy+bkCDs6gW5XCa6PtFdOeoEvyzJsj8y+Qu+tixMZh345NF9srTClZ +Zsifq+DfOenSbQrNR2ncjAhQdifvXEdhqKEwTQp2hqCzpGjXc50ZeF4rKFhc8lD0NCRJNXcKdkYe +tShx06SgXYVLVXcpYv1V3sOWCSzJbf3RqS2BXRM0Is6uYj/BOX9sW4zPN+EzBk+ZzVSX4MoOod+f +9q7IF+hLbZhPVrN3VnomM8Y7AFewPEXdyK0LxbAuF6WFWPgaPfGRURIiDqFuq3NKHTV7NjD8TlnP +l2QOysw06MVUYGSPphN3j0mTMnsqilja0o3PfnY+fioxzJBJLiPzIgaxrlz4C6YTJDLLSo601m+U +AXOudz5i2c07+fCQkIws3OZ3xdKlgBkMIG2ALj/jcKAYWvJ+G/1xljKhke2qg4XPvhW/UF6qSqtq +F9JSeLLkVlSf9HvDaB+biIEMkk//TruONfvB6q/zGq+MrkCh5HqLFGG5Qt2CjQnaCtcEQJ5AqyyI +GCYgVpHrac00/KZof8y/IiNpu1tss+sD090knuUIEw7z23bi4opoRQxsEQ2TSCKMmaeGwl4e2hFQ +Mtx1/0gaKU7p+YaawzEvNi6z67WIDJWC8O+qyMbFNeBqAI6TwvVTTFVAFJSx8VaFmsxTekUFQWMe +gefXrulewv6+hN1FBd2iZw9m01o9I/iCYi8aDtcqTSQEnaflbcDIB8CcPju2MO5PB3WPWI+DD+DE +wPdbYQGdPJrCSyPoIKSz7fGYFHaPqcyi29CuxSiBn+NJ1/+iVLmihYCBIFFdrEpcJwahGA2O+bzY +iOQHJuioO9u9u9RLejrr6TKTDlHpN1nUE3vXo0D7D8Ww2LQd9K/YZOIgNd61uKzegUPei0KP/+Dc +FWwwgmHAL41l8gIR8FnmILili0FaAMS3zQDMrax9rWBcGG4ENnKPdJZG5YqZlFcW6VoGaQ47H2gv +UYkimQ6lSH6HjR/z+zsw0zRkYHe0jQPLVZqWSlRjK9CwEUjMBMfTT6ciETuW5K+v6QpfDiAewTKB +5fW/CHE/NKwuPlhcAZT4bQjA4QJcS7M6MSBLJm37Q7TMXZtIAdqeeimIJGI+NXlkXnn4J6rH0uFr +vYADOYjE8Vuwg22Spc63iJc0jvJcCnu5Ft/ByXT/xofiPPCCPIgU+UXgWsadNGV0l+AJz1ErBy6c +vl0yL4LxJHGSW49r9iBodssbSCIFz/LheLvlx+Uu4SA499Z7Atuj6zg7fIuOLtWVeMMG9SMGWJab +zy1ns+EscyZ7PIOoX5U2A3vANSdBwnimcddW7LD27MnZ/RS8twW9xXEyClIO5y/19aGtRP60w2A5 +Uw7Z30rz9lYYLxm7f4LMuQUKc3nVx4vfEw+Uy10mnj5IrZhYQKLOoLnEjVJNDzawC70+rpwynNsl +0TD881zPJBE/OT/Ej2WfM0pdUYR0cBfsXVd7T0+UhETtIJyfOgDgI0LZI43Gd1Oe+8FN+hOc4i5X +Szkt7V5DaGXgH7Moqn+KaA4D7nSzCt1+K+xMHTQqCg+Nhx6y7+LBPQTw5NWt04BfdAkbbmGgXADU +rUp+/oN4uUK7cXZBCc7QoT2Cmzlj0rgMltOize3+udPCV496yYo8+fUU4EpYEG4R8yPk184JMKvv +PYW9kTYIaxiCEfcWml+OMkq7DCL7yc8Kobjpxl8sMP4pt9T5PwXcGkivVMCucrJ0e77vAYlxRYfF +MWqAMcJpNr5FhTLuaEDZxJIQiNrr4bcwWbyLlrz/33eDwUngeRpPfn4pB9ZI0zbKSXVSRWU7EB+P +MT78wZzRQXtYsZDEZiLLMJJKwD6k84VHWpTyfZlzO/GPDFPRf/Mw38jnWKkbH9C2h/7XtvZZxjtC +YHyNNekPBBjAYlNvIPmkd+mNJHh5vWS2qunVi7UISGeJsAQiYl+/ytU6UQOZIvhLOEfyKZAaX694 +udWgnRc/pLbor1TsX0VnZdZW+Vh4XZ8LNnMd0dohROFoe0jHGSA5EEaQybaPh3NDDhCzp83DGUJv +OmjgDrSpyczVQAV6fCqT22E2vgKqWr2Nl37IEgApN4Fv86cVEIyXiSUCmp0JCrYWjC3cITJFCHQi +HAGY9FOce7wW99qXILArxBwQ/2C9RFks27Iffcw7RAprkPlOycyChmx6POd94egW9Rpc9KutKfLi +EpmvwsNrb1AUJC2bNJJAwAEM8YbYq5jjwiB+2YcJnj+Vk3CeOILQb5u9xlOP1DryGFFAWSC/NFfi +jR+Bf0uuxPrrXVNEzluCEvSCsQVSyui5kMNDM428Rc/oeHBan+ZF9dXQB5W7d0omAJ0qmO7OS2Bt +MLuZjsNMqJEi0IE3Gac9V+8SXt/CmD2C2SuveeLMdeWj+ODo8uev9Yw2z9X1u1FryXBfqHl2MU8y +3TvcYPi/xmijo81/IjwTThA5YBTY161jFQyupC7lAXLq2OetWxyJWGUKZkxF4P38SNdG7G6kCrZ+ +yKfIlzw5E100q6a4yHvAA2X7fV/PQyuLNckF/VjXsAXv8p36R1YYdtLgptNBdnFC4CZejf+RLT5I +lNQcRtBnJ8pMwFCw6pScogUZgvH3QWRgl55RLpA3OoDCDuUEnSIjcnyNcrud1AtBf8PcfpZJZPsX +YJOPE/0sTsCD2p2ghmwUkuTTOBQSMR7WAUbPo01sq1kAMSBSMPHHm/IJgUSdHketkwlWoW9LEmAR +Lwlq2HF809uh0YqnCbhxAbOka1BgyMM6BGVf+RwxLURTiv/hc91KgEHQ4cWsBRUY14F3GVwT9ziu +Vj9LjKurlWBbxWRrCUkavzd+9J69GVH8zIEQwQd8W3RdKWS65fFPtgWbm/+wRIUI7g+kgI30qGPN +U5V8T3CS0wi2+aF/x7hWWx9ETSwzkCjJqpR2m5olRELcUfCyguPoTdjprboZYgyJU3ppuM9ipVXF +t2UnCm4MRfCDdbiYXTaxUPAF44JQ9g1lMCrhVcLcMBpCxKHhcpUYlrWmQj6YritvNEz3j1lpUJNO +8dOTtCfe0hqCCa59yCPod8DoKP1zmF3pDxOZfMm5Uj+QFrM7nKKxC+JIxpGHYj1bE0lJEdJJ4lx3 +zDOQR8FhI5Y0okbJ74qyiuCW8b8TuAF/iovIacZUSNY0QNQHPIWE4Tp4ip9meRYG48wWT67qAa1J +g5a8H6fEU1/o+VLhIlkkFjvp4GcX7waGIp7z1lzjv+cgvAEb9bUdJmzzl5LWHJ6s3XuwdZlmIARS +webRyiGtX7a/KKS4wTuZi2y3it7jWXTJpKtb4sXMy6XCWjNjuRE6kNEXm9UX8WuxGB1Wr5cq8Cox +8vRmPHCOUAW5EChRDHZq8cLAIukI8cHdubvSiDPxqIX+S2ohmSGt4mbcB84C03vIy/0NnnyPJXlM +dPhAhvebmuW/od2g6qKO0diosjZZFI0YwgZmNW0jcn+FQdLNXmv6DO5utSI92aPvD3gpRNpjCeDx +zODWnt4MA29jOUnSGO7I7S88HxsJBe4mIZmL7Q2QAtuHBg+kGMeci8v6jNhiml4G5oIJpXB+yFsW +EFVfxVRSiRfaVMOjF22TFKYF793b7m1+yYbZL1Kzo3Bm2IIApWSUEXse/ajWryzcVcfR23qE6wvN +l+NGlAUCWWQHxgXaJa39mWZeFq5LSg+CgUvdmPTTv7rGWjxu/Pjpcj0LAF5JdQvG5kAcwa/Y7Aze +qKxISFCfHpbj9IKXqFFsEn3X9H1X2FvZBAYKF3TZpUPkkaIRdM92BLusuRBsx7Ex5v0MKVOZtxHl +qu1sLTtjEuQmUGC30vnAgs+LaofiNzeFNyt89YR5uWZiy8p5TSDtxD8FQWrIg/tCbALQY4imeOzC +yMXTvZwb4TNYd3oUEPqyA/gYsmwnzgjA73QVxTghXYfXQ0A4g8lh+Jd2r3qOr+NCVIJ+vJCgrvh1 +QxYprV3crQyshkTPq3AY3WAVTL/cQaaNhq6SlZnhlU2Xwt1Cs9knmsUkcSi/AjIX7912MK3LDIpS +lQOMQ3kq9MQiaCjbmNOnvcGZwzi6EiwDZkYUU2qBo0cP2qKvenbBabO2bhhmIQyD+4FYbf2L0I5a +zqoGvbSgQbF3X5Q9eVcAedK7GmCe/zPNDP5YpZ7CUuHYfu5RCzhGvK4DUqOKIijQIFoKq+bl4pmy +66Gg3hp3cgf/n/NVLuFYK8MM9zqpYmR0EcdGfTE4Ijh0+suNgQbbR++Gc2h/E6BaHoj3Xu7J+o48 +DYj9wDY/DQYd7QktzHhlfJ6aU+vvo65kewV5qdOwIeV81aaBL6Klq4Ab3n/3IapYqQh+wE9y/yxy +BlB9AlhtBk3t+Fp1wmCVpfmoptgnOFQEii/HQWeEHsgCecS2kDEKbRUabIHU6QPJcA== + + + TnaNDytOOdWbBLjRKH39pZtfGFjE76MvO80r0t7bTbk10O3A0k/4Lj4Yiu3OFh2jMy5hT0Sd0aO0 +FOmmkk8hCq1C/sEHkI0II2hQhyJfHtdvDHmJVXDFk1CjyDML3G+4WZMunL6t3GsXTvCHWOC+gWSV +QsSmC6ZuEhJRfwbziogmtnlbpYzIotth5nqcZFZ0yrb/P48gcXlJG8/n42/50B0zBYt9+bOssF/Q +ory2+z6iXQ+OoDwJENdyvplOBimPdpG/4isAuyBG2NBs/ncVrGbQtGg9G19JcJLn9MQMysaN398p +5xghSnc/bWkrATHw2lbC0U0fI5P5x+FAFHHMlOoG8WmK2E9Xjhxh/Ij/nYViZUJ90h1aE6jwQyqt +S9Zz5aikj4CpttolzQpmbrZhLMpRNKwbZtwk05JmJPHjW6KQDA+8Kxn5bgbe0pk2KqIXsTanFmEO +072Hop0m7ZVw507BvmXIHMQngKAJNsH61cBTnGdk0Aw4WmUuo2+85pMI7Eif/NA8XDhx1VbGKnY3 +6oZM5DWDcO9cl0hAHypphM6jMrBlD/IMskNNfubIYr6YTTwfdZiWtXJCh2C5pWG3lh9DXYNaUoUX +L/XLPwuJdTmeIWWKkidySX5w8ErH3bebPS2gysPgRQ+/a/hoQEe0hhT60TyWZeMLmH0c6w+yZFed +SXGrBNWW0TH9C+xutvKgxlzoo1bx3SClQ/QmtoqOcw3XMztdddgq8EwuXe0GSpSUiwVNibyxTFDJ +uC3vztiFIn64M36VT7FlhBY7FEnzZcFVV72KxCszQZYHfjs6iP1OIG/rM0dw1PAeV44KGl10Vbnh +mpVOri4Ccxaipqk0fAIBZFWH88m72Yp4iNgVt+2uKwwnU6sovpHs2o2g8MBpwJCi8K/xsoReodNU +JYwml40Zc6cg7khB7HYp1ujTmwxSFHeHWbMDy897z6Z/lx/C73jMTphtMQbIr/MSgVbU+g2qdVLl +TqmlU7A3TxjEoM1cbh1y4pBefgpRoEn4bPZIB6V5sOncY+nFkPzAeSF4Ah2PuWC+ZtNI8S7lD640 +RK135eDo6/m0yb2lQuNEjjxETkFtO6fVfhwGsoDZWYmYepDtmD+zCHfoZ7HKhmeStQmXhbgHd0Pg +fPgIdqFSP52SGSlqrv6M7q/taBezVcSfSsxIE8jBrWCfuiSXJFCxAcfQsZnAkKj7uR0mNMRaBucM +SFmeI6Eam+oaVA7MwcXm0zTiELIN/L8/lwHVxNNkMfVq4ZDR2+H2q2Toy6MKi4ZL7o2Uo4OcrEjG +BxFMQIYTEl1NPlj2/IDFRmvswyr1Lo/Hu9344VliWfRibilMuFOVVZysu74QTwJo6LkIMWtp8mhO +7GESbTn3mirnOnowTJKFRtZRswR3jC/dfJfoZ2zIDqq8NulCX+MeTIq53MEqpP4nXVK6+JTkz6qV +bFJE38ecC+U/IoKJ++N6iUriEsDkeDQOREmJBtgeWi3Oo7K8sfy6PROU58L7v76ehCfv6+H92475 +wz7w0parUxGefM717Oc2BpD9iddANJIicjGDNXgbbGmPmbHVjeWp2TfdSO8xTF0NDyI6INGp4Dgu +Rgj34ljwvTOTm4RJq6Mvsq7g57WVHe1hqHClNgMhliIhCAnbB5lpMUhGEejBPBBJwBRBoMHXeeWK +fskokEuLkxGE9CudBxAusfthfpCwJvAoeJ4lZ08JKjCMIFo/EFUPP7AOvDNPWNn0Kwh4K8HpBwxf +XyTrJ/2cpES/TBVBkPLHfWfAJfpVF72Rtwu3KuknvO19/3zJmTF6y1fLeYoA/ULhl2nhy0+47+kQ +IP0wIoKAYjDIAghVyx4F6gcs5vWQylv5wKzq8Z0eqPAUD15HP7ZmhyDR0IFT6McyUFcapHD0M+wV +BDUspngEIvZrXbvnV1FOTyrrU1Bt44XVl7wmCNokzYFRFzdVOiSp9ju/ik3sBJFx3jdjrL3eCU21 +/Yas0iud1/kwX8FRVbok582um3er0qhllSZxkubAaIIIQVZp3GsKhJZMMLsim3uPzeoRBYJQtStR +JzPJ023qJB3/L+5TW1fpDPZW2jVEEKf0KnkrfYwiCPaSByIMLE2uByIh6UJx4Md9wdI58EDwcaVh +c5FQWNr/iiBwy9LpPRAsZmmwEQRpWTqORBBw1NKQJghItTQlAFrH/HjX0vxPbOnm0kbwWlqfRq4d +WzoyKwhk/I9xDIIpt5+Bny0NyvrbB/wxgQvZJasYTk2APRKX4ZyAdJgMSEFMZvUaXy0mI4i+xsRn +c53Emax2VFotEI+NI9dkb77GfEbIqY3hsTEaE6hGaONiCso2Tob5SVmLY6zWZHSPGbCNxWPhDvtj +RqSSCzR+NRn/bMxfcUJN1txj42ChC20ctUyGDHrkqcn4jo0hmjVTODb9FfPdMODmttJqxCyAXimH +urkvCrhnfaXQqUJaCHUWsLhCGWxQrvqy1hjlck/jHo7Po1uEFpIb5Si9Sz1/Z1GDAWgcY+r+jnJC +QOOnUC65RQYnvNpMYcaBVydVOdR3+Rx/jXeUX3ZIunOKj9BCWFZ6fQU5Mv5vFSRGCBdOodLtIZiF +IDE5ziZLLnIGSs4jZgEhSg7wkgDLbFR0BOWecFgWJKFgmobgmenuMSk5eE9+aEsOEpoFpqkHjYPY +Dg+JX6TkevrLrzJKkisVDC4gOQs4SEDHSe+yQHrwvsd9kFzmVH0T4upq5yRgEIbzMZuZHpywlT4g +uErCgh8EmNDNUaH30OAk6pRXyZhJrg4Qcsu3KXcrufxenHLciJgB3HrAWGBvHpq0glfYRslUKJTa +gGgpkAttVBwKVIx4Qkr40QQIvZWgkcltgyTwEf0sGyGRlkSwyuTQTwgUgzVYIFzETK5jeZNrHbLA +gANZ8DIpDoJwcvSSt5cWF0kocrWXnK/DkdOKbP1AFm5jkn4pC9kJPhtXoMJEaKiCeczxY02hhhju +zkLtILRUTfCxVLDMb0CIIlqoGyjto29OMDoXeKyMfdJUr9bIR7+GXDZu/fGeIbUQlw8/ZStQygkm +dmw+ciKGjopZNCE12KDDeRNMFxJCRBhIjZyL408E4uTCxKr+hABLWKxT3XBGuLRaahvNv0fdeCtt +uHxLVH077IzBZEOMswClfb9Sg11I405BmwVRz8gxACxAgmwIUW0qNIbOCqGvS11TSr2DAvvUT0VO +QSUCHUJvwaT2Wsyg6kwuHxiMwQ2R63sXsNrjCBjZOE9onIsLoovkIEx4OI0IKpybFWPSyZPUheqX +IuLpICTkrWrLFBIJ/cETpBZH1V+qLiTLrDrUE2QJ2q9XzL5T8ZFB7BEQOUPuAugSRAQu5MzCC2Rk +fUvgIDf7aMlwccL0Al0njlg0P5yTewGghYtrU34Pbj+CfHGJfIYY4CaCIaeAXg7Z3kB6UsTlbYDS +u3nQGBN9sb0gU0CfQxgdPNUiQD69OS4+j53Zzk2y1GKws8MtyxDKyRRKabtxBMlBrmYRkOXz7Dgc +wY4smxhDJJg6Qw6pXAIEogazyI+hHFnlB4RFNuonBOGtU4IEmAAuKSV+YwbDx3Zfet9qDbzkFK9b +u1nYXpCxUkyCe1sW/uGUvgg5DTOpxLT2I8IgIec85fFbfc+A9rYVWz+YiPLxyxCSIPfhEJ4AckpI +gnwfAVh5luJoV5ricblRgJwG+C1B1164xChET9IgEFeTo97HbpJONBNk261QH1MznWetoXXIh/pe +WPB6NDrJUwZY8RMgl8eBzHfTW3mvVQMd42hjpkurnV8h2S6qvWVKkJNuKXkAcoV4dRJNoXQz0Lcw +AS/5ESjrhbEbQhgqJ/gBVBES6+jUwfF1G+CroE1GdzjcxAUYZMDWFD3Vz54SoHZ3xxAQKhwsO4gc +HSEZFBjeO4VyNEtgEAA5Ku+Oy0klBHfcrloY0RXQr948BBTBjWH+a8yr4vma/V64C2L1ywmo9B4n +3i4vBqkOFfg4cTooqmTnewSTNus8TvJw5eU6AqR0p9LOhxshj6uxE05CyHnjcS5z4Sf2OPXeLd/r +VAWhi7XNWihvCXCSL9tfocrlg9SL7sJ9fkpyC0Z40hFF5gpVzFPBTdNSiLPHYZxDgbGPo0lPSFCg +6GvCnCwvwes+DuVJSLGPYwUSmPo4broIMfo40BwCaX5BaNZHeKGaj2OmHgTTaPU4zPICi+P1uFC4 +ASkL5adeMGggjJ4zOFFKxfmC2BvtEzDA9ZBGNhcMEKjzWODqj/uZCuYzaCjIw5wJkPRxHE8ScNRR +xMBgu1Z6LAimAgqFe0Bjj+PP5wAdh1TCBoTnEe5l4EZtCEZfwHF7XLxY4GYqkhQFNEJim18M+GFA +uDQGDCYgyh1AKJ4yINKOKzEFcOIQBPD1+gLURceBKgEQE3reL4BVDvxH7z2SgcuOI3H682rHvTQZ +3p5eYfZXUgCE/t8oyT8MT8C/lszEPlnB/lqOJkMuHMmgJZIoelqy7Lg4CJ8NXDPufRuntlW5r2jH +jcX2I4THPsFXa/3f5Kgv7Zb0+ui4Twb9AXLcSHF+TI4zgQiERiSDroCqgApBPlD1emW8maTjsYjf +pGxhCA+uyUQS8Jj8TamWQTavzfgdsmTGe1xJtbTuJtIEhMt91x5V1wypIoSitm8RPG1LO6pyXOLK +fn9fKR32HqYu2bve20UmaB0ccZjd6gDI5dRhwHFD9OnTZZH/peufdwNIX8L+1yW6+iqDvpuQ9jwe +OI5yc35QT0zYXLedkfnZsC3vBMdBzBpU44XCmFzTFZ4SOW3+IsGGGm22y9hQEzJFuTh2xQrv2fBq +mRuoDQnLT49tyA158bWH8KVNFDyZOY5nbgjWpCxY8DEAhryhZRt7Z3xbyfukG+c1dx/84RA/duqO +TIbjoLkfxQ2HMjgEb9OnFofeaxznxoE4fusBIAe65lu0Q3tWasqB4RnH48kosXc7CkT5rZuZI8wZ +us2SgMCNcbrp2xDGwehOgMvy2Dm0/5CggA5Fim3kAaep1jb9svWyxclbWjSh7cTMhNhsJuWJBc6P +lK+VVJx03MIdsbkuZAcWOSE0FYH7WnWi6rxrF64mreGatU+Ks9aG2oh7sqatC+3oq8HeR7JYbaV3 +WkvVxBxOcaZ2BTQ2KGp2BdO8TxsCWlDCaYpIGWVMA/4SIQFgiI4c7jw6zMtotjhGhWm4MT0KnDKc +/D8MyT9D2AUNXLgRzUGJo5VwGqiAzk5JC34zyLVwozVrCHuCzczojqPBy1YoD2AThLQeXIOT02Bl +RiNEylIpMDg1BCaSPKykygMyz48HChwxhwtl/3LMrhahn8ZmtOC0MObVcyPmLzlvUSkntilWmDW3 +R8Bp1FgIIMAtpFbb/81K4jHKdRqmnkjBr7AlAJV88FF9OH99sJzCEIrBDinF2wkmm4Xo+L6VMUNZ ++6YdiQwEsKVSSJj+cpH/Iv9SfeMrcvvK3NJREN+Wn53i9yZZywbq3szJXQimXpbi2g== + + + Ds5Lps87tN5E9sdMaQD8UW9uimP/dSmvYe6SupKOwq/oWmgolpxLDs/YSrlMO4Sji8smItoNKzlV +wBv7liB+H1+3KjcMRbdV9z6jvbtlvveja9WbheN2q4xrGnPwLj7RbvWbN9SdVY9ZVft1q/OYxCqr +rg9B+b3yDz0+ZSwqy9EHy+H/Bw48K/G2Bv16NZG5j4kzlocWlBq5Q4/bqgHqAGJa5YPlwB25QRAO +tMjqhpiPW0vMBm7GLRyqgavihow/0EDcchYz4C7c4D4GxsGNsh2G7MANQf0C4d9Gty6wqW8L1BYg +623EIguo4m0UMLstid2UQq79wDUlxYMZpMxBP1CjozI5JiAko4inBBJrW9RCAqCjbbS9xqH6iD8Q +N6GYSQglDttwBBBCfm3A3QP22k80ED6f4vWHHohXTyF4A+jhiWE1oCw7FZEZQClSG9MQEYfBg8gp +xC7AAzhxgSzgWNoISQUpXxOyoADQaMMXmM8kIh+0QWk/QP5shPKBrp4NFzrAs7PhEwBdEpFmLZGn +iqWmQ4VZZTZN9AMQAeZKB7Q11icDHAqUIKyAnGsSv4gAsLMkMskDkgRFHITY/X5ovBQXALWIrS90 +oRwb7kKksRmI/nwwtg/gf+8Lrv+7YjPB+ScnNhy0iC1RhIdNRu8uov3gnH5wrLB9mfnvImw4Tb5m +nOhdin8GwTYllBFx3Q98IkQMvB+q7SHEqf3DOTTD2MuyhuiE1vMaQydFPZsWgnjSi0OF1iH0F7SE +Fsn5KYWQzzD/RwfhHFJeJhl0Usi/mIJWx/i7RpCFsG0gCLMTSJAYA/LD2wAKqnP/IHHz6XTb+sHN +dPwQ1Q9E4j4ccKM+zn0kioOEcWsQ4P0A9nGjVeodQf4ao6KuX+DYNCqc2CT3Nyq6gB6tpd3s1TBi +TRQtODwqUIrWaHdCrlbGepqa6X5U5EeWgHAv3bgFqUuUcLSWMwKjNXT+njVFFM2aM73oMcqsYTAJ +R2liCM1gfkJVEVKBoSFSIcasnRzrjwFljfOZr1CSIxWdmLWYYPwBzJpJgL2QM96oQABJuoJzsna7 +8JjQHf6d3Rb2SC9tjOzTaknSbldHmL8U1l1EbU/jeI/ykTJL3VjSd9JLIz0FZRdSkpD4+SKDEJ8F +COy2+oEX0V4PKEtoRnbNYEsZuCIHkCUfgxXVn+nk6Tzn5rDK6dJIa9YGhhKsD0FAHpBi+SvZG1wM +IctemVvXPkH20ltMXU1/dUScsPX4Ck5splZpWsmY23GYsN4oUZjVYLl0x8Ay2PBD4LDTZXHWyboX +SYGI6mlhlUvmIOX2kqkOgjkBw+D/r3nKIAPWie0WrD5LQvBDF2jG2T4k+mECoHXTdf/5Zxful5ro +web0q29GRzPC4vdyg1fJS/lKc3SRrht44LuH2O25fq1iFz2ixdViEh0UAo5jaMCoryXkCYEqCsWz +b15salmsBHsk54myW7K8OHor88iv9+eOaEGnk+9GkUvSWLHyc+qwFbdBODjCGEMv0qNJPbIeo0by +QT966XZ0gAXo9tpnkMkFzShfT0eG7iGtK5pmeF8yMQoVE85YjWoiXcTmEA/F6esXefbvAfi6etsN +uB+O58l+jq9dXcLzcqOZY8jlO+NH4u7iV618eS2LzkJFD2ygZbQAEAh1XIIed1YmtMyLafYinhUx ++5V2ZkHu+hk4k5BnLMBM1P9Oh/JXTP8s01sCqZbyOy8XbOe94ej/ktI4I1+9V2ZdkMYcIG6C6XZe +ax7uLNWy5s4jM6n9M3ZlRhnuBnc+bJbZYs4/gufzcUUzAM+b3jIV4FdHaZ43R6Rwgiy93Bu/i5yc +6C2+lJE3meW7IkkQjokaOfqh3shRDJ4ggUZ1XLqFA0Ej34jXWrfiVeFj9Nam10G4oML0nYkRbrTW +I00QfBA58sN9OUxHDr9ET0OW4L6jfUF7jH+tb3FHjjrbK0QTeXGHZLAKOZygBOQosr6QU9QdPn6z +1D4ZYIavZD7O3rpA3sx3KM+DNbxuDsmCj5ds2Dve4uKB4OM4jNfZ1b5J5E/CpBuUhRK8uscLP/6u +3LnKGpN8bByRsfoa8v9DfvMDil5+AGTOD/lIK+nOvSIfxsZuQ4x8ezaOp7Q/8stIfoIB10te9FdF +oVx65E8bXKv/Ivl/E4HLk3x/ceLZBgDPz5/HVKRhkp9lAVd+ifwNKSV/jWmG2yXfLZFVnGZaucIH +RYvbykUrkz8RWwPFJV+u8XcuyG9la7Bn8BCNJ8h/cgIg8MHxT6UTOQyOT2jJ/OLjwy1KFR7GlSa+ +6vtdu53VYOKz80nttrw9axNfEECU7sSHzoqYp/7vJ37/z2qZw5mbJz6KEBQD4ycPnN4Uznkw8ZXc +FuSt90/DTHz3/GSdXJdg4s9CJ58XCwcT33sdhsnNZlY7fJ7ALSEmPt+xAIli4pOpLKnKu0NlLvER +57WvlPisjLwGR3nPZIkfF8ifLfHTbs5dOhpISvzVJoM8TJpde5X4cVktB1/ixwcsANmKQ5sde/AI +uZGPl7Utkpe9tdZefnyyBZaXY4wvnMAfnYLnEu04ZPDyjaxD28x7Z7o9Cm3EXcYTv10if2gcdwI0 +FA0UtqGhnfhKlydlekU8BNmgrLprl69CNl4uTZOXqnJoDjw85qW1Q4uMnjta3Z+uvOzFjpAsB9BD +i4HSuYzIkD7wnHwF7WLZMdONN7RUQwYnSqt3DgzNUHz9Wwj/lUxrCEN0VGU/V9shaAttYTLcHBAo +CSVa7PsZrjLywZ6Emr6TlT8N7iOG+smO4D1yqNS71Acy5Scl/NJdUGlcyjNJDhtmwSdQnYQ3pR+D +z1/Y7Ty3hGO4CLoNlmdyHQYjwt1q2aAmbnVisETrLpjmyYZY/gPoqj3A4HfI21IkukDmXtyY+FpK +5b8ScuY8f45TDNErRIRBwV+usEuxCktnoJk4nNxPbM/rAMcBU/iLpXtyjmfNpeqVAfOEthXCY5ZM +K5+FahG1l7kSVoF9tmjy5+k0XLj27MDGGJjxhPOyky1JdC+QQZpz4cRYDwOVfX/As/8OjdlRhhPw +3VyVSllFsGI6ZStAgIZ8DeMW+EPBoX0UoEdbrE1BhDLCE6QJ2TRpExZphEgZOVTfwPaHLs7HrteO +S0uGhO+OvslzEOeUqDrrSoxm1WNcAwoI9VSwBwVur8Ms2+2XqrFZ+edjSozYu3nnh7L2qnDcFOk4 +xpkp2teiN/J5IrUqXl1RSA/d9NU3/JwlA0pdoYk4BjVBHVTWiXVLusUX94zkRXBGtUrgCq1BhVOO +DFHJK1PvIwisSBkxjAbQuE0tda8Sg6Xt/fBu0UTc/ybam4Pl4zSG5PkPK/Fd+d8atFEh9BZ4Tb2f +0m0rNJ3MYb9c1Mu1PYnEtxyMIMxODBKP83dFhfaxyBlKS2FvGPR+TPaJ/NlGYbsXdC+JrMzEHZov +luytzjKcPUPzCMO0kikGoMwyFEzrac5gyh2DLz8qCxXHI4PVGvAF+36oIZYgePiU6cEsNcVUHkAN +qMPzD5ahn0kb887K/tHc/Zipv+ldEkaF9xkDJJb9sBTu4vO+dHXltFudNl/MjYEDNJr+aLNLl8Fz +zXaiRaMJdYmHilGIb2AszzttCQeB2CmjB5RfIGvWIFXVIQ+rT80kbLI59F0sD+kWF0iEzLal3feV +HfGDVXPLxSA7MhGJWkxDY759ntoJy2jKxGnX1AKewObawL4cRh6N9tLiX+9WrrxtwuEwUwrKuR0q +WTCt/OYz7YZOhBQSgNwGRG/mjztVGzBiZeABp3JrDowOSI/dSZZDQ7VN+979vbhBPXuMl8o5dQH3 +7NXCpQkafaQUP1vYZItbGMsy3CyTmgDcEUNjpW9IGahsONSfGl3cFokEccm4xDyIW+ZIrJzhkEEJ +LoAGSukhBL7obhfS6licLBp2jb3anVkaIXeVzP7bTzh6ritVVcz7a3L58KCBOyeFEgVdVFBGSLpo +yHU3hVZAy1zVi1D8y49+Bsyd6xwCSICaJwINckEN/gf+Dry973/vBb1fVU3pMO4g80C81Tm9O4kd +m6y+DlUyMi++4TGIh5AY59mN9dTHhJMtTzSn7KlXrpaWcuDdB42G/BnUgJm7c0Hi6ORTjut5XNP+ +MePhA/7BfGIZgL9fHL8oQbB7l9wuC2hdWlqekMjMZctNa935VOLPtbIE2UssxsKFqotU5be6VOG1 +53lkzs0qVBcP3tOcFOmvRmKahL3lDMoTtAtYPiaC3LBaVPOTNqxaaSVL0GuTrYbfU8HCIHoR4RrX +OjW9OvvjKNxUza/NQT6t9mh/sRTCkkVpo2ESmK4XOvFcFPlT31nm2lmkvOphN4E+Kuwyw9ukE3Y5 +o5JITaW8JnI+k0US6GVEwjXlyUIe4xhHIWecQhoasKIYgPFCxPrB8gdpiLIJZ5klhynYlIbgKGD2 +O2SinzSYwWvy7c0Kd6pX1CNeiQdAa8gpu5Aj6LSgGzbSnKnlyDH0grdAcGnDp5JupSH++OWjgB74 +UFYdNKC0pg+znmDzv8eASEymYX2G95ikMM3aL0FS5aqtIg59vCyAjEnhXPXkxzOqAtAhj0z10/yO +HQoo60jVqRNtZzOxgwznKgM4S3ri4kdJpQ8kvqkqcNTElNIw0QwMtXmh9rmTcoHGKFPDPu1QSbPz +zBOR1ut0JCPR4swXoidt+oURMk6aoQOUmUyj4TsIBqW9b4DL3MzxeEUPvoOeUgy6svsTwHv6fgkc +jrD5Ecnli74hGqoN3kf5eFFoBwDm5Nc24OQBORkSrgSMC/2Px4xUlBCCiEsAHgBnhoCc8DU6tMBg +pJNh7UhboAI8ADiPEJrDhSgwWFGnow+APXi5agAEzafccL1W1XZ/+BwDP/ffkRhaeRxgPPPtD/np +9GBTnUPdaSB4ywOB2T9HDIZhwWKJM7LObt/buHQ/FvGf39QdZtqngamw0cI7+jM85StBnRbpSAbn +82NreyL9JmIo48sLzTs2VHPtcwW7lKT15nTGn7TRvA/2CTzrLvsabt8qJmJ1lX2h3cTVDedFWE9f +j6yaBwpk1Yn8I+/0w8JdPJVUrRxFtcSl0P4MjSKZ37Ac8OHEPllnrrj0K7oX0fW/R+jyKtFnMzjq +TcJEbmyZYoZKx8pKy+h19Esq1FSrtoCErN9CgyS2Rt1lWxz4n8CRZmtiYj4MBDXak4ZHvBvH/Uu+ +w6WEzlvKqgT3I9ZNIR2twAZoImaZV9ANnlG5tx8hzQuVwdgR+IqKgSJ7VdYozfe31mxqmV701xqz +evtBg6Csl3ORUmCRAppyqmpSm+i/dPwlCWGTwf+0OudE/dr2JaV//j3hHALZqWcGQ8VAfFkHOQ9E +cg8pqkrSGA9pzJfVhhAPBEYRAf6kx0o1WXXRFTdVz4+iYu9J8O76I5MfiCCBFhtyORzYsin9AOje +861saNvQN7eIggASyjTfJZRqEoEWj+32faVpzoG3PMmgGrlOqZi0TicRwwdUdpxJag== + + + CL6AH0CpkD3xe8ghh/WKhtH8yUUpT90MxcCCia/E6q47pruxKODvk8P35+YJ7I5H4Ytinq+hsB1A +rjayPizrrMn9TWjFHiXiKE27RfeDEzVkoZWSyCsrVT1GUrwv7keRUPfJ4i44fzmPlfIREMUoqegF +Mjy3N9mUxJVqpaxrhQqYZPyHHy754lzENBXyVqxg5/XVVyqeduCZcGHJUIHiKMXo4DBMLUc1xuWA +VScdiP8UZeAzqPIuJp9B9ugOEygMyx3NYmAaDcIgBGGYDkgQYRVmCkYJeFhTur6nJtQ/d8vLusGt +anZf8CI/t7qKtK1cmXvpGwt2XEOdoSpu3CFiOvJQ6bKkuG+hSJLXhvJjiunqqeC37lDLrNejEIO/ +gNkA0D3Ct+mXAXo3tNnUeh4G5eCmAhWyg5XAxoZJksGeGUHEQBZBkNxg+YogrQfYAVeNPIBhhQN5 +ngoamTIFIDq9WdOajrJYgalTrYNooiJg8IvaSAGgxh3XsI3ns7jAiWg1CTtADXjIfR3dDuf9TdTf +z6i6CXETMAd/gMCOMRmQiQBBHW2/g2zQdAyBoLfSz2MQYlv+dA4cOyOsvNwh8g82NgIro6740Kvr +YOLfwv6tEN+q+xgRIZoR5Zzh0kY7siD09ejq/uzHr9vjbbnNgOWyFYbSsy6HImNhmKI1is77jH9a +ql3OD/FcXSL7RJE/iPqkusNWDQxWL23/oS+DwBm45lH+8rTZ/vj/UlQWd5T0A00o+BX7bH2WrThw +orYdSGhFYbV1uYknkLGhkROELz4ZaZ679UcQ0dcTFgjF87Mbg6u0Z0tKg08m0qDSidZZchq++RBm +uTt5A/PDDD+MKv15dBICOQ94j1pUMvuvOKtQxiTQsFkw6h43FCUoOA2SaCt2a6TVfRo4J2z6vIzv +mtAFqntwoEibLObgMmFEJ90gTJwsgJuflhorV5frm9k/Ffo5j+3Gw4BkknZZu+61Wc47DEMiVcFU +weIra4wrURE17MLSlqWJSEu/z4LuJkm3RcueJ5IaTS1K8ojsAYFViQlxIteM3wlrY4e8kW+ABH9a +3855cM2Yw5RfHsgL7nJBADSqok1uJecVE4siBYum+ZK0DbloFZjZ8Dipjy54iAZkuvjJA225QhyQ +xCry4bI1AgGai+yQpeF3xapjEn4oHKOKGDMMIrUDVRI6M+DPDRWAFjoLES+DgEzOQG55jJakOX13 +YcotQaGsI+xY4adCmHsG1yUk3YQOjZGLtv+4/HpOetatjbPXvaZ/qI3xrpxzoIZ1P8kQIBkZ0PGZ +/sMhfKswcX6cxvmRAHW2YrAxsCGSPiijb3CfJpJBebZK3RLaVawjA4kL1mnZq9K6tRHt04NRteAp +sA3ZJDqrXeU53i+Lpz7NUDDBvSCeozj6zlJ/5i9/piEHFAFL5J91wZGjDaHO8uLnHQoMSqfFxJc+ +UieWQFc7hosFCEZ37JsiiFOZA1/oe8PYMNUj7YspERtYN01SPT04bgEVisnqLy6rGAN2NMHl2IBd +naQR9oi8laQLCy8mNiks4CCAatR+Ecd2nlNg8DIEwEfxKaAV1pheJIJ7S1/pzySHkhzqkKlGRraR +w8EtPlDnxDdMgtcFm4GaXASaeJlDMe4SQc2f8xltTFdKcVXnOu20hOUNQfPAE1MU5zIDFYeD2X+t +S2tMM06HSLgtyzdEgRMNhyHInmsAvD5PULXX9NiPrK7tzQRjWrZJsaPsA6b78Dxx1b+qNJxWNmvw +WkDn+ntXdP/GiRpqAiKckuhKjkiZzhJAts9vJaORo4dDtsyEZmJiFGSdlvm/e2u3PBnGXktDivJJ +cKXBxU8cq1HdTfN1asoA1j17EUEeUxbHBrNNJYLwFUG99YHGEzZj4qjnlns5zREclsfmxFwhrR8s +b4wcWJ0q+3RqPHQTWApSVisAjpww3o3XTCUnZrPWXrUuP+cH6RzXbcgFu9fxFgiw8TqPNi2LMT9y +tuo9LwLWBmsbQtISHNm4PHDXx3pgSUyyPZijhHtwYzluUfzF/r5zWKmSU3rpmpMlKjfKk3YE9b9b +U6Xxm9Hm9WY9iLmQ2cN4YrAoPeDDCjyb3jnrfh5kNo3yPJ8tpI7RpcjKHI+lHvXL9unD0J5WrMV5 +Aal4wQS4em16SngySdATprihtQWuY+5p+5Q0y8pLbVihGYghRJr+ZzGfl0CEoXSYG0e2XGLdL04X +2w0iHuR9E4mjK2SjOEjkhBw3UvfKypM1927sVCXE4VK2GgfrVrq2F7lw8EPYy8Ntcml5F2Zdsy9R +kZwVMGXLrmn+QOrSDKBqUyBW1NpXVxhaTsQNf8flYVz6ZIJyN2jgmKT7M/aVmluGdr1FoCX3clY2 +DrWTG/8+xpMkzYlY+imQLfCFk2nkDfONjrFeIwf+3QTyYaAFTeJ8MMdVtQ4vLCdsXMRuKnlflp3J +MER2OkwO4J6J0ADyJo5JSwZUe2CzgriBGVR9sV4uI3GexX6ApGja/A8q+HwnxAHtwtwC4PCFgbL9 +0COtzyBEW1HQrcj65pMikr8m5SdxFD5lKLoG7fMLJD08MCxPMEFS3VfMDMMjfGuyDJrOdv84G5Qz +tS7AQBgtgSlA9k8hNshpQfdUJZzWGfG/pWxk46u7BVCevQMvUe8dphXJVQ8dbaU6E9Ewn9glVLTE +QvAw0/p39EzGTszcODJXauHtGUbSZ/6gCuWygXy4t19jszd5S/MshMyj0kZ4uMYc5Xd9DipWrDnV +U6CLYVaBjiZWleUEonfYVPILL7/IY1tfn2UCDZjq/u9XFT6BwvBhECD3ApFZ5nTiuILig8B/BFry +GLBdfD1LLE/Vd/joU0VY0OpefzaGTugRMztnlGJ5NL8sC3lKk19BWr/P9oBZTIOEtIk8vJw2P8sl +vsySEWsZHu+OaH4j1OFDZJbv8AB8CW2lL7Y6qIlOYMRKji5WZq5TDi2WR2liOSg9rrB4G/kMgeO9 +qpMIcQdvlYIXeV9M1mI/PXeBGPq2KewACuPpryd+4QKPPPnq3pgyx7DhaLXUF0Ze4ruyTQxaLRrl +x+JqSp9Hp1jMJdQKkDtgM1+0fK9ovVf+lmdPAQJuY2tZKv3KoGeS1ePry6Ele1SmzqB72x3k6Sth +isOQRXIyNtDeVNy7pWoEc1kxJTvxHRq7ppCmtVbBl9RQUJvKRTpjGGRaM2h2nh/dnsqlP79Hltz4 +/Px+qRY6PNX+z08TUVGDfrpf66wkno4/K54ct9r5odRFlH5vP1gMqvR7ovTgwC+h9zxZ4CfjhGaB +X7i/l5dlAwMZe4QX/GTHvIt/wA6YnyjMwg/wy16Imnu0geTpAT+mArDMNwBMpjYCfuM4MVVOBBf8 +pDSJIIJFMMj12f++AspZ0fqSm/6r9fmJAVsIdL/K+obCEHkGPqwvkCiNbzBwWp81LZPvItcBhOtg +Ok3uSJNaVN/gzSjh3pdaVbV1fhsen8oT83/oF09c0xYOLOr3TEq2VPwRLPULciL+2rJFIP22HAwI +0cUUodAf6ScgptQqnX5SCbHL6bek4CtZsrOfB9DPgpTWZcf3cvH1qBZsfq1YFricyDxdON2A2/VC +kLUdwHVD783TT8V882hrTMWtYa+TiJFXgg43gFuwMM3Yu2Hb2+UPDJFKeS7UF422vzI7we4ndja7 +4HpvEx9i1/t5pQVgsGiw+16SJ8q/QbbY/bM/puhld0kLK0SDLD/ZnU2hXBlz2Gcmu59NkaBnnIwv +INn9jAVM+oCYPsfun7t9s1jVxibbdceRjjQoi+4c666y7l6X606ggJJadyOiu8SG66hdFgBf9ztN +YGNPrrtXlAuv++2bpQjPyvRuSVC/0jsnnLGz32nZv4k/ggL1yrff9dhx4cKs1u/iGLNE7Xdp57UI +ryMFkFOMXEBo1vLEO4VycUGuykPHFPpcUogbyrOnUBzcOAyFhhspdGFiTKJbIsoUMgbqPTik8IFG +Q2I4hdTzrZO8GaMohbwRHYMUMiCprklvIjGF/Bo7Eikkp/V7h2AYU1K4FJjF4SosN81KxhxC2U9M +pS4+X1/JcfIYrFyPkFwthhghwzD2WBaSm9NDzpegqlppFubArTvVgiQ9JfQHMZIrAcgYMCgQpjMk +AjIQgndVraXE22aWxsyCeLKCsFG7uKqAsHD8sZtL9A+EhppJIUFYL4Q25EfYBQj/hHBqD31jVQQQ +4Yj1Zvv1744IzSt5tJb/dotQLRel1RVh/DD/QwRxAIkQptfB8RMcz8WHpX6E9sTxokQVCZ0gUE9u +NArtDSaPe9ACji5tg+F542KpkLGcG1EgKGToi+KHs5f20aXC1FEskXp9QnOg1iTmhYeYDSd7YTVG +KlP4kqcBYqd19uAifpTC1l7ZrY/CLfpQYQA9yTNgdhNWq0FWhCa08+oWtgkTzVrEmxDqPGNjNFBU +A1khhi11bU+tonoTJvfmE8eEpdjVSRD5aEJLDVVICWSU9id02g3QKDmh8xZEVQ+Cuu1AN31Fjz0P +BqiL37fLBIVGsw9y7+z/g9a7Dtz/4ODoD7yJZF75QVqncHZz7zTtZEjotnmPc4RlQ4YtB7td7QIy +zPJhKykyxNp6BoQjbvtl2GNEwKo/XWP4ZxmMbg51aumBudwTSfv5IOq4cjVPUqxitMu32cS2Egd6 +rxVxiKro9/S5llZ8hDAocJFdgGnzh8oUrEbqQd92WRaChLR6W3cawrGGZfIipgIJTbzxZV/5h+fP +65CscF9fUAZYxckzm0eC7qfZN1jlKnbbZYnRwNQIig+yKDFrNDuOJWw3SR+LjtdwN+agQYImPNKK +DRTsTI0L10z1zywOxzQKRDCaFVuv5l3QMxzPDJkoGtTYuXPuVg1KKUxo9/m5/xP02QZpNj4818er +NgmcFi/0qXuWburSx+bK3dq63a4bkwV+VBPVB3I+X4I6KcwuTjeENY2EdqfqqPQ9e7NRJunhkGj6 +zojY2GjyI2rXQRnanq4w8/s50GijxHmFJdSjeLrIBlZ5ID+iBXvhCT8ErxQVEempnJag/BStzQbL +h7RlBfObg0grvRnbJXDvxQguRURNQOCvalM3CJzj1g/M7RMuBiK8+hazRTB3aeOXbi7YwaUWoOP6 +AdhK/e62/e+7+/katmeSP6Bt0qSRBq5phak9toXLFDLWvbMap8TJXnhErStog7vkMUwuNriLX7b4 +aeQLAvUJcPdMXm8oOYIexTa+Osao7iT2+7EX3+4dCd32/kJk9Qu3z++2oD5ZtEs1PvCwQDgN0s/O +nHeKahdeePd4a0wqQ7Rpcnfyb+ynK39aRwcv7kQGa0V/CXmobFTN7YIakDpF6rOMAmpibUueZ+G5 +ks2Q6P8iUC9gwgynbswNuDdUhNPworOEI/8xz7u36QZoFyL/NF9v5uE6tcH8q7W+nypbMfdzLtId +S1uenKMp+z4E2MYgd8PwBvUQ0TOc1H1+cEsexvvpD0ux3+qk15n3hjUrl0IXbuQH6Q== + + + sh/EGTWvtKFoYzAwbbwjFTRd6c7oXB14LCxjgWdvDjJxnrWhtuaBvM9lT7ysUDsk4JducqEvqADS +V+YvhRWIEg1agHkZ6hvWlB0M1AYh+Mjbmm+4tdDGxAAqaanHA+WnZ+3riTbYcL1i+03AayQ4BVkS +/3uFK9/vuJLA6lU09uzC3v/vRmzgfpp8efGTb3YkTiyxcj1gY+P7PrM+1+NB0AtdFumX19tyBV/O +2bjmavxZy1tz1RTGAoiEpRRKYMkW7AKzXN4R/UI/2SHBwbqmHsxC8Ga7XN1KnL0l/WB5x9xBDVbm +XcEEUnJhsG3/doQEd1YGFp4PYEQVYBmzP/irGuc0HWBvkh5wIA9PHlhXx+9dI8AaAb/vBT7lgB3u +5KXot9JELIn7t9pkEUDiyqWDhMOBOQmutu9/kCR5c24x1gwnSlccdKkhiXbcVVruyRXedtV2vOM2 +dgyv5XvBq3kxZqRjorBln4jOiffg7GJTyJfW4CXKplfB0hQiLW1uC90FdcbjHkFjKPS1IPX7qv8d +vMQ/3vI5mJqb2w/uNnLfukCN2DxpEFZxZ//rHIH7ZBFLetHiyihfAZXt2LuBXfT0iMZosTE+plgF +zDmafs5WPIiwwiYfUoMbD6rGmnsX/6AuO0X9/R2sWK1DE7QXJwNYsa4waTX+H1detsos500iLcuX +dr5OHSW8NlSP2745g6pXN84FfoZHWerwKwGRsqwZTcdTQO06HQ9n0kT0Q0vH2VJW+tOlQba/Mds/ +Q4GyYGMF/l+7sGR8DorUsMwguPoSci3EkWkmuyB5QNeFljDYhwlQdc05BhN37i4FkGvmxeQEfCPj +HE43tVJ+FsYqqOdxSYOGTTqBI+8dwdByw4pmmuJ6/vBj8W9QfaHGDg5KfwR6nPp5cAO+mYBM3eGg +6B3VLFhvaDkcW4ROle1jfoOil2DsoAUcIqgutKjuvmTH+Eunzv1OGn11sPYqZayC1tOaETiCVe6w +cDcQStqPBMTb3PKZ8wXbhw5EvZ4iE0CsAIQyxqPCroq5lRi15h3VNRcGZjEN/eo7A2uAQKhB5PRG +VTBjIPROxh0eFF00PjeoDtjIQWwtUCTHDWrvBtbLtiyvOyjCJezNDUr/HilPJxo9LLicFsfsPTLo +UE9LoLoZcYQXNJvkNFG6/gvo3NIdExiHiaZ+D8groqUPmgFqlxFZnjlIZqF52o6IrySmSt3q09j9 +mQKmYOd7Zpq3k77LZ5uFjlSD/rOv3Fm23lU4D/ukwqM6MAe1I25dJSwJA+agswGeKZOoednQOIrS +wB8Y1+tHSyjtAbDArR4G/lcNsJx/poMEXxdd3O0eJOFZDQaqA3fRF6zkJggJWf3v6YlgID5IZrHv +/AJC4v1BQlkvn7xDDhAS8gbgrxL9DiGJ8nylYZAtPwrvGxOWR0h+G0m1te0VzT1tCyEhyd+dTC0k +E6d/5KUFhxaScS94uGFlYzxjWAEkaOV+YdqQDM6elG9IrKfUY00Tgb8h2Z2rnW5I4Cu68S29Nxlc +SObGIWFIFMCMQ4IAw+xBJPFqNP3AciGSlGE2JzWXXEEkh+Kl8axEMpm5cOUukeBzCs4mEqe6ZCcy +WFWpicTN4wpmE4n7tEZ4dSLhAHedhmGwiYTY4wOjfoRUTSRBwss3TiQyaxP2ECFboxOJGcHAbziR +fBg6guqJhOyEJ4EAW/IF0RNrrIQFVPEKM6E1OQsomwecnZ4ub0V2TRbcpgqcB7M+LeYYPgGUJKo5 +5X9sVK6Ynhw0RKGNSgcoABdxGLWsGFjfaBodVlnJtODTGECR1NMicwwXGIlMwpkETzWgw0sY6uzl +pcg4iSyQznVuxg7UvxKjdcc9iz+3FVFoCBCOeoA5gh09ImHmxcQ8nEjjz95cqapxQR29Y0MAivab +9JNa5Clb6ec5ZxLA2EFFu0ov/VydDm4oizSTLd0UpVMd+veI+9kVIxkMb/1tJC/JmCankSv3M+GP +/Uny9DN3WZSfK6YgtHvAD36C/3EXJ96K4nLaCQhU2/KT5iRiSTnJMIvL4LSZaJvcRAohhGBT7z7q +ULN9wCOEZuQDXYCZXcuRF8hE8I8GxbQGwRNx2IAJKNtLcCYxq0usRZ1DPd20gHoUEWa5+Q1BM3ji +bz8bKwZZunNKtFXSNBEyyp9q1iYqZT1Io3y6Up4IXDh+6ktcpeVPTJG/IIJHKIDg/zR/Omx33seg +1vwZvrdfsi23xiIXVD5UDSl20fMV/nnnY9IV/wzDnOG9O4l9/FMtbqxgkZe1jqKlzejP9exP4/dT ++6cQK6dT+i+ULnZiWZCk3lqKvW0kItpVcOWJyKPeA+/v0yj4RQVAS222JXYm9fIfRHoJwl5GVa9n +xWAN/2DjTlikfzKyg/T5adNMVJPGISMvnTZ5E+FUcfNpsu8BaSwXIjkbBy94dV3b36d+1pntMx+M +RU2V8kAv3fE1yTJLTNo+X50R49PeiDRJCtmiMlyPyL2Vf7QYHFUuDWDit6DOPVAv7cZQtz6nPYSU +paU+nOeFwmvzPj/JJHrBKGCe6dlTyl0XJngPgLUHMtWYsKlL46Z9Lm4mZP1pJ61ffYL/TUarzy5T +dDBe5clCoTA0dikFXn26J9g+LUOcSxv6Loo+8/yeigd3tM/lYmR6nzAl0sOa8dOhvcZPPSvzep8q +NzLA2FPYAwWGolNmEZwvxb8EBub7NvYJMHSOA0Bovg8jGCyg1dMH4MSZhQ1oVQVK9wdreQfre6mR +Pd6O43HzU/uSX6P3Qp+9SS5vS6oAX2E+N3L7UF/XXB6fcWza7tqJx+fql8+KsawkOZPV+BPgjJhw +o8pN18JXWNgUormhPs3D1Vr2mQ9ALINIspaFDBVE82l3d5B9H/16wnjuU9Lbm9LN58Z+eem7sE3K +agBm91E+G150kT6ddKjwh8G6XNSvt/k8Wz02Jdx1SJ8XUI5Fps7BzfY6rei0L/IZycq6YbTPB0Ng +oea+a7r51IbRuud8wrlVq/RZqCkRp6msnZibT6pMqZh8xrCRtdISgpi7B2bPnPVvoqYqKTEFyecv +tHAmn2RJlBiXkixcDaQimG8UKD7PdsHM+EYy4U29ktnDufEVcv4S3tKNce+6PxF8WhI9bwvzGruv +UxEpAbeqEHDT5U1UDgs+F8gwBtNIo1uxEpVY5vEqw6jvQ/1zp+iWppo5SgWfFK0whEmJYV9jYd2F +UHxK5QZRmRRVxl8CcU2BT8CaMin/kgLvSdiFQoaQ2HNq+6d9MWm3Z4w1pZN32h+S/oEadW0YkX57 +Si4ClJUA1nBPK+gOniK34uxpcDNcVpHj3YARRenUkdfzaUxt17PllnhwRGbgS8E9e922o/6axy9u +fb896SuYeleiBnfaYcA9Y3WKRj0YvLgnHgfxJXSv3j7ReIj2RFNS9lpAYkCN2fOfLm7ZUxsgt4tN +gkUaAAjKavCjBJidtsqe3QuotDKKab49EeHRhoMVrCIdnMT/W366PVkQNFl/3j40fJzpfYOSxmo6 +ayHEt9V2Rk1FttXPcVVw6Zm9sCuGStj2RPR2Yd49dZdws7dn6xbfyNVAgvfE6HhuiO94v3vK0i8Y +bfckr0YB9jQ+bSxD1D0dYbLAQvdkYoOdFioSqeLb2mooOeieDFjxv0eHd5mlmmPWnsxqBuvz7NSO +I7AlUBn4Qjm0Pa8f3fZWlq8fylxeMxEfULiuUkj/lJHGQJdQWbyHr/89qyummd9zs0UBqtk0Ow4Z +t4f14aKLuaAEzX7dE9E5TLcDvu5JRoHNsqkt79R4ZeJVXDg6vYGlPBiMDJeWKKMzX5XQ7Suxtbft +WXO3tmMpIUXERn+isqr2cOdtxkZYUkYaybtX4izZE462Z1STPV8DeHNYOcfp6yCH2R01kJm4+6Q+ +Q0q82HruZX7VNNelpZ6FFy3JMKgxeQK11GrLoVpR6gm1jxoYr3btaz1Z4BsvRbWezgbJmyTsiFBo +g1S7wg0PY8WAK956+rPKnThvPZ8Ox8VySFLRg4xtZ85TsQBb44cPam/okK1YAmN4tZ7dlwh8s4Go +Z4miJ6Q0Ie3nIweEIT/7P/uySVU7JhJu0pcpo/XclIiYNrEEGzkPMK5PUVFnnbnbgjwstp5EvvLL +SeLPrh1ysDEr4Sqx2rWNM/ZDsVxTIc2K3fcDvHmKj7QyGuLGz4LmwwQ4e+gTx9UUjFim5IGRVPZr +GYCNCOzDVG0dOa6g9KQtg1Lka7nSftNXcUrq+AD6hwlwrLBiFXwZBP+MW91tCoCe7YwCWRXRQWT4 +vZyDHuG0e7QOpuypQc+JzNJTKPSctSp1bZ4BB07i+CMPOY5CT2f7LKTbhZ6qP9ZKtQIbNoRmCuep +atBTPViH5h+ubQ0NejYwN3ZasFJLR09XyeI8W+BlyWIfoHs/ZoanEGoHMgf0CsKa42VLgF3EBz2v +QjwygZhkyt96SOESeioGKuGH0NNWRooj9OSp77iU4NX4ff1bVgSPHk61WDqA3Aw9a1pac6LdJiav +KNDh1qnp1/EnerI3i69URfSsWkJtrTuyp4znBJUbOsDR1avroZmY+gBJh2x6Msz52/L0oe2Pg8Gd +J7SD87SdZ3w08eG/88xb+aCGPGf3JUB2nA7EOGcs9kXk1ZsfXHmAwjwX9IJsOxBMEObZEX6pn5tP +wzy7MSKBfPIU4y83pi0xTwmYrUaLB14eXSaZFD1NoKiP58vgNMZXvh5MKmElJVHGBc8ghXRVUlVn +RE0gImBAed2E3sTkkw7IYyhJX/oSd2cA5vmHkbhAXX8PWUo48bQzh7Hd9I+Jh2h1xUfXlAmDnXIQ +lts5/hZd/nnjqWTRaI2UqwojZ4w6ogxrjKBkKk06Sx1JrriYPRZ9IRYjEdSS6PQ0jwbQKXvhhGqJ +h57xsSNeBYYtD5EyYqn1wwh9YvYA/ToConKeJB/2leFFNZjjQoK4yPlIiYEcp1A4hDGEj5KDOpiY +WLCMwc8DcBVOUssPrHdo42vE1t0nkK3Gd2XAFld7od7suvQqvNnNlCdILV0wjJWp4TZ6IjZs3NyH +UgHfppCBgnN8iX851ffAJI/ya08DD/3Npj78eZFs6oOdlNjUhDbnv6YekHlVPH3h8tua+jslSe80 +WSVNcae1QaZUU0NyPISdPgMj+GlqQqGY0rNp1viD0tK0xBbU+pyZG2gbTXNUwJyWs+X4ECK57TkX +/DOBxJp0VBzOZByXhusZ7YkQXPdGnW0m2IokFWRgIs3UuBy/ZCYGHAuxtjVWo+6+PNrAAsmWbLbV +BX3Atpsc3iYT8Auk7moI+jyXyNST0DZ5Go2vAFca+S8GnNEsZRszY6ILit7F1DHn/ZQ5G3dEeGtm +PflhLmZRtqoFW9a5mMyGiQyPAiYZLbESKJo6QryxT4ppebHh+7iWShoQBNgAoh5/KfNqkkljVVSo +uo6Xfad43Zo+BoyGq+T+JaE5eqldSy1Gl3RifMEpwlPR9nmnl6nEi01eXKJxbnPnrg== + + + swmHxjNcL3x1+TK/VENDl+DfMKfPMJdg/7eoxG75COIyf6s++4KadRlv+FtqL6ekt1tCU5iA/LAt +z9W0cE8raxRJHelc9HOitdwyhHUmpNLe3Obk3Iy01KHwfJXRbXXCz7L9jBLKyGaJMl9Et67z07JU +zXY1popUUzHLhguVvrEkz87SCBVoi26+DeMeYZlVumN+qX+lTzfsldt2pT7SoeeaTq5s5qAL28rc +A4RbkiI4qBih35YEUG07KSXc6p5Gu5OObmtXC0nWfRfnROmPboP1zGkjVb635ySptKmcrqSygnp3 +BkBUKhceV70KJ1Jq8UtfLsLADFvSH8bSHNuUoCICPzBTVmNFr7iUo71rH87uu3ZKuXce8X9J+etV +EyektH5SS+rtzEYspFxZI5jNL0RfN+LElNnRuEqRuFBWup8oj8WBGHCLJAjcsFBWrC3pyh6XzhqU +vZhvIo0tUS2btRdmD+UQjQRsGLqHB/UECjWZTOsqPBklrFZUCEpO3RDYyedTpXgeAyoDQBdS39Ho +9yaJI95gz7gPXZJVl0/PiKQpHm9OrEmJ5mPbxdFkFw2WwjxrJsnu1tRdZDIbMTlITZDNhHZuYZI9 +PEu4GS72aQ+/pLCiSw7vVJWEtpY81nZ4xZKuR3HOSlbyW85YHkAl/9E2DilZbSqZjSTSyODwSaYJ +md/Jatz3wmT0NU3VxkC/KSNJt+YzfKOFJbbfSEp/Mrthy7yBzfXnPX465q0sg7RrIfmCDEnvKZx/ +GkbCAsjLLp51EoLxAuR4kkdKoSSt3GUo45k80v86+RSWW9heDEbkz2QqMnLluTGjYG3j2/5Ud6xJ +YWn27U9PoEzZ2vUln9rbn13B0tDQldT2J7co4GrQ2p92qdN0f2L5xrHvnzfnxOgFIYjXAKuG+6dU +5r9A7k+tGYi7fwYfBEWNu3D/BCS9rWcqQ8QBBTrfk2wbgCuowAEEw+Xl7Ntke+m5JKWUKSUJcDgi +N24EygauBuIGVZ9I5SoR467SrOq9NOP2Sfe6FFJhjbiLO0G66UTcxZ0o7uLWxV3cmnCDpkMxpTpU +DWr8804WEp0Jmhj56ZVNTGnqTaNacef9bVD3zbiPS5a7YVkk1WimfLTniSi9CCN8GcAFAPS+yvH7 +l0Xk31NJ4bt08EOPK++/5A+/HJkbzZ1DizP+cEvXjDFHfA71Y1LP4tSl3AfdoSz6IY50WnyLcr6I +LyI9MRKWl7P4VoMcsz6IQbqIjKrzRAyaj+jwPNl4VU2RN2udiJciEbeVvwQRW/RfRtosRJRijl6o +WJ4Xq4Kuek/he0ovG86Vikpx+J0dXXSJRG49iXWJKzOieExDim9RimfxRRajr5JkPQU5arVbT+LW +k0iyrCdxPYkcYl/DIKfvkN9QwjNaTF8hw0LSl9GpmSixI6bKlT9l/ONYdWTVC39KyqOoH1MohNKP +kGrqq/2GZC/klZkS0q5hDn+JWYK6eTGo/USjzJ6mDxiDcyJyyjMqlrJ8sOKSmIclyEvUUsXu4cZ2 +SkNcrU/IROk41RV3r6vVxsfRUMTG8VnZxktCqFNU4jhRyY/2IhS3TmGhaMznuq9J7UzVFJ+pHy8p +bb9LspVSspYcCRuLkUuISL09pNNvKioe2ucit0+6faKL7ZRWT499qCXKY187QolYJxHdNm10t1uy +ei9NKegpxRCnJhViiZa6zz1/8k7t7ZBvr0ucx0nKeKtmfKqfImo8qhJRdhWnUncnjbdKf6quRuMj +FTfOKs07f7mKtiI89RuPKs34VKtiW3wvuT15M/VyKmLlTTEf0ahLK/owH9HNvLQTfs6OMsKPUPjT +nhCraD6h9hy6pyEJxevj84Uc0wqRJ2rBJifGns+vcfoNJUylhO+hTCflVuLwpfSIpJDhd/ZKjxfz +5YTvckUPSZ8o1jbK0syPMkoJM7+xlX5LRkOmn1DOF9HmLZTokBcq+YlONIJan+iwXLun3Ykl2+5s +I2gxO9vurInttJ3w0D7s0GqabWP/+rX2ifT6u6mW1l52qL6+YRLHsqY8w1P6Qmop9//NVyM6ZWry +jWVRE4uc1prHMRSqiXC1V8xJxbV5wi+EPktIxSaPT/pJv34PTmRcP1KIfPyqNlxFapMa5ROjzYR8 +ZOIHyVWQQQvH0vKGhIsTyw6y7CBHnx/L1J/5cEsHDVc9mUTSB7H3sH0Vg76jvQwp2nt4mjPZh/k+ +zJcLcIACGBCAAyggAQgwAAEMNEAAE0FIF0NhkaHOJ9p4tTJSjzBfJSFe0zXemomxHhgeBez4ftkm +CuQlLIMHh3uFv5q96pqM7auDmWiwBFRFIcslwV4JOWh1EeJdskAHjXkjwzqgakemVnaEvATb4S3k +POJQQTqt16HKmD0UmU3DYKZFr4dUU3/YsdQV+b5xOUJhr6emURJkoTGlJMxBM7SDtjY0ppw+AFQo +I8FWi09NThviSlnRjFbEYrChBc1KqMYXFwmNViR0D0nofpjsQ1MeXYg6yxl0SDZOEgZiUkNWFUSz +JyJLbREqClHRItTlSYU65BKWEG2IXFUPGKW9UL1Jr9iqSsL0IC9q6kFRLVPVmRRISclpPnIJlaQr +Cn9QIT+damhBTnbIacg3AxFV+MtERUWxolVVt6oxSzSaIGNNRXdA9N0OE3OU/LJhEU1UrSGqoqIQ +1ZGggGgiQTUWkVPVWw0V1TyEfNJEiNHARLcsRvpiZqrHBGV0plQ6UpZKUarigikgfeoUcPYoJOxB +vSoiBWf0memHJtOIYE35pDCGcTM144YLuWiIMxnXLBqeaE5+xZKJhiZTfolGpg0hYikkoVlMhkgY +2nlUDuEM0UYxo4qKmVBBMUQjZRniY4hIaMZC3VDdRtGMJtQ4qRoyp9DDqc7sQquqMceascMP0mj0 +z2vF09WxjC3v4wsqiutirCgTnYrIM50qfyKmvGRV1IlJZtSSRU5BK1n+oQtpaS2nCJJOfDeWx6Ii +qjqxRJEsXm3lFioJBlXlNT5FnJ9gLxMiuuYncYmnKmVyyPJT1F1vJ+VZPfTT2wqTffq51YNmakSE +Ni9O5Zd6fKZT0xQfVGNWPhVV/lykND+JUenIPObyNj7VZ8M3vKTWkem8Ptlx0XMNb3YmcF80Y2aq +uhpUrypcnddhv/PaPm2q87p+kv0XXwr02C5lNbuv8TWtiNKcUcue/Jz2bMmlchFT4xSk16gR9ytT +MXm5Y8d6xmba79mLw8l4Qp0jloXk4+uvjKcyUeYrxl3lnN5ZI5RXZHOKRPSVzU2iO++FVt5YHqSS +ICcxnkS878SIjAzKxGyNtyQMEmFUSXxWfP1qeYlK6GlQEI3se0MOHJKGmqBCzf2hUOOZUCNjoKFN +eOkhc6IVBRoqRYTNudD5Qyd4FjydMNNgEdLoNB+2TdjFToJkpPXgyhPekeqKcHjXMWoik4WYVb3K +JGJzZlA8lzYyWyVYMbx8OFqDUrIIlMXULMqXm95K0vBhHViBNcM3hkaojN4D64GbEIyIYCyUgQIE +DgxrWJUwrMMwDBmGXRiG4cIwFIXBQYJ0KE+gNlAlUCdQAxnI80AHEUbCDDGMaj4QBSo/0HtHqIc6 +xw0ichhKJPIEWWSMclE7c0k56susjOt2z4oRF1VsH6dFP8Sa0yNGUH4xRTRhV5luxqK4pyvySzE1 +XSdaDNrER6XLzEgrZuKfjgyJKeYgiXNOMuIoYUeIj8uQtMizkW7fhjNdeqGRWad2s4H0khNOzXpe +a29bDfHMe8SIyEwZK03fTgtaS6J1p/Xr5ozNSu9uzFssrvRVRqVo/TI+1pV7dHZXWGbG13Qs6hr8 +rH/31mIx6QOyhkY05J3a4XBuRWIdie/BUjS+B8v5X3uwpH2qwih6VlM32pOrOGpnX0sri2nFzlUy +sZV9bm0V0u/vLaWUU5npTCk+05fiM52HpqHHa+1Od2i6z6W2ugcRyVMN16/qAziLujVPMY0cdohT +JO1pOFrUXNid+GWyDrJrlGLldH9ayKGa5HxVkxQLac5ErBnl0Pwo5Y3VJSIzP0bG8aq3Waz1JCwu +ih+tj7l4Tk5PoYumPryZ+MJRuVWZVygz/YQkksx45uGpsL+wfEZpfRAnItIHuRL5x56T+jLJW9yK +Gfqc8kb61Zx6MYu8oD+TRBViGmmaamiie445z0h2jRT6wZLU5khd0hPTWG8cP8iWb1SisZFKpTyj +xTO6T2r8o7US1dl5L7Yks0v0Q6Q9TtOReKkT73SMjkMmnDE5oulMR2hCaFwKEVY/j5P0k1a8ph1u +l9GHHqmXOofK12Um/okRTdfwyjvKKfN00ifT55S7gtEPcf1qhqwtWSPiKclWl0w2L7i+qtGbeJ6I +4a9ljYaK0iBSRd1VFT9mUFjxToNV0xMpSmLuxa+iKzjeqnSJ5hI0UawyE+lVU1vCr8/dZvqE59Wx +g2O/VM89j5nD6jzm6dzS+WteYc5jlofIbH8UNRsoQOBAPf7Py4j7Df7Cv6LD//UW+S2+l4hYi1c1 +4n3jUQ2yOURxmT7qtN3isO21Sg5xzMQ9kcLeq51fLZnErTEtatHIkKVfpOn1ZcEyOt14YWfjuUpH +OH7rJrgTW+fIS9yd7ojaksi2fdKOxGEzStV4VCueTDyoNHU/QQ1xTUglXvXbwvpQWbN4UUfoZHm1 +MxSXaTHqvUjLFK+UZIjijE5s009aMf1cr5R8SslwVMeLKlRTOwuhrmqZKTFhy8Q/lbhQF1VZVUbL +zLipp5WrhCPbQzq3O+3cMkeh3M6GLuXbIadmQ5dFOZ2svezsZ0dKpi5LGa1DXsTXSDbuK8pXVKKu +9OMfrZWU0r9K43F2ojyt933SISYRt6Z9WNnbjuIVjrS1uOylpbK705UqGndyZdzJ3aedBLkWktge +HTc72xZP0UCojM48KUTM00kuKp5jbMiT3NBmNjxPiaItOx9FjpSU3hesozohzd9iiXTiafi2RsIk +yZ1Exa9I4kP6EZa7CUkv+JnJH8cYnFYp3h4VqV2krVUcHFWjyjxFWYKx8iVYliBrs7IEGVEOVrBc +FJEa+XhDFOFGQTvI2SzPHjmcffFsyqQ9imcMkmi/f+m+hiW6r+H0I7eEErS/+RErjd+/yzfM6TBK +/KF+hBNSLyOxv11V6sukCZk0b0NDXJFQP/MIZEeRTGb6EFLFR9qG9CQkEZHUNFE/ZjtylkiQqXUN +PSRJWkjmYkP8FGsc/yLN06nq2YNI4SXKFXY510uy53J8kxNyw9OI2JzxlIvHKU49ksaxP2OJY44O +tmOHyxglPD7Hucqi9CN03+EseBq375C00tSVmfsR1l1ETHsOZ5O277BRlsZ9CTsJkfYdVj/DGp2o +xBNxiop4KXIkq+hLDGFpqFyhaWj6WX20SIZb9EIs4n6eiBTyohRpkBdTzCErrExoLB+TkSXoN2Sh +yKoKURBlalJb9jmTZ5xZWriRc2B5ltznUqWkKmgqr2VHrbxTS3LvhuV0sqpTpYmTSw== + + + I0qwKP5Mlbippt6rO6Jutk/3Hi3tTv9aVFWc06J1JqfS6HTrtBSfKdGc+KjxU4UdL8SfpqU6/2As +vneqfKuNr9qPqStVUE181VUZr2olXFw83ldJkTI+1RqHG2dVaDYkLlShKOMOlW1cVVaTamTR6iWb +DZlT/DYl96wzkYqhkAyJVMxizUqCLpXWIsyNW3ut/n3ijc4ZijFtRhJraURb+JC87viOhpt120fO +MEQhiH4gBhLTq0JJRWh8STBhIgeZ6YTOO65Aq/qIW5FIMTSCX0MhHqRedgNvoACBA1yr5Qotqarg +ep2vQJqY4j9EU4FMrQROWC7hIuGyCpcLTRSRERIqKQm2JzLTkYzMZoVHRjzPHZ1ieJyVkDYlFFmF +RpXTdMKPTC25iPxNkFHhjFkT/oURnrhf39SOLr6GfLx61B85Sckci1BXXfSzmtWmKMFipYJkj/E+ +l06C5sGZTEEjElb84ZxHQgyTYjM0ecERUkSUT/GV2IWqZXbnaUgVm1XQQ9Og0e416KxoPfHDmz2T +Ul4xaeox/KLpQyguzhKlFNE8TCSk9DGKhNQkrmd7CkcLwxThVGn2EnSQa3YWR8hE1EdJe5A0Ng2x +Ti+WeFVeiBfkiSyqtUkZ+YogY+MXcUwM+deZBLKvw1gnb1DJwrWDNmyMy+AazRES4ZC5VDxhE2qI +qvaij7bhuGznwbF9Z3cuHnkv0sYzIqfQRFi2G67RwyIxl4Ujl3bN9zgdGXzNIPeK7RKvzKL5Eg+S +3weDfAlSgjjjl1gfNtj6vln6mblUQuWXwd/BFrkWqxFNJtS3ikV5Fxm/Gy+PISeeWyLGj47Dk4L+ +WR+DpfJr9kemoYLS8YuoL2NQSZ6N8cQ4hCqXWk2XsXykwbSoiwTTIiYiRl6S0Kqkq5nJQex42UxV +38Yx38jiEjizo1h9zZ7EnNJRlTjqhJ5584LVcR2PzCyEcfZj2keKnAllzo3o+0TEns9sJVnhsriU +hNSsZiZ5a0ZSMwqtlppC1ChquWv2SqyHqJk2Wslmb5yULZ7PbogizayTiG6CGqKrOYVba27huCql +NQ/holif0zyPbqPTx5az5xUSNaPNSo+JEcWYHrPLjp8vh5ov9Z/QVpXDWBVmJIoI5XlTQrVKEXw1 +xhWmq0uSAzEobCHoCpWpPFQsMgwWBotUbCmFqdV8saLbFFyMc9hLCSzaRgwkYjGUwpCsxapaYEVJ ++eFUmhBFoUX1ogZCDSuqcBo7MkFBhFSBakZaq3BocxrRWRRyNF50QmTqKxULpE8WaGYmeMamBI+D +hxJIXj3CmB4P4mIQi78g7kNdXbgrHoaqKszlEua/hPn5Mbz2CvKbiiTh9fkf1NVI03bxiVgtojQx +0uyj5pGDhB/TI2Lk347p4jlE7DNduFImKD7NhmKkC+cQm7SkTbZ5cr4UoaZhEzYznmogKodVKCIF +GQcZTlE5yEyQCTIjl2KFoclrGgV1qkQNbg+SS5C8to3I0CxFi8bH12W+mn9e1snxQBEkOe+PLFFw +TUiiOGFXOKf64TV5fWMz5KYJB0l4KGqi11OJkJPjQb4ir8QhL9q/od4PLnpGyVNHduqUo43MRNMo +9seYsYasoaznTPCyjjx6rI5UmnWn/Bh2NeqjFor4MmqQcVVBCmpHlKgI8U1Rt1+hsCVj56aR8yIV ++VJsmOD8RbFy5VKzRIScFgxi3A5F85wYivYLQ0LkLJqIdCNfaUUconBEuiLpRkaj5NfMZkguV+0x ++0K+g0KtEFpFRy60aY3M8vmk/TR7fqwOKZkLZ0E6V80MwCM6GShA4ADNhA5NUJjxBIWZCTMOMwuc +Sgw1KGrBFeJvSY9NvZ9zHEWCtm4rGj1c05qIbNsWZh3HOG6gT+jpWxvMTUXE/FFbR/Zyl9rGEvLp +s0bILLSjal3oULEgmk1eqWQ1dxdTs4maT4XDcI+abzgGy6uZiNrLdE0w92CQdjXD1j1HoI2lTy0i +/CWfxEok3aimjFGthKJSMumt2DDc0mmCRLg0unSlR82lU2IufRJrTd9ik4eIBb0+Q9OET02RpKPw +mdM+wZ/fa5CHdEHuDj2ng9wVZYjYHjMDBQg8IDgk90SrDdIpLROm6zDm+zyZV0cPx3nJh/tFGymN +tNSiX6XWhrxElKl5iJMQvzQK0bgSRRTCouuecUJCjD/NEIn/BBnFVUYEr2pCjC6HBu0OzaUTpF+X +8hssR/kVrCg/JDjdhrPgZnYvJ/lmJiciTxBpnauTLIgiL+1mSSiieOpT+bQ+11gLUvtX+aRG7iIi +YiJfK3fNBNdjZKbISZPwSCBZHjX/XyufIGMcU74iuw9e5DTlYBqN6hNMs4SVnKYU4iO/SCpMcIo0 +9vcxNhISETTTiiN8xoRIFULsSxRfPBNonER1xK/XgoxCEYnaRcS5ISg/H2bdGaVWmtqnKsNH1p+J +g8mu9AlDysjMhGh1j3amtSvOPNpRMMrFiJOGbHSJBXln9CTwdkjoQyJejbSzaO01XC35IkmTwwmT +NPdv881ao0mNMQ46yijPpsjChsegqlpQ1boFO1G6u4+LwXl0NpKP4GItduQN+mOkm04raNKKVgSn +fcOzGm8yHrUrmTyP2l7orLGCVa6oxqt+SbNCMmR8o8m+TVGmilJTJTVFqZDi1MhUESsa9CFrnS9o +nmv5iDhFVGszU4u4F1K/LAeljUnjFVovwZIoRskSs8oV2+2RDYv4nSnTQ8jBCm2EZNGpjIJDcgXF +M5IUl1Tz4nK1uaFwT93I5YR3rR96NaGSyT7arMhQJIRoPmHN22VjF2DckhXEcjj1xaKI+g9Zn1Iw ++FZHSBTsOqkfwfMb61FdIyul2r4yar6Pv+erdbSa2aU6+1wjGyQ50kROtEbYs/LiiiWitR66H0pl +GMQ1iLSew7U1axCDVnaG31aTyLkYRMrZsZ0RSocVlYpSK1rRaUhFS6wohfq1C39G8axhKleM6C2s +IrmzJUEiRZ5GykRfneKC7Cdk5z2p7YlSpLkQEjHau0j35itjhBIsG40hZRR0soITHZ1FdJGs4hTx +Q5JRztdJ1BmeMSx/GcZZLsqV1lq5td48Xsej1ru0HHnnSivrBmUdixwckoNeg1g1r6IcPN+OlSDS +/DlVSoNCIomLziJajUdNvTsXa4hDIlIiFR75RaQ44431jCNl10i7tIShVsUjIlRZ66vMeIqn3cjF +SPZ7kp7MqVKiwncpsrosX25OE9wtnmeizBBRvGj+EB3ioVvNUbJc8+LGcJiyVaUZQjgNFE53y1iC +Io1gkNElUtrisJRUxODJMWRk6VER3KLkOE7WehBNM0GUTjAcxaCpGZrxOJvN47NO7agiWJZgf8fY +b+YrutiRfZ544niie9IiwZmkKH20/mGpkY2i0IYdt4/i8Vqh2sr9Vq47wgnFwxHHiXDy4uyOLF5l +/EwyyzptsPM6FZtORU2pYtNvKhEckiVSkYZF70RFak/FxYrhc0gjcTxVIWv14TjUiKLNq4X0XCR9 +/lcj05E4TU1qjnLCroa82mg9tcGhvaakMTGdCGrJQY4XKzMOIemScRC1KmpaEvSJmvZlTJVKfdCt +aMzSXaRSMUpplU6kJaW4qX2MEPUR1UdJY7EHTcWmno6CpjPxKQ2FTEkeJD1Vbbh953Q4cYmzVzlX +Mra01nWWcBhBQp8TNNJq1UoaSbs9o0kt2HGZpkVa3kKfcxRXfIlDGR+1pbXaTDFTqdS0csFGkCM1 +smu9Wp122mmcsEUTlmgnJaLMaHcGOdGP1o1lNP7Ryi/6qFyC+whtMm3AhdtJJ5tubleXZzJt2HN2 +pUE7TbnSRlK4LE/3dMmolFKWc0dPtkxYCha/MjFiZWmHsnqdkvLaastryMrWcJyJ3kTiWDy5ftyP +OLTEBE1Q25jriEUWhXJGK5QzKhzKyTq4CuVkRE3kDDnRcqlcVCZI4TCGGBWacWu2ucmKriSietMe +OkrimEjmICq6r1PJeTqznFnWrefHkFQQzfgsTQ/zRenjLbMLT6scHBk3KqVqLXu85b+lqBSsyJBS +NRJi0TMhUm2q1KJMcS7KlBSnw+m44LTCIzrHoF8MCglnCyEJJGvMoMmy7HGiSlLMg0maTV2TFSmZ +S0r9IYdTjtJBDkKiENOieJP+1vwjJsvKT+6HTqWJQR2WRFxa44u7zstvjX1ROZOoipBvG701yAm5 +fJMoWlCcEcHlZI1byaRY9Dhk0TGXqgkiTV32R6Exvpl2pvE3itBRFKLDZ1XRGOLP1C9pLXwS+txU +oykpQ5wYk2Z6lESgR8Ciim/kq6ER1Qy9QZsXZTOdotb8mtpLFimRiwy/0YR8gkivYzf2GCvpvutW +mldf/G/Wl7O1C3Plxi037sZlTEutYo3IoKxU+sRIeEHOKTVVwzmFFJasy0ZppaOP4mRmZzdtO9PZ +SiKplUSOb9Tvo+z7GjGdiGsvl+L4aPXa6RBN2BKtNI32n3YpWbHm8ZVSdGK2c1RNFl1lueiil5lZ +9GVE36oLA0dytmZitIc3oG/HbaAAgQOhxlJhtc8vVBSBThbaDGnqEn8iOEeuW87VvghGpXV/hiTU +4wuSIa11UVUT2PlJNUQamjVKT+6JcJOTn7wzGQptIyufWtWYOnSqOUHebRZjLqamWermIzGPeoYq +u4eCEJF6/rJP59RPqDf/6/g2LyEKIeuEmAyF81BXn4aQHrGNPm/lVAXPccUsaDM6UW3cf0TWbMJC +qypZdVSninaOhbzHkme1qRFjE/Umsn2qMtV5nJR1bWRzBrWhqFTyCMWTGDoCAADDEtDAIAwGA4Ih +IcHoaH0UgA7rciiaieFwUAZmoiSEigkAEhKAHAAACGxS1qMXfPAMALfnWVojcQZASXVZPILW7UTo +n29Jmu71Ib6ABkBou4+oHjYONACEmi/HvkIUUb1sW7GTRcigJBhLNRsozfWtOAMw90Qxk8CHjfhh +ogPxXtEAUCEJvGyjBBoAFaIH7VYDkHlff8I5CPwws8WegQ3x8dMA3OT3aVwff4FlGDvaAkbgop3Q +RXQh8jzSAFBtxW8rkPUkYBVXKcFw1w+scQMlYtYEGEoDsJpdVoRw/3GvGgA6DXEvXex1cwNO1JX3 +4xKvQIzRVAVeYtBXHHcRmJEmCTZqANy6LQDUJ/KBmDvDpHGOQrC6P7CxG5e5EjidtkndEOjHGs+S +fd6Aww/333QiATDWWjTjCnhHVtXv44fZ4UsDPI72N+vy0NQAIJysqRziy4+9QRBHf2oAMMwZse9t +XXtkmapzVhoAw7psCc40ABLkZgayBdPGWSTaSAPwp0q+uAVQWSIoYQPQraHoJS0cunGqsCedMpkB +AiFqCTehZPVcik2lAaDl76cEpQHAtYOuVf9NN+Xm+pA8myvaGzB9OMHeZddHAKiMdfgynGbq1gAE +UHcBSWHb1b30GgAXymi4+roNc64Pi9EDTNtNHamQswFAQ3zCVVePkCcbgLFGIfhtQA== + + + CUvtQuOm/O1JtoaWHbaDUhMbgDN+kerkClxosgHwSABk4IrQZuVTCX5SlDHdACCPb9vsSTEdcAOA +bNSaP1MqXUnjMRY7KeyPJY82AL8krgzGP7lMK9Ot7Ys2k7gK3zYAot4MWyUxoTMGcrIicmMSbwNw +pnUKWQGYNVz3QjsQmZ34m/4+x+mclQFQROSEllG0dsEF4NxbAGZorv6kU6IUSLc0KQVAiWpu5dYR +GuY5CYAqsUMCIGoueuQ5EbC7LFGAXPwBcFAM2aCZyUBm2ACQGxal9bbq1gLAYUKPfpO6Qwz4mNZJ +JQHgRxogwKsRfDi4AeBZWtcqbVErdV0CgES8vbaV9/CglADg5KbHF0yEQ9ECAMDChQ8B73Op+/+p +yV8fRutdhLv/D/7/eoXVzbzyf67lKt3bmrWDvXqHxaCC33D7H4CzSQ0WX3il/+HNYbL131GT/4uH +pR54ZqkG/P8Qhsd6wwjwUt7+E03fss9UM0RJXP8rMQkaaLnWN07R0v+gvkl5/pUJTjKoU4CoyCkR +Sv+ROorkvpaiUpnfkMaoyScXXfmkZXgq/X8/PEo/5Wrp1s/5XwRwM/m/irJQ8f8bEkMeJLY8H4zA +fxCQv6gqRY42vH9X50jGtEsysyDZcMplzdSKfM3+TaDS2vAtZEcnR9c/orUFOrAwuP5HMCh267+Q +vX+Ub2H6Sv1LuHegrKkfnfpP+s/9oO59l6idctr41oL+f01mQSKg/+/Btf/8M92Isa7+bCpBQGKl +V/4jjDcO7IUyd/+SAJ7GS67Af2m2YqpI/K/ie7iy0Cb8V3UH6tqLuwBA5yAc/ibFc01v5cW/958R +G4Pe/jOKBt9wu38adu/kijN0Wdbk/idxenNyKi7bbf81BNanG/+48FrS/ug3SegNjUIn+6dEISna +gf1v3D9F2+jnVM1b/0PPdd3HLoWnkrX1RyHLlrwL91gltPoDA1Ow+iuRC171/4lIQkzV/9oJ5hoT +AfhsJzRKjdwJ2Bgipr/vVO4KI+5H/1Mg8ob+LyuJff7TwhqfbZT57Zno/PGjps4a3TVd15p/B/IY +/HuwKqw8AJ/5F7A21CrK8q+L3wbhjAWeMZR/gpeJEvWxEu/ylEX4e44n8KyykBN8/JdpTI//B1CL +CdMg3MlDHZBE46+XjOi6KcKv+K+tLxwqbSvRJOLfqagj/H6I+YGbrwx/XxEy162aCeG/YqrmCSZr +rAN/ZfAgt+hdedCsBP/9VdwUJ9I4Gez7i1jfH4JvN3CdXPlw9v7HX9bCLqgc7x+i6ZUwqEYKYsra +/fQv61dXvZAC00f3t01sCbV1bz2ARO4HoNu7fm+rjy4Jv/1PbWx90e7o6dn2U2sCe1FipshgsrXf +fjCQw85n3fPv8H1xSGHPjnw10trD+wghpP1bvasPG5xXIzhpvwWA1dH4nqH8yYGmKj3L3mb/HIrs +SLJ/gdfrUdL5AWxif06FUMN4G1AEsL+ZzTJSQCYg7/p/zjsrAitJt/4prMTeJ1hZM9ZbdrL+gNvk +Jx4RbZU92upfwoL9MJ+MFh2b6lc1BxIxNQN3LQV2XkDjSWklab4ViEHKQNtyKoOnnH5/KEMcUCiN +j7gd0//hpESCtnXK7o7SD6JAlijNhxJtuhVUmh/9Zy2o4F/9uJoW/Z0ApUWlor/Y3Ikihn7ybRB6 +4wpG/gBxBvoLEWgD1OwpA67V538MOK+TQKWleH7I2a1jedQWRYLOzzcCyIFnHeabHzfiSuOcRsCa +n7/uAxDJB3AJr4cH9GPNT/DZBqwncN3DB+oFPHcCYm0gyZqfy5MncNCARLHmh2O0kkWGsA+Olvya +f99wsbKnGREeYeFuxYYJy6d8zX+pW044WnOOy7gu626G2TMisIijQjIDMTb/VRS7iSx72T0fTBNH +q1B11gTScLpcXdfWFLdrJSksYdf8fHBpJ9jdSoc5U8jCV3xnZH3X/MK/PU9RBVQhTEeOdohxmmv+ +H3/VUKBenTU/6+9QCG+hCAiL3fx873bC1vxXdjh2OTeGWFYWVcpY8w8LOcOYBjbBK7sl/CQQ1fwP +PlzQCcQEV+hfNNUZlwL2rdb8B1AU3wyEFk3rFbDm39SOBRyPIaoLZ9EoArTutRy35hfzjK6hhG7Z +he6ZqqMwGKeJ1vyuGUwkEabyhDYngjW/lJmxnJCfujXzM6u7KNJ4Q3+I+XlRgBXFVGJ2+UOqd98E +jDR+CeKKFz93+ese1T7Wxo+wUXnbELPE0i6/hdkhNbxE3JYGu/E6qYiialwX1vHy80lgHXHl8ZRZ +/pj5ThG2bJxhLH+4a5H7LtEjC4ddLP82mZk7UiLlzroeZflDHteCJ3l6n9L0/gD1OPJT1rJCe9SL +ka1n3k3FCFl+EfVedhBGRPdZ/hlpbtqBOlORVf5X5w+c125nWaYof9P6xk8Emw44i45Imsmfd+Pf +lmcvOWQSkh//0T11fRVpwDTNAsTZiBYMHjMyINbj3ZdFNyGzKFXS+yH/L3a1WRbwrXCKl+NxJi9B +Uho41GXILymxG2DiKy+YzLBjyB8nvscyH599/MCzqmEzJSyRZmBmulclR0Qyg4aX2PgliFBA8PzI +5hzjHyDd8VT0fjabFv+3ZpHOSShGRVcUf2T8xZ7tWUAj8fPK/sqLgCgOCP7wI2t+y/fLzT78BYMH +cu+qw8H0+fDv45GJ8or68Jve2Wdj5D/8kkg1mSbl8l7nDO3Dr5M60Qlw0eeHv6blCAKf+s5m3efz +E0QGlfL1h/9cAd/0UwU0P/xcN+fxUT/8bE+MrKYHWX1av+yHP5zt73grB2kQfy390i4oh9AcC+6z +RRC/2ZMyRZIXQiF+z6Jsu5vCrkfBqhC/yQP4pSVBxEIdstCF+G3W0w8muV9TKcTvE5vYDfxCs1QM +8RPSFvRawGAiOvyIU2OxBs080okf6nZOYgx/6r+ZcjgDBTNHLoY/67UFb+/dIGaP4a8c4waVhjlQ +hSM/3cA+V+BkGrXH8EO0T7oeD16DKLkgbl9xU3LWmB/DfyfQ0T4M/6v2lnow/LOBMLQqTB4w/E2I +ToyubOllg2BlozWG33nB7R41hplJK4vht7mUEMtSdIkUw+9rc8euhU6OjuCbXiG0Y/iXl0iNALzF +ne8NbhA9xum6wZHnRZEQSzRWJ6G5GP5IcE8o5U+lUDwy/Dz7+JqEdqk8yfB7FbueRsghIpddfCBt +fVP2JCPJvfu1t3NJwx+N3CAOE2wZ3/fTe3EcmoafhX8xWLaNY8sa/ol60BWl4n5rPoGlF/putjNI +SK7h5+t4DmXgcZaVBEWboeF/LTxRoiBM4jT8WWvkVqIQpLh3iYYfFsa0d3Bozhr+l/zAI1rW8IOu +Vl07kHbaN6iLMWWzWcPvExFVKhWbqMeQEzGvDb+SASiwCy+xSMx9Mxt+L5v3o6c/3eQ2V0pt+OdY +6mwkirf4X3kwZ+frg3o8vjLJCbzioZ1LNfxAgJL+Te4Rpsduwz/HdxtEwRlz3oY/XIIvdQ2SxgkG +P6F3Nsp5RG2Y7d60MBt+8nuQCIoQM9bwmyH3oLMwsvsu68jCT24juG1OMMLSut0ZszXYcj9gtuHL +teZKLCqSpJYRwgi/favCpvIcDmnwJ5h4NUyVygj+WnnRXnZKg4eCwK95aVitPUZdQiX/+6PbbAR7 +17fk3O+3pCjeit8jDHLCfT/SgNTrzwShNrrL92kVCR5n0kmPgrj3ERXFCJnb+1UanzW1MXxJ7/Pw +HGax7yTvv6ugMRcKUTdswPsnQQHKOYBBbIT4mUlImvJ2H50pWJgkohHuuv8MLbMgSbDCtNYMZF7C +OJfQuUuL7RLruT+BaPb+jJxWud9BeI0S/n/BuD/hGs1G87o2K2RdDO675STZCDBWmHWl3n6vlS10 +6eEct5/xV8mfH+NCPdr+DWw9U8tmwAoU8WtfcYVLsWDa4yLBaj++41jtGamaHcV5TfuBP54R0/4H +riXR7dgzwmQSRX6Ag6Vl6+yrFoTgAL9pCGUfs/8tCSG6Fo+yYQTKfgK42+8JCz2ndn/sc9i5dFb6 +nwCL/TtzTcEN+86EgpjJ4YxfWNSr3ThgtuIlozsj9vVXZAWTYq9wI5ik5PVvun/KHUKw4vUv000G +JlnElskn6PosnT0TuAeH/Le+axJbjC2wqqxFZ3eGMGpuNT1EKrDWrP8EYTY0OuzICrgl6cGrbNng +s6svVfWyHfN6EjWy+nJ7o0ri+V3iLFWf6Z+/QdsWXxCjoPo1O7swsUhg5rYv9f2meA1uuaQAXUd9 +vleAw91eOzLab9Q/jIeJ6pYTvEZYCfVzj5VtvjTTQyz8nr7ekXunnJcoUUA5fTJdS+WEPo9UbJq+ +8cgYCwUuz7mAhl2blUpzDsU/xPWv9N34gWKl73LvC4m/9tWEsyZ9ngXOKqNyComvbyL92TOABhan +qUDALjL6rRWqDupLxafjXor+fmCruWfkmgiiz2XkwNDfMVK2M9Pi0JAXQh/UeGgRwqA/REpwoI90 +ca/APrP+OeGff3Lg1sy1Rd8+H5336bF+AOX2fDhwsp89nxJbAwqwo6D4dzw/G4DnhbeBa+f/oK97 +LnBb/uh8exH2QjyuwXLk/EB3Mfg4X+qPwi6CkiXS65tfu4/A8lxG9DDp1+ZXWk+ENp+kNR4xSCM6 +KH+r1XwQuhGY7fC6Q+VPR2wkmu8PkXuhh9XMJ3MBwMx84pSVckOakPnnoFNjD/P7T2MmY9+KBIr5 +l3+8su+bX/6RKlGcj43AunyjLDQxfcCDA03a8imNpxkOVal6mXScCA9ZfuZNo6aKIF8I+HQrHxnl +LwjRCVL5sTwHZoTiTAEyKf8mgJYHlP8KKc5iFBqN5BEn/6NHBOcUm5f8H27IYuUGlzEm+b9pScYc +KzawYQJuR35bE7hj0B7qEsSCG3QKinxGyxlN5DceJji2+JOzLQr55EsPBbxnVPSOExSQ/w2QX6hp +GNo7DZRPcrgTuMfn3j4twjyuCu7442hPBFiS1kNcjj9MtmVJa01IlxChiXn2CGJpJ/jWmotM439D +ONy+dYqf5P2r5tTBFLH8V75s0nm2YHxuVbvkGrrdUoUG6wwXH8Y1XKDD4psvHqvnKX6Z6AvHcf2u +CGJxb3aOPV8jOU988HyTViddfU3+Pe5jGjvxXStURxoaJXh7mGbTOZp2o3d14svqUdzDSnm668RH +OF2ptun8TPTED8AgzDuAoQzj/InPxfCiBR9I7xOfr8RFJIoKOZz8E1+GIVNm5r+YuMjQR7hvge/k +2Y6STJ/4MqKQt4eAVEmWHYxPfKPbeflKe277w574IyNpFIW72X7id3x3rxJHtjqA7P8k5TXLyl+E +T/wH2xAh5be83t/idIw+8b2fpHPQNincPvHRJ7gRxJnJ/RumBPqHMqOAmGUIYnPT2ImY96D4mcxb +LVd64r+FXCFWF/z6ib/Z5eRTGV8VeKvnvP1kkVZdXkcgwW5gUQbJ6y6IT/yrnOnQVA== + + + pH4QV/ITvzb/3JFJw/m03ePgd3HlBeVlD4Lp2WFWJoyoU6j65ImJUDByfo2P5U7dmpeg+BHDqojh +i84tLugR4REgPqRhAih+02q3nyXLHEa7DBlCH+Ei1P8Uin+/zMFPBBIkqVB8KckMH0ALWvkBxb8q +RSXkYU0BApN7pjEkaPrE93FDm1hZ6mQXYqtY8RM/oscjBU4nEEWw4b0nTCrMtCTsE5+gcBDsJ9mI +v/zPEx+gJnUL7yqhw0nk8Z8Rxm1H/BPfz34yPSAGVU5kJcgWF3+h3uMTPzqqvNZlRaZ0UfiJ32Lx +TsoYpXWFT/xnRB5xQJZM9zMtMxThiZ86DL1jU36XL+wLoYjOWXX8/hNpbdffMRrIbcHdNCN+aBzM +N5ogyQfIDeITJbiFLH2g/xIM1sPv4Rc/MqxmK8ThB+zFEU4oCfmGo+FfrxbGtfA6TUPut/3CR0UJ +wrQf2iFYbIVvfDfxsFl6oesm/M9sKyIRPh3PmP/IOV3brR38OAkPkj5Kv2XwCTIk5IjJQgqAfgo+ +C+5koPRQMB0I/hJ7BrMxDM102gU+FbQQFlSUbCf1gAps3+nnjQG+05YI61/mmSYS9t9LwjDdaGcn +nJiqoaG/hyj8laTKL9j1e17TzY9MCID4PR+6lLrN7DA7LfyrEFj2yhj7nmDT9fL6PoXSP0gN9lZo +s6vvf8jH6Qg1xXVD9Q0Oipvv90PWKaPkWvO997MV5P5RWTTfwzAulba8rrNLvFYFczo2nzJZNt+3 +Xl2XXI8333MiCedI1eq+8z2R4ZohIcQQrxbTiHM8p9q0ANRbB+/ne4e5aIi5mlme7xNVztOiMcAp +IiImaJCwRTrfFy/6uHxanUWK5Xu3R6o5MmrlIv+c1qIoY19fexbQRRro7W35nocOXOWi8r2zANvy +C92y6ynfq/t8Rjz18TdGqXxPyT4aimHhHLKOUcNO69DYMAfyhv0L5ftdwYXRGkfd1/XEbxrR8r0/ +TmyF5fL9FGC6jgjme5X8IkF7/LCJ+V6RCJprvSDM910R7bvKazj7YekCkWXDTr3HCslEDWvx8Q0S +Yb73nl/2FKs/Yvs4udaZONiufXjc9e5xtrvJe4n8w4l6d9Wc7yVstb+B2xY5ZFMn9OqrmoMiQYpT +VcD38xjOS7iO53vibseCt/yFLYBu8X2+/1nuee72/Qu4Vxaa791AE/gc1Sn4Nd/flxcsRchlHN6X +4UgiCtEwnoro3rf5XrvFvdMvR/XBs1SIx6MH6qtUUxQOCmvfkO/lwdOfEvCd7zdMdP0R7vpLz/f/ +dTEYnfB8H1xx7QwCbbAHJBUOIOcNM5wxSHx4P98PmlMYnFxSyvP9DN/j2oVf9p7v9RPT+BQQ7Cie +71mwIq1tRvO9kFgfENROgJLayKODLNK+DfkDlHub7yM19EERKvjj63yva1LiJlYw5oiwqQnJBGHv ++d6HooRHNBDR53vp7JdtstDmJtj5Hm0UdE/9eRWsQbpzgakzgdPuScV7zzWYSj2bQ3uPGraJIakN +a0CqILd6D0BT8xWq95quXNRTKr67apaPDL2v3PvVmNf7oEAqdo89+RH0/qMttleGSy2RmDzv5eP6 +Dx8q4sq9lEwPxZq2x9Dq37+L9+I979Oqli4VuZF5l77WeX8Q0leWZrTvZwzi8UA4xOeF+p339n8x +w0mpuPlm77xH/jVhyqWfuMcD4Zy8an6V2zByii9wKRUsCtiepQXxUJ73BjJUJHRWT1DihXKd4jeD +8c97mVj66DTK9GTaFO777gk5Cns4OOtiTZmxINU59XnvuM8VS08yuZJlMet0bJyf/nXZG6NxGJpm +DLEpp9eK4gGad0zq6CFK9cQtDVSAb9R7knu0uy3IGMJi+7yH37qBmLvMRdn4vB8gID+KV/8bTdZA +A56QdKgqSqlaUQug99z5aYLP/BPi0aSuTmCmzKXTYQx69yVToqXne+Vm3Z9qkClMy0zvzIkYjd6/ +qvWOkxoMGShyHkO3FNL7YlcVWOCwFX55PVV6L4s0hcrPiV9tqO649N4lqS3p/So/s9cC/+j9i/Zu +pvYjem+p3BghavPCXa6fQlHMczMmPW0GxPfqCYl5GEHVAw9aaN0bBXIC0kTvpWblYgY3xnel+evo +IVMhjOzjGvQkHwvJFNHK33y65NtYjThB9B7LXRErWJHti95XUe7FxP5tTfmBYqYWZYjejxeJMnq/ +XFQwS4xC0ntDK6X3xYGBI/I2OEEXwo3WyIG46LHuCa0tC0zpPd+j/NIS2MTaYB5NKyPjxjZLTkiU +3rvbC+FMe4EE3EFe6X2VXidV8NErrwbvq0xYKRfGAnh/z1Y6TO/HRBdVcY14mt5Lt0T8LLb8pPPi +waBsMJBYCvl52QuSfP7TdFZQ3iww288vOwsMmDS9h8UuxxwLec4hqD4jhpWz0icOlNc9sYh0Yrlk +Oe/r5ZSa9czcgICWZ/LeMxdL6Pw5IH1jJzYpQUbKMpu8Vx6aXLHuu2yCTKHJe6eBDOHnAgmWaKwY +yIVpwMiSVMGJ/fmPn4TMdF84gVQEgLzUfOkIs7z7C/mwPmKm+gh3Xz/H1a+5Hm8F6Oxe0/Jsm7qR +8FHYriuJzdphPEK3xDJJ9V1NNGYypIw9mnTU0PEwu29S50sNkCvs39XzhX12wNl3fzVCtPtm1kP7 +7D6AKgBQ0e63OkRMohLoKqJ4zyLRYRW3xxOkYy2fTruvLEVGBZS0e4uYtN10sUopcuufrlKe8u/D +Z2+W7w62bd9IX3PvrMDK5ICga6Yw7OjQYDLa2p2+k7LMDZj2UMixdUXSTMkVcxUHUkmeexUIfK7q +imo65JJAAGuUnH3FVlsLCz7luX+29yfzQ4MvPfdTAAZg1j33TaKz4AF0mCrSol7UACV6NbyO/J57 +m6mBmdu8ovPYjvPcq6ypagYAI472bh7zUEpBee53mViYdZSEPqA25Okijp6Wn7wjMX7d57kXC3Ga +esbOSXr5ez7UYlrxnXvbmqSr65oRlF+xSPGz+6Bgr2ld6OvcG//CXZ/ERBVRIGSPPAiFTILFCBwN +M3jRiPu+kA+MsNkJct88bS9MAm1SgnHfBuz5zJ+5801H3sO9kvQ9N59cgRwG91WuUcML6xFnTOq3 +R+PgdUqEkd5e51/jC91uX5QK3p4nw8btqjPk9lr56Q0bIYiEbftNqzxjsxYNm+yGb7TZnepjO0vV +DsEPBlHZPu6yrc3IigFzkcH2uvLVES+uvaQaxHBrT9JBYLb26mQByz05qS5pq31tiDwXSgGXXJDa +Y94Wyjjv7PJu2hvgXsgQt00RKmmvfWysPHtsBKPAWLYmaWJyPADtF5QTACrAAc2d/buBBHJ1KNnZ +9xEhsedlMbHNPj9gmM1+0QITZ7vX7L+iQ6u/yAMrIx+52osGiNmvE4YMZe5nlv0Vg0cxh28FhoWl +UIWyj87GQeDIf8wJ/SN7xQg4+Ywha797zcf+OHZ9syXysqLi+rE8hc+xouiZyEFwr/diYrNh/5bS +LGE/20yyeEWHONkS7MG4y6qEL0EA7FU0vpssqbTz3NcH6Xcj2r2e1jhtBde/1xsrG+Drv7ZoU2Zs +Lr7eKndCClJDn7GssOV4weRUWhxR2Oy7vpqv3WVdbzN3kg1YhyDN9fIPWFtnP8pAUX/BDXH9snhd +2C+nc7c+97CyHIqjmWz9y8o6p6IwTalQP/kTy/HX14haD+jZ8Wmpxftn/bgKfi5/+4GzrAetsDTV +VVXTsf65tE9dsK4qWVqpPl6HrOKerx5brEq0atXHKlXV6ocyexSwsHrWLCUQFTJqXIdVz0QbVUB/ +Ad/EO3481dNlXhQIa0mP7ecWvyRik0UalGGgqH46qrGrGGJ7UOhTXzc2aVi+7qEce25grqm/EKhF +9+0OS/1W2bBb+fcAajxSz06kvldYsALYyjipMbWM+gMn1BD1by1NB/UL8aLOwIqr/vQRtAwJEPPB +5xelHkfo7XERI/8U90WoVEEgVFz6J9ErcfpKG6vCxGz6f3M6NcfRQ9PDPdJU6UHl4pqx5daZqvTb +/bt7vvTVaqjZFRwbpD96ZQ0OrvQDHYRTerq9jInzKuRA6Uulywyw7bVylafNqCqBV6plx1yizLEd +Q4vuw/yQXsaBkyMboXvtDjLkjt4AACdRuACwvNFbYk5BjlPwNKMH7auyw+BQigp5SNlFPxTQeDEt +00uJUr5R0XcqNkDqXTLoXKLfRwvHv5j2HQC5kRC9EzDAS+6EHHoKTewiv8iMEobenfoxrciDPFFg +0Ak9xc/rBjf5ne/M7OOXB33Uk/UZUajTGyvjxqjSPgP9jiARGX8wHaC38IFAqag2pMzKCKscU0Od +dL9mxZH6w/vsPCmkGz6/ZKrHEZo9f9tqdNFljEn0fFlK6eULL9xBnqcMMN6da2p/7tinICbZxeby +sMNOKAZupbawnZ/XndtP23kuq7RXaWwe1pKt8w2lFEhlUtZTcmhJ560/ljLLiLL8e2lkmqwXZQbp +vA09sUUXdyVHOv+7Ks4k1AxH8qXn+91GlpfhUpEmUkwXhYwxafXma/mtpAcATsBOcZ7FvGg3+rAk +cR6QHvT6igc4j/yLqXG4OHfzN9ouKhp41I+cZE4kM6YWJaNV6MJ2HwD3bH7/auW5EcZe85P/dLJx +IkHFlaya760WLDDNL3B4ftNCgjtpQ/PrdnKW6BqWVQHPOvPU7ZPsNsfMfzR6BL2wQplfuyAxP3F7 +zusf80PlsM4PsxVMi/koo+T9HXvp8tVJniUdwkHnFa/CCObv77Hswy50Ef8W7/vyC0DKiGEwPXkQ ++iQvX5LrVbY1Z9VXD+ryCuWGNAFjIC4uXJ5lKToXCD2vsBqCLf+ucVFjYblg1dPPU0Os/0HpiQKK +RN4QlGtZ2175pZwZFPd4n/1KrfwOir8Gbtm9/8Yqj5q2RbazKh8kglH5Kh2d4CsqNOWPGM26cJG+ +yZhI+VHMT9QdpphGlBe8V/kYPnitP3l1Z9kd22KnPANkdvKYLa6hj5u8ZTqveP7Y8FUmf55vsjwr +Lv92jEt+yM6xIm6itQU3TMljbELT7E/vhJJ8M78VFs+KHDq+uI4geSDcwiWO/JxA9jq1IDHTQah6 +kXfREt7KMOTPNpEvn5kZO+TPmbhwBz9gf2hc4ZJEcriYk2KE4bog71iX4gZ8c7w+CUI/fmLQmEr8 ++PjRYAV9CEB61RpCWkOPl3fCDzGHYA1St1qa+A/NNPEQFPT3Hk+ceKqUaEcu45cttQFGYYXGd+L4 +rSqhE93RIuzGH+QkB0GjOCAbr33sW2brJaXGqxCNHTwCS6hWBo0/Qft3opXgaEDjl/FBs8A1Opmg +4jG+mbFrvFziWwAt51UZxqOxYV88z93ZWvfFQ38MeiW++PCEdDWZA6sRXkDiJ/6V6Twt/sDpLrSC +ABbPXzwk1NDMvj5YX8WTZcQ+2YZ2BrS1U/wpMPiFKIOvsuwy0OxG3jYG8V8LWCgnxA== + + + ZuLzH3OzeLG8TPwaufo3qYJvfoxdTokfRhbIs/2E7ssekPjj3+1XXRJixI9HSkdX3pK/D/GHq7ck +N9WSNoiPyVpz9TXx/vDoAEhetIc/mrdvSRwSE9wOD38WW6LJ4SOnftvwO5JyPRVgafj1NXs6ekw0 +jP1UuN3NI3BASeP9Ahgeq1XDRTjU/YS5iUBFrBEsMydWygSmK/z4X+s/13aVwj/fv6q0X9wittgG +qtlnkKiZXDkp4eG5sxAlYXKVuAi/GqyWu4MX+EtLQXhighftVmU8cHwyk8kBTXor4vElEJ6HYiNt +9pWG9TcPKzuHpS4vPpJmv/b+BeE9OgnnluTu7yY/CL8YZOf4fC95OCF8Vp/K1zcnPc5+hPCVjWyq +DPBfHiVCePG/vucnLt8iTritBEUI/3Gtg1AMappsr3FfvTzh7GOLgBB+g880foUlHvrtYgeaHdMK +ZJgNwm+nunJ2FPHVILzt3KrptQ273Jor2M7fsn5m0bgH4UNEbre76l/tmud4nnIuqPdlgbYevNfL +vSai4+AX9VQrcjws0eC3OtYkMa/jTSRQKsaBzWr41NPMVBRZv+BnYBvlHei5+4IHgASVG6luX/Co +qn/Bo4wtH3zBa28Q15L2gt/Sjp45c7m3k1s86Iqo03mawxCKXXm763h4wWen7Ie2yLwnRo3qSFeI +xgBx6jGxbgeowh1MY3cSTw3tglfnRdR9SS54h4LC68s0Qr6LwitqAp8wMocL/kvypQu+3rEDbkpe +8BJFvyQls9lTz3/HiZmyOLYdg3oi2rDTKfayFzyg9JTQPdAgZHzBv/fVh1+7Cwy+lBXFubUJkofB +d3Iq+oHP4y14/4J/tM0MZEoN7SlLfMGrFm/G/K1APEB9v+BtAY7v5EDksw0GViU8k+YF/yGXX8U9 +L/jAf7wSHWVcUo5fIg/z5E11oy6gveYrbvGqO291fF1aZemCX33IN2h+60tgn7l0dFsXPJBDhSYm +ueDlWmcCESNVuQs+FNWVIRUGuDsfu+DdagtCQeKCl50prXZCsgVPg/89PMPg64YucgFKCz7nm1i2 +4N1CONsnMNlrCx5VeGOjO5j0QnrU8nonwSRrNdyCr9uPliuSvyfO9LECb8GHVzPs3YIHhc6qNVMK +MtvdqEkB5ZhJnIq0prnbgrckT9DKL7fgl+8i6LoF3xp7zlLyGC54L7OpAXZyr5NQOuTaHBpZdcGz +OzwNSl/GBQ+a5MGSMcT6MJiCj5CYlOBJ6LDGZpXsziB4ZnUFLrLxZeSr+kZefnLR5h/YDcMpf/4t +pv+6kU4VjsmLBi6H4DFTdQGshPf6lrUXIYQbfg+IQGvLP2bUMHP3y+jOja57E6VFhceEUXjwxZAO +o8t4/h4ToyqF1OH3xeihAge6UxFQSxnsFTgZvIBHOnCfQMFZa2zmwOuaO4Fb4sbIuCuLK3CwV+8S +KqRA3631juwJjrHV6lcUTuTgb/sTnLfPiSSjLxtDyuhJ+OIqGXBbRhdAqG0mBkcJp0lFcASwC9KW +cMzdWfoZ+5oIjBJOWxUZVe/X0hlukOYlq/RoReCNKVxrHEa75e41DM5kCSeVICoJx1jcYYSDvStN +WhzHOP23Mn81uSg3ELx507wQuYsI4aStP+IBScdSPTXn/CaEYwSsuLm+u2eFwGeQcpqXB/gdVAiH +CK4bssAj121qCEdoMBMDSVU4gDUbCoGClJlKhTMkgE3hgCUnUDjo44RO9rsrjJNaRibHeJjY30p3 +zjzhjErMr4vC0Sv6ldyqUnvqztn0rk6pNe0l+g94pyfQ168PTqfCSHW/Dw4Rgrr/2TLiICBkYzlo +fRiGykgwlcfyjuI1Ryvx1wScxFHE28rL2sG3IXCQ18taQ/bH1ACJgrI7Fc67itVKS/lTGt8/gDsz +fUaBqEMVDqkWuSR0rDHyVDiOM42IZWXM0ulQ4cR7N74HZh4zsoBKztsBPXngmJGS28NmdHEJiZti +6K+mMSPMZBUsF1SOIZzEriCYzbTwgReCl7YWXY0TcKRthUMVTBHOILkdmoqbIgDIK4QDZ6tFlYLs +srx5WXP5PXj47hRG1d7DDehjZLpcXHxkrW+4T0yvareb7RWEA4DRT+Fg1ujwEWpzZOYyKy8fV3le +Z5QgtStFHWaDv3Y4CVRA1hp1Rq/T/oz/BGyHuxl1Lxml9reG08G6ZYsRohuFuBWtyg82m5gz4ibc +jACY+TkBsbHf+Gk48fH3JodvRuKowME1HLALmE4ZMxqqmwZSb0aUa3QjZVhVl+3+5R+v4bS54bf4 +vfpiKjyj0QD/Bc4osTUcVZng9fwtLGCOJkd8MKP/Mk8NxxW0ymsGOmTgil0YwmJweisOu16JKCAq ++2Z06weV3Q7Xm5EG511dBW04nNM5ytTr3UMxznW3yCqvx6mr9Td4Ds7Iw+3dH04yf132CTtYO/KM +QLb3k25Z9Y/WcH68SPVAIXEgQORFKuHmDZ7/VFc4NvThbnprYn9o4VUZDU85vQplm6W4hHwYTNQJ +DpRV8ynwhdG+TK/G36ioemBm+ot8IqMdf3JIoFEAZJz47uiM5VUMO0xkZAzHGzwff004Ib8Rhklp +/+UTJjg+UkJJH1GxAJPR2yHm1w5CeXGymIwAJ1jsP2DpmIzOb6W5e+FXT6C7ZHQGiKiM3sUHldbj +kTJS1NwuZih5Gt7g4KBUjbYcCkt93CllFDd14HbSElqSMvqkqAm2Fsfy2eBcUwtENFWjDc6KJxir +O7PBAau1VxCsyFBG7AHBRQkOjqfB+U7BqGub40mgR+NC9rkAjdeubb+kBgfM1az7F1sOgVBG+Ald +mceWREMbCtSoQ8v4GuEEAxrxk9p7hBMHEdE2rEssI3iqJ6w7FRYjHAw1WmQypLRjGe0LSsaXgDU4 +Z3kMxzLiQa7XJaZoqvsV4WwhrzJhRvoGpWmWl8pZODuNANTMlN48ACutLRzILqWdkF6fw4xAJPsE +OID6pX0so8nbqmSEbTwzg0k4BFfIuko2MUfCgTxjQshxDyF2kXBOb8mBzvE57kEkHH1u5dV7iAPp +IuFgTk48ceEQ4llKnHpSoJ+GXDhxdONywwkAmtS8Ib9rRgb11rtj8z9SQDBiRqwHFk0SAjGw1GZY +TL9wypQRtBe4ijW1BwoCyowZ7WBhuqLGHuGYkedy5JzTEUGnFLBBsyPdF5azXgnHV4J2IDFaHMHY +Q1hEXThO0CKVZbIPhQvn2L3r4HCgMWdRXeVwnq1WYMeM292MKJdMDw5EQRSUMsK5sMhw4OBVqZxB +82Q4o5S034JU4MlwRpuEZHQ4vsca0AZgoJXDgarAwUMcG/NRmTjKJ6Y4dDoUbwnuK3wLck0p2iWD +j1scIwBxMg54cKRtHCxYjU07TohHGac1ApzDA827XqMBkHMQ22QtNjIRwKcm58QrR2iOcggW7Qjf +RsVa3sJXE7JyOtujNH7b0I1G1Vz15cT6Sx5zgHQWGzQHBiXSEgAdM0rEOWCe7sQRHK2N/EQrEGTR +cyZ9PzITgejn/Jrrb27QEVgux37oFFzsiK4N/ElHLmt81APGV+V5vNTR/A2OJ5s6VTpfySgxc3MG +bJWq6MXRetrTz2HvHQAsMJVwwYk6H0JAYGeWP1WGOsYHQ1EHd8dzBPBA1xFOSG9TUxybOcNbKnDp +TNZIk1qdJHwyZB3sr6ZbBzaTcIUcYioeLw0ofUThZAIT6kwrC/5rsnNHAGbPAu5xYVnaAaH7KGKu +QFlAeuXMSPY5aDKBO44lSq/LrW9ZTP9CB0t38qV3WG938PGICnnHhI76/ds7Gld6rZgg5d9LpSZI +dCThDYAHoXEYZAXP9cAJRgJ0KCIpL7YlSAQ9gUUGpI+lndqlDE1IalGjC2nVcVJGwOcOQsCKJ8yX +BCc9hMaDLmFz64iOHs/JMNqBkceYVh0oD5Y9aHmALN9e544JfwZg8xi2G8MYkWpZ0VtfkZ7ct6TB +I1mYgJ7vYOjJKSRfY9Sz91mfJ8fb6FnRk0gbiS27qPjnAvbMem6Lk/J6GICrynqkFE7bDbwz8Qnl +C/VIg+5yKH+kICB0SmwPaY25zT9PiKQbxMsmYBlJTYokmeoqxfJ70CTBM6SdT4IPiaAosSeJORzR +YzUALD5D0sHoU1IPM48EcJH01XXZV0m7vEApwJI02ZG2pbQkeulFiqGPwKvzYvpkBQCVM5gUOaBs +Xh9bLhxQmdQ8wHfEfbB/vseSHPRPYqb3sYnRbadwrqMm4ew4B5OxFIz7TJV/b4VyC690afpMGsvd +vj0ojWXSBANNMceA0dcn/1q5bocsgV+fsg+iTjXMv1JpYxLkK6wxK+pFmDT05sq1H5jQ9O8lUZiN +l0JEBgSh6TMtfupyY0Hppk/uTexIsFjZXpKLmBspULgLnYrok2oN7SVZFk+d+EYhkYSb4SwUx07b +9HFN/sU4Ru646fO/VSN+JXh/PPSS0EEKlssSdGhGRhNO0mIN0YdZc7KbW0Dlm2kBKfdhmDCKUDyi +jzc7jPyCiqD6PVIqtVS6FCRoNqDgLOk+Mp8YWpKYaVJuIHtDUYVylvQykBt3IYckXtz5JO3XQoe0 +2huXK0tHaucM9rmPws4HXJH3pfiPF86SMMjrVgWtZXvn87UkDVqtlpjtfExstabfa5Uilj9Lws+I +7Z4cVl8SnM4HT0CJoQ8mY2umDxCMjZ7a57wDDwkHGIJJ3/jNARe66lMTV6oAgTzrqlh9lCIo/PUx +LTepTPofJ0JN4j4P9NM3vHcjcZ9sd9Iam6gy75mkQfCDUX4e0QMpaNIU95FZt1CCJs09Mn8UO9Ck +NQuspbSr0s19hMyoaCVhAbaAc59o+FMFo2dMmfssj5+YGWf8+5k0zQDK0bnPhBVzH1iKEWpln0l7 +sin0WpCkJ+QSwxLiP+sIT25F0wcCaO8/R15yUJ+d/AiSdFgppdzn5t04Vgnb+EwiOI8uA/PRyT6T +jAoFHv090j7Rl1Qb+HKTNV0mqiyTvq+/7FqOJxZtQMsk4byyN1bvrGZBkfbJndI+SWg80z6qvH69 +E79KcvNQ09cln/aBMJbRu8OetECxTCogLLKrBuhG2kdg+oiTxAo3ifaZeW+l7MLfYXpCTUIcYzEL +fAK1LQVD7U7Ab+Am1hUTtZ3OdJ0ZyDD40ULruAU/EA5+xH6gC+jBz1GYArrmsSq1gd4Gfiz2Lgcf +LacM/Ay2Vq4CP28cPnsB8VAGfsYdtgwXEndNIfCT6M55jQJHgAJ+Eg1dFFnrn7Dg50d/1p6/kH4U +LfXRzWoO6zQqhQ75oyyNk+w0rCZfEAE1seZjEzE2ibkglH85XTtGTcAPmTiQym4gAcCPNnak2bs+ +GcPp6/t5wA+MGjygxj/23+cp1O2jOLX0EZt0+cNJ19n09+VlJLX6+8iF4yZyfbKM1COJUKkmyOq4 +GJINNNFhIEtXuj66LNg4p/G3iEFbtjCHe/eBBNd0pCbFVMi682v8UZP6ngsUzJbR6Q== + + + luq7j3dW19jWz7PNaSOJ+ZRp0B47sfwAZ1GTTpe7ZniyAkRQk77mnDBo99lBulZmfr5tEVCT/Jnp +CEEGgB6D8L/UJLXIqPRzJ0rSrjs1lN9GRvaR5rRvFO4+mBeFGBVACPCD6M1YMuJaONPlGtvzFATw +46ExmPipLwq3qoCWRQn54QuLOGlmdIPOzMxnRpxU4hX3uNFvq+IAYTp18+Ic4sGM/DjzLmHwAclN +nJR7WtpG6mP38o1WF2YU1E5J+fi5r1IhtBZgFeHxI+FUsVwjxBrykyMg4vGDZeyDfwAsYXZf+jXa +QFFkjfUNTvpr+nRIdldihu+4+uTHFR77r4LYXZJMwxIRg5STCoHPLNs4iAgQToLOz3TFgQ5hO8cP +biXJNpgCQDZ+HNNKlmdriPzbUSSeaRhflq43FFtyyOUTsg85MH6SWI2s86WNQ6SXOCnl2GCFaT8D +seyakY3SbDoJP+lnY0BXxl86h+EmV3vUOefMeGqzr8tmksrqCj+t8XPte4jiJI1T30ZmRg5Ajemf +UY3jRyjVtm8jDHn8BEjDz0t9/DC0lCCtqsLt+I8fJLe6vloBOuny5IoO8oOki+24z2DIz6rXKI52 +WpoJESE/tjk7k0Eq9VjbBYgs+B5+Vt8+Xo7fuS45aRtNejdLZ1kbOvwYsg9HHVggnTE9CPv4v6zg +CduBNA4/Sf4sf1IBn1vIT9jBr9hOav7ZrCBPok/Zg7R+zL5a9NkPIrTmDe9HRheXiaBUnJ8yEx7i +zzFxjbgC6VkhEaz+JeWxBApK12qoi7JOm0X3/fBFZqFD6Su7isf3I9liuqDVTV8ElNSCLRsjWSbn ++/n52eNPNB+WwCgoXRT2Krws0tQpe0f2T3zSCSsoCVvZ5QbaVlBaBrtWZBWUPGw7rKMGLiNHyJ+k +cHsxH0imhAvv0x5R8vqHXQGlRL+B18lPivSt68WPtv5V8EmgxiPGo+krg09qFL7yGLYXGhW4J21D +k5mepayqe5Jx4Oc+Kjq9gKYyP+pSRPek4bMBxdMxbJk8Rj+qMkFmdt73Sam8sJcw/w1nzH3SOIN0 +x/Ga5y/sin7EyhB2AqvVQdHck3gTwpxpU5YZc+aHF80CxyXBMj9qtq2n3i8N5UlMWYUzQYwqd1Jb +y0OngawefizA8QNuoMHf007UVyzkTbeksoCMgBt9+EkvxCxBemzzww8zrUB+Tn/bAJh2LMeC/Eim +YO/AnkQN+TmFDMlgk5B4xM6dpBgEfKRk3DIgPxDK6YSmsr8s5KfWYfl9ph0SuiV30p2Rtp/56WVR +2/jvwuNBpZkfQxtgPDIAGoTMKE9KACD7EEOEvHERsJ9k3aEQ8rP9sBceuRFFcaQqmTvJ3RP03sad +NLZ9mgNo2YQrID8b/Siw0fFG5wAeWB3o1ODt6RiOiYP8VDOVFUswUoT8lL8a1rrVUXPeTIL8DF5j +mTYYvT9+xP21wMhYPYvHD69hp+0O+W1yq8HD8hnk539AFtpSsRU+3UlsboLkXUMO+cGh6IMMW+uK +3eNns4SNlxkZOeD++JFXtplMotxJ+1qSQTi3PX7aO7Dus/D4Ab4ChYEHu8adhOtowz48q09A7n38 +kC40/yXdSQfhZVsYes4gPzqEp9wQq8v8a7qT2HuawvnSKh4/ITGBWKbPdz1+8ND26bHF1p10/8Vu +VU2Ed36D7iQw4otoFgAMUIBvd9I/nbHSHz/aeu18fndSYqXUX0sRwPpCjjqJylnINupcfl3gFn6u +ulqvIDbxkJg66U2vyDunjcxyEvqAbt9HTRKEk0p54GFEw2VyNTfJCkZWLMwxqPZxvQDhpP0gR+T7 +pDco/PSiu0itc/LshZ+TRILHRUxS+HEOSivJ8INNqgM/TZPvOfz8rcAAtTd6+PBzw6tGNBmSJeKt +k6AdalVuNLh3fQ8/SQ6Wx5aYxmXg8BOcvoGabnJdDocfgNA0NQmSU9M66elTJ3eAxE82sZt/0WJR +10msUKjWyYEtzHWSABoPOMyx9ToJMnC5taj+JhE/V07d9ft4plLix8Ruia6TOCp24Enrq5LiafZs +wsgPzNz7R7cU108F30mlBJUBkA2886X4TjprsjO9ihxTv5OQNERZGyZ+ZnzOncXET4LXwQ1tz55V +tTDipwJGjVHVcl8hfr4M08eKikURP1NJa7tCQvyoZafZiB8nj/TgLHeYoIv4Ia+D4FAPZ2g+FPFD +GM1R5LBWrh7xk6UtzVF5QJ1QJ4EabXR/IDmpk1CMm7Kjw5KtAcQPpP+Fr4OmaDppd6TzdhOzn04y +EBxDpv1oQdgSP/YM1NFUMKtHdOIHxNsiPz/8a37Km7588LKpPTFAVpE6GvM8ySwK2nLiOGDzE+Dh +yJeOxnFnzo9wvsMj+h4/zpOaZItfO6r1KGr979djHAHsedLpvd8mgsM676RpZ/KV5ptgeJ7N7cnq +JL2gvt2j3wKgEAh+wFWeF78YhmrVSXKZTiaxCg6CnyKshHnqJOR5RB74OhnEkiAFP29T0elq6KaT +KP5FhqxH+ROmkygcFqh0t7PppJVe2a86XOHRW5EJcUsuqJv5iimp0GRIPHzfkQE/2doF16GwiZdM +m8nnFC2RSsOlAT8/0hy8dviHbWS0CiqBAuCn77EVpSJ04qfg7UjuevEdKLjT39xXwfjRpvTfJViW +QHX+ToJCrLYtgbukufxfYMZP56JpWcRlqxqQd9JBGuoaHzLZ7eLn1h7YhJZ3kswU8YYuf6J3ElPz +yMQ7dnq64sd59vxDFlf84HidYAsBJuzED8gQanKSd8VPBQ7YVbSejq/4cZNT7Cz5PvlJnoM63cU9 +pjoFb4J6mTL5CcS8yXotbjRa23nSa390KtiS04ee5MAuKfGITxgpxicVPyz0ukZcpvzAu68tBTSd +zwIcPYki+AZ/XAvUlDPKz2aZtYi0ol5PP/Skq7cPao+WBB/oSbzIZm9PHT8T2nfSSisnHuXH6Eav +dn5CGRJxph/qc/SYUjW/fh6SDO7C/RjsSsWFP/4sff/h8gdsUX9Mcn/0xKjvhQstzAoU3z9up4I3 +mpR6gqN+Mt+S7Fqi/aUUCf2hT4Dop1N1gABNQJo1aVwYkFqTqEVzQD71Kn8p7L/QsPxU6iO6DHC9 +9nSury4Qnhp2oxkIbQXQ+BsIHDukr8HvLpvgDASxidSBGAxlsjAwV2IDh1jn/OuiPRzhlaIgBRF6 +eJcBS5MkknzpMSzLtL9C3cRSVB0AxLHkuEAMt9WHDPIRVAL/1H/+aEe6LAGenOoHOlMcJGC6FhQH +CYSMdXUQe270uvMg08AjriBqSbemU4ZyLOWWUlo6JENHG7Q096tINP3WkejjoHtMSkuwTC1J3Q2M +9oMa8nnoDIPQwnpbqsRbCsaYfSNwieMyDmsl5AGc9uQSXns0Q3ZCqfR1aksUitYl0JHB+267bJea +mDzxu/Svy+XfweN8oSqhhWhJG0DGhTjTYLhTL8ScT1kGQ94IMxbGEHWtU4l+6QUt+cz+pcukploG +TIK2XmTbT1DJDWUKSmeJcOhTZOIth6RcpiXqkLwQxmOHqUoNePEOUrKK4rMQrbTsMFWMcq3CWjrC +wMCrO3+OZ4c6TAVUJUk/wIqILVY/vJZWw9C6IWoME7wCYvKaNZIQw2QMTIPOPWyQZm45NK1Itv9d +pTbxLDSdjUDyNwWPU71/HFBRr2aMcOiOEFvx98E0ZM7IQdkvKcFhHvIFDA4FycBiZcohWbzsO8b0 +cTCbO2QJGBK/rYeYMlThXrC1yD2EV0cUuw8B/ZriAKDeqzLECCJlJpNrEcdUBh6m0lYxgN9Lmv1/ +Php+MPFSS6IBpUrDUL9oRNx0j2gNRiLdu97GJ5F6Q8n1XCYBJ81HmImE4eBvNVE8C6J4TkTOsaVP +PpFEDUVp+Ub/o2hae7H5BC6RMGeFrZsbI0AimpmIg6rI9qYnHEUTuFKCntHIzCuiEjgoFmFseY9V +L03F7652aaJNPbChtYhywzb9FsUjLh7QRcejRlRSXqRjXyTzKGdRfieCkWoT7+8NIz9KGaJbjJyd +VBuwie35BcrT0QrGU5UAtVGxkk2fa8gdImfEG/ItpE0tNM+NS6WLtWna6+Dw2qblXEmW6aaCaJtq +tOgH/J+3Olg7GKmHAe28RiH8nuh/Y28Tj4kFCZiCA68e623C+5khzOeA04nLidfI1IiB53qiRK9R +Or+O5lM1chnxvdUlqct5E2mHEWQwzIzz0jYZ23d7JtX5hLbpbIi17r9Wisdqk0BgHnGOK40q2m93 +353rrjZNBvaeu/zwEm1at6ctwma3lGhTzcyZJuVQQxw0uuKM0prC7QrjQSMHb/NUHqKPg5CCRisg +TIjWsQtZwLErFkkLok20C1Ss9XXIok10CAsk40x5grtuQaMOD2gW0ZGIQKMGeYFeVJvOzVRmqi78 +ZpsY4bCf3snZpleguGWN0mKiqi1uioEO4Tk3mQDAO2pu+k8cU6EbaUYPMYE3aQTJIz5C6U10csmM +fvXKN5WYZ8LVhHQyZX2hI8dBrl2DU1aB2F52lF0hid0d0WQJGE48irbPiGCcQvbMgViPfvJ4lZOQ +0/UsOYW0ngd+FKNyyhjm49Qf7eYW6/43mzycTVfvzMQbZJybdkFQPpvyY2ZO5V/xb444lhgg2VHV +Qk+ob0H0Zk6WuVCpOuXh71LmJPwhS/jva3/UU+vXEDIz/pG1dSvEJui3+UfE+tCGD9gGIpUGW0Pk +vaLs5eYfqSmm7XXKJFYB/SMUGTVpf85k/KN+56Yea5GCyj9Sj65104B/9PVAiD8inRIde50Dsas7 +ID/7mfKjHMoxHFHuj4CAkm7YXnbFBCToMZTRosPu8YKWP+uaV2bmlKcfYYRRRAO7Yn+U7KIIaU4V +zP5oQKh3mGp/ZA9AGULDiBumPzHRdzlhd5DAs4Fko/0R3HJUJSDl027+0VgNpAjdo498EwOxgVSS +RwwHUYn6BtKdYR2nL6Q0AuaDm1+DKSV5/RgBybIsqw0kUHZ1Ii3M/kRAaj0ll2xOz2Dfr3xTKvQC +knTZ0GolsVKO9qPO5rTAZJMVV2+IUoxdcwoI7a9aEPS05kQZOIhv/zP7WHPS4PNmk/YJIAFJwmlC +q1IbBSSEh8hINg3cL54C0jQFSedk5M6SBJ1TZNPo7vrGwQ8iHEA6J3GNDp6j4v2ezony6BfvAyVd +MpD2ZUXIqiBxLqStrAMUFSTvJ7rgZYCi+pwucpn1ZQRoyzAUJL5KzU6/PjG8lwAyQbLrSUKyF2KC +JIHCMD655QsyfE5g8SMSJl0NcM9puV6hgFDVcZB2Z7+EdIwMilg6UV61sIRYOvnLvytf0m6qpVMC +5AvvMwj5cSHRIDikjpJYQtLQ6VjBTjAyGtnSKYMjVXw6AeT8rYp6JeMLqZoloixmEhGzgToxzkzb +oHmEPajTV0TvJCP3pYqwjCEAdfIUJNLl/fRH86BOBzkGArKETKc2l05za39qBuiTXg== + + + OkWQGIqkQG5CqvQzyqhEP7yw5KXTDBlDjXJbEUxIMHhpkQaOjKjMNa9f6RQNCVJJKUs8grQmpKpS +bqZm+4C+WiYk6PITlVk8iVY6qea3SjX+Uy8HCa923xheStel3waJ8YaVThIaLvUqQG+Tcac8dxNA +KJLDSkKy5SS0vRLoPgktnY5hq74VHWMhIRUEivOrT0XycSMh2aQpk6lkSUeY7cRDZrk1oK/dBimt +ySEgtHQCEmst/YCvBNAsnZIcB2u1geP0QFQlMgcJcd0zIgY5hoMEiIlKciOOWtDifcwgrxyk0H/p +kewzjiqrIVKQ0FzavdLpx70Q3KUUisVBOi86hXsVQOT4StwNEhqCNsTB0JTJ0fG4yLfwruW2nQwJ +B9zsnscWFp0IujGzJJIxdfVnF50wMJCswTWCLDo5Ao/nvpD5mQgSN3VQxEUnsOhlZdThNEEaPWDp +NCARJeiDG6IFsUHSSevvKo7rdbJwgyTbWbh4hy5Uj9OszsvUbZBsMEEV3Mnri/SBC1Rso4NLtxjr +tKGmR0LdGzcSUl4A8RaS93OJNiSInwJL1+kynh5W0tYeFMjkiTeLIr2Wmu7UIiEg9gC4Tur6MmdL +KXgk+3Ukg6SjeMVgJMGQvz88KUSKFXuSYi4m0EKvCXkCYo+V9T/KSkJ6ymotyRBHIUi+JFuDpsSY +hIm1B/FMogp/eCJXTzUgFbsmnDRfJ80AnKQnQSI+oJ/0hZTCOHAdKUcZjk8UxwIRRml1lFhDdO8d +9KlZkEID6o4CKf33+Ar1iTj+AzP2qZPODg53SnvYlxCikhEDLMq6KWoamauf4qKUxPuJdMmTkZpp +h80UAj5KfjH8fN5Pws3JDVnemHU/4SqASZ4uIB7vJwGCdkD6I0JXyS6fYV2mg5P/XaVWvZWlPNSy +RV0lMMgGTrPwdpVU/H2NeiDRVaKQKHWrl6Vrr1L1VBVjysHaOUJdV8BgsUhE81b+3Lon/SAlqOqO +nq1SrwRXeD9YOhcysFPCOznKp8U8XJmN7z4a0k0lm9AE4RVP75eg3awQM5YAA4pY4CWF45CMpYwb +1W2zlJmel1mA8kb0hW9I3f5eLCVTVqDnh7UcuFhS2jj6LHYBSqXBMOMXPxeghuGnRC6ZFIC+qy2W +DBfUAGN3AckRFkuhxchcQy7qRLFULeepuAB8KZaMRVQWS2C5LQ1QK8lRUu69kR2gLgAzzYVr9w++ +YqE9igLLTP5NG40GS6EvBEveNzgrUAvTgUYQ+YyoN1I4Ms89yhriwEp/2ajE7ppKQqUdfckypADq +QX6PD1B0vJfwnS5WQgmjPeTLqcqPGwMlSadfp8Wv5K/ELJrOTgIoJ3XNic9CIYx/JWDFkxK4a5WF +v9JBL79lMOn4r+RVD0n0fqW2L3oQwDgAZb/mk5CDDJcJQC2kYmSDrdJjGzFYjzHWSXJThmyaI5vp +Y7KKpl8JacPblnmippm0BEgIpS2JcPN0VwLNEv/diKxcJS5C9NgCCIeluySK+kq+5GbZT/ju1YlK +5mQ0DpQy7cv64jR5vAxcCUiQzMy3T8+DlmrIR9NvYFBvszI7YfF33lclDjtXR3m1Kl3ScZBixiCX +EX5aQbTHt588Izkopi3e6dyqhAkBNfShXUWr0rTjpI5GEMa3zvZTYnHXnxaGES2STSWhUUQft2cX +eP90ptc2lfpG6yB1K0uoqZQA4SduEjxcCEnGwJnO0SHMEtwTynFVqTyC/kZIMV9Vil846NwgkLb9 +ZOKig3CTt+MGU0x/QgK5KOqpUgmYpIMcQ/AwVap/pVqSP1FMq2VZyfCV0q0E17x17hkJXvQvBGDJ +mPVxsYol1gHPAgNq6yFU5SzxgH1DLC0t5JjkupZURJ3igcLxcW8QabEHKCK8JBePXDK+glq2BTWA +iFIFCnxsdNolUHv5O4yX4NNVU/ZSYLhbqL7EvnQp6i9pduKyDUz9YNI7rgJtJHC4k8rLL0NMm8/n +UlVMP+IR9zLq4+UxPeOkel/qE2oAkz125BZp9IcqPDC2sOcKFUck2FVyhSCSIgsVObjGFrAMNRAd +qWeOlsdrQynHKUSLTI1QTPmQokrsHVRkipPgsErNyPSWMq9iMi7Yqxf2MzJB9lh2q+0u/DAyDaYB +TO1lChgIJhoLNQ6nPBZFpgpvMCp0dHdERSZfHw0MiYPoPgwDQTOJefkZpnvu6NEIOTMyWcdl1LsR ++fFEtJHtLoRAomzngSVgY+Qjk4mSZSRhQpXb4wGUYUNTYoZqc4LpEASgBup3ZGK3d+kiRDkyxQv2 +DHDGDLULOKOi9LouoscUWaT0Sohz4d1NN/6m5ssw1OTaBUrYunEIQTlVKLSrQP0pLPMf7OwhtqIx +kccni9FAbYKH/y44vJKem0yBA5MKwA6bmTwCmaEqqNf27Z9B7IbnWGY1bo8p23IhhGyl7DHVLYQ5 +6NtVtiAHujH2jc8wSQl9QyqlDrKSKD985EaEJvU87TFdkjU1jUyy1bB1lC6hMVPghHupgIUairNj +MyBPx+PCyPS2cY2ZtGMAq49MFmcSzVKhmf2rvKoBNuSaUbIcR+nBecdnb+o9EWRSutOiZYpEg4AH +KdnnDXXPXCxwLbPCgUeZ7mil8TRi93VDWZhVt7kW7OzvCVEmNquD3en5ADtnSx/MxkzwytMB6jAi +lWPgHJZOBj2EpWYCZE+PAmU5Jp3EnTcUFvVTR4sIJ/+kTB1q46LFS1QNWAGPZbNYO8y3BbkWMMix +hd5Qf800C/Jt5bVNCFP/ucEtJtK2H4x2GqlaOgC2b6jFxVcalryenrpSpjzpOEIfs8oiHtkAaK81 +JiltTDUdJk5fEp+Fv7GOc4C7yWc4a6jBMlefVCzP5hMAJ0L2GU8CR5X+mDdO0ImCrh4YU/5REn2B +EOCxJf+VZPo2gfqcPLyRJM8xbP2y/PI6LNB2Q6RBTjzA5M64VdqZXaphNUky0cWnoUh4NR9WQDAN +JdbOcedC+R5ipcYdiNpgMRmaiZhQCiZbXgoePnV82gHmMyfI97uh6tqQPM8Kg0p1Q71Y5qU/V36w +gMZMWcLEmFcn+x4wHGqovy5PoyXOJBOGhadMgMdts931fOINtUzGXPUHnEZe+j0LmEfUA1SCOmXy +Peab802x5w01FColhkwmBi2BdjLOXl9DCT2wa361k2dhFXCE6ohPTWMKR/5DCtQajDbfa6Ds/h8y +2TsiC6JF0FmyE5dpSi8iBTbKtIdMihpdPGTiuodM3LaFnteQiU/mj9oLLxNLKZ4MVZDZqqHmo637 +P2TCHEfUCRGZ+m3W7ogXSjp4TRig+a3GfE0mxzo/zUwQQw0bbdwCq6F3PYCZhnqUnajuNu0HYsJ+ +Q8nru1oqjm0zkHwT1cmIP6ljM8ikIVIEl4JMG45b/MeZVAaZtqbl9akkMkHujtBPYyBAEplcLHwE +WEzRNM1vRKbwhRyhsWVHKsxQJniV6lHZZTG6ejrpDQWfLRTnULDjzZPp4sG8TC1mpgHO2psJ4EcY +4ZkAcbp0GeA3aeYI027QTJqyPJkYTtNLnNlSEwBH5Gqi8RTK/tb0ELuqSlEzYRAEWRqYkpqYU0q9 +n1yX20RG+SK43NSBioizdFGR1omDvigsFzCTWsOoHJ1v9JuIwIQWnIB9vMkI2G5exv89o3rH1aYY +xQiAgLXxJt/n4eHGCUd1zsms6SF26Qa2Wi+dIrQ4iiiqU9uu0/DBcFVodoqht9NwDY14pwwBVcE0 +RYKleXiw/mdEanFCKshTl3JIfS9n+CTNE9EsJKMnAaVSlJAJk+CXJfNgx6SC1FYfpY/nfn2c9dRi +CyApocq9xCtQ3ka9ejLxVwZ1uv+Qa6ReGyWVQ7bWSIXWeHoRE+gr0RPn4hlVW5pvwSJlFl93qjuL +VFk4J0Qkdy/Gs7tkMwgI3aMnE5beSIm8P7RPrW2S68k+n5z6ZT3VrRbpE1pP7EWn5+20qJOaVuuJ +hOCfo2WcjtSnKAqG8gqQIU+QkRqWpl3X6fQE/V6OVNnOo9sYvOdIkf9JS2OwtISkjmeES61K2RD3 +dAFaI67lRwD3RDemW9rbr2TuKU3fsVIuVAuKe1rc+JIesnGAe4LGkCg7gavhnq5UgBfFlVW9DPcE +nvDjwEFcYIWkHmblnKIGu1UhKQlkrcEn08ODaEmF/urdUPAJgdmI6v0jT2W0B5/0Zn7xESd0DFhA +fGD1dcFKCgig/NLvHqpPWVh2vfeJbrk4zU+Soo59NGDeavlIpYg1zsZD8FMxghRgAfXaL6URg6dU +ObX0OlAB8H5kRmFsgor6nEinF5Q/RlNbWIql5aHjlmXkNMDBQa1vLRWVlQjxUwm2lgp3TuIL31Js +lhF5qVBwewzFWg6lo/xYFGWlMxmKHt8jS4YpWfxpPjvRw4mq4fr8MTV8PLCOiwmLMplIojNTl1Wu +i3mmMH9u3v9NlTGjyiflk9o0JV9JVV9N8ZEnIIBNBUA5u/a0KejEsEl3+QskoTn6KDEb7w5AatLG +WTznSGEXSVEGUiCN+8CQ0to7XJECDiz5OfWGxjRspaSglBnOQShSeP5RnuEUXTZoPzwF+PZpT98i +dGXyqVJZzARLnMvZlXpJCMV8s5Q5emZM1m86+S2lrEbB508ZTKVa8u1qAlOeupFUTIngZyKmoMLy +GLCyd4xb1sDSVFrinOm/piTWkMLpcGrjUWxqosLb9GVZOWYcHyuqWZ5C+256Uu/O7p26tUq9wpLz +lCx8anfJoTDkpyLwNVkWpAohqMsBqo2yq8UFGVNBVQGFmxMqLbYBFvHOPxK/fVwRgupb9Dv+f+Gc +CtODNp0Fw3BR+fSvrMqYRPlFJfik+EHpsunuQLiw8ShLh4Fv4DIEYFSShxYRQAdf+GG9YVRcqYju +PLmgJQ1GVR1gwUeV1jkxKtxo3XGr1WJUKsrghGl1FTDlHhUjRqWmD5cXggfk/K+TH0i2OoBjVE7D +ZG7G3HxjVFXZ5zxSAKq/e0Egb7ICCFYYlbMXTVgFSCrdYEdxE4yKob/jT6zSeVY0tow5K94QkoPN +1bFHE4DZJ8/AqA7JXmvfeQnkcPfy9jsGo2okH96xsedX8wSxJckkGMKonCI39GJwqzyUTiWEK5dA +nxzQTyEBGYkjmeKBUR38xYpRQbU/GdVRwn+R22RaOOPNqBZNaVQvIzV/NRJVAYvhVdVFDG4B2NOo +kCL59dDnxgcXGtXdNqM6AoVkFKS8E8/NqBJWNfNiMyE8gjUAn6SnubujqD3PqMD3ndCoMHGlRoVz +LBUh/gDPeaAN4hdQgmSjYsBbq4QlHpYnAFTySNNN4EihYydP/6BWeMkflZqs328wLiqil/iaB5bf +pIsxP6oCd2DAAGGb1o/quXRE4FRIS7maZVi/TDxViAwRlagumW5VnvTXPyqMP01eO/RC2HpUuRZN +6euBAX/BbKlHZWIkdGD4oHKP6vp+E2lKOtVNAg7cGhVJPSr88HDQso/Wrt3lQLc9Kg== + + + 8iILPx2iPKqA9czQuZVNUjHpSIH7OSg4EpHDXYChRNwhj2pjsD+MjNx2shy88mVgkGxT8P1QWeKC +LB4oaGKnEZW635fK+AjV4CXLA1d6aK30qCA5NPgVaFGtlR/w1mEBeskhThkrMTK98tVfDgrlRGDJ +vdIeFdCwalGBJJTCrTTYGXw9KgimOQMp8XTSo/prUJXuB4KTV/ao6rwOXRoNxUmPitfh46B2r6B7 +VOjjklXxqPzlmkZZelRd/HILvUGK0CL5UBLRFnCGgPiFyR6V10+QDw+iYCEwN8+D4/LLFitV8NdL +elThefRFKksjmHlXj0pjAbuyYNxW9Kiq6slRRkF1GL/drEdVupQ21fWEFBoxJAGk5QpJjwqB4Wcd +/ubWw0GoCVimR+VNg7D9U0olSo2c76ZHAPJWZT0qBFGJpdzco2J5pKixBNGIrUcFsy7MHICwSyQT +9Vr5yrdgReGDncl7VGBPDFANJNw4AH6K+EN7jYNo2MfTOi7iELdePapndE4OoYqukU6lQa7XC+Bd +UfjvUeExWDJgZL9LOv0QY1z/EcWMKkTlTBJCGqEQEp2gUiHXSPSupT5L4VElIXdLWo4zV+aQkTuI +iUfVPEFXym4mfPEYj8o5b4PYUekQVX9BjOYSY0dViT7hf8BtRwUyMna0clRjhcwPMh1KIQelz4VK +gkpeqEB1dFRNWjUSbTLnOSoSZODU0eXfX48QRxUrR2oO51ZFDkxWACTRU9JpHJWdrYbG56gI7iOD +ggTGvolOA7Y5qkOLcrYCoZOKiBE7JL5XjkRllLOb7cHyP+t8jsqOunCPclR1FAVIGeOoepNMASEs +IHFUCCDTwY6wlwiOaiHmwrLLpENrn6Pa6fENmhzVja+KINMNgHrTLZCjOkJ2XmmO6n261ht9Neao +WrtU4qhgrYZOOSBrt5O95vaSr00Aq/D0RvUJ6Uxlr7tRaU29cr70zX7p5Djwhx1qNTJZLLLedaN6 +52NVMoZmEVe8Ubltp3Fd00mRH+7Dlmoxk4CVEzeqY0w22JgsZfAbFTRPp2jeIc9vVBVX25JmW8P7 +RnWn5CNtFN3iqDoajOSlrCQFIRYq0diJJhZP3+Oo2jFG4R318DgqhPxem2IZiOCodqeutSAOvRVH +Fbpos8xi+TQVA1XgqPxLaW5UMJdjG5Ur/rqfXXZGssA+VeM1gZOcqvyhnkmTVFwUnec3s1Hl2CHV +vFcWFIQ34PXvZLZRkUxfYf2y4YmUjUqYn/zmmCiivDB26ctiEt0rUN1I9bRZXE+uAaKkwFFp6n8c +U4qtjTLhmH5MHNWLS8QRVFkJR+WdlrcbFabt5KLp/EZ1TBGJNkFK8UZlc0QEWPaqyx3YqGBtBkoA +1PGpCJhFPgFUlIo1pdBG5Q7smO7Iy+EACZdqytRG9TbLeJ+HqVH1Q+ayltYyh51GNWGEQtjoS6MC +wgiNsaD7utj61PpNoyopwMFQTdZ41Y1oVGEGxBrVdECYrRDYtYRGlfEBRKNa/7SB41cEIMPONF+6 +9zRnEMacUUH46Urd4GRNuX7WUxF5ioZs4/7RqKxQr0EYHYP0nrXFXY2qFVUTGMac5sjDlmrW8lRv +WR+8aquEJxUb4/eXs963Q3dQozpLukijAq3Qz6hMSgjdCVVn+BVLkPNc8Hi8zVddS9HZ8u6oDO4o +pp5CNvn3+2c6KXiEe4J/fQVfRoUVn9EcyJwho3r8Opfw2JG8V5cQyo1xUMuQURl1Ao50ux0Z1SRq +nDed0W5uV0YVXpZdBOaKzyb8a/obzzIqo4oJu4xch2BVGRU+ToN+8qJNFg5BiZFRQUz3xyT+l1DL +qJC61IZ2cZtlcDKqDwXNajfjAplg4qfXp24hWYVGZNyvyqiuUy25+BHIqLg8FGZUTpBJGtW5O2y6 +XqNqsZUol/MlolG5MzLT6l/wSBoVzgHqOcsxo0oLWFEfVd2PEcgqp2ZUIGMf8W5CqvZy+2dU9DWc +q4rzp3pLqnK831AN3jW5T40KzsMls8jiwJ641VKjwohTny3ZQ4/TCUpl5i+1NKo/RErtlnBG1blS +nDGjSl9gigFbQT+qAaI8uB25xW56fJU9owKC0RCeBaSMygecZOiAdElGddoPrIvBcs4NHAYnf7EI +sTbS94Cst4wqw6JM9q+aBpFpy6gI+gRAuVS22YXgGRXIgJ8UepYE7cHqGZV/2dkSSU6z4HZGRV4D +F7xJ45och4plnmmid4RkupFEp36dlpVRwepdx8ALBELzk7cXRn2+d5dRrWn7GwFv6SuLUf0Bms5X +oLl5JxR9RSNGhfcGry1TjOp+OYqtHog7rfT0LVLuLZzMvbL1YlQuAyKawCp+33BjcKaLx4NG0kpS +I/djVH/bIzLo3Hwu4LemdjzwoDVGxRIEue0vnAaPS+spa/fHVYxK2wyz6GNU3VYfEsLkmQ8Lw9Xf +bGItqy0RowIRw+4zSH5mwaj4ayzbe6V+b24PVGKa1XMsw6hAe2u202ISss/gdW7POqe2Z41gmJSw +nhZ8sXyqxv2il1Yqwbl+gXs0c7GzhFGFoNomv/K0FxXg9wDyg7PLMr+opBY9lK1dE8v7RFDUupFy +QEWkiiLgi8oN67qxjjGFNi8qxdKXl2cvKiBM7ws4RKJsLyqTgQpWmsuBUTHZnTKdiBNwL+aUiYFR +Ac4V52vu0t1sni+af/OsC7dSBVfxtB4+IgEai5TKxVQdWduoLIwdeiqQBW67kMTIvEtOIsRUsuAZ +wy/AYVRt+vWDDp8Al8KozrDOKDoYVZOW8x9raBeMapgcp8FuKruzwqgw1ndy5rogEEaFW2RepWBU +gZuCUg7b576o+jUYMFU+vaJfL6rF0tVc9OWroohMcQlS5RcVFNpIN+yF44L+ouLi5GF/GCAxJc53 +YEyH1O5wgVHpH49r0nnvQE9tnepn1yDG5JuK4WrudUHAXg7VoP8MRmWsiJhD0j2MUkIYFdimAsIQ +Au0bVYsqTGBUdS6jdEkZLfFXs/ulXWBUabZe5Dge42o/gaGPjh5G5V/+gqbrXvRcHIXOtiMTRtVK +HMbXbUiM6qNQo3iljHiDKoKhHm7gRuJlt8WoaPwSymaM6vCfFKnK8NwBxqjAvtsw+BajchT/dhFk +FiuDyxiVjrCGxajs+ivQ3BJDktxtRtVMJ/y9zrBFrJtRdRcTLTanZcafZlRIQKaiZg5smvb2CBit +yasUBWU0qpjtHYXzdmNqn0yjGpbPYxHusRhcVeIajQr9CoRyeQcdlbQr8mzYGOvi1uekUcHYz7ih +ua1eAjSqOD4WT7WXChrV+mQCMAQ7kE1NH+HkNKoo+OEvukZ1JdxHTA6TjtaoLpbqx0TN25CZ8hqV +lPS9qnWtUWHxqYdCVPpSXBzcIon/0XOoVqcwwX3ANaojmawjNSrSGvOfr5Q1KrI3SH4UMYHqEKJR +mVn5EGhUUASU3nwVdhqVlpg/Huo0gcsJySkBhmlUnGp/wwH+pkjZsjUq122Y13Mu0mFSeRJgIPjR +S/arUaF1PiQpBpWZEjika6OScZXVW2Fip43qs4lWa8EDVXBoqUC+ocE4aKOStbrUG6CN2m1UHe7h +lhYB6RqVr3hnH2tUysM9qsfm6undCuMjwEf4gxo7uxewUeHdlIbSc3FvVEqVoqbVkpge8LlQHFUJ +kJAfgcoMBSqrI4gusUnogxXU/jiO6iyFVItwVOWMl2kH9vEO/OnYjwny/m9dk47u4Pyr2aWQATUU +R4Ug1OJX6trD/XWvytG5BNq3LbSu+ovzEjOCKFU/RyUf1QKAvSqRjspxz5c/QWYrtng+RFOEwHtA +ooZUACnrHisL1kMqeIxIVVoZIRYmFxU0tr6tuMTanEhFj+ovRcC2ZomeVKrbqidpfStc6snFdqLy +9516o1q8k13pHnZh7TD2smyAe465jkj1M5mF3mUilZXSg2X4HUSq0NipyUwEaOWGWPwQJ+aoeeNR +MGnBdgJ03qTiD9VqP0MYIBGqQaQK+dNeSH1EsbyRSibi9jpIUy0lUiXJbeFvQKRaI2Eu5rQnIlJd +qdeKUc3MhWspfhVzpChpNVI1BLTK3+BQwJfRSMWGxLkuWXfGzB+pXrWCukc0mZwBxH4LeVDZqRuH +xzzI/mxQtueR6mAbqls6q7mIQkZFIfX5jlQ+2zieEAL7F2A0Ur1Dw5SpTCNVxdYnGzMQhjlSw2Qj +VY8XrjT/yHfb20h1NvF/2wW4XXCRjFSMFCO2dr4xQmF2Yw//l2U8IeNIdRH/3qFU1JHqaALkWcKM +ckjJF4t4SzlKnVSC7HiyIUE/deSkch311CfvnJR1oR9+nVSU5lQhOlpNf8F9/Ul1dmQYXAJayWBe +7ifVDZ2GSPqZAHxShXQpou7gkCh55tPsSXWpZPNix/mDiC21KVPzoiOfJxUBUGXwmil6wsAnFeVL +/FpbZdLKPv+kcuwVgM7HpmSfVJZZRdSi4Teq7p9UNmRDlrc/qdqIMlgd4/eTaleuqkq0oRqwnqhA +PakKYBCuWZJnwWw/qayPp81Z655U1Hp9zgMQKU8qoLbuc5YJmnAjEP6kksdq6EydtXYI/UnF5vFV +si/dLWcQn1QzKh/v+6RqI2pjjTPglnruSfXUJOUp0G/xPakqwb7bsnS4/KS6vE8igez3pAqnFTjd +80nVXOzrSyNFTWoflEpPfGoX0+KVKECpTNKSPU55bq9BqerGDDVr+tYRStVIYPEYFCbWsFCqypFL +5lc1y1AqbJLztCuL8RplR6nUWU45VdVso3SPUtkCEAHXN2kdSjWhCiM77ZEp0IBSHeN0PZYdB3fT +oVTSp/BVrRVSwdZLtmmoyVvHp6BUzRi3qyeUBkGpvvMo3FEq1Ue1YxLxkjBqUSrrZWnBnhBXg2uI +UhX+Q8SF5Ird5/WZHqJUebXbOhktlh0nSuVSZKbWej2Bo1TwaCUklMF3oFRKFWdIT2UWNjmZu5b/ +t3d3msywUqpeE4UWDGd9uyMFo/pm8Y99gqMqZXsbvMmwHC0hpQr69voppXqh3OPNCOlVKdXxlA+W +PPYrpcKYAQ6lVOfd52ANXQytO+jsM1XZn7tHKZUVrPbwEFa6RSSlkoCZc/hDGRRLk1Jl97mNfz2H +WdspkIiUascZVvq4q0ap4PDvU18oNg3tolQZotqE6EEbR6nSD9BKAcfUolR0JHeY2OjKRqmW/FXy +AP6jN6NUZUq3uc62lKqP2zDdM0i4SalAng3XGSlRqqLfTMwXYSdKBfv4c7xYShVvwO2cFqXCWoTH +dCtB6WvW/pOvWJTqJlMxjk0nfZQqaXeT6W7uLKXSjMdL6ZNS4d5W3vqpNV+9o1R1Get9iVKVUUN5 +agTMlJ9UFEtcoswn1T2HVgJb9Uz0e1JFihCLpSK1KOOTKgCU2qPc+ps9qbAm8K9ilIwAGOpcGTth +LPdAonszq3tIpKbeBflguu+kuhuSkIRsnVQQqcbYyeTb0MRJ5anR45YnFfMlkAl8ag== + + + WTypWHfn2rfu1hORT6rR/XKRi26bqjg+qfhybzh2t5U9qS4uQ08+oAkX60mVtwNUN5o6qa4e4Q71 +MWOb3cToN/JMk6ofO2Rpxkpl/OfqbgRFGFB5Wqm0eJqcsVI1nrjcmYCqSuUzjcZYpFLtoWNH0qX3 +8tngGu81qVSQLFhC/yL4pmkVVKoogZeUijrWCQI7ygxLtSMYaNOw/3LrEYHTMF/AcSxtlswRCQ9+ +3//Hz2ml6u+fCEOALCtVtM+bcKEplpUqnwEMJgCN6eCWcLiVysdMioFVxfAc0p+j0twx8IE/YW5V +f3ZQPNLD0WwXKSsVBX3ismoNqYiVyirIMI2uUiHX7g32MESaFK1UIRFkkVfQ7YfJyi5j3Uplm1H6 +f3IoG6CHvVIx8mEN9s/dKxUJpNiNbBpyrpWKJXVLh2KJqns1k8srVeF5ApszqGU3ljYC90i2dtj0 +7SuVyRXhStK+XKn0FjCIN/X0lSqAdhxosUIsZJRXKl7Wi2ZmeKWqNPHRIYTrABZXKgewEiM3UGiL +75Uq0L6TM3MGosjtlYpxNdOgTxdrBwO8/o5rf+4Sr/pXKi3hbhKfK9VeqeYebOohUjLelSpQz6zk +7TOqfeRKpWYzHFV9peL7+lFPaM2MB99XquahUWMJcJ0S3uJKFaePXYGQcgSwVBi1pYH47KKxVDEO +Acbm01rmYKnY5kerIRlgqYI0FZflhyMRS/XwdMN2bUwKg6XCKsOBbYItwysVvNnP6JXq5eFRpAkN +u5c0xQh/JMi8LYMrFUVcfF9cqRzf5ywA81+ppLBNzhVvgEg3St347Uq1QcEPqhB0vBm84Avo2/i+ +UjFLWb01QwRXqtzzM7Zx1r5zpaqCkKqAPOr6SpXa45GqhpTNgz2D35WK+jdCTDJsIkJKHms+qVgq +8rKFaUXOlepnoOzKv2/IrF2pbONHGMP5XqkAQKlSH+iJbX5hzf447wtdqWCsyPgUS9VtpxqflyvV +xQYXmKrWcJgq9N020cm+MD4hTEWzb8Vjdkc3iViZMNXBksb0OmGqsrUiWpEYd2ikQCNhqih8vsVc +XKWYSllB/wapLqbKZAE2dBE7dzHVykUh9CqWtoupyKcG5BBoYirYUzQPFVP5PUG9usepAotMNePe +rAoqMcl2sx+5NvW4k6JJbEIDJaYCqEMexFT3DZcwuR6Qvi4nEljCqQ/0rgtoUZ3rj6kIlen2aNBM +ZWU7gDJkvUYqrI8ofsdUfdJS6s8qpqq47jcTT4mpxh9Q/BXia4uphqQrVLbOYarqHoDnZyC2OozD +VP2KjM8afDNMNc40An1zEpPYaMlV/v81s7swVa/me6Ri74YzpEtIlJKyAAmYCtzqZfqg6WVLhLpR +hh9MJSG5XEw/zsSNUDBVpgOJKg1aDDIMpprUQNSiKPYC/lV1QMFUO8NR7zmlHpiKTuwaaawcpkpu +qGcwKu51xgIjTDUaxk0/TKWCS5D+IxN7dIsqwT7nmoEuwnOYCrjWx/3CVGxGGhyeV2KvYao/n/XB +RhKGQhXFVDue6tSjRd1cxXTrf9TKlAKE1gSENItV2UD335xtMVH6mbmQKJlK7ep0+AGSqYZtWOyQ +qWaxdzMEcI4dXj0ylcbUphvT5KrRVraJlSJTgfJuoQruEjOZKq3R8ZpkKt1gwUC0Ll8p9EeXIbgk +U51x9YvCI1srlOTfKeQazUiCsSyTqcoAbMNkKoRarXU+mQycvzMlj/5qICNTuXR0rBWdV4vqC/RE +8UgdMlVk7jfWg0wVN8mBQFjh+4CTkRR2h2Sq5ememHYJzSNl6gB6FdlM9MhUDkLBW5q+cYyaTDXH +7hB2iEbXPYE5WQSNH5lqV9xLM2T0/slUHUjKh9M/uItvDt/gD3J9C7EIYUpMprINCNw697qWmltl ++uuFJjpGZaqnYuRpq12XAFemcm1CyAFA9i9TeVzoK98nmaoDjCtbR6YCYY8Gdi/baPCSqa76EXHT +Lx6OTQBjKh94/2D6RzOmUklk0RzAoRDQhXkVi4SKqY4uPnMQ3N7YsFHM1O8XN0fFVOwDyO6Uz3t4 +QWhBQWiQYipy2jNiCaeRbSPlQ8zaixbjw2xiqnx9CqLJVFlTTij54ARpej5bkKmSjnzrw3uQZCrD +Rhr1H7A5MlVDbohnW4fjRscUmnMU5mSqlgHWdFXRCyGB0pJ5c2SqVhvHE8hU2tanqIhMhRU68owZ +xitT0duc4R4yFT6sRjGZFWZWqbN9mao9nOgHpS0sM1WMnuqjGvnOO6UQQmLNVHzEmdUeiKaZiqNL +3FmmYts1BEGZChVBw9z4QNZMVQNyy5CUS7lkMXJXgc1UH1F5lTPSqJqyIVJ8TgkzlRcIZQ+URL5d +hMxUO05kohI9ZyrSRFrEjvVSzlQbGkRRID4tctSZys1bjVI2U3MzVef8Eb1xFQJmKj99wbF3iM2J +ezMV/N7PEhDI95qparUjYh6lwkwVpXadhmaqpCzPQSzp8EIY6eeiZ6byM9rUWi9XFuVnpmLQC3YW +y1SXm5rMBglXZao0n8zeq8DJadiSypGpuKp1CXtiTabiXqZKggLk6f+cGLEql2x75ehuVHx8BsdU +GqtnrfOuLuJ8ZYEnPL5kqrmjhkiig1RjMhWaqps0DjKdZKp8mmheEUr+UaZa3tAF92Go2JepkDCp +ZLZlgV2ZqnRaKeY1D7ikZSqIrwxcnBqzwZtnmepQjhEgk2X3mESZinBVdZfZeZnqAoqyhcf0kjhY +pgItUa/jekDYm2pWKVsElKlEswXlUaaCHF9I0vox05iKwLLclS91zTHVBnlWwDWDSZjKALQBTLSh +epiKTZoM5TH6UUOGoDUZphoNUip9voWpMO131FKipnLLtcJFUJAMZABZ/yg11RFzlgV85yn3d62m +kgzaoUo1VaEuMvPWNFUEdid8BpYaws5QU8kScxly4SyUUFMZSwrH1DiylF56mgok+Ti0D/kV0ByS +MY9k0GG6JpZGPCfZkHTDhvDo75g/u+ASOwuvqdpdeNnBL5trqlZKG6htBZ1fUWwqjfa3Ry5/baqX +CDCgVDgWGzYV3t6UKs2+BGwqWHFyS0VCzqa6hn6U7iBi9k2wCBxfPsOa6uySK8Rw1NdUz7jpKT4C +l8G77HqN65NrqrtSmKlA2vv+0qZavaZ6oQ7y+jHeV+hUj/xWLi7hTN46MwlCp8L+qL6RUt5Lp0oq +C8vCmGk0qRIxrP/ddKouD8yVQ33Fuf1kCJ0K4M9bKVxSJrAWneodhRg3IXwCXa4b4GfwM/RqODPe +rjKkUz0SLUbZAUQZ53KqwMYb9S05ld5HmxsY8p1bTU6FGoU1LFjyM1xf5VT0wW9YPIsEif3NyuZU +Qz4upqUfnar7nmPndbtvGRvvMCs6VXlb2NnClzrVEFEw56zyR6c1fiHsdj9U3ZTyJlenKhxY3Om4 +n8peNnAm9/Wpvk/Zq4o+1Q5ViN8zwPL2butT0c+qjg3sU82bj+qV/D4VrlHK5K9Q4eIDAIDHr0+V +6vaCwKl4oyug6v15odenQrcZg/pb5VN1jlrJjyXFpxKc8gTMAJ9qtdglID7+S3yfSkUu4wo0TF5R +lSCmg3ZSNz19qn8MUikpR1wzfapryStFsja7JL7lq6VP9a9C2ti0vBWbJdWG+30qyN7judNPRdqV +3xApqn6qeiwZzOIHmauIUWPlp9ou3JLU+p0KpRZ4lhb9VEbP0lbQZX9PgSXNa1/WjrhbFOM3vER5 +Nx+W8o6HgvdTwanK4sxDOYsUP1W0nfiUDKPpkZbAUZKScdLtk7EL8FYGM8Lyrg+A36CFXnnhkfKt +7VNValslixfuNi8pg4k9XCa9T2UEOeZk9wn6VGtqRFfV5UigqsKxfySsiD0CVTeKjFnNlwUMdXgH +qoDcGLMTDkZ+okBVM9YD5b6gCvAfKEBJtlpN4SqoyvKG6dpoKvF2CaraA+HKKo2+B/mIoIqKzHS0 +aOk1I4oVEFSlqKOwfU+iZcOk7FU3hBYSMC7TrBZDlHkiraMSIJJnG+bXh/AiJajqqehawc5WxsBq +pYKqH96wIrz/OWhZypuZoKquig/oKkcpVcIQeFl9DzTniHWXKm7dUiOs3ajTthZUFURsB1VgI7KE +Knz0DNRlSBWFqi/oTK3s54hNfF8Rqt7eDH1WOe1B1Qdxl21dTDI2qMoLp8IP2IYxqMIlv64u07q8 +BlX2Eua8J+kgSOoLqlgaTRYBSGILqvT8izov/lFLwMUuDQ8zi3rulUOiBFUVy0TcvbryvuQzFiyD +Pw+ml3BBlWF7QZescxspAu+npX7egvDLuDCzdid0L1+KFvOCuEsHzs4KqnLRXhunQRVwvPU74xYx +qMrlbfl8FK5BlTsBchy3zBa8DaqeMIxjpCnMQRXainl2rUm6RRrsZXyB9R9UVb9ukJHq0+DUfYaO +jPYlYjXMksLCCz8jQtXncM/9O5TkCFVXD2HW4g4uQoIsVFVhrieABG7CsxGNE63MepF7ps8wFegO +w9Ads64fFfkmXgQMVRBCbx6qrGXJKogqy3M0rZwno3CIW74ekxfjU7JFDkCuTDZJv/uOfhBVdcy1 +/JHhvxFVwwccUkGWhAxR5XY3f0M9KLsRVWCfOqCKuJQDUdVpGkI/vmseZYkqbp2/gkdE1Q+LVJFV +iKXsPVSBtuM6RYV+HaqwoCJuKCFe5S/WJh9pFZuHqo7kDC5YejTLGeUQZx4t72130NmKOlSBLyfo +6BDeFS4S7G+Cq7SF6RdnBZ3A9oeqKhtTWTMTD7kp6I03TAJO1M4/VJ0fQXGKEVVF+rWtDJ1/uhyk +Zwscoiqnp2ylP7mMAYV7jYtgpAnJHMdEVC3KdZJ8i2G08i6iiqyocoZKUgwjqhbOJ4Xg+DSIKnc7 +ZqMqdvi/DsT1sS5Fosq/nx73HEnerbMTFSlRdTkux4KLKrsEM0//oU/JdTGe2+xFVUVR6jlaHtEw +Z4sqEVWM+trQW1RpMx+kbb0UCllUQQM8KqoQ4f6UqML6hqxSnFLL5KyXM0FUWc8PZYqo4q3dRQvm +S7iIqqX6A0yhiCqMQS04EFVzikIayUMgqv6F+puNiCq7Ubt8WY4nAWxVYacR0J5IVhzqa3Hi0dU4 +UXWvc6jy/y5+yTih98ooBvUMXkRVMD895gOias/+iDZXszNymD9TYJHnWyuVlWW9IIXve4ouR2rb +FbYsEFXv4K46Po4z1V8Zogon5hYA8itEFSG7btBB8XSyAeuJ43awa2gJspq5VxVgYuxJ68SpmKyp +X8nEf19MROOJqrrqcDloI/gjEFVDPuFm6VD1DbmD+e4EtCTKklmPluZfH6rKSy6PGhF6SDdLSFhP +CwPCbL0pouq+Rq14gMQIiKplr4urDhIr+1AjqraRH4eYwBWaywjXbQ0wDdLHK0SkqakOTH+WC4Tx +UVoEFLbFJ6iNQ0yFqDLKji/tx0FElS2biwoA/z4hqqzZlVF+l8N1/2f4lXqwEVXpAA== + + + 0mvHWO43UfUkv19tLnggmo6xn5KWqHo6usSalkQVOOJS+ueogkQVydTyFBPIiFteklR9gnsoNlqB +47MuNqgI1S6BJ1JSxaVnrCKZBkqq0hhljLMlVVW98nCE9qyOJFUex2y2kMTxLKma2b+B9FJSha/H ++aFQWZIq9W4jlFFny0aq2uHb3ISRqgQTCd/LJSYZ76EjzsrPTmNJMJEq2VIJgI1/8QgY0kHD54Al +IJ8EkSqjfwRbGnRUy5bTpr0Hf/Q244iY0AmP9mEEqVKiWvbDvwBeUXK/kCrIH9/zI5I81QBT2CA+ +10cVcDYf0m6z/9L6Znv5ZBhOVr1m2QYsyYaV9lEFl0LjkS1jj6rR+/z/ngr6qx6dslMZ3YkXmzej +chf1VfyouhIoiIreIQcA28pHODyqvoNMaaEfVWwCfSOPqonL2ACpghyL0BkHLIJU2fps6xw/+bAP +kCrCzHtO4A1Rg+ACnALgmbVWHwDCAcAetXVP/1X8JDALloyAVCnauhvEibmQ2WhKn+xNbQ2pMucX +eM5q/mConZZqgbL1zyDBkp6zqY8qqD9w7XVWtrSEYvukPiNf9tJUGzjNHcJ4TT1SLdpywm7iqJqv +kqlyG1WN023dYZLC1aonfwioOkg4Ca9Gm6lGVd03dLE0sEiB+WfCg8vASR9DlR1fWaOqoqyAa+TS +bVR5xXxfjpCOi/QPtFGF2ybE8Aw8NnRUwReln4zWK/O44l1V5fbxvAGOi5+jKrSIrUu1ekuSG21U +IaEVF+bnRpXdKxdOvBEG0vK36D2Nql6JdzPeIdeJpXzhQNwJ3Y4iaSyAdTOqYEVI4RoDWNUCdydP +3w3WnVH1kd+BQKppuw+J1t1bJjKqSt7oQvGp16UlqnqTAnK+QpvimHdQ8tIvqy8eIUXD0xtiThg6 +bsh4a4/1v6JI/Ao5zMSi+eYq2StRBeF2arb8RJX+y5qaRFFVvwHG+QyVpxuGPJw6YWVGFT76o9VG +E7I+dBYaRINRdU69psuoImk4hymzTUZUBQVRTrGB3KuDmFWLKhy5q38dSFtUZcCzKdcfcUx6PqMK +MolQn2nKwcCo+t8Rsc7/PJIUgU+p4P7TqMKBwfPq8GACKSpY55hHMPMEpGvKr1TG/9/siQnCwCfP +NKpe+WLfUQgeNqoiULMT9ZHURlWAXwFkHAbaFIZqVNmIHtUKM3sRWApKwX0aVYP3ZritJ2h5VftA +sKhSyj0XVV+0e3iWLOOHid0U7R2QoWD5aZDYJoxRBWH0MN7ASxPw/0v/zL6v52hCLWci65wqVII8 +/VUuskyC2kDLwPMTXFEXQBdnVAEWBjiAPkS+EOmIMaLC0lWVUXV7YHOySKjOM8syKziA/YpR9THU +hcWsNKq6PM2gG1X8G8Sc3qlwDLOjymooQoKoxbqdylG17a9RdfagAwEO/ZSSDSHx7vrwwnXGJb9m +BmWOqk3qGAX0yrdBjio4McgNnVGajyZ4d40bVYf/b6fSaIQMPtyoAnGE1YB0VF01ibYvCXiXFvBA +ibL8jipgmLsUBo2DcFSZTEA1XHdUEUhj5w5I1bkTEyGFVAGjv5RvNjvvWYko16sKrI8qpEBkHcWi +PjmscwcilGfXgnQhRlW9h2wRG7PhVmaNqsPU1nIoyKQbVUf6iC0KRhUEpB3K6vdCFMcEe4yqegNh +sFtu5TKqenO0YaWltw4FjSq+acEcacSz2qi63Z6MkzOealQREpWEw5YoYqVGBUOjyhT15OwONUWb +RhUaxs9a2ZaX3LhRBYcU9JIOX53KRpU5xvqRlkiTA7ZRBbJsNvF+flZ7pabkN6rAbV1RcX/0Ufhx +Y0KX/GDYqMKCRVNODTiqVN3Tw4lNmaQmaDqeRYovgvGZFbEwhkqRKrO6ohT5B75VbWKjqlwkQNNF +UE2jSpE6xsJEfWLYMgZco6q18Wgl9K24G1X4bSPOog75/QOjiy1V94dIoqP36vAdQn6zbqlKhnV9 +XKrSjC4cVYAsUIUqMzJhezDqAGihmnzuAqC5zy5YKexx7PjSpBPKsNLRjlO+fq97shlbJBhszoFE +zJpP5VUckvGphBYKQs63lvfxIjEpaNlT9c7nMsRvMIej6EsWZQXsqWzk3AP37am69BPnG5+Mu/WK +UOX+msrPqQslMRDBI0chkFrYI1SheskWvA+E/dZrEBgQVB1tIFBwBr10ixCUihA0/UdCWWQJVVD2 ++DAeEqpQ8F9/hDgQqnymMJV2gb7BwvzEEsKEKmT/qlga5kKMUPVjIcuogTtPPsxjDUKV7diXorHk +FaGqu0LHNGB9/11oPiNU9RK0DQLFwGmJzEsCCVXlPLFExsyvjFDV+RO5oX9Hn1AlPKML6lhIQKgy +c5CYfEUQiwT7z27/hKr+fPOpnV1hA4RXQhXAtLeagNFfiAhVQg/AuFC6hCro7jMUHQ2q2kJ5sip0 +RHjICFVrMOPdmppoQlXlamgTDdvyFCBUWadK0qDW5kvLQbaYTagqJwENtKBva+jwxaf3hLW+TtXT +qz2/QS97fx8fjd8zZ2GvtmaG4rIXzlISC7Oj4RHgMOooMEVmJusygzi1w38Pv+8wWKyAllowCIyU +XKK89c60xp3su3rroi+NH8y4r8VxTXXYV4xPbYa6ohKflUW/p5ewYNf6HyHKcvanRmnBh/mQFysr +jzopIL2MfjyFF22N4ICImgqGgW7Ul6tgwnf1pbzlYJomkfVDi9V9bG/b+ApqUImY+YPQ829KojB4 +U9wRV0mY6EO+xMe5YJnu4A5h/FQJtleNdpvZvlhJOtMRmA18/uaSv8hVRk3qNoKBNJJUwfdPrH2Q +MgnUMY6Orq4WCLg9go6aV1mL2ItTgRhONC3kjL/LSicXxvPON5GKLZJVddR2iDhIq4ht8BD8MyQl +sUuw7EAfcX7n3ylxUZX0UGQfxZwvOnIdrcWyaB4G476Go29+P3KKafrLxEslhT9eOGgT+P9W93y7 +yEYspfNsdeWk7BSd7yUSArmclcRvfmpNfHRyTRKYZYrAPQDQx6rMQe6u1gGptxqKDrsdzoS4KH+I +/P1FPay/issilVXTgEQaJWkOZx+zC54fo+CMR6tAN3vH8ih6md1WVZprSe26uzwWb5HnqS2wSKme +2R4NAMuIvXSLQkIYgNY3QKeRhjhGaK8HZ5QHcOdSs8CU2A0apIQexBAkymIC83rQRSumqQy8hH06 +YCxDevgoHZHOOikvuEkI5q0PYTrzv8AmcrQwMBN1xJPLnj71POi6mRMHJ58ZwD39/9YKQeUTZ9TJ +wjTGK7LujhU2WI/Q0VuIm6Yugo+ROQLl5/+Od4FPoBlGRxFSCYSMAz4vNfacbRW3s489JXM3OVIX +kllLKMvJ7xGtULlg+Fyo6TkISiT0NzSOF8n4BKYCQBlYirYxObsbqkwOxLTNekWEmq389sdywhAN +feAkxECotoq/sPNi1n7JuZjUtMH7EzVbCaIHyAdydWbd/nWv+SVfgNiiCV9T7fmSwmGA7lFyjew/ +sgfmShTp4DLsxdzPcZgDl2xQBpi9vKpjYIphGKGrMos0EVWD2yuTaQtTiNpF6Q3Fv1IBLn54Szdt ++89McVCpOluY7+PVfdnQQUbrZgm5jVHIA4eXbGYuEjpbfe31ESMy7RGaLo6iHjDTeAPiVEcrC0al +s1Yu0T0Oe9VDf/G2dBs95FhXLCR1XRv8LNsqJV0diXnCncCjxC+gRkxpY5AftuJ+wLjw8rXqPzwV +bOd3aODq+zPDxYleA5gNe14ZRNgxBxhTrpKVsFAUXZwXDriUsz3I13EfGDGeZpNiDBRcju5RcTk3 +3Qk+60FVHQ8xFABgE+DwLgWTXqC/Ovo3m47dq6ggJZGkhWIx6BY9LDnHlChQBU0kxs1qF1g5fMt0 +AlqZu+8XvctQMi90ZLoekWyi9JgJaebsC1YRTJ+v0INUE/6F+wj/GtSptU50prDwaq9Ik6xzsrVn +aLkMdxvsClme51Jl36m6DTluGoXwy8D02ne1OK8VnIPoEH3ObWkYRsvBVk0RdF1h/E5/eMLx9Lht +d8z0f23CA9oz6QdJAs/Dz1r/BEUR8NNZRwMnjmMT4mFZsgv1tX3vte//46m3noFkIqPG2GOMCxar +RS2onMDes4vcV+q450iZNS5D4FtJqrnSZWvd6wf/FLKSwZq7GwacRsiJDnRVQP40WTskP6qDodbW +SyQzlWcu6ho/ZkYeBEehgCPfEyLLJoUzagR2XXIHsu41h8CAZ38mkkeHxUugjGfZzRAGxlsOdcdn +eGL90gPDCVbU0IJ9wdR8ZHBaNJP42JbiV3s6UAi1HRFOpvYaXL5wQ3xz/s5xdAHAcawQAuhsneEb +vzaFSYlTHvbc2sC9y9OJs5fDp80QEMwFf0lJeM48ebI8DfvVLabUM1w+NZXeb0RSSgmeeyxQayF2 +BXr2Aa5+onSF4YXaIpwy3B+Aarxfo29+xaDZda4WVJcKg7s/PX0jwUCdMHvftOzyvSoxouCiP1u/ +PsNGqtYHhDmvyW9DokzOkTcvMrxw4Ed+fug/hcC+iZdB0nr+VoaBwcnnxgTAVy+wH3pgvUlc6ZbW +Z20yRZCK44nOfgxXiZFwLz6nzJo0AyAsIBq7AwK5/ShYnlETFT+/3ruCmjyeAuKIyBITOPsIxfqy +xfXvzluW4fRCqAX6Evd0W/aQXwwAp7RHVMnwWyG7OJRywTTsilTwzrSVWlV+dic43cNl4RiSPcNy +UbkN6olBQC9HxHpYRhFHU2JMsxmIfi8ZUciuepReW7qLdxIIqpKB74Uj76sJMoMCoJvooI4siMUG +W4lwkbRt5FhU5IUNqnsnQjUKiglyl1SoLltZUFZnHykCxGKELlJeS0wp5sHUApig9aqLcLoSAndh +CJcGDi6Ya9Jt2Lr8pimoHeKcge2mC81Yhux2DhX6oXzMAonB2agga+w+EStCvO8n8I56Al4tvTPE +LChkGiP6p7dYBTkv235cN6rgwuhFjQtAukzdhB+M6WnAn2N0i6DskAggMkLMEMFd+QiNWutImNXH +/8H9wdVCu+42E5s3d99h9WPn3g2JCdXUCD0T6nE9pZYxLQFeNs1RTYpSMhYY7PHfaAzA6JEFARWw +9ut53r+cMVS8EgYuBoEDtP/F8sApoIhcMIAq8RWZbtmSPtMzFWwWrD+hW4715iRJ+vELKJmHag1Y +v7DRqkU0STbU1QlV5zwvrZq0CkufuQgRgIPYQYpaguaULLpJibo0Q5QskGKpnQJBdhjGgSw8+8Eq +qVzSWGvvaxOEUtZCrjNpYx8cwaGXHm6uu5OJTKU0myG+yz2U5BfQDFtGJqkw01NPvI/hsTtClxdm +nrFX/6PcPOPtzwP/1hwRITx6RgUhbG8mGpc/EUt/fXHr2HbJbQp0YBC/QaZLxvUJZ40pe/2K48I2 +NBcPnzsz4zwZLihw1HSa+zSK5bLJVPyN6sCU69kkFI6QBGwTLUnvKSUxmFbWhV7Wgw== + + + RExgcdWnNN+nsbCG28LHlErDxGalynJOca1Flwnhr8foWtdppi+5x9u13riUCFt/QorDcSWyRM7x +2+WofzxYhnn580yiQvRFiHge8rhYq7wxymNBfMjhHJPBzV1Dv5KTJOFQN22gRXHqJ4ykEawCmdNh +2jgQOwcSK+WOwuP7FC4QfV21WsK5FfZNtUZ57byL8CgDoLn9T3ZZZjy/wotUs8WRSQzP9rL1YY0y +OgQbJMOYMSSbXe+W6OHgWS/rGag9H5AtnBp2qYCPqnZ1sowBOC34z8ItC9pfA4IB1htCTWOnxfO8 +v9CEYxjb40E7I31DNwjUMBKQsZUeVtA8bRNyFZz6pJ3MxDpLdp3qIX/fknFKaVDVvCEIAkSCi0Lh +OLl8DnFcYnykCV5TPSYe2rkfYYaTQzktRUYp9/8iLXNAzy/aAngXHPqHl+sIH3LKMNeeGHdh3XLE +Ut5InlL6s0tAgxEn/8kfDeteo5SaobHHOOBf8BCqDmtNoDTFLJ4yAbd4VgYgbTT4Z0JAYdu4rERv +aR/TVUCVSg6eDLh6Gtx7c+pUwg+smGWCNautqI0vOkYeg3gBdAQBnjfjQJG69llN0A/eeJ4wHmIS +SGTmAhy0WQexU2x7Z4QXzE2X+znrgeUZ7ifD3Qz1Ugo40g6qNKTChQRwy9X37pHfG/5A8NGrPzdu +lzws1DERb0awUOjF6xYzGRsAU/9rebEPIHPcAFbQVqEgZ4xfaD5WPyUTIe2yJ9MDo8v1W+9Rgtgw +BVStzcJF5NZ2Rcj/yM9jgs3RMd2MhVVdHmsZwpU4LOokFnzSuQRBkGOE4pg1zb/saKtfxRcVpIOT +9JJfpK1HN3ZbbP9JDZzJ3rhg6s3KfbHJTAAZFx2ZtK004jbQ+9BAhjuGGEm/sksbL/Vr3KQwYoDW +ceFLXEw3PlSMv42CAykfeK87K5IG3Lf5vyNGqhfbCoIdkHPGCsAhMubwVXlH9cdF9AmLd7TzlAEw +cRwOn2caAZ9+++nGSUtWPyqumo2R7XtTl857vIACmt5YGA6wAQz/K/TELCKFVNtqQYMBgwF7ATMe +bWY8g7qL29aJDhfq+KwKg8hRbMGwOjQTeG5nu9BpheE9BPmsIRjUxjZeJ43YHHgJjszQl5fa5YW2 +XyMWooaw624kZrNxcGopRwJHnV6TOfYREc+hbGYabEe+pIPxoAkJRwiHAkM4OE+2MIqHPyrdjwc+ +xm5mouewY807Qfx8Dg+2R3HwtGQUmRpDmZkhJzIfst4nYSHFwolaI1RmQSQEekIIDqnDufNFg7Z6 +a5iHBTMhVMkk6+6FsG1fQboIWUV988n3b4InU4nXsIaRD+Ym9mKWKSyCQy9w8ydmKOVkQkVbJ1Fh ++zYVbiIzvAWpMgeGpKIi8JTZjYiRKWwGa/FyQli0DHsRi3URumCELiKqqDnGHzRxlhKTCNJUFx7K +WEPEb0xBcTafhBfMTeA38paghUOTh6DtYRwXoIEiAHaXWLDEFJSYxBSMiXVi0wdv3rYQmoOWAKzD +CIm+M5sY3kJwWqUfx8KohRgXVjLEIuIh08zwEg6SEw6TDXkrjfJu3JMbDSZDWVFYFDQ5FwUlLpL1 +I7rwMqKwRxQkCOKgkISzKu93wtVAak4JFE0SCifvBykCJ0KS9JnAUIhjiFJwgxYPS9w+xOwhQrhZ +L2TCPOpSpMDXUwkMQ4lOsaOQkDNcr4tiZb7qKyphImo8ODAohSDDKbJNRbIocCNyTCic1OpKVMO2 +N4bn7WqG1U4JTi0pzLiHEEjQJw3lEFWsmt8jUYWhZSo2hlpDKELosgmWgialEcORZlPxhyMNBdkQ +RLt6XZJyJS9e831TOy98pmEu3Ix+ys/j2s06rs4fyggiqeYMh+9Nc4YZZpiy7Kn6fFMJMss+d6Pt +F6kfoQnDL5PcmJHQj5SKxH5NtxCCTHjmTym05+ENwZdQb/gIfuVREzOXd5voyCqbRY7nocs8XpmH +13O3E0vEwx4JLdSzEMR883yhftziwpxuFR58tSILsV+kIWsltl7q8EvjH2kluBP1IsJswi4THjoz +pGWuqf+O5PV5mKBkwcxGMZGQiCBjYUFJCiYQ62U2BW/Y2uyRh7Dlmx8iHj+oEg/vJ3oWMwI5oV+R +f54/VEItd7zz12lTrZovvPDC2+aWLXsbDechNKYS9o5mRppP5qAC+YfLP6QPc08lSM0gypLnDQ2d +z2VYHlI7pUkCg2r520/kH9Lf7kzQI3XdVTaeCO9mTlIRSZhBPmGac8mNRzvxeWerlHl4x45QXbhH +aLi8yV+oPVvmYc6H+afUz+lHvWrL/O/MvG9FlWkZOjc7YcT/FRwY85B5rQlJHfPLbrwxv+xO18rU +ZDSP8G/a/Uinz/eGuad7+37E+GM6dqLaEGb/1444+mjlmZD84dYKJxtuOKeSVxTkYbEg2+OiP7P/ +4xNamfnVCWd04bEKHy7vWJxVpfKH9m74wUmD/6SLCEGTjv+k64L/pBupu6nEt+Yc/6UqgyKkO8za +cPuxLliiZTTIqIUzoWLVq1WRCPEgE4ZrCQ/qhFcdLjwEyjUPgdKFb/qgSrQyHsPXN9rAaUo+FI0w +XswYWgNlNh7TigaVw+aVJ79WTBQRLBYb85h99nijqsTnCw3ziVr/pgtRieIObFCH3xpYWhwj/9t9 +wZdyY8wQ/kDFQ7gEKtyMMKqI5mFQCEJKFkRS1EkPOYog0erDrgrDKgw9IajwYpTmQcUiSHHm4SHw +6oNJr+GxvhPy8FBjLnIUOKKylviEfwzJRAnhEyiRoCCjmBAugW0bIjycqkUixEO06qidFSRaKIqh +SDH08Kkh7qPpw8ucSRGdcDJQQRFYybAWi0OFZXeuggJPxzDESUciHIf7l34l1nH8qky6nytLeeZ9 +habMw6vSc4YG0bzjoO/M+KF0JTRneBye8CfUExNrVFPJ/JzhqebTiHAlLofEJY8pzxUObkX+uRN5 +mBtE/jksIq6tSkILkyCeNPzXZahC4dPSiuUxXrBk5mD53/rhk1YWAy1JDJRkzcsFWqRXhGKF8FMS +Xn8Cw7rQ+bAiZUIjBG5ueSSWSz1R+dCevLVadzNd2ATxrXnFp66rST7x0BiLO3LQIWSYuASlaahE +e3uu0QYAgxZwwBAAAALAYGAweBr5AxSACF8mFmYMBggSCgQYQmChI3EHAMgByAIAANCyUaEw/Lo2 +emKVHKlLzWIjTQg+uWtsVChwuglowdiCHAoWAhfTTojEJnChBTB+MgDHtwKflo+NCnkqIdt/jwSP +0bBRIe1h1HLaRgVjnSf58/qNJlICF3wDWKEBVMiUmMAFKybWzY9wNtyocHMpkPgsfRkbriFwoUze +8ryXF3TBxIVokFyptE4aykaFum631+fGSJvARZewU10+FK3eAOszVQjhjQp/8pTnPhG4gJxHIV7y +ongCPoGLq3M3GFblxDXDRaEznZUJakqO5GsCF+beOx5aZWfZjQpF0zMxT68teaq8B7jJHgpczPxQ +ozlJDlOAEhW6vT0keEvUM68+KTEcs4f8SlQo1u5dFyJXCgpcYEnHoUkrVzQqcPETEx8CqXtSFrj4 +nFaoC5VnUV9QwX3D9fQGBkBhDFzgZuZkInaRYSJGOgpcMGRQrwK1ftqU8xQKtfGT+KrQzENQPoRk +/XRZjXowc02T3SIXuODEwimJNnAx8UbKOs8e7KgDAxfflktaPn5DNgVd3iIzqFhX0ik0cMF1fVFw +2Cl1fU29c7UvcNExO4wGLVmJp2MKXU+wKFHLvRujW6vAxVix6ZDHyKFlAbpe0c+tNFGfybG4t32B +C0fQH+K9g0gLt5h8rBQO9EgPKTBAAlL2OI9VBi7KfJGHrZIO07K2k/wmBqWoR+mI4SvstUDePcXJ +f4J1bIf6wMU4H2RUeGPrHjVSiIqbOej+Y2Tp9EeA0/BMyNzqEvEHLpAlL/VOWt8jWmwdCR+4mHKJ +0f1s4P1Ilxy44Lo3Y6QgAmh93jlwMfR04U8TSHYJ+721UXA8vGrcgw9cdC227xdEA39U4W/Ysvav +UQY7cJEZ5kzUnwcuIJj0vM8GZAcuhIMiW+evnQh+By4EqNZJUgcuFCVFMvUQc38BxBHvu0IEF4qx +8FywMGaNl5QEFwr5uZxKg5E3wYW4YX8eq7KD/hRVVHCBnZ3LdITz6ALcM+NQ0FUHRnBEGEclOsUr +u+CivAX7hRgh+fBmbfbD4HMkpQsuiobEtWPXHpDrAQsu0BG3thsIDGALLmbt9hAvRQ5fjb5et+Di +TQcFuqAgFfo1Qpp2fh+DgkBwMCHOWUGjpQsu2MRYTgUXfT6Z4KKW1RMhUYILXR1aT/VNdQ+BOhgB +ChbCyGl0g+jpCC4EYCXEkpmtaJFZ7e2AhSmCi2+fjVlnHwT3L9TVqsMOwUWJ+Qm8lAguZlxuq+hx +kLbPDiS4gBeK3ENS20jOD8OSSHABWfvKm/4xcFNwUXibl08TG5O9/CxGbU/+FxONwO+UOpmBrIIL +Pfja/mUdHQ4/MYi4Kq2xKsHFZ9cFjahFXOvLFMOy8QRl4/rQllJQXhu+SoZvgsw9jKOfQHDxhb1K +QB642LqWmymzHHz5sRBt52M+nTHAI0CCAxclCVWwB9uBC8lkOyO7AVKlpOJ0AkEVFyhVQrULwUVd ++SPm+Gn8wIU4Vmti5tVLB6NXMyesmZY2AZp1ypAHLhbk5hKIdgwWI/9HLiekEGgkRQcuMH4pu+Di +BCcKfJ7V0lR+WZ48eBQxOgzOxquBk/YDHrj4IR6PRaWt0+pvNHkTKHY93gQXhUhiSRhpwgQXa62A +HFssR53gIqOShMbFCNUEF8zeJ6cggKO1Ct5LcAEjaHuSnK73xTYwlq8J916bQEtSvL9ppHw9VYTn +rniA4KLysDaMJJF7Ro/gCMQ6FjYEFz4QBu29CTiWF/ZJjppgmUTvPQIJP288jJrwMBPkvFoct6zY +/OMDY/znJHopoyboNkkv601mtHE9PQkuSmqBfA5O9gq2IQDBxUrMs+w5VJa4g8WTGjUhRCNQuE6p +7NYHTEbNACli1ATbwzduYQApjwMXVtc3t5Yt39/kuzpwcfNcQiGodUsfUKsu9uaBC+XNF5wzaTRU +Q5SkHHlSIRk6Z9DxecRHmgMXWncLWWUITgG0I0wNXEhFIiYYvPL7wIVJhpX/8giP5f+EYoefxAe9 +HLsWHcRyxiZOq4c3liBA88EDF9AiuzeCLx02iB41ITfi7LJa1hWsWItLmAbbR+OK3KvcVVoKamXU +hFZ3boBa41gU5p6Bi3YlN0l4YY3RCW8ocFFHpsPDbGqjyPrBoiY41RSaRKmxaARwCgMXLaWkJaTM +I45dckVNiMuQd0zLyQKYqAnCUy55RzdwIcSxaoiU22aBi44AKeJNoKxLClx09FmLLHCxZV7sVVb8 +E95nSNQE16u3AsQxERnT7n7njQKfStQEL/AzA4IKXGQj+buhec6W8t117biPWSmiRA== + + + 1IQipvSjNqT3m6QCQ80p0G/754vYgoia4HyDfBL/tRBXyP/54vyswMUF5JK49cyg7IXrfrpb63n0 +4czDNSQww8pHh04GqCVqwqLkbVdRTxs3asK/UzaG7WPEYk0wtgCHj5ogqlpohxnnCEmSHP8W1ekM +aN0vIpv/FjcdgieUeCJKSgAmeiOZ3YOq8G+xcQ9GgKdRlBF+rhRNE3wj9LOM8m+xpdd2NgynXFXT +hKVjR/xIPqCIrX/WvwVHNC+8NE24uDLgT1vi9Rk4tcPxfc+wv2n9b5EK5NPXjv+IAfb1M9QuO1cG +wIXX+7+jOES7O7IboAnlBwH0qy+aaFaVNXzqzoT4xbSfIjwSjLG4ABdm2ZV/pAxaA0R9oAxJiLPF +ovWr/aVhBFyk9KMGNx56jQ9XjoCLEQXcV13Jqsy9ZR0T0BPe9COzxT1pior1BVzYo+/AG+1aEPtJ +wEU+nLLJOMEsiQBJRsNn27RZwMUGgfd/vi5zgItBL9idQQBCfxJEc9/NCnAxDZnbVbHuouKACyAf +rIPXHoRDp/HygItPWrdZYN+S2AEX4UKHLgYoZHgCF0IW9emAYL8qE04LmAQu+H5UmTxvTkh+ejgy +iCMFLuIyf0mefgIuJaQCF4zT+9qlIIwAm1ALXNjySWw5VXuBcFQ/l0DptFB+Q80/C1yYQxyUGubx +71jPJcQc9aPVDwLemy5eCjrwz+WwLx4DLrTQGKMkpnzRAy4CnM4W43MF4ZT5XAJtuoObrut/rvx/ +LuFuGwvXxD7L7OYSXADCP/Bg6Eig4AacAhfjbSdSUIGLVWaN/4Xug9tcy9YO3yVvEwduLsHE2j8G +SSDiKMG6PP11PKYtcCFTNnU/cDEen+P8p6+NPXBxtXw31eiL7B+4CAM328WBCzH0cBiCrCEcpm9p +QXDBPcQed0Vw8SK20d4nzyXUVV/AtUOMjeQDF0ej5lrQuO1/DmTBcwneEBPASAMX72G6vKRxu7uK +5xKWWVl0fhr+uYF/G7joD8IzX7wbkf1cgktnB5iQ7DYqAIsMIOXXSBLuuQT6QeHJP5egyVEbSjbX +rwlctCpKD04Y+0649w9ZAhfA3xbKgaKTdUhsmb8Iiio6AhdQBr1B/AwwlgXwewMuKnt4+e3GI6bx +asAF0RVC69r7Sgt7LkFQMPy6LneqZMFLFFb4XALW5E14gKu6bcBFiyotMmTwTS4hzyV0GndbdVMW +G3BxVFlMw9Y8LBD7eE2HkcUCTA/mUc0lFNcLwXKqWhIkNanybhRam0tg/FWq6gS2qVri64N9+tvm +Euh1raxjEgekAi6qCbnWXxuneWOxaFjHVR+lVmdOxJcIL4wLuMjAg2ptzRHrXIKNjVPYyiTmKhoc +I+CiUAqYD5FMEnAx8ROWU26xnnMJKF89m3OJhx0BF0F/SBa8JFDpNOBCAjM4blk8oNz83iilMiFw +IWzEdvcF/wg3zKDOJTj9ljr0MwUXcDGMzh6W0fHAZlQhYGpLwYUCLjAyo1JNtUS6N/lr180lFFeD +dB1ABBl2KZweB1ysXOFYjbeTAdzmOT3girLx3iHgQiWFUr51BVKrWfwLMq1ckxN9og1ArdsCbFQL +uGCt8u4BF9KlBC7cl6jcZrx3gQudt0GWbA+gJcR3vswcZ4GWsMDRgTJ9CtrXekUiuIhqx1VLoiXo +AVFA6tE/UL/dWnv27iG4+NhxYhq0Bu+B4OKgo66MoxWWglPRk+rARXFMGAqRkhmXbLyi+t25/+TP +OI/Gx0ERKFrCJZgF8kxxIwoc6aVXprpAM3ChWYZ8JdJUQ0U/L1pCz85PgO+8SUgdbEqxP4Eu+NGF +az9DtIQhT1sy/+ct+bXkM3BRiP9UAOwraRnREuipZu2BgYtQzN4W1aYspYGLUzl7WDQro23gYmpE +b7V8FBYp81cMxVMIvyxKkH8poSNZBDbXg08ULYHmGlOgKQYscOFwnRliI6xV6fRf0YSqqpFD7+VK +8VbgWT4mEtfb4iAFAy5qUQEXB+q55GqCAS6OlLSz7CbgYpepDptaQ8Tl0zeKkwtwFIohzwb4IcBF +zplHR3uuxPlu8G7YABd0yICAiwNvx0/EB1wgovCGWBpyDaWFHaMlsL6K/nSBxd0J+INqiuXcPeUC +vCU8u6PK4hIQUY/ftOWN8goPxZCKt3he7lC+iMMcBC42R227onOD82gJP9Yf0J+BTentrMLLPU9J +atqkyCLefRSRyjT1N1oC18+9b7kcQ527S0YKbzh1AheTl8I+B3vJec5GS/BVf3lXGrlWlyYAKVZH +S0Bn2IPzlG7XhBMf4EJBw+UYrIjFNVQEnXpW+9SSisvSA1wsv0jXXBVSGhXg4twHUVwhqGtrvZNN +IX79KpqY/CgnOePC4C7rxi/b9B7UaAk9Uf5LqDNNTfPREvJLJiPI2IjgpcqN4I2W4KEtWIljzI8d +LaEcWMLjrUay/f2o56Ml5N4VYNHKz6KaGy3h7SMFjJbQPk0j3+OUd7kHg4Ip4Xj5TA9V1/KtR0v4 +eBhKsMctMW9CRQBcvNf8YohJKMAALuhUjWljWWUoSkGiwyUJsgTMDuAJ4J+YJgPgQu7jNDGFbV/4 +KfMQRPth25PqTKXS/xa1XFNIYvW6EhDrVrU4MB+IaEep7WwlXIAGkbOA41gJ/i7IlCqEXt/RM8b8 +t8CkBAIlz9Lrx0qoFYDEwIEj/8ZKcLnR72d02ftYCbfc+tkkKxERy7mRKMZKKKf+y83E0Tr+LU5D +5aT1pkpIfeqO+2CxfwsPJ4UM1/Wbs6L1t3htAd7jwwCFEzpKGCv2iZXAl27pt7POJlb+FjJH2q87 +k3Gf8POg4fkPGzVr0acFNvQ+ceoD7EP8XBZXcRY+7gp+2qzSf4tzT+nMKPBgWQuVQDgZeTV/5kRO +6ALr4uSl7BplfT3+TOSUsExGwTsaGUNgb7l8/O6sPwAuJgg3GsTFLPw+yCnBW4HQtsZ/i6SR8DAt +0EC+ubgO9jK/vjGnhCS0enmih6/O4VRPnRJ044YaCpNRjFxGhc5xpJdPVQJcVInSj9iOOLZQpXPL +C3DBru4U3l9V5JZZgAsB43U5X1woYks0wMWMSSPDL0jP/qVD5pSA/m8M9NlFfeqq8HJKSDLjxC0D +K7yBnBIiz5cn0uTE33TklJAr19+LJ8AFX4K49+TZwznbbcA5QudsY5PRzROFUsIn/qNDCbiQD1VZ +UfmyVFcX4MLkmTsB990twEX2ISaLxFxSAS5Qo/NkznKyFzrRABcyOU3kIQsCXAxf3x7B/1vE7xYG +zWiOkPpcgrDOmhwo+H+LGvyx9jtB4N+Cm6Iayd4MmeysrU+VQfeZ8W8xN1rYW3S08HOc+bcIvwRN +LAnhsn7/gvO0LKCSkE1lBBFOkF34twjaJwkUAc1FsvkS8G8Bg1SlNjFkuuDfIlTpSm/R/WSIyh/w +wv23qE0ouletfQyEli839PrfAiTQQFzD3AJjVd31YP1vsVxc0BkJqCyoQsxIMKHndc7YN5tXkGF5 +Fwnm8uRDKxH0Cu3sN/xb6EhpY901oP4tAC6RsNh/IWp5JDP5dYZ/Zk2IBA79ngnv6UmDZf8W8uFU +Zp+dTSc+i8/CnST3PyHBn6F1PpzCv8bYthBHhn+LYyT136LP1TdJ82oVhAsYkBAt2Q6VRKSwDYWq +z1l9ZuqFAHDx7RA8HgU5NS2YOmQ7++7oFgZwQSU9PCp0Fd7vGZvLzJRR1ogL094crX/CRXFPna7b +4mhPpt3Zs0S8Gc0hAReSTAhZJlg0Gh4h62iH3hv/kCpAJt0RRKkVCtqMRm+xIxzNL+pIYr+v6+El +azh/0Xh3UxXB8NBFARdfofsbJvIHXOgF4eS7FTlKvZugBFwYmvQUCo+Ai9OPHOrtrz8OpwDSkJRx +CQRcsHowfGPD0H/+b39ra51rFH3bhFv4IuAiIBJ8YNMPR1LMRCP4orHRhmhZR2SYM5kmBgDgApGJ +3wuktcbwI2WEftVrBOVnKKcZZIRgkQXAKD5GcBEJTjommxlFyeJlo7K2mW3eJ8MM4EKlrnwcIT8b +bAAXS/LhnfS8tdRQDKNsqNAKwAWjuRWUnhV1QbMIA4/haSR9ZX0iJHWwvY0G6H/TwQLARSGrpYcS +s/mD2wIgQf8WhxLgb1HuNVxjVtUIZum3mK3aTds/+S2ifrQxtehBxgKdw8VvEci3d6Xi/BbZGUxc +tazKqfsW4u/nlMgE5N/pWhNWJNu3aD5jqES0mgKf9i2AhOX5y4xYJ2L7FoeoniLphHXfosYL2mXB +rQeWACXTpa1oRVbR2lTvW5ilbup3aj7Jckgn4eN9C0gfgnZqRCDP7ynOfYsKwPkUvQFE6KmEBSAk +EJZuEt7oNbhPum+h/iz4b5WaRpAyeimdIKd1VES3oHTG0Npuio/2LY5U1bfwSPzSt6jlOU+lqnjb +ByRNKjgEW30CMmTcbHQPDslsWpuRezUgrnIIxzsIOoKDml/Gdr4oaiuqedQQIv7Tw2mIGkIUv7gk +f7cwQe+SoJGwtnVN6luwCO/z6EuKHKxv8YbI/pWsYoj3vE0x5V3RliHkV7sFXk5g3q+mYX2L9iue +DrrVYqEkEPP5FvYHcjCgNJa6lMhPBExqKJ+0LRpbT5dkxtKZyAhvvsVWSvwaIaqJ5oUg3twg7PSu +4edblGs+t2Nm1IRxvkUEGE9iY8i8BCLfgnKtlPWoiKkqBLQeWGgz/SM0TzoTt5QUmRZro83EId8C +Mo1Ap29Rm+9fhB2GoLjCWe5bfvyCK/QtmhX7Z7UaKSKCvkWPXBJ/+mjfVsfYZ43jpG+RlUkQsInI +P0nfQvUaVUoHNG9iLcVLsn8pHY+7v41Nx3JM32LZBYM5NKnoW1ScqBJRUH/jYzvaINSPqND6wfHg +s4z5Fmg7lq/vbrD6ZBCaU6dDbUPzxVZxEwMG7s/WlfBLFmk2pMwT687vFJuP1XkFIVqtsB4x0tBa +piBwsIbgyZgYu3X+HUrf4u7FMSzd+udaj77FXjZIFEHm6VsoEZGFQ49v/nNVxwBXp9RWrPoWhz5F +AKp0IScOBPQfP/2D4Qsuw8tSNBBCryNexmDNseQnKwPEm67HbQ9AhJmawTCekL5FC424DB7xgGDR +NHC7otWZWJYPYhxaPOxbANPVEP8LDiamHd8JUzRxKHdBunyjSMu+RSeBH7LufVZyuAAMu8tTkV2S +MKnsddm3QN8wO8JEI6X1LVgJAw6sCJX5Li7rW5T71r21DWq3pXCaoERYzhVu34rbHgj8ZgPiiJXS +4H9MpURgnHihZMxjN7A2Y0v4fO8snVQp+xa42lmTIo8rwPmBy5qQq1kZxhtQR6nqjtu3CFrxA63S +cb49VENJxxT4gW+A0SqzxSSrKX4LdZngUdb5LT7IV5dUs5MInP/jz97Az3QnPHYLV4iVfgt+YdIS +Mq0O1gc0j9Mv8bdAJ18oX348VCO1fBK7wR0/rPP6HnXcKtzHrKQDxXhzkPAiKznViw== + + + Fn3TvACNYS8bgvVvEYglOK6u5v23KIoYfugegBjpTnyQESsDXL1cBDEmSPobJJEKH/BgFYpJ5Opc +YhRhdxCa3Fl+HlwhIOvfwstgPqJb9vhI90OpSWbQrVQNSaCCuafQJGHlDPtb5EMKaweWKUQheBOw +RwNsu7/FRhTCXVpVJ3voR8ytkq11Os5AY7Oyido6+lt4myXwNb0AvExqRSscFVTNt1Fio5VZekDA +pE588H80zCkIFXbAH73wt1i2AgAUlKvROokiVyZBSa7jp+RrSYkIGol9DfB5EDUxyKkQhtM8rw99 +Pg9i8m2fm+LIW47lwefB/mkOCajzK1rg86Do/3z9o0oihf4Wft2zXvMpN56/RT2TzmSCog7TeH0o +Yw9BSzPDST+pzrXG8d9vMTtGzM83YtZz0841vb31R+O7PQWuzMFcZZ8Hto6TYPGELBz/gyfHZZOM +OdFGGH8L8VMHw3LOgZM+D9gozt02JcvH34JRY1Xqk+1EWUDxIZFRqECfB+WvsenCAMCbrraxv8n7 +ba+qv8V6nbe/gwDVvsn+O+3zYJmx695WYKgBcH+L80exc1tFTJoyKTwnor9gMABgAZ+mfpPo3yLT +NBOoVvJjeR5C/VtU6qQ6lx3b42gVMqQ1XLMvuVC5UcuDnJy7WrlkRN8dcS0PuL3+LVwPz7I9H8zC +vwUwpqjPthq4pM+1PEDUk0amOFoeqLeMGWqi4qYocKT/FuOb5yZwvf8WYt9Euon0BhT9t3idv/0J +Z3mgD/VsGC7vKHVXof236OWwQi/x8d/iBRzxcHUYiANwcf3jWKZg/wqju4HF2mWxjKammywPchvI +K//fIumQWbOcSmIZ6YYsDxpDnukbgl0WczYpqn+LP+05vNvsIepuZsYTS42JdbM8YL+P5AMTO/u3 +mAuEZaNkswocszwQhYID6uGNNHP+FqV2Bmhp+y06vz/pn3RlWx7Lg03EzyjEog1yR2YEy4PzS2su +4x+A5xcDf5u/hb63/57TM3/Q39+CxS3jjbH2R3Hwe/4Z5ttvagrLA2GVfhYFL9Q9cQw40wn5YKgo +DqP+TOl3fydbazv6r5tmI+W63d1pjGdBM2XA8oAOodW9idJ+uwDuAx2ovHMhbc/YAY5Qv7Q5NkpW +rp/3Z+bWEeZLXlae9ir2b02u/7dA5gR8759YeeCaJcuYcbAOXf7S/i2ArCQA6Cj0ls8HrTxY94ir +X3NBcKytPIjye9iNLDdckeff4lifdTsH7lGmAYgr5G/8W2ykxbBjy4X+Lfi7mFQFg1RRSbDygLgg +iHfyrRICtRNQ3vxbhCzdBq9iBBIELWIrD1LDz+dT+7fgZCQpPZiw9WB/i0kcVjlr97foP1HoOVoY +WOq7P3+LeM08TIp2WZUHgrASagpmJlnLTUnP32JhXxO295QxUV6RabBg1nNQdQGLEQ+7GyZQYDDA +wFz8LcAOYKnzyygHxudbEHkk1FuwZBLegglgptgtZiuYfG4h8oLpjFvkaDDd2wIp0NujbQG9Hmy0 +tnBJW/gBZwtwsoUyWUJB1mIzCPvFa8H6GizdUSVdC8u6FgpGmJIAZSWsFIyeMNamBTmFKVEtHJBa +xP3TQmDTotDSQpmkxWOjxUBP2E3TQ50w3C6RExZlFn0T5nsWozOID9KE5XMWwSjMvFlgVbM4ZWYR +DrNQaMJsXRZCLIumozAUTQhFYSGXEAprMBZLIwsXKKwlZIFnwbrHYlCPhQpxLFI0FqBfLGpMGJkV +i4uEoSYWFu4tDBya0XSwtsPiMKx6IwQtTlJhsRcwDwKLEz5YALZgodfAQidg0Xx/BRmFcfkVJisM +6Ss6o7CBrxg0YX29AkhqzisO7Sn0yVW8IkzBxLviwyQYQe5rwo5uRd3UDegK1pJ1ucInBcM6rvCZ +MDBfVURhx5DLq7BvWCs66K3wHreChLYif3xLfK1wb4XBViuKV61YV9hnWkEztMK1wnI6K8iYFS+g +gQPKCsUV9pMVo+n0WJEV70eEyRUrYCXfRrHihJ/AD1eYRoCHld8EVhxXWJWvIvIK8wavAhFXv+Lb +I2U3zEXhwuqt4njFN6xbBRC3Cvrkm0+rOJQkvunOHs9xhSlZBezvbQFYRcwV7aGk+fam1lMxl6rI +PXsLThXupAp53MQ73frCQRik3fXWBargj3rhzQjjxlMBFSJHhZ2ZChxdKmRUKpoRhi6p+CSkwpSj +olbCBkYF74kKoIcKtkKFsBhUKAMqkhIm9VPkXoQ5+RS21VOMhqeowE4hHmpv8suxDC7I4LrJX7U3 +w4LKjgIbQG8KhDYFAaN6nDCq7WMTprKkMCYthQUz1JYp7K7NfjUFJqmmMLsTBn8lp7C9mkJFg4Vt +fgpzDDepaoqKgAr7IFEkVmeVcArbmViYL8plYegCX1Zh1ycFh8dng8327I8XpoVimEwJ047k7zU1 +DIN3w1ibw9K8wwoZPuxZQMxxhRhtT8R25ojREX5JDI5LjE5NAecmFg0QBopZlxRzDnCBmpisZLEr +EjXFoi1mnqYAu9jMf7GTQIzJGRmTvZ80Y9I0BRiN1RLwWvH8drHL3lh8vLFM6RvbSKnYZ9w44WDu +dCxI6o7pjfOYrwMoZNj2bmyWpjBnkJFsvMqqh+zhJzLrGEt7IXsJIRlfLskwQhK3dZfMe81kUKYp +ej3gZAY1xeTyZOEYlCUfnO5nnVayPzWFC8TkcxeHs1QWJ5VZ01YZdlvZSk3h/MqQzoqpZNmxXOdK +Grd9KYCUwOot0YEcLlN8Uxm46N94YY4pvH8ZK0xhoxU+x9GtiZOLmB0ymGIYhr0wMvuCKaQsM8Fu +Yc3sUfg3mALKZyYOpFlyRs1S0ZqVNDbzVraZrXWzT/tmkDDFl+GsCaaojzPjwJx5pit0ttuqM1nM +zsbEO9NTPJPjzjMo17NrwWeRwBRDPHw1xwjCFNQtIkHzswmmqOHUZxqYQhM+k9pdMEUX7BkSpvCe +Z5zcXITxDNE7W4LDwGAKlZTxLPERt3cmfIJDUuZOCGFFeZh1CFPcpDzt7EjPzl4K7wwHxTMWB7E5 +5fbBFIGeZ1oDBIM96/EKKXzmWeaFKQ7UZ1WVe/JgAFOWhimW2WckUytyiClOznJ9dpah0hym2CYy +ELVEU30dZ3YpZOtSLIvPji0FFw2fSQNqs+qzIJaiNT+zWSlCUCneoxSj8Ekx1qTAsaRYGUkxoZFi +iEiBE0ZIUX5ZbvePwvP2RzGWqEdRyJ9xY0fxV1pmHAV3VBsFEo3CARnF3UVHgPxZhCa/KB5/lmuL +AmH3lhO3oggjRfHeRLHfZ68kivlIRMHwswdEwWVhOWLAHYoV4C87FC51KO7YUCyModDAz7yFwgC1 +UDTvMyILhdVscltY7Ago8BQ+TRwsKBJ+pkdQSBEoPfeI4fkzPhAoiBzOzJ+VAxQnOAVo/a+btf6E +bIFW9hP44yda2ife0Se2KNAO+sSYQOvxCRigbXzi0BD/4iw+8UnPmMQn7gk09BOACLTQKvGAlrkT +feqBnvDkAhKFyxN835lyPKEXnkg40Kx8J9SA5sydSAc0VTuhMuzEG9DGY50Y2XEfA9pdnagLaCCn +E+WiEyGeE9hmTtxVTkz/7A85MYb/LDJOoP7ZNsQJ8J8ZPZzAHdBEgxPRfhNvehM31k0sAu0obkLN +NoEJtAn62IRKoJkUgNatAFrJCdzXRO2ueZfog8rTEJd783OduPaRsNbETKA5spqQCZocNZHMQVPR +NAFiQms80sQXC406ogl/DQ37mSjzoR3rTIzUQ0vbTJiuzET4oVlcJoBTJiJcMqFIyER1QztzTFBh +TDi/mAA2MSHWYUKmMBEHRLMWTNwCJuglc8L5JU7JH4wbGhoXGquEZigOmpEbYa7hS9CWoOGePgfN +C+JLbEhCg8LboL14+0vQFJxAs3wJ7qt4qQOgOZyj4ksExH74OIFG4Ussl7F/OXkvcfrPeTsGESd8 +iasEWs9LeN4l4mUE2o3a0atLABNoEa9ZlzhrLiEQWC6BZAi0THY0gcaHuQRQmksMW1yi4C0h9GyJ +Q7XE44lAy+cuBz20RNR/5qZ+pmafPXvQEmN85i9LDI19pmb0ffUza1hC21dioStR9p/B1kq8/xko +VkKSVUJ1/sAJVokLsko0AFrlBNBGrBI2738vQAMSQGOySrB0Mp4EaJIXaLtVwkYDJRr6eQUaynoB +2okBtBeuEur8/yZdJQZUJRTMS4UmkEIAza/gxHY5+lIJNgjQMKYCzSqVAE3QPhSnUdB+NK2g7Qm3 +BW398OWOCGh0qYRbiakE3+9lZJFIQMZX7s9Y6s/UxqkEUeEs9OfP5KcSWIAWiUsFcVdOJW4KaG9T +LgFNnkrYfhIHaGQBWunwBmgaqgTxIHgqYe1LwJxXDTQ/WNC0BVWC+lSi36gEsNNAm0JAc3YDDbsF +7fSU8PigQZoSFoXGWynRzjOZ8zV4G41La9uh9Rkl6ohoKqLEbqIZhBLiVTTRhPeb/qIV5e5K0WhI +PQleHM2zk1B6NHOcRHwP0vQRNHW7jLSSix/Ji3MPmQT0J22PjppvSKUhXBKOLI29kqi7tAFTEsPn +zhU9Xk6Y3CLxZtpOSYJZ05RFEvs3TRQkIdBpdh6JiKeZcCTw+rTwjMRNNlBD4s+U3EWitlDDUZH4 +KdA9SyRAR20LkWCZ1OwcEuOlpmFIKJyaPSGxZg8SPKgGK0gUSrXDQGIsqVpfIGFPgETeqon8EaKx +mg4/4jkfQV2j86r3iJmd8CurpXrEN/MI56qF4RHQslpbd8S51XjsCGtXg1BHdP2rzZ+OGIm1iOcI +KEn3VI6IN2s+4whAWqsHR9xqjdQb4aetgXEj6t7aBNyI4biWnI2AQde21wjus+kIGotpS0x2jTGN +wAqvzaERXL2mdEYM24PKjGDxDg3XNV5lBAQN6gZwHfXoUMf20fuacWFzECMwiO0cjOBIsQmDEXMZ +m+4XIcqOTSzBItr+7Q7V/esisE22Ji5i8XARFmOLaPVZhFZnEVWxiHN4RaysbEsrQtusCKfJ1qoi +GKEiVs8UsZHI9pgi2EcRnh1bH4qAsp+I17GtdSKmIVvCJgJnso1jImiVzdYSMfeyOSkRqjObnSQi +/MDZhAUJ4tl+3YgYDrRlFxFgom3ZIoKRniISEcSmbdwQMU5qixoiUKvtRYigsLVJBBHj12b/Q0jI +Nm8fIhttk+0hsLYtIQ/x+yuvezOc8bDbunQIdL0tXDnE/dvg4BBOhBtK9aO5A4rG7eOGWCM3bmO5 +VVVza5rPzTRwdIPC6LbZpxtyG+JfrFvEDdEJuzlo7aa00d24+24rNryR/fEGBcybFtDbmRtCn3qD +aNkbxA2BuHtbfOLbZ7T5NrCwvrmDnNwQe1C865uWK6AbQsMNMaHzbbX4FrJl+DZUyg2xBZWi1lNT +3RtHuTcLhG9WNwRNkJrtkpS+LbshhO2bRFk3BJPfJtF+O8O3IDz/NyIcAedqBO7NDQ== + + + ITVwDm6IXCM4lV7BEaXBbXsPLlAj3KEnnNnHwoG5ISoMZ5EaTgI3BKMFmi/0tZE0oBl19VfOmIZQ +dYYY+XBfyhDqYgjTh0uCIWA6XJkX4ggXwqjDZZ6FgJwh57xCILu7qiqEiymEMEMh1DohnpgQXLi7 +W0oIaA33QUJQOpy+CLHZIURbEOI3P4gtfbjvg2DLgzCIB8EAOggLnGA2d3czpicB2X24NJPnIGCO +DmLXEHfVh2uqIc5bH45KB/ENQQfxciY/HCY08T7cVg4CMPHDMfweApCDEBbiptavHETwiZd3AUOW +SRlxqzkIXitxS3niBq2MEDoI1ikuebLiiXuNpzi464tJB/EMVJyrpqaZn4OYYJyvgXziiA6iTE8c +uBKnhhKn6p24n+uJo+wjp4OQTtzD7p+DmFHiLnQQrEyjdBCKxS6sthm/cLGyBpFciXNyBgFL9fQs +BjGpxI0YhF0liIRe2ShxyAcCJkEXxKF0LogedReKOOq4IMDq9JsijrQZcXwgjHgLQpvlT4krkZ5e +AG8KEbgggp04E2OKU+3ynbqKRLONi5NEYIJnKqqcxn3IoLVX3ZmKG5H8OByoIEeDQ06Li9z038GD +tCRng0sOCTe5cS4I2U+OEKScShOVaw96eAxyRyiuC4JMlpMAmGRbzqG+QLscKgRB5A/EC4LVTeiw +fS+Ix1KOas0c7QvitvnMXIVoDns1p7ppc7ztzS2/IDyQyBdEJWa9IJzvDh/Pq3VOI706B4O+gmvb +rXMXXhCj7/FknJavwu+z49cLAiaxLwi2zZxRVbJ1bT4XFf7cIVO1x3iMc/8XhAch0e0s9DsQ4gJd +hMm+OMX+CHTCAhgE74BuRZQJdFbyBTpYbkEgzReBga5sQcQoBk/z54ikgycpbAUh9n7uxvRBP4dn +ifNzNQOR66gesiZB4IoggLsCQUwaHD93gCCCIJvuc6WCICAXiLmBILpmUmxoEel9LmPCcdl+zfGD +IHoAdKLTbPY5n8VXhXYYCCblOBCeJWggVl8gICBZGULnLJ3qWoF4bD4854x4BUL8BoxzjItzQfs4 +eZ1zsgLB4loFQogw5+JU52gqEHC8c7EL8pznqKeM4XPcBwian9PrgNAzoPPLgAgGnZsCAip0ERAQ +h4cOvABhJzqwn4BLYHSBOMBfji7g/+GDdE39h97aP3iNy6vkH8qZ0t3ehrDh0gXpD+HLdD76A4ab +rkN/uHY6evzB5k/HfT80RN2r/TAjdSnWD2hN3R79wKM6teaHZdUpkR901OoEyA/BV6fDD2hBMPxQ +wQzVC1xEnUD44VB8H9q5DzfVPoy+ujPsgwPrAwcWuY+mxK+OED6QtKz5sC5g+TCPfFjzGh/GiPiw +5Ks7wgceKBI+eJaYP5ZR+OC18MEOxgk5ePnreijPPXD19iCr9qCBdc7sYfCvzj/sgYEk7CFwcz2I +AQfWw4DFtrodVA8AlKbhzoqwVl3plYcrFUIPnnPa8zDJefhN8xBGNA+qLw+VYnmYw5OHyciDqsdD +NVsd4PFwfnU448GeKhUPLAp/5UM85DudM4aHkpQJBWAD1iEZeICQfJLu4BGIa68ZQqk/ss132Kt3 +IEAkG3sqoKyLzA7xHBy5A7+PH4wJ7hDeUCfrdvhDR+7xKDGtg7UOdOiQ2WHZYCM7XEvssAJ2uOJd +h8mtg1rWoWpZxwFXhzmnSe+pDq+an+fjKXUoS7llXXtQh2Yxul/WMU4HkLy8dDh8nC8CTDpwQp12 +dCA2p/WexFJYdzLQodoD22Cfw9zOcyBY5+CDkwIIFjOWV4fmED/mgOKEddyXelNAB3WnLwfJ0AJW +bF8EPA4Zs04hKQctn5nGKIexJofIrFMkh5SHdZ7IAVdYFy11PA4B3zgwzDhoZp3cxQHdrHtRcSDF +OmGJw0aIQ2us4xwOSxgORoHPqwoX/4RDhVc3y4MDW2JvVXCQMHBQOgGHx/6GjfyGiukb8DbwDY1X +B7ve8OnVMc8b7I2U5ggpUPFBe14B0LthtUBjXWg3JIt1srrBLbrh4svcEIc/yA3UEDcs5HnW87fh +pt0GoG0Dg2yDVpJenWe2x+ZSLbWhdta1pA3WBNqQr3XqZoN63zqhAYKh63r8QuJ1tHwNBLxTbFjC +ycKGQ6zjAhs+V+yQRgDMYxfguZ7s7rCGBmbHvTVUc3azWsNIaNdj1oBHcntYA3XVzulqmF47GatB +W7bzp2oI2nYiqAZalxoO7HZ3gyvWb3f04jbc3TQNFVA7qIE1U3oaGGvnxGmYT92pAUgquyuRMYSc +YTIaiHjnNGnQ1bwzmTSErHeSku+dNaQBhI7E3jjo6j9+V8pouPm7nKJh1yAaTAK8jqEBoMCLQGh4 +T/DwgQbn4KH+GdoAoT7D0Nh2ymbPEOY7Hc+QJTxROwMCrb2LzoAkvH/kDExTneZvhhkJ72wzTOOa +gTd4szQDR4PnAc4MQ+92nUIHPw7e2cxgKeFhBJzwaCW8ncuZYasJT+7MMD3h0fbB61SD8DJK4Ymj +8IQIJcfwRkuGB54Z9j02kN0phscjtEqH964zA9Mk8Xi5It2WSO6KeNJiBujEe4IZOFc8zPjiaQcY +wW/7zfDKIOS952UQqWrkCVf68lrySlE/eQYe9O5ReVG8DPCutmN5x2hQYpe33mUoaGIe+MR1r9nM +C3wUC+93nffklthlYNuHD41MOGnMM7miR5F89JaW0osiM71lvAy3O8VMK3kZNEU9XS9DrFNPuZcB +iNVrTVgPt1rPoigvg5rrORGE7LFco94LXgZb2EMqAFOyrn7EZY+UgvbOsFJ7Rbxfr9luz7zLQH8S +9y6OzrW5V9plCFn3XPK7p9xlALjQe4PrRHzRe4HQ0DC+J9JlgOv3UjfgkzGDT4MqfEA8fDsvFF9O +dlSa4fGZapHvUScfPuHIlU8MMJ+ENJ+wLgNaOd+0y8AjZx9rEKCC1bB6vnaXAe6g77PLwCkYffJT +hgTwIcsw8HxqToI0J4bDnF/Kj729YVTOb0ep4N199kEp0D4KD2bA9QF4RjP+bsoAj8vwMVoG5StD +R/vAVhlu0j72pgy2jc0bUYaxnQy1R5PBXsmQ3yMZGGkfCsq018gwK9rXkfwhyxZ+3btCCu7sBKJL +7P1jcH8/Bu59DCLwYyg902wWMRyDPmBjgP2MAZ0xhhLtQy+GV8YP0a2Ki3E3aHEVwyuKIU20zzvk +u7TvNRLTPsohBkrtc/0wELrHoBY3DJNlGCLjwqCqfZrCMFLCsCoIwzcOhilq3zJEo9pnR97aBxdg +QKLA8Fz7bgHDfPRlBTDwBGC4wr/wfr/wNb8Q0e4LAtxn6gu69Hz5ggjg0ooIX8CYPsm9oCv2wqiJ +bR4vvGF6geLto9F5oaQwdkV5QXv7vHhhEMELZ96FaeEuBHh2Qbp9zuuCTmPVBWFZpgu50mcMXSgg +IUaTK2/f3rdQIyV5coG7FD0uWFj6qOKCLODE+iJGzRakBFw4jG+h9G6B0txCad0WBm/fuS2M3b7i +tAWgt2+rsgXmeQFksAUc18IdC8L/aiHc1QK61IICTguzN2HWRizBmOtob4kWLkALPN1ZELtZuCiz +ACAyC7NjFl7OgBSzLNgelAXcAXCyo86wPSBEWCwoOHslNtKwcDil4/WP4vH2rXwIFg4zvfB2+7j/ +K0ALAVzB1l6BvNs35BWs7QpC6QpUbh+TK1Ro+wYAHsx9GUq0tg+6rSDmWqFu+6C0wtf2kbOCCJMV +vIoVcAVWCJrts/IqnMZVYKJVMOargtWqQt9UgQJRBUPbl7tTARZ9VibPn+2DoqWly8a1fcOyfeay +2c5IpgJj+35jKrDtHTu2jw7NKcQq60e/WaZCcZRBXUseU6FyYPv2YzXAVCIoXe5sHzq2cnLxte/I +NHaC6qDBDeraN+5xxZ2R54dQTEy+ZfsSUNKxfeRiRmAqgO4nrnTt8z4JEOu7tfbF9EuFBJcKIDJr +VlJIS4Wr2leahr4AMPpUUe0LDlKxKgrWvrWrfWrUvmM8MZYKxzAEWn3E1CUJ6Foq5An7pcIfwbSy +DlMB1rSvQndqH4lX+5ha+27gVPsw5NCofQ2mAkhuTyq8xBFQknhU4I0+BTa+osK19gVDBXsWKpyi +2ncKFb6WUIESU/saiMtkMFk9XaFCQADY+k/t0xa4HF79tO/ACxVmTKjwBqh9M6mH24fNtE8uWcM9 +QoUICgECEypIDUaokHxYP6HCCr5Q4X/S2KmOBjMh7TuFCmzQK5rjNixjVg1CjvahhExvtVDhlMHQ +vpfHgsvVWiKFCgqpJSooRoCsT4YKyO2BIkX7vAaZsDRUeAbta4wqr8BDBezPnwZ9xQ4VMuShwkhx +Wp/mWD8FWX4Ky9G+o3kKENgTZGmfK3UKA11bUzoFsuAU2NcUDJ0pVBRTwPJSaNI+7CyFHVUKkqEU +kpgUWCyPFDrUPgJDCt+kyONdSEFxtS/xUTgHaiTWUr45Cm5WjYJbGEbhi0Vh+kQh6zVHQLUvox1r +3xAjCoOIxbWHAuFys0LhSYRCmkEBuyAolLWPDyhM/CcIoX/CLP4J9vyEYrUPWn3CRjshU+2LxSfM +KHyCRvAJtd900rkYa98fJ9QK/lqs9HJ2QlJ1gsClaTicGV5swsBxAvnaBwsnFFXyhGK+CWPt+81N +2F5tAiVsgoY1oey1D7iacLB9nNMEi6YJEoZpAsnShOdApbsRqPwS2p5MqOYxYVMxocAwgcmBCWt9 +CSPbdxovYf8kEugS/N8SyLV9n7cEbtsnVkuoMUuohiVcpSuhjJVAQZVQhdzHg0o4X0qQo6WEmUYJ +IkIJ656EVctJiNIk2MEktF5JmHaSMN4GKfc1IoUiCSjECnjMAvMLz9KMBJ2KBNwhEoSU+xSGBC0w +uu/6IIHvBRKm577zR1AW0UcwkD0CsvEIeu0IbCEd4U2OQED3ATiC9zaCfNsIlrdG6EgjEMSu8EhG +QM99WmKEU2hTBeIvh+7jYvE+6XcRWDQMZZyqxXcfhBdBq6q6kWbOjHJxhZgXIecgGZE92YYXYTg+ +FXneRZiodhHaNK1Svd2gB7CSJLmLcIb3xW4RULwvZFmEr/qpkXI7argijOJ9g0WT90FXhIUqgnCd +VATbCOkk3qfSqQjykyrCQt63zBSBFb5lDUWQ0YlgHhPhKFHkfS8RJQJ5xCZmTyLcPSKwoA9bfkOE +nSBC+30IZvIQ9ukQYHAIMvS2KnxD0Mz7DhzCD/Y3hIa3qsn7AAs4BPrzvlHlT5VDDlHeR+Mz77Ml +DsGXWax01OV9t9E4BPy8T8ghLNsQmPI+svcUYjxNeJ9HERFJQ/Dv3ZfrjoYw38/0O7wv1HefoKyR +hvBIEI/8cvfxRBmaaQj3eO8LlioqZO/rhFVWWe8bUvY+81QNwZ3tXGRtDaGCyTl23fukGgLS3ldu +FOy9D7eGMJ7D97nc+zbDGvQagm2pWUOg/Gb7a7uGMLCGgKUZwupSPURKDAFnFwJEFg== + + + wpIKYY6gECYxIWh8n/EIgYAhhLIPgkbyQfibzz7LOQgINQiQMAj6fJ9hQUB8358nCCz0JAa+jxxB +uGx7AWh/IIRsIMAtEGKSQJjegDBJQACUAKEBgPB7/yCC+wOXtz8Y56+1FNt+UPg+WvrBz/dB8gMv +vo8l8INGE3ol3j4oXR+sKJvLY+R8sPF9/8kHZPJ9lnww8X1e4gMd8JMAH1y8ewC5PbBd9oDXXA+y +qQdcpQcygh70K/Dbii8EzoM58Gt4eQDFeRjq8qBGyQOM48HfiQc88ONTeOAEPNBR8BO+A7x7B1d3 +BzHLHWzH7WAGfsu0A5fKDsBgBzDkOtB/rANJ8FOoDvJPB+NeOhgHfnd0MK7RAdqEDkTgZ73nQPOb +YJdzAFDgJ/zzfUa/pn+yP+fQHJR+OWCelYPtKgcr8HsmB6sNORDdjgMvHQeliHFwheIgAMQBqfzh +oLBwsAj4LRwcLLvAgYm/gTTfoLd6g0l4g0PZDRhBN2gCP/y4wRn4Ib4N7AQ/qLZBqLQNwtUGkoKf +ftEGWiZga2gDHGYDkscGBoYNlr4GytI1uNcarIs1qMhqIHxUgxupwXOKBwb+NJAoy4yZvCDep8EL +fxq0qN0lO6AW/GbK4EcfqMEN7uapCj8NWAa/+Piq4DdUZwh+J4AasB0JEswvQQ2GPw0GwQz8Jiy9 +sTtQg5HiXLwViwt+L2Hw0y34gUEN9OE3+FlWqMHDcfAjQQ0kPoOfwFKa0oEaxH4amHDwy/XlEeGH +bBo7+MEBNWhuJzT+pwF/GwGRjZn6I2ctDeTB70gazN9oQBr8JtFAPaEBRoAG7D0DpeBn7gzwlzMo +cDMogh88zWC3MgOhYAZV8LtxGfi4HnjOPWVg9mSQX8kAy8jAeZDBpRBkAOUxuILH4I2FgmMPRsjg +Fw1O8CvBjcEC3hjUK0EI/DoJx+DQ/8Yg0Bd+ExR+irPHv/AbNgabW+EXrMnuyBqDYwyK4bezMVDt +afhdcvgZs2Y0/Aa2MdjKfuGk8cbgzfCbBcwzRpoLOByDUturVw+LG4NSxY+WxcekiR/3xsB6FcXv +9mXQit+MEAPBMWCL38J//IZzYzDZG4PIURCOgSiRBRRSBn/6UT1+1MUAv4rBCSYG447ftsRg8Sek +gqoMBxjsQQwau8PkhhYj/8PgV/X4wSLhMh8GflvuvMb6YXB3XKI+fgNNpFXolXdH6V4m3nePn0WR +CjKK/GggBvXfGG3k1wtiABdmxo1RkjhaUkd/wYchBuQkYmDEz48qYjANddI1YnArYoBDxECRR34q +BMmPS8lvGpNfOoeSH7au+yb5GZcfYvAZEQNuixho0D8DzLvZMWKQAUiAAZfff8F55LdzzyJ3hvmR +/CyQRwyA7tJM8yL/XyAu+SU9DCCYahE0+fEeKXHlBdyHNAxqnfxENDvKzxOT8ru+L/BSNEyh4rrf +i2gwsCIYIAkQGEi3NOX3OGBAQOV3kfILGeXnnsCA2VMOEBgEzE1i9CZTkUS4AgMjo0fsc7VivSAE +fwFm2AwH13yBf+1iWJQfeUGTdy8Y9tPM4b3ANF+l/E6scVCpVX6X7gWQY9wL6vb59oIFWH6bEreV +nz2Vo/ID5QVG8IKnlN/y47eLPQIkSGAXuKcLCPRc4K1cwFjHBZGUn1+44M63gCC6BfbXFrDFFkSV +n7IWVCTWAgblR1wtKHJaMEr5raIFjAtmQq8zcdTemwnzLIAXY2bBWlDu6UOphCzoYywQk4sFkfJz +hwVxPaphAb8YFhhbWADpwAJF5Wf6CnBCx8GUn6IrIH8rKEAgG3sKRPnlo4JYcrwKeDLMKtipKoCY +UAU6xlRQSfk9HhXwQGpIBZ7VNXWkAm0lFVQ4SoedFTBIgY2bAtVlCpBcCirlB08p2AVXUuADn6Qg +JYEUYMhvFHSTyg/D0APy/35LmoY7F1hS7wTrgoKuBRSs8hOsmd/CJ6CfDFKi/XndDKBAmScQ1XcC +LNYJeuZHmhOcxAnUcDhBk/mdbgJP1CYdMbEJlKAmyD4TkHAmAzK/F1yrWGfNSjDSDyb4rZcgEZdA +OZQmhLbImF9AEtzl9CmBXJESiHJQglwn9G598TC/oSSo1dcHSXA4nDOD4jdJghK/GUQCx4MEFf4I +pHoEE3YEV40jWDC/XxsBE42AYGQE0C8CH1sEWK0I8qdV7jdkqu+JSGJ+RYXgEMWCCDy8dQQEPQQ0 +kEPQTUwkFMoC8yNLX69dIbhffu2EgI1W9mNFCOIBC6BifdH8H7BWEHxIFQRxCAJcDAS9ufxgCAQr +CAgc/g9UX35rf4DRfkAgP0D57QN26QOQ5AMpl5+AD7zdHmAxE7LSA96cB+LJA9RePFBbfih4YJ13 +wACA5MoW+JAirwOZrA4YNR1IER0YKr9158B5ZQ4wK7+lHGB4CSHIgV0uDsw+HHg1OJDRb0Bv+Tm9 +AWHdQMXyA4kbMLMNyEEbwMaxgWz5mX0NPEKUhCOTaEkNzJsGMEoakCcaEDRpEmIu024GlDIDynEZ +KKYMLCgZWLn8HmSAt/ykOAbWWX46jAHPEwMRPAw4QPFh3Ylu+fXgBU7qVcGAPxLjWwQCDMCN4QZ+ +gWWaxIVkuZ4WoFAX4Mt0gbpQq1wgUHABessPyC3ghS0g3tMCGpef7rPAl8sCExwLXAsLlPkKQM8V +SFAr8BpW4GvmR+d6+eVTgdeoAE57CkCuKaBcfm6WAm7Z8rcKGDg5Eykg7/PyS4U/5icjBSwkKRB2 +d/AwP2PL74m/Lj8Eo7nlFyspoGRuCe2Jgprc5XeSFKDXvjvL6jCMTKIAl1CA7PLj0i8/rrB6BQBA +AXYDuvwS/E/gPXPzszGy/AlgOL9G9RMYP51++WFViSa/riVw009ADv0JELg9Zus/gVoBFKDW8UNO +FlQBBcIIFDCPCaocvw9QgATVVPhPwDSjJPB3rbnOEqiMP4F4PwGQuf0JBPcToPATEL5PgAD8HrzX +WCLq2I4NOy35bX4C1Eh+M9x+Ap3+BDjQT0CfngC+TiA7Mfet1rXk1+Un/aHt6ztXKWAfL80L61Ew +yeBvB7oTiefFCej1HweZYaBHJKgoToBPPX1UI/b/otjHQ0yewNBOcQIFPZctwTrEuVSXASXQSayh +CdTCJmEZjglYGPaVBr81vS+BxxHFa3uZ6y1oLQGk9e/IuY6VADgUHc/HDx8lECOiB21cY+voSgf/ +d1KTQOXA/mec1P/Z4p1JAlUeb2oXYbpSRQLTJEHJeW0Eof8FCdT+N1RWFbVG8gggdhnxRVUA0x1k +sNdIIMJHkMJ2gJ4RqLjaxFpm/70IDIaUOLkIQIqCSV2LQH9bWThuEeCtgXJC6cA3UsFXmt38o3d5 +Ft77LYZc+5sABQKfAlAHeZ2wl4MbAp/2JO1C4M2gjnJz3D+iuywhABnooqNtE8YMkOMgECczQYC/ +zNkUCGROg+MDUjqAQB19QELYJ0WNyRgnK7TJTy3adcbQRup4kyVdEi5Vav6cC9c8oA4rzAD3D3pr +ft49oPteCkBYHq4Dl06oBgCC8u24b5Q1DCY0D9DmoH+6hUpPA2gaRFqTiP29pkwLe3fAKJ/GopgW +dU1dkh1QTUtG0pQ5pODUAXhpQPuA2EFbz3bUQAecPHxH5nKAQl+P8XDF6EQEyzpLxwGjRMIggzfs +UP5xf7U/o1+y0QBPtXBuAHOw9Zu1wqfagFX7pfgpPaRXrwLJqn3DBmjCo26wAdGH4pfM5Geo912+ +qwG6iABFR16lcKvgNIBvFR7grS6nwmJI0YD4P2Ktpa4QfSz+gO8W1R/dkDMDeuqvMsCHuiBZC3Ta +aLS6RecDMXe5rYbpdMjUMQbUFC0eQAwYXpKPRmVp4eZ9Ws/0djBgKLxgXO4C0tD1SMEAZYQxPxi8 +lF0Sv4CaV2hclsddGvzlL7WM1XkBWRd4fb5wMZe6gPJV/NDnjRZ+64oJFwB4EpB5GR0jGraApnhU +TVJQcO9ZQEgHIpPYQU6DGAsoec+BoHqE68PQKwBIqrQCDvMjOssItiog25lOBcOSqACi4zbCAl+Z +vohLPJvLFqQAvRNglw4MBYjL/wE/TAGC9AkYRL4/dcyGsEjZhE6Ato2ahQ6vQIp23MMOoW5uWBMw +7yRAZYFUUxIuwpmxCRPA8HomYAIYJb8o8IyBl1gVvhKgdY54zs13NXwlTgIuVeFnILRvkJ6iwqjc +3jQCnF0A7TA8AvLlI7cUKu8I4Poup4uxPK2mK7+MgOYaO0sK2RjGOGykCCjo9yOnkuKMAiKAV304 +2EV+xQsBHMsyyya9pZCIh1vL8ivx4Zte0lsludtBgOcJwZsmBhsE7PQRCBCfPDVu90ANNLllP8BB +dm3q1A8A1yUMUoZ+r2gfH4A4TQWnFUvLClGwQmOGSbkoMTL23V2WvJEUbFURix6g1QfZb38HGJMS +qcbmnpkdM19oOlsHIAZXEI29sSHIcNzDNgfIDg+9XTww1WL8LoHrtYYDwOnwwggHYCYpRuhXM37J +gXcx/QHept0bOQ7uSywZ+qnni3qO/509/TO8BhgRJBvmBhR5M9MAbUkA0mhGszM3by4OpfIvygDj +REAWAzDJdV/+6+diwQAHgK9P2ZHMsl88ywsgzF6SdohlUxOxI2w+FAbhNH8Q0x+9QEHzJzH0bjlZ +DelUHya4N88C7NM/QtFtJ23FdqMzAAs/wzTdZBJLWQfWkDavABAPvVERH8yv4DQfAfJ3tbj8PHBs +P7kyU4BmWjoQBJ5EfyiAiUK4dAJYA4ig+V1T+HgVYgIwhAUCZFxGto0vFiVAGRvtExctPwKsVQFa +JZ1oEYDXRbgeObfC44YAUrw34UbCz74WySEIEHvhuxynAVkW1OwDCB+kR69c5H8d+ROTB7BnWuAJ +oRDNWYtMB9CUq0MzxZeBaVG0drWRUG0gsQGwhubo1g5lKFgLNIAvf8vxmv47HgOoFHXGuXsiQZOq +qoB8AUwcdxzfbRm1ADTPb87KlEbsWMoKQGI7hhpF6+tc0PoogASQD3rknA7T54KWJgB3np9rxVQe +BRIJgAxzQyryJsaHYK1mAfjDM2ZV3D/dbwDKYIkIvblUMIt7v6LX6yMBAAmc0sIqZkDFC1fx5fXM +tl131tOpSAArzWjo1VaclMZCRQLg/Opiic8zaDDW4SoSxhfbsVjnIhIAhhBpKLHFqrqhaDIkgMZU +86lZpbu9iATATDofqlo9qjC/qxVEAmCIktQwZ3yMUpSFBDDy+BgShwdhnFYazL/lcaCkhgSAZB94 +ytunIcGm7TINCSBb35nIwgZ8CUuUQAKobWt+htRN7s5HAHZzEAbjBTDGZbuTITfPtFNEMz9u7QgD +TR4BCEvETHYPaHwEsCTgAhJ3CChaHWsouDdXnzz+hQNqMh9LkkCeBFcrC30EQPTQ2L2MVeQEjwA6 +TNhm88JkcVn+EcBCQcijItoJaawJU+O9dOEjgL7TXG/SPAKo08bRA40H02s9ArDxbw== + + + pJk4srX2YZ9begQwbqZYhNsjtj5rUdkj+pCIs/Lj9BFlRe//zAAVFA6Rd1RX33VoZyvs+LUqt4z1 +EcAq4S45i5P/vbshA/6W0zid0lG+4OwjgJbVvZCRBTxozFzMXe2S5UcA43NbOZPmTP4fAUBP1sjF +rxqsyiMBBl1o0026HAGM9DluJYcACHeg37/D9/VpOwLo3c+OkFH2IxwBxHc/R43D2yrjjQDoKYLb +T5FsByFniRFA4/IDNDPpwB4jgDJQHIGh0IyUsjYZoD6AFVdfrlEKaCPkMtEcRgCJN9xcAnTScJl2 +LAII0Bk5QfY/T1V2ZJhQ0N7OjDcPyst8/6xQiwAG+YpEMCJXTpw4Wp7+5/pTEb4IYJEMn9LTfXCX +XQSArONqiB5VY+vGD12H55LGyssigMWdWqaWlYLgdhEA5QEtEdqM2y4RxAkxgG18wK/eYnKzHUJB +BIAXyS0QGQEwsjSBTUu9wlwy/1uJ4T/vCnFCcBOIQi00W7FaihkBcKn9mwgsbxqyYmimuUYo7gp9 +HILjKDICqLlYfJR7c1JBZDnBP8ERQOId/mCHwxSiPWNrNzOZBF5G9hHA0E0Qr4U0xPpHAFud87iE +g8qYmiNIs5QNMC0JfYCP1W4sAP6vUrS8EpJIFRKAPZJEio8A4DYcS/EfH3biuqj3oZ0wuPERgB9L +zvyVpdiw/X0EUOue7FCDLndEhH0EME8Jy88w7xRxV7A+AMM74V46Q8bVVNQ9Ov0pNx2AL1oQoX6C +fMpV0wEI94mRCmsAiNlBDUB2TYsOpU4DwCNQcQMNgL+CrKQbNADHSPiPRixsHEzIpiQND4cF3xEA +Gc1bUbRkrLYjQofOTIv60gCwhhjNbI3NazUAZaH1RG0tM4OpBuDEHj25o/tRqhqAM5c7s07GPlH2 +EKgB4AVyGleJrQZgIAVw5RnTtjnDZ0QNwKe6zss1chx0nxgf7WhBDcCnJP457ej5NmgAyA8IwaiJ +B0tiUak2c4Gd5ha4H/TJ4ZXQc0jZDutcS7SnlrbeWOYZAGYqak/AC1RmGr/jWtJQ4+b5uyaEUAJa +0HgYG3ANCgf41PbYtRVZ8DMYmZKUKUlpNL4ICtNDCGEBZgGnAZeYx7lXdSTmFdPJmhG/m9qcrVIs +NhSj2IrmiuXTpvahaRE0Iom04LBcBxZklvEqjfzW66tvrl9NJ/sQF6kYjK1OYljCtJG4II5IjiPO +Js2YjbkQrjKpmyWzGd3manbjYnXWNfOpN1pTWamI4U1Q1V/Wq1gz67E65sQWFx5DghNDTrQcj55F +NpdYCMl+SlSCSB+nEkOff+/9+ef+3u4t+/XSa0YrdR22z9lvdfypitBI9NL1S1Khx9D/tw2aWL1s +1aeNOrlFqcyr36wZlQl2perMxsTYJxsrETf/WfPvP9Oe9LRqpBaeE6yFLdfppdOJ/q+V6L92Qdan +6Fw9Fa2p5G1J38qHas/8MqXf7c823Efb/7GaHtNo52M/telnKV77v2KKnkVktXqwZDducmpjn/xE +jcUfUvmHes4YI+nQtNOx/hk1TXxSmpHp7+lf02j3U+/75fadl/6l5ApFp9SK380CXO1zj/fhh7Eq +y3zTj6xP2CupcVDVXaypZU50F8Mx19+hkhLvT8zKUtHVyZJIzUTUdG/pp7ByCVIulCD9v9KhcnnW +3fWu43rXPsjNMSJfq+JafPGud/1Xt5yR/x2ppVnbKaczLXmW8iK2Jvt7KoshUz1XF/OOTze7GdmT +Ivb39GuFMg2bXhlHnC4yUvJOF5nGxLD2+REjQp0LdTcJkVQmxQXxjBE5sSk5PWRkWCw9Ga83LRr1 +p2L/VSoFw6/NiMeRiPnrodB+0gwNizJL1VdVDnNht9xq1ZQv0ikvhtWYu+2+vDSF6W1dqops10+s +7MKXStJdfrflk/vdl7dieofF9NqnN1g6vaN+m6ia4e1NsKxRWJeNdBj35f0f++tOXLbK/ql7QdxU +2xF2UMecCfvzkiuLWL012UokJ5opViZfWJqI6T3bd/Zyw+WTW21jFqTp5jfmNp0yMSH6FN0goSB6 +ybT6O4TGAVIRJrRDj3dCKxKGTBowYFDACM8YqTCeOAxNmCGDpWE8BgwYLFiFOhuhpMEuJ5CLakfD +V6IRmxqWklZUoAdvpkSoHOMIUt0zLvhfYJA4tMqyhbZCq54Wh6jCmqhySEoc6Ox/oouIxGiqZF6s +wFIgmSOXAzssZ4I3DwezXKB8t4rcsNs1m6MsXIOEoyN1IuRUBIdpQSpqVUI1umyphJZJytCeQgKp +j6BIzQKhwChFYBtIjyXcqqbCVS3EiAPdQfKBFkh8Qfq4/od3Xp5PT87niOBPZBiUWkmECrbEkBKh +KC0n0P0C9mAHGDBYQFFLJWZKQaJAs/DKPA2/hPtUC1Q7XKISqHMPGDAo4JWPQyMQQAENGDBYoKAm +GGyWUFrBLlAwr4gCcxRIgAyQB+QF9MDAAQU9MEAgAQWrAQEKZhCBAAoqgcEECSiYgQAKZgAAPXBA +AxFIAMEAN0X0IUIiFNy2QEPKoFTqNZr/frlSWRBxpF7prKN6ROs/yih1LLGf88qRkXYzgq0Qac6K +xu2kk4t1Reu+xShmt4TMxgx3ImNM7o7sbgYnI2k1ASI9UDDxEokwqYaoEunBRIk0Jowy5FKICnZI +JoxKIYJBmhpjzEehq9VDeMJEmBrOwmyPIIobJgqmiziRoDhkYQtRrilXPyXWTkvF51EURhJGjZIU +N1Yorn4JJ86LxXFNJ6LRA4kGmaiKG9hgo8rJHW0PouKBIdqokRb1QKibIB03Irh1CocoWdVIuKM1 +MQL9HoyEN9oeRA2rUWxDtXVPoRoT6sH3Gk+FdEamajoMUg4ydhCpTVEPOlIVOkGiETpCAwkCYMCg +gCiq2YToAcsMQS6GLYvojrkVVnNPMYMVaGgG2j2qUN6kwmIVi3khfcSCC4/PI9zl8MuEsifUSr4F +UZxYwBQhKopeEQ5LiBKS/64JU5SEo7NRcMoT7M3EhGxUY/hINfg1qlid0idU6y6aQMLaP1SBRBiX +NpBIbWpUEmGzqZja1CUaYhYOJEQ1gR7DSesMnFFgcUHFKqoSDh/y4fOFiFBrKWHAgMGC98VLqKiG +8ooSFaEibcV36XwKhxaFeohCG4stioqCvxhqzZcFpimoJBucpFFAAZMXCFBIFAqiKI7DODjjehSA +BVs0IHoUCAgSCAQQOGIRA1EHACACQACACAQAAMYXrNgZL1nmbHqGK40KGJ3HlcCe56r4+8FebtTA +lxlAgm7jm0Ei5kHzwRxnRP4+qiQTY++JphLNTs/T4C7eXfhw6Imk65KOWtx6gjCQ25Fhl0qRpLsg +v/IEEpviShwjxsPehuIg/TrQ+rQlEYivSDUZPAYE5nJ9ATVnUDYV56twz4KguIpsCThDajuNMS6J +YKuvKEbYhL1xmVbWn48BIQjsVJYJwvM+8rG3H6I7OpvCj2iVgLTgrS0so6iRKXkEQOdRo0Q/wipd +EAz3ytqf9/mHRYjSaVBDMqroBFXvuYCcOAOh2EB1bPLqRRtTTBMJjCQ1SZeGcse7UGrFJ/6ij/nU +iBxDDb7+BOZGT5WswdJ90zC8ymA/moDokwiOtgbS3meIMc8YJDFIRYCom/HupfrpunwjMmOfA1MS +yXY3W3/X2kNu24x29MEdJvFt4bTG8q7plyj14YnYQkz8uM6m/ljm9mV6cG5MVleEPEv2EXVbhXZx +QrHOLKiHjKjYDRyErt7cla6EGtXW4MQQp+YpcZc8NIdG9xsKIFVV0fnLGj2mEJjqgRlsn43Iewdz +WpvPuye7JNdQgxrd49eMh5z5NktN1sLp/I9HR4iUvJ0Sd42N+wS8u+jW0Tiky6Jyn2B8tBUVQvBK +knADHVD1nImtg1b2AFsghaOVMctcqlD+joX0vmJL0RaaeLPo6rabkitHYRbZwmUEkz0EXBcRv+q3 +1LohxKXoKvxdrQ2uEiwy/A12iubJA/d9JbdEGkzDohUBdeVzHzB7XH6T3YKbgabdNCHSoPFVnmIm +TtQBMlqznoWPHb174u7P2qp4Bh+GnHQ1YLeixpikAv7xetFKoFIby/lmwy17/OI1w4Z1w727qNQV +WnNv+XbehxOnBO6r1SQy8P9Uo2Db+j+kaQIP4IYeVt3KPNztxJ2MYlUd3J2l1CmckLLKhgdSPUA0 +cDLs/NOmuovuqNXB3pvXuxflcDzuGu/o6zfJ2bqvdbhsL+TyIljMzWIyvQfbU0BQ2YNCCExmhgl5 +3TjzoAwU7LHMaRKKgucEa+zQJxWNa+M6guDKy8pINyVQFBkcyO8mespPcPyDRjtvUwxzqsHxEviK +6O6L18AeCwpuo2eCVW8YVkLmPODx1rg4eQP/g1VJJgpmUjc9hxQBjGS0omoeWMuD1lX9EYIiE9Q+ +dqDwlgdmHSIlt4FNXYdWI/AaMRmKhqA+WwkKTTO/s+s4x/TKorHvTGKGdgrZ0PXI9ioqfOKi0Uhh +4Hgkaq7X5GnpTfJmYefMpW62EQ3IQvCjxfQVEYGOfWXLsp1ZPBf7dWaynpWJBBNHTxgC4p/Kia2q +vZ8DMczfWEaA48dgpE+FH5wsuAs1LlGrR5sFlced3lOfK9GRTDuGbMnLavguKE/Tr6oRXY3DiNdz +gS4xyMOB/VzM6M7oyQdm4t1JUPfDxRUaaX4wBi5+sR/4ursxqFmO0DvjkXW62mVuMSSBk70Hkya5 +AcPQ3emPpzHsUXMML+Crewum4K+E9FWtGlXcfUW9q+netcPMsBvwKhWBx+ozrU7YIRV4iZ9HAxtM +pmtdeDvLsAwtbJOwGYENTfTLe4Xwr4zbtp+l4Wyddl4CEJJCAGMRcqeux8MrH5MVAwc5mHWSxz5w +GmZSrDXqU41hbrkOECbDAsaVO7iSXvZPqh+xof5F8EbsGawH+xmNzYpkccGXHvNQb54T6O3EZYuR +VaiSgwU797HdK5XAVAv1+CNGrYcgOEHf2VO00e0NIHEq5wiQabrq+rUdFRCLA9MhY59NFupMlvmM +3RzNTEkm13jopGQYtD7chz5FXveshpdN1zi1Hm1yCdVH1XFmaL0hyLRKAC5YqimurE1Q2DftrSVr +IOmvNL78s3lEIhigbtwStcLMCCqIBfOZ3474QPcQanUkIGjCMvuiLnobly0SLFsObjgWPEyCV4ul +L3U8w0H0PSPvQyiewtYCoM+VMYqqOw5VfPA4kWgER8t55sMhbwbHUIGZOA2Lqva9dwNrQHHvBSth +uCmwXBixY2a8ejdqoIr6OPmcTAIu8dTtouYlHi6YoaUjSIeyTGePQZ5p2DHQkh5ttQRd0F9UD05e +7f1GQPTVCh4Rm0sI5RwXyrxl1d3lJ74LwFCg9dLxdS4VLB2KwCdSb1uUZj+qC19AVUl1yIx8VAUo +IAqw6XolhwxP7QOiCDbREVGG0aXjbYNqxyiciqZEhRIXcRE/z4NJs2CcBYbrNWV6Cw== + + + QRLAzB4fnm/JNP6lkUXEBoBuWD5yHquVD2FYRGk0iktx0ijkHZp2aeK3vJL2nzgqeAoqttOP0Zue +0hdyjPZVdqq1O0rbIjdRAe+vBumE4z9N+UnhnvtZFNSRBFjFH7ghfAav9PmTYRW0AMDkJgPnQBGF +3bfVXbty9AZ3cIPDwA+f5EAZdAvYSCFYHJnDQYQ3IBDAJL/egvgrNWAd+AgK4gQaHQnVM+c+ASaZ +uuoCo80zVTQgL3sRlhKwFYmbs24kdPx7hu+6OmxP/5Fg1MLYsYiGu9D4eyOCVFzQWry+smSSD8SR +aD32kUrSUHaQ7Iz74Wgcg5M8rXDXB7f6AgYR34jZex1UecZG2LN+MK9ugsNrHzVFCL0r8zwoor48 +7V/lwdS1s0s85t107tfjGSmztEkxbFgIu3ZqmTeEAPQcEMFuZzOAuSNM0nWA2yTL/iKTvlNt/HxO +BG7Kh40E5uFzp0ZfdtX4EdYpYP+T081QMWjGyfSJZz54ecyVAz8D0oIowfWUnmbvqgwnTWpNFIDH +Jkl7OsWAbII3RL8F4oypMRAfL7yNe5zRisy6yTWl+9zOQJXRZs98FAoWrSWUpov27jgb/xxQMK/T +rd4Svq8OVgP/GaNu4tteSvikRsUkbDsFS3RSSkwK561iF5ttSj3tHkYOYCMiHa6sC5DOkNJZJV1j +YTIQAR1xwiTngsNmKBvfc49DuND8BLKFQIaa2KprsrOoN9INqvEWYPl4Bl3cB2+aMGgqOp99HxXA +c6CAES7yZQ7LDY5fDkIcRITmnp950Rh6VEkimcU6eqx36rnUw4VwQ6TljaWAkhkTnUV67rRlzsWa +zWLxVupWe6Rb7eyEOww+NSecpQZTl1EbHDw5E01CKbvwfVJR/uP8TS+5y0wNf9NtzMujn5ln0B4k +mFDFH1cPbfAQmZGhTKkAbAWmqNytCNIJLWgMt+81zbsFOxQhTFbNSde3B5HZ5nlAe4tRMRs4jq40 +BXci5RDGyzIT8ZG66uq3mKGihSdNIR4jWomzBeFMlxLX5YVJZUVkumpcFelJfnxplmiAs4JvlboI +7jgcWpURWdHv6p64w312iTRkj9qFCdCOLsfj54SO5esyeo+8CJRLGpZLuVYP1dpn39UoXbzPaX+p +BKon4JHmf1I7b3Twbq6lUl6MaFOlnm8Gs16JwUEKbMXYExkXkCroPkjqoyBYauPdu+rFB5nzk2kb +fgX9PMXYDMgVMGJyCZ+aA/svqABqQSnBdjoZRBau0zLE4zK4ZMhw4mMQUXNk8ADtRddezK9lXmud +OlIc5De/luCqwtDpK05mRv5GFDF1b9x+Yg7cnIab/BlC74PZBYiBYEM3g/jUZwbUEMx8a/Kw4Esp +5Mcq7oiI4PvcakjmAYFPC4AwvCZKIikuS2FIlbEOGXCxHRg5TObKhbB0WCH4KypbWhx7EZOUh5nZ +4SCjgBplI1yWTd+EIs0k0TQIIqkuBB0I4Vz7DoDgZPcdmBzA18V1aFYVq0hARHpLsD5tcDBQzC1/ +fATgajHH4L/FaFS0pRJ3QLW6RG/DL5Wyu7UWh7cat2avZ/Cgg2E5DJh5LtUlErh+QO1WNsbpnqsl +DZ4fwQOb9ByVRgz7BJkKS+dkHLov68aAihxzjJx1AToijjlDiQnOMluABlTrWqTlqcLR5HQUFglL +/34SrJvaHGVAo7XWIqSxcYL2QRE6ZVyxhRZAzXmDwzEsc0KPJf6RfZiDc4nEgP9UwmUjIW/jviSh +i249qwAAn+oh/fQqS+xEYbY6n79eSiTA/OgWuApd/gYOpj2qPFSvrzO6Dg24G2w8kjOegwqCqIzb +MIlvFeJ3HJHhl3esKrSN6JKFxOP7V3BzSE5xZ/cmFX68EHA32JONd0ktLZkO7bPrLqAv15L5jfFg +zRynmzBZKa3uLjiB6z+gmjsvLRR/Zx66QcRua0y6eK+iJ5ZE5xKY2WsDy3XxTDdWnOVqSePictPA +W6nhmQ/4X/MbpxiT0SunJdSbCaLgw2O9gfFEmX5eawxsKnll7VBWbXuagW2eGzCwLCOTgkkAqYzK +xhBsmev6tTHe46SoHLP61zzmMIFlUPSX2f3B33GbKJmMDQUmSl3iYEuND80f9KZ+mg0vmxRVKdcn +sR10doR0MG2qCwEq1iTo251i/iT+2HOCXB3lr1SUFrNhSzHSDuHyrOpwEb4e9nQ0j1dvnmTYApGH +E5zKHKzyrmOhjSn4oEkqqPvb3/i4XLhP5cS6+Zi/ZhrvVHjAFSjz+e9NhkNx4mV0yBHMaPzh3naL +ruDwzjfj3oxcYTHUmBLXjuHUk2tuk67trlpOf5pgPlvv4WDRf/7IivDaa/O+DckiU8mAwWB+MLsO +VPbx9f5cykEz9tN06BD4xkeldANT+GPcyXN4RWcOu5AzOo5pUJfiKhepxbsWH0PwE7AmaDK6r0aq +NI6YldWiGPIfuvr8EUg0rwI7MHU88/rSg81gk7IqAGUPAu98hb9J5HOWJd4Y7oQ1KHWFZmRLDeIA +u9wXukYDNidMoyswQG6bgNK6XJsOrZNCSGccXWLrb0rGAJiU2WPWMRnAukdaYvmmF/ulm4xPhAno +9jYYAE1CB0w8HrL7h8VpYQla2UDOi4D80hSQsT2wrxeJ/138eCaA9H5BTl/DtHhkzgF/QuR9w0kE +30tCLlnzkmLqNfySNUpCEMQHqUERCDj3U5aHmnPlpdAhI7ieYLmIx7mMQdmGVGiD5i93lAQcoRh+ +mnzNfXgeTYkRsAbNqK6g0V0c7RSSaht3koCeMSBGmlzdzBshPIbaL1Mh3u8770qMjshWyAQPBZep +WcxyEGB/gzViI2e38Lyx+7vDgOHTCLNCLx6YiCNpoR8vJDtKFO2DAvJ8n24inyjiTmqIs2HgXh/u +upObfLJv4zaMMJGQQD7VjvBw5Io+fL+HmBaxW7cAjcgzZtG+1GV1oR+0MidHDUVpMEH1QWiQTCwE +EmbkSjBstZjBcJpss5+7PDWSaeMfBWbo3YXQRqjNex9eGSVjiQLNHwxKDzYuoxd4gSN/QgfwdqkV +i2Q8amuH81+3Pj7v/kHWJu2C4HirLsO1gVyLRe0w/LnOcDtLYkAgtkZvOY1V+UAK3Eo4DxpH9OZP +4YCyrH+Gh0DHNK+s60fKit/CueK4Myp6mKBgaXogxS3J42Z4M8msaQMMHUwgWB7ZKDd7kCTmFaNK +KLKhFy6mFMjQcUcSZa+qMIe2OkjVHvsdD1MxdHLenBG6nK+Mfg2n7rdzSW1+EMfUvPvL96SmB2q8 +/DJ7Pvrw4qygbiMhDmO310CL+LOmjMJtLNyb4jeInH2h9xFxaUCHdD7fgsLVnKyZ1DZEUNwgwIqZ +3y8qMIyu1jjPAfp6nDXC6Yo7eWUoPT/5Ap9X5kReVr6xhAO3XGqxrLRsBsBjFeVqtEi88HTly22I +K2+a+FzQmEyDywg4Jz0KnCFf9DeDrq6zQUbnhL+mbh7Paz044SjuwkHheNDF4lK43Jcko88C/RIb +ejEPhiGWXLoyIyOZij/SpANETNbZRsXywX8yUV5XxxPJhunrYF0EatoYxeEqD1TNMB0w9CT2A64Y +5t72/fSD0YS5VXOM0s1mucJJpqyQPjd7mgRzb6zOJpU9yVsoCPXtOezxsQRX+yEt2r/gHtPG6yHk +4IqSbI0YJfcEkHvYynRXHRfoTZpar7CUQRqy06QbCNILG/KLajtmDuPKLEPdsZDwHfYSRhcximHz +sWCLM+tX12V6zvs43GYBV3BeVsUSJBGM9dD79Ojy4INLry6nSmMirl5oiaOBdskyeIVW0W0/1b4M +CJytWjsalVlya/RfrpS8nTxAXs8hc/V6NBazVY7YJ2yMHb8XIMjYqKWPwBHkpWeeMH2MZxfc+VTd +8EEw8X1M3EY22oOpzFerZSQC5Fk8AYlPNRwaJYJsohxYgrHotYalkqX6b6t+52zBTwxuLghjE7qB +j3f/Af1/rID3r3vcVbpjQ2gcQsri9o6HrlioZFXogmO6Z0Dai3fkcx1bScAVUqCYYd/VE/7xMBv4 +Xyq2wsJD4LmU5MX/VKUR2o+e7nlL+NKqOkUuE1UN/fHeEuR5fvhN+Avxm3CZHcHR0N11VrAE13/m +vKLxdwWR38h9MMwZTjjRPwllCrgjThMoo4W9x/AU9f/NQNm+VzNTz8jdgF0oI/jzb/737FocwYFg +WZ8E23oU7EtQ3tITF2J+tGIwVXm7wyyjBRYpf7BrH8KWNRI2VU3YF8WFHoU1Ji48OXHh4VhhriQ4 +9t5yAw2Qab8zcaFQC2M3aMQXJgk7PIYB4luwoGF9JgRIoEOx5Vt2jWH6YpgRYtijuDgOEv4Pw6wy +w3AwNnGRHjkMo4YTF26KFkTR8w2QgrB0ktHHNhj2I12YWOClKNj2YAqKi/yJC1yzDEN/ZxQXrENm +GNhqmPOZYa5hGHkJzkmifDCd4iLhWJ1q7GFY1emrC6s9GEYYFvUuw76ihnVfnrZumISuNUzKwTUM +A9ka5pJ7EAz9r2FeJ6tjYaatuEi8W+poldFP41f4ihFp8RoWNVArSq67hgW1AxtmbDjserFhaQbD +YQsoFhdfzr7NMvXtXouLBEbamfbCbIyuhYnuxySE32CFsRQPNt33Li7S1Ha1sBPGxZiwx7feicm4 +kMkXBsU+9MLQ6P4o3z6NizwtjJ5xoeU/KfLCIHdCpGMrhm1MQMSw7TbDct0ZloqEAs8wyqG+jAsC +aNC4mOJ8AztDaNhxxgVzkQ0Dc2gYiAe6aVwg8KJh9qUm41I5ETRMLdowBzZuw+g+NewidGsu9Y23 +5LbMhkrY5Hr0cljo7jBDIxdd8we1H2YBBrGgDzE1MGIOD4lFrhIDPxMzeDyxp6IYsIc7xb5exbaM +NXC/iQ9crXIxsIIL8Ypp2xhromtcILGMlWxc3H3GoKLGQi021lU3VqMgw7HzmWOUApriPOIzdmse +q6Q8dqzPY+dC4ik2oxqTeePCjT8Wae9hIEMKQsayg5o60yGP6Tku/BrZLHesuo9kX4eSHTs8BJCs +2zXZVaaTZemTXTOU7TgubvNRBmWPWCggU4bauCCLyvbNKlNqXJj6vbZxYcsiNy5igbIex8UpaBnk +olXPMhxn2XWzrNusZV3fslajy+aq8rKm5ZdtCW7yLIdn2d0znFYzHBfI8sd1K5nbRWfmsj/MqDPN +LDku0lXNaoHBa0ZQUorjgp3NNBU3i5p6syyDsy3pkptO5QxNz5kC09l/42KDr7Mt3JnHgmdT2lee +Fen0jM3cs1W2levmPjPu+5mM48K0oOXclkDD1XFRj8tRUmcsOgUpr0bik4MW8Pu4XM5xQQq0jAPi +uCgDaGjjgjj+7PX+xoU5/PvMhflMQIYBxwV6+D4rX/qZz9BNVSJULokzPcYWJNPPsnuWcbhnIbZ8 +xr77rL/Lv7Hc942LJP6M3aARATSJjKcCzbfqNS70BE1CCGubgO6PpXExV9BYJE2IZQ== + + + XGTvDxQ0UJh/04yLgoEiI6F/gVajQEviBE3tHDQPJOMCxSdbJbRkImZcaFulERoREWLMYIRpXJjV +WBG7QUOEJgnvIbQ3EmIBiUEb0+bsvZE+Yo2LlEFrjmkMmpTGRf6H6UaSg9fF1b8MGjV1sBGhgeoK +zT5AQ3N1KCqfoV1laCsEVRbzeH+2iwwtBcRYFQytuvTkQvJ8hijohvb2C+22MLSXysILjW0XmoBu +GlOY0IA2LpYntFUTmq9BgwwDwNBkxO/8MTT4CbkpQ4s7hVbpKjRT4yIVuounYjVVBaNaXZBAL0PD +Mw+Nq0U0g32iYaqigW9cUOpF2zqjaTguvBktmhsXt4hGsxRtXPyvaTDaqmDeT42L/7A0GtRqNGfj +IieNBj0YDeWKZutEI7OIhgQlMxfeuCAeZS7SPyuB+hgX0b7nxgW7ifbOEdECzCVLmVuGIHPMxoV3 +2vOqp9DScUACmhTYMjQPuuAODW5cZCRebu2vhleGdreNiythMTS2Vvc3LlAyNDYZTY63cVErMbRX +jYsuxzK0Ldm4CLnGxY6hmdR+Ci5RlZF5d84Y2isKzUE1LoSd0Lo8aEgVNBpn44IoZqBVFA1CBU2V +PGhojQv92PqE9gUKTSeycWGyQ+7uWSk0u6JCY+AgKVZoNBWaIRenoJScZPsrNNVoaH/GRcd0txjg +c4ZWFHOFRqMyLvz5yO/epjypqSyLCg0Q4yKWrNBsYoaGlHHBeGg/CV09NNqGfWinI/ih2dWGdkbG +XIxxocyDcWEwBsmy3vxsMAmt3AgNKF1c4OfpborQ3i0ukq/QEhfkqA/x4mK50NozYC20cHGhb3Fh +jmShvbhCG2XAQju7uIj9tKQHgou3XlyYrjU01WxowP+hoYWLi0W069rQJquF5mZDi/qH9uVItPzF +RYmiWa+mYNSiJW0ymg7GRWujdWtHc7sfjWlGpCHLRNLE16RBeZQGvLjgstJaMC6irrW0Wgv8pTEx +Lm7INHAYF600zZVtWlfktK9rp3Xb06L8p/U2Qq07olYrjVr24qL1SI20LLUNxsWc+zQ1ufvUoDeq +cfqpBipWjV1YzXOcajWo5mrsbq8mhIKwtiWMtTtBZa2m4FiDxoU1YXesdbqsmTEuIj9rVk3UGpKM +C7JsLbbdmjzjwk3iWkbjoq655pW69uW7a1+Y15YCX4uF/NrsQwHb+RVskkzY0BoXDCA1jYv5r3V1 +sWl4Y3vPuFiAbLUm2QQsZUusLZs6MptCxoVhm43Kdjbm6oyLHoXMvSNpXAx/tioA7Wz/Z1zomNps +gJZxYZHZCAuN2a4YF7HNVhdKmlDUqbNF97NpZFxYhzaqIW3AZtowD7VxLVWbM2RtnGpAKYPYhuZm +m8LWtmO8eF0e44IYui3aeJsF9G2RB27AM9wMvuL2n3ExHreooNwcgepjdGXiG3NDN1HGhSnTDS+q +buK8bp5+dsNWcDc23m6exruBMy5YA2+tjItUvHUyyhuZOm/bTG+7vt6mA/eWJfi2Jfk2OtK3LLdv +6xgX9y7R7S5aFqHab+jO9jeu/f9GhAcxLmpkEgAnQvvDuMjM9zeh/Imv+83Ok/0GJwHGBTEUZL8U +OX57IX77cv2Wv7goh8/fwPZvoosLlxLgVv+LC44GXO4tcHD+gYPAuCCh4OoYF3E2d0GQMAEO/84B +6eBQFBdMQ7hOiouYCRcEVDhuXbhtmOGy8IbbxsN9QyBuQnFxoohTZRJ3I8WFDH51uSb4GYB3gVLc +V8WFe1dcwE1xl3biQDo8cQtBAb1L/BNnGj174gyLi2QnroISp6y46EYnzjr3LS6a7WWKk+bo4mIn +YR7ksxMH7aa4PnIvLh5zcYG/4mymuNN+xVWY4kJaXIxrcHGRuVuf4nTXZKY4/IuL0munOIkqx7hg +CDBXXCdZt7jCty0unf2cx1oceH1xFjnGFVqFH9A46K3NMa5boHG28IujcY8nnmiOZYLazKJKNA5q +br/0UKD9HpBxKh7jzIx4gqogIVtA3wU9yQC9uKAa4xAtOHgNSVlc0BvjbIsL/wRdXHwvbrXFhVvz +yOKC+imJlouALS5a6Lsv7llchFyYPnZbYC9ukLdwiRosLkon3OKC9C4uRvoSnu/CeXFBgNef1ixu +VWtxxuYlKeNiCBu9OCsJKEtJl6ExxgUY40rPMy4JNo5YOM4PBOa1WEGOHwdOA7iCtloa9/uSXCgu +Sni0m8JbByjnYUW5JU45t1c5AwKWu2FcDFoua1xOwqyXezaYs/niImld8Q4UXMtbvKNl/Jnj81tc +gbstLhpss7gw5XLwFRe1yfEAUglckeUcc+qcwO7OLWueM4s9b2d7PDdAJ2UAnfo/Bxrln9OlFypi +7/8c3AC6VEbkuYQQzgnHkxXzcOjISnQCOD05n/Seq+fuPncCdNEJkhJo9ZFt0Xl0xKLLgi06zV10 +U/eiu3CAsKlER3uKCqKbVFwwEt07R3RYEZ2d2eYjm+LC6TgN0amKixYvNUNxwZAt2dxkaUF09KUh +F8rYOdPERTBFx6TUSYryfE4uvNHlu4U2KI/iIjIBKS6mKtN6J/k5A2H6Ki7GqoGf+w4pLuxWcbFj +8p6jxT23naHzus+5Allxoa2tz0nAP/ewuBgc6IoaPIfQiafryNAp7Vu0J6JLqaywzqK7vUYn7qOT +qUc6qlA6e8VFytJtiZiObDXdkeKCp5vTScKn07JQR3YcdZJ+qcP2qTMfVQfTWJ0WXZ0HxUW+Yd2J +zDpt1bqo7K1b9bnuTlDJ4sqxurcUF2ASP53rJGIUFzrT0J4LRNcNeAsHUbtWE5BITXERjcnP57ri +BZzpCwdScbHbSrJtAYlCCUmQrlODrhOJE4sLQm9xEb51KRdIa13MlHv86FnaJxYXw7+Cbr51jaPr +wkx3K5pAdTKKTde9S2ZfeKAvI1JOxUXPhDN/5ed1SryFmXhQXHCFmbhgV3VhEheAC01I5UUS/DrG +3eJOriIumqQa4qKr3x1BXCS06HU4r9cZaSJ6ndLEFJChrTof4qL8W4LNX1kFceH+cHG3h4uJDhf1 +n3iKMHjfZ3JdZ0aJTeWSVSf4cFEnrZ1qYFchetbhAsCuyxwuGruuSyFUz3K4kEDV6wK7vS6h7joE +I1jyXafEzPdwIaqzw0VqHi7s5st9ua7z4eKWOOidknpkig5kYjHBhd73cJEv16FjKrj+hwsuxnUT +Dzd7uFjmhwtZ5rrpKY3rXsdcJoDdD+IiBsKuWgGLROyimVdjB+3gsOMhEqYXf7hg++xKCW5/tBPJ +a4faaTdrF3SxHdvaThIz5Yrkt1N+uFODuLCOO+SHC46Wu0LERcbnriQccXH7OERPd7QD4+uOaN/i +Vg+SxEUsmyxxIRvc9SYuoEnvMjGgyPYunXX58Ix6+84d2O8c/L8LDoFnoriIYgSPTXHhNHg5ios6 +yE57ZDYO2pY0QiKt8CAUF+UMT3s8vK5FvNAFbbmwPvBgnXgWcMWbeKxNvHziIgNEvG/igjw8E5gh +Xo0GcT5xcaSIh6G4KCeeXwmK1+rEW3NPXDBPvIYmLgKKtyQknjY2iddFirclLo6J4uHHc1q80bTF +U8FHgNpqtXG6Fo8IHk9cKDfG22Jvwo678STe8T4XkIcmIk8Fg4NsR5KLF72VN4ji4tqgLQ8+20d/ +eWV6yDzsth1bNE8y8fJZm0fgdkjJea8UF8naefWk4vfdnrewBb04Q9GzQDgVF3E5OcWFmHZetT49 +q4vUe1GpHmy5eqIoLmwemqixJy6CW48yceHc9fJLXBQT2NOi2Pt6sjf5ZuKCz9mbLtCdMM+3nuyJ +C89cexF+c9szVAXuwUZyT4SEdO/ZT3sWiotkykHfcT908NVLVmV7L0Z5TcW+B0pxwf+9qCL4RBQX +zpYRvoCroR7hwwUN35Li4hrxeWXx3b7GN4U+vtFHvrAR5bsKUhUhZT5luPkMuPMt0J2Avpck+tQk +fS+KC8VNX0Y9cdGP+r4Bq+/0Wl+UQUMTF7VQDSo4IfWCATa0r0hF+2yhfwvFrAf2/2tK+2BMN/1/ +i21/i/3wb/EBpn0IjpIUIvpbrGVvhIvJhFFzUrZ/Cz8pbt/bGP8tYjyNqCnt69D/0z5BEoraF5Xb +gqt9vXpGLPXAAETMB2uf7W8R8oZ/i/YZI0Kqfa7b2nfqta+NUdi+bEgfGnoBEqIY7tOX4KxEMn3y +v0Uf/xYXwl8R1fPt0/5bNEbGBBlvX02pSIrF0ucC4KI7iEeocd++q4koy+fSB4pLdX9T2X6Vf/us +vX2WyWBQCZh0aOdNKOBCtSfy8KX3fdl4LRAh+/ckDbiQT4N8H0F6Zv+uJl2ljfz2BWG9wwIXdytH +b18euAhvn+/2EZLg4ua2b2KRuX01276PgS+4aBnoFmravrKCiw9oUrSn2fZVgos2ep3aPjjDB+jz +ve2b1fZpwjEgzfYBjjNEqWqo/YJECAAEwNGzJTlDgDGyfUDcANBUtQfStH2RxgrJWmyf2umoBH4j +lFkA22dpXXhXeWLwyqeEr7aPm6Rn+14ZYMngQv+Wng22r3WKoqzP/toX0TtrXxDYA84QUY1mNcgV +LMzBRbL2pTE9uVBq9CGz9rkR396gdzME17WvrscYa1/Xat/LZTeEi57z7VOYtR8vJTy4OOY1uEDf +MLigtMHFanZwMeaDix1qn/1kqfb50tqHu2vfq8/aJzutVO2DMdGZtMLRZ8k1enAhvfalXRBa+z7X +CeFiZX6KE//g4lrVV7faB5IiYp2f2ofyHVxY2hjVPjTU6kKuo/bpyA8uJiBhMQQBTQN3DcgEvR9A +uNht5h9c9DS4sLnY0MFFYxn/PvRpH/Hgwt7zly1A0L9L6E/SPg2OHGQQCET7+k5IkIxizMHFxgfJ +ZpOlWpHI4OJIU/yQ9oFwScMXXIRoXxtQ4FBLcEGXjLCRYYCCC1BHBXKZvbTv0SexfoKLf2B/mvZ1 +CQEKLqpShWpfOl05u1WysODirbYKfZgIa59DjOsgK8/tite+9jxkfx0YXGhrX1K8ngUXgH4pVqoH +ka59qX0oI9Icu3eI7bu5175MJm1BsX0Yz/bhyplXP4W29Dj1/a0B1/YpDnZu22fd3L67QuUYpMGF +sNzXwgGESSTh6fFqmx2b+wwYXKSFvsHF9F+qXepz0tyHX0/3CQcXwg3oPsCDC/0OLkra/AYXLH8g +3ce5AvszuLhMRYMLDei+tiYUssFF31A1YrqPOfI+FXJwIfW5QMWFBhcXEHifhDq4WCmtOt9Rg4uj +I/k6BXfSzVs6PmeHtShAxE/PzTm4AC0kfv9NrTHedysNLjrG/Vpyzn5ged9/J8/7RDo0G1zoLAYX +ZJ3lfW6vwQV7DC7mCy74eACCkzTvgxAGF4BfHffZbHBhysPgwnKv71osA0F/gwuE3ocxuGjp0OBi +bq7/vE/2Mrhg9L6Wow7mfXIFF/6l90XWFt+Zjtq8L2dIggul9+W9zvtK5jUbfVe8Dw== + + + xZ9rCC4YVXhfRWCCC0BCeCfeRwu8r6dV8SC4eOS7L7ZcBw9cqOD7um1F9b2PqyWgxt53dO59K1SB +iyxuPsMjcMFipvN/jO9b3/uuo7vG95HK91mH7QNNSonR8n0tfJ9QrjkXuEj3wfahogYuLH2+Z7LA +BeedmGI76lH0Bi4Yij1wgfp8n3cj/HmfBi7+fOBi9H3uMuTyoVOSBsEFrQMXKU1fSgOn8zdwsZUe +uBj/+B6ir498H2/1fbJeS8Da5vuqXvV9Ufk+doGfzup8NRBpnj3weyC4KG6CizwEv5ZpeliEWmlI +VnBxohZcXBD8JDXG4IfBwB0SBD8ACsjgYnLBxVwo+Hmo4AJeEvyMeLtMcLGwZBwFFx/h/YsDv0y6 +4IIbPrtYwQWRe1mCCynwIwa9mQguxNpJcKFq7oGfdQl+v1Lwe+UyCil0iOBCH2HF204quIiByl3H +ZE5wge16mZrHJqOCC/0TXGgACvVi0uD3NBBc2Ceegx8m2mH51jb4bY1xwa9iBBc8JgmMkpADF9Rl +4CJN8HuPG5EUm2ZQWRc0+N3awW/V4BeOaIcD8eCnTQtcZFwj/HQGLvqAgx8UdeDibFoEF0v/WzwD +4EJH+EXzdjPhB505/29hMQ/gwiCXEtWGgSPCr5AFuMAf/EjAhT37zmzwg5ogBT/fmRuDX2HABUd8 +ARdzIW4SuMCybDRvgYv7huMkiwc/gGPBzwEMXEAvcAHUTAM/J0HgIsvFAhdbkeHX6sIv3PFGhl// +pkMI7gs/aUqK4CKNUIKLd8w2/M4RXAy5w++tD79rMMPhV+XARez0uV9b4GIafjWNUABCUhG1/x7b +e0/gYrf4VSkjkCl+jwEX8hVwAVPxm86T1OIX0knfgIt/XfwiaEWQn1YFLrgELq6xhwMu7HeRsLEY +fPycwEUT/Pf44Q24IC+ZSCovObst3BlwsSQvwrfoClwEBd0fv6+EdHDd33s0/Pit9657+ddJo9r/ +kgjyA2ayVxmi5D6Pmfr+6+M3FPLqGyM/Sv4smHd9b2IwiXRosJ4ZcEE86xUEXPg24OLvCFwIU5Kf +A1vyO9zkB4yTnyG5yW8t478lP48pFbjgEbiQYcDF5o0oaQfyBFyQSC53WxK6LXiSX52hmVy2yEt+ +RT7UzheY/GwLoTqCJ7+UgZ5b0Q736QAXJspPVqX8uKn87GTiixIIGg/ggkX+UflhA1zwlV+6yo9K +/29RONOW8nspTXnBGu77JoEOPnwuNLf8R5NuFeUWDu+/hcICcLFL9WZ/nvLLzl9cgAuBfmUGABfa +BrjYUan8kKBPeuUrv3jikIALZjDlARcTLb9yp2NZfkJNiK789h9wAffF8AIusqPMIZhUfjEBgAuL +gAZWfnuEkPIDqaVk+W8xp0utc6j89PIZD2gDuNDlyi9qlMqvuf8WekyfzRdM+c3bFq6i3n+LUoMI +4AIvfX4D3Rsf4OJtmFKGnAnxgElflR+IS+E94AJHBC7Syq+E4y4S+OtRlwdcqGlH81MxT76A4fI1 +84Orlc7lUrxNAlzQSojqV1Lmx3Jb3JL/b3G1v8WM/RZ130hDpZogpd/i4/MGAB78FtpZ8nDfQsnR +Y34Lcub0xfBbZDwY+bpkqSTzQpD5BWwLdpLYtxiXVN/iS9+Co2NXGPNrLRkHO8wvQbukSWffYvts +afM1tuhbqL786PMt3PItlodhfmC+ha6+53eXf/kRFkDf17fYUFiD7HD5efoW2atv4Wno/rVvUYCn +lZ8HqG8R0+gxiD+sb9HE8ntnS2Rcsm/hpzvR5Yf1Laxv3yJsyy/MRuHF5fe8b6F0pslptiWcjKL2 +LXjLJEzlJWNabf2SXn7wvsW4/DqOhYYV+Vp+KvsWJim/Re7ot2A24FdohwyXH6y3xY4o536L1LKC +kfO3wLi/xZgTk/CGx4cJhERT/y1IDsAFcvlJof8tVj6AC/nya/tv8bFDosRQU//B/Gzl3+Jw48ww +4svPsb9F3ngS2hjOJMz/LdZ6mN+d/TK/9m/R5/4WXy11zO/wtxDt8iuNHWv8LdwAXn5cs9/lF+tv +kQiJCzS88h38W1gajruJ4eXX+mF+xYW6NvN/CyIu9PITCYALrSacn1p02P++DOycXxWRJWB+UV3W +yQ90W+QHuFAfwAUdzr7EfwvC+7cIj1/tb2HC30KuTE07foD9LUJie/v9W+wBRRPQqOV4zr8q/lsg +FsAFPqP336KDHAAXM5a2Bi2rveNtwFp5Jj/836Jc8nPJ/FvwX9/0t3hXLsPF5GfE5Lhl4NynrJ4+ +tR404Q+dZfhh5Vc7v7sepx/v8JOPT3EI/sWZyS0Dimnk7QPtmFuGxdKoXUZFWdGxQL9NMoYKLO+2 +EJR/8L4IVUlNWpj+LXg1Ll5k7n0F4c1fdH91/xboPf2Qyr+F2pzKQOpNlLs+PejM6oT8Wwivk3aA +T4IBXSflv334t4AHAxTKGQdyymLH32JC+1VE2t+CPKEMZWLs50hR7YiGMfwtzt/q54u/xd8xcSYd +7bTjjeq5hnZSUJVXNH8IG2Qf6HS24szfInSC2ExPauRPDgqU4cpVIF5VYwFPGQ8X+egZ6XTR6VHb +QnrHu7wYoch+Qf8WudZJjvxbNC4yeKhUYxgnCvY23CbP1c6/hZq0ioMMDinFrtxYIMOavDKofVUE +qTRYdUxEwVFTFmv49SjdvwVTpijiFPpyQgtLgBovLiNYBg//Fj4OpgjtpzTXeiuTnMFR5LTwkHDB +JIq/hamMQTnY46Xkb7HKgieWAJkujYuUgqdEM4XK36KtGjm5II1IR7kxc2df+1uUrHzyYTkpfn+L +ux7zkXrOJKFhejL6f6jQBWBX+DJ8V/X14G5BGRaubjGYDjBGITBFuPi3GCTdbcdL9OYFiqOY+reI +0u2XFCYkIsm+Q/r9gUujBKAjCfSHqWCX6/QYsqaWL+bfQka53ftsV/hNqXcFo3+L5IuTN8llgWRs +lfZvwRwt5f0tApAze8SM/KEJJeeSXvP8WwDKplS+c0qQFfdv0V3JWjuNxC/VeSViEnaePWGGMInH +zL8FTC2popT2R/rf4nbDkJ9oIxa1ABOPGobdeogbA5fUxAxta3tx5uDNIh+43f5+F3rHTwIM98Ln +vwXFEsGtqKtOYfCrJDBChv8WxA23UAqUUKIPeiJpE2aCSfJWahvBIMBF0vL9Aw+0l6ekXBDgAgT5 +p7nGinnB5CEgZg59SYCitw8pXDFgJlGACyeup68XDO7gbJs34oyjfBKgJNdfdWaAi60Shy7YsNLA +Xlvq4sUGuOACMxVIReMhTq28GuCCc+r/UApwsVi4GDKpdySPDjB+4YOkmXyAC+NMLOc19QFhFTC0 +J/2PiszCJP3cepMBBgfWaGhzj489GGBovHF7Zs1sTX02qJ4sVt6kCnAxuGlpvBlMIsSwA1xESao7 +n0W9MW7JsTJl7fiSlDLV0Jqi+IALuAiaJtnCfJLy1W2xqgKTNrxe3xQ3YJRuE497aV37GZFB+LeO +WdsEXMjELxWkf1QrgoCLbTwoPywE4CGggIvE4GFMK/o83wUFvGHihG8XcKGprnq49IPyS3M6NmIy +BFxsDehhp5GKXZ+zARfOe2RDeaxY3gdcJM0KgAlkT7Vx+ynVl/mAiaZNaCZwwRvyPlvmcripBC60 +HEkYqdTovdAQbF2TdWzADj22SkpQQ3AXlpMefNlAVnTETQMfgcJWeE9c9sm3rnQs4EwE0V7gwofB +CjqRogWz0kBzSbBnIOt8vVAGJi74hHg00TsoUQMXJIe6098vhGXKXdrABQr6IrZnRyZy9RwLiQkD +F67WQjKCi+4t9qXZpV0Qn4/gYrnxaiz6eZHnwt9glnd/BBfwniuE6KUBRDwuCq4tCi70Ah9IdNJK +wUgruAjVSIWmNeBdC179VetNDZFUcIHtnJc6si2aggtbKMmaQCXIAr2LWRMPkd6eruf4QRJcUBmt +Xl7ukzVxtQs0kZ6mNTY9M1IfwUWxsBFma6rpDalYhl0o7gpZeqhTk1qFV0mI6yC4UJKGHp/STWYi +uChP7AO/AHjjBpmFIbjY5Oa5391kZg1ZUYrgIvHDzdg1+bUMrCMILgwP2h1oZNFS1dKFulln0u92 +j9F2f66nLoILWX4XJnON6cH8Ft3ShVyyN9RdKlKlPRNgBOIV20EHUybClQCg/HAxqMt7Kjud0dIF +8+otBQQXzMPmKoQdc3TszPIILh7caCxTYN0SOX4ILqbr5tbdt7p0oQlXPPrC75WswB4aog0FF0tp +E98P6UhOfU7+ds8JLib1pqEikyW4FqJXP05wQaGO1GURnJC8LGEquChuSbjX9OuEFqmtiq/tsfZ8 +0yq42C0wVeEBR8FFJssCHVLwKbhIXh1G6gwKZyKYSxfo2QNFw0ZRrnXBxc1w3bX3jOvBQgElXrrg +Kjo3pIHOCOG18QcjBpcuQFeNv1OLoHPl6sQVMoHd7iJSBy64mDb4HU4B6IoTPrVLF1p6ESvCPX27 +KigvuBCOl8UImoT5vfp7wQXZ9xpKSq+aAMTibhc46I/VAxYXpT2CbMCVklxsCttWF1YaVzotuDAJ +GpY17jCAE46pN9KT0oILdSoQsaWt3adVW3ef+4QFF/3jUNXT+3pfUXHfa0xM99KFjNfiAq1ZjxLM +A+aP/tIF6zNPxaMa8FcRPUXfLl1wQKLpclsGc/ejuZcuVFNOhwT/in3YYcEFISZzrYVCeZC/mF26 +EOsQpq+5g4R9sbngQnNFJg9Nl9wPruRYUT7cGh7v4rzIpQtdKQI4SGGbEQugX7rQPMJvCcUNNAqS +V/7tp8zShRq9WPcjCXzS0gUVNluvKgsuVERyu7XxYPfzFlwMOgzgu5Li5tpXIVONwQXYNF2RHFIV +G1wkcNdhYIsGFwNQaOpZwZRvuhUVLV1w5lFrhcUBLGRYDS5iXKN3qn7pv1xoCNU64JCWLjiIG6lN +LoaQYKY8PdhWANPa4AI2BcFx9TIv9QbZ4GJn5RNii3XylKmUBhdyGDhaQmLCOZYDmK68KFWw0gX3 +vgtVtQYX1OJ0ufa9sPii0oW+IFeAlsfpFfIY2ZetfV/nkJJPl/cPLg5Zz4byDgJrjZcukFirXXzS +WMK7yW3UUVUsBKcLgQ04zB+CF3sLHlzgskmNNCavKBkcXMTyEhSUCZLIK/7cu1ldutBkGYWFGxqo +UW9qZePgYkVuIK/p17h56YJbwKililZoF4+Di+a+eOAA2JOTNVfoVLRI7jk4TewvMbgI/SzLZXZe +PZ0p8HDpQsGfgIQ+NFv4Cy4GogTAdKFDLrNIztngIt64QR2j6QIz5VPlrlH8R2JUxz3DF6K1hKYL +IoBGiVMMewtp8SBncXDRBPDrh3gWUGI1P9B0YercQflMrHBwobHDEdFKo1pNnClbuw4upvZJN6h+ +k/X7QEaU58x0quI7HFw0Sjb5r6FlkIVhkWsjMYXSnwvQjC0yV98nCb+szyPinwu1zg== + + + GLPANX3AZN3m1J59cGF8gM6F3MvWMZ806MGF08ASj4yhzuk59WEFg5NMJ1Rl6zumc0Er5DPCxAAq +OJQ/BxfaQueRsWw7Ohes3YzPaJEsyrGODJ0LcuExwqz3shvuBhfLHg4tjeBPqhtcrOluQwYD1p4O +N7iIy1YE+LAOMOhc0H4iH5BokfQLghpcAMojUkA/U0HfwQVsGkeApyL45EsGUq8SvVjOBactbvgJ +FHl1dhxcWAaHVR1VLWfoOei+l3PBnqEJlTpNYAadMhfGhYMLVf4pDE9UweLgQomMtPFe4bVmLOdC +dWqG+ROiaUukC+W+2NqffyJFyI/KtEyFvXe+2GkhXMB6YCLnHoQLSBAeYXOKyoxoECBc4LzrP7NT +p8sWARs3PMhi2zlK85VsbbyR6eRMEx5czJ0yCl5BJiulpFWwckSnw4OLX3QFFa4NOgcXJYoIsS9F +DNeRVXMuOGtklMXhXlipO7igqiUpiZr28n6nJPaIb/NDDAsrSQTgBhf9psb6G7hkFNGiwcV4SaPh +Q5Cx6kPAnAts0Qnyar48N5ZhMKjKdRKgQucCkRMWGHNlp3Pe46k4uKDQgx65FsrIuNC50Ak6SrzB +R578AObgopJA2MUFDi7UdVdoAbA4uCgk7o70iIj8BMjVDS6iT2U0Ibe+jAv7uw9xfmhwkV02qBtQ +8GIriXplLSX59YfOBRH/4xzqSOQNLGtwEeP/37H9iDBJAt1MDWzoFWqAxz/L0oXW7Oe2WPTHxS1G +bIeucVOhEToX+uVZgMy6gv01bZy8JF4QanCRVH37OB1blMxXbXCh2Qqm3Ga8CyT8J7xz5A0ulmLh +jH+0RckGF+tLeLeyhoZ12uACk3slvZjFI5jBGlxgCC4Q+nyDC4XDBx7u5lxwXFBnth7/OmfwEypO +S16QchDSOLvY4GIphbrMwtLK46opPUAo0ExMbNTiIpFqlB2pXKaLWwAbU5uGpQ6CgzkXcp+1UzKy +4Pl074yic5xDQpbQZO5OU1M+54I7iCeuG2Ho5lxYuGNSpb9tcFaUgguljwGdsY3T1w9VcBGD1KqC +7wqXq3BL2IK8MfDLo5tzQUAjgeOggos1nAwFZvui/y84OBVcKJFnQrjP9LYF5YXgYjc2EvNhXZU/ +C3/Ohe4GdgAFmUBBSeZcaOJElODUQHkSXFCB2YVLbh1/ujwp//FPCtxVIY05nfaF8lZWJ7hY3ZMm +wkZksiFVnk62M5I5F/5J0nWM6869QWDiw2bJR3BBeT8jMmDeuI8ZPb4prU9bL6EFMt0Q9DN+I4kN +mmFRuRirL0C3nnwIrAioEVwsORe0CzoAaFSCC5URgTI8ZmGblNLt1hszwQUuXxQa+vg8KcQKRoQm +OCF3fcK6Hl9YqkmCC+26pn/7AWGKSSP4zvLzvUM5CS5i1TntBl3whx4MVblQqdg/1gMe1UlbFFwM +limQPkbGUjCSggsCSwWkl6LM/4iFTAUXxFSJD/lWmsPXLVg/MGp5ewUX8DUexMPaO6aCCw0e1YU4 +s3QKcGltC2hSwiKhGr+6Wkq1CjMWXd+B0FIx6EMq3m/x3dqCU8HAtaCOEWiK73ZrCzb3FCqFBFxw +cfcw71exWobbggtObKLoxoSLWA/7HzxkRRdcjNbzDQpKghU+XwEsuEieJsJNX0QjF7AFfjXCNrqf +sr4NpWPoM+oFF6EYvMo2U89kZMHFqIyaXAUZqyV1Roi1gXH+7P0FFyTc/Sy54MIk4gfYpRuG8QmE +eFQL4Y3Q1a+sMQswf6YV8CSltqXgon7SWL1qpzA2m5lHzT0gB4OL8L4aEbBSTjdaWGy6Yi3Ru9yT +aBoyGylY9gmDi+RNrCxPB6TkTUY1tqcYXBCW/SWX+LqcjQvE5vtcxErmCHsiprqCweAis1ODfMi7 +ZdWGM17TXebmZ/MKGfoi2DGDd73jMhZjE0aVV4wjVToMLtLIk5Ku2dxpKcAbGXXbBORYhpfDGFxM +UdlrAI8A0jbINnFv/NTxkcIr1L8tcMonG8Tp5i4eM7gAPso7I4bMm+q/ip0YXBiZG+mrFusQ7LXn +wsMDGrzADC7oLJAj7wfdQ+VxKBYKCdUKH3jBQWv6MP2MsrWc0hhcTDwTzVWSrIbjHMswQ+EYcFg0 +FUTr1b34GVyAw2FXOjgMLsJAaiX+dgsusMN+PEn5Qjp6BzOKwqO8q3SFcuCCM9T2r1BP3CHCHyVt ++hXKL9t98UcvDrKLl7bggsIWkKRX34CGJ76Ce67PKfBdCDYLLjASHBseaNgx9showYXvShtCTRqE +vWTD3jwRpwsu3q8FZ7TnK8q679euYKYFD4Hhv3FdgSveAV7hc9vI0RUpN8EKuPwFFxw+JGFwwTAy +UxptqfGqRzS4OJSB1nsq65K+0eZcgWItal9K17CJvp5coUjB6DBIygxfG1yY9Uj1Fkw3JJ7Wa24K +ETxCFTLNj9bgIrEyBlygP4HQYtWLo1JIl4MLvcK1mXlucCFizvYw/QMVOfUf/oTBBSTavML60RsH +IVFjYFW3WToDgcEF6/ZG8xAlxl+zuA5AAyvBh7FAD0gPIPTRFlysBv2XfVrwQ5aAZljAeWJacDFn +IkQvZan6BRd5pjw4ASmFNtUdl8HFxExhUa1Ioa6SyeBi4EdwgNIoOl4F4mia5BrIPAhPqeA5UXZ5 +3qm7jaD/tF2Di5UWvbBK1WhfATlwFfTOPLOlpKS82OBiU8QEbr6hqSkFXIWySZZEiaQIK2g6GlwQ +9+sR+ZbQ4CpYb2o5ssBV0L1or7BL7AtXwUqm3/01uBDNAkQSshx25lNrcBE/yfv+V+Qut9RtOKsD +5wy2h3AV2q2hPDOSz8M0g4sN7Y3dUD/JSQMzg4tBU765x4swz4HBhekVxOfpJu2GVtyHVdh+kqho +LxTasmohTwlXgXMrvi022iG8jXVsxSQlE+EqdMCHZ8KaGFX+cBVMkCJkNFpbNjAIGh2owQU2RYjk +rmyqsN7fBhcUWevSoGG/YsQaAPJ1gws8yukH1/d9O0ve0cMzHuAqfJnaLF200FLZ16vBRUGw8G9h +214VS/+3CizVEThU5tujQ2K2ouE6rTS42B13hZ3X8z8Zw75xpPdCwEsQ+jZQyMrYDyPRFakRDY6R +MQlncEFkadW7/EpmVvWqkXiobxWqT2GGBsz6HMYwuHBgIZcdKWLw4TO4UIHCINbxp9Vx95uNwQWJ +9JGV2RBq9TerUEymCCyG1sZdsX1MpxYbXDB53oH7JlwJeRL/P6s2fCeKVeg/Ykh/ljQaXFgPf9hi +U/LyHlivtnAZEF06yMUq8ATLpVhSrAL6HYOHY3CRRRxFinHuBRIYXCTWsjghi8GFvHlhEf3cN97r +qmA42AmX2Og09HKaZ9CEaIzDGVzEqSW833uxmVS54MJmkhASseBCkaf7f4tKoZZEpt9VIeLjKaUU +hZ3bVaF7KneByU9GKgK64KLbmhMgrX6IskELPpVVYQt7EU8Q+KD2gouQ0jhqppe3vp3jrbfegouo +yxqlSTNt3cJUgRBJKkwLTFzTowrzwBJiFMkQzIrNjWYjWtWXMoIAyymPKmwH36DgSYUDpBdcjMuP +xtuXkYHlt8F93fneowoar2c+NYiG0KQs4Gye8ng6IGSfwQU8jnZ9ROb6eAwuZk5TLuj3eIuI+cHF +5ZpIvZN6wcUxoClEQ16x2ShsKqzuVFjFBTs+ChtTYeJZQWqA0iPZReABHGS0VIDF0pZPcJQKwB97 +D7ix9D0H4jp5BheywZJB0d7CcEDxlz+vp96RCo3IWF5WeD6ekA0Dg4uQ5ZpFyq8Rehk4EUcqNMkw +SF1aWcTZbh6uStsZXEDMHo6do45UoBVIAg9ey5BdcCGsaX4KE7D9IhdcjHxOhAmZ4qKyIxU8krr2 +O90DlAjbLbiASV45bioTNgk46UaOc2KElQMV2SPBxa1iEP5/YUqitQQX4t9qCxWTM5mmIxXau1NR +kjBbbk9S0CrN1vFIhQXP1/5SWPNNoP9Eut2RCuMqEIf71dQjuJCZp+LImZKvHalgXwXUKUvAS3Yy +I7go8dLzoni9b0sbZ3fgYt1HBc5zawg/59nC+vLPalRooTZizh5pdT5wkVZixUrEn5EhYeDABYvj +gjWODQRcZnz5gYtTEAuD+Y91heReNcYDF6ZsmuXOpd5CMf/H7Eu51X7goocxLsKBHpvwNSpgYCdF +cLFRdETmXXJUo0J30R95QwG5VaNCGQJJCP/lD1MHLgie+pQpW93KV3vgYmEsBRqgkr9PU281KvRA +wTl8Q4hzHLhgo9GRW98boNLtgnTgIqWMNAoBgG/KPXCxNAgpjnGxBcLBuOEk7QX2Q4y0jOu3EB+4 +UOVnwbvJxGUD/qlRwWpOom/tQkgZuFAlWNUhEZICFxGOJDjkqEaFtMgXrPnF13TVS9uiRoWywpx4 +HiSzf0wtl8y/6emHXgKBC3PBKOaMuz/ggmyW2qUkdirualS4hrVvjMb5lHJHbcDFS209OOC7BwMu +1LdruyX1np6EAQzABz42EAc3USAeEfHNADwAD8AD8AA8AA/AA/CIOtAP8gf4AX6As5x0J91Jd9Kd +dB1Dt4gtYovYIoB/4B/4B/6BB6Ojo6Ojo6Ojo6Ojo0vYj6MoAAAAAAAABIczXznBOKiYEyiFSnTy +0Vv4HPv517/XIGHZCFnNlH4VT37S3yH4vKrjU/2mjDwm+/W4aAvVKAgXk5MPfwLiRzy5aWZJfDy2 +1zIukQqU1whIl0GighGCgjH5KU5+iud+1W+vmql9Hjl9Xj3u4yTFBI0YHiwhKr8tA1YK4sVLDJUR +E/0msaOFjhmYGCevIVqs+IApuXHyskHCevE6kYA8ITddATOxwAIO4LGCksQMmCBYqNhQie1As+KD +CpYdYE5eRh/XDT9ACB0EwEEDhoiqh0rsRkw144Va+ewsOp4/jvSiQ7xg8UlJGRFPgyWC8e+XPt+R +QhLbc7fTVkS8Dk7gAZiUSbSaKn/egkWaOX1QRH3s32kxpEVQxKJ22IXQsQWvJvrMctUUi7ZIhYaA +IUnBaZL9bgEGFEAAHTCCaMFSxAuWFS2TCG7XjhvF78vn55L0qKSNklZLyGexEtUwUcGQepV/N8Gt +RzVfey0jJYQAO2LAIGnlYInpYBFp0TKheHDSq5Zk9h5B0Hr6aDFZ0SrRIGHtsCJCos+pN1XFrMlV +Y1Ci1U3DfF0HzAoRNGiGmCHjwwqVFjETi35JLJoC4n+IoSKFarQjxQUjhoJRssKhEkvZc5OK0l53 +i2SfprhZrmjYhklrRKdTmD4mfR3LY9j9lt7ThcMsI5+kr0P02cS/YU5/yr+r5Jc3R9nbUq6qgvTb +CFHBaJ1cRB4Vjz6CzyI5/aJfVw2PWpWHSskMkVYLV6nFq/RC8qRs2X9XGyVVeC2C2dGr0oChXKxG +KJ48JK9bdVyCV18t69GL6bWrjmdUIRonLRmUSMWDp/R2in+/mDwpnSYZeW6ojLyE+g== + + + GiGlGiIlHCQnGyGnFVAfctcW7HCUnFGFRHbZxJdpTHxMCJ9ZhUb+3aXbIhctyWiMk5YRMFKkgPgY +I6sXsBPJbofwN8hdPewZatGUkF6EixYfLSUxqZDJJ0+xCsWoQq58JvnkP1rE/Ejx8gAeNZaAIYMj +ZKWC5FHpbdGKyh4XYs+XkmgEn228Ti1OP0t/u1wWZJJ5+OUheHLVFK/WyM+P6LSLFgmHScslxKN4 +bhVRj6Lj3TxvUVy1zuckXf5cR0krRvQxyemTfEa54x/0RPC6hxYyLabQDOonwgVLD5YQmRMIttcj +Pd6rZ8ppvVrG9psnQRScrliFaFSgFpEHds8elLzHT+Szy7hSJD2+gkWKEaJa+XdW3LZouEXDfjl6 +zFJFJCrB7SuvYXismllX/ZrcNaSeK0JSNVhGXqSIwPwdptMxKtANldaNlNaKFemEt1lAO8t+VbBE +RKhggeE6tYh8Ex8vwWuVu/ak+FFVvSTlj2vdMQ1L5CLyU5hAMTyG4XEJTkFqiZJZEryS+LcLyeNC +8sScfhpUqOXnbxG8x9Bzln5J4qBXatVcBG/QC53lqVVFqPmX4y16rRoOraZKZlU+ugwKZALiW7yt +wukcNV+wu8sw5JZLbmp6VdTLumb3NbspvN3i2VdxS3+aiD7vWCEx8fix2RWp3xI8TuFr06uaYlZV +xzGcVmH6V3DaitUU3y7Z7dY9/+qZl+LHbfWzHNFpGyzSDCiPIXlgeu3C6RO8ruQ1RKdXRp4dLSU9 +VEpgQr9Jf6/olwSvoTbtz9EUr6mZfeHwCWh35TJKSB/x2COeW+TPTXeMwmUaV0kGBTLpb5E7htUu +y35B6/mjZW+Oq5hFzS2Jf4fgs+gsPWNISk/Wy3rKkA49VD2XeHKWkafE10vvKmJRkquCVhQfR7nj +6q9LwWzMhmNI/4rUKWbXqFYlmaPOZaTUNMHqyUVXqEBAtGiZYdKiYYlgUh+WLfNmOYffy2W6GIbS +sic9lJuuWJFWqEywWv6c5E6GORl61DKknrFbHtHpFcyuYPY1v6PU9MsR5jaX23STTMlxiD0/KQlK +zf8k9xEk8eQwqZHJ6P/dlU9LEU/eQvJhN5zy5ysfPeXPXXbbQupfwFQjuo2CV50MV3EbYsOruCWx +qi568bYRtWYIT6N4dJeQP6LPMRtGwSwKZk/wipeh6FVjen2SXdKrsmb3JL9P7PpBz50cZ697tUwX +QZjT3i2bPa43yRv0dvEbrWjqXe+P20UvVsssIY8KqE+BEq2EPP+q2uVok+BHNW/x488xtJ4jt3yC +yy39vcLfpfXEQy6lt2nEWKgYJsHlFk++0tsrPB1Cuyp4HbUoyU1bc5uLnccMXTYc0+kQ3T65q06G ++UnmqGlqVVebtt6U5aOjfHaUD0+y2ylX9Utw1KYqXKeV0Of0sqm5Rcns645FchoFs6iX9ZzkanZf +hLBMtIyS3ZYNp1CBXlCg1B2DXtVEvyraNfHxEX1ezWzJj6/kdqSe/Bii2lTVOv6Kjly29bYj8DtC +w7D5LannyGV5NbVJ0VTLMPi1HkeLoR2CnnOkvc3NNjbYpeI2H71PWrpuXGXjo3YdoaVqRU3quYNe +H3ojOU0DO6Xw2bXXI7/OsunRuv5lmX+g3XX+KNKdhm5Q6KPokueSmvqkuJMh7W03yOGe5pPixyRD +aBk6y5KajtI0hKY0+OHiOIOh7Hk2+MHdtpPhByXxrzutqIuGUXHLm2JOgnxa9igZUk0Se8ZuuUW7 +pNUcqaVvjjXY0Z7GZh3PObroN8SOPaV4f9v9ZX0Jklg0lJ4md23VcuyuRyrKgtsTm+5kqI/hR03h +r5NDDxdBj1mSVnSkmiPV9JRi3XH41+UiGHdaX4q3+MneJnPZX4ofMszBzifFkFmSUDTVqiT3fKLX +rzo+xW2Pkj1K4uO3m+Fuhiq5HammaT1RLOoxw1SLvvh3ym7351ji4ym4/aDjCB1dsCpCuyExy2pR +0Tnq5GeC1xfSByW7p3cVoWVJRUlrKnLXMXoWnWRpNUNwGeXDv4g8JXutelcRWqLglaS3U7H7SU/X +LY/cVDW/qbj90TKEmn8pntpUZL9rcezNMeWqLT/uQhVa+XcWDX/WUwWrITl9eleRvm4xfVQwm2rT +TzniH+dmnHfb4s67P0/1siL5PYLbI7YMQs87/Gywc7dsBEFBbjYnp3NyNvkI9qQnOscSWp5aFQ+9 +mNPYrBNy3b0c6887vexIPfUQrLuu9roQvP7VdN22dNNKcMyb6C2OPVnGWafmuJrjUE6n5HDgzlOz +bM0ynhR9MfzHkAfBNsvYDmfuuLjr0E72m+jHPHlR9Izkq2koZ4N2OGmH83Laq2U1t53SdPW2oXO8 +O60HPbvj7g/kSRLNOrG33WGHe9qnDD9nmYvf3GlulrlaNnudzGn51/lkuIve7W0hkwSR4wg9QyxL +g6INfj0JjlLT1bb/KN7fF3fdu2n5GN5i+HLbyV1JqemLIO5xs9YRqScKZlNxW4efmnVODgi9ZSHv ++oJZ0Dm22SbWspjb3m6TQQ60li0efaSOPWSoh9znJEdsqo8hvGVw1qE57VOKLHhtxSzKVX0y9JQi +7W1stqHBbdSqoRT9lCMMdlOs6peiDXY6KdYimIrfmBDIBQqlet0Qan5M07SmpxV90fIphj9ruoJd +1cueWlWknqLURL3sJzX3Uow9Tv68mxT/tNRFzy/FEFqOUhMPPZ4M/REUmSHMR1/pb5KcXsHs6lVN +LCpaz5C9XtUxzJZLdnv1sj341R1He927ceZmc3Y69kh6zNMfxV4Mf5L0RzH3OljLShAQbwAnuAEM +IM04M6fhHod3XA56e/jlIDh7Hux1J2djbkBabis5m3fb4o2jPY8fx7WTjSAgJYdzjye44XQgILHX +kcqSD8P7+/RQLDecTYcTnAHoYHY0viz1EMw/D+a2c7NxO9ndeWgnWzsPhK65OMrcpn/fm2lsJytB +QEYQFCMKFCQKFCyHI2+c3W2eEQSR4d5xe9fdXXduOONmI3+dzG3o5oRKblHw+59mLn4up2OCgKQd +Dg5+OgjWXmd7XA52KrZNpSr/eXPXtdsWc9wegnUI9iL4jyEvhjb4rZzNu2n097Hb1nKb7HX315XM +0sWuMEykF6bRb44up6VZx+W2XQxF5PgZw5BJhs6SF0M164QbkHCDoj/HU6t+zPEvRR30PKUoUk9d +BFkOCMtBUXcayBxDaClaU5LLfkwS77ZY66AbFO3GscdQBkFQu8pgrXLQc7nOy3X+09zHUaSmIXe9 +smm7HEtuC0JPUXqGzBHlsiYZJsEwKE31UfygJqpdPSaZi58NdjPIzZ9Xh6EdhvXnwVoHBz+PSXpM +8gY9++vgLYO3TCWzLNoluao+gqZWRbUpyBz1MbRD8JOapncVqejtdXXH0V7XapoJAgKeQAF3nx6S +KIcDb5pHHPsw1L+O7jZzsyFBNqumzd32ah10c4LtbPpRPK1pil35UDw7HVXTVk0jOZxMhxOrprWa +5mrZ3HUrp6NyOieHk2ZcpsMJjg463KeJgu/zxqUdDv19J6fjoQDpUICYnUzVtHKzWbUM7jqVw1E3 +nJTDCUFA1q2Lve/sdFYtE6mqzHltJytRoDBBQNgsOzecEwTk3HDQzYbutvvr4qwDdzhth5NyNnXX +7SA4b5y5OZFCZRLh+94saW97s0zldNROR+Y4tdNBMw7cbbPX/aRZOk+PGP6nCVLV+/vyD1y3zfa4 +/eNobqM9z80y+/t+87TBkOxwQBAUrNYxoSdoFFnyC7NjUFrqpHiHoNx17MalnQ4OfiY1LaGovGVp +h2N2OGjGocNP1Tqs1ulJUeY0mMs8pvg5R58URScpOkl+BGuw409T9L78ONJaB++4WMtiLnO3zO24 +X0VPdp3NOLCnfdCSpL5PKbuLIS6CcfixXxdiV3wUY4/jxU/Enk343EXP9fepGUf2uP80465TMw7c +ZTkJ5mJYf6CraSpnw3Y68cbFHCd7ndxx9ufd32eD3n+aeinOYSd/XW+Wu/jhHkd73vx9+Rju5Sh/ +XQiCQuVw2ixjswzdbF7Oi7tPzbRMBx3Izcb+PHjLdtBbwS0rhkUo6iHJ/OvkrYNyUKQdkJTb6h/X +f13+fbdY2qN5drLvBIimw4k0004OJ+WA2J1ngoCUICCfDifEDcgHgsLMsn9lPWfqatoNgiJV3cMy +3jpX49BM23Q4EW4267atWQZznKtxrca9XdduXNnJPhAQM+P8qepu3fyBoBP1xdHuPJTT8XQ48elw +Iu1w2CxLOx2562aOg7OM5WzobZO1rO48NeOQ7DkKjuNugznNzbJysxk3mxEEhap18BH0y5HVslbL +/rMMrSmpdU1uq4egvGlzx92g12qdtLMJrSxPovpoekz0BsN7JGPPu0FQD0XZ42BOIhYt1Ahe76Ro +e16rZSGHY3Y4ewj6Yjhv2l+S+yjC3VZyQMTNCXID8nIbql1jTmu5jkk/04Q8LthVrakffnOnvd2W +m2cMimeHg3+d3XH0ltXddoMeiV1N7Wp/XdlBEXJTkfvWxZHuulbLbhHMSzL+QDkMyU6n7bSSev7l +yIvhPoaz18HdpmqcNOOIIChMDsgdencIphxOvGl018VdB2/byumUm42ZcWKOy0HQ9jpY67BZJ+1w +1Izznyb9eWln427ZLYq3SMLclmact9vsL3y1rdW0+gNlrjs7mogCZAQBOTsdmONgjlszzi6GLzgO +nWYOfrDWcTsgccahu00HPXnTdNBTqSn+ee/GuZzXbpzb0VpOFp44UYKAoBxOeOJEd+LEu3EgsSyh +aKg8P6JZd9+IAsXseaZV/cUQ5WzKzSbNMjTLWG1rte7saCAISGh9d3OlQXHNspDDGbOOynEsp81i +WGoav7IpeY9zW5xtaG6rPy8HQQ9JulkWokCBZpr9hW4nq7ftD8XSmY5QFeY42dveLUs7G8952mDI +blr9gXoI6iHYhyDeceYGhdnZeFS0T9H5616wq5LbsTkWoWaabcQOCpbL/BN9ue8eydec++WZj2XM +cWxno3I2tfj5eFnZocXlL0s99EhmCSpJD0mmWHVEinPGiTltZO/dbWO1Tg12/1mi2jYPwxv03i2L +Py0GSYxFCdZ/nikdUauph6DsbarWSbXO+3W4GMZa9otfC15Z8Fta1b8URWsZatH9JGMRLLXO6WVT +bDtCU54kXW2DvQ7+PDr88PCLOw6UniJ4rYvhqnHMDkiqdfLxC50l6CxdToO7DTa/pzR1te3cgLRZ +59U0uePqz1M5nLWzycEP/z48BN9NgzUt5WzaLIs5rt02VtPWTqf+OhI5frWNBEFhbjasppUgIHs4 +/uKYf6G8cWtHA1GgCFGcsD8w1ca6KJJU9UXTfxj64LeDoEcUSxQn1M5GB78368wcR3tevHHqhuMN +YADgiRMoh2NyOtkAdNB00EHtdPpPxDvPI5J457Udztrp3OD3l+XcdauW0V5nfx7oNA== + + + USWabjogChBxw+nNFP7Ct/NYr/unaU6SvEm6XEZyQMjOBidHUqqCTnMkhlXmmbWm9abRWwZnnFfL +WE0zOZzwBIpY0/Qw1MOx7jqY01qtE3NZzGXspoEbkLbr7lBcO5xYy/gw7MXQQ4o4+Nnh93Zb/XUj +cwyD3b8cZU6jP67kpqd3hTtu7Gxwkwylq5ttaKdDf50ffqnTFKmnfor7Sd7hF0JNE4r2IEhzmt1p +urfl3baD306SaIeDi2FpTT0mmYfgu2W4+LHg9jdJU9zuZolaVZV8HqHhvxzrjwOdYsoNw+i03HHw +pqlYVGR+a4/zy3Blt2GcQiE0bIfgymnut5Xk+6dM2awTc5sIPVtue2rbH0XbLWs5TcSqI/h9g97n +HGFyS+PvKnTcWtFe/FZtc5ehyK7/aLpmnX0MX3E8Ms/b62BOOzkbd9s8ZSlrm9vJVA4H5rZSmvri +SHfdmmVpp+NqWsxxtdeBJ3QQQU6knc4IAjKCoECZc1BIytrWZhrK4bDbNnte7YH2N66aFlrXVm3L +GxdnGZxlMreRICfWrDN7Hdvh4B/YZtrJ2ZQbEBEExcnhpJ0OCIKiM4ABcCdOrJkmb52aaaj2dcHx +CDV/UuxHURfDNcvODofuuhwE+xAkleercWq2wV1If6HJydyNc7mvhyRv0PuUYz+CtMfNHmd/Xatp +MfiR0HRUkvzH8V9HMsnPGN7e1mYdc7M5OR2Uwzk7HXbj4o77T5IXPxzk6o8rO5wOBMTMMnXjQhCQ +2es8I/mPYmpFQ2VJfx3scTXohdByH8M7/O7P+5Ti611RK2qHn/t1eCnaYlhyOK/X8eTYg+CHFHl0 +zE/xw556KbbbtmbZmnXiTvPH8ISaKNTsQVDtdMjN5hbDvhzbLbs/7jOGMdlV8fFD5ymLHvtt+giC +zvEnwxz0/DI8ud8Vfc1CuzoZ7qUoQssQSrIZxz/FElte0W0Uq4bW1aOmMciJVjYPxzXruFtHBz38 +4+6vu0MQ9jgZ7HJS9JwmT4otvt0i5Lvg9ogMPaHHj58NdvtJilzWFsUZ/EaqqnrfXQxlLqO9Lva8 +2OvwUVQ7mZtpM8fd3ycqzdz73ixTOxy101mzTrkBWTUO7XFyx5kbTjeAAZAgKEipy3a0d9tM6XqD +4Nxx8ralnI3J4YAgIHAoxmBIbkB6EQSVZNxx52ZzbjbmZmNuQEIq63qg2enIn/dyW5plZ6dzdjbr +lsWeR3vguel0KFDg4VhaV78cbY+jO07mulbTZjCsv4/mOHjTXjaOh+O7dW8Hpp2MBNmsmnaD4Ox1 +JTZ12e9TauIeZ3MbzW3tpqXb1nJcmnH+UlyhZZNp5l53d1s/ivgH0h44bjZmlqHaBn9f/XWkFWXR +76hVW44rOx2SwxE5nJHD2ctyzTow14kZ9Sj3XWJX0JrSYFeLoMppdAj242h/HSk1USract08DFct +AzmbMOP8KzuD4KplMU/v2vOTPiex550cRc7m24CInE3baXO31Zx2cxu9aa6WxZ9Xh5/rbWjGGann +E3oOkWCLRUUmGUrLD1q2XIflOnG31Z8ne9sHFUfuV0akw4g8rznmyfDdOjTY/WjJlyBLZkHpCVJT +3iRZLnM5TfY6mNtmj4M1TsxxQOu5qmlPevYnCVJRj1n6aEnC16963slwxKaiFUXBbUhFb/HDyfD1 +uvjzaBDERdA/R5bMnui7SF1vUbRHUc00ldNps87K2cSbloehLor6OLqblnY45AYF7HG9CLYdTqtp +dxjiH1hyOONmk2Zaq3Elh/NuGg56ILMMjWO7cR/IJhuADiSHk2phj4mGGxB2y+BNo72O9rq00xFB +QEjOxtWyVstEL/y7bx2CMqe5mqZmWatpqaalWcZuW6+iIjouUlNdHGkPZDfuQ4Fi3Gxgr2PVdz6S +q3kmse5/qp5Tnb2v3bJyg8L+PJ8c2Y3zr+hKnk+rW38gudmUnM64AZG5jQfBOvxyMgSlJy+C8Zap +nY3a6cggWGbZBwICojhBozL1IAPTuu2Y2+aO08MwD8Ha6/IQPDkgNvktccMFS67nr6O/jtU6txjG +IEiLIdxx9xiu6rk3x1frqJxNu2l6SbpwmxZHEAREHj8JGFEEyl/azbFHRx4lZfGLQe9PzRK7kpwN +DHKvWh6hKv11OiniIshumQx2KtbVPW90gi69DYNbE/lVnWardWSP48fxL0+Us4lhnSpQRBAyqBRp +PXsS3EnQY4okvO6nput1Ri9qg9/8baUWZfnssDlGrexflnkYwpvWumMiXMiQeEA3Keqk6JtkT44e +0xyt616WL7j9gEE5xfAtfnopzl9Xi+AcgnQYopzNr54yJ1EIbfMjSX9fLYJ4SeJhKGvbyuGcG5AQ +u/KmaYfgy20oh9Nq2qtl/SiWVtRDiie39c3S1TISBMT1wLk835AMOZ0ULZPsOS+C9qadHI4IAkJu +QFAtq0Gy5GSsp9kwERmpqatlbdZZO520k6WdjrnZqFnnb927PNUs88fx/r6Z43owdLeN5GxIDgh/ +lisg0B2CbdZZs067aS+32SAYStOcLGUQRL0xT5rw1rkdbe107DC0QU8PwbnbVq7D0m/SG9MfCHfd +2enAnvdynMrhlBuQU+vQoneLn+gsWau6g1+bdU4OR9yAgChQhChOeFDTBL/3KO7juFLXXxRnTUs3 +ICgHBOWA0CDHsuUX/PByBKnnHX40CKraVnY4HwiKWgxzk4Q9brSqL3kGnaYoRfmSDEFAOhAULri1 +CHmZ3DgFqzZCUjBcKdCK7qbYl2L9fRwIit09XbhU/WjaodeSYRb87mLIiyLufS2Hw4uezAjEiyIJ +LV9uC0LNXQzvz4M3TdycgPl2ECxUvOw8pa9nQH1sfkvrGULLGuRw0hvRZ5Ga/qa4guTxAVuV0DOo +LO+vk7ut1TonefUBc1Lif1CwG4LXoVXty3InSTwU2W1DuQ4PMiqpFzaxaczHH6knDXar1lGzjrlB +8WnRFCpTb6I5KYJSNB/FOgRt74szTeVw0g6n9MKyKKZaRoPf/Hm6OPLiuIsiiwikjyT9ebPX1Z93 +h+FNnjJ5jhrXbTYjIRDK51N7ncxl7tZptQzeNjTrnFkGgqDIybCJGzRUcAxvm5tla6czbjYhChTl +ZqNmmQx+6badWecvy9rz1g7nzbI146xblmodt9v0s5TBzv46mdv0UcTB7/a8HQxZTZu/kC9NksNx +t63eOLvzQijKj2LdcTG3xaG3wnOcNF2uw0kyzTJ229QsG1GgSDsc+ONq8ZNBDmSWqDS1vQ7dgKxZ +B+64d9vSzubtNrfb3I77z/MXR7jDeTsdWdNsz7O9Dg+/WgRNLpNDLx9D+/PcbTs7GcnZjJzNPY4q +x5kZx8SyJXbuKUldBGevUzXN9brcFGN4nY8hyjVtsEgsTKS+FGdwg7vM5Tppl5nsFuXjx94XWs8V +fheZ6fv7Zm6DtaztcGiPK72t3HGoVh2x6/8s5W5rNU68ZTS4reY1xc9B6qniuVNyO3SSN8jxo7d6 +U5WdlgHxH9TsyzBFqI/x8DwJ4iDnj9+JRUEoKWLNEg9ugl1YLYfgtV6Sb8e5nBZ3G+xxcdjF9Lon +RxbMyvj6PoKxp7lbBndbDXo8SpJi1/W60Gqe2rUGvXbLZK+rPy/uNrjTePSUxXDlNN4k4a6Lu07u +OHfTRLCscp8siqgXDqEpzHXfhtNtNh9nk3Jbn6Z1GLJaR8SqeznOX6d2OiCKE+QGJO1wPKTYimPe +LHNRdLPMBAEpNxtW23RxhDmO3TSRs+FQnIA3LeVwyg3IDYK6GIJQ8z9NdstIDoj8cSHxSzrRl+Na +LWszzsxtctf1pVmH4oYChctxfDjOG6duQF6tA2uZLoKl9+XT9exkr9fNIKhq2apl7ra1WvY5S58c +7/CLv44nx/r7VC1LOSBt1pk9bu44tsNBOZtWy+avqz+P1bJzAxJvm+51fhjyIChz25p1YI+jQe/l +trPDyUUxF8nZ+9JO5+x0PBAUJAeE9jheJO3P60nxP80U/JJWVZSifimmGUgNbi2ZRb2t7Gl+KX7O +caSWI/W7wtsmVkUzTk6Cq9flR5HVOp5y5EMQB7+Xy1itA3dazJZL8Jv2uDvsQihJErMrtLtiwyxX +lcGNN0O/HGuw+6SjSN3CMP0yPY5a0VsE7bAryWmRm9ZLcAWvKfi84sOzXLU3w90M6bDbTVEvw5XL +YE8rtWpJbpvctegk9xF8uc5OfqpXnUGOJbsnel1yWVDL7uhZl6Laab9Kql6W9jg79E5vq3JfFNt6 +ylH+OrbbXo+zRZDNtFbT6M/TRzHcdDo6nAg5m9jr1qzToTgRiyEIdlPwy4fjyeF8J3Q4OyA5SlRK ++N8Gv/nz4E17NW3tdNaMc3I266bR4NdmnbbT0b8P77yVwxlBUIwgKEjO5t22j2m+23ZyOPXn3V/X +i+ENfuymmZ1N/Xkst1217dttPCmCzrIfR/r7WE07O50OxYm380gqm38g/nk8CO7fx4Pg7XVnh/OB +oJhB8IOyuEh+TJOEovwo0txWc5pnFEer+jnPeNvarCNzW+xxa9ahve5jkrnX/R9Yc5sIcoLcgJic +jbkBOTkbV8t+kSyd52tVR1w2VJLvto2bzbtt9Qe22fZmmx1+oNQssSkeguVmU4ffq65HqUp3nJtx +2mxjfx4+grj43eM3g50ddip7DpPjEFp+TBGEij869uYISs2Su74e15skSQx7RLDuttnjbtDzT7LE +pvsIxlw2OsVUSqLSMeRVT2h45a526PnlqI9gDXaq2DWl5+tdRWa3xI5bcStKSdNa+uRHotM1XKiS +nPacYSgVUbBaclVV7ILUkz9J19NQcRuj6ZKa+iJ4d1kvfqKTXLUqC7/3o2iC2yGzXH/evqYhGe7X +c0fH0Wq2YPcGv9ctv4hCo9XNxZH2Ov8cUe+KatXSqn7Os/Y8nyxzUdx00CHkcGgR7M1x1Tgtt5FW +FXSatNeZIJtxA1JyNu7WIaWrHo43+IFQcwfDmeNaTVM7HXfbXm5jtQzlbFgOB/c+N8vYTiflcErO +xtxs2k4H/75X29Ysw8EvD7/V63rKkv66nRRFKKpyWxGK0l/3MUlSeuKgJ3cbP4p7KMbbNnOcvG2y +pu1hCG8b3XG31+WgJ3dcmnFebqM/sNU2fxR/cry9Lt40u9tQqoqC66i19ZQl6Dw9JTl/3tnhpBnH +3TI46/Qcl3dd/Xl+KdbexmaclANSf54vknXXicxxpZ4ic9zD0P6+eNvSLDM5nHvzTCkaArugcpS5 +Tc04vTnGbttjomuHM3fb/XUlFB2lKP1xLpfJH5ePoF+O8JbtZagS6mM2XJLPM1gnE7zuS3H+OhKr +hs6yH0HQSbJg1yW/pDUVqeh/ln4pkkzRA3IqvR0jVWLZcZKb/pymHnr31+kjaHJZXgxZ7grj5y89 +boLToZP0SXAPOROdZoEijdoUVa8xQlAzYikYqhLNxwMyyzr04o9TCXn+M6VBL5SWJg== + + + NUwSuyr0jFLPJvhdf17JZU2v+2od1eyufDyvuz7FrWhFRerJm2PMaTSjYvlq60FRmAzDKH1UePgW +q4ZQsydFXgz9kky17B7DX0X/k+zJUM02dRju49hmmcnZuNqmjyIINT8m+Zej7HG4CLriV4Sif1n6 +4zh33LtpaoeTdjhqh5NuNmqWjRsQNsvcTGOz7NW0muNiTWuzrNU0V9NkbgOdp0+SNeh9TPInx9BZ +fsqy/jp/FD2k+HLZ7HGnND2l6Q5+K4eTgoC4nU7teeNmg2aduNt6crS/r82yNuu4mgZvW7xpbYdj +f179fWyHk3/eSV1DJypCU9PK+iQpex7LbaiWkRwQNePonvcZRxJ6ks7SM4K86PWhx4egDoZqxim5 +awu/v1yWdJo5+MWapmqZqmWxtsHcJjLJDyn+ZumTI6pNS2tqg2GrZboI5qCngx8vhroIhtRT5aoi +tLTBbtU2J6F9iRozRPC6JbcyHz4lr1OtGkLND2rmJKiSXxdQiOS+Ve6KatWU25rYNWSS+cfl30bj +lYqxar3il6SWWS6LUlFY7L7kt7SmtdeJUBO1pqS0hM0uqlVRbeqKWZfMltxUP0UXJCwE6LihImVK +8fMYHX/KEYSaH7Rs0fHsebspnvA3zacPeduUeppQ8zfJGvRCrCpq29rjYEB9Ct+jYNhPy94UPycp +Us0SHoftfZ6uqTh+2XMYPoe564cMeRLcR/A3SV0U0S1bMSqFzpPtgKwZyLp1dJKEPS8EQUFyNjgY ++uM4Ok0Uq6bY1FOK/Rj+5Qhvm/199weqHQ7KAbFBcCdJeNtMEBQhCIqSw7nBENa4WNt6UKw5juVw +Vg7n5GxKzmb2upGa7iQJd91pVT8lWUpPl8t+TPIWv5broNnGBr/663YR/JSk7XnztrlZhnI2HooT +Zmejap3Z4+zPi7cN1rJYy1bOps0676bNXrdqWtrpyBxHc5wOhiDzDJ2nhyTfbkuzzOx0Uk1zN03u +Nhz0PGOYWtGQ2CWJ3RA27T3O7XDQDsjIZVWu24Nf3nGx1vnHURe/O/zWTQs5ID0Z+qOIf57ddbjH +4R63j+F/mroYwltmf50oTVNti2JVUCmGyHAfv7fruDx0AnL8gNW2q4ZpRL0KkZ8C1JPY8ucsZZCL +MY14oJyU4DjLTV0v23pbDxniHmd7G/5tLPn1oOo+iq13DXlZk9g9kV3XmoJG8f68XRTnjhuxqMvH +X+F1k5tuvWuJPe8SzM/QR4qUCPxQBEm+q2SXNcOjND2t6gg98/Bbtc1uiiU93oLfvxRF6WlSU5OK +glLzDj8a9HYRbGESpeD4HkXQmr7qWUSGVSz6OclaFNvv+1UV1bI9KXpGEFSGMJhFrakoPfWSZMMP +5XDkTgOZ4eplVfyfJ8tysxE3IGino2aZuQGpva4lwyb3HNKmoFKcO+7dNHnL3IxzdjYoeW7VNsg8 +8a4DkeOnHFFqunseiQLFmmVvpp0gIHko8uJIe98dhvXXzd3Wchscgv95wpvGi18qNT1kSH8b/XH6 +GIJOMxdBkorq4Edz28xp8qbV3lZSURz0WC0bQU7QXRdv25t12A5H3jafJHEQTDsdNtPgjYM37txw +ZK7Tw/Bjkrwo2iJYg19fjn9JvhnHzTgxl71ilsS2cfEzqWYMTrfSs0SKIRLkR88GuVz8fHLEwU8H +wZjbWq3zcprsbX054uHnl2SJXV2w26LjKv7e9brulqGdjV6OJheGu03+th8lXZxCPkReL78+gtEU +DZtgNYbTJXn9o2OI/abo80t2SyxqelcRq3pQ02OW/BiK0BK1pi+XPaGn7nEyp8FfR4Me/XFyt/Ej ++JMiqCRX7MqHoctlK9dJ0e8Jz3vKEYSWKXh10W4KXkWrubLfVl63blnGFILdN9x1ugiKUPM3RVFa +flJS1Ka5CLLoGPW+PEnCnPZy2V+GqlYVoShfjjTYfVbUxctlauF9DPPx20vQN0ka/GKvYzcN7rR+ +DHnx+5CgP36ruB3RbRK8cid0aOHxilIoNssiFP2UpIccR2m6i6LLcSVng4shPo66CJZK0Be/nRQ9 +5FhrnTfbqFrmUdf+PEsrWzJN3PNyrwONoYgkazBcty0EQSGiQGF7H911rZbpY7iL4m+WvlniYohm +nZGD4kfJFh2Hve2oFEkl2YcgP4Y3+H1M0/Y6mOuSwPBKRVsq+nLZvxRnjzs7HJTDMUFAVE4n5XDS +Dmekqif3pTsv5ra1k6WcDptpc+fZIUiDnx2CdPjFn4eH4Nxt6gaFq3XoboPFbUlNVy770xGlhk3l +OBrBX/TqL5M9bR9BfhRbLSs3IDDH5WL4kyKsZe6WsVonF0PSqvajKDJHVUqOTrEVsyZ77ZrhXBTr +sDv59xUpFIuHf2ESqeT0iS1bNcuqXRX9+qqJo6EK1khHiGoHy1Riz70Z3uPnq2dOjq/H6aQoKst/ +FElm6Qk/UDnypDiDXstpaMahQS8fw3wEP+bIg99pNU3umKSWfxTNSdFlzzFerRB7TrmqSTVHq/mz +JuuGU/7dBMMzGJ5cFmXHYzJsSkt/9HwS/M1RFcO3KLLbZpdkb5Ytuw3T656yXDeO/G0qGr5BQtKX +516WJ9hVzW8efnK3vVv2dpr9eTkIwtsmd5upRWFEfIsSiAW32wkdZKiMMIDHjhJ9L6kpSl2r3PZJ +TethmHY6aKcjf17LdToZrtrTQ4L159kdJ2cc3Otmr2u5bdUyPAxrrzs5m30kR+gpMk0bFEtOJwRB +YXI2dde9mlZuQHARVLHtynVJaXp/XwhyguSgyMkwNscnFfWI4C+CH3L8mKUuhjb4wZvGYtmWuoJE +cESKqfQMleIufu+mlRuQtMNpNe3ccFAOpyTXUXR/D8Xa6+Bto71v5rx322Kvq8VQL0v581Qtg7uN +/jra4/Dwsz/OpJohc5w/zoOOnzL0xc8fwZ78QCkJSs3fJPHwU7MO2uHMnleDH+1xaWfzctoMerkY +3uEnex0/gqi1TK0mzWefYQrFZFf2Nv4EZ8RWP05QRilqWk1Va7r4tguTR4WnUzA7jx+ejjVOYipK +ohhfd8Xuf447CX7U0zfLGfRij2uzDsxpu/jx4kdKTb8cbdCbv07+uhn0aNCrQ08XvxJavui1i5+H +wW4+hnkpupRAPri09OWYkx5JJWExO3LHLH/uomG9HN+u480SlKKhs0ypJSotXa4aIsM/irLcxnLb +KJb580y1KopN9TGUP+4ev9CKtmgaD8UUHLvmGYSiMrfZ3vYxRZNqfsgR/8B242KPO8Es7JZT7cqP +Yft5rz5/MZlKLYti1dJ5hshRZJY5CK6dzrtpctedWecOP1Bqzl4Xc5segv44fsjx9job9GSPW7ds +3ICcnQ4dii7HzZ7Xm+demrYosprGZh2UA4JyQGQu08GPJ0VU65bWtQY9+/P0EMzFz90y++v+ksTB +D3SaoxTlRZEXwxz85m6Dt47oJEkneVpPU3rm4HeD3/19tdehnM27aaI0zUcRH8GUvh+trB2C8LbV +XgdCTVTLklYV9rr4605vu5LhOvziToO5zAa5kCme3HXLvn9K8T9L0Zr+aElSzw9K5qJ3g539cR5y +1EWR5TSPevYpapejLIbspsHdhougBy1D6lmLnWgtYXIL48lP9lrFt2NE/Mhd22GHj96PiiT2uyK0 +u/Q2iU77qwmHXM+itynupliH3qhFWXNrkt+o19VFMe44Ovx6U8RDr9U4PyqG4DNpRUmq+Zvj7HV5 +CIJOUtWi/yie2BMlt0NmmfW2PCmOYhdVz/LH7WZIak3Wq8Lm9kW/pXflUdP1PlPT0E2zQ8/1riW1 +RLVoyk1Z9Mu6adLb+qpai6Fvlr056qVIh14ddjoZitjU1K6rGPbPcvY8fhxDZ4lqUxNa/iLoKckf +RT8q6klPewzp0OtNEgCrlAHUdn/rpC+TQ8ZE4ntN1uRN8jRJt0ghaVKna7KmbdKFxG2ZZhkALIUk +pUZUzLjYocI0DyCVQtJkyw7ghoocOGRG/LqGS8b13d5JHK8xImvbtved7/F912U9r/W8v225z/E+ +72k+72tdvnsa5/We5mOaj0k75/d9ADL8TtN4zdv3jlqXeZcKaes7Ldc5meM4L9s9zfPkrtN1z8e4 +9Xvfax7vaV4fgEmt47Ze1z0f73I/w/Nk39N0LROLoec3bfM8yFymBzBKIen8zm/ezm9+r2vbvm2Z +JmsS53l87/Nbt3nc5nOZJnPavnd7z2+ZZAAunOfxmidz++bjAbxInORBviBrkkXWAxilkDVe17qO +4zZe43R+4/p+8/iu9/lO6nx+9/QARmYMwHXjLp7ma5snc74mc8iEkDQzTjD8apT2AzAZwIoBlO47 +v+1a1+3d7l07vuM5z/e2vN/93dd9neu2Xtu6ze+7bt+ybuP2buM2Xde3667pu85xGfRd3zuNyz2f +07qMyz2P871ey31P9/ad2zLsuu9pW5f7vufpnq/7Xedz/t77Hadreb9xfqd5frfvHd9p3pb5Pqd3 +PJfz/rbpXZdzOrd1uc9zeud5msdl2rbx3KbtUt7ffH7jNr3vec3L/V33Ju4AVgygVO87X/eluqZl +u75vmb9rfOdzmedxmcfr++ZNZG3jeZ7reV7neq73vZ6X7Pzmcz7n8/zu+9ym5Vqn9Zqv9Zqv5VrP +dVrXe1u2a52Xa92+95uXbZ3P8XqXbV3Pa/nWb13v+Vy+9T3He3zf7VzOdTvX91y3+1zXdX3Xc13X +dVu3ed3GY9nmdVvXZbvndZnXXbzO63yPy/Wt17Td2z0v0/td23JN73Xf6zx98zXf67pO6329y/S+ +03d/83Jt2/Uu2/Z+77aM7zjd5zvd57su070u53uf67K+3/W+7/uu7/aO8zXN23V/13Xd36X+5vX8 +7m9el28al28a5217x3l7r++et3Fd1nn81mUd53me3vFe72+97++9v+2er3Gdj+Wd7mt713kb53G+ +7/F452/e3uldtnmb72le3vsdp/scl/vdxuN95/l9t/kdl/e9lncej3le32085vd633Fcvve83+19 +r2nZ3vG9lut6r+36xvd6t2293+k91/Wd5/GY12mblnPdzmVc73s+l29dx/ldvm08xmMdl2k932k9 +53Oez/le3vn85nUej/Wc5/N8z/Mdl/marne+znO+z3G6x3H93nEcx3Vc3nF7x3tex3eZz/GSjvM8 +jeO7jdM4v+v3beO0Lts7ffM2buMxX8s2zss1nuN0f+e1TOMyf/O8rvc3j9N4v8s6ft+9LfO3be88 +z9t3fcv7rt/3LvN5z8u8fdt3ffP1Xcv1zee5TN+8LdN5Xtu4zdO63NM339s9r+e13Nu8vfO7zdt7 +r/O9bfeyfve23fO7rOO0ves7r9u2rfP8vde4vNu1ndu2rdc1Xcu4Xdv7bfO2zcu2XeLl2tZzvr51 +Ouf7XN9veb/tW69tO891Ga91Xr7vvZZtXtZtHNdtm67rfqdrnq/5Oq/xe+dxfad1Ww== + + + pm265nu573se3/m93vc+52Wdpndb3vmelnk65+lb5vnelvsZHud7mu9zmqflnu/3nqZl+t7pnt5p +HadrHo/l277rnr/5G7/lnq9tPK7lu6ZrXe7tnsbl3q7tmrdrHI/r+u5lHq/72uZ3PtfxWKbrPq9r +na/pPs91usfxmu71Wq93Wqb5HY97vq77mubtXqZxua95Xu5rm6ftXu5rvbbxeMdvet9vO5dpm7bx +/MZjvt95G4/72uZzue5rHad7me5t2755+Zbv27bpXsbl+rZv3Lbz27bxWsdtObf1PddvPMbl267z +3K7l3M7tO7dtWbf1WtZ5e697O9/lus/l3bbx2sZ5m+b1Prd3/Mbr3M57mbd7m9b7n7lmOU+0qil+ +r4LlFSyT2Ba0rqqmxeDHu3CNriL3pUmVTHq+Nc8iVc3JEYkbMyhAgCJKQL8IhkV07YlpkVzfZalu +Wbpp7Pf1aqt64LlxqKb16cqj6hyOtDiSnGztPNWdf9ZW1bY+VV/7roKVCtFzkuvuZ1lqWfx9IJWd +QTD+vLwkc9PMyRLNMo+zYcMQN1HYCzsdTpRZ5n7ebpaqmWYBgVhEoJHbyuBHA3PtQCMjwus0KREP +LCI6TFivXfa4qIwSkSFgvCDVtMoo1EISoXz+kyyf2mZm2gcCYnY6qradmWaPZU6aJPcFmadPkvs4 +5qUpk+OJydRjxQpSnten+a/pDZUSHlzQiHj0k5AfkmGWJy+CBw0eLGZmQlhBzGixQ4uZkI8vk2PK +cXAYtp7nWdU6DOuvw0EO/7h9FFEt24ph1OvuZip3HElu4ygJmRFzvehZBbsnt83N8m/VEczaIwjD +aZLff+k4DUqEI4RFgwLFeBpXyRszKkz4wGOFiQhJp3E1zVNWDke442CPo0Vw5LZvx82haGbayOGs +3LaXZm+aI5clyXFphpvgQYMDSwxRASJ4YOIGjB0rJDJKWLEfv1lSJNS3mEap2JUZeVSgQLB7djtO +JhUyyW+qaSAIyAcCMo+irpq/m6aAPKd15cFP3jKSg6JDcQIOR5W+m2h6zbIQvF6iRYwBaGRS6HlU +lrXniZwNfp4sJ9VJttdOx+SuJ6GPymhUwvM0WKkaKhRMhk38XQkffICRTnmqruza5KOL9Leqln01 +vU107Gi+C4uAPrd5+mtrl6cMinyqflq3R1W462isqLQoMSnBcWuOVbQc0uMqpM/qrkdsy5tnLY4h +Pk+CYdw0ZxBst003T5Hr/qmKdrSSk7GkViilE2hlP2n6QdOPqspheJNjChfLhYlJv6ohO95iZVKR +Irl0uk/LT2rmpfiC3Q8VMjROTET2vUdVdetQbQs3HHLDabUt/kB8LM1ONm426IZjdx6KXUd03HXb +rhxX5fpJ13HAyNAwSWkRa+FQIXEpfVhMoBQ+60jBIoQasKAFH+DATAzGyusUPotily9J+vNYbls3 +bQ7Dtutcz4s/jwY91NvCYtj1ujtJphvHr+sKCmWi61DLruq6BLutWRaxbCyGaqf9KnrEChoeWMBo +7f6oTUdwOEXqMwM7xcBOQMiQmQl5xX5eBQrJqvfopnqHpC6Ssee53dZyG8nZ0KJIg2I+kp80Nbnw +X5Y5+M1fF9LnBZDhYgbJCEunSXo6puTLEEnBoEArp3+mdToBeVz3HILPJ3cFoWfsff+KxmG4clzK +caznmdvmht/Jnkd4Hf/AmtPmLpPDLgY9OQxjMGw57i5NF36r+PsJfuue92YZq2Wu1+2mqZpnH03R +DcjJXlugCB4ocAQQLFqpmE8Pg12741A+niP04AY7VrRACYEKMIOFDzAhNCoQLKftMazFsfU8Uz2/ +uFY5qoJguCZN1/t2NM3N8x7J2POAgMFiBQnJbpozJtESNV7weDHZoTIyYxKF1rXlOtfzXpyQuHje +o64pOV7N8aum+5KUvW4EAXE9T2bVinl+GfxOr0uS5y2gTyu3T/Fr8vFRNc3KawPs0IMmBoP1uguX +Sa5KctefVfP0POH3J35X9lx647fzbLKkxfE30RCK9qWJj+W44eDnmY+jCEVPcPsFuyK4nbLnuRxD +c/wDjBgurNbHTV3ASjvMtCjBgwYRNVwYgaMFDzFoZMi0zJTARHKco+WnVV+yHKNnUJrKH5huGtnp +sF4Hf5+6aayW5Z83OkuRmoLa1lTfpjtnwxBH01fv2dHUJ0mPac4iSJOiC7d3kJGZAUNjwnkR3K58 +cB9kSCpQxA4JBKHjRosIiYY/8JpDJqa1fzwn6ynRUbraYMhu2tnhfCAo0k1Tt23luNbrZg/UQXAP +wT89YfpdgyTEtes2Spb8uosViQcVkRYpkQsWCeXTi2A3VceoWdbHUR/Ht/twUkzdtcnHE+NzP0U/ +FCBkppWcTq+9Pzmbkv2+QdJiwRLBcDknxVTTQBCQGC0uMyEkb+edIChyrxPBaxqUKObvY0C+iH63 +HTd/XotT6AXkv+46N8f9FE0u2rrjGCewFiUioRhG0TINlJHWHbNqmMTPY3uN4uFPbruXI7+mLgj+ +rtt2HsnhuBv3cl4tjqXXpVEScqrpmhx7yLjcKBk50e6ukvgp4uU4h+GnbWOffy5NPkVN/D01x3L4 +kZ0N2dnAX8eaYxYss5nmbp0WIayT32Ny3d0sb5KUQ1AGPRVRP4SMFyo8j+23EjNS0HCpYkC/Sc/b +JNltUIAZR1dPH01VrvsiCpFYdydL2fPgjpvBz/U60yyzbPs3TVFZuvT4C1YJhvSP6DMM1wkF5Pm8 +rIsr9YOLFjGpFI1r1UMmZUZLCMoKhPLkKX/PVTZPUxifv5RGKznGQxDmNnsM61G0yXEWRVTLSPB7 +cuG+LHExLLVsCY7vsnTBb09Rn33lUORJcsXjCdHzEy2X5rl/Wx1u83d1ffoT0K+i4RQQP4OE9YIC +sZhAMf5GzbMLhjuqftI1D0caDNlNY7Vs1TRxsxE5HG+zGbPMFkcS27LmmVXTKDk+yfJ9mqD4jUmp +fnU1waqKUp9ixKN48JEeb+G1bpq7aY5g+QXFCRzh44cWMDF8Rr3sj5pw56kbZ59nynlohxNSyy4e +ffWuvDnSXyd/ndnh/C3LguG34ZwdTg0WasbqlJLbIpP0kGHsbWVnQ5rbBvTA4z/VEwRFKmZ7rMCM +WKHSxA4XD+ChxovIh0EvDkGSEEhPUVPszqhGNVBeKlSknRzRDifVsrwk/9ZtPa/lNJE5VmEazZxK +L6QQCZ/jpOhh2SV2+DHC864bJmKGiiaE6IGjxUQGJXoZfVSz/ILeh1VN/p5P1XXT8DFcwS1KfsPo +uCfHttM5+XMPQOAAKn2fQ1BVwz6wgPEh45LiVOoxEvKCtcpFUTW3PrRQgVmhTjMNWtWRy770m6TP +R/a7FkN8FEcsO3ueu3Uvx31Q06THUzz6aEXTjFNuUJRSdIgULz5SSFSYQrD6Da0mn5qne8bAAhLA +xI8hWjRdw+T1gSaQaMIHHQvw4UYRMWZcVCj7VHm2ZSES8uKEBEXHLfpF6XWTvAahZT2Gcfi13Tbi +7yL3fb0utJ5GyKz4EHHZSJVWcttPURgM+XR14XhOkj1aetr0E7uwP49x8vJhRYuPmBVSHMf43cVI +LPb5XTwO2+vU/P6pGX+cumkkZ1OLoAjPy2BIbkDGDciZdWhQrENRBkM7HOcPlD+QFkX+PD/qeXrX +kNxOzXUtiij6bbEKofC2DEhvgQKhZrj1OH9VU0omj+rStEq/it4i+KNoSE3vELxBkPY+7wSImmmm +Ne1H8O1s/tSM2THLj69ktg5DTQcU2QkQuzRnVin9NFEOx90yfRTjjpM/D6bXKx6d9joSiwbhUpLy +663ZZcnsSP2+iPwVkwiGigmNlhT8LD1rGsLf/4rmpdifpR1+q7d9+fC6SZKczdtxsFmG0TQpVUHo +OYfebo4f9UTNcA1yK1agDhTAhxJEwABL9JiR4hQKqWN9DNdO41HzNMezKPqnSWJXD3rG3rZmHBr0 +dHNEAe0lpI88gqAW/QFDkgElfkhADxs0Qlgmed2nqAx6rx0fAQYewEMNGikcfzGFcpS4eIAxeRn9 +KvlVN00vSxDL1qHYbhqMlkt0u0S/U3qcNcdq1mG3LAXqRNL/dAjaYQdCxZSQPoOFRIZJjEYJjOTv +YTvOI2aFhxUyKWKpGywhOFhGWpTERDM9it+Tv0fN72l2T0C7655LbaqS3ZGbmuJWpN89arpy2plx +VrcMo4UyueuVu37U0z5L/DxNciyy5yynjfT2DylSfIBRwTHSMkJFCxIvZF5OoRsdfaiIWQAQQaD0 +PgXspEMlJiNk9arlXATRLQM5G5UUaWblir+P/jxSeprQk8W2LLYloeknVetR9Nn2d2NPurbml+SO +TXK61KoleI31taqO81I06WuXT66i4z01ZdCbQ6/luBcqJrQY0iDIm6cdgmyWrZ2O2slAEE5fniE4 +zpNlKVVZnEQuUCAXJw9sblstywZw4ttwSHOtgkLJIzluQHZSTIEipV4XdJomvf45z9nrUqxOHyjA +ES/HrVqnN8UXUQ/EjEoSOVpMYIkfjsDxgk/P2yQ/bhuHIex1KTyuwt8tRr8Kb8+h96E4YaJpVX23 +XOd2OqP0LL0siW6r/PtHPdmMo+PFBANMBMEjBiWGNUr54Cs+vppdFP2mZteDommWzTApSRmZcNOU +Qc8GvRH+VrEq+UCJ8Wj5ht5KitQEDzdmXqnUHZ9ktRSvt3r+7hrjcyR64EhBEhLzcxWtUkvIF+Ht +UYv6aEmLoec84887Oxx7DFF8HbSmtgj25tijp6pl8dfNoEyl9nW7DdSiLH5tABgsKHDAEg/YAQeM +FmovQ5XTiAJMEEAmZIREuz24kFnAEDwQwAcOFSIvkT533bR+kiydlmmdTHQMalcXkc8iFaI5iWJM +JL0kzQ5I2dmEYtcUxx+0hNkwSohXCf0pIE+MaaSSY5XLUkI+jpOYC1fKRb8rIf7F9DHNbd+eK0JY +L0xMRHAcxAqVHmRQWrxSJZilR7A+STs1X57eFNP1KKro+ETPPeMoc1ztdXgI2mOIn6XJrnFUdTuO +JbsuIV/HichM6ZfxMtUYWanq2OOmK0JWLKP/NMN+m9pkWItf23H5uq6ex6fqTZay5/3mSXLd0Mrm +pdmfappxIshmL03RiopSk5SWvejpYiiDH16WpFjuU5UWxVsUU5RCPrSQuGQ4F8OW21Itmz/PxOdr +nJiYICCpGP7BQqIAHCoMQEPGB0usxogK5bPrJglyW35lXVDUS/NEv0ds+SW/eOi53ZZqHZHrfmIa +5HRuMdwhZaQBPWbsMHGp/Dw+ji23AUFDxgtE0IEWv/+puCLlCSIFiQ8yITJiJBOd3seRRHHiiBkw +VoyYvJ4Xd9xJbuMQQfUoWcV8epXbdBZNgBFAzIAEIfjAsOqOYUyfGCSsGSwiO7BYyfFiIvLp7XSM +cZ1uuJzg5ViLnsqOY/sN020a/MYNiOt1L0ZgM60VPYZ4KcLuOcSuUS778ulnsEy5GA== + + + pnZcRgsKTYpEgssyqtELShRqUbfLQjw4ETZmuEAl1B3zgDGJwBE8XCABR/TgAobkw/crinaa76Yw +K5LJxz8BeQjgIkWMFUkEn/30ZDtNBjvdFP92db3PT8seLiNJyEiRggRq0fJnVduOc71uxNOnbFtH +TZeRB0YsBSNENbMqvYipVKRGKnu2S5EDCUBCRsoKC8dTfp1mJVIJ9SN+bprnt+s+rfqiMpnsu920 +OgRLb7uaaR9VQ20rcttU02zSc+Ey8VA5yXFCMqLXMqVPDBjKNL8kIH8DTCihY4VlJjVKoSKxarkE +t7IYopnGdh49kq4HglY2Bb8l10XFsB2Gr/eZHe3MNlTjMh10eD2PpOdTMFxiVZ0UbTGsRbHlOlDb +hlq3ddeptwWl6SdFWfRcYlVW/ILQs+Rw6M97kSrlGGmh7LcKZllyCzPyqHz4Uat6WPUNxZPz8HRd +u07dtLwk77J8Pe4mxbfr5nBMNy4/0RGPTtMyhfS3yp5NsWuC25Utt3RcV88Se6oo8TBaoJE8JrHn +JzX3UeTJUSfJVMvcjns/rw4/PPRQripq1dskP6+awmnfbe9RxPFKNYCGCiJmVnKcsGqYrGheJ9Is +s12X48XFBwsW/4rOEGFFAAgfPsi4sIR69+vMbYNB8LXjJlkOuazMCGRDdaIRiVZpykrREDpuu00l +ZcIAE0m8KEGxQ0/klkVuOcSGe6C4hlDB0mIkBFdVldNHhUmsxPQJ+eQpOg7xcRiPm+i4JLulmH3p +tYzqpKLl3hRDaqmKW5nT76NFZIeUEJiPR9WymwRhUB+UT+9Z0T41fdRs0fKLKBTC8zNagmiYCR0z +fMCw0CgRoVmZUD47TKdRdnyq3xcnr5OO+y8rkxLRqEgqIg9JfmdyZDWtDsGPqrqf6H7diI6P8HnL +pvOyxE9zHseyw9GRIiUDBlCAipdKaF1J9vrF9Jv8N4lvx/ZZZeSf/LuOEpcLyEe97Sc9aRH0UbMm +R7TrOg7HtOsjnt9PUVdus+46Jcsktp09cNxwNB10qEdxZd9t1/0panpb0qqS2BbtZLD35aZpjyTp +fVtIpVZ9h9LU9jwdBD0k6TlN0Xn6JEl/H+l1R/gdBb+s+UXx6Ke5PSH9JiSR374o162eN4rlkzyP +HA6qZThJktoWNdP1SJaZdqepi5QVWO+38huW16I1zcnx9Tp/RV82PJLPLfolrSgrdlcyzJLjVNvO +npdmGfx5Z9YZORtPir6IQi0gz8uWRfo8N8vV89ZNK9Ht1x276rZGiEkGBXLldp+mLNepHBeLoa+e +KlalFzGWyG6/bBklv61c/9f25bgZBFN1jRIa3SMJfx7dgbtIpuTYT8/+JE9xe5PiPoYyH7/Fz010 +2QWkt4h6lU3PItjDTEsEkkAihctl4ucnuIXlNcue/zV9wY4OPR81YTyPo2ifkjEjvwcT2IxT6MXH +Seq4lKaupnlQ8wWMBcNxlwzLUJ1UjEKwmlbNs46mdCkaQAgePIjBDGhIUEBwm5LbFi3SixBUDpaQ +HCqxFySrEw6j7vcAPvhYOZ1SRv8Kl0pV1yA0HbUtb54kh5Oy5xYvWMh1V65DjyCenrqqelr2ROSj +jEajOJZRhXZYGdlxMuIi+k98m0XE8+k4ilWVDdck+GnTUuzy59mfZAx+6teVXhfS89Fch1xXJeRx +2XNfjnTXvRu3k6bsebDXrRz3el9MaYTi76h11cWx3HBKToftunTjTPBr8v8+qsbc1osiyUzHYpmk +qj1ZvhuHdjJPmobw+4dVVTTMMuJHfJqmRWIphUjw62FZEQyT4DgGwTPT/HUNte6IZXGSPLPsQ4Gi +ZNcLMOKI/51lMHThM0qGPSmaj+OvpifZBbGoCW5btPyq55H8hs2zimV1cXS5zeRsRBQn0k3r0XTU +uqS2vcewJkW363T01MsSH0WVy0ow6oMFNtLnJPgVta66cWWmsV33ft1+ligaLsHsh0330wSxa3+a +sffp5ulh29s8b9RM8brolUfte+LpU/Gbj+HsdW7HtRyXj6FehqP2hOGySX+zaLlHzRIP7+r9E03P +qFCrmj69b0hNQ2ran+QHHUdrmpvomGX0GJr4+smuq1rWpJ6mNSWxK2+Wb8fpZjmDYKyeY0D/Kn77 +s7xLsi5LXj1xpFD5AAUqEPtFIFct2WkcJKkZIioXsBMLV6nlBDLNrcp+keihAwYCwYixfnhRMeF3 +UaruZdlynAgCwrLrGygtH/ZlN85Jb8OIRCyen8Xjx3TbX1FPe0LgiB9CuHjx0vGQm6rotkW0m2I1 +1J76ObKe5vLkJ6MRTZKwO9ZJMSfHmyTVzutANi8Ixh9YbkB4URylaildR2wcH8U0y7oTJ042DoQK +mr0cX25rt03+Qpw0+ROlQ/H+vrbrRE7n3IDoYlh/YMt5cCi+IFiC3Zc9q1zWBj/WTftwKakRQ8Hw +OB89++tC6hlD+sSQQh92HTkdU9v4ta1H0t24NctcbuNN8wWM5aJkpDbNkPwCoYIlBmzFmuXRqtZj +CIOeumU2Kapq2jTLJZ5/RNf/sjQ3IOYGpNyAlBsQEezqKGt2NhoMU0CfmJ6DVNWTojUYgidOhCAn +YLy9wwoYUvzyqRmy36JWrUmR9bpTy8iM42nXFl6H3tcWx5Ucs2ZZN09aLNGNEzkck9LICB07dvZ9 +v2/Uqiv4Vb2viWV980S3zcw6Izn+AYaM196TWla0qn+K3uSIclw8ii+Pp0/V1123avpFx6+XJaXl +ToYpx63eB3+f63kqt33aNjXXpPcNtSz8eSNnE3I2p6Z51vUmRz0teTZV4fbKvkXvy6umSIb/NX3Z +swrSB6W/UXIbctWWTqtoN+SipHj9zK7eqqp6BqnnBzVFqkpyX5Lr3uGoZhk+lnQY4mEX0+chcjxK +z485zmEXi93vngkIogeLkZQUHa+E9heuUovUx8W3X3Irg9zadXho8fIDjBn5iaYckHODItY685bF +m9an6n2qIifLBqDDXpp7WaKczocChZllMwi+3/d+nUmO7RD00bOl67M4ptpGbjhnRyM5nW/DUbmO +N8v5A391Zc00i7ZbOw/Tcxc9h0qT9jo/RUtzLIuhToY1QlgIcJGCRSkEOslcBGOvg0FQHkuRk6GZ +po/jaGVHayta25P7jt6WV8+ZkZeOlxaPaYZQU5SiOTnGoEePoAx+9liimRaC415d2WyjvY8fSZcs +n+C4Xpodig2nA4oR66rgeNUy2PNCbvuv6k6KPTne4EeD32mGXU4kEz4nqSb8dabW2cnxc6Khda3F +0OW4UtvuJPl2HKptdmm2YMh64L6yNlmGG5DbJFH+XhfDfgx9cnS1Dc20tuNGbxuzcvGpq5cliV1V +suyjKY+ishiqHmduGazfV0YkUKqq6PhLyIfZcshl8fNUOU7kcGKSZO38541DLDti065ZPrUtynVF +61qXZkyONGZefMyw8Y5mHIa6aYZalk/RPUVtcmw7rYXPO1bQtD6i2iRp0UPJa0l/f9q0NslT08wO +B5bbqZnmT/OTpp90PTecVtPuUVQ1bc06+/h5TDEFsyb8PcLjqPhN1XEodltQIxomsZSPH9tr1uyW +WBT2OnPLQPX7qenbLMvNZiXHJ/odQscwOg6x7TyWYyczMw03T3brWo17zTOLE6kEv0vt+qdmiF3b +Tfus642WGLULvRMgqrbt5rm6dRM8k9oWxKogChDeRHOcoJho3MwyG/xIrDpSUxnS58aIa8UKxavq +XpIjeZ3C4yZ3tUMQD799DFex62FdsqP9LrxC9dpN1exkI0in3T47DEXvCut1z/vio/jy8yr9DlJT +fATzcmw7TtxwVI5DNQ3VtH4sVXZPPpLttqkdDrnZfCg2qdb1aFtmW5llenqilEIknv5PUbnTWo2D +ckB2k9RN8+283ixHLNuTo0cUfZK8RVHNshHFiRoE5zDMzRPEsny6pt1XalypdR8KkA4FCvb7chRd +N80GvZS7+uY4allYjofcNz6OpJaBYDa26yB1pcPQHsf9PPs01VHUBT/W81iOa820qp73s3xDL+24 +9vPu0hT5Q7FInprmOU8aKVNIPf8muYsi7HlvCMbkiPJ5l0gUel9YXq989hSkkF2WJseRmlZmGUl+ +Y2Ih/jvfpWmS4dhNl+Q2CW7fEBQ7nbLDeQFryaBW/7qa4pjkxj66ulzHctu32XAoUOSl6EHNvBxL +LvunaH+eJvg1zTHLyXTyEYVYdqUEMslwiFV1sxy1Tdy0UMvErGNyOCe8PpLfpHYFpehOlrZItp03 +h6NdquEmcztw5QOCKZFc9r2bKPx9LLeNGxAeTVNIKbKzjSAbErviIAnpsaISguv2OKrcxp1AYZen +SUk1p23KcSke3UeKCIuVycVJtOLnI/lNh6LLcbg52mT4r6nrtl8z7IrXE4uemfaBbPoWdlGy4oYl +LJb42apyH6brMadSS89NbcvPs8TTg154Hke8HO1RfD3v9TweVclOlulwwsw0z6memRZuNq7n4Wnb +s7OHpW91/jRPFSr1mFHDBJXqWXY/TTv8+FKkv272OvgDU62jRdJH09n7Vg7n3IC4Hed2nR2Ge8rS +KcvD8+ne3fEUt2/cvpILx85maptMlvM4qppWYlcWX0e9rY+ioNa9xVLcdLoOp6dnkJ3nKFqK4ZDr +ougaRdt6uq4gyIZh2nU0Sbrf94Zg77b6qvJpmpflTZJjh9OBoEg1DbSqb+jhqVmyab1tZzSt15Yl +S5YkT/etyutT/Ybc1QXBdyRtdK1LdCbFVgxNbtvRdNTCO0l6zHJHy/Tr2M9jue3jtqJXTtH0K9c/ +rGuXaKptZNbxNhtvs7FLEjfRdONucvzX9VdT1SyjYngEv7IY2qZIgB01VlIrkyyDWDYezdX7yCzj +QDaeDihcNz3y+/aJwmEY0vsrvUfZ+mjOY3Vez9iO8xTI9PFFI0/px/97jXG0jUPRk6q4SGYC0KHl +OJM932ESsrLpeSRVUHRPdZ91kV+6a38U0U9972hZCWKFzIuQWEmmT3b98vyet4bJMy5N/31V972q +a3wM2a2zbh33A2m0/Wle5JNmGWcZYWkRSWGNUiGbV/UiHK7P8cxjGhUamT6kku4x1bivujdpvt6X +bly44XwgnHTrRE62bTgreapEKRdJjEgJjAoVc8FUQKSXDBs+ikCCCVSItfpLKqcWar5F7ruTJNx1 +ZaaJ2UZq3Ll1K+fp5jlq2x6OcThWgUSxkZS/1ELFUGhmYOy6SN9JpBCLdQoB1X0ptld2LofgB4Ji +BLclnx70vnua2uYJk6kd86YTLBY7+T0jn/dhWFRcK5UoRPqETLv+53bv0X8dlm1V9WFYxfMimnbB +7/28OQzpUWRBD/W49PNiVQ2FQitY0OzIceMkhaWEWv0fk9vS6NnidI7HsU/HI9yezfQdTfpUUQ/8 +so4aerqK9mn6gqHqcbgpmm75fl/ahdXyPEkzJc/R3p/8T+3CM+reqHuj7UyeebraJA== + + + em4eB7JpQXBf19o8X1GEyRFGT/Y0a9ltEQPzMkIiMhqddF1O2bdE27E0O9D1QHsUbzTF3fjFcrFQ +AeMIJBAgAhGcoAhEMEIHTMACBVQgAxPggAdaQIMZoAAGMSAiiQO4YFFjBTq9JKp64TySHjRtNy7V +tBG/p4FCUmIynYig0LSYscMHIRIwAQ8s4YAPAJEACdDgB0AAAhGMQIELeCAJAhxAAhfgwAdEYAID +FOAAMlrQGPWh+FxN+n5SKv3wq6fqXJZwOeZu6yKdZtTYIQkETEAELJDBBEBwgg2YgAUlcEEMaOCD +H3hABTAwogBNDIHEEj8MUYQOHz5iUqhgSXEp6aGU/rnN9cy2spN9IBvX+/6VzU8URlPVK7bDiCMc +4IER4GAJTgCDGcqABTB44QhRiIIJaJCDCYSgBAmgQAZw7IDEDIyLEVaIiP/MLIyzLZ6ieIryrcu3 +bvqBsaq+ViuREBOZGDpuBEGADahgBV0gAxlygIQldAAGM2jBDWhgAhfUoIgCRCDFChuf0AqH8TYc +Wc9Lt23tttsk+XWNRbHl4VlGRmLMyEHEAijQBAdG8IEWyAAFNLhBDYYQhCpwQQtRqAIVagCEIDwA +BCaI0eMHFhkYJSYuIa3WikgMCR984MGGDl+ubRStz7NnW9Suh3qe5WWlhxA/dEAFJnhCFq7gBCpA +YQpSeEIMdvADJixgASOaWEAOIIqAcXGDhBoZiU42YsTw4QYP+63htJXRFR5NWCRXd43y8U92TfL4 +Ly4qPwSxAwGWIIAQSCRRRAMiwEMCFODiBw8nMTMsZMxwEYMGSUkKiauEFWKF7g99suoXqt23dt9s +oq5pvqxL5/toxdIBxBA/lFjiCAhA4McSTLy8kIHi8pJiBc0Jy8qptIqxYCUtkVDNu2ixRDx+jRYv +hCCCiBGwAAVNoMIUkMAEJyShCUnoAhi2oAY2qGEISUDCCmTwghbQ4AUvkEELFtAABvjAQw8vJSd2 +2qZeKJtpHI52OKpZprrnIWywSAKIHxfIQAaM4AQmAEEJSOCBEYrwhTGIgQxnMAMVrCAFLGjhCmIo +gxiuwAUt/KAIQlBCE5JwgxvYoAELaMCLFCtaHlCK71F6vn7fOoofeg4pkQiQxBEU0EAGiNAEJjTB +ClY4whOasAUweOELYxBDFK5AhSQ4AQlmOIMYxmAGMSzBCUlwQQxSUIIVlKACGLBAjRk2SlIrmNar +JM95ac6g6Hbf6337aaogEblABSxQgxvMQAtdyEIXxDAGHBBhCE2QQhPCIAYurIENaEACE5TAAhm8 +IAUuWMEIUHACCmRAAzt08IhpgYlJUXl9/pCPz8rvVE3/q9rydSB84ECBC1hAAhe4QAlRcMIWwiCG +JVQhCmlQwxnGQAYxJKEJSmiBDFgQhCEAQQY1wMECHmCBFS9owFSxkv73bgxiWxYR6KXvfbr26goj +8mKCAEjAYAYxcAIVqPAELGQhCli4whW6wIUlUAEKOwgCD5rQBCNYAQtUWEIUotCCGcwAiSUOYOPG +Dh47ePjg44eKl5iYyuXTt8imTXcdE/0yWswgIAIK2MEQeKCFL2jBDGpAgxW0oAUoSKEJVJhCE85g +hjBM4QpV0EEQfjADHejgBTXIARBHIGAFDBsuWMBQ0RLDGo1iJ9PJKvXygEz3TVMisoPFzAEIUMQL +ZPCCFsDABU6AghLKUIYx+AAIQKABDmpghCMUwQhIOIIHREACB0QAAgxwQAMOwMQBaMi4wULB+LvP +3XlnX5ssfRQlAfkhKRMLFiyCSCIJEsTgBUZ4whOkcIUqhIEMYsiCF77wAhzwIAETuEARBkjAD0UQ +oIeOHmLQvGgZUclXuBXHIX2fgAIoMYEKROAFMFDBGc4whje8oQ1ToMITevADHHShC1iAQhSaoAIW +qMABD2jixw4bLycmMSYlLi4Xq/f88OxpY1Xb1k7nDkORHadppViglEwgAgyAwhSYkAY2pCEKV6jC +FbRwhTWs4QxgCMMWfBAEHRQBCUF4AhSUMIMbyIACFIDAAg5gAB5w6Gix0tKyaoHiuTbN9ftSUdzf +d8RESmIIIFjgAhRgQQtZgIMc4hCGMYShCVFgAha2cIUraKEKOOABDYJAhB1MgQpOeEIUkmCCFYjA +ARNoogEOaOJGDBglJ9Qqx0Mti5dk/H1yGK7cBoNey+qkgxe0QApLOMIYvKCFN7ihDWIowxiugIUp +UIEKTaiCFaDwBCcggQY0cAEKTAACDGSAAk0wQAE+dOSIQUMDIzIS+/uTkJ+S4xJ9X8nyC8pExA0a +O7DBDLawhSxkwQpTUAMaykCGM5ChCU5IQhOYcAQe4GAGGbiAAzaQAQhUgAIQYKIAS9ygUQPlNULC ++7pEe/RcsUKh+B7T+qriOiWFKgARQZAgBB7QQhaq8AY4vGELXwADFKYgBSU0AQkwmAELToCCDpxg +BSJQAQxY0IEPbEAJJZCoQWNGCxYsWrBgQdKCkfpPvbIkuxb5+C5WSDJQgQUkIQlC6EIXspAGNJBh +DnOQAxnGMAYmKGEIQACCDZbQBCFoQQtV6IEQelCCFaBAAyAAgQEW4AAfQAgBE5OiZTqdep3llXKh +UvKySp2URAT4gYcKQqABIOhgBmlIQxqA8AMh3IAGMLDCFJrgAx/ogAQm8AAMYoCCH/TgBjrAQQ0q +UIEKJIGEEUL04IMPGjZOYCUlz0hk7y7930nTN8kXIqwebsAYQQg6oIMc2IALXchCGtKwBipQgQpP +kIITsrAFLEghClCAwQxoIIELaGAIIpDYYccOM1S4YImZ9K4sDkAHtdM51bQMk9iOFxQheOTowAYq +4IAmlkACiB4FOCKIHzVqiJRKH/j1uC1umrxZlty2NNMzaa5cN3feitOJxeMJpWmbZWnWSVmtRuCB +DFzhClQYgxjCQAYxeIEMYeiCDGLgggIoYcQRQ/TQww8eLi8tO9iIISMSIhIKqfbdZCRi1XbK53/p +uO+6cCjO42iqYwIEwUMBCTCACUzwASH8wAYYoMACmjAAEg1AwBIXkIACFsCAAnwABBUgAQk0UMQP +PUZQIhOUqAXJS0UE8qTpDII3SZrkOAS/cgja5KiXpImWXVytGylgmEgiCB/0wAZVoAIUhiCEHmQg +AxboAAYmgAQPO2zMwMCUhIy4VrHTyAXy9OyaqmnYba9mugTP8BfeJImXouvXLRABJiSwACUqEIEE +zGAGLaAABJpgABNGDKFDBksMdbIasbxQMyghLFRMQPLcep7PsjOt1klI5KcrLpL1J86iKDISuWBJ +QYASRPCABzPAQhaswIQmLIEDGbAADztm1HABw2KGxWVlRMaKFxwvaGRWUFSkkI/bMFGo1XvudH1H +EVdRUl7zkKEiBSLQQBB6YIMiCEEHONgBDU6QAhBYwAFMJIAAPjRAAUSIYAQXkAAFGLCEAYz4wQOP +GC5Y0MC4mLhaozz/zK+rz1f7za8pqZZZXqsfMmDkkNGiBjVogQ1gIAMIHMAAEmCAEkwQAIgjiuCh +gCaIiEADCiABCCggiB5+0HjBQmZFRaZERKUFGzmxRkKnX2VhjoO5TXXLMFJEJoAAJZZgBCCMwQta +UAMazICFKlTBB0HgQQpcQIIOdGACEoBAE0gEwcOOGDBk0MyIpFIiu27pOP2Bp/adEYVioEis2D21 +zphtxg6IyY7zFEUzrd021OvOnEwrWiwWXdMeSHI6HsjGBcUQvhe5rQgCwulwgtW4FdBPkyrBmEQm +pdAr1M+QqFKIqFb8vcJt1k2rbvmU0yejPxS/c0muXyfS60C8qPQoCUG1qm6SPWqiZjdVwzEuky+7 +NCqicvj137dasiHnideUl2lHDBVB6KCRsmkUD/9C+pTo92uOa/CrRbH1Oo+a7ujJdpyZZWWnE2rV +lA9P0t9z+aHh5hrxP2bQAJFjxr6meBmaYlUlpLfwWkfLWfzoUdRR9NO+PgvP4zlysrfrSO3qQmRF +st9aHWM0DOmzq/T3b+qv5QhOYXis8slnVqIU0ic3S1LsqoxALSaSHIojpyNyODQIhtIUxbOL9Lje +mq7STuPFC40Lykvkj3BY9eMine7nlvXJ/Tqe2RWEyzVOYi6mkK+irwiCWWcmwxCsxvTah1VPrbqY +mGRkREyk3VO3eUuGcJcl0l8i/aRFAt3050VdRDqOEtaMykST4P+yHvhFvc71+ycnlM6y8ymisPwU +KK/XyDOy3Q/NnrhIPWLEKMAIIEpWpJR/o3gbBupd/k6ya51l5ZJswS7ktiW+D8vzEpBPut9V6J6x +AsWHDhY5ZKSIUYmlhJhWRE4rXERUoLxGQr7/tnE5sqBnkl+T676QSjpZvhz3q6mobVVxnJJfkh7/ +19bsaK+fZISOHijadrtOzbT4A32VhcVy9cKyk6FbNpLlv31TMR1DGrmMQiI5fqLjEf2SaHdXTZbT +UPPrAvJ9qIgM0aJFReSH3nYuSVcMRbBLetmeDFUvS5Mi5UgZ2eHlxIdKCIoH51GyX08+NeUQrMew +BK8i+wxjhDXy8yL5TTdNJmX6V5XlNN4kVT4eF65Vywg0ot8n2GU5buU2kMvCCHG19Dw3yxj0RnO7 +MuJnWKKW1EgWvxZOj+x4q55zUuxRc2XLITsugt37RE3uIztbPpal9jW9rwl+cXO8S1FExyeiz0nH +39AbuekNWGoGq3SizyQ3LLLL+TniZ9mvKq+mN0nqZZmC45WPP3LTIbY8YlPX05T4gcOIHz9gn0/I +z8MwgfmIQfmhRYwOl5IWI6yRXbOiSMLlFSlSSDV1EiS9bOuuUXjcJJdZL5tqnFJOG+GjRoxJSa2W +LR9/aZ1mqIj0iEl54TLB9Lo2R5WQR8UppOLJVbL7fluelqz9hmmpZmCsk43X57nSaxmX6ZTbfat+ +4PRUtzAPLgNLBTEjxgd2UTXMsmdRu/oqepcir5o+i+roOOLrJ//HHkvcLElyq8pl2I+HgHY/XuVU +ZAkx9WCxgrXrqFseyS6flrhJxiGobppIVUs8nnXbVi1bgSK1OJFkPn4M6XPy6W3zPLdNBkwMEXJA +g1E8u1zHm+ZIz79wfEfX1QO/zeZOyyZ+2IGGJKUWy9P7klp2xK6rWk4hfU5AO+ll201j6XnKvlFE +ohjUCOWjk14WP8t3DONRZD3uJkMXLpQQKVaGoHHBcRI76fHUq55e1XXPIZfdyTL1vip+ruLBVT58 +aoZxs6RJUcTv/TS9yVElwz5WTmDEWC2gPgWzpFYtwSyqhlFGHhDM0uYIgl1UPceYQC5YpRH+/riq +n5o8VkpihLj+FQWxKQsJ9CK2YsE6nXhy/SzDTsfUOBVN66cJf15ujqcZLslvCglUI8RVil1eNVU1 +/MLnkR5HweqpNVtCOYknX+n2/7axCMYhiHJfkxvvUTIvw/0cS3KrsmMdKyU9rGCBIhL5AKOiABwx +fLSY4FghCWIFywsRlUiGXRDM0bL0urkIltRzBSnkAvKgXtZzjj4Z5mX40jIdoaNGCQ== + + + alW6ZQLMWFGAGi96tJgYseIlxqq0muH8HGFQJtVtf9gzls8pf96CZfrxkpJjxWTFJPJb1SO3O2hc +gIghY+QDIvn7GSWtF1IvwtMjHvyEJOpfd0TLP8vaYgha0ZJ6uvR5DOkn2ecTP/+oq7pxnpYd0W+T +/fbN8V/PnjXtVFxRfYBg4cIU0yj5dd0yCWbpEVQ5zcw6J/ntl6SI4gTMaSO3/IpdfwT3UtzP0S5J +vAxTpEQ8zMjU4tif6G+euijuJMmrKW2WtTmubJiHFS4mJRMthkDMuPhYIZEZfV723LJnE8zu5Qjb +9wwwQAGjOn+9jzXDQKhouYEygvLhVUSeT8uyX0eqZRhVySS7K9kl2fORHH8J/T60lCgBg8bk93hS +FEfKCQoIpIrbFSfRzEk0gwTGQ4oWGZWpP80TEokAOnioblvUoi2Zbfn3IWJUfGARmfEywZT8WOxg +IlASOnSwcn43RZeRZwbKSMwKRXMSFbHCBcZLhZdiTL9feX2SXRGLwuqVVbt8eoJYVcXvdZPEUTHG +CYzFyMvToqW5HdHpVJuueHYXrVQrt2+UPAHtMSaeh5RXDZFVDZMYic+3Hod2Gx2Cb8fRI/jHLYvH +aWAqHCshO1BgLiWQSXZnUCIeLSYiuf3dU4XUk3xwkxBP8ulH8Pt+IJpldwiaXFY3SR8t/dQM0esb +JKsF9IiRgB41RkajWy1XTKEXj3vY8pW/NExYMEhYMUhaMqoTz6qmuYXhIsmIepTdPuHzFz6r6DdV +vy2pzw8wUrywXKfbNvl5mJNohK9VsEQpViKSEB8i6lW9bqfo+3UwfI7J78tdT3QaRruq+aVJkf26 +l8c3ybGPmnboheizjBCUCpWoZJ9R9IubZWqOX3d9l2Fdgn2LmuYXxrP/ZjmHII2YlgUYEYSIVWNQ +JB9YuBTgRoocJ64W0R4DVnrZscd1mwBiB5aTKXbPOFBEbJzAbqDAcpzERvZaJbu7KYb0txA0LiG1 +HEJL3xxTrgq7YxO/jiGSqoFSQopjkv+zIgqxjD4zqRGJTreA9pI+18/yX1NPeo5kV8UILIWL1bpv +PjVHcMu651ifx6xIPWJaSv4/xuvU8tlJ9NoFxMecRK86DrEpCwr1A40Zn9hVAe00YqcXkP7i4yy5 +DbGoyD1rEmxhEpLEDhwn255BiWK8Uka0oFECxoofYk52tIjQsEqoek7BQn3clQ67FCSPECmsFSM+ +hIZLK9qX4vx1p9q1AAF8WAFjifg1DpSWDywoNCC+h5QYAWLIzLRSdSnSxFgjoR/UpqL1PLlqCmZN +rqqa4R890c7mJLQrsYPHbpY3Cf5u6sJj1x2rbHjkx1NIH9LsrnCVZJCwTEJ7DBIVjZMXTNf18yTB +cYnPu246L0WT0C8C+oDY9ISnaZCkcKC4WoScWlIi2KfP2fTlsWe0jOSAMbGhEgJDBNVS+v9WBblp +SW/fZKijI8mvwxhprXChYISkinDx0oQOFyl9Vu31DExVkt+UEc/EDhc+0LDMQHHBaJFSmEIvHt9b +VWdR9+NibzPBKouY6YgaK2qslKCYQL/8sqF3o+WI36NgtwSXV3p75ZOTYvZnUZOPB7b3PWqyWJle +sEoqnt0Vu6P1HMXrS6s0E+JK0XMQL1YkYSNGixbqVb+pmBXRZVS84qSY4qUaAflE1FBRAggUQMcK +CY1qJCOGSsmtDXo02NG4Tj9kWkwue8LbSNCkFBFT0uOktaNklaOkVYLbFFUKBiUQAQOOQCLEriwg +HcZKNGM1mil9VLErYtN8/ISgwSIJQtjBBRrggFjfszARsQGDouPFxAeMiY8UKS9IXig61pEipobL +S2y/Y1QmkX8v8fMTXw/p8RM+66qpAvJXrEqoWC29aSunWfjcItpxoMB4oFlpWZVW/Z0BJo5QsVqZ +1rQVrzKpz46YkxkqIrE+Pwl99LPMy5CFKRSjX5/k9DBbzSust0VyG8LXP1hipJgd+XEdKyIuoh+G +yyH6nALaXXrtaVMZmIukRJJRlUpuufWmrniF0W8ITotYVNU4Jpn9AdPC8uGDiCExgA0VM0RYMKT/ +ZeTDEEHNtEokue3BYgYJHjtiO30DxeXjheRFiGrFqvTilWKhIpHw+MhVI1CEEEr06EHkppFowZIA +HzSOkCGDRIwWB/Rgw4cVKVR3bYOlxAc0iEGOGJgZlwnHSkjL6Sfx4CogfgSn4S5z/TkElhhiCR8/ +Rvh7BaTDiJF8sMRSpD4vYqYVMJS/nkTcUHEAHnqkeK1gff1i8rBQkWa8UjBcqlRuuyB3umMaLik0 +JLAXJyEwRFoxqVGoht9TXPW5jRITkaqqKPk6RlA/WkRexFQqH/6F27ZZ4uboWdPcHE8xK0QKFBku +EgsWSEVrpJphEX7vgAIQUIAePV70jGJTFP9+4RrRiJ1MbApa0fwchcABwwIGMAImRRLZbZgRD8Nj +WF7H8JlGBSLx6D5ayoz8JVq4zJQ+MKBchadjOs2zqQv0KeKHjx0tWpT4+w4psB9SXjhWpZE6Dqmm +iD1N8MojBYoGHICAHDQrYFImDSxAiQT8oONHDMoLGGrGZTIZfU61zAOMFjuwaHFDZSQCRPzogcZl +xvRRkRLF9JpfUZoETUB9SsiD8tlToEIyp5DIXpPwdA8VkRspIiYkEImGP4AAJWSIiKBeNma/PWBI +ipgx40OLlxeUqOTj4VNT1KYtv6fksiy+neK3fZyogFCh0qJV2lGy8mElRoLVGy4oHWiCCRkkISM+ +PtLbLCPPyykU63FQ3O5sikMlJMXoQ0LHUkqiXLVlx6x7HsFsC59NPLzMCdTEjhVM2FDhcgqN8LfI +XquEeJJfN9GuDZmXHVqw4JECkwAPMhBwg+ZHi4iKlCjFk5/4OOueUzTcQ+YFxkmKitFvgR1mTGCI +H0jIoIERglrxOsEYcbXumYVIKgUe0ECNFhYaKC8lbrDwIXPi4mVyAfWxOoY9baTUl+ACDDgADz6k +eHIhVKgEQZOyA6X1Q0zJES9cdryYiF41BiGAwAYcEAEa2Ovl5AlixUoQMShHxKgYEaNC8ul1lGxB +wqpBCTzg4kSFJNS3nP6Y1cjFZYqJehWS56TfP6l5YwSFg2TlAmZKcQKl+HrrpnlW9Vc0Bj169FZI +HhWtEYxIV3HyUXb6Y44sJRALkdfJrmF4/DL6VT56yn+X7PKpTfERrEtRJtaCYaVQQH0KFAhGK/RC +FfKhZYQIGROZ0P5u2cppKtld4XMSvT7CRcsOMCQ+VqzwSJGiIqSl0m8aLV9SpAPciOGitRKhZYyG +XUqfFjBTj5YYES5ceLycrGwZBiXigAKWWCGyOgn1NK1SDZUQlZMo5uczrpKpjl9WpBYkLZMfZ8Ep +C6lfATu9nEKsGk6hErmYQCO7rQMlRuLJQS67ym0YlIhFTLVSAqlsOeXXY7ccw2cXMZXKyGPy0V1O +H5IfZzmFSDBLatXeNFmzvIOJC4aIj/HcMCI/pbddPnqKf3/SsQZKyASQCEIImhcfZFJoVCEXr1ON +kVUK1SgEs/pJ8pBiZUdKisg9u1iJYsBSNEpePWBOaJjAVLRIKRpu3bMPLGCOwAHjRQlsxSsqMAKk +YDmCxqX0rv16nmjYdc8l2CW5agtIZ+JGix1aSnhIsULEixmYUWgXQxevFBEsYFhGP8o9Uzz2jZJV +Dy0hPkhYNGKqFk7HYDeEDBUtQkRUcpx615dP7qJFqqECOyKHigT8mFES6k2021L6zKBCJHwNw+cX +PofwduuGW04h1b6H9HaNkBKNV4mlx1mtCipFT/n96uhjZgYFdPKg6Ig1g4ApaWLGzA8U2EuIP+lt +kGryprgS8rjuWsWer9YkqSJKbkcranLV2E7fJSjiyWOUvFpKoZCcTvFvkZxW2TLoRVVE/cqOQ/Ba +8u8sXKkYLRWJLZfoeEg9P6n5o+WPlio5XtE0DYZx97noWMWzl+S26BTZDsiHAkWHYpNmWT+G9ue5 +XAd/X2x+aU6ikNzOS/Lltpjj9jA86fP/ND+neXLZFM9OYtOrlhWhJ06KMdilKIFOdvtzjiQ4zPLn +I7gME+JTsArL6VKrmlg0xZP3J5mT4auGUXbahK9bNfxZ0XXTUHAbI/o/JylzHX70PugIQksSe0bJ +bZG7tj9vxjRScRLNkD4n+/2j526WLFoe4XOXvtNkqaMnq4ZV9jpkdltyW3LT+ON0Uizx+RooJ/k4 +hlSzJcS/YJVUfLvkhk/t6WFPz6u6jH6Vvweh5cllP6q6lyUOejS42WZpl2QJdkPs+UFJUlqOyK6O +VWlHiGqm9OlPceU6r7xm4sYLHSwssZwu4WeSnUbB7IuOQ3Q7VcegNmXBIvUwcflAgcVgkWA++euO +Q27Kp2MQMmhORKUYju84gdEQSRXRwiUJGTJFrFi5MYJq2e5Ln4+o8cKFNIIhgVqwTjFeKharEsrP +t2wZL8lePUVwOvWuoPQsuSvJLasI9TJMoBLd1klxN8eTX4cphVA8fEhem9rTFa8vf97iyV+2rKMl +im5rhKB6UHn1KHnB5pcnQVnkblQ8Gf0rJpGpjkV2W+XfW0R+SsgHtajoTXeVXFHyYoKHDpVRyFXD +Ijasbjipd03p6xT/Xvn1Ew/vr+2Zcarm+eqKkyRvmvooglK0FsfXC1eNE1GgQDPNLs+XvpfcM4x+ +dRF8O85zmikeX+X3TS/rbhtPkqNVPbktiBxD5ChCT94kVTadiuGY49oOJ0WonyH5LZ57hclzas++ +BPOwM7WpR0VB7eq66ZIeX8Usa2ZVc2uTYiyCKVoOyfM101YtI7XqKnZH6qly15J6/mZZf55Jr7do +OQW7JFZdybEqfl+0/EnPmyRVjpPJEeS2btbRQ071qiv6FbUqDoJ7OZ7kWTfN0tumZrg/yZBqwmY3 +NrsuWCUVK1JIXntQk2XLLfuew3EGxZXbouC1yrZt03TD7wU9vRw/6OmPocpNw2B25aYhNxzjbxEe +l2FS4tp9HzVTcktyVc9ZquT3HsO200KuOkQMFThQRlB+HgWvqDd93bGJJ0fNb0q387OE3fQOLSao +ejb595jS72IVmvEqkex0an5fep6qaRWslMnvCbEqTLdXSB8TP1fFbp+avUnmY4ii6Rd+h+B0y7+f +5DVpRf/0FLEqq579VZVFUDdL1Muq6DSM0g/T338ZulxHRSwlASF83BiJlei1SDVBaVmCVZIQX5Jf +2xxtVLyxQkLi9y79VuE06V1T9Rt6UxkrJD9YuBDRsklmYUQ9N4ATHnP8pOUtgvTn1WKoqyuOsrXJ +nl1Ial1Ivle2zqer64UkJ+NOgISbTm6mvxu7HthqGQ56PSmq9DuLESiFz0ntmmaZeOLE3H11SJIg +HBwMVfy9xar0YiUawW000zYdTryct4+jmnHYbJODHE3pwwJVkhmFUPx+R9FSLMcgEfG0ri2CIhZl +GfkwRFgzK9ELybOaYXLDCdE4CL7jTpy5TbSiIriN4u8vWKlU28IbR38ga55dM82XZQ== + + + LoYf1AzZ8ZRd/25Lg6K7dSsiEMrn10/zHkd/FFt0vEJ1Wtn2jqIst42czU2OP3r+KWp6Y8+q3ui5 +t+6ISaXH+kqub7l+WPhX1bbrWs+ryZFEv09rSoffyNmUnY77eSU3XTHySe57P1EVFEeOG9H3597r +l57TV6XzIZ//JBRi4fiork847r9vjqa1KP5pClpTviT509zNMbSiqdsO0TXM30c8fCu/W3bNomXQ +qvppmqptkkyH4jkGCqlyPebxXbsOWtUa/GrQmz8PR9OSTOsk2Z+mb5on123N9CdlYy8EOZ3UC3X1 +5U9VJ0cRq45Y1cSmuNi9eHuGCopprklvu5rllF5f+feYLcdfN2YdFOxeSk4+tV6ra/+6MajRihUK +tuset6XV1BXyzEAhOen5FNBfI0RFsucs56lbOJI9u/y/b5+6vany5lnj9Idu87Vs39MN4b/H9u+T +PTNO0wGFJgAdXM4bsa5/oiIIJ90+PHXt831L2J99ll/61KDxS1unEdvFY9P11TZm4y2971d4P9n3 +Cz0UKGxRPPH0MfwOsS+Prp9XlsUyBktXTMdOnE/2Z2HP+uZmOo+lG45p96Fbt44oKq6nV47k2nOi +OBjuYegpSVfjyk0HzbpbRFvvxNvb1JteJBfrkyLdn1uVSS2c0ZeIHz+kWJnh33sldMIRe+kogZn4 +Oh1+PXr6KPrHMIuyK1vXN4n1mnFpsUMOIxgg44cFkEhmnHVKtVVw/1Ln/3VvkpEqhcoFQyqd3Lbl +tpCzSbntd902FDkOxwzP3nf5IxS9tEKKsQhJ8cP0wsM3kYFK4QMkkoIvheg9qr9/0O356Z1O3y/r +vM62s3Dr1l11/YrfUGq64Nd1OOxYonD/M+/zm3vykErLRIbE5eWV0se7W66xyYJqXkbf3Y1NNz6K +4RQoUoqSKJSiLMexnQeLJDyarmii4im39tzevf2TRC0fFHvlEEm6rJHq9DH5Ne956ZosXdD7Ybdk +17hpotumfl69pvUL4/Yu2/17g2aPivao+FALhQrBab6G8Zzec/iWVfhmY1Gdg1r4h4rISwl0wnv3 +pGGYxELJUYLjADBFYCAlCAr4Lj7MqhXwiOWsVbUfMtun1/XLcAU73XYCZORkvImq3hgnT1ILs4yU +8xdvislPKXDWi3vlgqSS4wTTQ+2KkaIZIk/R2H2IiojMipSZ1Id1u3g7pqw3uuDIq2xJyVSfqVym +87n+cE2CCqllkal6TPdD+y/5TrlzCb5R/h8DgV4/iJXnJfS0STJm0Tk052q2oZuOq3HxF8KnK7e6 +TZPq3AX7JqiWHicykBC57ACPYHKRim9imXeYe69kT6zVV7BtcplIdviWzbR33791R3yfZOO4/v8k +MysYQLQE8QAeGZiBECsIAgaWkAUONKELLSIAAz/FEDzLDjeJDdODIsKlX1QS8rRckoU/0Vfbz+re +pJnDtUiy5QzaYXyIAcGBlwKgYIYBMGghgRn48MAOdgjBDmQUgIIZG6iBSgFC8GFxxMfFR8rkBcmU +8rp+ScLhd5JfiaPtiH1lEHxFkS1PlZXnnOSHTkKllpDKxcRyg0XTQwiLIFIvPjwxFbLnRfere1e1 +rp+itgf/wECkkjybZnrUsr5p7mXpszB+/7FOyk8ovwqNFYwiUip+OLFhRA8QKIEIDwXkKz9WkspL +DSBQUuzgQSItq+8wXvKLVLhgJaDRPJIj930geb7z3mppyTCiBYkK2JBAClQkwASsGgUw0fhAgvGh +v1bQpBXYj8U5anX7kXxHUY3NNDfLfM4/qRWWDA85GoCCJWigBAYcAQso+EIaCsADKJgsMYIRjgbw +LgrgluyQWS1UPUa2n7GU25JlvfBf2xK+J9F3asLi6tesFiYYTeQpmPBlNKBkiROwHOAEPkjwgwQQ +IQs5WIAEmAewINbDBPwUH6UVHr9rRZyv7p41Erk+9G6qdRFMh2R7DU2ZpeMWr+eQZyXTm+jIS3js +JjtehpjAyxAVOPlhAq0cCEDN/DA6qXFiweGLvFg9J2ELEs/6PWGSs7memKfuzNZo/KlVMiEXHkx6 +oMBKAUjA4gEtEAIFQAiiBUcwKcIDphdJxHYkoKSHCIhcKOGK4CBFMWhI5Rdx0dYjWeZFTi9ebX03 +3nE/dEIDYwAOrIiACoRgARA6EAUvMMAIVyDADpwwgSVs4QJO+IJMEydg+TABkw8HyC5DhL+MmZOw +fMj6+r68l4BOq9xHwVE8YXoVM8KRAFQTL4BRgiMsoAheMIAQtlCDBEPgIQVCqIARsoAAHUABiRoo +wQcYIGHGB3gg04AVqGYsQatkVpzl5qncX9Gt/dp/FFy/Y/nW/VwKwUtajFoc0cLxAJIdIqDCACKA +QYEX7OhADZKAwRFueGAHsCA04MsA4bPw8FNysJ+UtUb9HhepP+VsTJ8rr7Yl2i7l/AoloorJ0dqx +xIsJqIBHCYCQggI0MGFiBCoUQIIL9AAKScyACSwsYIOQDQSgYiBBavExo2ROOwXLH5D9k+6edO80 +yrKq/OYjFMyMGSY+YOMDPThAD6bggzGwAQNJ+AIPEPgAhwZqwOIBLFjlWICd8mNN0aS/STmb2Hlk +16G4VF9VblFEEzw0AAMXFHhBDLpghhNkgQw+VDAEHmBgBCNw0IQUE2CBiQcK8DQSgLdIAlfZoYJO +2D/Gm0TwWf/f+CTT8Hjqo9hKRwJAPGDAxAEt+MEGTiiAEbbQgw2kAGMERfDBBUVoQghSMAAQoMAD +DIhAQwQ50DGCHcTIgAxEkuiAq8IDSop5TS0jkxUhL5QUD+JZeI/tE4VVe8SGTm6XHlBCbKDFAjmo +MYIh+EDBEAzQgygwsYMoHAAIVYAAErJghAuE0KIEB1Q9muhphIhLeJChlhAWeV2qneCEWSe7dtyz +5hMdJSJAwGKCBTuoIAkPOIIWeKAgCC4yQIMgXlCECyyhCz6kAAgtLPACFxmYwQ8vUIKPFBQhBAkQ +uCk9qC0ZbQjF9rw+vglH05IUCkXlhTWjowgW/EAEUvCCAnoAhQTkYAkloMIXflgBEFJMgAUxOlAD +lyZCkNqBAX4MAvgxmHBTfPD0krE3mU8uMey7JXuCo5Zt3/n6KTJ0hIAGE4gCGIKYgRMigAQs7KAM +bPjAFMrgAgM2qLEBGRCABkZYgA+ckCICK4CBQAtsiKAHKAcowU4jhA1b8SlxsTpZsZavO6IoWH5M +IaYYQsTowA1wsMAILkIABBgf6IERO5jCEkLAwo8XJOGGCHKggCFMQQJQEAMPFijhBQIwQAnRgRAP +F8hjLMAdpbj1ll6D0lEtP3EdzRi+6d/lEsQDgohBEnygwRKIqEESKqCELnCgCWNAAA+soEMEPGgx +gRXs8EANiFABEGgg8ILQjQbgMUS0KD1O1IzKi5xuz7I1SP/r16Z7k6llxg8MqGADS+BCEjd4gg4S +9MACQ3CCDr6whgj4wApEnAAINy4AAxwXmIGIER/AZ45oYTLUUcubs1j1rss1Ls/PfwICARPoIQIh +oNGAECRhAhmQ8JAAX+bHvnLDpKIH0YwPLQpmW3uQ3Tvy/URWFFO8lV9wJDvayYV3b3pxgAwUwAZF +iFGBFrh8NPGBI0ThCW14QwWkMAYjZmCEDBDBCS+wAhci0IMk9PhADE49mljxUMDKEBMArSACXq04 +PyYmPYpdu5T3opsPgVL5jzK91DjhUIKlhAeA2IEUFJCELdAIQQ9+oOAHTfwACjpIsIMWB6igRAkN +9OiAC5iowRBwdGAGIRhJrKiYMBaBJ62abX26JReOIEq+nj8FDx5W8IMEGGELOkjgAw9AgQsloIIX +ErCDJagwIQKZAnRgATYYwgFoQITWDgugU3SobigB43EAPCWH6pOgs+h8/S9UV3uORAwVNGJgUFpi +/FUMCAVAIAM28MEOFzABDCQWgKOJCrxgogI8yw2+ZKaPxdQnFFAGeTHoxFMmXSplENeZHRSbMMtq +81RB0utAls5TXtxwgUQTBPjACFRwBCO4YAlQgNEEB1oygPhRXIBQWPgkNCzJZGXFoKcXfgVHHkIj +k0RsH7XXfzymssn+odRLRg8ySUwAiRXoYAhlWIMChHCFHy4wgg8tIIIGlIAFImBABJYmQCByRAVQ +CIABmQSEoJSjiZnlx0uCw+xNRPRGy7Zm45uFy+77vDHlVSMaSOTowAs0kAQqLEAHT2g5AAhQkpCA +ShEPCOmxROzGECYXP0wvfKBmAKHH7GCyaEJSCypiMeeTR8ZbR4ZdGKvv54MymaGhgwEZUEIFOchA +ErBQBA2cYMLEB1g0wAM/cGAFOiQQgpIfS7xuFPHSYYB8JUfph3isZ1RzcWTVjxw5WQeygU2WxJM+ ++4hkcoFKMBbm5xtUapncPYp19fE70c8MM65DwfFQcFatIzecVOtekAw72zimL617PqYWy8TGDR98 +WMIBOAwwAZoglnDR4YOLHo4YiZFRGoEZnajgWy1xz9JDIrWuOtP7HFm/nX8XfkWyHVG2XGt5T71M +VFzkkFGACpRgCEo4QRGiMOMBJpARARK8HGEBFA0lPDE8+pEYfYWSr1JikEt98xWN6zU2zTaPuuxH +quF5kmzvKblUZF74gASNAkSABwQ8EEMJB6gQwgAjFRk2aUQUa1GJ0QMVQyPVVbOfynURitT6+Ce4 +teHWNs02f9+Yx/OJ409dsyTZounIZIJp0cLv/RKTEx0+fDitRuy4PkXzHNPRVD0k1QkV6/sSisIb +FByyk5VcdyTH4c4TN50x21AwTNHTZAT2gAcsIEZFCxcKioklQtP+GJokONJw7f+n+AaNYCohERae +RcJ/ULxb+yX6OVGQ68b0/f4kVIoXRoAABCEwAhEk0AMl/NgADFogsQAWRyxgxDKjTqGc/MlmpYRQ +VugrlXP+oPLfzj4t65+7d8t0zDZQ20YrlwoiChADxBI1CrCAF0YsgC+huVOw2R+9ss33/qzz8N77 +rVjIZMWJm8A1Z+WPDPOnmIKap6HgzKnqufWPR/SrRHrWyEgLGTI7IAFj8cN3mdym1P+KrVxmPCIu +cSl23h9xnb/PVMV0LluU+7oNB/VAEEx/1LflvlZEPzTvlix8sicQCRXP0xtdT2S3j9xwRBQoShQg +bdaZnOzMtpGjdSg22QmQj5PBY4nC+/+16TWO3RpVXfed5/g+w3MlVXve79rH7c+rzu3ImlsYh6Xb +hSAIJxvAiTPj+DSmx1QuT5t1d37kAqMGEAp4QEoNH0huBJFiofFxxfilEXrmQdD8whMEy5hMd9St +SVQGSVo085Oty/UNT5lEWxKdY5okZkYUgnK6NdrO6Trbdk/L957/+gfVurgN355XLsGynrazmfKu +nMc3vbp22sKjyX5gaJ5PeX7a9xQWq3fbzyynPL8I33FURbtvHdG71l9cXkxaIX+to57ogXTQTAut +qz2KHgoUIydrQ3I+VxlVeRgOKZ1CeX4S8mKZVDQrl9rXgqGHfVF13rfxv/s1rt+7nw== + + + 0/nY0VRNU7NOy202u+K5Xvd/CMZCafGiIoeOlxk9+pOr/pRMdv5Ck/vGNbZ70Im+PSaZ0rN+558Y +vmk2/jIt1LZx21xGRpBQggkUGRf+CPWTTv0fymc6Z1+aLFOvU8fwRALF0NCETiEw3b+uDcI/IHqH +w3LsaOBm8xqFRlYuj/6b5mqWph3DpA8opmKJeH9Fz1mGYyUlvYjFzjjrzrErnx0ofyIelunWjRyt +/UQZLFHOFnfijr6nu+/Z9/XAU+tCTsav7mi+PZBOuOnMn/g5VQ/Kwt+Yct7Y2crtq00V5M6rN5JZ +94F0OBQbU+votLVNdR5PtQNPuI7yRSYepLNyHJojeD7F9NuFmw4g2wmQcJPJIGmT6ZlxZEcLO9m4 +cZ+7LnGx9JsPnV7/qIXffwmSX2f7tK4EyzU0efKsP9H9xP6dPW3semIIknkoOGXWiZxNTlkfPnqU +QCPyE1OxpNPXTtsabfOXXtN2Hc0Q0Sn2Ialc50nZFX2D2ldX17k8308sM67sZCYhEE0I7H/hOBRB +bSvTSsV+30ZR1PvOT6zd+uOTSqBRfKKp99Xk+VnfOiTdzhM7HfXzUDo/ovEcXe3ylEWSJs09PWVY +JlOeu6SJq26IxnN05c9TL8v8PH8YFs2zbZ4cyKbUMloUc5EcqXHTfLOkiY4iS4axioI8/wvb4Deu +pMm/sMvzuVWXFc+VPGMTFdE53crtueqxHJPmvrKe1kXJdEsKhfKEdvrWY1lnW/cD3w98wbDUtvks +e8howYOOHrt8lzx/CNf/2H5F89twOgPQwTZFGpDgAkDY8OGp+bP7RC2rkuHR6+5qOotj+3kqj7/D +jh1//uNuTMJ1XGXBDWdDgaIDARmzzou2P20ch+V+siGXtsu1zDiyk6lbx3qh+4WgeM5Xl0OxqUv0 +Lk936zwdUKAZN4tkr7I4iZ54PiH9f2pdTaJ8+s6iSYslv7rxN67c53HhH3DoSIVMtxuPaNxnY5s8 +180TQbQPRUfcbCn3qdrHnQB5QTEWSdYD65EcwXFJnusSpVcYLdevC1ETrdWWXmEZdWVTdUGxNlH/ +jWtUHTtbC4p0idZmCoptOTzbb0y7j19bInDggNEic3IguOGoXAeK5VOui943P1NYJMNsYz/x/URZ +DHf0DMHxmc8Pi+EVLYfoOahta5LUUdQ00y4c96Bo/H3xWMIkOp9s2YXj1rHiSJ/rTKLrxtGel4ui +v66eOPbf9wXD/TRLPH7ManUCArluW8TDg942lds1YF5CNy+bqIvfTfx+JM9ZcvybJQ16H6dzcl09 +mmm2jSAg9XjWZgqHYx2KvvuS9v5uXxQWK4UFQ+kevUxdzqPHsS5PVyxZUFy/8E7V1K2T5nseSzgc +123jVRQkzyq+j4VI85l+5nqklGp5kXxiOh7F0D2fPr8Oy6Pdt9sZRltR60SNIzdO5TIYJzASkelO +1z5dTWv7gmLpeexI4qmq2neSUimF5eJheTZLO1XTsNxANqa2ueLIel8rx0tGoJjvv3LcFMcgCMjJ +dbW68jLdz/XqfWvXpRtHcjriZtOdQBGCgPCmWprx1O6r+p8/V1wsz2wrsy1H25QDw85GZpyurn/r +9ur6p+rHfWGxNN05jBSTmkTfT6THFEdfWjThT8RLFNU4EGQjh6O6dWUnc70vP8+P63pWFk9ZUzzF +b2SRTHobpyDJjuettv8re144RNN8+6rf9wp9UFSpmCz1E/WsrV6iNonqZ3oSKqnwvtw6O135lCXB +8EdNVy0zMw3durlE37AsO1t+niK/D2rbPz13kvSk6Y+euSia5BhFBOrPcyfJkJqqWre0rrD3jRvO +BwLymWufxlFwLLXODkXUicbYlUWJlBIC9ak6h2HM43n1Hv1EUbJ84vMqIU9LKRTDQrmwVPjK+q8b ++z0iWLZJcg5Dexx1s7TH8v1CGRzTzVs/EE9bPW11M71JU0/TuRx19bRAE0vsIINHye7xMjW9csyu +R67br21donR55qhKj+fqhSxIxiXqr2uKEUjHSIgLSRSCYdOuG/HDx40VMUQ2f59nr6KnOw4hfXT3 +teF5TVtbvl1zhcm0Ple1+3R13Vd1JMsf9qXFcW9fEb6D6hwExyEfT+zzl2y6d90bTW00pdGVRlN+ +dfNzpUVyh5kVIlq88FgpWfl91NuaHM7K85e4XvML367rq6qoXVUwGzJNNtNKDsd3XRcUq+WL8JeO +1TftwJKTjRsOr7I6ypIdbf3CPG1NuD6K5w/r9mgqet2Q67r0+0WJ6y5N3ER9V/blmybR1wP7VN3R +NCfLD8vKYPh+n46iJrpO4XjPrri6sqTpmqdIqQSS6xYcP7N92j0mGxfNMiq/e9edTRMFJVJJmWBR +FLHqipZFLtyz8QuO7xeyHnhyH662rge23IaTY46mffvqKpurbM6+LRjqaAp635ocaVH8WzfE95h4 ++pLbpmg5xuvy9+1lOWJZniRvEKzB0BbJt/Naex+6+fML33CE0XUKRf8QBKFnfppzGNLiCONy0YiQ +6Ci6IgLdMBk58feYUqhFjBUC8tQqSrrrENAnV9dPDIviGNS6+4m2G6dmW5ptsPeloFD9S7ef+Hrg +PZK9mvZruqOkjxQxMa8R04yn6Fy0uiD0VMlxie+XXvmjtn66xiH5hmNotvX1pcfxxKYpRh8W0qe1 +3ymmkBA1aLRIcenfWDW/J/vN8tlpjKxCcqySZ0madWyn40luHuqFcHmGYLgUvy673kvzJkeYl8uG +zMxHvkGwOxPikqFS4mKkVRL6Qa+bn+iurrGQyAPP7ifSYWgEC5QartOLnmfvI0E2bvdVoAFNnGAE +HzDlfQoUqcWqxJLZn/xmbjs3IDY5XuABDKDAARKgwv2V+9ruU9U3qHVDLTvC73UYouz6hxkudLBo +MaOtCH5ZSp8XVUkHCsyHCoyFKsSCFfqwawsVFJTW6691EBzHcjxGBFrx+KRVvUVx1bQPu6bsOi9N +XlVVvI7KbZGfXymFWkojkMqypFA/3LARYmL1LNuCpOUDjBQ5XlZIfH5GRYIphfAQHNHpExEoFNPx +aNKluatqCIZTtU2CZZfjaBEk2ThI94B0HmTbpfwmKYlglLx6vKTIqEym+U0RApMRKYF9Rij8BsHw +J357duXV1RTLora1xbFfXU8bj2SbDkX9RHN1xc2z5MI5SaqbBoNg3747G+Po+nljE46D5Nln15LQ +PzIaify+jxUxQ9h4YeMFheXnJDr2XRcFwT5+S0ik2B/SUfYey1ALp2r8peswKRNNmq4HpmicP9Ob +JHWTnD9uN8faJO3zPAmJPCiKkl8ZlekUy7dIyl1Hf96fpvxptnSdNlE4/FqkQj/IlBxBY4aJHjFw +sISwoEYrXZ9JcdSqpZbtTbL0qqE2bUEwBcXbjdFPhMlzVOMeN55FEe64GvxwUtxPUkX0u6BQuaqm +kPwhZqiooVKiYlUy+fXQy+KoaZ/nqu/3lcVRtATD/fiN1BO0pilaju33yp5fpJjgSAHDn6jM33/I +0USBwhuADt0JFB0KFHZZHmCIIoCwoaPVNrfTCZnlUKre49h2m7plbbeZkEIUQEASE1iCAL2J4hhx +bQCJHw/wQSOFqGfx5DCgHTa7qJrGgQtQsIQQRJxo2wcVMTIpFAqGQygad53J6ZScjQxL5QAiglj5 +9EDIsHjgAEUggEcMHCQwl27bJmmP4wqRVwoyAIEUsRCZ04cDTPCQAQL4gESMFa563s0RH0Ea7C5g +ACIwoAAFiHxGMSrTBYTwsQNLyYyXicWTu5t2k+IRO2p4AAMVOHk8MSKvJHTQEEECjDgADJYdJaoX +rtKKdovQIeMJSRCCAphAAGi+V0gfIWDILMFDhhI2WNAQccWIPC8Z9rDrjho18jpfS9Nf0ZD8Pvk9 +LqGRCd/vJSkTWwFBY0brY3rL1EZTjwurdF3FJPrhxUsElAACBgvLDEx1Y4VLDMmrhUUSGfEtj26S +MrWchNCwnLTEQkg5H6rrkRJK9Zs8tK6vLb+mbgjKJOlx37XrZDH0qCkLt1FGn1i/k2C4N0u301A0 +LOLh8xP1pCmKr79YlVagSq0Z/luWFcWPDNMYcYl49lQ+l4B0FiOrkI9fsusfZluMhJTcmLS2Jtal +Q3DduLGTjVn2hqKr/1e5r3KeC4K5Wabm2AbJa0ZMdYPEVfL7dEm6PHoIaUS6bddet1iRXLBMMCaR +qZb3VnXDzwO7o3vXxVBkv0d8HSXEt5A8Jb/en2Pa2axa5kFRc7MxOZ1241yOWzVNzTqslrncFnve +Z1VRMFyCgLCbNovhZ01ZN61iEpGAPKK2zUWRRMdhdu3Ca895puC2BbTzOIGN7PZJaUSybRQ9uxCB +4eb5fmAdijQovt6nm+bJp2fheI4XlBNEQAkeZlZE/n0Et7uK+nBrqufQDKt6Xi5H1R2/KGnFfHxl +y6AVbe20ixIXjhQSIFqkkKGyAtv1HVKw6DAZUcFtKD1v0HO3bQa9FiYiCTDCiH5NdajEJuBDjh1Y +TkJotzWzI3tdglcZKiQfmAAEiOjxg1TTRrRoiQAPNpiw0UKGyKrF9HvUMh9FV99nAAIOENE2iY59 +rIzQcJVEdrskw23HqVrnRwuYEEAgAbE/BHrbFTDVj5kXJGSwOILFCxErWiBARA87YFwOAMQPBDCx +hAwVMkkAoSMCDEACAw9YYgMRMMAEFIDEApL4ocZLi6rnY6h4aeIAB1ARUWGBSC5OSHjEtKCA/BXS +P+NK1aU4MvqsqFAs34Pa8/9dPWyaol+VfqsQcbmsTqDXHfk9MF1/5bmnZUt0fHIiobBUKCiSDxUw +sNAvumeaElcSPnAccWMGjBIRVB2XaJlP05Q88yZKcjoih0N2MjkM7bLMz1QOx7bzUkQiFc8HBcMm +2CXpbxdRT+LvnrdN+brnvn1aZjmNXkylE0+P0uspn34k9I/sucREWn1IHxWlia1CPr0obk3z+6vo +ToYvp6la1nKd23kf1qXBUAa/luPczuPR9BbFHkU96ip7n7nh6CVZgl2V/LJoOdbvofdtta0GQ5ee +g9o2JNOhmDbF8Ehe14CpVD46aX7xk9xP0qXjbNfhpfmqa50s4Q/UzdN10+q2xbxYQMxgYbrneBRP +tezq8xROp+x5VMv868Zmia+oH7d0eqpyWoS3Sf7cxoqIEDQuqNnNTTJVzy1eLBP8xh23j+INfrs4 +5mH4r2oJz+dRJOFvlX9HtSsqRVWMPELEpOxIGXnhcuzjpzw96Z4ZwEMOHCgjsbz+sGiIB08heUZ4 +PWXbNCknv8u2kD5AvKC8gPYQm37c1R7FnBRZSiAcLSqmuW7RcBM0VmBgiB9FqICB4UK5hHiYEwgG +BRqBBRwAAxOgwAA+8DADFGiACDhYAQ5YAAIJGIAIHDMrNFxIZl6pEpHfgAMYoQMazMBFysuMS7WA +HjEa0GPGjCmE0uMtIN+zngsgQBAPWIIAJiYUy4ObkP4ZWMoHzAkRMlbwkGLFpRQyCQ== + + + 9Ur08APG9Qr5PS0PPxPiSgKHjAf8wKMANFYk4EeNGCgiOFbIFMAIIW6wYLFDxuWFyMvlBFLltadl +fZZ1P7DMtLXzZFD8rCw9ku73rRuXatrqtl83zpumPYYjnhzGC0WTIqXwGtXnOR177rmFZYr9H5Rt +o4B8GSIrGiojMzHWSurUyzRNavRyEvkty7fsaJ5bD4Q9z+22ssMBQUBYroO/8DsB8mlbkRznKauj +qst1IchGRLExQTi4WLpcx3IbqF1rchS5b0zfT60bUtXTPHtUleT/qG5dBr/Su7qM/hssJTywiHEx +0tpPkh7L1/vmD7zDUPbAORR79Czx7CUY9lOVFsm18+iR/Fd1T03fZWG8/sOKGBwtKCOg35Tfdru+ +p8mz60yOa7fxZxmy56vcDsEv6HVBroubZn+iIraNPW/NsjoMQauamyYolmcQVLUMN1FS66Zc9zW/ +Lf8eszq5hMRCSqNWn+eAYUnluF2SIFV12fUIf4fgtSdF0/C70ZNFzz0pvuwYJcMi/f6qadKqes7S +R88X9HQyJMHr1hyv6ril9PkBc3IAHm6A4AEGuMASRLQYgcmwTBZIgBEJ+KHHDipgdMikxLhIOWBK +dlixogOGZAgcLwxwhBE0MdiMSZTi36QWxcfPBjs89H61rEEJOCAEGbQABgnJEC1aHsDDDAn4mLED +CsxGCQvG9PuniPLJOdAAJmCYhATxQkYCRfCARAwaGTHVCtXoBgmrheSTgHQIGCAJIfDABzJkaG68 +oBDghgsKENEDiBUwJR//d9v2A9nvE8Wy3751aa5cN5em374kOD7JMahdXTo+QwUl5ntKcDvC2ywl +EIyq9IKlZAcaKoq4wWJFCOzV7yyo0YuTkBosJTVSRGZiLXtlUfYZFru7SZpu20XLCu/KJp/QC+hD +ouN/isJdN4JwUo2LQQg+oKIkpf1CEgSkN89/bU0v/JLlD6qmWfZhWxokIzJJvl0HQtEUkAdlFJph +nXqkiAgBwzJi2dM8R6AABIBAEwiAeX6V/Jbs9ohux/KbxLb2B346nGjteszLxatrTZJ1CNbg5zHL +0/u+3HaL3w2ZGAtIwAGgWO7LUvWyMShRj5kVJnzE+MEFzEvXSU0z9bwKy7WzrsdlS7Pst2y/qvx5 +wp4nbjbu96GIRDIsFs2LFXpd+PtUTWu7zjTTN6rGJOni95aTyYcXMxFQ4ggJLGEEjcjrHUc1BPE0 +FfH8sQfuJDnS6y1cKhIt2+SIdjojChQqOQ7x+9915zD0zzOE309xfOLrNKkSHIL4mvpgscKlxXrx +98kHnyFyIsAMmRZUSOX0H6HjhUgI1NJtFS1TDZNXDzEoStCYUULGjArWiX/X/21B7luP4l2OJthV +xa6rllsxG6LHLV02xSyM6RPT5ZObekjQJaMyXCOU3ja5J0lee7ZUIfUrXqcQv1bZb2ynX0i9i5ip +RchJR8zJDxgqYJ/9h4oVIFrA1EBptYCdWDi9p6csiqR5jnGCAvOIcDOFP3AuTVA8r2haJ0U59EpI +fwFy1IA5rUb43AgXMiuIwAKOYJFiATtgjKAJJBwQhA8Ukv9CRYQDEEgAEj567EjBoqOlxAbKiCrH +XbOLwyQGQ6QV0uOjGOZR1eTCeQjan/c5zZjr1GyTu29lVKpJM0QBwodhqmX1soS5bgTZcCdOjBwO +LYYht21yXdcM/3BBscASQggxo4WKVmol5HHd9X6aJZ/PBhhwgAYkUUSJplVAvYvob93zaYZ99MxJ +suW2FjAVDJMSuzTRLFvBr4rRh6XX7xBMORxb/HiQIUMFIxCBrq69SbJIgS5QBI8MEOCHIli4uGid +9pJcvS4JIX5IwBFJgF6YxghrB0psRYpkwuOlVs1HkdWyFiQjCAiCCP1U146bw8/l479wrXqgiPA4 +GfGw7Mrj0cADGpBDhQzPitK0Sj64iJkJYa30u6XbMN3+rOsIsiHJcQoXS0UE6kvSL8k8DO8wtEMx +L82Q/19Jrf7VHcUwqGVVs7vCZb1NTzzugybFL8v6u8J+XWYlQkAPGREY4ocQLmBgUCHPy6qoSjJW +TE52vZpfGLFUDzMsPVZIUkZ/KH7bMMRR9MXvIHbFR7D0tiRWPbGo5xRRMRtyWRj0dJMkrevILceA +9hXeZvnsJH2Oml0XTusququmixZqCBgVHiWwFq3SDJIWDhcSmZAUSgr0AAIAUQQOGiqnEIvps7rn +VB3/rPqCoDyKvKp61LXkdMLNZt020oq2eHAVrJOLkNXKp4fp9Y+ZlggM8QMRLVq4iDwtWCAfLbAf +NCkurtEOLmAgkIQQOWBcJnAEEEjQcOFCxAVyWSBmUipAxI4mfMCoceIKtaqvqq98500TlJ6s2O1H +Uu7AduNMTmfTQQf381I8/dvJzg0H7Wio1r0iaYtjCoZRdp3UrjysSKECDUjAADzsCPH4IPft1VSF +0zCrUg0UWAOA0LEDJuWE2zCtFUvX9fQ01fAodkevu7LnGCKsVm6/npePI0rPl+g36mVfjks7HXfT +WjqugkLZJYkyCtUoee2QgiVGhXrhM8uORS2bm6WMFhYaEZKQmuIwcc2kRLB7BqUn7HEut6kdTguY +i4kefsDNEz9LlJ/fQaRFABoXIVxOVqhOvZqO6vkIHzxiYCOmVl0ihgwKIGAACyQRxA8XkxUrkcuo +L8Guum0xWFQUYAQRLCeTX46k0ySZJogk6a6jP+9ltSpCxw7bTNeOu0XwVcckfp5iAqV4oVhGoF1F +dbyYEWJHjtgn9OLzFK3TDMvkUgq9MAmhgSJCA1t53hfW6y0oUsxr1YIixXg8FL8u+MUh+LtsHH4y +2LnyWkVJJOPvInV8glk5BN3Pw03zHs05BFPzG2MS/WBBuVES4prlvSTfMMzPMzXLqDkGsenrhl+I +qH6IMYMAIXwcoSOGETlgwIS0VlQil9Tob9UPi+4mCYOeummv18nfZ3Y6Lcd5SDKFll/2ugWr9AKW +Ys0win4JkIMGAnzsoAISofw4DZFTES1WkJARQ0SMmB8yJyxiqRZ/y0AZYUmRUDhdjyHLRzfp7RB9 +HuHtFA2z8jsmhYLhtcl+i86y9jwShNPpgCLccEhOpy7H1V2jICD7WL5sXYT3RS2sj2Tsvld2vqcq +CCTQgCPwwAYxrtaK2IqIGzKKsPFiCRozPMCMAJGCxAA8WgQRI4WPFjQpCAEIcKhwIbNCFaCGChoi +q1Yde1CTZc/zGKrd9rPsSZ7pELzF8JOiLllmxfAKhmevmzEZ2UENXnCAIpAY2XdMt3egeSFiRgsd +KSMuYipXTtthyJ9mSsrEs2z8ffcomh2OXpagVD25q0dF4Y+L7TYPFRL+LPWzFLFqyWU/bZqq3RgW +qVdTVKzyIGnhIAlxMQJ75XSIPXMzlMGOX9cJHCCJJo4QgoUkQrWqZwxtbmM5IOwGRPa6U02HhEQo +t+HliOLvN1orHK1VEixS1CCB/Sm6myIJJMDEC0bAAZGPCIX043hB2ZGCRYkbMRTAgwYSMGRUuFB4 +erJYMckBAwYJaqXacZYTiIXXnvTMx5D1ujLrkOh3xTT6tCroLP2S9KAmy6ZDeN2zriDIRuTvDSAE +EClGSEw2PZJhUMuC2DUlyyl5zstTJsfUjrcQcdE4CVkBU7kIUf2wgmUlFfLIq+uDs/hbHr+7DPnU +1NFz7biRsyE3m5bz6JCcv/Ddttjb/BYl8eA0JxFM6SNTCpn0PYhVYYysWkwf1z6j8DMPLiNEwHiJ +UcJq9fYHbnH1xFFTFkMSBYr/LFU8PAlun9yWzbJvAAO4xZAIGi9OMGx/Xi6K8Se6nyiLY9nJOB1Q +uHDdpaS6y/TtwNkDY86LO8+jpiJ2JbnrSsd/t7WhMrICxirNcW6KJiCeAD1kKCCIHAsIIocRNljE +WFEhEYVgvFgtnv0/SRv02Kwje50cgvMo9qsrjyWobUMs+6cpT5KektxFERdDGScjEiCAETZiYEQ+ +fAFqrHDBMpHkNkktRXRahMf3UVTJcASWSAJGykrJvofQtNxs4g+Uv5AGwVbTVjGcw4SkZd81Seqn +qZpjE4+uMupVTB+Yr9di2MQPPEYggQigjE5/esoIUcmIpVSkQCo/36upK4KixrFLstWyN+vwoggy +URGKnvT+yHXNDqc2SRmVSQZVYtnzX4q+OYbY1EfNVMy6gKFkViZV/VLgiB0K4AMHTUgrtdewnycR +eVA6naslD5qXHS1auLBYKiTQK69JrgpST/8k224jOyAkIZ8IGTDwkkzx9RoisZTP/5+lTYprx3k6 +nLCRIjKCDWggpRXSuukWEagHmpkeLy0toD/1uj6K5mb5gwwXSPjYoVTXrBuOIVK60RJjOYFGPHnM +6bOjo+h+f8ghI4ZqxaQZhyL8gfUX6mLZcuB2AoWNki9YVFa9hxTHJ9gdsarpZUvw+tLnHzErppr2 +3fSHFitL6JBxhA4ZPVKssJxAp3rmWfV3W11NY/9nRdMjOk5a1dr76E80QTZqlu2ui5Oki8dzal1U +41xw1M81N1W3C/tzvUmU7UAX76dQpUZ6/7OqnhQdras+kvRI4iYaat29NHn2lUFRIYAOGkvkoJFE +jRdI1GDxA4uXEpEHhd+o2uZRVUfRT+veI+luHU6Wvqq6H/iCod+67wfWI+mn6ouuVX5fJlVK+XhG +7epZUxjIs0Ikxp/lr5olHh1GDMUDTAnJbr+cxn4eCr9fur52MrjzdjOdP3IXSX4ccRCkP0/uvBRd +u3b9w6p3KabueUZLyguUklL8zrBUMlJUSHX92u8cJyEpTCGYLf+oeY8iy3Fl1mE7ruU0VgybWPb+ +vvv79FDEQfAGwZVNxxCBrfC7V1GT/D6x65VeRwl5Wva8ouM+LUv+HAcsEMGNmJcV08eHipUD8LCj +CBg0P15MapC0WEh/i8ddoJj84AKGSZ5R8lvC4x6UpEHP5IDQ3zZi0x81Q+z65Lry19mh16/ofpb6 +GMb0OnYKjXabJuY68T2tmobtOYqGVT49iqeP4TWMmCql9AnJbYqRlYsVEZXUaCTkn+44Vbs9WrZ6 +nAA9+GiBnXxeOS9N2PNWbRM5HW7D6Zw44eprEzSAASz9j8PwHkEY/ar8uwvps2OFZAZJTEXLMFRM +SnCBCcyAmWlRmWhYpJaSH8LXJvr1tOsbghQ4wBIlHxBoZXfypD1RL9G488jNRtPhRKptpjfOSZNv +25Kt32Vak6frhWrWmR1t9b6Q36Oj5SR1423X2aMYq+eRun7N9ch93c57Ow+llPKBDWSww4oVIdRc +wWzMqD/AjxpH9KjxYsXE48ouKIaIRqzes3beqnW1SPap2qNrPZIp16meB+N6raRa/8qW4Pa146D3 +Tdm1i9dbPk+S5RM912hhkZGCImpVVv226he0orEY3igqj+S42cQoMZlhwT5pq4Oj/YG7KN4gWIPh +i+9F9ezDLMurBcNq2WBR8UGFTIhuf9ASNcOg2CXVcIhnR82xn555OaJcVmSaOgiWnA== + + + DctxpzfOxzLuPM95wmg6RddLars3S5scVa+zy3HkxlGvW3pdf1VL8AvTcREP3zLyleiBh4qRGA2U +FweW8CEBO2oQQeOywwTmomU6CfUq3X6RcjJEjRunmW759DGhHx/DltPUbGN/m/1tvDmCVnUGPb4c +SW7aRMdR7EpCTU9qxqgo2msicNgo+YhK/L2HSwoQKVqYkEFzQ+Q1MwqtMIlQchsS6huwRBEISIIA +Li3WDBYTFiWwEtCumuNfTUv1PKppFZ63nZdqWut96QeC2vZxOn569kCj4uPGdTmWYpbF11X+nWX0 +v6RGr9xGzbARO2gUQQc3aKGSIgYJzIeKCA0KxALqQ3b6NMN3OZpsfPVAklAIxvXqWdg03/dIoprm +gWw0HU5oJ1BwJ1CA4NhnX7OjpRuneqCOrr7K1mM5h+NtnmWmnZk2et3YPftmKXcf3Hk0CNYgWHLd +H1jIlOT4JPSJIfKSOYF80Lz0cJFiZZXq1RYGQ1Acz+YJdjKbNOuRlENR1Tg6FN3vcz/QVNN+G6cb +B4Ld1r7rpwpyXZDLkt6WP02RfgfiBQsYVqsWx9CqvuxZ5d9D64pqW4cCJAQBCQKGCxosLyf51scT +3jyPefrnOX+fHIppt/FuqoAgdlgZoWwxLOHrHSasHzAlSuRwAUSLFhSSxxO3IyTRDhYqXB4PaVVZ +sGuy66rafr8Q1bYQZJOXJShVe9PUx7H+PnbT4M+ryZHktp50VT0wVNcmJlOs72dcLBsqJiYePl/P +FW8PEYPmCBktVnSsEtpTuEhL+LBDBBiYABE6cJyURvZ5/m+bIlUyvXAdgnUIplz1BI9fMbtqnBAE +RbhBEVJTlDz3kCLudR/UjOk2yb+3gKFihMRGctwy6o2QMflB4noJeV72TGpXk8uKWhVF5GfgAEg0 +wAgjaqSQQIAIHkvwkCHDKo1gdx5JU9P81IQRe51mGabrJTjm0TXdOnHDib8PP1E4DFU7rnIylWQ4 +BhXyIYPSQwuYGiomLGCuHljEEKGDRqrXV7hQLVYm1fyCWjXkpqbYxcmxT9G7NG1yVLuO7GQ0KdJj +yHZcum1pptFgqI+jXo7dCR1cMGTxnnUe23Dt8l7r+c2nUIHnNI1u23vM9zQf8zQ2HuP7riK++d20 +MjGRySFj4iEzItOiRoyRChYyMlYkbq9GKmhozLiYYTKTbd7T3DM4LVPjKvI4t2s+vml2PKZlVsjE +K2p7Rd33NCwZQwamShmATA4ZE82MU5oKgIQVIaYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiam +JqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYm +piamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiam +JqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYm +piamJqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqamJqam +pqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqam +pqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqam +pqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqam +pqampqampqampqampqampqampqampqampqamBt86K3uNA5YyQAuYmZHH9jiQiqaAelKb8qNXd9uJ +AoXa4ZhcdKSi8baJOpzwSdEHFJEZKZNqTUdl2GYbl8tadEyy4zDctsGvJ8eRm1bZbZEZlrdOCaLD +y2kgV+0Bo/LC8xIE5O00mOzqUJlWePKTuEWlZQiCAh7HEdEINdv6OJ7SFOa2Kny9A4rL1bIrh+N2 +XCzHazFUt2wGPdgcv2SZJ8eU0zk5nfgLYRBsOW7uOjbLWA4H/7wWj75i5JvccslNe7Q8wW+JZfNx +fLnt3bI7/PaSRL3vLoLvlsFc9klR0FmKTtInQb4Me5QEregpdnsS5MNONIIvnp3F30fp6SnFGuzu +UYzVtYld5S6Du4w3xdgMx3j2FlBPctNd9Gy4TgZoAYOC038p6iP4chq72ciaFjrRlrPRQa7khnmI +pIhYGUkR4lmwmoOeytngIYiLYNrZyB/HitkZEM+i3/o4oh3OmXFo0PtRFOY0GtRCKhnj4ytGnpS7 +zh33Zh2TGX7h8VVkOTSG97bRwW1lyzAcN71wPpIxt/XlyNLjPFYmG6UQaj11Mmw5TcSmL9ktnWSI +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 +/ZsUPWhZI6Q1I8YKqeiaZSyn4aN4etuTXa/B0NNBhxrkXrf8UU1PKYrIL+tl8xC0we+jojgI7iHI +atURGl7585mRJ1bHOgny5wjD69Lb9uWYetvTy4rotmhNRW5biyAugqH19JRi6BxHqnmC3V9VTXAM +w/MP27Ybd5Pkr6aqOf5PMz9Nvm311t3VNeTGfbrWZfmr64qeQys6Ws2Yka+ipUIZiT6tC2JXHjVD +K5pi9LNYmUR42zS7O4raJFmfZ/p5bNflouiXo2t+XUD9n5q8KeKi15fiZ009KpqKX9Ga9ieJi+D9 +dTSnhcjRA3q/CIrM0cWzszCNYPQ8ctcePfdRJKVnCm6v3PaDliw6NrXsLYb01+Vih2JPFYuqWPQF +s30pqtxWzrJ2s8nBsNS2rJpexbFfkvG2iSdO6CWpouW420YdBpCH4sl9Q+b5H8u68+rOg7dNhSmU +4us8Gdqf16eqJ01N7wtC0V4c2U5n5riV3Q6RYssBcbUs5rq442Kv00lTL1Nxw2HZtA6TWApRz4fd +7W032MWel5Pli5dIaIXVTkfGo7fkNEo1d7Crwc/dNHjTTD69v654GJLsuaueQWmZclMWrJZW00dL +Gi0qTfSwgyrfb3IsuWsLqLcBS618cpgMt1zW7TIa9PpylMGv5TSVy670uUpev/D3CA3THYd2NqFW +Ffn9GPzWrENz26cke9DjP28vSfn7QChqWtN8BNONg48gSD1LbsrS4y2e3YOWMuiRfD4hV/akaWlN +TfZ8pJZfetyFCZSDHg16o5YN0fURu5raltSyv4r2Zxla11sUX47bzTJk109+z2me/1TVy7I/T5Uc +m95XBsF200pu2vLxR3h8Rcce1DS1aslur/x7yWVFrPqyZxN/V8FvyW139HTBryZJ3zzjjmO1zj16 +Jrg1vSyJTVHv+qtnfpr2Wc5jCFLPD2rmIbhmHJMDMnucaE1NLYtq1RQ/36IEKvHwu6q23+d+njyC +PHquavnEw6fcd/48Vuuw20YnPY8p6uLXkyGKVUXgds4yvyxVwGAhP+gWRfz7PGVZctmRmr7bxm7b +2eHwptmi65X77iD4Zpq64cCZdovhPo4lihPjCR1G65qy8R5daQ98s06bZSxn4zlLmlYL3Wxy8FPB +rsl9SypKSktY09CONnY6sefBXZdqWctpo3UNuXOSWzepKm+eq6bpZHlyX3WzIUFQtNqGi6WqbV0v +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 +sU2Tgo9T4DJ43PMydYzvuIyNy6ygoaGx6xuf2ekVerz3fR/j9I7HvL1iJlaxgicDISCxhDljhC+u +fCMNrk/PQY0E2KcmzEB5fVhLtHw6nTMnX1GyT0WAP5U0cwb4AXkT0AVAZkEDlztxh5UUtzN+CyUQ +XBSfOifd4NVpAaqnsOdnkjS2IrpE5nTtLn1qbGEFMgJuPekFTvSxT9Ygraexi3BmF8bC9YsNxAoA +Q0slOB/ve0/iut7j+W3TOX3nd33vPa/LOU/bKWhdRkVt7/pMCju2aXaZ2M5l8FjGXqEC13FdRc/n +OZ/juopej+sVfYp4Ba7jca6n2GN7BT2T4zS8nev3vue5ijufoXuaGZqZno71HZeJcz3H4xmaho57 +W8XMjdcy9YoZFSru/s7pGTre810mplFh43G+gufjWoZekfMp7po5IMGESYYIn3x37Sx2oIyA9QlJ +SHniDD4X1N9Drva9iLAdUKIACSUCm8EJVwCZHUCp6JO9BctAeTy/3WEEVeFgpw+BmgASqqjnz3Yb +c+8taPq3v4jTQu3tgNoX6e9VQElQw401Ki9OdP5gEySUcqDiEAlVAnJQOFdd7pcpod7G/b4itlHn +IFCU4gK+HLg+CQHUDJgABJDpYPrJGVyfbJDtZAE/T54BNUHgkwkY2UpPhcmpjcSnzoA0+ojP5wJ2 +9wocZgDEMhI5NzYyZGVlZS1lOTNiLTQzODAtOGI0OC0wY2E0ZjVjNmY1Y2RjZDgwNDNlNi00ODNj +LTQ3ZGUtYmNlOS1mOTBjZWI4YjBiOGQ0bWwxMFNWR0ZpbHRlcg0vIDoNL1hNTE5vZGU7ICh4bWxu +b2RlLWF0dHJpYnV0ZS9BcnJhY2hpbGRyZTIgL0ludG5vZGV0KDEwMCV2YWx1aG5hbTsgLHdpZHRo +eXl4eG9iamVjdGZBSV9faWRpZDJudW1PY3RhdmVzbm9TdGl0Y3NUaWwwLjBiYXNlRnJlcXVlbmN0 +dXJidWxlbmNyZXN1bHQxZmVUU291cmNlR3JhcGhpY2luaW4yb3BlQ29tcG9zaXQvRGVmIDs0NGZy +YWN0YWxOb2lzNDQtMnh4QUlfQmV2ZWxTaGFkb3dzdGREZXZpYmx1cjFHYXVzc2lhbkIyZGRvZmZz +ZXR5eTFPMihsaWdodGluZy1jb2xvcjp3aHN0eWxzcGVjT3VzdXJmYWNlMTBzcGVjdWxhckV4cG9u +ZW5Db25zdGEyKC0xMDAwLTV4eDJ6elBvaW50TDFTMjEyKGtrazMzYXJpdGhtZXRsaXQxMTEyMU1l +cmdlTm9kMTQxLXh4Q29vbEJyZWV6YWkxLnJhZGl1ZGlsYW9ycGhvbG9nMmJiLWQyMDFzM0F5Q2hh +bm5lbFNlbGVjUnhEaXNwbGFjZW1lbnRNYXAybm40bWF0cmkwIDAgMTFNNDUyKGFsd2F5cmVzdGFy +ZmZpbGw1ZHRvdG9saW5lYWNhbGNNZnJvbXJlYWRkaXRpdm5vbmNjdW11TjBiZWdhbmltY2M4Y2Nj +OGNjY2NjYzFjY2NjMjFiQUlfRF8zNjZFcm9kZXI2Nl9fN1BpeGVsUGxheTUwIDVSMnJlbW92MTEg +MTsyMCAxNTsyMDAgMjAwOyAxNSAyMDsxIDEgaW5kZWZpbnJlcGVhdERzcGxpZGQxYzEzM2syOzIw +IDIwO2RpZmZ1c2V5MjU7Z3JlZW47Ymx1ZTtpbmRpZ287dmlvbGV0O3JlZDtvcmFuNmVsZXYxOGF6 +aW11MURpRHIxMDJsMTAwNDQxMTAyg56ocq1GZkYAAAABBVIJAghmcBjlUStlgQ4SQFAYDMSwIMUg +CIAAAEAAAAQUAcYQQBACQABAMIUYMERqFSQOgEp9e/ewX9lKO2HBiIynuco2Sh1X8RhAVGmoy2T+ +9WlCpjcjQ1wymkiWRKvmp+hAYTS/xUEn6K6CSWdMSjSQgxv2yItrDrj8sRfDGoj7tE2vS1FG+z6f +Ayqo0K3O6ICVQCZIfNK+olp4e3ALFB2oXTqNaoxeyVu2wjWBBJ4iAwTqeg2MnGs8xcQa4MkNy094 +AE9AOt/pmICX0P+CQzr+Gm4/qZJ1Sr5HEEw1ig2rOCMnOnRYfR0wdYcrkn3D1upAB5qRvq0pJ72y +jHUXCPKiRg4ERL8tp2S9tP9OozeB7cUYmAiqrhhNLmH2FgGIOnMT6v7hiE1R98jvGxjOmU23Gqre +9TyHG0nWyHID6tlZabASCOoFh2AC42uxZ1qiF2xBSqQdP91diVdH0bhXDmohNdBt5eReLCSUcmDI +tLpLpEjL+lb7Yf8WfM4Lx4F8yUcPwCMCpI1UAymapeErW2Z6mZz/CiREFKE+2WqJ5xEPmYstXH30 +6IDxo+s9+iswuPV0BfKNaaOrBI1yaS3n8oB0abHyzPX7cRXo3LFNU+BGBLojKpvUeuZusGyxiUBb +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 +Z83eaE/fO8HUbPq5ju7Ekqd61CZciLJa0flmqncmqGWyxZe4o09ggWEBDBioQCECBAYUHDBBYYEh +AQhEAwxMYIFhARQwTNAABDCADFQwiknKG9G5LD2W36mmGtOaPU3n18VP/TK0UciJSSqff6PoRhNc +/odPKXzD+QkUIohAAgNyLzUBJn0reO8zWrkbsRXDFVlFahzdWsvFTNIVvlPKnE3N1XOyYevoFW6h +omqnaRozp6jOOFwm6+Y0JlXf8iCOFYrhjAN1t+VVn3jD2TsO2WpWvCPRZLrj8MtKRp0rHu/t4fYS +J65kjmCPg1xHVMUQU3JGuC1nexwwR645wvIcOU5UnhHOcZBLLE7NVc7mJG49lerI9TiYyhq1tq62 +ao7Dql7LSDUh/+Yi7xgWDyYOI6OhHV1HMHcOvHPv7RFmZj4+IB8bXZpHznpTZQ/fEf1uLSsKK5Lq +6Gzfjk7qyHFItZtSeyR1PmJ7ypysvKQ8gvtLIAJISKjwgDQ4BSwUECJUgJCvBxIqPCDBBAkNDEUD +eldeknvMzLsbRSLetV11vnVTNT/nZV0r1EqpqzrGvGPtRbT/RnGjOL5WMzHQqhzINA== + + + RKxBw7VbBePwu7KPCGBtdXdV1acBh9Cz0prrqi/VJJXa1+4NRVHlzn93fHd3iQ22f8N/+Wwo0J73 +rKvCaqupqoYrzBycvxpubGZkdzOzu9O7y7O6ns3MikXMzDxlZt6dMvOUiYeKhg1sL0Q8/kf86/4r +1eup3t0RD3/ZlKeqp6r6356WmZRoT0t7Y9ozcykvU+2qpqd3Pe3Eu7wi5WXeO6s18575/z9D1NbL +3fcVH79+a6hUav3atDQ0s7Q0MzMzQzMzMzM0MzNDQzOzNEtLszRLy7S0NEszS0tLS7v/7v67tkNV +u9K+zczuWkOtu2NOZmTjIm3P2u5u9+5Wb++OEJHz7BqQ7hruuBdRZDImUm42JGZnWyZSZlJm6iVl +ZhbJlJlpx2Ej1MuGUzx8qx7rDerveqqXO4Rn42pYwhvUO/zl/a1Whbxszzvr5+pysnVTWaWVtlXt +dSP/iIjXEyI+EVF1j07t+I7PGP9iY0MlS8YxVr0GszZku3FWLzY23nJjZidnLo5io52RkZH4kJAJ +l5GRkdEQkYd5hDszG7FRCbsRG/uSsLGxsLGwMRsJ0aaV8LBOVVlYtnWT8/Zeor7bdrDI67u747tN +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 +Fc97CyrMyhu6gr5PMiJ+adApdotS0zw3HOlp7mr8yL6nYymE6YXXJNY0+RYUb8hJweGeHDFZvSmv +92hOws8uEfPkZPwLNnYnAFbo5Ka3fNF7PsHenZuduBIbnDOzBOYAiZ0CKq0AA+Sf8N0mT6LFt4NV +M6s/ohMhCzhoyQ2RBRbJlb5vV6X/DmSv59yqldb8GshQQmPPARmcxj2E7GhY4GFC6FJy9yPJb7Eh +YXyWcE/StoSaTgr7JHASK0fAcK/cCMDBVCTV9vpDOIpJjpSNegP+aeuFGsWvEW0Fz2zuW2Xd8bkj +DO8fql16mHcsy1R4B/GfXHndpN+FaZx+J33aehZOUOikxTynGhyrnk8z9qHBBJ8lsGcNXAsIuD33 +ZNCVQwYk68rQ+FiMJgD60yAgvkeLGB0r+PN1wkbu6r2Dd8+p9OrPv4dZmkCEdo29nX5obgiNatIK +NnoQejuKLajR9QiNdYWMCTHRzHCm0IflZEPzX6GO0HAWrCAajUZueunwtu8R+bcM4d1aqRHPUGP5 +VSR8Ax9WABaGELtUNCmN1aYTbqhUI15rP3tgB1ZgG2N2NwATsZ2VJRWWHrOd/In59AJEaQOatSqH +KZAATO3e7xZoAWeENYw+64pjIO4cjBr/tWQ32eqNxtEmEgEAQIhEAAABdwdQCOkI+ebuv5fv7Rvv +7DXOv+/L8c3954uzxvzi7qlCGb7ec629nL+//uLrfeY7e9djzv3VH29v8+7/35d7uGvsddzx1r/n +jLffHH+P6659zl973t6fa3/1xp7z/7PHnP/+9dV9392567mb8fYZ36u7p3XX+GMPX6/rvHuvgCzn +V3eNt8473+15/r1vrXX3/P+cu5/r7vPtev+9dfc539w59i7ml+/sMf65a8w53xWQvZvvjv++F2eO +98Zf78rJ8pwv7vdr7vJ7u/756pwzz1zWu99+M788c461x/fNPPN9ufc/xph3rvu/+F+Oa10BIffj +jPPH2uM+c72/x5x7unfs/a+93vhy12rvendrnC/PmnuXw57nfP+/7+Z8e47nioHl+eZ88+YqJ8sv +5vl2fX/uXtZ4Y609T1/9L8/c2/9z77fum3vP+/a8XTlZ7j3M8dv99b73t9eca4+9n++unOz1bs/X +4//vjT3PL9b78tu7/7h7z3Pec9f7Gl99ude6ArL3V0AIz/l6W3v949uz93u+nv//crw5xnhrzb3v +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 +ysG8YVzK+TyYwYicqrI/8g0= + + + diff --git a/packages/ti_anomali/1.2.3/kibana/dashboard/ti_anomali-207f3c40-45fb-11ec-ab0c-d7f52dcaa020.json b/packages/ti_anomali/1.2.3/kibana/dashboard/ti_anomali-207f3c40-45fb-11ec-ab0c-d7f52dcaa020.json new file mode 100755 index 0000000000..fe1d2df1a2 --- /dev/null +++ b/packages/ti_anomali/1.2.3/kibana/dashboard/ti_anomali-207f3c40-45fb-11ec-ab0c-d7f52dcaa020.json @@ -0,0 +1,122 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about file type indicators from the Anomali integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"threat.indicator.type\",\"negate\":false,\"params\":{\"query\":\"file\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"threat.indicator.type\":\"file\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":[\"ti_anomali.limo\",\"ti_anomali.threatstream\"],\"type\":\"phrases\"},\"query\":{\"bool\":{\"minimum_should_match\":1,\"should\":[{\"match_phrase\":{\"data_stream.dataset\":\"ti_anomali.limo\"}},{\"match_phrase\":{\"data_stream.dataset\":\"ti_anomali.threatstream\"}}]}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n[Anomali Overview](/app/dashboards#/view/ti_anomali-96fe1e60-4261-11ec-b7be-d3026acdf1cf) \\n**[Anomali Files (This Page)](/app/dashboards#/view/ti_anomali-207f3c40-45fb-11ec-ab0c-d7f52dcaa020)** \\n[Anomali URLs](/app/dashboards#/view/ti_anomali-39699a60-45fc-11ec-ab0c-d7f52dcaa020) \\n[Anomali Other Indicators](/app/dashboards#/view/ti_anomali-78e08d20-45fc-11ec-ab0c-d7f52dcaa020)\\n\\n[Integrations Page](/app/integrations/detail/ti_anomali/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is a overview about indicators of type **file** ingested from the Anomali integration, showing statistics and general information about all relevant indicators.\",\"openLinksInNewTab\":false},\"title\":\"\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":33,\"i\":\"1bd7687a-adf0-44f3-8901-c6b12861d90d\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"1bd7687a-adf0-44f3-8901-c6b12861d90d\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-87bddc0a-425f-4285-8f79-be027a93a959\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"87bddc0a-425f-4285-8f79-be027a93a959\":{\"columnOrder\":[\"08e77c71-b1f6-4148-bf4a-bdd39f116a3e\"],\"columns\":{\"08e77c71-b1f6-4148-bf4a-bdd39f116a3e\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"anomali.threatstream.state: \\\"active\\\" \"},\"isBucketed\":false,\"label\":\"Active\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"08e77c71-b1f6-4148-bf4a-bdd39f116a3e\",\"layerId\":\"87bddc0a-425f-4285-8f79-be027a93a959\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"6d74f2e2-daf7-4179-9f87-0543253de626\",\"w\":6,\"x\":7,\"y\":0},\"panelIndex\":\"6d74f2e2-daf7-4179-9f87-0543253de626\",\"title\":\"Active Files [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-f5a3f98d-a2a1-4ec9-9c53-b77548cd50ae\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"f5a3f98d-a2a1-4ec9-9c53-b77548cd50ae\":{\"columnOrder\":[\"11748ed5-b26f-46e2-ab60-02d08d54c0eb\"],\"columns\":{\"11748ed5-b26f-46e2-ab60-02d08d54c0eb\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"anomali.threatstream.state: * and not anomali.threatstream.state: \\\"active\\\"\"},\"isBucketed\":false,\"label\":\"Inactive\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"11748ed5-b26f-46e2-ab60-02d08d54c0eb\",\"layerId\":\"f5a3f98d-a2a1-4ec9-9c53-b77548cd50ae\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"e20ccd15-7449-492d-be61-a474d10cfabb\",\"w\":6,\"x\":13,\"y\":0},\"panelIndex\":\"e20ccd15-7449-492d-be61-a474d10cfabb\",\"title\":\"Inactive Files [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-b287f02e-afeb-44ac-86c3-d1e3146c9f20\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"b287f02e-afeb-44ac-86c3-d1e3146c9f20\":{\"columnOrder\":[\"35782be6-2bf2-4270-a8d7-4398103dac80\"],\"columns\":{\"35782be6-2bf2-4270-a8d7-4398103dac80\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SHA256\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.sha256\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"35782be6-2bf2-4270-a8d7-4398103dac80\",\"layerId\":\"b287f02e-afeb-44ac-86c3-d1e3146c9f20\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"bc2edce5-01f9-4e47-9b52-1a1dad6958c0\",\"w\":7,\"x\":19,\"y\":0},\"panelIndex\":\"bc2edce5-01f9-4e47-9b52-1a1dad6958c0\",\"title\":\"Unique SHA256 [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-fcf982ec-ba1f-473d-b92a-691b1cdadf7b\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"fcf982ec-ba1f-473d-b92a-691b1cdadf7b\":{\"columnOrder\":[\"eae8b738-1d51-4fb9-b04f-b0cd4e35f47d\"],\"columns\":{\"eae8b738-1d51-4fb9-b04f-b0cd4e35f47d\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SHA512\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.sha512\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"eae8b738-1d51-4fb9-b04f-b0cd4e35f47d\",\"layerId\":\"fcf982ec-ba1f-473d-b92a-691b1cdadf7b\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"07ba9d35-2423-4793-9eed-997e86d1d1ac\",\"w\":7,\"x\":26,\"y\":0},\"panelIndex\":\"07ba9d35-2423-4793-9eed-997e86d1d1ac\",\"title\":\"Unique SHA512 [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-e11a6974-ae88-479e-9fca-8615b7f454da\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"e11a6974-ae88-479e-9fca-8615b7f454da\":{\"columnOrder\":[\"3475c1c7-964f-44a2-a554-d7ff067446e9\"],\"columns\":{\"3475c1c7-964f-44a2-a554-d7ff067446e9\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique MD5\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.md5\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"3475c1c7-964f-44a2-a554-d7ff067446e9\",\"layerId\":\"e11a6974-ae88-479e-9fca-8615b7f454da\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"c3e37351-081e-4e18-b134-2e51bae9b53a\",\"w\":7,\"x\":33,\"y\":0},\"panelIndex\":\"c3e37351-081e-4e18-b134-2e51bae9b53a\",\"title\":\"Unique MD5 [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-be91741d-d94d-404f-9549-a0b96c92d2d0\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"be91741d-d94d-404f-9549-a0b96c92d2d0\":{\"columnOrder\":[\"074c9303-a56e-4db0-bddb-461819a9504c\"],\"columns\":{\"074c9303-a56e-4db0-bddb-461819a9504c\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SHA1\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.sha1\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"074c9303-a56e-4db0-bddb-461819a9504c\",\"layerId\":\"be91741d-d94d-404f-9549-a0b96c92d2d0\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"848432ac-28c9-4b18-b504-ac2cdbaa20c9\",\"w\":7,\"x\":40,\"y\":0},\"panelIndex\":\"848432ac-28c9-4b18-b504-ac2cdbaa20c9\",\"title\":\"Unique SHA1 [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-08036a92-d500-4966-98ca-feff7f9ecb36\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"08036a92-d500-4966-98ca-feff7f9ecb36\":{\"columnOrder\":[\"99f24050-c517-46ff-85b1-f3ceea4c9e15\",\"67920793-58db-49b6-aca9-273945fffbce\"],\"columns\":{\"67920793-58db-49b6-aca9-273945fffbce\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"99f24050-c517-46ff-85b1-f3ceea4c9e15\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.confidence\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"67920793-58db-49b6-aca9-273945fffbce\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.confidence\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"99f24050-c517-46ff-85b1-f3ceea4c9e15\"],\"layerId\":\"08036a92-d500-4966-98ca-feff7f9ecb36\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"metric\":\"67920793-58db-49b6-aca9-273945fffbce\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":25,\"i\":\"664c2738-9f69-401c-af55-42f50aabb9c5\",\"w\":16,\"x\":7,\"y\":8},\"panelIndex\":\"664c2738-9f69-401c-af55-42f50aabb9c5\",\"title\":\"Confidence Levels [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-0e4aff17-8462-40ed-a84b-8de853628b96\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-014a03d0-3a35-4aad-bd2d-d8380365070b\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"014a03d0-3a35-4aad-bd2d-d8380365070b\":{\"columnOrder\":[\"5e92fb09-af89-494a-b0a1-736b4cebc269\",\"5731c84c-3f1e-410a-8638-212b04df7d78\"],\"columns\":{\"5731c84c-3f1e-410a-8638-212b04df7d78\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Last Seen\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.last_seen\"},\"5e92fb09-af89-494a-b0a1-736b4cebc269\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"}},\"incompleteColumns\":{}},\"0e4aff17-8462-40ed-a84b-8de853628b96\":{\"columnOrder\":[\"4ff561b6-7ec6-433e-8023-572ef88eab9d\",\"2d0d9d07-5f5d-42a0-97ba-03899f504862\"],\"columns\":{\"2d0d9d07-5f5d-42a0-97ba-03899f504862\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"First Seen\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.first_seen\"},\"4ff561b6-7ec6-433e-8023-572ef88eab9d\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"accessors\":[\"2d0d9d07-5f5d-42a0-97ba-03899f504862\"],\"layerId\":\"0e4aff17-8462-40ed-a84b-8de853628b96\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"xAccessor\":\"4ff561b6-7ec6-433e-8023-572ef88eab9d\"},{\"accessors\":[\"5731c84c-3f1e-410a-8638-212b04df7d78\"],\"layerId\":\"014a03d0-3a35-4aad-bd2d-d8380365070b\",\"layerType\":\"data\",\"seriesType\":\"line\",\"xAccessor\":\"5e92fb09-af89-494a-b0a1-736b4cebc269\"}],\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"preferredSeriesType\":\"line\",\"title\":\"Empty XY chart\",\"valueLabels\":\"hide\",\"yLeftExtent\":{\"mode\":\"full\"},\"yRightExtent\":{\"mode\":\"full\"}}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":25,\"i\":\"c9a937ea-517a-40b0-aba5-75d2611ae760\",\"w\":24,\"x\":23,\"y\":8},\"panelIndex\":\"c9a937ea-517a-40b0-aba5-75d2611ae760\",\"title\":\"Indicators First and Last Seen [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs Anomali] Files", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_anomali-207f3c40-45fb-11ec-ab0c-d7f52dcaa020", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6d74f2e2-daf7-4179-9f87-0543253de626:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6d74f2e2-daf7-4179-9f87-0543253de626:indexpattern-datasource-layer-87bddc0a-425f-4285-8f79-be027a93a959", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e20ccd15-7449-492d-be61-a474d10cfabb:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e20ccd15-7449-492d-be61-a474d10cfabb:indexpattern-datasource-layer-f5a3f98d-a2a1-4ec9-9c53-b77548cd50ae", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "bc2edce5-01f9-4e47-9b52-1a1dad6958c0:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "bc2edce5-01f9-4e47-9b52-1a1dad6958c0:indexpattern-datasource-layer-b287f02e-afeb-44ac-86c3-d1e3146c9f20", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "07ba9d35-2423-4793-9eed-997e86d1d1ac:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "07ba9d35-2423-4793-9eed-997e86d1d1ac:indexpattern-datasource-layer-fcf982ec-ba1f-473d-b92a-691b1cdadf7b", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c3e37351-081e-4e18-b134-2e51bae9b53a:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c3e37351-081e-4e18-b134-2e51bae9b53a:indexpattern-datasource-layer-e11a6974-ae88-479e-9fca-8615b7f454da", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "848432ac-28c9-4b18-b504-ac2cdbaa20c9:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "848432ac-28c9-4b18-b504-ac2cdbaa20c9:indexpattern-datasource-layer-be91741d-d94d-404f-9549-a0b96c92d2d0", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "664c2738-9f69-401c-af55-42f50aabb9c5:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "664c2738-9f69-401c-af55-42f50aabb9c5:indexpattern-datasource-layer-08036a92-d500-4966-98ca-feff7f9ecb36", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c9a937ea-517a-40b0-aba5-75d2611ae760:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c9a937ea-517a-40b0-aba5-75d2611ae760:indexpattern-datasource-layer-0e4aff17-8462-40ed-a84b-8de853628b96", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c9a937ea-517a-40b0-aba5-75d2611ae760:indexpattern-datasource-layer-014a03d0-3a35-4aad-bd2d-d8380365070b", + "type": "index-pattern" + }, + { + "id": "ti_anomali-94419670-4261-11ec-b7be-d3026acdf1cf", + "name": "tag-ti_anomali-94419670-4261-11ec-b7be-d3026acdf1cf", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_anomali/1.2.3/kibana/dashboard/ti_anomali-39699a60-45fc-11ec-ab0c-d7f52dcaa020.json b/packages/ti_anomali/1.2.3/kibana/dashboard/ti_anomali-39699a60-45fc-11ec-ab0c-d7f52dcaa020.json new file mode 100755 index 0000000000..b16bc08354 --- /dev/null +++ b/packages/ti_anomali/1.2.3/kibana/dashboard/ti_anomali-39699a60-45fc-11ec-ab0c-d7f52dcaa020.json @@ -0,0 +1,107 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about URL type indicators from the Anomali integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":[\"ti_anomali.limo\",\"ti_anomali.threatstream\"],\"type\":\"phrases\"},\"query\":{\"bool\":{\"minimum_should_match\":1,\"should\":[{\"match_phrase\":{\"data_stream.dataset\":\"ti_anomali.limo\"}},{\"match_phrase\":{\"data_stream.dataset\":\"ti_anomali.threatstream\"}}]}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"threat.indicator.type\",\"negate\":false,\"params\":{\"query\":\"url\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"threat.indicator.type\":\"url\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n[Anomali Overview](/app/dashboards#/view/ti_anomali-96fe1e60-4261-11ec-b7be-d3026acdf1cf) \\n[Anomali Files](/app/dashboards#/view/ti_anomali-207f3c40-45fb-11ec-ab0c-d7f52dcaa020) \\n**[Anomali URLs (This Page)](/app/dashboards#/view/ti_anomali-39699a60-45fc-11ec-ab0c-d7f52dcaa020)** \\n[Anomali Other Indicators](/app/dashboards#/view/ti_anomali-78e08d20-45fc-11ec-ab0c-d7f52dcaa020)\\n\\n[Integrations Page](/app/integrations/detail/ti_anomali/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is a overview about indicators of type **URL** ingested from the Anomali integration, showing statistics and general information about all relevant indicators.\",\"openLinksInNewTab\":false},\"title\":\"\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":37,\"i\":\"b7e43e7b-9f77-4c99-a68c-a2e0588a1746\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"b7e43e7b-9f77-4c99-a68c-a2e0588a1746\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-c5d7e866-9673-4d61-8420-73f253f3708b\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"c5d7e866-9673-4d61-8420-73f253f3708b\":{\"columnOrder\":[\"e4aa603a-7867-4b27-b806-99152d2fef81\"],\"columns\":{\"e4aa603a-7867-4b27-b806-99152d2fef81\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Domains\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.domain\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"e4aa603a-7867-4b27-b806-99152d2fef81\",\"layerId\":\"c5d7e866-9673-4d61-8420-73f253f3708b\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"88ee89f5-502e-44aa-93ef-fc1af8684fe0\",\"w\":6,\"x\":7,\"y\":0},\"panelIndex\":\"88ee89f5-502e-44aa-93ef-fc1af8684fe0\",\"title\":\"Unique Domains [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-cc619527-1f00-4919-a5a3-512d90ac0452\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"cc619527-1f00-4919-a5a3-512d90ac0452\":{\"columnOrder\":[\"fc976f3c-3e2c-4ac7-aed6-99b26b995153\"],\"columns\":{\"fc976f3c-3e2c-4ac7-aed6-99b26b995153\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"anomali.threatstream.state: \\\"active\\\" \"},\"isBucketed\":false,\"label\":\"URL's Active\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"fc976f3c-3e2c-4ac7-aed6-99b26b995153\",\"layerId\":\"cc619527-1f00-4919-a5a3-512d90ac0452\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"e928abaa-186a-4917-bc20-a749527acb18\",\"w\":6,\"x\":13,\"y\":0},\"panelIndex\":\"e928abaa-186a-4917-bc20-a749527acb18\",\"title\":\"URLs Active [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-a37deb72-83d2-485b-8b8c-a3351feba020\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"a37deb72-83d2-485b-8b8c-a3351feba020\":{\"columnOrder\":[\"02535cee-7d24-463b-963b-90c38a8269d8\"],\"columns\":{\"02535cee-7d24-463b-963b-90c38a8269d8\":{\"customLabel\":true,\"dataType\":\"number\",\"filter\":{\"language\":\"kuery\",\"query\":\"anomali.threatstream.state: * and not anomali.threatstream.state: \\\"active\\\" \"},\"isBucketed\":false,\"label\":\"URL's Inactive\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"02535cee-7d24-463b-963b-90c38a8269d8\",\"layerId\":\"a37deb72-83d2-485b-8b8c-a3351feba020\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"a8d31131-9e82-46c9-99e4-c9f9c050ee9c\",\"w\":6,\"x\":19,\"y\":0},\"panelIndex\":\"a8d31131-9e82-46c9-99e4-c9f9c050ee9c\",\"title\":\"URLs Inactive [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-66fe853f-f5ce-4b8d-a8f9-74045fb8ca6e\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"66fe853f-f5ce-4b8d-a8f9-74045fb8ca6e\":{\"columnOrder\":[\"afa8759e-3b03-4c1a-9411-b4c4fe3fb423\"],\"columns\":{\"afa8759e-3b03-4c1a-9411-b4c4fe3fb423\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Providers\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.provider\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"afa8759e-3b03-4c1a-9411-b4c4fe3fb423\",\"layerId\":\"66fe853f-f5ce-4b8d-a8f9-74045fb8ca6e\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"49b4bbf6-4445-495e-aa36-35ff50877eae\",\"w\":6,\"x\":25,\"y\":0},\"panelIndex\":\"49b4bbf6-4445-495e-aa36-35ff50877eae\",\"title\":\"Provider Count [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-f119e9a6-4546-4496-8a01-4476e87cf3bc\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"f119e9a6-4546-4496-8a01-4476e87cf3bc\":{\"columnOrder\":[\"eb218bc5-0828-4ca9-90c8-05de914ecec6\",\"066e1f1c-655e-495e-8cf2-37bf61f81fba\"],\"columns\":{\"066e1f1c-655e-495e-8cf2-37bf61f81fba\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"eb218bc5-0828-4ca9-90c8-05de914ecec6\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.geo.country_iso_code\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"066e1f1c-655e-495e-8cf2-37bf61f81fba\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.geo.country_iso_code\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"eb218bc5-0828-4ca9-90c8-05de914ecec6\"],\"layerId\":\"f119e9a6-4546-4496-8a01-4476e87cf3bc\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"metric\":\"066e1f1c-655e-495e-8cf2-37bf61f81fba\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":23,\"i\":\"ba4f9967-a4e1-4f85-9fea-0a383cc9ac4f\",\"w\":17,\"x\":31,\"y\":0},\"panelIndex\":\"ba4f9967-a4e1-4f85-9fea-0a383cc9ac4f\",\"title\":\"Top Countries [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-a3c97e09-a95d-4baa-8552-2b0c252d995c\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"a3c97e09-a95d-4baa-8552-2b0c252d995c\":{\"columnOrder\":[\"cfb90886-11d3-471e-97be-01378e9d5105\",\"2486505b-3319-4955-9bd6-d035d9631f7d\"],\"columns\":{\"2486505b-3319-4955-9bd6-d035d9631f7d\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"cfb90886-11d3-471e-97be-01378e9d5105\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Domains\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"2486505b-3319-4955-9bd6-d035d9631f7d\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":20},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.domain\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"columnId\":\"cfb90886-11d3-471e-97be-01378e9d5105\",\"isTransposed\":false},{\"columnId\":\"2486505b-3319-4955-9bd6-d035d9631f7d\",\"isTransposed\":false}],\"layerId\":\"a3c97e09-a95d-4baa-8552-2b0c252d995c\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":29,\"i\":\"a3f75519-9e37-4548-b60c-e340d1c5f8f7\",\"w\":24,\"x\":7,\"y\":8},\"panelIndex\":\"a3f75519-9e37-4548-b60c-e340d1c5f8f7\",\"title\":\"Most Popular Domains [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-4bfa54f0-5fae-41ff-a5e6-d10e2f9ed564\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"4bfa54f0-5fae-41ff-a5e6-d10e2f9ed564\":{\"columnOrder\":[\"518ee324-e4ed-4eb7-b4fb-0e964204bfc0\",\"a527fe96-066a-448e-91c8-348993d78b91\"],\"columns\":{\"518ee324-e4ed-4eb7-b4fb-0e964204bfc0\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.url.scheme\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"a527fe96-066a-448e-91c8-348993d78b91\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.scheme\"},\"a527fe96-066a-448e-91c8-348993d78b91\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"518ee324-e4ed-4eb7-b4fb-0e964204bfc0\"],\"layerId\":\"4bfa54f0-5fae-41ff-a5e6-d10e2f9ed564\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"metric\":\"a527fe96-066a-448e-91c8-348993d78b91\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":14,\"i\":\"92c66617-cd3f-4a06-8534-52fe3c968559\",\"w\":17,\"x\":31,\"y\":23},\"panelIndex\":\"92c66617-cd3f-4a06-8534-52fe3c968559\",\"title\":\"URL Schemes [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs Anomali] URL", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_anomali-39699a60-45fc-11ec-ab0c-d7f52dcaa020", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "88ee89f5-502e-44aa-93ef-fc1af8684fe0:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "88ee89f5-502e-44aa-93ef-fc1af8684fe0:indexpattern-datasource-layer-c5d7e866-9673-4d61-8420-73f253f3708b", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e928abaa-186a-4917-bc20-a749527acb18:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e928abaa-186a-4917-bc20-a749527acb18:indexpattern-datasource-layer-cc619527-1f00-4919-a5a3-512d90ac0452", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "a8d31131-9e82-46c9-99e4-c9f9c050ee9c:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "a8d31131-9e82-46c9-99e4-c9f9c050ee9c:indexpattern-datasource-layer-a37deb72-83d2-485b-8b8c-a3351feba020", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "49b4bbf6-4445-495e-aa36-35ff50877eae:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "49b4bbf6-4445-495e-aa36-35ff50877eae:indexpattern-datasource-layer-66fe853f-f5ce-4b8d-a8f9-74045fb8ca6e", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ba4f9967-a4e1-4f85-9fea-0a383cc9ac4f:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ba4f9967-a4e1-4f85-9fea-0a383cc9ac4f:indexpattern-datasource-layer-f119e9a6-4546-4496-8a01-4476e87cf3bc", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "a3f75519-9e37-4548-b60c-e340d1c5f8f7:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "a3f75519-9e37-4548-b60c-e340d1c5f8f7:indexpattern-datasource-layer-a3c97e09-a95d-4baa-8552-2b0c252d995c", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "92c66617-cd3f-4a06-8534-52fe3c968559:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "92c66617-cd3f-4a06-8534-52fe3c968559:indexpattern-datasource-layer-4bfa54f0-5fae-41ff-a5e6-d10e2f9ed564", + "type": "index-pattern" + }, + { + "id": "ti_anomali-94419670-4261-11ec-b7be-d3026acdf1cf", + "name": "tag-ti_anomali-94419670-4261-11ec-b7be-d3026acdf1cf", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_anomali/1.2.3/kibana/dashboard/ti_anomali-78e08d20-45fc-11ec-ab0c-d7f52dcaa020.json b/packages/ti_anomali/1.2.3/kibana/dashboard/ti_anomali-78e08d20-45fc-11ec-ab0c-d7f52dcaa020.json new file mode 100755 index 0000000000..660c2e9511 --- /dev/null +++ b/packages/ti_anomali/1.2.3/kibana/dashboard/ti_anomali-78e08d20-45fc-11ec-ab0c-d7f52dcaa020.json @@ -0,0 +1,107 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about other types of indicators from the Anomali integration like email and IP", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":[\"ti_anomali.limo\",\"ti_anomali.threatstream\"],\"type\":\"phrases\"},\"query\":{\"bool\":{\"minimum_should_match\":1,\"should\":[{\"match_phrase\":{\"data_stream.dataset\":\"ti_anomali.limo\"}},{\"match_phrase\":{\"data_stream.dataset\":\"ti_anomali.threatstream\"}}]}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"threat.indicator.type\",\"negate\":true,\"params\":[\"url\",\"file\"],\"type\":\"phrases\"},\"query\":{\"bool\":{\"minimum_should_match\":1,\"should\":[{\"match_phrase\":{\"threat.indicator.type\":\"url\"}},{\"match_phrase\":{\"threat.indicator.type\":\"file\"}}]}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n[Anomali Overview](/app/dashboards#/view/ti_anomali-96fe1e60-4261-11ec-b7be-d3026acdf1cf) \\n[Anomali Files](/app/dashboards#/view/ti_anomali-207f3c40-45fb-11ec-ab0c-d7f52dcaa020) \\n[Anomali URLs](/app/dashboards#/view/ti_anomali-39699a60-45fc-11ec-ab0c-d7f52dcaa020) \\n**[Anomali Other Indicators (This Page)](/app/dashboards#/view/ti_anomali-78e08d20-45fc-11ec-ab0c-d7f52dcaa020)**\\n\\n[Integrations Page](/app/integrations/detail/ti_anomali/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is a overview about all other indicators except file and URL ingested from the Anomali integration, showing statistics and general information about all relevant indicators. This includes email, IP and domain type indicators.\",\"openLinksInNewTab\":false},\"title\":\"\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":43,\"i\":\"7c3b21d7-cfe8-41c2-89c8-bdb5a78fe47a\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"7c3b21d7-cfe8-41c2-89c8-bdb5a78fe47a\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-dfdae375-629d-49ad-b37a-66d77c3f38b7\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"dfdae375-629d-49ad-b37a-66d77c3f38b7\":{\"columnOrder\":[\"a160b4d5-ef36-4886-844b-159030642324\"],\"columns\":{\"a160b4d5-ef36-4886-844b-159030642324\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique IP's\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.ip\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"a160b4d5-ef36-4886-844b-159030642324\",\"layerId\":\"dfdae375-629d-49ad-b37a-66d77c3f38b7\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":7,\"i\":\"4cd050c7-caea-4c60-a581-955f0f5f9c49\",\"w\":6,\"x\":7,\"y\":0},\"panelIndex\":\"4cd050c7-caea-4c60-a581-955f0f5f9c49\",\"title\":\"Unique IPs [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-ae2be882-73dd-463a-9a1d-1660c611d292\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"ae2be882-73dd-463a-9a1d-1660c611d292\":{\"columnOrder\":[\"5773f11c-f2d6-4467-81c2-1be0325c7ace\"],\"columns\":{\"5773f11c-f2d6-4467-81c2-1be0325c7ace\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Emails\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.email.address\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"5773f11c-f2d6-4467-81c2-1be0325c7ace\",\"layerId\":\"ae2be882-73dd-463a-9a1d-1660c611d292\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":7,\"i\":\"f3d04a3a-0bfa-4460-af54-08fea317756c\",\"w\":7,\"x\":13,\"y\":0},\"panelIndex\":\"f3d04a3a-0bfa-4460-af54-08fea317756c\",\"title\":\"Unique Emails [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-7e5894b7-2ce6-439b-81b7-18cd6acdc0dd\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"7e5894b7-2ce6-439b-81b7-18cd6acdc0dd\":{\"columnOrder\":[\"a2682d1f-8a12-4033-8444-185f7bce5d97\"],\"columns\":{\"a2682d1f-8a12-4033-8444-185f7bce5d97\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Domains\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.domain\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"a2682d1f-8a12-4033-8444-185f7bce5d97\",\"layerId\":\"7e5894b7-2ce6-439b-81b7-18cd6acdc0dd\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":7,\"i\":\"054ec96d-8e77-425c-9d79-adbfd3f7e28b\",\"w\":7,\"x\":20,\"y\":0},\"panelIndex\":\"054ec96d-8e77-425c-9d79-adbfd3f7e28b\",\"title\":\"Unique Domains [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-f5c8665b-d765-481a-8006-206fa0718a58\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"f5c8665b-d765-481a-8006-206fa0718a58\":{\"columnOrder\":[\"2ef98406-f729-4988-b927-615a2071b945\",\"f3d622d5-c221-49b4-bf80-33543307c23d\"],\"columns\":{\"2ef98406-f729-4988-b927-615a2071b945\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.marking.tlp\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"f3d622d5-c221-49b4-bf80-33543307c23d\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.marking.tlp\"},\"f3d622d5-c221-49b4-bf80-33543307c23d\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"TLP Tags\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"2ef98406-f729-4988-b927-615a2071b945\"],\"layerId\":\"f5c8665b-d765-481a-8006-206fa0718a58\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"metric\":\"f3d622d5-c221-49b4-bf80-33543307c23d\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":28,\"i\":\"ef8f1c25-a119-45e8-84d1-0968bb60a9b6\",\"w\":21,\"x\":27,\"y\":0},\"panelIndex\":\"ef8f1c25-a119-45e8-84d1-0968bb60a9b6\",\"title\":\"TLP Categorization [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-df7a4f5f-e882-4b90-adca-edf9d34f5acb\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"df7a4f5f-e882-4b90-adca-edf9d34f5acb\":{\"columnOrder\":[\"b69cdc62-7d44-4073-a64b-b09d6da41622\",\"e7cb9c4f-3353-4580-928d-5a4797fd21d6\"],\"columns\":{\"b69cdc62-7d44-4073-a64b-b09d6da41622\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Domains\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"e7cb9c4f-3353-4580-928d-5a4797fd21d6\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":15},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.domain\"},\"e7cb9c4f-3353-4580-928d-5a4797fd21d6\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"columnId\":\"b69cdc62-7d44-4073-a64b-b09d6da41622\",\"isTransposed\":false},{\"columnId\":\"e7cb9c4f-3353-4580-928d-5a4797fd21d6\",\"isTransposed\":false}],\"layerId\":\"df7a4f5f-e882-4b90-adca-edf9d34f5acb\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":21,\"i\":\"80ea5d9f-04de-4c10-a120-32318c3088c1\",\"w\":20,\"x\":7,\"y\":7},\"panelIndex\":\"80ea5d9f-04de-4c10-a120-32318c3088c1\",\"title\":\"Most Popular Domains [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-3209cf18-1f83-44fd-aff3-336fb07d35b1\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"3209cf18-1f83-44fd-aff3-336fb07d35b1\":{\"columnOrder\":[\"a90ded97-4816-4a10-a653-51bad5dee996\",\"26f57b1d-7680-4439-9a32-ee0c5c441c37\"],\"columns\":{\"26f57b1d-7680-4439-9a32-ee0c5c441c37\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"a90ded97-4816-4a10-a653-51bad5dee996\":{\"customLabel\":true,\"dataType\":\"ip\",\"isBucketed\":true,\"label\":\"IP Addresses\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"26f57b1d-7680-4439-9a32-ee0c5c441c37\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.ip\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"columnId\":\"a90ded97-4816-4a10-a653-51bad5dee996\",\"isTransposed\":false},{\"columnId\":\"26f57b1d-7680-4439-9a32-ee0c5c441c37\",\"isTransposed\":false}],\"layerId\":\"3209cf18-1f83-44fd-aff3-336fb07d35b1\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"d6840366-ab4f-4029-8e25-c887353b566f\",\"w\":20,\"x\":7,\"y\":28},\"panelIndex\":\"d6840366-ab4f-4029-8e25-c887353b566f\",\"title\":\"Most Popular IPs [Logs Anomali\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-75accf45-7e81-45d7-b901-f488f7634041\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"75accf45-7e81-45d7-b901-f488f7634041\":{\"columnOrder\":[\"bfb109eb-e0f5-4fda-b3eb-5cc691ecce18\",\"abff64f2-5712-4582-aaf8-79f1b9d9d421\"],\"columns\":{\"abff64f2-5712-4582-aaf8-79f1b9d9d421\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"bfb109eb-e0f5-4fda-b3eb-5cc691ecce18\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Email Addresses\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"abff64f2-5712-4582-aaf8-79f1b9d9d421\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.email.address\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"columnId\":\"bfb109eb-e0f5-4fda-b3eb-5cc691ecce18\",\"isTransposed\":false},{\"columnId\":\"abff64f2-5712-4582-aaf8-79f1b9d9d421\",\"isTransposed\":false}],\"layerId\":\"75accf45-7e81-45d7-b901-f488f7634041\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"6811183d-2ca1-4f18-8dc7-225ff757f9bf\",\"w\":21,\"x\":27,\"y\":28},\"panelIndex\":\"6811183d-2ca1-4f18-8dc7-225ff757f9bf\",\"title\":\"Unique Email Addresses [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs Anomali] Other Indicators", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_anomali-78e08d20-45fc-11ec-ab0c-d7f52dcaa020", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "metrics-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "4cd050c7-caea-4c60-a581-955f0f5f9c49:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "4cd050c7-caea-4c60-a581-955f0f5f9c49:indexpattern-datasource-layer-dfdae375-629d-49ad-b37a-66d77c3f38b7", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f3d04a3a-0bfa-4460-af54-08fea317756c:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f3d04a3a-0bfa-4460-af54-08fea317756c:indexpattern-datasource-layer-ae2be882-73dd-463a-9a1d-1660c611d292", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "054ec96d-8e77-425c-9d79-adbfd3f7e28b:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "054ec96d-8e77-425c-9d79-adbfd3f7e28b:indexpattern-datasource-layer-7e5894b7-2ce6-439b-81b7-18cd6acdc0dd", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ef8f1c25-a119-45e8-84d1-0968bb60a9b6:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ef8f1c25-a119-45e8-84d1-0968bb60a9b6:indexpattern-datasource-layer-f5c8665b-d765-481a-8006-206fa0718a58", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "80ea5d9f-04de-4c10-a120-32318c3088c1:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "80ea5d9f-04de-4c10-a120-32318c3088c1:indexpattern-datasource-layer-df7a4f5f-e882-4b90-adca-edf9d34f5acb", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d6840366-ab4f-4029-8e25-c887353b566f:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d6840366-ab4f-4029-8e25-c887353b566f:indexpattern-datasource-layer-3209cf18-1f83-44fd-aff3-336fb07d35b1", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6811183d-2ca1-4f18-8dc7-225ff757f9bf:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6811183d-2ca1-4f18-8dc7-225ff757f9bf:indexpattern-datasource-layer-75accf45-7e81-45d7-b901-f488f7634041", + "type": "index-pattern" + }, + { + "id": "ti_anomali-94419670-4261-11ec-b7be-d3026acdf1cf", + "name": "tag-ti_anomali-94419670-4261-11ec-b7be-d3026acdf1cf", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_anomali/1.2.3/kibana/dashboard/ti_anomali-96fe1e60-4261-11ec-b7be-d3026acdf1cf.json b/packages/ti_anomali/1.2.3/kibana/dashboard/ti_anomali-96fe1e60-4261-11ec-b7be-d3026acdf1cf.json new file mode 100755 index 0000000000..71442c0ccd --- /dev/null +++ b/packages/ti_anomali/1.2.3/kibana/dashboard/ti_anomali-96fe1e60-4261-11ec-b7be-d3026acdf1cf.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about indicators ingested from the Anomali integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":[\"ti_anomali.limo\",\"ti_anomali.threatstream\"],\"type\":\"phrases\"},\"query\":{\"bool\":{\"minimum_should_match\":1,\"should\":[{\"match_phrase\":{\"data_stream.dataset\":\"ti_anomali.limo\"}},{\"match_phrase\":{\"data_stream.dataset\":\"ti_anomali.threatstream\"}}]}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n**[Anomali Overview (This Page)](/app/dashboards#/view/ti_anomali-96fe1e60-4261-11ec-b7be-d3026acdf1cf)** \\n[Anomali Files](/app/dashboards#/view/ti_anomali-207f3c40-45fb-11ec-ab0c-d7f52dcaa020) \\n[Anomali URLs](/app/dashboards#/view/ti_anomali-39699a60-45fc-11ec-ab0c-d7f52dcaa020) \\n[Anomali Other Indicators](/app/dashboards#/view/ti_anomali-78e08d20-45fc-11ec-ab0c-d7f52dcaa020)\\n\\n[Integrations Page](/app/integrations/detail/ti_anomali/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is a health overview related to the Anomali integration.\\n\\nThe dashboard is made to provide general statistics and show the health of the ingestion of indicators from Anomali. \\n\\nIt shows how many parts has been enabled (Limo and ThreatStream), the ingestion rates and provides a few filters for drilling down to specific indicator types retrieved from Anomali.\",\"openLinksInNewTab\":false},\"title\":\"\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":38,\"i\":\"12dc83c2-c8cf-4583-88b5-48761c63a1f7\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"12dc83c2-c8cf-4583-88b5-48761c63a1f7\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"controls\":[{\"fieldName\":\"event.dataset\",\"id\":\"1636972155400\",\"indexPatternRefName\":\"control_d0d28809-695c-4190-9b91-b62c60dff1fe_0_index_pattern\",\"label\":\"Feed Name\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"},{\"fieldName\":\"threat.indicator.provider\",\"id\":\"1636972320770\",\"indexPatternRefName\":\"control_d0d28809-695c-4190-9b91-b62c60dff1fe_1_index_pattern\",\"label\":\"Indicator Provider\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"},{\"fieldName\":\"threat.indicator.type\",\"id\":\"1636972345166\",\"indexPatternRefName\":\"control_d0d28809-695c-4190-9b91-b62c60dff1fe_2_index_pattern\",\"label\":\"Indicator Type\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"}],\"pinFilters\":false,\"updateFiltersOnChange\":false,\"useTimeFilter\":true},\"title\":\"\",\"type\":\"input_control_vis\",\"uiState\":{}}},\"gridData\":{\"h\":7,\"i\":\"d0d28809-695c-4190-9b91-b62c60dff1fe\",\"w\":41,\"x\":7,\"y\":0},\"panelIndex\":\"d0d28809-695c-4190-9b91-b62c60dff1fe\",\"title\":\"Feed and Indicator Selector [Logs Anomali]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-c28e58ec-5377-460f-9d19-81c5b0655d84\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"c28e58ec-5377-460f-9d19-81c5b0655d84\":{\"columnOrder\":[\"747a0b3c-a82b-4c1f-823e-3337619e6117\"],\"columns\":{\"747a0b3c-a82b-4c1f-823e-3337619e6117\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Total Datastreams\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"event.dataset\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"747a0b3c-a82b-4c1f-823e-3337619e6117\",\"layerId\":\"c28e58ec-5377-460f-9d19-81c5b0655d84\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"444bedab-0363-4e0c-81e3-d8e370ae3aec\",\"w\":6,\"x\":7,\"y\":7},\"panelIndex\":\"444bedab-0363-4e0c-81e3-d8e370ae3aec\",\"title\":\"Total Datastreams [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-78c9288e-227b-4cff-979b-d89a75ece8e7\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"78c9288e-227b-4cff-979b-d89a75ece8e7\":{\"columnOrder\":[\"ec9f1c6f-2142-4695-af89-30d613260474\",\"a8876e88-a694-49b6-8117-6a949ecc994a\"],\"columns\":{\"a8876e88-a694-49b6-8117-6a949ecc994a\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"ec9f1c6f-2142-4695-af89-30d613260474\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.provider\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"a8876e88-a694-49b6-8117-6a949ecc994a\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.provider\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"accessors\":[\"a8876e88-a694-49b6-8117-6a949ecc994a\"],\"layerId\":\"78c9288e-227b-4cff-979b-d89a75ece8e7\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"bar_horizontal\",\"showGridlines\":false,\"splitAccessor\":\"ec9f1c6f-2142-4695-af89-30d613260474\"}],\"legend\":{\"isVisible\":true,\"position\":\"right\",\"showSingleSeries\":true},\"preferredSeriesType\":\"bar_horizontal\",\"title\":\"Empty XY chart\",\"valueLabels\":\"hide\",\"yLeftExtent\":{\"mode\":\"full\"},\"yRightExtent\":{\"mode\":\"full\"}}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"5809310f-2beb-446c-8b5d-c84f44c041b3\",\"w\":23,\"x\":13,\"y\":7},\"panelIndex\":\"5809310f-2beb-446c-8b5d-c84f44c041b3\",\"title\":\"Total Indicators per Provider [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-7fdc4f94-7863-4914-b99d-982d353a54ba\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"7fdc4f94-7863-4914-b99d-982d353a54ba\":{\"columnOrder\":[\"da5b8cdd-28c7-47ac-a991-4b995d7a62ec\",\"0116942e-4077-43f5-9dc8-297c469d18d3\"],\"columns\":{\"0116942e-4077-43f5-9dc8-297c469d18d3\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"da5b8cdd-28c7-47ac-a991-4b995d7a62ec\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of event.dataset\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"0116942e-4077-43f5-9dc8-297c469d18d3\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"event.dataset\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"da5b8cdd-28c7-47ac-a991-4b995d7a62ec\"],\"layerId\":\"7fdc4f94-7863-4914-b99d-982d353a54ba\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"metric\":\"0116942e-4077-43f5-9dc8-297c469d18d3\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"2c98de99-50a0-4a21-86f5-005f80dab887\",\"w\":12,\"x\":36,\"y\":7},\"panelIndex\":\"2c98de99-50a0-4a21-86f5-005f80dab887\",\"title\":\"Total Indicators per Datastream [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-a531c764-6567-4a71-8bf7-c30e0f146526\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"a531c764-6567-4a71-8bf7-c30e0f146526\":{\"columnOrder\":[\"85c9e822-60d0-4aa5-b811-79b0c58aa6b6\"],\"columns\":{\"85c9e822-60d0-4aa5-b811-79b0c58aa6b6\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Total Indicators\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"85c9e822-60d0-4aa5-b811-79b0c58aa6b6\",\"layerId\":\"a531c764-6567-4a71-8bf7-c30e0f146526\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"4bf9c1a3-dd8e-4640-9a8e-8641d62a4c89\",\"w\":6,\"x\":7,\"y\":15},\"panelIndex\":\"4bf9c1a3-dd8e-4640-9a8e-8641d62a4c89\",\"title\":\"Total Indicators [Logs Anomali]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-8304fb06-3af2-4279-9b88-b3f18324c042\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"8304fb06-3af2-4279-9b88-b3f18324c042\":{\"columnOrder\":[\"645fb806-bad6-4c07-b65c-1e5eb559cc06\",\"b9f443d8-7811-4d09-9339-135a3a850ca3\",\"eab09cd9-8af1-43a9-bed1-7c88ea536fe1\"],\"columns\":{\"645fb806-bad6-4c07-b65c-1e5eb559cc06\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of event.dataset\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"eab09cd9-8af1-43a9-bed1-7c88ea536fe1\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":3},\"scale\":\"ordinal\",\"sourceField\":\"event.dataset\"},\"b9f443d8-7811-4d09-9339-135a3a850ca3\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"interval\":\"auto\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"},\"eab09cd9-8af1-43a9-bed1-7c88ea536fe1\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"fittingFunction\":\"None\",\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"eab09cd9-8af1-43a9-bed1-7c88ea536fe1\"],\"layerId\":\"8304fb06-3af2-4279-9b88-b3f18324c042\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"splitAccessor\":\"645fb806-bad6-4c07-b65c-1e5eb559cc06\",\"xAccessor\":\"b9f443d8-7811-4d09-9339-135a3a850ca3\"}],\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"preferredSeriesType\":\"line\",\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"valueLabels\":\"hide\",\"yLeftExtent\":{\"mode\":\"full\"},\"yRightExtent\":{\"mode\":\"full\"}}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{}},\"gridData\":{\"h\":15,\"i\":\"aea6ddeb-b045-4372-bfe4-5eb52cd394db\",\"w\":41,\"x\":7,\"y\":23},\"panelIndex\":\"aea6ddeb-b045-4372-bfe4-5eb52cd394db\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs Anomali] Overview", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_anomali-96fe1e60-4261-11ec-b7be-d3026acdf1cf", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d0d28809-695c-4190-9b91-b62c60dff1fe:control_d0d28809-695c-4190-9b91-b62c60dff1fe_0_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d0d28809-695c-4190-9b91-b62c60dff1fe:control_d0d28809-695c-4190-9b91-b62c60dff1fe_1_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d0d28809-695c-4190-9b91-b62c60dff1fe:control_d0d28809-695c-4190-9b91-b62c60dff1fe_2_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "444bedab-0363-4e0c-81e3-d8e370ae3aec:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "444bedab-0363-4e0c-81e3-d8e370ae3aec:indexpattern-datasource-layer-c28e58ec-5377-460f-9d19-81c5b0655d84", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "5809310f-2beb-446c-8b5d-c84f44c041b3:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "5809310f-2beb-446c-8b5d-c84f44c041b3:indexpattern-datasource-layer-78c9288e-227b-4cff-979b-d89a75ece8e7", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "2c98de99-50a0-4a21-86f5-005f80dab887:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "2c98de99-50a0-4a21-86f5-005f80dab887:indexpattern-datasource-layer-7fdc4f94-7863-4914-b99d-982d353a54ba", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "4bf9c1a3-dd8e-4640-9a8e-8641d62a4c89:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "4bf9c1a3-dd8e-4640-9a8e-8641d62a4c89:indexpattern-datasource-layer-a531c764-6567-4a71-8bf7-c30e0f146526", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "aea6ddeb-b045-4372-bfe4-5eb52cd394db:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "aea6ddeb-b045-4372-bfe4-5eb52cd394db:indexpattern-datasource-layer-8304fb06-3af2-4279-9b88-b3f18324c042", + "type": "index-pattern" + }, + { + "id": "ti_anomali-94419670-4261-11ec-b7be-d3026acdf1cf", + "name": "tag-ti_anomali-94419670-4261-11ec-b7be-d3026acdf1cf", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_anomali/1.2.3/kibana/tag/ti_anomali-94419670-4261-11ec-b7be-d3026acdf1cf.json b/packages/ti_anomali/1.2.3/kibana/tag/ti_anomali-94419670-4261-11ec-b7be-d3026acdf1cf.json new file mode 100755 index 0000000000..89444d8b1a --- /dev/null +++ b/packages/ti_anomali/1.2.3/kibana/tag/ti_anomali-94419670-4261-11ec-b7be-d3026acdf1cf.json @@ -0,0 +1,14 @@ +{ + "attributes": { + "color": "#6092C0", + "description": "", + "name": "Anomali" + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_anomali-94419670-4261-11ec-b7be-d3026acdf1cf", + "migrationVersion": { + "tag": "8.0.0" + }, + "references": [], + "type": "tag" +} \ No newline at end of file diff --git a/packages/ti_anomali/1.2.3/kibana/tag/ti_anomali-ti_abusech-320c5c80-3b0c-11ec-ae50-2fdf1e96c6a6.json b/packages/ti_anomali/1.2.3/kibana/tag/ti_anomali-ti_abusech-320c5c80-3b0c-11ec-ae50-2fdf1e96c6a6.json new file mode 100755 index 0000000000..ef4b8a7fd0 --- /dev/null +++ b/packages/ti_anomali/1.2.3/kibana/tag/ti_anomali-ti_abusech-320c5c80-3b0c-11ec-ae50-2fdf1e96c6a6.json @@ -0,0 +1,14 @@ +{ + "attributes": { + "color": "#6092C0", + "description": "", + "name": "Threat Intelligence" + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_anomali-ti_abusech-320c5c80-3b0c-11ec-ae50-2fdf1e96c6a6", + "migrationVersion": { + "tag": "8.0.0" + }, + "references": [], + "type": "tag" +} \ No newline at end of file diff --git a/packages/ti_anomali/1.2.3/manifest.yml b/packages/ti_anomali/1.2.3/manifest.yml new file mode 100755 index 0000000000..8c637677b8 --- /dev/null +++ b/packages/ti_anomali/1.2.3/manifest.yml @@ -0,0 +1,29 @@ +name: ti_anomali +title: Anomali +version: 1.2.3 +release: ga +description: Collect threat intelligence from Anomali APIs with Elastic Agent. +type: integration +format_version: 1.0.0 +license: basic +categories: [security] +conditions: + kibana.version: ^8.0.0 +icons: + - src: /img/anomali.svg + title: Anomali + size: 216x216 + type: image/svg+xml +policy_templates: + - name: ti_anomali + title: Anomali + description: Collect threat intelligence from the Anomali Limo API and Anomali Threatstream. + inputs: + - type: httpjson + title: "Collect threat intelligence from the Anomali Limo API." + description: "Collect threat intelligence from the Anomali Limo API." + - type: http_endpoint + title: "Collect incoming threat intelligence from Anomali Threatstream." + description: "Collect incoming threat intelligence from Anomali Threatstream." +owner: + github: elastic/security-external-integrations diff --git a/packages/ti_cybersixgill/1.3.2/changelog.yml b/packages/ti_cybersixgill/1.3.2/changelog.yml new file mode 100755 index 0000000000..29eda752ee --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/changelog.yml @@ -0,0 +1,31 @@ +# newer versions go on top +- version: "1.3.2" + changes: + - description: Adding field mapping for event.created + type: enhancement + link: https://github.com/elastic/integrations/pull/3042 +- version: "1.3.1" + changes: + - description: Add documentation for multi-fields + type: enhancement + link: https://github.com/elastic/integrations/pull/2916 +- version: "1.3.0" + changes: + - description: Moving integration to use the TAXII service rather than python scripts + type: enhancement + link: https://github.com/elastic/integrations/pull/2771 +- version: "1.2.0" + changes: + - description: Update to ECS 8.0 + type: enhancement + link: https://github.com/elastic/integrations/pull/2447 +- version: "1.1.0" + changes: + - description: Adds dashboards, new logo and new threat ECS fields + type: enhancement + link: https://github.com/elastic/integrations/pull/2332 +- version: "1.0.0" + changes: + - description: initial implementation + type: enhancement + link: https://github.com/elastic/integrations/pull/1762 diff --git a/packages/ti_cybersixgill/1.3.2/data_stream/threat/agent/stream/httpjson.yml.hbs b/packages/ti_cybersixgill/1.3.2/data_stream/threat/agent/stream/httpjson.yml.hbs new file mode 100755 index 0000000000..b1c69c9385 --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/data_stream/threat/agent/stream/httpjson.yml.hbs @@ -0,0 +1,62 @@ +config_version: "2" +interval: {{interval}} +request.method: "GET" + +auth.basic.user: {{username}} +auth.basic.password: {{password}} + +{{#if url}} +request.url: {{url}} +{{/if}} +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} +{{#if http_client_timeout}} +request.timeout: {{http_client_timeout}} +{{/if}} +{{#if proxy_url}} +request.proxy_url: {{proxy_url}} +{{/if}} + +request.transforms: + - set: + target: header.Content-Type + value: application/taxii+json;version=2.1 + - set: + target: header.Accept + value: application/taxii+json;version=2.1 + - set: + target: url.params.match[type] + value: indicator + - set: + target: url.params.added_after + value: '[[.cursor.timestamp]]' + default: '[[ formatDate (now (parseDuration "-{{initial_interval}}")) "2006-01-02T15:04:05.000Z" ]]' + +response.pagination: + - set: + target: url.params.added_after + value: '[[ .last_response.header.Get "X-TAXII-Date-Added-Last" ]]' + fail_on_template_error: true + +response.split: + target: body.objects + +cursor: + timestamp: + value: '[[ .last_response.header.Get "X-TAXII-Date-Added-Last" ]]' + +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} \ No newline at end of file diff --git a/packages/ti_cybersixgill/1.3.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml b/packages/ti_cybersixgill/1.3.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..835ddd259b --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,269 @@ +--- +description: Initial pipeline for parsing Cybersixgill webhooks +processors: + - set: + field: ecs.version + value: "8.0.0" + - set: + field: event.kind + value: enrichment + - set: + field: event.category + value: threat + - set: + field: event.type + value: indicator + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: cybersixgill + - remove: + field: + - cybersixgill.extensions + ignore_missing: true + - drop: + if: ctx?.cybersixgill?.type != "indicator" + - fingerprint: + fields: + - cybersixgill.id + target_field: "_id" + ignore_missing: true + ##################### + # Threat ECS Fields # + ##################### + ## File indicator operations + - date: + field: cybersixgill.created + formats: + - "yyyy-MM-dd'T'HH:mm:ssz" + - "yyyy-MM-dd'T'HH:mm:ssZ" + - "yyyy-MM-dd'T'HH:mm:ss.Sz" + - "yyyy-MM-dd'T'HH:mm:ss.SZ" + - "yyyy-MM-dd'T'HH:mm:ss.SSz" + - "yyyy-MM-dd'T'HH:mm:ss.SSZ" + - "yyyy-MM-dd'T'HH:mm:ss.SSSz" + - "yyyy-MM-dd'T'HH:mm:ss.SSSZ" + if: "ctx.cybersixgill?.created != null" + - date: + field: cybersixgill.modified + target_field: threat.indicator.last_seen + formats: + - "yyyy-MM-dd'T'HH:mm:ssz" + - "yyyy-MM-dd'T'HH:mm:ssZ" + - "yyyy-MM-dd'T'HH:mm:ss.Sz" + - "yyyy-MM-dd'T'HH:mm:ss.SZ" + - "yyyy-MM-dd'T'HH:mm:ss.SSz" + - "yyyy-MM-dd'T'HH:mm:ss.SSZ" + - "yyyy-MM-dd'T'HH:mm:ss.SSSz" + - "yyyy-MM-dd'T'HH:mm:ss.SSSZ" + if: "ctx.cybersixgill?.modified != null" + - date: + field: cybersixgill.valid_from + target_field: threat.indicator.first_seen + formats: + - "yyyy-MM-dd'T'HH:mm:ssz" + - "yyyy-MM-dd'T'HH:mm:ssZ" + - "yyyy-MM-dd'T'HH:mm:ss.Sz" + - "yyyy-MM-dd'T'HH:mm:ss.SZ" + - "yyyy-MM-dd'T'HH:mm:ss.SSz" + - "yyyy-MM-dd'T'HH:mm:ss.SSZ" + - "yyyy-MM-dd'T'HH:mm:ss.SSSz" + - "yyyy-MM-dd'T'HH:mm:ss.SSSZ" + if: "ctx.cybersixgill?.valid_from != null" + - grok: + field: cybersixgill.pattern + patterns: + - "^\\[%{MD5}\\]" + - "^\\[%{MD5} OR %{SHA1}\\]" + - "^\\[%{MD5} OR %{SHA1} OR %{SHA256}\\]" + - "^\\[%{SHA1}\\]" + - "^\\[%{SHA1} OR %{SHA256}\\]" + - "^\\[%{SHA256}\\]" + - "^\\[%{DATA:threat.indicator.type}:value%{SPACE}=%{SPACE}'%{DATA:_temp_.threatvalue}'\\]" + pattern_definitions: + MD5: "%{DATA:threat.indicator.type}:hashes.MD5%{SPACE}=%{SPACE}'%{WORD:threat.indicator.file.hash.md5}'" + SHA1: "%{DATA:threat.indicator.type}:hashes.'SHA-1'%{SPACE}=%{SPACE}'%{WORD:threat.indicator.file.hash.sha1}'" + SHA256: "%{DATA:threat.indicator.type}:hashes.'SHA-256'%{SPACE}=%{SPACE}'%{WORD:threat.indicator.file.hash.sha256}'" + if: ctx.cybersixgill?.pattern != null + - rename: + field: _temp_.threatvalue + target_field: threat.indicator.ip + ignore_missing: true + if: "['ipv4-addr', 'ipv6-addr'].contains(ctx.threat?.indicator?.type)" + - uri_parts: + field: _temp_.threatvalue + target_field: threat.indicator.url + keep_original: true + remove_if_successful: true + if: ctx.threat?.indicator?.type == 'url' + - rename: + field: _temp_.threatvalue + target_field: threat.indicator.email.address + ignore_missing: true + if: ctx.threat?.indicator?.type == 'email-addr' + - rename: + field: _temp_.threatvalue + target_field: threat.indicator.url.domain + ignore_missing: true + if: ctx.threat?.indicator?.type == 'domain-name' + - set: + field: threat.indicator.type + value: unknown + if: ctx.threat?.indicator?.type == null + - rename: + field: cybersixgill.labels + target_field: _temp_.tags + ignore_missing: true + - rename: + field: cybersixgill.sixgill_severity + target_field: event.severity + ignore_missing: true + - rename: + field: cybersixgill.description + target_field: threat.indicator.description + ignore_missing: true + - rename: + field: cybersixgill.sixgill_feedname + target_field: cybersixgill.feedname + ignore_missing: true + - rename: + field: cybersixgill.sixgill_source + target_field: threat.indicator.provider + ignore_missing: true + - rename: + field: cybersixgill.sixgill_posttitle + target_field: cybersixgill.title + ignore_missing: true + - rename: + field: cybersixgill.sixgill_actor + target_field: cybersixgill.actor + ignore_missing: true + - set: + field: threat.indicator.reference + value: "https://portal.cybersixgill.com/#/search?q=_id:{{cybersixgill.sixgill_postid}}" + if: ctx.cybersixgill?.sixgill_postid != null + - convert: + field: cybersixgill.sixgill_confidence + type: integer + target_field: threat.indicator.confidence + ignore_missing: true + - script: + lang: painless + if: ctx.cybersixgill?.external_references != null + description: > + Adds MITRE and VirusTotal fields + source: > + def refs = ctx.cybersixgill.external_references; + ctx.cybersixgill.mitre = new HashMap(); + ctx.cybersixgill.virustotal = new HashMap(); + ctx.threat.tactic = new HashMap(); + for (def ref : refs) { + if (ref?.description != null) { + ctx.cybersixgill.mitre.description = ref.description; + } + if (ref?.mitre_attack_tactic != null) { + ctx.threat.tactic.name = ref.mitre_attack_tactic; + } + if (ref?.mitre_attack_tactic_id != null) { + ctx.threat.tactic.id = ref.mitre_attack_tactic_id; + } + if (ref?.mitre_attack_tactic_url != null) { + ctx.threat.tactic.reference = ref.mitre_attack_tactic_url; + } + if (ref?.positive_rate != null) { + ctx.cybersixgill.virustotal.pr = ref.positive_rate; + } + if (ref?.url != null) { + ctx.cybersixgill.virustotal.url = ref.url; + } + } + - foreach: + field: _temp_.tags + processor: + append: + field: tags + value: "{{_ingest._value}}" + ignore_missing: true + ignore_failure: true + if: ctx._temp_?.tags != null + - script: + lang: painless + if: ctx.threat?.indicator?.confidence != null + description: > + Normalize confidence level. + source: > + def value = ctx.threat.indicator.confidence; + if (value <= 0.0 || value > 100.0) { + ctx.threat.indicator.confidence = "None"; + return; + } + if (value >= 1.0 && value <= 29.0) { + ctx.threat.indicator.confidence = "Low"; + return; + } + if (value >= 30.0 && value <= 69.0) { + ctx.threat.indicator.confidence = "Med"; + return; + } + if (value >= 70 && value <= 100) { + ctx.threat.indicator.confidence = "High"; + return; + } + - script: + lang: painless + if: ctx?.threatintel != null + source: | + void handleMap(Map map) { + for (def x : map.values()) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + map.values().removeIf(v -> v == null); + } + void handleList(List list) { + for (def x : list) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + } + handleMap(ctx); + - remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_failure: true + ignore_missing: true + - remove: + field: + - _temp_ + - cybersixgill.sixgill_postid + - cybersixgill.extensions + - cybersixgill.spec_version + - cybersixgill.valid_from + - cybersixgill.created + - cybersixgill.modified + - cybersixgill.lang + - cybersixgill.name + - cybersixgill.pattern_type + - cybersixgill.external_references + - cybersixgill.confidence + - cybersixgill.sixgill_confidence + - cybersixgill.id + - cybersixgill.indicator_types + - cybersixgill.pattern + - cybersixgill.sixgill_feedid + - cybersixgill.sixgill_post_virustotallink + - cybersixgill.type + ignore_missing: true +on_failure: + - set: + field: error.message + value: "{{ _ingest.on_failure_message }}" diff --git a/packages/ti_cybersixgill/1.3.2/data_stream/threat/fields/agent.yml b/packages/ti_cybersixgill/1.3.2/data_stream/threat/fields/agent.yml new file mode 100755 index 0000000000..845b84ed9c --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/data_stream/threat/fields/agent.yml @@ -0,0 +1,201 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + +- name: input.type + type: keyword + description: Input type. diff --git a/packages/ti_cybersixgill/1.3.2/data_stream/threat/fields/base-fields.yml b/packages/ti_cybersixgill/1.3.2/data_stream/threat/fields/base-fields.yml new file mode 100755 index 0000000000..9b559d71a6 --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/data_stream/threat/fields/base-fields.yml @@ -0,0 +1,37 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset name. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: dataset.type + type: constant_keyword + description: Dataset type. +- name: dataset.name + type: constant_keyword + description: Dataset name. +- name: dataset.namespace + type: constant_keyword + description: Dataset namespace. +- name: event.module + type: constant_keyword + description: Event module + value: ti_cybersixgill +- name: event.dataset + type: constant_keyword + description: Event dataset + value: ti_cybersixgill.threat +- name: threat.feed.name + type: constant_keyword + description: Display friendly feed name + value: Cybersixgill Darkfeed +- name: threat.feed.dashboard_id + type: constant_keyword + description: Dashboard ID used for Kibana CTI UI + value: ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738 +- name: "@timestamp" + type: date + description: Event timestamp. diff --git a/packages/ti_cybersixgill/1.3.2/data_stream/threat/fields/ecs.yml b/packages/ti_cybersixgill/1.3.2/data_stream/threat/fields/ecs.yml new file mode 100755 index 0000000000..2d8f273afc --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/data_stream/threat/fields/ecs.yml @@ -0,0 +1,170 @@ +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: |- + For log events the message field contains the log message, optimized for viewing in a log viewer. + For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. + If multiple messages exist, they can be combined into one message. + name: message + type: match_only_text +- description: Error message. + name: error.message + type: match_only_text +- description: |- + This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. + `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. + This field is an array. This will allow proper categorization of some events that fall in multiple categories. + name: event.category + type: keyword +- description: |- + Timestamp when an event arrived in the central data store. + This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. + In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`. + name: event.ingested + type: date +- description: |- + This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. + `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. + The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. + name: event.kind + type: keyword +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: |- + The numeric severity of the event according to your event source. + What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. + The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. + name: event.severity + type: long +- description: |- + event.created contains the date/time when the event was first read by an agent, or by your pipeline. + This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. + In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. + In case the two timestamps are identical, @timestamp should be used. + name: event.created + type: date +- description: |- + For log events the message field contains the log message, optimized for viewing in a log viewer. + For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. + If multiple messages exist, they can be combined into one message. + name: message + type: match_only_text +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: MD5 hash. + name: threat.indicator.file.hash.md5 + type: keyword +- description: SHA1 hash. + name: threat.indicator.file.hash.sha1 + type: keyword +- description: SHA256 hash. + name: threat.indicator.file.hash.sha256 + type: keyword +- description: If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.full + type: wildcard +- description: |- + Domain of the url, such as "www.elastic.co". + In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. + If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. + name: threat.indicator.url.domain + type: keyword +- description: |- + The field contains the file extension from the original request url, excluding the leading dot. + The file extension is only set if it exists, as not every url has a file extension. + The leading period must not be included. For example, the value must be "png", not ".png". + Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). + name: threat.indicator.url.extension + type: keyword +- description: |- + Unmodified original url as seen in the event source. + Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. + This field is meant to represent the URL as it was observed, complete or not. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.original + type: wildcard +- description: Path of the request, such as "/search". + name: threat.indicator.url.path + type: wildcard +- description: |- + Scheme of the request, such as "https". + Note: The `:` is not part of the scheme. + name: threat.indicator.url.scheme + type: keyword +- description: |- + Portion of the url after the `#`, such as "top". + The `#` is not part of the fragment. + name: threat.indicator.url.fragment + type: keyword +- description: Identifies a threat indicator as an IP address (irrespective of direction). + name: threat.indicator.ip + type: ip +- description: |- + Type of indicator as represented by Cyber Observable in STIX 2.0. + Recommended values: + * autonomous-system + * artifact + * directory + * domain-name + * email-addr + * file + * ipv4-addr + * ipv6-addr + * mac-addr + * mutex + * port + * process + * software + * url + * user-account + * windows-registry-key + * x509-certificate + name: threat.indicator.type + type: keyword +- description: Describes the type of action conducted by the threat. + name: threat.indicator.description + type: keyword +- description: The name of the indicator's provider. + name: threat.indicator.provider + type: keyword +- description: Reference URL linking to additional information about this indicator. + name: threat.indicator.reference + type: keyword +- description: |- + Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. + Expected values are: + * Not Specified + * None + * Low + * Medium + * High + name: threat.indicator.confidence + type: keyword +- description: The date and time when intelligence source first reported sighting this indicator. + name: threat.indicator.first_seen + type: date +- description: The date and time when intelligence source last reported sighting this indicator. + name: threat.indicator.last_seen + type: date +- description: Name of the type of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/) + name: threat.tactic.name + type: keyword +- description: The id of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/ ) + name: threat.tactic.id + type: keyword +- description: The reference url of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/ ) + name: threat.tactic.reference + type: keyword diff --git a/packages/ti_cybersixgill/1.3.2/data_stream/threat/fields/fields.yml b/packages/ti_cybersixgill/1.3.2/data_stream/threat/fields/fields.yml new file mode 100755 index 0000000000..8f92ebcd56 --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/data_stream/threat/fields/fields.yml @@ -0,0 +1,32 @@ +- name: cybersixgill + type: group + release: beta + fields: + - name: feedname + type: keyword + description: | + Name of the Threat Intel feed. + - name: title + type: keyword + description: | + The title of the indicator. + - name: actor + type: keyword + description: | + The related actor for the indicator. + - name: valid_from + type: date + description: | + At what date the indicator is valid from. + - name: virustotal.pr + type: keyword + description: | + The Virustotal positive rate. + - name: virustotal.url + type: keyword + description: | + The related Virustotal URL. + - name: mitre.description + type: keyword + description: | + The mitre description of the indicator diff --git a/packages/ti_cybersixgill/1.3.2/data_stream/threat/manifest.yml b/packages/ti_cybersixgill/1.3.2/data_stream/threat/manifest.yml new file mode 100755 index 0000000000..2172810090 --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/data_stream/threat/manifest.yml @@ -0,0 +1,88 @@ +type: logs +title: Cybersixgill Darkfeed Logs +streams: + - input: httpjson + vars: + - name: username + type: text + title: Cybersixgill Darkfeed Client ID + multi: false + required: true + show_user: true + - name: password + type: password + title: Cybersixgill Darkfeed Client Secret + multi: false + required: true + show_user: true + - name: url + type: text + title: Cybersixgill Darkfeed URL + multi: false + required: true + show_user: false + default: https://api.cybersixgill.com/taxii/sixgill-taxii/collections/102/objects + - name: http_client_timeout + type: text + title: HTTP Client Timeout + multi: false + required: false + show_user: false + default: 30s + - name: proxy_url + type: text + title: Proxy URL + multi: false + required: false + show_user: false + description: URL to proxy connections in the form of http[s]://:@: + - name: interval + type: text + title: Interval + multi: false + required: true + show_user: true + default: 10m + - name: initial_interval + type: text + title: Initial Interval + multi: false + required: true + show_user: false + default: 2160h + description: How far back to look for indicators the first time the agent is started. + - name: ssl + type: yaml + title: SSL + multi: false + required: false + show_user: false + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - ti_cybersixgill + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + template_path: httpjson.yml.hbs + title: Cybersixgill Darkfeed Logs + description: Collect Cybersixgill Darkfeed Logs diff --git a/packages/ti_cybersixgill/1.3.2/data_stream/threat/sample_event.json b/packages/ti_cybersixgill/1.3.2/data_stream/threat/sample_event.json new file mode 100755 index 0000000000..715b56c23f --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/data_stream/threat/sample_event.json @@ -0,0 +1,77 @@ +{ + "@timestamp": "2021-12-07T13:58:01.596Z", + "agent": { + "ephemeral_id": "23a1b4ff-d3ba-4cc1-a31d-65adb7b305fb", + "id": "3f82d126-26ae-4993-a89b-63c5413149e0", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "cybersixgill": { + "actor": "vaedzy", + "feedname": "dark_web_hashes", + "mitre": { + "description": "Mitre attack tactics and technique reference" + }, + "title": "[病毒样本] #Trickbot (2021-12-07)", + "virustotal": { + "pr": "medium", + "url": "https://virustotal.com/#/file/7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d" + } + }, + "data_stream": { + "dataset": "ti_cybersixgill.threat", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "3f82d126-26ae-4993-a89b-63c5413149e0", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "created": "2022-04-11T08:36:43.266Z", + "dataset": "ti_cybersixgill.threat", + "ingested": "2022-04-11T08:36:43Z", + "kind": "enrichment", + "original": "{\"confidence\":70,\"created\":\"2021-12-07T13:58:01.596Z\",\"description\":\"Hash attributed to malware that was discovered in the dark and deep web\",\"extensions\":{\"extension-definition--3de9ff00-174d-4d41-87c9-05a27a7e117c\":{\"extension_type\":\"toplevel-property-extension\"}},\"external_references\":[{\"positive_rate\":\"medium\",\"source_name\":\"VirusTotal\",\"url\":\"https://virustotal.com/#/file/7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d\"},{\"description\":\"Mitre attack tactics and technique reference\",\"mitre_attack_tactic\":\"Build Capabilities\",\"mitre_attack_tactic_id\":\"TA0024\",\"mitre_attack_tactic_url\":\"https://attack.mitre.org/tactics/TA0024/\",\"source_name\":\"mitre-attack\"}],\"id\":\"indicator--302dab0f-64dc-42f5-b99e-702b28c1aaa9\",\"indicator_types\":[\"malicious-activity\"],\"lang\":\"en\",\"modified\":\"2021-12-07T13:58:01.596Z\",\"name\":\"4d0f21919d623bd1631ee15ca7429f28;5ce39ef0700b64bd0c71b55caf64ae45d8400965;7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d\",\"pattern\":\"[file:hashes.MD5 = '4d0f21919d623bd1631ee15ca7429f28' OR file:hashes.'SHA-1' = '5ce39ef0700b64bd0c71b55caf64ae45d8400965' OR file:hashes.'SHA-256' = '7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d']\",\"pattern_type\":\"stix\",\"sixgill_actor\":\"vaedzy\",\"sixgill_confidence\":70,\"sixgill_feedid\":\"darkfeed_012\",\"sixgill_feedname\":\"dark_web_hashes\",\"sixgill_post_virustotallink\":\"https://virustotal.com/#/file/7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d\",\"sixgill_postid\":\"c0c9a0085fb5281cfb40a0ddb62e1d2c6a53eb7a\",\"sixgill_posttitle\":\"[病毒样本] #Trickbot (2021-12-07)\",\"sixgill_severity\":70,\"sixgill_source\":\"forum_kafan\",\"spec_version\":\"2.1\",\"type\":\"indicator\",\"valid_from\":\"2021-12-07T02:55:17Z\"}", + "severity": 70, + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "preserve_original_event", + "forwarded", + "ti_cybersixgill" + ], + "threat": { + "indicator": { + "confidence": "High", + "description": "Hash attributed to malware that was discovered in the dark and deep web", + "file": { + "hash": { + "md5": "4d0f21919d623bd1631ee15ca7429f28", + "sha1": "5ce39ef0700b64bd0c71b55caf64ae45d8400965", + "sha256": "7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d" + } + }, + "first_seen": "2021-12-07T02:55:17.000Z", + "last_seen": "2021-12-07T13:58:01.596Z", + "provider": "forum_kafan", + "reference": "https://portal.cybersixgill.com/#/search?q=_id:c0c9a0085fb5281cfb40a0ddb62e1d2c6a53eb7a", + "type": "file" + }, + "tactic": { + "id": "TA0024", + "name": "Build Capabilities", + "reference": "https://attack.mitre.org/tactics/TA0024/" + } + } +} \ No newline at end of file diff --git a/packages/ti_cybersixgill/1.3.2/docs/README.md b/packages/ti_cybersixgill/1.3.2/docs/README.md new file mode 100755 index 0000000000..1d005cf5b2 --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/docs/README.md @@ -0,0 +1,179 @@ +# Cybersixgill Darkfeed TAXII Integration + +This integration connects with the commercial [Cybersixgill Darkfeed](https://www.cybersixgill.com/products/darkfeed/) TAXII server. + +## Logs + +### Threat + +The Cybersixgill Darkfeed integration collects threat intelligence from the Darkfeed TAXII service available using the credentials provided from Cybersixgill. + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| cybersixgill.actor | The related actor for the indicator. | keyword | +| cybersixgill.feedname | Name of the Threat Intel feed. | keyword | +| cybersixgill.mitre.description | The mitre description of the indicator | keyword | +| cybersixgill.title | The title of the indicator. | keyword | +| cybersixgill.valid_from | At what date the indicator is valid from. | date | +| cybersixgill.virustotal.pr | The Virustotal positive rate. | keyword | +| cybersixgill.virustotal.url | The related Virustotal URL. | keyword | +| data_stream.dataset | Data stream dataset name. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| dataset.name | Dataset name. | constant_keyword | +| dataset.namespace | Dataset namespace. | constant_keyword | +| dataset.type | Dataset type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| error.message | Error message. | match_only_text | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset | constant_keyword | +| event.ingested | Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` \< `event.created` \< `event.ingested`. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.severity | The numeric severity of the event according to your event source. What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. | long | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Input type. | keyword | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| tags | List of keywords used to tag each event. | keyword | +| threat.feed.dashboard_id | Dashboard ID used for Kibana CTI UI | constant_keyword | +| threat.feed.name | Display friendly feed name | constant_keyword | +| threat.indicator.confidence | Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. Expected values are: \* Not Specified \* None \* Low \* Medium \* High | keyword | +| threat.indicator.description | Describes the type of action conducted by the threat. | keyword | +| threat.indicator.file.hash.md5 | MD5 hash. | keyword | +| threat.indicator.file.hash.sha1 | SHA1 hash. | keyword | +| threat.indicator.file.hash.sha256 | SHA256 hash. | keyword | +| threat.indicator.first_seen | The date and time when intelligence source first reported sighting this indicator. | date | +| threat.indicator.ip | Identifies a threat indicator as an IP address (irrespective of direction). | ip | +| threat.indicator.last_seen | The date and time when intelligence source last reported sighting this indicator. | date | +| threat.indicator.provider | The name of the indicator's provider. | keyword | +| threat.indicator.reference | Reference URL linking to additional information about this indicator. | keyword | +| threat.indicator.type | Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: \* autonomous-system \* artifact \* directory \* domain-name \* email-addr \* file \* ipv4-addr \* ipv6-addr \* mac-addr \* mutex \* port \* process \* software \* url \* user-account \* windows-registry-key \* x509-certificate | keyword | +| threat.indicator.url.domain | Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. | keyword | +| threat.indicator.url.extension | The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). | keyword | +| threat.indicator.url.fragment | Portion of the url after the `#`, such as "top". The `#` is not part of the fragment. | keyword | +| threat.indicator.url.full | If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. | wildcard | +| threat.indicator.url.full.text | Multi-field of `threat.indicator.url.full`. | match_only_text | +| threat.indicator.url.original | Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not. | wildcard | +| threat.indicator.url.original.text | Multi-field of `threat.indicator.url.original`. | match_only_text | +| threat.indicator.url.path | Path of the request, such as "/search". | wildcard | +| threat.indicator.url.scheme | Scheme of the request, such as "https". Note: The `:` is not part of the scheme. | keyword | +| threat.tactic.id | The id of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/ ) | keyword | +| threat.tactic.name | Name of the type of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/) | keyword | +| threat.tactic.reference | The reference url of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/ ) | keyword | + + +An example event for `threat` looks as following: + +```json +{ + "@timestamp": "2021-12-07T13:58:01.596Z", + "agent": { + "ephemeral_id": "23a1b4ff-d3ba-4cc1-a31d-65adb7b305fb", + "id": "3f82d126-26ae-4993-a89b-63c5413149e0", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "cybersixgill": { + "actor": "vaedzy", + "feedname": "dark_web_hashes", + "mitre": { + "description": "Mitre attack tactics and technique reference" + }, + "title": "[病毒样本] #Trickbot (2021-12-07)", + "virustotal": { + "pr": "medium", + "url": "https://virustotal.com/#/file/7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d" + } + }, + "data_stream": { + "dataset": "ti_cybersixgill.threat", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "3f82d126-26ae-4993-a89b-63c5413149e0", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "created": "2022-04-11T08:36:43.266Z", + "dataset": "ti_cybersixgill.threat", + "ingested": "2022-04-11T08:36:43Z", + "kind": "enrichment", + "original": "{\"confidence\":70,\"created\":\"2021-12-07T13:58:01.596Z\",\"description\":\"Hash attributed to malware that was discovered in the dark and deep web\",\"extensions\":{\"extension-definition--3de9ff00-174d-4d41-87c9-05a27a7e117c\":{\"extension_type\":\"toplevel-property-extension\"}},\"external_references\":[{\"positive_rate\":\"medium\",\"source_name\":\"VirusTotal\",\"url\":\"https://virustotal.com/#/file/7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d\"},{\"description\":\"Mitre attack tactics and technique reference\",\"mitre_attack_tactic\":\"Build Capabilities\",\"mitre_attack_tactic_id\":\"TA0024\",\"mitre_attack_tactic_url\":\"https://attack.mitre.org/tactics/TA0024/\",\"source_name\":\"mitre-attack\"}],\"id\":\"indicator--302dab0f-64dc-42f5-b99e-702b28c1aaa9\",\"indicator_types\":[\"malicious-activity\"],\"lang\":\"en\",\"modified\":\"2021-12-07T13:58:01.596Z\",\"name\":\"4d0f21919d623bd1631ee15ca7429f28;5ce39ef0700b64bd0c71b55caf64ae45d8400965;7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d\",\"pattern\":\"[file:hashes.MD5 = '4d0f21919d623bd1631ee15ca7429f28' OR file:hashes.'SHA-1' = '5ce39ef0700b64bd0c71b55caf64ae45d8400965' OR file:hashes.'SHA-256' = '7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d']\",\"pattern_type\":\"stix\",\"sixgill_actor\":\"vaedzy\",\"sixgill_confidence\":70,\"sixgill_feedid\":\"darkfeed_012\",\"sixgill_feedname\":\"dark_web_hashes\",\"sixgill_post_virustotallink\":\"https://virustotal.com/#/file/7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d\",\"sixgill_postid\":\"c0c9a0085fb5281cfb40a0ddb62e1d2c6a53eb7a\",\"sixgill_posttitle\":\"[病毒样本] #Trickbot (2021-12-07)\",\"sixgill_severity\":70,\"sixgill_source\":\"forum_kafan\",\"spec_version\":\"2.1\",\"type\":\"indicator\",\"valid_from\":\"2021-12-07T02:55:17Z\"}", + "severity": 70, + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "preserve_original_event", + "forwarded", + "ti_cybersixgill" + ], + "threat": { + "indicator": { + "confidence": "High", + "description": "Hash attributed to malware that was discovered in the dark and deep web", + "file": { + "hash": { + "md5": "4d0f21919d623bd1631ee15ca7429f28", + "sha1": "5ce39ef0700b64bd0c71b55caf64ae45d8400965", + "sha256": "7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d" + } + }, + "first_seen": "2021-12-07T02:55:17.000Z", + "last_seen": "2021-12-07T13:58:01.596Z", + "provider": "forum_kafan", + "reference": "https://portal.cybersixgill.com/#/search?q=_id:c0c9a0085fb5281cfb40a0ddb62e1d2c6a53eb7a", + "type": "file" + }, + "tactic": { + "id": "TA0024", + "name": "Build Capabilities", + "reference": "https://attack.mitre.org/tactics/TA0024/" + } + } +} +``` \ No newline at end of file diff --git a/packages/ti_cybersixgill/1.3.2/img/cybersixgill.svg b/packages/ti_cybersixgill/1.3.2/img/cybersixgill.svg new file mode 100755 index 0000000000..7ef7622b8e --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/img/cybersixgill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/ti_cybersixgill/1.3.2/kibana/dashboard/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738.json b/packages/ti_cybersixgill/1.3.2/kibana/dashboard/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738.json new file mode 100755 index 0000000000..f9c9134080 --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/kibana/dashboard/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738.json @@ -0,0 +1,127 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about file type indicators from the Cybersixgill integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"threat.indicator.type\",\"negate\":false,\"params\":{\"query\":\"file\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"threat.indicator.type\":\"file\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"ti_cybersixgill.threat\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"ti_cybersixgill.threat\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n[Cybersixgill Overview](/app/dashboards#/view/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738) \\n**[Cybersixgill Files (This Page)](/app/dashboards#/view/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738)** \\n[Cybersixgill URLs](/app/dashboards#/view/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738) \\n\\n[Integrations Page](/app/integrations/detail/ti_cybersixgill/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is an overview of the different threat intelligence indicators with a **threat.indicator.type: file**.\\n\\nThe dashboard is made to provide general statistics and show the health of your indicators like hash type counters, popular domains, statistics about how many unique indicators are ingested and other relevant information.\",\"openLinksInNewTab\":false},\"title\":\"Files Navigation Textbox [Logs AbuseCH]\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":35,\"i\":\"09ba3dc0-e2e2-4799-b47f-bb919bf290a1\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"09ba3dc0-e2e2-4799-b47f-bb919bf290a1\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-98786f76-dac4-4fc7-9cad-8bfce17bd00d\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"98786f76-dac4-4fc7-9cad-8bfce17bd00d\":{\"columnOrder\":[\"8622e147-406f-4711-8f68-e2425614106e\"],\"columns\":{\"8622e147-406f-4711-8f68-e2425614106e\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique File types\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.extension\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"8622e147-406f-4711-8f68-e2425614106e\",\"layerId\":\"98786f76-dac4-4fc7-9cad-8bfce17bd00d\",\"layerType\":\"data\"}},\"title\":\"Unique File Types [Logs AbuseCH]\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"31ea16d1-7591-42a7-b773-6fca00e5db14\",\"w\":5,\"x\":7,\"y\":0},\"panelIndex\":\"31ea16d1-7591-42a7-b773-6fca00e5db14\",\"title\":\"Unique File Types [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-b83c382d-fab9-4e60-a632-475e221cc20c\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-d888e3e0-3b38-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"b83c382d-fab9-4e60-a632-475e221cc20c\":{\"columnOrder\":[\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\"],\"columns\":{\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique MD5\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.md5\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\",\"layerId\":\"b83c382d-fab9-4e60-a632-475e221cc20c\",\"layerType\":\"data\"}},\"title\":\"Unique MD5 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98\",\"w\":6,\"x\":12,\"y\":0},\"panelIndex\":\"4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98\",\"title\":\"Unique MD5 [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-22fbfeae-5b51-4d9d-b463-0d0dcb36e05d\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"22fbfeae-5b51-4d9d-b463-0d0dcb36e05d\":{\"columnOrder\":[\"27d0558e-428b-40a7-aea7-4195a095ff3f\",\"4e91e0ea-9ccc-43cf-b81c-513d9f18ead7\"],\"columns\":{\"27d0558e-428b-40a7-aea7-4195a095ff3f\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.tactic.id\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"4e91e0ea-9ccc-43cf-b81c-513d9f18ead7\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.tactic.id\"},\"4e91e0ea-9ccc-43cf-b81c-513d9f18ead7\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"27d0558e-428b-40a7-aea7-4195a095ff3f\"],\"layerId\":\"22fbfeae-5b51-4d9d-b463-0d0dcb36e05d\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"4e91e0ea-9ccc-43cf-b81c-513d9f18ead7\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"c66ad183-f4f0-4605-b35d-85b7038403fd\",\"w\":14,\"x\":18,\"y\":0},\"panelIndex\":\"c66ad183-f4f0-4605-b35d-85b7038403fd\",\"title\":\"Mitre Tactics ID [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-9722683d-8451-450c-b62c-8f28e7263f1b\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"9722683d-8451-450c-b62c-8f28e7263f1b\":{\"columnOrder\":[\"4e60dfd6-afe5-47dc-a5a0-3cfdb62f01dd\",\"0ceb1563-e3cd-4a98-a469-737bee1cb9ef\"],\"columns\":{\"0ceb1563-e3cd-4a98-a469-737bee1cb9ef\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"4e60dfd6-afe5-47dc-a5a0-3cfdb62f01dd\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.tactic.name\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"0ceb1563-e3cd-4a98-a469-737bee1cb9ef\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.tactic.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"4e60dfd6-afe5-47dc-a5a0-3cfdb62f01dd\"],\"layerId\":\"9722683d-8451-450c-b62c-8f28e7263f1b\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"0ceb1563-e3cd-4a98-a469-737bee1cb9ef\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"fcc44298-dfb6-4bd4-a63d-e845ce3eb859\",\"w\":16,\"x\":32,\"y\":0},\"panelIndex\":\"fcc44298-dfb6-4bd4-a63d-e845ce3eb859\",\"title\":\"Mitre Tactics Name [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-85ad73b3-3b76-49f1-ad20-6256b58918f8\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-28549810-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"85ad73b3-3b76-49f1-ad20-6256b58918f8\":{\"columnOrder\":[\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\"],\"columns\":{\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SHA1\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.sha1\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\",\"layerId\":\"85ad73b3-3b76-49f1-ad20-6256b58918f8\",\"layerType\":\"data\"}},\"title\":\"Unique SHA1 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea\",\"w\":5,\"x\":7,\"y\":8},\"panelIndex\":\"e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea\",\"title\":\"Unique SHA1 [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-49b7070a-f1d3-46e1-a980-2f6d6d130167\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-5d6111a0-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"49b7070a-f1d3-46e1-a980-2f6d6d130167\":{\"columnOrder\":[\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\"],\"columns\":{\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SHA256\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.sha256\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\",\"layerId\":\"49b7070a-f1d3-46e1-a980-2f6d6d130167\",\"layerType\":\"data\"}},\"title\":\"Unique SHA256 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"93e32abe-87e3-469e-b7e9-a7ef7dfa2cce\",\"w\":6,\"x\":12,\"y\":8},\"panelIndex\":\"93e32abe-87e3-469e-b7e9-a7ef7dfa2cce\",\"title\":\"Unique SHA256 [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-9646600b-883b-40d0-af92-d25f7fb3fcf6\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"9646600b-883b-40d0-af92-d25f7fb3fcf6\":{\"columnOrder\":[\"b21fdfe6-05b1-474f-9748-1923a4c16ebe\",\"36345449-d429-419f-a3e1-202546a186d4\"],\"columns\":{\"36345449-d429-419f-a3e1-202546a186d4\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"b21fdfe6-05b1-474f-9748-1923a4c16ebe\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Feed Names\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"36345449-d429-419f-a3e1-202546a186d4\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"cybersixgill.feedname\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"columnId\":\"b21fdfe6-05b1-474f-9748-1923a4c16ebe\",\"isTransposed\":false},{\"columnId\":\"36345449-d429-419f-a3e1-202546a186d4\",\"isTransposed\":false}],\"layerId\":\"9646600b-883b-40d0-af92-d25f7fb3fcf6\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":19,\"i\":\"0638c316-a573-412f-b3c4-f72dde07c6e8\",\"w\":11,\"x\":7,\"y\":16},\"panelIndex\":\"0638c316-a573-412f-b3c4-f72dde07c6e8\",\"title\":\"Top Feeds [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"savedVis\":{\"data\":{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"exclude\":\"forwarded|preserve_original_event|cybersixgill-threat\",\"field\":\"tags\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"searchSource\":{\"filter\":[],\"index\":\"logs-*\",\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"maxFontSize\":72,\"minFontSize\":18,\"orientation\":\"single\",\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"scale\":\"linear\",\"showLabel\":true},\"title\":\"\",\"type\":\"tagcloud\",\"uiState\":{}}},\"gridData\":{\"h\":19,\"i\":\"463b3747-56ee-425d-a2ac-a94a44b4995e\",\"w\":14,\"x\":18,\"y\":16},\"panelIndex\":\"463b3747-56ee-425d-a2ac-a94a44b4995e\",\"title\":\"File Tags [Logs Cybersixgill]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-d9757b54-ffa7-45da-b31b-1387c4a2d26e\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"d9757b54-ffa7-45da-b31b-1387c4a2d26e\":{\"columnOrder\":[\"af192ae4-c012-49db-b768-85d876f2688e\",\"5e611ce4-0c5a-4e10-b87e-30c88affa80e\"],\"columns\":{\"5e611ce4-0c5a-4e10-b87e-30c88affa80e\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"af192ae4-c012-49db-b768-85d876f2688e\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.confidence\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"5e611ce4-0c5a-4e10-b87e-30c88affa80e\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.confidence\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"af192ae4-c012-49db-b768-85d876f2688e\"],\"layerId\":\"d9757b54-ffa7-45da-b31b-1387c4a2d26e\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"5e611ce4-0c5a-4e10-b87e-30c88affa80e\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":19,\"i\":\"256a7b33-485f-4715-90f3-768bea61d23e\",\"w\":16,\"x\":32,\"y\":16},\"panelIndex\":\"256a7b33-485f-4715-90f3-768bea61d23e\",\"title\":\"Confidence Levels [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs Cybersixgill] Files", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "31ea16d1-7591-42a7-b773-6fca00e5db14:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "31ea16d1-7591-42a7-b773-6fca00e5db14:indexpattern-datasource-layer-98786f76-dac4-4fc7-9cad-8bfce17bd00d", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98:indexpattern-datasource-layer-b83c382d-fab9-4e60-a632-475e221cc20c", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c66ad183-f4f0-4605-b35d-85b7038403fd:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c66ad183-f4f0-4605-b35d-85b7038403fd:indexpattern-datasource-layer-22fbfeae-5b51-4d9d-b463-0d0dcb36e05d", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "fcc44298-dfb6-4bd4-a63d-e845ce3eb859:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "fcc44298-dfb6-4bd4-a63d-e845ce3eb859:indexpattern-datasource-layer-9722683d-8451-450c-b62c-8f28e7263f1b", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea:indexpattern-datasource-layer-85ad73b3-3b76-49f1-ad20-6256b58918f8", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "93e32abe-87e3-469e-b7e9-a7ef7dfa2cce:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "93e32abe-87e3-469e-b7e9-a7ef7dfa2cce:indexpattern-datasource-layer-49b7070a-f1d3-46e1-a980-2f6d6d130167", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "0638c316-a573-412f-b3c4-f72dde07c6e8:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "0638c316-a573-412f-b3c4-f72dde07c6e8:indexpattern-datasource-layer-9646600b-883b-40d0-af92-d25f7fb3fcf6", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "463b3747-56ee-425d-a2ac-a94a44b4995e:kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "256a7b33-485f-4715-90f3-768bea61d23e:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "256a7b33-485f-4715-90f3-768bea61d23e:indexpattern-datasource-layer-d9757b54-ffa7-45da-b31b-1387c4a2d26e", + "type": "index-pattern" + }, + { + "id": "ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738", + "name": "tag-ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_cybersixgill/1.3.2/kibana/dashboard/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738.json b/packages/ti_cybersixgill/1.3.2/kibana/dashboard/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738.json new file mode 100755 index 0000000000..bc0a0f12a2 --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/kibana/dashboard/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738.json @@ -0,0 +1,112 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about URL type indicators from the Cybersixgill Darkfeed integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"ti_cybersixgill.threat\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"ti_cybersixgill.threat\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index\",\"key\":\"threat.indicator.type\",\"negate\":false,\"params\":{\"query\":\"url\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"threat.indicator.type\":\"url\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n[Cybersixgill Overview](/app/dashboards#/view/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738) \\n[Cybersixgill Files](/app/dashboards#/view/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738) \\n**[Cybersixgill URLs (This Page)](/app/dashboards#/view/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738)** \\n\\n[Integrations Page](/app/integrations/detail/ti_cybersixgill/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is an overview of the different threat intelligence indicators with a **threat.indicator.type: url**. \\n\\nThe dashboard is made to provide general statistics and show the health of your indicators like popular domains, file extensions, statistics about how many unique indicators are ingested and other relevant information.\",\"openLinksInNewTab\":false},\"title\":\"\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":38,\"i\":\"4c3ed6e1-8b4e-4eab-8d84-70ed4f506216\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"4c3ed6e1-8b4e-4eab-8d84-70ed4f506216\",\"title\":\"Files Navigation Textbox [Logs AbuseCH]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-a6fa56f8-32fa-405d-8771-dade4fe75d62\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"a6fa56f8-32fa-405d-8771-dade4fe75d62\":{\"columnOrder\":[\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\"],\"columns\":{\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Extensions\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.extension\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\",\"layerId\":\"a6fa56f8-32fa-405d-8771-dade4fe75d62\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"73a752f9-bde5-4396-8ede-e9e77a37182d\",\"w\":9,\"x\":7,\"y\":0},\"panelIndex\":\"73a752f9-bde5-4396-8ede-e9e77a37182d\",\"title\":\"Unique File Extensions [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-c94400ee-a135-4a99-9693-5879d29f7aad\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"c94400ee-a135-4a99-9693-5879d29f7aad\":{\"columnOrder\":[\"2934249f-fce5-4637-87ff-d2596d1b6ec5\"],\"columns\":{\"2934249f-fce5-4637-87ff-d2596d1b6ec5\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Domains\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.domain\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"2934249f-fce5-4637-87ff-d2596d1b6ec5\",\"layerId\":\"c94400ee-a135-4a99-9693-5879d29f7aad\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"02f1732b-a981-4fba-8b27-b944f2f3c98c\",\"w\":9,\"x\":16,\"y\":0},\"panelIndex\":\"02f1732b-a981-4fba-8b27-b944f2f3c98c\",\"title\":\"Unique Domains [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-db89074c-e1fe-4091-bdb1-e42a36e82bac\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"db89074c-e1fe-4091-bdb1-e42a36e82bac\":{\"columnOrder\":[\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\",\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\"],\"columns\":{\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Domains\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.domain\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"columnId\":\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\",\"isTransposed\":false},{\"columnId\":\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\",\"isTransposed\":false}],\"layerId\":\"db89074c-e1fe-4091-bdb1-e42a36e82bac\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":23,\"i\":\"8994501a-1550-4cf2-857f-d6b6491ffb62\",\"w\":23,\"x\":25,\"y\":0},\"panelIndex\":\"8994501a-1550-4cf2-857f-d6b6491ffb62\",\"title\":\"Most Popular Domains [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-0f63318a-a857-4d83-89ce-a94e2242b79e\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"0f63318a-a857-4d83-89ce-a94e2242b79e\":{\"columnOrder\":[\"df0791a6-247c-4434-a43a-fdea7577ca34\",\"77a48096-02aa-4b7a-8a7b-131fc38988bd\"],\"columns\":{\"77a48096-02aa-4b7a-8a7b-131fc38988bd\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"df0791a6-247c-4434-a43a-fdea7577ca34\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.url.scheme\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"77a48096-02aa-4b7a-8a7b-131fc38988bd\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.scheme\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"df0791a6-247c-4434-a43a-fdea7577ca34\"],\"layerId\":\"0f63318a-a857-4d83-89ce-a94e2242b79e\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"metric\":\"77a48096-02aa-4b7a-8a7b-131fc38988bd\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"ab7ab31c-e76f-4613-b17d-fdd909f17e0d\",\"w\":18,\"x\":7,\"y\":8},\"panelIndex\":\"ab7ab31c-e76f-4613-b17d-fdd909f17e0d\",\"title\":\"Percentage of URL Schema used [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-9fa49c4c-5544-472d-afce-e51d6a5687fe\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"9fa49c4c-5544-472d-afce-e51d6a5687fe\":{\"columnOrder\":[\"15e2b5ad-2040-4253-89a6-60f085c66f86\",\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\"],\"columns\":{\"15e2b5ad-2040-4253-89a6-60f085c66f86\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.url.extension\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.extension\"},\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"15e2b5ad-2040-4253-89a6-60f085c66f86\",\"15e2b5ad-2040-4253-89a6-60f085c66f86\"],\"layerId\":\"9fa49c4c-5544-472d-afce-e51d6a5687fe\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"treemap\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"fda93ed1-72f0-4489-80b7-9e69d14f30aa\",\"w\":18,\"x\":7,\"y\":23},\"panelIndex\":\"fda93ed1-72f0-4489-80b7-9e69d14f30aa\",\"title\":\"Most Popular File Extensions [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-22fbfeae-5b51-4d9d-b463-0d0dcb36e05d\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"22fbfeae-5b51-4d9d-b463-0d0dcb36e05d\":{\"columnOrder\":[\"27d0558e-428b-40a7-aea7-4195a095ff3f\",\"4e91e0ea-9ccc-43cf-b81c-513d9f18ead7\"],\"columns\":{\"27d0558e-428b-40a7-aea7-4195a095ff3f\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.tactic.id\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"4e91e0ea-9ccc-43cf-b81c-513d9f18ead7\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.tactic.id\"},\"4e91e0ea-9ccc-43cf-b81c-513d9f18ead7\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"27d0558e-428b-40a7-aea7-4195a095ff3f\"],\"layerId\":\"22fbfeae-5b51-4d9d-b463-0d0dcb36e05d\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"4e91e0ea-9ccc-43cf-b81c-513d9f18ead7\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"08fe9c8a-d5d8-4c8f-ab42-b0cfb0390008\",\"w\":12,\"x\":25,\"y\":23},\"panelIndex\":\"08fe9c8a-d5d8-4c8f-ab42-b0cfb0390008\",\"title\":\"Mitre Tactics ID [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-9722683d-8451-450c-b62c-8f28e7263f1b\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"9722683d-8451-450c-b62c-8f28e7263f1b\":{\"columnOrder\":[\"4e60dfd6-afe5-47dc-a5a0-3cfdb62f01dd\",\"0ceb1563-e3cd-4a98-a469-737bee1cb9ef\"],\"columns\":{\"0ceb1563-e3cd-4a98-a469-737bee1cb9ef\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"4e60dfd6-afe5-47dc-a5a0-3cfdb62f01dd\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.tactic.name\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"0ceb1563-e3cd-4a98-a469-737bee1cb9ef\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.tactic.name\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"4e60dfd6-afe5-47dc-a5a0-3cfdb62f01dd\"],\"layerId\":\"9722683d-8451-450c-b62c-8f28e7263f1b\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"0ceb1563-e3cd-4a98-a469-737bee1cb9ef\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"a828d701-6a36-4401-8b35-419b4454c6fc\",\"w\":11,\"x\":37,\"y\":23},\"panelIndex\":\"a828d701-6a36-4401-8b35-419b4454c6fc\",\"title\":\"Mitre Tactics Name [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs Cybersixgill] URLs", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "73a752f9-bde5-4396-8ede-e9e77a37182d:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "73a752f9-bde5-4396-8ede-e9e77a37182d:indexpattern-datasource-layer-a6fa56f8-32fa-405d-8771-dade4fe75d62", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "02f1732b-a981-4fba-8b27-b944f2f3c98c:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "02f1732b-a981-4fba-8b27-b944f2f3c98c:indexpattern-datasource-layer-c94400ee-a135-4a99-9693-5879d29f7aad", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8994501a-1550-4cf2-857f-d6b6491ffb62:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8994501a-1550-4cf2-857f-d6b6491ffb62:indexpattern-datasource-layer-db89074c-e1fe-4091-bdb1-e42a36e82bac", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ab7ab31c-e76f-4613-b17d-fdd909f17e0d:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ab7ab31c-e76f-4613-b17d-fdd909f17e0d:indexpattern-datasource-layer-0f63318a-a857-4d83-89ce-a94e2242b79e", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "fda93ed1-72f0-4489-80b7-9e69d14f30aa:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "fda93ed1-72f0-4489-80b7-9e69d14f30aa:indexpattern-datasource-layer-9fa49c4c-5544-472d-afce-e51d6a5687fe", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "08fe9c8a-d5d8-4c8f-ab42-b0cfb0390008:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "08fe9c8a-d5d8-4c8f-ab42-b0cfb0390008:indexpattern-datasource-layer-22fbfeae-5b51-4d9d-b463-0d0dcb36e05d", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "a828d701-6a36-4401-8b35-419b4454c6fc:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "a828d701-6a36-4401-8b35-419b4454c6fc:indexpattern-datasource-layer-9722683d-8451-450c-b62c-8f28e7263f1b", + "type": "index-pattern" + }, + { + "id": "ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738", + "name": "tag-ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_cybersixgill/1.3.2/kibana/dashboard/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738.json b/packages/ti_cybersixgill/1.3.2/kibana/dashboard/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738.json new file mode 100755 index 0000000000..521af2b8a2 --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/kibana/dashboard/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738.json @@ -0,0 +1,112 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about indicators ingested from the Cybersixgill Darkfeed integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"ti_cybersixgill.threat\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"ti_cybersixgill.threat\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n**[Cybersixgill Overview (This Page)](/app/dashboards#/view/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738)** \\n[Cybersixgill Files](/app/dashboards#/view/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738) \\n[Cybersixgill URLs](/app/dashboards#/view/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738) \\n\\n[Integrations Page](/app/integrations/detail/ti_cybersixgill/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is a health overview related to the Cybersixgill Darkfeed integration.\\n\\nThe dashboard is made to provide general statistics and show the health of the ingestion of indicators from Cybersixgill. \",\"openLinksInNewTab\":false},\"title\":\"Overview Textbox [Logs AbuseCH]\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":39,\"i\":\"555e9e6c-04e9-4022-b6df-bda07dde30c4\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"555e9e6c-04e9-4022-b6df-bda07dde30c4\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"logs-*\",\"key\":\"event.dataset\",\"negate\":false,\"params\":[\"ti_abusech.malware\",\"ti_abusech.malwarebazaar\",\"ti_abusech.url\"],\"type\":\"phrases\"},\"query\":{\"bool\":{\"minimum_should_match\":1,\"should\":[{\"match_phrase\":{\"event.dataset\":\"ti_abusech.malware\"}},{\"match_phrase\":{\"event.dataset\":\"ti_abusech.malwarebazaar\"}},{\"match_phrase\":{\"event.dataset\":\"ti_abusech.url\"}}]}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"logs-*\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"controls\":[{\"fieldName\":\"event.dataset\",\"id\":\"1635779550157\",\"indexPatternRefName\":\"control_e971fedd-6afd-4d03-93ac-d0c751acc254_0_index_pattern\",\"label\":\"Feed Name\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"},{\"fieldName\":\"threat.indicator.provider\",\"id\":\"1635779603363\",\"indexPatternRefName\":\"control_e971fedd-6afd-4d03-93ac-d0c751acc254_1_index_pattern\",\"label\":\"Indicator Provider\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"},{\"fieldName\":\"threat.indicator.type\",\"id\":\"1635779625911\",\"indexPatternRefName\":\"control_e971fedd-6afd-4d03-93ac-d0c751acc254_2_index_pattern\",\"label\":\"Indicator Type\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"}],\"pinFilters\":false,\"updateFiltersOnChange\":false,\"useTimeFilter\":false},\"title\":\"Feed and Indicator Selector [Logs AbuseCH]\",\"type\":\"input_control_vis\",\"uiState\":{}}},\"gridData\":{\"h\":7,\"i\":\"e971fedd-6afd-4d03-93ac-d0c751acc254\",\"w\":41,\"x\":7,\"y\":0},\"panelIndex\":\"e971fedd-6afd-4d03-93ac-d0c751acc254\",\"title\":\"Feed and Indicator Selector [Logs Cybersixgill]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"description\":\"\",\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-070f5dbc-7687-4e97-9a57-5542b401c13f\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-1d376820-3b22-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"070f5dbc-7687-4e97-9a57-5542b401c13f\":{\"columnOrder\":[\"1e352b49-3b83-44a6-98fe-8703d30f2517\"],\"columns\":{\"1e352b49-3b83-44a6-98fe-8703d30f2517\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Total Indicators\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"1e352b49-3b83-44a6-98fe-8703d30f2517\",\"layerId\":\"070f5dbc-7687-4e97-9a57-5542b401c13f\",\"layerType\":\"data\"}},\"title\":\"Total Indicators [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"d37eb797-f273-43c2-9004-b947891cce55\",\"w\":6,\"x\":7,\"y\":7},\"panelIndex\":\"d37eb797-f273-43c2-9004-b947891cce55\",\"title\":\"Total Indicators [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-1e757dc0-2e6d-4bd2-aa38-7da9133ca960\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-ec1a2c50-3b30-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"1e757dc0-2e6d-4bd2-aa38-7da9133ca960\":{\"columnOrder\":[\"66779b74-d127-4249-93e4-b8cd9c39b91f\",\"2bbd31c6-4a58-43e5-bab9-de9e7c2d2242\"],\"columns\":{\"2bbd31c6-4a58-43e5-bab9-de9e7c2d2242\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"66779b74-d127-4249-93e4-b8cd9c39b91f\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.provider\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"2bbd31c6-4a58-43e5-bab9-de9e7c2d2242\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.provider\"}}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"2bbd31c6-4a58-43e5-bab9-de9e7c2d2242\"],\"layerId\":\"1e757dc0-2e6d-4bd2-aa38-7da9133ca960\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"bar_horizontal\",\"showGridlines\":false,\"splitAccessor\":\"66779b74-d127-4249-93e4-b8cd9c39b91f\"}],\"legend\":{\"isVisible\":true,\"position\":\"right\",\"showSingleSeries\":false},\"preferredSeriesType\":\"bar_horizontal\",\"title\":\"Empty XY chart\",\"valueLabels\":\"inside\",\"xTitle\":\"Providers\",\"yLeftExtent\":{\"mode\":\"full\"},\"yRightExtent\":{\"mode\":\"full\"},\"yTitle\":\"Count\"}},\"title\":\"Total Indicators per Provider [Logs AbuseCH]\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"86d83606-4176-44b1-b3f3-011d5b5b4b58\",\"w\":23,\"x\":13,\"y\":7},\"panelIndex\":\"86d83606-4176-44b1-b3f3-011d5b5b4b58\",\"title\":\"Total Indicators per Provider [Logs AbuseCH]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-720e8ef8-eec8-4aff-abe0-c14c0bab64db\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"720e8ef8-eec8-4aff-abe0-c14c0bab64db\":{\"columnOrder\":[\"62778b77-cc47-48e1-8648-02ffd9ed8b72\",\"8e35c18d-ceea-4462-b205-daf206f180cc\"],\"columns\":{\"62778b77-cc47-48e1-8648-02ffd9ed8b72\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.tactic.name\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"8e35c18d-ceea-4462-b205-daf206f180cc\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.tactic.name\"},\"8e35c18d-ceea-4462-b205-daf206f180cc\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"62778b77-cc47-48e1-8648-02ffd9ed8b72\"],\"layerId\":\"720e8ef8-eec8-4aff-abe0-c14c0bab64db\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"8e35c18d-ceea-4462-b205-daf206f180cc\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"f3141aca-8e35-48a7-9ac8-cc43fa1a47c0\",\"w\":12,\"x\":36,\"y\":7},\"panelIndex\":\"f3141aca-8e35-48a7-9ac8-cc43fa1a47c0\",\"title\":\"Mitre Tactics [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-df8e3a91-700b-428a-a763-525076e4d3c8\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-49830790-3b27-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"df8e3a91-700b-428a-a763-525076e4d3c8\":{\"columnOrder\":[\"e4f78e2f-f0a7-4cc6-96d0-af607ffbf326\"],\"columns\":{\"e4f78e2f-f0a7-4cc6-96d0-af607ffbf326\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Total Datastreams\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"event.dataset\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"e4f78e2f-f0a7-4cc6-96d0-af607ffbf326\",\"layerId\":\"df8e3a91-700b-428a-a763-525076e4d3c8\",\"layerType\":\"data\"}},\"title\":\"Total Datastreams [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"6509dcc9-bb9c-4c1f-80e9-612f67ada340\",\"w\":6,\"x\":7,\"y\":15},\"panelIndex\":\"6509dcc9-bb9c-4c1f-80e9-612f67ada340\",\"title\":\"Total Datastreams [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-8c0613c0-3b25-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\":{\"columnOrder\":[\"4d7ca99c-8a53-4a7f-96db-409251c0e391\",\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\",\"0726d151-9edf-41cb-ab52-473ab27cf8b7\"],\"columns\":{\"0726d151-9edf-41cb-ab52-473ab27cf8b7\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"4d7ca99c-8a53-4a7f-96db-409251c0e391\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of event.dataset\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"0726d151-9edf-41cb-ab52-473ab27cf8b7\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":3},\"scale\":\"ordinal\",\"sourceField\":\"event.dataset\"},\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"interval\":\"30s\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"curveType\":\"CURVE_MONOTONE_X\",\"fittingFunction\":\"Zero\",\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"0726d151-9edf-41cb-ab52-473ab27cf8b7\"],\"layerId\":\"c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"splitAccessor\":\"4d7ca99c-8a53-4a7f-96db-409251c0e391\",\"xAccessor\":\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\"}],\"legend\":{\"isInside\":false,\"isVisible\":true,\"position\":\"bottom\",\"shouldTruncate\":false,\"showSingleSeries\":true},\"preferredSeriesType\":\"line\",\"title\":\"Empty XY chart\",\"valueLabels\":\"hide\",\"valuesInLegend\":false,\"xTitle\":\"Date\",\"yLeftExtent\":{\"mode\":\"full\"},\"yRightExtent\":{\"mode\":\"full\"},\"yTitle\":\"Total Indicators\"}},\"title\":\"Indicators ingested per Datastream [Logs AbuseCH]\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"aab4fac0-d39c-4521-aa9b-0a49d5938e9e\",\"w\":41,\"x\":7,\"y\":23},\"panelIndex\":\"aab4fac0-d39c-4521-aa9b-0a49d5938e9e\",\"title\":\"Indicators ingested per Datastream [Logs Cybersixgill]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs Cybersixgill] Overview", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:control_e971fedd-6afd-4d03-93ac-d0c751acc254_0_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:control_e971fedd-6afd-4d03-93ac-d0c751acc254_1_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:control_e971fedd-6afd-4d03-93ac-d0c751acc254_2_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d37eb797-f273-43c2-9004-b947891cce55:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d37eb797-f273-43c2-9004-b947891cce55:indexpattern-datasource-layer-070f5dbc-7687-4e97-9a57-5542b401c13f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "86d83606-4176-44b1-b3f3-011d5b5b4b58:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "86d83606-4176-44b1-b3f3-011d5b5b4b58:indexpattern-datasource-layer-1e757dc0-2e6d-4bd2-aa38-7da9133ca960", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f3141aca-8e35-48a7-9ac8-cc43fa1a47c0:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f3141aca-8e35-48a7-9ac8-cc43fa1a47c0:indexpattern-datasource-layer-720e8ef8-eec8-4aff-abe0-c14c0bab64db", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6509dcc9-bb9c-4c1f-80e9-612f67ada340:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6509dcc9-bb9c-4c1f-80e9-612f67ada340:indexpattern-datasource-layer-df8e3a91-700b-428a-a763-525076e4d3c8", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "aab4fac0-d39c-4521-aa9b-0a49d5938e9e:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "aab4fac0-d39c-4521-aa9b-0a49d5938e9e:indexpattern-datasource-layer-c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7", + "type": "index-pattern" + }, + { + "id": "ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738", + "name": "tag-ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_cybersixgill/1.3.2/kibana/tag/ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738.json b/packages/ti_cybersixgill/1.3.2/kibana/tag/ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738.json new file mode 100755 index 0000000000..ecc0f01b43 --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/kibana/tag/ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738.json @@ -0,0 +1,14 @@ +{ + "attributes": { + "color": "#6092C0", + "description": "", + "name": "Cybersixgill" + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738", + "migrationVersion": { + "tag": "8.0.0" + }, + "references": [], + "type": "tag" +} \ No newline at end of file diff --git a/packages/ti_cybersixgill/1.3.2/manifest.yml b/packages/ti_cybersixgill/1.3.2/manifest.yml new file mode 100755 index 0000000000..008c8027bc --- /dev/null +++ b/packages/ti_cybersixgill/1.3.2/manifest.yml @@ -0,0 +1,26 @@ +name: ti_cybersixgill +title: Cybersixgill +version: 1.3.2 +release: ga +description: This Elastic integration collects threat intelligence from Cybersixgill +type: integration +format_version: 1.0.0 +license: basic +categories: ["security", "productivity"] +conditions: + kibana.version: ^8.0.0 +policy_templates: + - name: cybersixgill + title: Cybersixgill Threat Intel + description: Collect Threat Intel from Cybersixgill + inputs: + - type: httpjson + title: "Collect Threat Intel from Cybersixgill Darkfeed" + description: "Collect Threat Intel from Cybersixgill Darkfeed" +owner: + github: elastic/security-external-integrations +icons: + - src: /img/cybersixgill.svg + title: Cybersixgill + size: 32x32 + type: image/svg+xml diff --git a/packages/ti_misp/1.2.2/changelog.yml b/packages/ti_misp/1.2.2/changelog.yml new file mode 100755 index 0000000000..97b1603c31 --- /dev/null +++ b/packages/ti_misp/1.2.2/changelog.yml @@ -0,0 +1,36 @@ +# newer versions go on top +- version: "1.2.2" + changes: + - description: Add mapping for event.created + type: enhancement + link: https://github.com/elastic/integrations/pull/3042 +- version: "1.2.1" + changes: + - description: Add documentation for multi-fields + type: enhancement + link: https://github.com/elastic/integrations/pull/2916 +- version: "1.2.0" + changes: + - description: Update to ECS 8.0 + type: enhancement + link: https://github.com/elastic/integrations/pull/2448 +- version: "1.1.0" + changes: + - description: Adds dashboards and threat.feed ECS fields + type: enhancement + link: https://github.com/elastic/integrations/pull/2485 +- version: "1.0.2" + changes: + - description: Change test public IPs to the supported subset + type: bugfix + link: https://github.com/elastic/integrations/pull/2327 +- version: "1.0.1" + changes: + - description: Bump minimum version + type: enhancement + link: https://github.com/elastic/integrations/pull/2063 +- version: "1.0.0" + changes: + - description: Initial release + type: enhancement + link: https://github.com/elastic/integrations/pull/1946 diff --git a/packages/ti_misp/1.2.2/data_stream/threat/agent/stream/httpjson.yml.hbs b/packages/ti_misp/1.2.2/data_stream/threat/agent/stream/httpjson.yml.hbs new file mode 100755 index 0000000000..e7813459bb --- /dev/null +++ b/packages/ti_misp/1.2.2/data_stream/threat/agent/stream/httpjson.yml.hbs @@ -0,0 +1,75 @@ +config_version: "2" +interval: {{interval}} +request.method: "POST" + +{{#if url}} +request.url: {{url}}/events/restSearch +{{/if}} +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} +{{#if http_client_timeout}} +request.timeout: {{http_client_timeout}} +{{/if}} +{{#if proxy_url}} +request.proxy_url: {{proxy_url}} +{{/if}} +request.body: +{{#if filters}} + {{filters}} +{{/if}} +request.transforms: +{{#if api_token}} +- set: + target: header.Authorization + value: {{api_token}} +{{/if}} +- set: + target: body.page + value: 1 +- set: + target: body.limit + value: 10 +- set: + target: body.returnFormat + value: json +- set: + target: body.timestamp + value: '[[.cursor.timestamp]]' + default: '[[ formatDate (now (parseDuration "-{{initial_interval}}")) "UnixDate" ]]' + +response.split: + target: body.response + split: + target: body.Event.Attribute + ignore_empty_value: true + keep_parent: true + split: + target: body.Event.Object + keep_parent: true + split: + target: body.Event.Object.Attribute + keep_parent: true +response.request_body_on_pagination: true +response.pagination: +- set: + target: body.page + value: '[[add .last_response.page 1]]' + fail_on_template_error: true +cursor: + timestamp: + value: '[[.last_event.Event.timestamp]]' +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/ti_misp/1.2.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml b/packages/ti_misp/1.2.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..9456fa99ff --- /dev/null +++ b/packages/ti_misp/1.2.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,388 @@ +--- +description: Pipeline for parsing MISP Threat Intel +processors: + #################### + # Event ECS fields # + #################### + - set: + field: event.ingested + value: "{{_ingest.timestamp}}" + - set: + field: ecs.version + value: "8.0.0" + - set: + field: event.kind + value: enrichment + - set: + field: event.category + value: threat + - set: + field: event.type + value: indicator + + ###################### + # General ECS fields # + ###################### + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: json + - fingerprint: + fields: + - json.Event.Attribute.uuid + - json.Event.Object.Attribute.uuid + target_field: "_id" + ignore_missing: true + - rename: + field: json.Event + target_field: misp + ignore_missing: true + - set: + field: threat.indicator.provider + value: misp + if: ctx.misp?.Orgc?.local != 'false' + - set: + field: threat.indicator.provider + value: "{{misp.Orgc.name}}" + if: ctx.misp?.Orgc?.local == 'false' + ignore_empty_value: true + + # Removing fields not needed anymore, either because its copied somewhere else, or is not relevant to this event + - remove: + field: + - misp.ShadowAttribute + - misp.RelatedEvent + - misp.Galaxy + - misp.Attribute.Galaxy + - misp.Attribute.ShadowAttribute + - misp.EventReport + - misp.Object.Attribute.Galaxy + - misp.Object.Attribute.ShadowAttribute + ignore_missing: true + - remove: + field: + - misp.Attribute + ignore_missing: true + if: ctx.misp?.Attribute.size() == 0 + - remove: + field: + - misp.Object + ignore_missing: true + if: ctx.misp?.Object.size() == 0 + - date: + field: misp.timestamp + formats: + - UNIX + ignore_failure: true + - rename: + field: misp.Attribute + target_field: misp.attribute + ignore_missing: true + - rename: + field: misp.Object + target_field: misp.object + ignore_missing: true + - rename: + field: misp.object.Attribute + target_field: misp.object.attribute + ignore_missing: true + - rename: + field: misp.Orgc + target_field: misp.orgc + ignore_missing: true + - rename: + field: misp.Org + target_field: misp.org + ignore_missing: true + - rename: + field: misp.Tag + target_field: misp.tag + ignore_missing: true + + # # Dance around issue of not being able to split the document into two. + # # Make the Object.Attribute field primary if it exists, but keep the + # # outer Attribute as context. + - rename: + field: misp.attribute + target_field: misp.context.attribute + ignore_missing: true + if: ctx.misp?.object != null + - rename: + field: misp.object.attribute + target_field: misp.attribute + ignore_missing: true + if: ctx.misp?.object != null + + ##################### + # Threat ECS Fields # + ##################### + - set: + field: threat.feed.name + value: "MISP" + - rename: + field: misp.attribute.first_seen + target_field: threat.indicator.first_seen + ignore_missing: true + - rename: + field: misp.attribute.last_seen + target_field: threat.indicator.last_seen + ignore_missing: true + - convert: + field: misp.analysis + type: long + target_field: threat.indicator.scanner_stats + ignore_missing: true + - convert: + field: misp.threat_level_id + type: long + ignore_missing: true + + ## File/Hash indicator operations + - set: + field: threat.indicator.type + value: file + if: "ctx.misp?.attribute?.type != null && (['md5', 'impfuzzy', 'imphash', 'pehash', 'sha1', 'sha224', 'sha256', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512', 'sha384', 'sha512', 'sha512/224', 'sha512/256', 'ssdeep', 'tlsh', 'vhash'].contains(ctx.misp?.attribute?.type) || ctx.misp?.attribute?.type.startsWith('filename'))" + - rename: + field: misp.attribute.value + target_field: "threat.indicator.file.hash.{{misp.attribute.type}}" + ignore_missing: true + if: "ctx.threat?.indicator?.type == 'file' && ctx.misp?.attribute?.type != null && !ctx.misp?.attribute?.type.startsWith('filename')" + - rename: + field: misp.attribute.value + target_field: threat.indicator.file.name + ignore_missing: true + if: "ctx.threat?.indicator?.type == 'file' && ctx.misp?.attribute?.type == 'filename'" + - grok: + field: misp.attribute.type + patterns: + - "%{WORD}\\|%{WORD:_tmp.hashtype}" + ignore_missing: true + if: ctx.misp?.attribute?.type != null && ctx.misp?.attribute?.type.startsWith('filename|') + - grok: + field: misp.attribute.value + patterns: + - "%{DATA:threat.indicator.file.name}\\|%{GREEDYDATA:_tmp.hashvalue}" + ignore_missing: true + if: ctx.misp?.attribute?.type != null && ctx.misp?.attribute?.type.startsWith('filename|') + - set: + field: threat.indicator.file.hash.{{_tmp.hashtype}} + value: "{{_tmp.hashvalue}}" + if: "ctx.misp?.attribute?.type != null && ctx.misp?.attribute?.type.startsWith('filename|') && ctx?._tmp?.hashvalue != null && ctx?._tmp?.hashtype != null" + + ## URL/URI indicator operations + - set: + field: threat.indicator.type + value: url + if: "ctx.misp?.attribute?.type != null && ['url', 'link', 'uri'].contains(ctx.misp?.attribute?.type)" + - uri_parts: + field: misp.attribute.value + target_field: threat.indicator.url + keep_original: true + remove_if_successful: true + if: ctx.threat?.indicator?.type == 'url' && ctx.misp?.attribute?.type != 'uri' + - set: + field: threat.indicator.url.full + value: "{{{threat.indicator.url.original}}}" + ignore_empty_value: true + if: "ctx.threat?.indicator?.type == 'url' && ctx.misp?.attribute?.type != 'uri'" + + ## Regkey indicator operations + - set: + field: threat.indicator.type + value: windows-registry-key + if: "ctx.misp?.attribute?.type != null && ctx.misp?.attribute?.type.startsWith('regkey')" + - rename: + field: misp.attribute.value + target_field: threat.indicator.registry.key + ignore_missing: true + if: "ctx.threat?.indicator?.type == 'windows-registry-key' && ctx.misp?.attribute?.type == 'regkey'" + - grok: + field: misp.attribute.value + patterns: + - "%{DATA:threat.indicator.registry.key}\\|%{DATA:threat.indicator.registry.value}" + ignore_missing: true + if: "ctx.misp?.attribute?.type == 'regkey|value'" + + ## AS indicator operations + - set: + field: threat.indicator.type + value: autonomous-system + if: "ctx.misp?.attribute?.type != null && ctx.misp?.attribute?.type == 'AS'" + - convert: + field: misp.attribute.value + type: long + target_field: threat.indicator.as.number + ignore_missing: true + if: ctx.threat?.indicator?.type == 'autonomous-system' + + ## Domain/IP/Port indicator operations + - set: + field: threat.indicator.type + value: domain-name + if: "ctx.misp?.attribute?.type != null && (ctx.misp?.attribute?.type == 'hostname' || ctx.misp?.attribute?.type.startsWith('domain'))" + - set: + field: threat.indicator.type + value: ipv4-addr + if: "ctx.misp?.attribute?.type != null && ['ip-src', 'ip-src|port', 'ip-dst', 'ip-dst|port'].contains(ctx.misp?.attribute?.type)" + - rename: + field: misp.attribute.value + target_field: threat.indicator.url.domain + ignore_missing: true + if: "ctx.threat?.indicator?.type == 'domain-name' && ctx.misp?.attribute?.type != 'domain|ip' && ctx.threat?.indicator?.url?.domain == null" + - rename: + field: misp.attribute.value + target_field: threat.indicator.ip + ignore_missing: true + if: "ctx.threat?.indicator?.type == 'ipv4-addr' && ctx.misp?.attribute?.type != 'domain|ip' && !['ip-src|port', 'ip-dst|port'].contains(ctx.misp?.attribute?.type)" + - grok: + field: misp.attribute.value + patterns: + - "%{DATA:threat.indicator.url.domain}\\|%{IP:threat.indicator.ip}" + ignore_missing: true + if: ctx.misp?.attribute?.type == 'domain|ip' && ctx.threat?.indicator?.url?.domain == null + - grok: + field: misp.attribute.value + patterns: + - "%{IP:threat.indicator.ip}\\|%{NUMBER:threat.indicator.port}" + ignore_missing: true + if: "['ip-src|port', 'ip-dst|port'].contains(ctx.misp?.attribute?.type)" + + ## Email indicator operations + # Currently this ignores email-message, except setting the type it will leave the rest of the fields under misp. + - set: + field: threat.indicator.type + value: email-addr + if: "ctx.misp?.attribute?.type != null && ['email-dst', 'email-src'].contains(ctx.misp?.attribute?.type)" + - set: + field: threat.indicator.type + value: email-message + if: "ctx.misp?.attribute?.type != null && ctx.misp?.attribute?.type.startsWith('email') && !['email-dst', 'email-src'].contains(ctx.misp?.attribute?.type)" + - rename: + field: misp.attribute.value + target_field: threat.indicator.email.address + ignore_missing: true + if: ctx.threat?.indicator?.type == 'email-addr' + - rename: + field: misp.event_creator_email + target_field: user.email + ignore_missing: true + - append: + field: user.roles + value: "reporting_user" + if: ctx?.user?.email != null + + ## MAC Address indicator operations + - set: + field: threat.indicator.type + value: mac-addr + if: "ctx.misp?.attribute?.type != null && ['mac-address', 'mac-eui-64'].contains(ctx.misp?.attribute?.type)" + - rename: + field: misp.attribute.value + target_field: threat.indicator.mac + ignore_missing: true + if: ctx.threat?.indicator?.type == 'mac-addr' + + ################### + # Tags ECS fields # + ################### + # Stripping special characters from tags + - script: + lang: painless + if: ctx.misp?.tag != null + source: | + def tags = ctx.misp.tag.stream() + .map(t -> t.name.replace('\\', '').replace('"', '')) + .collect(Collectors.toList()); + def tlpTags = tags.stream() + .filter(t -> t.startsWith('tlp:')) + .map(t -> t.replace('tlp:', '')) + .collect(Collectors.toList()); + + ctx.tags = tags; + ctx.threat.indicator.marking = [ 'tlp': tlpTags ]; + + # Setting indicator type to unknown if it does not match anything + - set: + field: threat.indicator.type + value: unknown + if: ctx.threat?.indicator?.type == null + + ################# + # Convert types # + ################# + - convert: + field: misp.attribute.distribution + type: long + ignore_missing: true + - convert: + field: misp.context.attribute.distribution + type: long + ignore_missing: true + - convert: + field: threat.indicator.port + type: long + ignore_missing: true + - convert: + field: misp.attribute_count + type: long + ignore_missing: true + + ###################### + # Cleanup processors # + ###################### + - script: + lang: painless + if: ctx?.misp != null + source: | + void handleMap(Map map) { + for (def x : map.values()) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + map.values().removeIf(v -> v == null); + } + void handleList(List list) { + for (def x : list) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + } + handleMap(ctx); + # Removing fields not needed anymore, either because its copied somewhere else, or is not relevant to this event + - remove: + field: + - misp.attribute.value + ignore_missing: true + if: ctx.threat?.indicator?.type != 'unknown' + - remove: + field: + # This removes a number of fields that may be wanted in the future when + # misp.attribute and misp.object.attribute can + # be separated. At the root of .object are fields that mirror fields at + # the root of misp. + - misp.object + ignore_missing: true + - remove: + field: + - misp.Attribute.timestamp + - misp.timestamp + - misp.tag + - misp.org + - misp.analysis + - _tmp + - json + ignore_missing: true + +on_failure: + - set: + field: error.message + value: "{{ _ingest.on_failure_message }}" diff --git a/packages/ti_misp/1.2.2/data_stream/threat/fields/agent.yml b/packages/ti_misp/1.2.2/data_stream/threat/fields/agent.yml new file mode 100755 index 0000000000..da4e652c53 --- /dev/null +++ b/packages/ti_misp/1.2.2/data_stream/threat/fields/agent.yml @@ -0,0 +1,198 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + diff --git a/packages/ti_misp/1.2.2/data_stream/threat/fields/base-fields.yml b/packages/ti_misp/1.2.2/data_stream/threat/fields/base-fields.yml new file mode 100755 index 0000000000..ad1000cb9b --- /dev/null +++ b/packages/ti_misp/1.2.2/data_stream/threat/fields/base-fields.yml @@ -0,0 +1,28 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset name. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module + value: ti_misp +- name: event.dataset + type: constant_keyword + description: Event dataset + value: ti_misp.threat +- name: threat.feed.name + type: constant_keyword + description: Display friendly feed name + value: MISP +- name: threat.feed.dashboard_id + type: constant_keyword + description: Dashboard ID used for Kibana CTI UI + value: ti_misp-56ed8040-6c7d-11ec-9bce-f7a4dc94c294 +- name: "@timestamp" + type: date + description: Event timestamp. diff --git a/packages/ti_misp/1.2.2/data_stream/threat/fields/beats.yml b/packages/ti_misp/1.2.2/data_stream/threat/fields/beats.yml new file mode 100755 index 0000000000..cb44bb2944 --- /dev/null +++ b/packages/ti_misp/1.2.2/data_stream/threat/fields/beats.yml @@ -0,0 +1,12 @@ +- name: input.type + type: keyword + description: Type of Filebeat input. +- name: log.flags + type: keyword + description: Flags for the log file. +- name: log.offset + type: long + description: Offset of the entry in the log file. +- name: log.file.path + type: keyword + description: Path to the log file. diff --git a/packages/ti_misp/1.2.2/data_stream/threat/fields/ecs.yml b/packages/ti_misp/1.2.2/data_stream/threat/fields/ecs.yml new file mode 100755 index 0000000000..e6dcb70141 --- /dev/null +++ b/packages/ti_misp/1.2.2/data_stream/threat/fields/ecs.yml @@ -0,0 +1,188 @@ +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: |- + For log events the message field contains the log message, optimized for viewing in a log viewer. + For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. + If multiple messages exist, they can be combined into one message. + name: message + type: match_only_text +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: Error message. + name: error.message + type: match_only_text +- description: |- + This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. + `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. + This field is an array. This will allow proper categorization of some events that fall in multiple categories. + name: event.category + type: keyword +- description: |- + Timestamp when an event arrived in the central data store. + This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. + In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`. + name: event.ingested + type: date +- description: |- + event.created contains the date/time when the event was first read by an agent, or by your pipeline. + This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. + In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. + In case the two timestamps are identical, @timestamp should be used. + name: event.created + type: date +- description: |- + This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. + `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. + The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. + name: event.kind + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. + `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. + This field is an array. This will allow proper categorization of some events that fall in multiple event types. + name: event.type + type: keyword +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: User email address. + name: user.email + type: keyword +- description: Array of user roles at the time of the event. + name: user.roles + type: keyword +- name: threat.feed.name + type: keyword +- description: The date and time when intelligence source first reported sighting this indicator. + name: threat.indicator.first_seen + type: date +- description: The date and time when intelligence source last reported sighting this indicator. + name: threat.indicator.last_seen + type: date +- description: Count of AV/EDR vendors that successfully detected malicious file or URL. + name: threat.indicator.scanner_stats + type: long +- description: |- + Type of indicator as represented by Cyber Observable in STIX 2.0. + Recommended values: + * autonomous-system + * artifact + * directory + * domain-name + * email-addr + * file + * ipv4-addr + * ipv6-addr + * mac-addr + * mutex + * port + * process + * software + * url + * user-account + * windows-registry-key + * x509-certificate + name: threat.indicator.type + type: keyword +- description: Identifies a threat indicator as an IP address (irrespective of direction). + name: threat.indicator.ip + type: ip +- description: |- + Domain of the url, such as "www.elastic.co". + In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. + If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. + name: threat.indicator.url.domain + type: keyword +- description: If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.full + type: wildcard +- description: |- + The field contains the file extension from the original request url, excluding the leading dot. + The file extension is only set if it exists, as not every url has a file extension. + The leading period must not be included. For example, the value must be "png", not ".png". + Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). + name: threat.indicator.url.extension + type: keyword +- description: |- + Unmodified original url as seen in the event source. + Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. + This field is meant to represent the URL as it was observed, complete or not. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.original + type: wildcard +- description: Path of the request, such as "/search". + name: threat.indicator.url.path + type: wildcard +- description: Port of the request, such as 443. + name: threat.indicator.url.port + type: long +- description: |- + Scheme of the request, such as "https". + Note: The `:` is not part of the scheme. + name: threat.indicator.url.scheme + type: keyword +- description: |- + The query field describes the query string of the request, such as "q=elasticsearch". + The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. + name: threat.indicator.url.query + type: keyword +- description: Identifies a threat indicator as an email address (irrespective of direction). + name: threat.indicator.email.address + type: keyword +- description: The name of the indicator's provider. + name: threat.indicator.provider + type: keyword +- description: Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. + name: threat.indicator.as.number + type: long +- description: MD5 hash. + name: threat.indicator.file.hash.md5 + type: keyword +- description: SHA1 hash. + name: threat.indicator.file.hash.sha1 + type: keyword +- description: SHA256 hash. + name: threat.indicator.file.hash.sha256 + type: keyword +- description: |- + Traffic Light Protocol sharing markings. + Recommended values are: + * WHITE + * GREEN + * AMBER + * RED + name: threat.indicator.marking.tlp + type: keyword +- description: Identifies a threat indicator as a port number (irrespective of direction). + name: threat.indicator.port + type: long +- description: Hive-relative path of keys. + name: threat.indicator.registry.key + type: keyword +- description: Name of the value written. + name: threat.indicator.registry.value + type: keyword +- description: |- + File size in bytes. + Only relevant when `file.type` is "file". + name: threat.indicator.file.size + type: long +- description: File type (file, dir, or symlink). + name: threat.indicator.file.type + type: keyword +- description: Name of the file including the extension, without the directory. + name: threat.indicator.file.name + type: keyword diff --git a/packages/ti_misp/1.2.2/data_stream/threat/fields/fields.yml b/packages/ti_misp/1.2.2/data_stream/threat/fields/fields.yml new file mode 100755 index 0000000000..133826511b --- /dev/null +++ b/packages/ti_misp/1.2.2/data_stream/threat/fields/fields.yml @@ -0,0 +1,291 @@ +- name: misp + type: group + description: > + Fields for MISP indicators + + fields: + - name: id + type: keyword + description: > + Attribute ID. + + - name: orgc_id + type: keyword + description: > + Organization Community ID of the event. + + - name: org_id + type: keyword + description: > + Organization ID of the event. + + - name: threat_level_id + type: long + description: > + Threat level from 5 to 1, where 1 is the most critical. + + - name: info + type: keyword + description: > + Additional text or information related to the event. + + - name: published + type: boolean + description: > + When the event was published. + + - name: uuid + type: keyword + description: > + The UUID of the event object. + + - name: date + type: date + description: > + The date of when the event object was created. + + - name: attribute_count + type: long + description: > + How many attributes are included in a single event object. + + - name: timestamp + type: date + description: > + The timestamp of when the event object was created. + + - name: distribution + type: keyword + description: > + Distribution type related to MISP. + + - name: proposal_email_lock + type: boolean + description: > + Settings configured on MISP for email lock on this event object. + + - name: locked + type: boolean + description: > + If the current MISP event object is locked or not. + + - name: publish_timestamp + type: date + description: > + At what time the event object was published + + - name: sharing_group_id + type: keyword + description: > + The ID of the grouped events or sources of the event. + + - name: disable_correlation + type: boolean + description: > + If correlation is disabled on the MISP event object. + + - name: extends_uuid + type: keyword + description: > + The UUID of the event object it might extend. + + - name: org.id + type: keyword + description: > + The organization ID related to the event object. + + - name: org.name + type: keyword + description: > + The organization name related to the event object. + + - name: org.uuid + type: keyword + description: > + The UUID of the organization related to the event object. + + - name: org.local + type: boolean + description: > + If the event object is local or from a remote source. + + - name: orgc.id + type: keyword + description: > + The Organization Community ID in which the event object was reported from. + + - name: orgc.name + type: keyword + description: > + The Organization Community name in which the event object was reported from. + + - name: orgc.uuid + type: keyword + description: > + The Organization Community UUID in which the event object was reported from. + + - name: orgc.local + type: boolean + description: > + If the Organization Community was local or synced from a remote source. + + - name: attribute.id + type: keyword + description: > + The ID of the attribute related to the event object. + + - name: attribute.type + type: keyword + description: > + The type of the attribute related to the event object. For example email, ipv4, sha1 and such. + + - name: attribute.category + type: keyword + description: > + The category of the attribute related to the event object. For example "Network Activity". + + - name: attribute.to_ids + type: boolean + description: > + If the attribute should be automatically synced with an IDS. + + - name: attribute.uuid + type: keyword + description: > + The UUID of the attribute related to the event. + + - name: attribute.event_id + type: keyword + description: > + The local event ID of the attribute related to the event. + + - name: attribute.distribution + type: long + description: > + How the attribute has been distributed, represented by integer numbers. + + - name: attribute.timestamp + type: date + description: > + The timestamp in which the attribute was attached to the event object. + + - name: attribute.comment + type: keyword + description: > + Comments made to the attribute itself. + + - name: attribute.sharing_group_id + type: keyword + description: > + The group ID of the sharing group related to the specific attribute. + + - name: attribute.deleted + type: boolean + description: > + If the attribute has been removed from the event object. + + - name: attribute.disable_correlation + type: boolean + description: > + If correlation has been enabled on the attribute related to the event object. + + - name: attribute.object_id + type: keyword + description: > + The ID of the Object in which the attribute is attached. + + - name: attribute.object_relation + type: keyword + description: > + The type of relation the attribute has with the event object itself. + + - name: attribute.value + type: keyword + description: > + The value of the attribute, depending on the type like "url, sha1, email-src". + + - name: context.attribute.id + type: keyword + description: > + The ID of the secondary attribute related to the event object. + + - name: context.attribute.type + type: keyword + description: > + The type of the secondary attribute related to the event object. For example email, ipv4, sha1 and such. + + - name: context.attribute.category + type: keyword + description: > + The category of the secondary attribute related to the event object. For example "Network Activity". + + - name: context.attribute.to_ids + type: boolean + description: > + If the secondary attribute should be automatically synced with an IDS. + + - name: context.attribute.uuid + type: keyword + description: > + The UUID of the secondary attribute related to the event. + + - name: context.attribute.event_id + type: keyword + description: > + The local event ID of the secondary attribute related to the event. + + - name: context.attribute.distribution + type: long + description: > + How the secondary attribute has been distributed, represented by integer numbers. + + - name: context.attribute.timestamp + type: date + description: > + The timestamp in which the secondary attribute was attached to the event object. + + - name: context.attribute.comment + type: keyword + description: > + Comments made to the secondary attribute itself. + + - name: context.attribute.sharing_group_id + type: keyword + description: > + The group ID of the sharing group related to the specific secondary attribute. + + - name: context.attribute.deleted + type: boolean + description: > + If the secondary attribute has been removed from the event object. + + - name: context.attribute.disable_correlation + type: boolean + description: > + If correlation has been enabled on the secondary attribute related to the event object. + + - name: context.attribute.object_id + type: keyword + description: > + The ID of the Object in which the secondary attribute is attached. + + - name: context.attribute.object_relation + type: keyword + description: > + The type of relation the secondary attribute has with the event object itself. + + - name: context.attribute.value + type: keyword + description: > + The value of the attribute, depending on the type like "url, sha1, email-src". + + - name: context.attribute.first_seen + type: keyword + description: > + The first time the indicator was seen. + + - name: context.attribute.last_seen + type: keyword + description: > + The last time the indicator was seen. + diff --git a/packages/ti_misp/1.2.2/data_stream/threat/manifest.yml b/packages/ti_misp/1.2.2/data_stream/threat/manifest.yml new file mode 100755 index 0000000000..353de39766 --- /dev/null +++ b/packages/ti_misp/1.2.2/data_stream/threat/manifest.yml @@ -0,0 +1,101 @@ +type: logs +title: MISP +streams: + - input: httpjson + vars: + - name: url + type: text + title: MISP URL + multi: false + required: true + show_user: true + default: https://mispserver.com + description: The URL or hostname of the MISP instance. + - name: api_token + type: password + title: MISP API Token + multi: false + required: true + show_user: true + description: The API token used to access the MISP instance. + - name: initial_interval + type: text + title: Interval + multi: false + required: true + show_user: true + default: 120h + description: How far back to look for indicators the first time the agent is started. + - name: http_client_timeout + type: text + title: HTTP Client Timeout + multi: false + required: false + show_user: false + default: 30s + - name: filters + type: yaml + title: MISP API Filters + multi: false + required: false + show_user: false + default: | + #type: + # OR: + # - ip-src + # - ip-dst + #tags: + # NOT: + # - tlp-red + description: Filters documented at [MISP API Documentation](https://www.circl.lu/doc/misp/automation/#search) is supported. + - name: proxy_url + type: text + title: Proxy URL + multi: false + required: false + show_user: false + description: URL to proxy connections in the form of http[s]://:@: + - name: interval + type: text + title: Interval + multi: false + required: true + show_user: true + default: 10m + - name: ssl + type: yaml + title: SSL + multi: false + required: false + show_user: false + default: | + #verification_mode: none + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - misp-threat + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + template_path: httpjson.yml.hbs + title: MISP + description: Collect indicators from the MISP API diff --git a/packages/ti_misp/1.2.2/data_stream/threat/sample_event.json b/packages/ti_misp/1.2.2/data_stream/threat/sample_event.json new file mode 100755 index 0000000000..c84d8a407c --- /dev/null +++ b/packages/ti_misp/1.2.2/data_stream/threat/sample_event.json @@ -0,0 +1,97 @@ +{ + "@timestamp": "2014-10-06T07:12:57.000Z", + "agent": { + "ephemeral_id": "dcc4828e-8e2d-49de-ac30-3a38de7e73da", + "id": "f33cbb31-3e5c-4242-8b35-d4631555523c", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "data_stream": { + "dataset": "ti_misp.threat", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "f33cbb31-3e5c-4242-8b35-d4631555523c", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "created": "2022-04-11T08:58:54.124Z", + "dataset": "ti_misp.threat", + "ingested": "2022-04-11T08:58:55Z", + "kind": "enrichment", + "original": "{\"Event\":{\"Attribute\":{\"Galaxy\":[],\"ShadowAttribute\":[],\"category\":\"Network activity\",\"comment\":\"\",\"deleted\":false,\"disable_correlation\":false,\"distribution\":\"5\",\"event_id\":\"22\",\"first_seen\":null,\"id\":\"12394\",\"last_seen\":null,\"object_id\":\"0\",\"object_relation\":null,\"sharing_group_id\":\"0\",\"timestamp\":\"1462454963\",\"to_ids\":false,\"type\":\"domain\",\"uuid\":\"572b4ab3-1af0-4d91-9cd5-07a1c0a8ab16\",\"value\":\"whatsapp.com\"},\"EventReport\":[],\"Galaxy\":[],\"Object\":[],\"Org\":{\"id\":\"1\",\"local\":true,\"name\":\"ORGNAME\",\"uuid\":\"5877549f-ea76-4b91-91fb-c72ad682b4a5\"},\"Orgc\":{\"id\":\"2\",\"local\":false,\"name\":\"CthulhuSPRL.be\",\"uuid\":\"55f6ea5f-fd34-43b8-ac1d-40cb950d210f\"},\"RelatedEvent\":[],\"ShadowAttribute\":[],\"Tag\":[{\"colour\":\"#004646\",\"exportable\":true,\"hide_tag\":false,\"id\":\"1\",\"is_custom_galaxy\":false,\"is_galaxy\":false,\"local\":0,\"name\":\"type:OSINT\",\"numerical_value\":null,\"user_id\":\"0\"},{\"colour\":\"#339900\",\"exportable\":true,\"hide_tag\":false,\"id\":\"2\",\"is_custom_galaxy\":false,\"is_galaxy\":false,\"local\":0,\"name\":\"tlp:green\",\"numerical_value\":null,\"user_id\":\"0\"}],\"analysis\":\"2\",\"attribute_count\":\"29\",\"date\":\"2014-10-03\",\"disable_correlation\":false,\"distribution\":\"3\",\"extends_uuid\":\"\",\"id\":\"2\",\"info\":\"OSINT New Indicators of Compromise for APT Group Nitro Uncovered blog post by Palo Alto Networks\",\"locked\":false,\"org_id\":\"1\",\"orgc_id\":\"2\",\"proposal_email_lock\":false,\"publish_timestamp\":\"1610622316\",\"published\":true,\"sharing_group_id\":\"0\",\"threat_level_id\":\"2\",\"timestamp\":\"1412579577\",\"uuid\":\"54323f2c-e50c-4268-896c-4867950d210b\"}}", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "misp": { + "attribute": { + "category": "Network activity", + "comment": "", + "deleted": false, + "disable_correlation": false, + "distribution": 5, + "event_id": "22", + "id": "12394", + "object_id": "0", + "sharing_group_id": "0", + "timestamp": "1462454963", + "to_ids": false, + "type": "domain", + "uuid": "572b4ab3-1af0-4d91-9cd5-07a1c0a8ab16" + }, + "attribute_count": 29, + "date": "2014-10-03", + "disable_correlation": false, + "distribution": "3", + "extends_uuid": "", + "id": "2", + "info": "OSINT New Indicators of Compromise for APT Group Nitro Uncovered blog post by Palo Alto Networks", + "locked": false, + "org_id": "1", + "orgc": { + "id": "2", + "local": false, + "name": "CthulhuSPRL.be", + "uuid": "55f6ea5f-fd34-43b8-ac1d-40cb950d210f" + }, + "orgc_id": "2", + "proposal_email_lock": false, + "publish_timestamp": "1610622316", + "published": true, + "sharing_group_id": "0", + "threat_level_id": 2, + "uuid": "54323f2c-e50c-4268-896c-4867950d210b" + }, + "tags": [ + "type:OSINT", + "tlp:green" + ], + "threat": { + "feed": { + "name": "MISP" + }, + "indicator": { + "marking": { + "tlp": [ + "green" + ] + }, + "provider": "misp", + "scanner_stats": 2, + "type": "domain-name", + "url": { + "domain": "whatsapp.com" + } + } + } +} \ No newline at end of file diff --git a/packages/ti_misp/1.2.2/docs/README.md b/packages/ti_misp/1.2.2/docs/README.md new file mode 100755 index 0000000000..8988289f76 --- /dev/null +++ b/packages/ti_misp/1.2.2/docs/README.md @@ -0,0 +1,259 @@ +# MISP Integration + +The MISP integration uses the REST API from the running MISP instance to retrieve indicators and Threat Intelligence. + +## Logs + +### Threat + +The MISP integration configuration allows to set the polling interval, how far back it +should look initially, and optionally any filters used to filter the results. + +The filters themselves are based on the [MISP API documentation](https://www.circl.lu/doc/misp/automation/#search) and should support all documented fields. + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset name. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| error.message | Error message. | match_only_text | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset | constant_keyword | +| event.ingested | Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` \< `event.created` \< `event.ingested`. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Type of Filebeat input. | keyword | +| log.file.path | Path to the log file. | keyword | +| log.flags | Flags for the log file. | keyword | +| log.offset | Offset of the entry in the log file. | long | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| misp.attribute.category | The category of the attribute related to the event object. For example "Network Activity". | keyword | +| misp.attribute.comment | Comments made to the attribute itself. | keyword | +| misp.attribute.deleted | If the attribute has been removed from the event object. | boolean | +| misp.attribute.disable_correlation | If correlation has been enabled on the attribute related to the event object. | boolean | +| misp.attribute.distribution | How the attribute has been distributed, represented by integer numbers. | long | +| misp.attribute.event_id | The local event ID of the attribute related to the event. | keyword | +| misp.attribute.id | The ID of the attribute related to the event object. | keyword | +| misp.attribute.object_id | The ID of the Object in which the attribute is attached. | keyword | +| misp.attribute.object_relation | The type of relation the attribute has with the event object itself. | keyword | +| misp.attribute.sharing_group_id | The group ID of the sharing group related to the specific attribute. | keyword | +| misp.attribute.timestamp | The timestamp in which the attribute was attached to the event object. | date | +| misp.attribute.to_ids | If the attribute should be automatically synced with an IDS. | boolean | +| misp.attribute.type | The type of the attribute related to the event object. For example email, ipv4, sha1 and such. | keyword | +| misp.attribute.uuid | The UUID of the attribute related to the event. | keyword | +| misp.attribute.value | The value of the attribute, depending on the type like "url, sha1, email-src". | keyword | +| misp.attribute_count | How many attributes are included in a single event object. | long | +| misp.context.attribute.category | The category of the secondary attribute related to the event object. For example "Network Activity". | keyword | +| misp.context.attribute.comment | Comments made to the secondary attribute itself. | keyword | +| misp.context.attribute.deleted | If the secondary attribute has been removed from the event object. | boolean | +| misp.context.attribute.disable_correlation | If correlation has been enabled on the secondary attribute related to the event object. | boolean | +| misp.context.attribute.distribution | How the secondary attribute has been distributed, represented by integer numbers. | long | +| misp.context.attribute.event_id | The local event ID of the secondary attribute related to the event. | keyword | +| misp.context.attribute.first_seen | The first time the indicator was seen. | keyword | +| misp.context.attribute.id | The ID of the secondary attribute related to the event object. | keyword | +| misp.context.attribute.last_seen | The last time the indicator was seen. | keyword | +| misp.context.attribute.object_id | The ID of the Object in which the secondary attribute is attached. | keyword | +| misp.context.attribute.object_relation | The type of relation the secondary attribute has with the event object itself. | keyword | +| misp.context.attribute.sharing_group_id | The group ID of the sharing group related to the specific secondary attribute. | keyword | +| misp.context.attribute.timestamp | The timestamp in which the secondary attribute was attached to the event object. | date | +| misp.context.attribute.to_ids | If the secondary attribute should be automatically synced with an IDS. | boolean | +| misp.context.attribute.type | The type of the secondary attribute related to the event object. For example email, ipv4, sha1 and such. | keyword | +| misp.context.attribute.uuid | The UUID of the secondary attribute related to the event. | keyword | +| misp.context.attribute.value | The value of the attribute, depending on the type like "url, sha1, email-src". | keyword | +| misp.date | The date of when the event object was created. | date | +| misp.disable_correlation | If correlation is disabled on the MISP event object. | boolean | +| misp.distribution | Distribution type related to MISP. | keyword | +| misp.extends_uuid | The UUID of the event object it might extend. | keyword | +| misp.id | Attribute ID. | keyword | +| misp.info | Additional text or information related to the event. | keyword | +| misp.locked | If the current MISP event object is locked or not. | boolean | +| misp.org.id | The organization ID related to the event object. | keyword | +| misp.org.local | If the event object is local or from a remote source. | boolean | +| misp.org.name | The organization name related to the event object. | keyword | +| misp.org.uuid | The UUID of the organization related to the event object. | keyword | +| misp.org_id | Organization ID of the event. | keyword | +| misp.orgc.id | The Organization Community ID in which the event object was reported from. | keyword | +| misp.orgc.local | If the Organization Community was local or synced from a remote source. | boolean | +| misp.orgc.name | The Organization Community name in which the event object was reported from. | keyword | +| misp.orgc.uuid | The Organization Community UUID in which the event object was reported from. | keyword | +| misp.orgc_id | Organization Community ID of the event. | keyword | +| misp.proposal_email_lock | Settings configured on MISP for email lock on this event object. | boolean | +| misp.publish_timestamp | At what time the event object was published | date | +| misp.published | When the event was published. | boolean | +| misp.sharing_group_id | The ID of the grouped events or sources of the event. | keyword | +| misp.threat_level_id | Threat level from 5 to 1, where 1 is the most critical. | long | +| misp.timestamp | The timestamp of when the event object was created. | date | +| misp.uuid | The UUID of the event object. | keyword | +| tags | List of keywords used to tag each event. | keyword | +| threat.feed.dashboard_id | Dashboard ID used for Kibana CTI UI | constant_keyword | +| threat.feed.name | | keyword | +| threat.indicator.as.number | Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. | long | +| threat.indicator.email.address | Identifies a threat indicator as an email address (irrespective of direction). | keyword | +| threat.indicator.file.hash.md5 | MD5 hash. | keyword | +| threat.indicator.file.hash.sha1 | SHA1 hash. | keyword | +| threat.indicator.file.hash.sha256 | SHA256 hash. | keyword | +| threat.indicator.file.name | Name of the file including the extension, without the directory. | keyword | +| threat.indicator.file.size | File size in bytes. Only relevant when `file.type` is "file". | long | +| threat.indicator.file.type | File type (file, dir, or symlink). | keyword | +| threat.indicator.first_seen | The date and time when intelligence source first reported sighting this indicator. | date | +| threat.indicator.ip | Identifies a threat indicator as an IP address (irrespective of direction). | ip | +| threat.indicator.last_seen | The date and time when intelligence source last reported sighting this indicator. | date | +| threat.indicator.marking.tlp | Traffic Light Protocol sharing markings. Recommended values are: \* WHITE \* GREEN \* AMBER \* RED | keyword | +| threat.indicator.port | Identifies a threat indicator as a port number (irrespective of direction). | long | +| threat.indicator.provider | The name of the indicator's provider. | keyword | +| threat.indicator.registry.key | Hive-relative path of keys. | keyword | +| threat.indicator.registry.value | Name of the value written. | keyword | +| threat.indicator.scanner_stats | Count of AV/EDR vendors that successfully detected malicious file or URL. | long | +| threat.indicator.type | Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: \* autonomous-system \* artifact \* directory \* domain-name \* email-addr \* file \* ipv4-addr \* ipv6-addr \* mac-addr \* mutex \* port \* process \* software \* url \* user-account \* windows-registry-key \* x509-certificate | keyword | +| threat.indicator.url.domain | Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. | keyword | +| threat.indicator.url.extension | The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). | keyword | +| threat.indicator.url.full | If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. | wildcard | +| threat.indicator.url.full.text | Multi-field of `threat.indicator.url.full`. | match_only_text | +| threat.indicator.url.original | Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not. | wildcard | +| threat.indicator.url.original.text | Multi-field of `threat.indicator.url.original`. | match_only_text | +| threat.indicator.url.path | Path of the request, such as "/search". | wildcard | +| threat.indicator.url.port | Port of the request, such as 443. | long | +| threat.indicator.url.query | The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. | keyword | +| threat.indicator.url.scheme | Scheme of the request, such as "https". Note: The `:` is not part of the scheme. | keyword | +| user.email | User email address. | keyword | +| user.roles | Array of user roles at the time of the event. | keyword | + + +An example event for `threat` looks as following: + +```json +{ + "@timestamp": "2014-10-06T07:12:57.000Z", + "agent": { + "ephemeral_id": "dcc4828e-8e2d-49de-ac30-3a38de7e73da", + "id": "f33cbb31-3e5c-4242-8b35-d4631555523c", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "data_stream": { + "dataset": "ti_misp.threat", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "f33cbb31-3e5c-4242-8b35-d4631555523c", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "created": "2022-04-11T08:58:54.124Z", + "dataset": "ti_misp.threat", + "ingested": "2022-04-11T08:58:55Z", + "kind": "enrichment", + "original": "{\"Event\":{\"Attribute\":{\"Galaxy\":[],\"ShadowAttribute\":[],\"category\":\"Network activity\",\"comment\":\"\",\"deleted\":false,\"disable_correlation\":false,\"distribution\":\"5\",\"event_id\":\"22\",\"first_seen\":null,\"id\":\"12394\",\"last_seen\":null,\"object_id\":\"0\",\"object_relation\":null,\"sharing_group_id\":\"0\",\"timestamp\":\"1462454963\",\"to_ids\":false,\"type\":\"domain\",\"uuid\":\"572b4ab3-1af0-4d91-9cd5-07a1c0a8ab16\",\"value\":\"whatsapp.com\"},\"EventReport\":[],\"Galaxy\":[],\"Object\":[],\"Org\":{\"id\":\"1\",\"local\":true,\"name\":\"ORGNAME\",\"uuid\":\"5877549f-ea76-4b91-91fb-c72ad682b4a5\"},\"Orgc\":{\"id\":\"2\",\"local\":false,\"name\":\"CthulhuSPRL.be\",\"uuid\":\"55f6ea5f-fd34-43b8-ac1d-40cb950d210f\"},\"RelatedEvent\":[],\"ShadowAttribute\":[],\"Tag\":[{\"colour\":\"#004646\",\"exportable\":true,\"hide_tag\":false,\"id\":\"1\",\"is_custom_galaxy\":false,\"is_galaxy\":false,\"local\":0,\"name\":\"type:OSINT\",\"numerical_value\":null,\"user_id\":\"0\"},{\"colour\":\"#339900\",\"exportable\":true,\"hide_tag\":false,\"id\":\"2\",\"is_custom_galaxy\":false,\"is_galaxy\":false,\"local\":0,\"name\":\"tlp:green\",\"numerical_value\":null,\"user_id\":\"0\"}],\"analysis\":\"2\",\"attribute_count\":\"29\",\"date\":\"2014-10-03\",\"disable_correlation\":false,\"distribution\":\"3\",\"extends_uuid\":\"\",\"id\":\"2\",\"info\":\"OSINT New Indicators of Compromise for APT Group Nitro Uncovered blog post by Palo Alto Networks\",\"locked\":false,\"org_id\":\"1\",\"orgc_id\":\"2\",\"proposal_email_lock\":false,\"publish_timestamp\":\"1610622316\",\"published\":true,\"sharing_group_id\":\"0\",\"threat_level_id\":\"2\",\"timestamp\":\"1412579577\",\"uuid\":\"54323f2c-e50c-4268-896c-4867950d210b\"}}", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "misp": { + "attribute": { + "category": "Network activity", + "comment": "", + "deleted": false, + "disable_correlation": false, + "distribution": 5, + "event_id": "22", + "id": "12394", + "object_id": "0", + "sharing_group_id": "0", + "timestamp": "1462454963", + "to_ids": false, + "type": "domain", + "uuid": "572b4ab3-1af0-4d91-9cd5-07a1c0a8ab16" + }, + "attribute_count": 29, + "date": "2014-10-03", + "disable_correlation": false, + "distribution": "3", + "extends_uuid": "", + "id": "2", + "info": "OSINT New Indicators of Compromise for APT Group Nitro Uncovered blog post by Palo Alto Networks", + "locked": false, + "org_id": "1", + "orgc": { + "id": "2", + "local": false, + "name": "CthulhuSPRL.be", + "uuid": "55f6ea5f-fd34-43b8-ac1d-40cb950d210f" + }, + "orgc_id": "2", + "proposal_email_lock": false, + "publish_timestamp": "1610622316", + "published": true, + "sharing_group_id": "0", + "threat_level_id": 2, + "uuid": "54323f2c-e50c-4268-896c-4867950d210b" + }, + "tags": [ + "type:OSINT", + "tlp:green" + ], + "threat": { + "feed": { + "name": "MISP" + }, + "indicator": { + "marking": { + "tlp": [ + "green" + ] + }, + "provider": "misp", + "scanner_stats": 2, + "type": "domain-name", + "url": { + "domain": "whatsapp.com" + } + } + } +} +``` \ No newline at end of file diff --git a/packages/ti_misp/1.2.2/img/misp.svg b/packages/ti_misp/1.2.2/img/misp.svg new file mode 100755 index 0000000000..076530aa25 --- /dev/null +++ b/packages/ti_misp/1.2.2/img/misp.svg @@ -0,0 +1,158 @@ + + + + diff --git a/packages/ti_misp/1.2.2/kibana/dashboard/ti_misp-32d9c020-71ea-11ec-8197-5d53a5437877.json b/packages/ti_misp/1.2.2/kibana/dashboard/ti_misp-32d9c020-71ea-11ec-8197-5d53a5437877.json new file mode 100755 index 0000000000..bd8d5dbf01 --- /dev/null +++ b/packages/ti_misp/1.2.2/kibana/dashboard/ti_misp-32d9c020-71ea-11ec-8197-5d53a5437877.json @@ -0,0 +1,132 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about file type indicators from the MISP integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"threat.indicator.type\",\"negate\":false,\"params\":{\"query\":\"file\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"threat.indicator.type\":\"file\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"ti_misp.threat\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"ti_misp.threat\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n[MISP Overview](/app/dashboards#/view/ti_misp-56ed8040-6c7d-11ec-9bce-f7a4dc94c294) \\n**[MISP Files (This Page)](/app/dashboards#/view/ti_misp-32d9c020-71ea-11ec-8197-5d53a5437877)** \\n[MISP URLs](/app/dashboards#/view/ti_misp-399bb8d0-71ec-11ec-8197-5d53a5437877) \\n\\n[Integrations Page](/app/integrations/detail/ti_misp/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is an overview of the different threat intelligence indicators with a **threat.indicator.type: file**.\\n\\nThe dashboard is made to provide general statistics and show the health of your indicators like hash type counters, popular domains, statistics about how many unique indicators are ingested and other relevant information.\",\"openLinksInNewTab\":false},\"title\":\"Files Navigation Textbox [Logs AbuseCH]\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":27,\"i\":\"09ba3dc0-e2e2-4799-b47f-bb919bf290a1\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"09ba3dc0-e2e2-4799-b47f-bb919bf290a1\",\"title\":\"Files Navigation Textbox [Logs MISP]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-98786f76-dac4-4fc7-9cad-8bfce17bd00d\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-2e2257a0-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"98786f76-dac4-4fc7-9cad-8bfce17bd00d\":{\"columnOrder\":[\"8622e147-406f-4711-8f68-e2425614106e\"],\"columns\":{\"8622e147-406f-4711-8f68-e2425614106e\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique File types\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.type\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"8622e147-406f-4711-8f68-e2425614106e\",\"layerId\":\"98786f76-dac4-4fc7-9cad-8bfce17bd00d\",\"layerType\":\"data\"}},\"title\":\"Unique File Types [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"31ea16d1-7591-42a7-b773-6fca00e5db14\",\"w\":5,\"x\":7,\"y\":0},\"panelIndex\":\"31ea16d1-7591-42a7-b773-6fca00e5db14\",\"title\":\"Unique File Types [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-b83c382d-fab9-4e60-a632-475e221cc20c\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-d888e3e0-3b38-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"b83c382d-fab9-4e60-a632-475e221cc20c\":{\"columnOrder\":[\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\"],\"columns\":{\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique MD5\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.md5\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\",\"layerId\":\"b83c382d-fab9-4e60-a632-475e221cc20c\",\"layerType\":\"data\"}},\"title\":\"Unique MD5 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98\",\"w\":6,\"x\":12,\"y\":0},\"panelIndex\":\"4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98\",\"title\":\"Unique MD5 [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-85ad73b3-3b76-49f1-ad20-6256b58918f8\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-28549810-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"85ad73b3-3b76-49f1-ad20-6256b58918f8\":{\"columnOrder\":[\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\"],\"columns\":{\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SHA1\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.sha1\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\",\"layerId\":\"85ad73b3-3b76-49f1-ad20-6256b58918f8\",\"layerType\":\"data\"}},\"title\":\"Unique SHA1 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea\",\"w\":6,\"x\":18,\"y\":0},\"panelIndex\":\"e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea\",\"title\":\"Unique SHA1 [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-49b7070a-f1d3-46e1-a980-2f6d6d130167\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-5d6111a0-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"49b7070a-f1d3-46e1-a980-2f6d6d130167\":{\"columnOrder\":[\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\"],\"columns\":{\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SHA256\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.sha256\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\",\"layerId\":\"49b7070a-f1d3-46e1-a980-2f6d6d130167\",\"layerType\":\"data\"}},\"title\":\"Unique SHA256 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"93e32abe-87e3-469e-b7e9-a7ef7dfa2cce\",\"w\":6,\"x\":24,\"y\":0},\"panelIndex\":\"93e32abe-87e3-469e-b7e9-a7ef7dfa2cce\",\"title\":\"Unique SHA256 [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-12768311-834b-48d5-8aad-d17d139c2ae5\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-52e62840-3b3a-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"12768311-834b-48d5-8aad-d17d139c2ae5\":{\"columnOrder\":[\"0255894e-dd88-4eb1-b21b-0cccecb2cd1b\"],\"columns\":{\"0255894e-dd88-4eb1-b21b-0cccecb2cd1b\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique TLSH\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.tlsh\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"0255894e-dd88-4eb1-b21b-0cccecb2cd1b\",\"layerId\":\"12768311-834b-48d5-8aad-d17d139c2ae5\",\"layerType\":\"data\"}},\"title\":\"Unique TLSH [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"b77edd3f-b171-4e61-b519-169b5aade031\",\"w\":6,\"x\":30,\"y\":0},\"panelIndex\":\"b77edd3f-b171-4e61-b519-169b5aade031\",\"title\":\"Unique TLSH [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-9070dc46-c06d-4b64-a2c5-7b6d4056a14d\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-4f8c9d00-3b3a-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"9070dc46-c06d-4b64-a2c5-7b6d4056a14d\":{\"columnOrder\":[\"f1bdf831-1fd2-4dc8-b1f9-c6e05d93b801\"],\"columns\":{\"f1bdf831-1fd2-4dc8-b1f9-c6e05d93b801\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Imphash\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.pe.imphash\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"f1bdf831-1fd2-4dc8-b1f9-c6e05d93b801\",\"layerId\":\"9070dc46-c06d-4b64-a2c5-7b6d4056a14d\",\"layerType\":\"data\"}},\"title\":\"Unique Imphash [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"f9eb44f8-6174-4b12-a8ca-5c542687006b\",\"w\":6,\"x\":36,\"y\":0},\"panelIndex\":\"f9eb44f8-6174-4b12-a8ca-5c542687006b\",\"title\":\"Unique Imphash [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-e27d5a76-ae51-44fa-b17e-e486bbc01b56\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-88ef6dd0-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"e27d5a76-ae51-44fa-b17e-e486bbc01b56\":{\"columnOrder\":[\"b5cdfd94-1e22-4673-8216-59aca2131761\"],\"columns\":{\"b5cdfd94-1e22-4673-8216-59aca2131761\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SSDEEP\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.ssdeep\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"b5cdfd94-1e22-4673-8216-59aca2131761\",\"layerId\":\"e27d5a76-ae51-44fa-b17e-e486bbc01b56\",\"layerType\":\"data\"}},\"title\":\"Unique SSDEEP [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"c9d59178-9b19-4255-8098-653cb30f3d09\",\"w\":6,\"x\":42,\"y\":0},\"panelIndex\":\"c9d59178-9b19-4255-8098-653cb30f3d09\",\"title\":\"Unique SSDEEP [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-06d9ac79-2055-437e-892c-de9ee07fe674\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"2d0c0ec0-3bbf-11ec-ae8c-7d00429ad420\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"06d9ac79-2055-437e-892c-de9ee07fe674\":{\"columnOrder\":[\"35f5321a-27f4-4076-9d1d-d326187f4689\",\"df062557-78a5-4a78-93f1-34583c809bc3\"],\"columns\":{\"35f5321a-27f4-4076-9d1d-d326187f4689\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"File Names\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"df062557-78a5-4a78-93f1-34583c809bc3\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.file.name\"},\"df062557-78a5-4a78-93f1-34583c809bc3\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"columnId\":\"35f5321a-27f4-4076-9d1d-d326187f4689\",\"isTransposed\":false},{\"columnId\":\"df062557-78a5-4a78-93f1-34583c809bc3\",\"isTransposed\":false}],\"layerId\":\"06d9ac79-2055-437e-892c-de9ee07fe674\",\"layerType\":\"data\"}},\"title\":\"Most popular file names [Logs AbuseCH]\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":19,\"i\":\"b733385b-14f8-4469-b777-86d0139cc56b\",\"w\":20,\"x\":7,\"y\":8},\"panelIndex\":\"b733385b-14f8-4469-b777-86d0139cc56b\",\"title\":\"Most popular file names [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-4ee4a490-3b37-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8\":{\"columnOrder\":[\"06b603cb-c9fb-493a-9ca4-e6502ca12054\",\"de0e531b-dda7-461f-9783-3ab9267d202e\"],\"columns\":{\"06b603cb-c9fb-493a-9ca4-e6502ca12054\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.file.type\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"de0e531b-dda7-461f-9783-3ab9267d202e\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.file.type\"},\"de0e531b-dda7-461f-9783-3ab9267d202e\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"06b603cb-c9fb-493a-9ca4-e6502ca12054\"],\"layerId\":\"222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"de0e531b-dda7-461f-9783-3ab9267d202e\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"treemap\"}},\"title\":\"File Types [Logs AbuseCH]\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":19,\"i\":\"5f1d0cf1-c331-4495-99d5-5e80d023c482\",\"w\":21,\"x\":27,\"y\":8},\"panelIndex\":\"5f1d0cf1-c331-4495-99d5-5e80d023c482\",\"title\":\"File Types [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs MISP] Files", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_misp-32d9c020-71ea-11ec-8197-5d53a5437877", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "31ea16d1-7591-42a7-b773-6fca00e5db14:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "31ea16d1-7591-42a7-b773-6fca00e5db14:indexpattern-datasource-layer-98786f76-dac4-4fc7-9cad-8bfce17bd00d", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98:indexpattern-datasource-layer-b83c382d-fab9-4e60-a632-475e221cc20c", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea:indexpattern-datasource-layer-85ad73b3-3b76-49f1-ad20-6256b58918f8", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "93e32abe-87e3-469e-b7e9-a7ef7dfa2cce:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "93e32abe-87e3-469e-b7e9-a7ef7dfa2cce:indexpattern-datasource-layer-49b7070a-f1d3-46e1-a980-2f6d6d130167", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b77edd3f-b171-4e61-b519-169b5aade031:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b77edd3f-b171-4e61-b519-169b5aade031:indexpattern-datasource-layer-12768311-834b-48d5-8aad-d17d139c2ae5", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f9eb44f8-6174-4b12-a8ca-5c542687006b:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f9eb44f8-6174-4b12-a8ca-5c542687006b:indexpattern-datasource-layer-9070dc46-c06d-4b64-a2c5-7b6d4056a14d", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c9d59178-9b19-4255-8098-653cb30f3d09:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c9d59178-9b19-4255-8098-653cb30f3d09:indexpattern-datasource-layer-e27d5a76-ae51-44fa-b17e-e486bbc01b56", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b733385b-14f8-4469-b777-86d0139cc56b:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b733385b-14f8-4469-b777-86d0139cc56b:indexpattern-datasource-layer-06d9ac79-2055-437e-892c-de9ee07fe674", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "5f1d0cf1-c331-4495-99d5-5e80d023c482:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "5f1d0cf1-c331-4495-99d5-5e80d023c482:indexpattern-datasource-layer-222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8", + "type": "index-pattern" + }, + { + "id": "ti_misp-550ba0e0-6c7d-11ec-9bce-f7a4dc94c294", + "name": "tag-ti_misp-550ba0e0-6c7d-11ec-9bce-f7a4dc94c294", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_misp/1.2.2/kibana/dashboard/ti_misp-399bb8d0-71ec-11ec-8197-5d53a5437877.json b/packages/ti_misp/1.2.2/kibana/dashboard/ti_misp-399bb8d0-71ec-11ec-8197-5d53a5437877.json new file mode 100755 index 0000000000..a9987e5bf9 --- /dev/null +++ b/packages/ti_misp/1.2.2/kibana/dashboard/ti_misp-399bb8d0-71ec-11ec-8197-5d53a5437877.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about URL type indicators from the MISP integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"threat.indicator.type\",\"negate\":false,\"params\":{\"query\":\"url\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"threat.indicator.type\":\"url\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"ti_misp.threat\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"ti_misp.threat\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n[MISP Overview](/app/dashboards#/view/ti_misp-56ed8040-6c7d-11ec-9bce-f7a4dc94c294) \\n[MISP Files](/app/dashboards#/view/ti_misp-32d9c020-71ea-11ec-8197-5d53a5437877) \\n**[MISP URLs (This Page)](/app/dashboards#/view/ti_misp-399bb8d0-71ec-11ec-8197-5d53a5437877)** \\n\\n[Integrations Page](/app/integrations/detail/ti_misp/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is an overview of the different threat intelligence indicators with a **threat.indicator.type: url**. \\n\\nThe dashboard is made to provide general statistics and show the health of your indicators like popular domains, file extensions, statistics about how many unique indicators are ingested and other relevant information.\",\"openLinksInNewTab\":false},\"title\":\"\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":39,\"i\":\"4c3ed6e1-8b4e-4eab-8d84-70ed4f506216\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"4c3ed6e1-8b4e-4eab-8d84-70ed4f506216\",\"title\":\"Files Navigation Textbox [Logs MISP]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-88a112e1-6da1-49d3-9177-19f98280c200\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"88a112e1-6da1-49d3-9177-19f98280c200\":{\"columnOrder\":[\"604f1693-15a6-437d-af69-03588db8e471\"],\"columns\":{\"604f1693-15a6-437d-af69-03588db8e471\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Ports\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.port\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"604f1693-15a6-437d-af69-03588db8e471\",\"layerId\":\"88a112e1-6da1-49d3-9177-19f98280c200\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"c7c6e8dc-b649-434c-9650-8a1564d4d676\",\"w\":6,\"x\":7,\"y\":0},\"panelIndex\":\"c7c6e8dc-b649-434c-9650-8a1564d4d676\",\"title\":\"Unique Ports [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-a6fa56f8-32fa-405d-8771-dade4fe75d62\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"a6fa56f8-32fa-405d-8771-dade4fe75d62\":{\"columnOrder\":[\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\"],\"columns\":{\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Extensions\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.extension\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\",\"layerId\":\"a6fa56f8-32fa-405d-8771-dade4fe75d62\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"73a752f9-bde5-4396-8ede-e9e77a37182d\",\"w\":6,\"x\":13,\"y\":0},\"panelIndex\":\"73a752f9-bde5-4396-8ede-e9e77a37182d\",\"title\":\"Unique File Extensions [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-c94400ee-a135-4a99-9693-5879d29f7aad\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"c94400ee-a135-4a99-9693-5879d29f7aad\":{\"columnOrder\":[\"2934249f-fce5-4637-87ff-d2596d1b6ec5\"],\"columns\":{\"2934249f-fce5-4637-87ff-d2596d1b6ec5\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Domains\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.domain\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"2934249f-fce5-4637-87ff-d2596d1b6ec5\",\"layerId\":\"c94400ee-a135-4a99-9693-5879d29f7aad\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"02f1732b-a981-4fba-8b27-b944f2f3c98c\",\"w\":6,\"x\":19,\"y\":0},\"panelIndex\":\"02f1732b-a981-4fba-8b27-b944f2f3c98c\",\"title\":\"Unique Domains [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-9fa49c4c-5544-472d-afce-e51d6a5687fe\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"9fa49c4c-5544-472d-afce-e51d6a5687fe\":{\"columnOrder\":[\"15e2b5ad-2040-4253-89a6-60f085c66f86\",\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\"],\"columns\":{\"15e2b5ad-2040-4253-89a6-60f085c66f86\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.url.extension\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.extension\"},\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"15e2b5ad-2040-4253-89a6-60f085c66f86\",\"15e2b5ad-2040-4253-89a6-60f085c66f86\"],\"layerId\":\"9fa49c4c-5544-472d-afce-e51d6a5687fe\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"treemap\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":31,\"i\":\"fda93ed1-72f0-4489-80b7-9e69d14f30aa\",\"w\":23,\"x\":25,\"y\":0},\"panelIndex\":\"fda93ed1-72f0-4489-80b7-9e69d14f30aa\",\"title\":\"Most Popular File Extensions [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-0f63318a-a857-4d83-89ce-a94e2242b79e\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"0f63318a-a857-4d83-89ce-a94e2242b79e\":{\"columnOrder\":[\"df0791a6-247c-4434-a43a-fdea7577ca34\",\"77a48096-02aa-4b7a-8a7b-131fc38988bd\"],\"columns\":{\"77a48096-02aa-4b7a-8a7b-131fc38988bd\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"df0791a6-247c-4434-a43a-fdea7577ca34\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.url.scheme\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"77a48096-02aa-4b7a-8a7b-131fc38988bd\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.scheme\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"df0791a6-247c-4434-a43a-fdea7577ca34\"],\"layerId\":\"0f63318a-a857-4d83-89ce-a94e2242b79e\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"metric\":\"77a48096-02aa-4b7a-8a7b-131fc38988bd\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"ab7ab31c-e76f-4613-b17d-fdd909f17e0d\",\"w\":18,\"x\":7,\"y\":8},\"panelIndex\":\"ab7ab31c-e76f-4613-b17d-fdd909f17e0d\",\"title\":\"Percentage of URL Schema used [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-db89074c-e1fe-4091-bdb1-e42a36e82bac\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"db89074c-e1fe-4091-bdb1-e42a36e82bac\":{\"columnOrder\":[\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\",\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\"],\"columns\":{\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Domains\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.domain\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"columnId\":\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\",\"isTransposed\":false},{\"columnId\":\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\",\"isTransposed\":false}],\"layerId\":\"db89074c-e1fe-4091-bdb1-e42a36e82bac\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"8994501a-1550-4cf2-857f-d6b6491ffb62\",\"w\":18,\"x\":7,\"y\":23},\"panelIndex\":\"8994501a-1550-4cf2-857f-d6b6491ffb62\",\"title\":\"Most Popular Domains [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs MISP] URLs", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_misp-399bb8d0-71ec-11ec-8197-5d53a5437877", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c7c6e8dc-b649-434c-9650-8a1564d4d676:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c7c6e8dc-b649-434c-9650-8a1564d4d676:indexpattern-datasource-layer-88a112e1-6da1-49d3-9177-19f98280c200", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "73a752f9-bde5-4396-8ede-e9e77a37182d:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "73a752f9-bde5-4396-8ede-e9e77a37182d:indexpattern-datasource-layer-a6fa56f8-32fa-405d-8771-dade4fe75d62", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "02f1732b-a981-4fba-8b27-b944f2f3c98c:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "02f1732b-a981-4fba-8b27-b944f2f3c98c:indexpattern-datasource-layer-c94400ee-a135-4a99-9693-5879d29f7aad", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "fda93ed1-72f0-4489-80b7-9e69d14f30aa:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "fda93ed1-72f0-4489-80b7-9e69d14f30aa:indexpattern-datasource-layer-9fa49c4c-5544-472d-afce-e51d6a5687fe", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ab7ab31c-e76f-4613-b17d-fdd909f17e0d:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ab7ab31c-e76f-4613-b17d-fdd909f17e0d:indexpattern-datasource-layer-0f63318a-a857-4d83-89ce-a94e2242b79e", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8994501a-1550-4cf2-857f-d6b6491ffb62:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8994501a-1550-4cf2-857f-d6b6491ffb62:indexpattern-datasource-layer-db89074c-e1fe-4091-bdb1-e42a36e82bac", + "type": "index-pattern" + }, + { + "id": "ti_misp-550ba0e0-6c7d-11ec-9bce-f7a4dc94c294", + "name": "tag-ti_misp-550ba0e0-6c7d-11ec-9bce-f7a4dc94c294", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_misp/1.2.2/kibana/dashboard/ti_misp-56ed8040-6c7d-11ec-9bce-f7a4dc94c294.json b/packages/ti_misp/1.2.2/kibana/dashboard/ti_misp-56ed8040-6c7d-11ec-9bce-f7a4dc94c294.json new file mode 100755 index 0000000000..e60f8f871b --- /dev/null +++ b/packages/ti_misp/1.2.2/kibana/dashboard/ti_misp-56ed8040-6c7d-11ec-9bce-f7a4dc94c294.json @@ -0,0 +1,87 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about indicators ingested from the MISP integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"event.dataset\",\"negate\":false,\"params\":{\"query\":\"ti_misp.threat\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.dataset\":\"ti_misp.threat\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n**[MISP Overview (This Page)](/app/dashboards#/view/ti_misp-56ed8040-6c7d-11ec-9bce-f7a4dc94c294)** \\n[MISP Files](/app/dashboards#/view/ti_misp-32d9c020-71ea-11ec-8197-5d53a5437877) \\n[MISP URLs](/app/dashboards#/view/ti_misp-399bb8d0-71ec-11ec-8197-5d53a5437877) \\n\\n[Integrations Page](/app/integrations/detail/ti_misp/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is a health overview related to the MISP integration.\\n\\nThe dashboard is made to provide general statistics and show the health of the ingestion of indicators from MISP. \\n\\nIt shows ingestion rates and provides a few filters for drilling down to specific indicator types retrieved from MISP.\",\"openLinksInNewTab\":false},\"title\":\"Overview Textbox [Logs AbuseCH]\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":36,\"i\":\"ce31769b-ab7b-48c0-8869-bdf0c943d013\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"ce31769b-ab7b-48c0-8869-bdf0c943d013\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"controls\":[{\"fieldName\":\"threat.indicator.provider\",\"id\":\"1641204819355\",\"indexPatternRefName\":\"control_8fd54b49-92c1-4b90-a0c9-c1cedaa137b5_0_index_pattern\",\"label\":\"Indicator Provider\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"},{\"fieldName\":\"threat.indicator.type\",\"id\":\"1641204843291\",\"indexPatternRefName\":\"control_8fd54b49-92c1-4b90-a0c9-c1cedaa137b5_1_index_pattern\",\"label\":\"Indicator Type\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"}],\"pinFilters\":false,\"updateFiltersOnChange\":false,\"useTimeFilter\":false},\"title\":\"\",\"type\":\"input_control_vis\",\"uiState\":{}}},\"gridData\":{\"h\":8,\"i\":\"8fd54b49-92c1-4b90-a0c9-c1cedaa137b5\",\"w\":26,\"x\":7,\"y\":0},\"panelIndex\":\"8fd54b49-92c1-4b90-a0c9-c1cedaa137b5\",\"title\":\"Indicator Selector [Logs MISP]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-d87f35ee-570a-488b-b618-6ada39b49df4\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"d87f35ee-570a-488b-b618-6ada39b49df4\":{\"columnOrder\":[\"427cdedd-a93a-4f8e-93ce-f872b3809ae4\",\"d0f21543-9576-400e-aeca-babc5407d3a7\"],\"columns\":{\"427cdedd-a93a-4f8e-93ce-f872b3809ae4\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.type\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"d0f21543-9576-400e-aeca-babc5407d3a7\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.type\"},\"d0f21543-9576-400e-aeca-babc5407d3a7\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"427cdedd-a93a-4f8e-93ce-f872b3809ae4\"],\"layerId\":\"d87f35ee-570a-488b-b618-6ada39b49df4\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"d0f21543-9576-400e-aeca-babc5407d3a7\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":22,\"i\":\"793c8c41-d3d3-4196-a0e6-aaac8bc1572b\",\"w\":15,\"x\":33,\"y\":0},\"panelIndex\":\"793c8c41-d3d3-4196-a0e6-aaac8bc1572b\",\"title\":\"Total Indicators per type [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-0491a750-3050-47a9-bb99-c45984d3d28c\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"0491a750-3050-47a9-bb99-c45984d3d28c\":{\"columnOrder\":[\"fb93835d-e6a1-49b4-8911-ae15b081da8a\"],\"columns\":{\"fb93835d-e6a1-49b4-8911-ae15b081da8a\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Total Indicators\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"fb93835d-e6a1-49b4-8911-ae15b081da8a\",\"layerId\":\"0491a750-3050-47a9-bb99-c45984d3d28c\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"7cb42a10-64fd-454a-8669-f579fa2d0850\",\"w\":6,\"x\":7,\"y\":8},\"panelIndex\":\"7cb42a10-64fd-454a-8669-f579fa2d0850\",\"title\":\"Total Indicators [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-471f2a97-fb44-41a1-a5a0-2f68b9140ef5\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"471f2a97-fb44-41a1-a5a0-2f68b9140ef5\":{\"columnOrder\":[\"16691165-3643-4658-bfc8-4bba834f2789\",\"3e085a0a-8386-4f64-a629-44ae27b18878\"],\"columns\":{\"16691165-3643-4658-bfc8-4bba834f2789\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.provider\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"3e085a0a-8386-4f64-a629-44ae27b18878\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.provider\"},\"3e085a0a-8386-4f64-a629-44ae27b18878\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"accessors\":[\"3e085a0a-8386-4f64-a629-44ae27b18878\"],\"layerId\":\"471f2a97-fb44-41a1-a5a0-2f68b9140ef5\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"bar_horizontal\",\"showGridlines\":false,\"splitAccessor\":\"16691165-3643-4658-bfc8-4bba834f2789\"}],\"legend\":{\"isVisible\":true,\"position\":\"right\",\"showSingleSeries\":true},\"preferredSeriesType\":\"bar_horizontal\",\"title\":\"Empty XY chart\",\"valueLabels\":\"hide\",\"valuesInLegend\":true,\"yLeftExtent\":{\"mode\":\"full\"},\"yRightExtent\":{\"mode\":\"full\"}}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":14,\"i\":\"f5937489-643e-4254-819d-b1290b4b74c2\",\"w\":20,\"x\":13,\"y\":8},\"panelIndex\":\"f5937489-643e-4254-819d-b1290b4b74c2\",\"title\":\"Total Indicators per Provider [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\":{\"columnOrder\":[\"4d7ca99c-8a53-4a7f-96db-409251c0e391\",\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\",\"0726d151-9edf-41cb-ab52-473ab27cf8b7\"],\"columns\":{\"0726d151-9edf-41cb-ab52-473ab27cf8b7\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"4d7ca99c-8a53-4a7f-96db-409251c0e391\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of event.dataset\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"0726d151-9edf-41cb-ab52-473ab27cf8b7\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":3},\"scale\":\"ordinal\",\"sourceField\":\"event.dataset\"},\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"interval\":\"30s\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"curveType\":\"CURVE_MONOTONE_X\",\"fittingFunction\":\"Zero\",\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"0726d151-9edf-41cb-ab52-473ab27cf8b7\"],\"layerId\":\"c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"splitAccessor\":\"4d7ca99c-8a53-4a7f-96db-409251c0e391\",\"xAccessor\":\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\"}],\"legend\":{\"isInside\":false,\"isVisible\":true,\"position\":\"bottom\",\"shouldTruncate\":false,\"showSingleSeries\":true},\"preferredSeriesType\":\"line\",\"title\":\"Empty XY chart\",\"valueLabels\":\"hide\",\"valuesInLegend\":false,\"xTitle\":\"Date\",\"yLeftExtent\":{\"mode\":\"full\"},\"yRightExtent\":{\"mode\":\"full\"},\"yTitle\":\"Total Indicators\"}},\"title\":\"Indicators ingested per Datastream [Logs AbuseCH]\",\"type\":\"lens\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":14,\"i\":\"77a4acf0-c56d-420f-b50b-8e5b082931c9\",\"w\":41,\"x\":7,\"y\":22},\"panelIndex\":\"77a4acf0-c56d-420f-b50b-8e5b082931c9\",\"title\":\"Indicators ingested [Logs MISP]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs MISP] Overview", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_misp-56ed8040-6c7d-11ec-9bce-f7a4dc94c294", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8fd54b49-92c1-4b90-a0c9-c1cedaa137b5:control_8fd54b49-92c1-4b90-a0c9-c1cedaa137b5_0_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8fd54b49-92c1-4b90-a0c9-c1cedaa137b5:control_8fd54b49-92c1-4b90-a0c9-c1cedaa137b5_1_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "793c8c41-d3d3-4196-a0e6-aaac8bc1572b:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "793c8c41-d3d3-4196-a0e6-aaac8bc1572b:indexpattern-datasource-layer-d87f35ee-570a-488b-b618-6ada39b49df4", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "7cb42a10-64fd-454a-8669-f579fa2d0850:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "7cb42a10-64fd-454a-8669-f579fa2d0850:indexpattern-datasource-layer-0491a750-3050-47a9-bb99-c45984d3d28c", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f5937489-643e-4254-819d-b1290b4b74c2:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f5937489-643e-4254-819d-b1290b4b74c2:indexpattern-datasource-layer-471f2a97-fb44-41a1-a5a0-2f68b9140ef5", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "77a4acf0-c56d-420f-b50b-8e5b082931c9:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "77a4acf0-c56d-420f-b50b-8e5b082931c9:indexpattern-datasource-layer-c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7", + "type": "index-pattern" + }, + { + "id": "ti_misp-550ba0e0-6c7d-11ec-9bce-f7a4dc94c294", + "name": "tag-ti_misp-550ba0e0-6c7d-11ec-9bce-f7a4dc94c294", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_misp/1.2.2/kibana/tag/ti_misp-550ba0e0-6c7d-11ec-9bce-f7a4dc94c294.json b/packages/ti_misp/1.2.2/kibana/tag/ti_misp-550ba0e0-6c7d-11ec-9bce-f7a4dc94c294.json new file mode 100755 index 0000000000..b202c82473 --- /dev/null +++ b/packages/ti_misp/1.2.2/kibana/tag/ti_misp-550ba0e0-6c7d-11ec-9bce-f7a4dc94c294.json @@ -0,0 +1,14 @@ +{ + "attributes": { + "color": "#6092C0", + "description": "", + "name": "MISP" + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_misp-550ba0e0-6c7d-11ec-9bce-f7a4dc94c294", + "migrationVersion": { + "tag": "8.0.0" + }, + "references": [], + "type": "tag" +} \ No newline at end of file diff --git a/packages/ti_misp/1.2.2/manifest.yml b/packages/ti_misp/1.2.2/manifest.yml new file mode 100755 index 0000000000..e77c6f55be --- /dev/null +++ b/packages/ti_misp/1.2.2/manifest.yml @@ -0,0 +1,26 @@ +name: ti_misp +title: MISP +version: 1.2.2 +release: ga +description: This Elastic integration collects events from MISP +type: integration +format_version: 1.0.0 +license: basic +categories: [security] +conditions: + kibana.version: ^8.0.0 +icons: + - src: /img/misp.svg + title: MISP + size: 216x216 + type: image/svg+xml +policy_templates: + - name: ti_misp + title: MISP + description: Collect threat intelligence from the MISP API. + inputs: + - type: httpjson + title: "Collect threat intelligence from the MISP API." + description: "Collect threat intelligence from the MISP API." +owner: + github: elastic/security-external-integrations diff --git a/packages/ti_otx/1.2.2/changelog.yml b/packages/ti_otx/1.2.2/changelog.yml new file mode 100755 index 0000000000..8534abb559 --- /dev/null +++ b/packages/ti_otx/1.2.2/changelog.yml @@ -0,0 +1,41 @@ +# newer versions go on top +- version: "1.2.2" + changes: + - description: Add field mapping for event.created + type: enhancement + link: https://github.com/elastic/integrations/pull/3042 +- version: "1.2.1" + changes: + - description: Add documentation for multi-fields + type: enhancement + link: https://github.com/elastic/integrations/pull/2916 +- version: "1.2.0" + changes: + - description: Update to ECS 8.0 + type: enhancement + link: https://github.com/elastic/integrations/pull/2449 +- version: "1.1.0" + changes: + - description: Adding threat.feed fields and dashboards + type: enhancement + link: https://github.com/elastic/integrations/pull/2540 +- version: "1.0.3" + changes: + - description: Change test public IPs to the supported subset + type: bugfix + link: https://github.com/elastic/integrations/pull/2327 +- version: "1.0.2" + changes: + - description: Bump minimum version + type: enhancement + link: https://github.com/elastic/integrations/pull/2063 +- version: "1.0.1" + changes: + - description: Update title and description. + type: enhancement + link: https://github.com/elastic/integrations/pull/1997 +- version: "1.0.0" + changes: + - description: Initial release + type: enhancement + link: https://github.com/elastic/integrations/pull/1873 diff --git a/packages/ti_otx/1.2.2/data_stream/threat/agent/stream/httpjson.yml.hbs b/packages/ti_otx/1.2.2/data_stream/threat/agent/stream/httpjson.yml.hbs new file mode 100755 index 0000000000..cc8d4550c6 --- /dev/null +++ b/packages/ti_otx/1.2.2/data_stream/threat/agent/stream/httpjson.yml.hbs @@ -0,0 +1,60 @@ +config_version: "2" +interval: {{interval}} +request.method: "GET" + +{{#if url}} +request.url: {{url}} +{{/if}} +{{#if proxy_url }} +request.proxy_url: {{proxy_url}} +{{/if}} +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} +{{#if http_client_timeout}} +request.timeout: {{http_client_timeout}} +{{/if}} +request.transforms: +- set: + target: header.Content-Type + value: application/json +{{#if api_token }} +- set: + target: header.X-OTX-API-KEY + value: {{ api_token }} +{{/if}} +{{#if types}} +- set: + target: url.params.types + value: {{ types }} +{{/if}} +- set: + target: url.params.modified_since + value: '[[.cursor.timestamp]]' + default: '[[ formatDate (now (parseDuration "-{{ first_interval }}")) "RFC3339" ]]' + +response.split: + target: body.results + +response.pagination: +- set: + target: url.value + value: '[[ .last_response.body.next ]]' +cursor: + timestamp: + value: '[[ formatDate (now (parseDuration "-{{ lookback_range }}")) "RFC3339" ]]' + +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} \ No newline at end of file diff --git a/packages/ti_otx/1.2.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml b/packages/ti_otx/1.2.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..494d667a7a --- /dev/null +++ b/packages/ti_otx/1.2.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,172 @@ +--- +description: Pipeline for parsing Abuse.ch URL Threat Intel +processors: + #################### + # Event ECS fields # + #################### + - set: + field: event.ingested + value: "{{_ingest.timestamp}}" + - set: + field: ecs.version + value: "8.0.0" + - set: + field: event.kind + value: enrichment + - set: + field: event.category + value: threat + - set: + field: event.type + value: indicator + + ###################### + # General ECS fields # + ###################### + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: otx + - fingerprint: + fields: + - otx.id + target_field: "_id" + + ##################### + # Threat ECS Fields # + ##################### + ## File indicator operations + - set: + field: threat.indicator.type + value: file + if: "ctx.otx?.type.startsWith('FileHash') || ctx.otx?.type == 'filepath'" + - rename: + field: otx.indicator + target_field: threat.indicator.file.hash.md5 + ignore_missing: true + if: "ctx.otx?.type == 'FileHash-MD5'" + - rename: + field: otx.indicator + target_field: threat.indicator.file.hash.sha1 + ignore_missing: true + if: "ctx.otx?.type == 'FileHash-SHA1'" + - rename: + field: otx.indicator + target_field: threat.indicator.file.hash.sha256 + ignore_missing: true + if: "ctx.otx?.type == 'FileHash-SHA256'" + - rename: + field: otx.indicator + target_field: threat.indicator.file.hash.pehash + ignore_missing: true + if: "ctx.otx?.type == 'FileHash-PEHASH'" + - rename: + field: otx.indicator + target_field: threat.indicator.file.hash.imphash + ignore_missing: true + if: "ctx.otx?.type == 'FileHash-IMPHASH'" + + ## IP indicator operations + - set: + field: threat.indicator.type + value: ipv4-addr + if: ctx.otx?.type == 'IPv4' + - set: + field: threat.indicator.type + value: ipv6-addr + if: ctx.otx?.type == 'IPv6' + - rename: + field: otx.indicator + target_field: threat.indicator.ip + ignore_missing: true + if: "ctx.threat?.indicator?.type != null && ['ipv4-addr', 'ipv6-addr'].contains(ctx.threat?.indicator?.type)" + + ## URL indicator operations + - set: + field: threat.indicator.type + value: url + if: "ctx.threat?.indicator?.type == null && ['URL', 'URI'].contains(ctx.otx?.type)" + - uri_parts: + field: otx.indicator + target_field: threat.indicator.url + keep_original: true + remove_if_successful: true + if: ctx.threat?.indicator?.type == 'url' + - set: + field: threat.indicator.url.full + value: "{{{threat.indicator.url.original}}}" + ignore_empty_value: true + if: "ctx.otx?.type == 'URL'" + + ## Email indicator operations + - set: + field: threat.indicator.type + value: email-addr + if: ctx.otx?.type == 'email' + - rename: + field: otx.indicator + target_field: threat.indicator.email.address + ignore_missing: true + if: "ctx.threat?.indicator?.type == 'email-addr'" + + ## Domain indicator operations + - set: + field: threat.indicator.type + value: domain-name + if: "ctx.threat?.indicator?.type == null && ['domain', 'hostname'].contains(ctx.otx?.type)" + - rename: + field: otx.indicator + target_field: threat.indicator.url.domain + ignore_missing: true + if: "ctx.threat?.indicator?.type == 'domain-name' && ctx.threat?.indicator?.url?.domain == null" + + ###################### + # Cleanup processors # + ###################### + - set: + field: threat.indicator.type + value: unknown + if: ctx.threat?.indicator?.type == null + - script: + lang: painless + if: ctx.otx != null + source: | + void handleMap(Map map) { + for (def x : map.values()) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + map.values().removeIf(v -> v == null); + } + void handleList(List list) { + for (def x : list) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + } + handleMap(ctx); + - remove: + field: + - otx.content + ignore_missing: true + if: ctx.otx?.content == "" + - remove: + field: + - otx.type + - otx.id + - message + ignore_missing: true + if: ctx.threat?.indicator?.type != null +on_failure: + - set: + field: error.message + value: "{{ _ingest.on_failure_message }}" diff --git a/packages/ti_otx/1.2.2/data_stream/threat/fields/agent.yml b/packages/ti_otx/1.2.2/data_stream/threat/fields/agent.yml new file mode 100755 index 0000000000..da4e652c53 --- /dev/null +++ b/packages/ti_otx/1.2.2/data_stream/threat/fields/agent.yml @@ -0,0 +1,198 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + diff --git a/packages/ti_otx/1.2.2/data_stream/threat/fields/base-fields.yml b/packages/ti_otx/1.2.2/data_stream/threat/fields/base-fields.yml new file mode 100755 index 0000000000..5b27b27cf8 --- /dev/null +++ b/packages/ti_otx/1.2.2/data_stream/threat/fields/base-fields.yml @@ -0,0 +1,28 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset name. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module + value: ti_otx +- name: threat.feed.name + type: constant_keyword + description: Display friendly feed name + value: Alienvault OTX +- name: threat.feed.dashboard_id + type: constant_keyword + description: Dashboard ID used for Kibana CTI UI + value: ti_otx-7da241a0-71f3-11ec-9910-d1ceb8a1734b +- name: event.dataset + type: constant_keyword + description: Event dataset + value: ti_otx.threat +- name: "@timestamp" + type: date + description: Event timestamp. diff --git a/packages/ti_otx/1.2.2/data_stream/threat/fields/beats.yml b/packages/ti_otx/1.2.2/data_stream/threat/fields/beats.yml new file mode 100755 index 0000000000..cb44bb2944 --- /dev/null +++ b/packages/ti_otx/1.2.2/data_stream/threat/fields/beats.yml @@ -0,0 +1,12 @@ +- name: input.type + type: keyword + description: Type of Filebeat input. +- name: log.flags + type: keyword + description: Flags for the log file. +- name: log.offset + type: long + description: Offset of the entry in the log file. +- name: log.file.path + type: keyword + description: Path to the log file. diff --git a/packages/ti_otx/1.2.2/data_stream/threat/fields/ecs.yml b/packages/ti_otx/1.2.2/data_stream/threat/fields/ecs.yml new file mode 100755 index 0000000000..b1e87e820e --- /dev/null +++ b/packages/ti_otx/1.2.2/data_stream/threat/fields/ecs.yml @@ -0,0 +1,153 @@ +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: |- + For log events the message field contains the log message, optimized for viewing in a log viewer. + For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. + If multiple messages exist, they can be combined into one message. + name: message + type: match_only_text +- description: Error message. + name: error.message + type: match_only_text +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). + name: related.hash + type: keyword +- description: |- + Timestamp when an event arrived in the central data store. + This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. + In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`. + name: event.ingested + type: date +- description: |- + This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. + `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. + The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. + name: event.kind + type: keyword +- description: |- + event.created contains the date/time when the event was first read by an agent, or by your pipeline. + This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. + In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. + In case the two timestamps are identical, @timestamp should be used. + name: event.created + type: date +- description: |- + This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. + `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. + This field is an array. This will allow proper categorization of some events that fall in multiple categories. + name: event.category + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. + `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. + This field is an array. This will allow proper categorization of some events that fall in multiple event types. + name: event.type + type: keyword +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: |- + Type of indicator as represented by Cyber Observable in STIX 2.0. + Recommended values: + * autonomous-system + * artifact + * directory + * domain-name + * email-addr + * file + * ipv4-addr + * ipv6-addr + * mac-addr + * mutex + * port + * process + * software + * url + * user-account + * windows-registry-key + * x509-certificate + name: threat.indicator.type + type: keyword +- description: Identifies a threat indicator as an email address (irrespective of direction). + name: threat.indicator.email.address + type: keyword +- description: Identifies a threat indicator as an IP address (irrespective of direction). + name: threat.indicator.ip + type: ip +- description: |- + Domain of the url, such as "www.elastic.co". + In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. + If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. + name: threat.indicator.url.domain + type: keyword +- description: If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.full + type: wildcard +- description: |- + The field contains the file extension from the original request url, excluding the leading dot. + The file extension is only set if it exists, as not every url has a file extension. + The leading period must not be included. For example, the value must be "png", not ".png". + Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). + name: threat.indicator.url.extension + type: keyword +- description: |- + Unmodified original url as seen in the event source. + Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. + This field is meant to represent the URL as it was observed, complete or not. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.original + type: wildcard +- description: Path of the request, such as "/search". + name: threat.indicator.url.path + type: wildcard +- description: Port of the request, such as 443. + name: threat.indicator.url.port + type: long +- description: |- + Scheme of the request, such as "https". + Note: The `:` is not part of the scheme. + name: threat.indicator.url.scheme + type: keyword +- description: |- + The query field describes the query string of the request, such as "q=elasticsearch". + The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. + name: threat.indicator.url.query + type: keyword +- description: File type (file, dir, or symlink). + name: threat.indicator.file.type + type: keyword +- description: MD5 hash. + name: threat.indicator.file.hash.md5 + type: keyword +- description: SHA1 hash. + name: threat.indicator.file.hash.sha1 + type: keyword +- description: SHA256 hash. + name: threat.indicator.file.hash.sha256 + type: keyword +- description: |- + A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. + Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html. + name: threat.indicator.file.pe.imphash + type: keyword +- description: The file's pehash, if available. + name: threat.indicator.file.hash.pehash + type: keyword +- description: The name of the indicator's provider. + name: threat.indicator.provider + type: keyword diff --git a/packages/ti_otx/1.2.2/data_stream/threat/fields/fields.yml b/packages/ti_otx/1.2.2/data_stream/threat/fields/fields.yml new file mode 100755 index 0000000000..ee3a603aad --- /dev/null +++ b/packages/ti_otx/1.2.2/data_stream/threat/fields/fields.yml @@ -0,0 +1,36 @@ +- name: otx + type: group + description: > + Fields for OTX Threat Intel + + fields: + - name: id + type: keyword + description: > + The ID of the indicator. + + - name: indicator + type: keyword + description: > + The value of the indicator, for example if the type is domain, this would be the value. + + - name: description + type: keyword + description: > + A description of the indicator. + + - name: title + type: keyword + description: > + Title describing the indicator. + + - name: content + type: keyword + description: > + Extra text or descriptive content related to the indicator. + + - name: type + type: keyword + description: > + The indicator type, can for example be "domain, email, FileHash-SHA256". + diff --git a/packages/ti_otx/1.2.2/data_stream/threat/manifest.yml b/packages/ti_otx/1.2.2/data_stream/threat/manifest.yml new file mode 100755 index 0000000000..4bfd942d44 --- /dev/null +++ b/packages/ti_otx/1.2.2/data_stream/threat/manifest.yml @@ -0,0 +1,98 @@ +type: logs +title: Alienvault OTX logs +streams: + - input: httpjson + vars: + - name: url + type: text + title: Alienvault OTX API endpoint + multi: false + required: true + show_user: false + default: https://otx.alienvault.com/api/v1/indicators/export + - name: http_client_timeout + type: text + title: HTTP Client Timeout + multi: false + required: false + show_user: false + default: 30s + - name: proxy_url + type: text + title: Proxy URL + multi: false + required: false + show_user: false + description: URL to proxy connections in the form of http[s]://:@: + - name: interval + type: text + title: Interval + multi: false + required: true + show_user: true + default: 5m + - name: api_token + type: text + title: API Token + multi: false + required: true + show_user: true + description: The Alienvault OTX API token + - name: first_interval + type: text + title: First Interval + multi: false + required: true + show_user: false + description: Configures how far back in time the agent should retrieve data from the API in hours. + default: 400h + - name: lookback_range + type: text + title: Lookback Range + multi: false + required: true + show_user: false + description: How many hours to look back for each request, should not be smaller than the interval (default 5m). + default: 1h + - name: types + type: text + title: Filter on indicator types + multi: false + required: false + show_user: false + description: "A comma separated list of indicator types to retrieve, example: 'domain,IPv4,hostname,url,FileHash-SHA256'" + - name: ssl + type: yaml + title: SSL + multi: false + required: false + show_user: true + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - otx-threat + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + template_path: httpjson.yml.hbs + title: Alienvault OTX logs + description: Collect Alienvault OTX logs diff --git a/packages/ti_otx/1.2.2/data_stream/threat/sample_event.json b/packages/ti_otx/1.2.2/data_stream/threat/sample_event.json new file mode 100755 index 0000000000..4bc1007633 --- /dev/null +++ b/packages/ti_otx/1.2.2/data_stream/threat/sample_event.json @@ -0,0 +1,50 @@ +{ + "@timestamp": "2022-04-11T09:14:18.594Z", + "agent": { + "ephemeral_id": "26518763-fc35-4393-a414-ab320e780eee", + "id": "93ca38c5-fdea-4af2-acab-27edbc2b3434", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "data_stream": { + "dataset": "ti_otx.threat", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "93ca38c5-fdea-4af2-acab-27edbc2b3434", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "created": "2022-04-11T09:14:18.594Z", + "dataset": "ti_otx.threat", + "ingested": "2022-04-11T09:14:19Z", + "kind": "enrichment", + "original": "{\"content\":\"\",\"description\":null,\"id\":1251,\"indicator\":\"info.3000uc.com\",\"title\":null,\"type\":\"hostname\"}", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "otx": {}, + "tags": [ + "preserve_original_event", + "forwarded", + "otx-threat" + ], + "threat": { + "indicator": { + "type": "domain-name", + "url": { + "domain": "info.3000uc.com" + } + } + } +} \ No newline at end of file diff --git a/packages/ti_otx/1.2.2/docs/README.md b/packages/ti_otx/1.2.2/docs/README.md new file mode 100755 index 0000000000..f8af7ebce9 --- /dev/null +++ b/packages/ti_otx/1.2.2/docs/README.md @@ -0,0 +1,153 @@ +# Alienvault OTX Integration + +This integration is for Alienvault OTX. It retrieves indicators for all pulses subscribed to a specific user account on OTX + +## Configuration + +To use this package, it is required to have an account on [Alienvault OTX](https://otx.alienvault.com/). Once an account has been created, and at least 1 pulse has been subscribed to, the API key can be retrieved from your [user profile dashboard](https://otx.alienvault.com/api). In the top right corner there should be an OTX KEY. + +## Logs + +### Threat + +Retrieves all the related indicators over time, related to your pulse subscriptions on OTX. + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset name. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| error.message | Error message. | match_only_text | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset | constant_keyword | +| event.ingested | Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` \< `event.created` \< `event.ingested`. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Type of Filebeat input. | keyword | +| log.file.path | Path to the log file. | keyword | +| log.flags | Flags for the log file. | keyword | +| log.offset | Offset of the entry in the log file. | long | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| otx.content | Extra text or descriptive content related to the indicator. | keyword | +| otx.description | A description of the indicator. | keyword | +| otx.id | The ID of the indicator. | keyword | +| otx.indicator | The value of the indicator, for example if the type is domain, this would be the value. | keyword | +| otx.title | Title describing the indicator. | keyword | +| otx.type | The indicator type, can for example be "domain, email, FileHash-SHA256". | keyword | +| related.hash | All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). | keyword | +| tags | List of keywords used to tag each event. | keyword | +| threat.feed.dashboard_id | Dashboard ID used for Kibana CTI UI | constant_keyword | +| threat.feed.name | Display friendly feed name | constant_keyword | +| threat.indicator.email.address | Identifies a threat indicator as an email address (irrespective of direction). | keyword | +| threat.indicator.file.hash.md5 | MD5 hash. | keyword | +| threat.indicator.file.hash.pehash | The file's pehash, if available. | keyword | +| threat.indicator.file.hash.sha1 | SHA1 hash. | keyword | +| threat.indicator.file.hash.sha256 | SHA256 hash. | keyword | +| threat.indicator.file.pe.imphash | A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html. | keyword | +| threat.indicator.file.type | File type (file, dir, or symlink). | keyword | +| threat.indicator.ip | Identifies a threat indicator as an IP address (irrespective of direction). | ip | +| threat.indicator.provider | The name of the indicator's provider. | keyword | +| threat.indicator.type | Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: \* autonomous-system \* artifact \* directory \* domain-name \* email-addr \* file \* ipv4-addr \* ipv6-addr \* mac-addr \* mutex \* port \* process \* software \* url \* user-account \* windows-registry-key \* x509-certificate | keyword | +| threat.indicator.url.domain | Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. | keyword | +| threat.indicator.url.extension | The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). | keyword | +| threat.indicator.url.full | If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. | wildcard | +| threat.indicator.url.full.text | Multi-field of `threat.indicator.url.full`. | match_only_text | +| threat.indicator.url.original | Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not. | wildcard | +| threat.indicator.url.original.text | Multi-field of `threat.indicator.url.original`. | match_only_text | +| threat.indicator.url.path | Path of the request, such as "/search". | wildcard | +| threat.indicator.url.port | Port of the request, such as 443. | long | +| threat.indicator.url.query | The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. | keyword | +| threat.indicator.url.scheme | Scheme of the request, such as "https". Note: The `:` is not part of the scheme. | keyword | + + +An example event for `threat` looks as following: + +```json +{ + "@timestamp": "2022-04-11T09:14:18.594Z", + "agent": { + "ephemeral_id": "26518763-fc35-4393-a414-ab320e780eee", + "id": "93ca38c5-fdea-4af2-acab-27edbc2b3434", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "data_stream": { + "dataset": "ti_otx.threat", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "93ca38c5-fdea-4af2-acab-27edbc2b3434", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "created": "2022-04-11T09:14:18.594Z", + "dataset": "ti_otx.threat", + "ingested": "2022-04-11T09:14:19Z", + "kind": "enrichment", + "original": "{\"content\":\"\",\"description\":null,\"id\":1251,\"indicator\":\"info.3000uc.com\",\"title\":null,\"type\":\"hostname\"}", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "otx": {}, + "tags": [ + "preserve_original_event", + "forwarded", + "otx-threat" + ], + "threat": { + "indicator": { + "type": "domain-name", + "url": { + "domain": "info.3000uc.com" + } + } + } +} +``` diff --git a/packages/ti_otx/1.2.2/img/otx.svg b/packages/ti_otx/1.2.2/img/otx.svg new file mode 100755 index 0000000000..ac96edd1d8 --- /dev/null +++ b/packages/ti_otx/1.2.2/img/otx.svg @@ -0,0 +1 @@ +AV-Corporate-Logo \ No newline at end of file diff --git a/packages/ti_otx/1.2.2/kibana/dashboard/ti_otx-7da241a0-71f3-11ec-9910-d1ceb8a1734b.json b/packages/ti_otx/1.2.2/kibana/dashboard/ti_otx-7da241a0-71f3-11ec-9910-d1ceb8a1734b.json new file mode 100755 index 0000000000..57b0284421 --- /dev/null +++ b/packages/ti_otx/1.2.2/kibana/dashboard/ti_otx-7da241a0-71f3-11ec-9910-d1ceb8a1734b.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about indicators ingested from the Alienvault OTX integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"ti_otx.threat\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"ti_otx.threat\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n**[OTX Overview (This Page)](/app/dashboards#/view/ti_otx-7da241a0-71f3-11ec-9910-d1ceb8a1734b)** \\n[OTX Files](/app/dashboards#/view/ti_otx-83b01770-71f3-11ec-9910-d1ceb8a1734b) \\n[OTX URLs](/app/dashboards#/view/ti_otx-8957ff80-71f3-11ec-9910-d1ceb8a1734b) \\n\\n[Integrations Page](/app/integrations/detail/ti_otx/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is a health overview related to the Alienvault OTX integration.\\n\\nThe dashboard is made to provide general statistics and show the health of the ingestion of indicators from Alienvault OTX. \\n\\nThe ingestion rates (by default it fetches new updates every 10 minutes) and provides a few filters for drilling down to specific indicator types retrieved from Alienvault OTX.\",\"openLinksInNewTab\":false},\"title\":\"Overview Textbox [Logs AbuseCH]\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":31,\"i\":\"555e9e6c-04e9-4022-b6df-bda07dde30c4\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"555e9e6c-04e9-4022-b6df-bda07dde30c4\",\"title\":\"Overview Textbox [Logs OTX]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"logs-*\",\"key\":\"event.dataset\",\"negate\":false,\"params\":[\"ti_abusech.malware\",\"ti_abusech.malwarebazaar\",\"ti_abusech.url\"],\"type\":\"phrases\"},\"query\":{\"bool\":{\"minimum_should_match\":1,\"should\":[{\"match_phrase\":{\"event.dataset\":\"ti_abusech.malware\"}},{\"match_phrase\":{\"event.dataset\":\"ti_abusech.malwarebazaar\"}},{\"match_phrase\":{\"event.dataset\":\"ti_abusech.url\"}}]}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"logs-*\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"controls\":[{\"fieldName\":\"event.dataset\",\"id\":\"1635779550157\",\"indexPatternRefName\":\"control_e971fedd-6afd-4d03-93ac-d0c751acc254_0_index_pattern\",\"label\":\"Feed Name\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"},{\"fieldName\":\"threat.indicator.provider\",\"id\":\"1635779603363\",\"indexPatternRefName\":\"control_e971fedd-6afd-4d03-93ac-d0c751acc254_1_index_pattern\",\"label\":\"Indicator Provider\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"},{\"fieldName\":\"threat.indicator.type\",\"id\":\"1635779625911\",\"indexPatternRefName\":\"control_e971fedd-6afd-4d03-93ac-d0c751acc254_2_index_pattern\",\"label\":\"Indicator Type\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"}],\"pinFilters\":false,\"updateFiltersOnChange\":false,\"useTimeFilter\":false},\"title\":\"Feed and Indicator Selector [Logs AbuseCH]\",\"type\":\"input_control_vis\",\"uiState\":{}}},\"gridData\":{\"h\":7,\"i\":\"e971fedd-6afd-4d03-93ac-d0c751acc254\",\"w\":41,\"x\":7,\"y\":0},\"panelIndex\":\"e971fedd-6afd-4d03-93ac-d0c751acc254\",\"title\":\"Feed and Indicator Selector [Logs OTX]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-8c0613c0-3b25-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\":{\"columnOrder\":[\"4d7ca99c-8a53-4a7f-96db-409251c0e391\",\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\",\"0726d151-9edf-41cb-ab52-473ab27cf8b7\"],\"columns\":{\"0726d151-9edf-41cb-ab52-473ab27cf8b7\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"4d7ca99c-8a53-4a7f-96db-409251c0e391\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of event.dataset\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"0726d151-9edf-41cb-ab52-473ab27cf8b7\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":3},\"scale\":\"ordinal\",\"sourceField\":\"event.dataset\"},\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"interval\":\"30s\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"curveType\":\"CURVE_MONOTONE_X\",\"fittingFunction\":\"Zero\",\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"0726d151-9edf-41cb-ab52-473ab27cf8b7\"],\"layerId\":\"c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"splitAccessor\":\"4d7ca99c-8a53-4a7f-96db-409251c0e391\",\"xAccessor\":\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\"}],\"legend\":{\"isInside\":false,\"isVisible\":true,\"position\":\"bottom\",\"shouldTruncate\":false,\"showSingleSeries\":true},\"preferredSeriesType\":\"line\",\"title\":\"Empty XY chart\",\"valueLabels\":\"hide\",\"valuesInLegend\":false,\"xTitle\":\"Date\",\"yLeftExtent\":{\"mode\":\"full\"},\"yRightExtent\":{\"mode\":\"full\"},\"yTitle\":\"Total Indicators\"}},\"title\":\"Indicators ingested per Datastream [Logs AbuseCH]\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"aab4fac0-d39c-4521-aa9b-0a49d5938e9e\",\"w\":29,\"x\":7,\"y\":7},\"panelIndex\":\"aab4fac0-d39c-4521-aa9b-0a49d5938e9e\",\"title\":\"Indicators ingested per Datastream [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-682732d8-8691-4c5a-bf89-de8e30d71dfb\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-62801870-3b2a-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"682732d8-8691-4c5a-bf89-de8e30d71dfb\":{\"columnOrder\":[\"dd629c44-e7db-438e-8656-340b94fd30d8\",\"bad802d8-b23f-4ef4-8dcf-4e92170595a7\"],\"columns\":{\"bad802d8-b23f-4ef4-8dcf-4e92170595a7\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"dd629c44-e7db-438e-8656-340b94fd30d8\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Indicators\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"bad802d8-b23f-4ef4-8dcf-4e92170595a7\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":3},\"scale\":\"ordinal\",\"sourceField\":\"event.dataset\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"dd629c44-e7db-438e-8656-340b94fd30d8\"],\"layerId\":\"682732d8-8691-4c5a-bf89-de8e30d71dfb\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"legendPosition\":\"right\",\"metric\":\"bad802d8-b23f-4ef4-8dcf-4e92170595a7\",\"nestedLegend\":false,\"numberDisplay\":\"percent\",\"percentDecimals\":2,\"truncateLegend\":true}],\"shape\":\"donut\"}},\"title\":\"Total Indicators per Datastream [Logs AbuseCH]\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"f654c447-12d2-41a4-9091-06169af11ba5\",\"w\":12,\"x\":36,\"y\":7},\"panelIndex\":\"f654c447-12d2-41a4-9091-06169af11ba5\",\"title\":\"Total Indicators per Datastream [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"description\":\"\",\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-070f5dbc-7687-4e97-9a57-5542b401c13f\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-1d376820-3b22-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"070f5dbc-7687-4e97-9a57-5542b401c13f\":{\"columnOrder\":[\"1e352b49-3b83-44a6-98fe-8703d30f2517\"],\"columns\":{\"1e352b49-3b83-44a6-98fe-8703d30f2517\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Total Indicators\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"1e352b49-3b83-44a6-98fe-8703d30f2517\",\"layerId\":\"070f5dbc-7687-4e97-9a57-5542b401c13f\",\"layerType\":\"data\"}},\"title\":\"Total Indicators [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"d37eb797-f273-43c2-9004-b947891cce55\",\"w\":6,\"x\":7,\"y\":23},\"panelIndex\":\"d37eb797-f273-43c2-9004-b947891cce55\",\"title\":\"Total Indicators [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-df8e3a91-700b-428a-a763-525076e4d3c8\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-49830790-3b27-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"df8e3a91-700b-428a-a763-525076e4d3c8\":{\"columnOrder\":[\"e4f78e2f-f0a7-4cc6-96d0-af607ffbf326\"],\"columns\":{\"e4f78e2f-f0a7-4cc6-96d0-af607ffbf326\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Total Datastreams\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"event.dataset\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"e4f78e2f-f0a7-4cc6-96d0-af607ffbf326\",\"layerId\":\"df8e3a91-700b-428a-a763-525076e4d3c8\",\"layerType\":\"data\"}},\"title\":\"Total Datastreams [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"6509dcc9-bb9c-4c1f-80e9-612f67ada340\",\"w\":6,\"x\":13,\"y\":23},\"panelIndex\":\"6509dcc9-bb9c-4c1f-80e9-612f67ada340\",\"title\":\"Total Datastreams [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs OTX] Overview", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_otx-7da241a0-71f3-11ec-9910-d1ceb8a1734b", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:control_e971fedd-6afd-4d03-93ac-d0c751acc254_0_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:control_e971fedd-6afd-4d03-93ac-d0c751acc254_1_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:control_e971fedd-6afd-4d03-93ac-d0c751acc254_2_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "aab4fac0-d39c-4521-aa9b-0a49d5938e9e:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "aab4fac0-d39c-4521-aa9b-0a49d5938e9e:indexpattern-datasource-layer-c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f654c447-12d2-41a4-9091-06169af11ba5:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f654c447-12d2-41a4-9091-06169af11ba5:indexpattern-datasource-layer-682732d8-8691-4c5a-bf89-de8e30d71dfb", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d37eb797-f273-43c2-9004-b947891cce55:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d37eb797-f273-43c2-9004-b947891cce55:indexpattern-datasource-layer-070f5dbc-7687-4e97-9a57-5542b401c13f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6509dcc9-bb9c-4c1f-80e9-612f67ada340:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6509dcc9-bb9c-4c1f-80e9-612f67ada340:indexpattern-datasource-layer-df8e3a91-700b-428a-a763-525076e4d3c8", + "type": "index-pattern" + }, + { + "id": "ti_otx-6bc35230-71fd-11ec-9910-d1ceb8a1734b", + "name": "tag-ti_otx-6bc35230-71fd-11ec-9910-d1ceb8a1734b", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_otx/1.2.2/kibana/dashboard/ti_otx-83b01770-71f3-11ec-9910-d1ceb8a1734b.json b/packages/ti_otx/1.2.2/kibana/dashboard/ti_otx-83b01770-71f3-11ec-9910-d1ceb8a1734b.json new file mode 100755 index 0000000000..07df8ecd9e --- /dev/null +++ b/packages/ti_otx/1.2.2/kibana/dashboard/ti_otx-83b01770-71f3-11ec-9910-d1ceb8a1734b.json @@ -0,0 +1,112 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about file type indicators from the Alienvault OTX integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"threat.indicator.type\",\"negate\":false,\"params\":{\"query\":\"file\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"threat.indicator.type\":\"file\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"ti_otx.threat\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"ti_otx.threat\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n[OTX Overview](/app/dashboards#/view/ti_otx-7da241a0-71f3-11ec-9910-d1ceb8a1734b) \\n**[OTX Files (This Page)](/app/dashboards#/view/ti_otx-83b01770-71f3-11ec-9910-d1ceb8a1734b)** \\n[OTX URLs](/app/dashboards#/view/ti_otx-8957ff80-71f3-11ec-9910-d1ceb8a1734b) \\n\\n[Integrations Page](/app/integrations/detail/ti_otx/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is an overview of the different threat intelligence indicators with a **threat.indicator.type: file**.\\n\\nThe dashboard is made to provide general statistics and show the health of your indicators like hash type counters, popular domains, statistics about how many unique indicators are ingested and other relevant information.\",\"openLinksInNewTab\":false},\"title\":\"Files Navigation Textbox [Logs AbuseCH]\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":35,\"i\":\"09ba3dc0-e2e2-4799-b47f-bb919bf290a1\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"09ba3dc0-e2e2-4799-b47f-bb919bf290a1\",\"title\":\"Files Navigation Textbox [Logs OTX]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-98786f76-dac4-4fc7-9cad-8bfce17bd00d\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-2e2257a0-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"98786f76-dac4-4fc7-9cad-8bfce17bd00d\":{\"columnOrder\":[\"8622e147-406f-4711-8f68-e2425614106e\"],\"columns\":{\"8622e147-406f-4711-8f68-e2425614106e\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique File types\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.type\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"8622e147-406f-4711-8f68-e2425614106e\",\"layerId\":\"98786f76-dac4-4fc7-9cad-8bfce17bd00d\",\"layerType\":\"data\"}},\"title\":\"Unique File Types [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"31ea16d1-7591-42a7-b773-6fca00e5db14\",\"w\":6,\"x\":7,\"y\":0},\"panelIndex\":\"31ea16d1-7591-42a7-b773-6fca00e5db14\",\"title\":\"Unique File Types [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-85ad73b3-3b76-49f1-ad20-6256b58918f8\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-28549810-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"85ad73b3-3b76-49f1-ad20-6256b58918f8\":{\"columnOrder\":[\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\"],\"columns\":{\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SHA1\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.sha1\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\",\"layerId\":\"85ad73b3-3b76-49f1-ad20-6256b58918f8\",\"layerType\":\"data\"}},\"title\":\"Unique SHA1 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea\",\"w\":6,\"x\":13,\"y\":0},\"panelIndex\":\"e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea\",\"title\":\"Unique SHA1 [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-4ee4a490-3b37-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8\":{\"columnOrder\":[\"06b603cb-c9fb-493a-9ca4-e6502ca12054\",\"de0e531b-dda7-461f-9783-3ab9267d202e\"],\"columns\":{\"06b603cb-c9fb-493a-9ca4-e6502ca12054\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.file.type\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"de0e531b-dda7-461f-9783-3ab9267d202e\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.file.type\"},\"de0e531b-dda7-461f-9783-3ab9267d202e\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"06b603cb-c9fb-493a-9ca4-e6502ca12054\"],\"layerId\":\"222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"de0e531b-dda7-461f-9783-3ab9267d202e\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"treemap\"}},\"title\":\"File Types [Logs AbuseCH]\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"5f1d0cf1-c331-4495-99d5-5e80d023c482\",\"w\":21,\"x\":22,\"y\":0},\"panelIndex\":\"5f1d0cf1-c331-4495-99d5-5e80d023c482\",\"title\":\"File Types [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-b83c382d-fab9-4e60-a632-475e221cc20c\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-d888e3e0-3b38-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"b83c382d-fab9-4e60-a632-475e221cc20c\":{\"columnOrder\":[\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\"],\"columns\":{\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique MD5\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.md5\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\",\"layerId\":\"b83c382d-fab9-4e60-a632-475e221cc20c\",\"layerType\":\"data\"}},\"title\":\"Unique MD5 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98\",\"w\":6,\"x\":7,\"y\":8},\"panelIndex\":\"4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98\",\"title\":\"Unique MD5 [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-49b7070a-f1d3-46e1-a980-2f6d6d130167\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-5d6111a0-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"49b7070a-f1d3-46e1-a980-2f6d6d130167\":{\"columnOrder\":[\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\"],\"columns\":{\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SHA256\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.sha256\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\",\"layerId\":\"49b7070a-f1d3-46e1-a980-2f6d6d130167\",\"layerType\":\"data\"}},\"title\":\"Unique SHA256 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"93e32abe-87e3-469e-b7e9-a7ef7dfa2cce\",\"w\":6,\"x\":13,\"y\":8},\"panelIndex\":\"93e32abe-87e3-469e-b7e9-a7ef7dfa2cce\",\"title\":\"Unique SHA256 [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-118b51de-bd55-4ed6-b916-c939ad73b2c3\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"b8c9d8e0-3bb8-11ec-ae8c-7d00429ad420\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"118b51de-bd55-4ed6-b916-c939ad73b2c3\":{\"columnOrder\":[\"1ada77b6-5741-44ff-a00d-4653fca22f84\",\"dcc2a7b9-e44b-4681-ba02-bdea442ca9a5\"],\"columns\":{\"1ada77b6-5741-44ff-a00d-4653fca22f84\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top Countries\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"dcc2a7b9-e44b-4681-ba02-bdea442ca9a5\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.geo.country_iso_code\"},\"dcc2a7b9-e44b-4681-ba02-bdea442ca9a5\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Countries\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"1ada77b6-5741-44ff-a00d-4653fca22f84\"],\"layerId\":\"118b51de-bd55-4ed6-b916-c939ad73b2c3\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"metric\":\"dcc2a7b9-e44b-4681-ba02-bdea442ca9a5\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"pie\"}},\"title\":\"Top Countries [Logs AbuseCH]\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":19,\"i\":\"6189e979-9121-4247-9942-fa7a3cc3839c\",\"w\":20,\"x\":7,\"y\":16},\"panelIndex\":\"6189e979-9121-4247-9942-fa7a3cc3839c\",\"title\":\"Top Countries [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-06d9ac79-2055-437e-892c-de9ee07fe674\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"2d0c0ec0-3bbf-11ec-ae8c-7d00429ad420\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"06d9ac79-2055-437e-892c-de9ee07fe674\":{\"columnOrder\":[\"35f5321a-27f4-4076-9d1d-d326187f4689\",\"df062557-78a5-4a78-93f1-34583c809bc3\"],\"columns\":{\"35f5321a-27f4-4076-9d1d-d326187f4689\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"File Names\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"df062557-78a5-4a78-93f1-34583c809bc3\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.file.name\"},\"df062557-78a5-4a78-93f1-34583c809bc3\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"columnId\":\"35f5321a-27f4-4076-9d1d-d326187f4689\",\"isTransposed\":false},{\"columnId\":\"df062557-78a5-4a78-93f1-34583c809bc3\",\"isTransposed\":false}],\"layerId\":\"06d9ac79-2055-437e-892c-de9ee07fe674\",\"layerType\":\"data\"}},\"title\":\"Most popular file names [Logs AbuseCH]\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":19,\"i\":\"b733385b-14f8-4469-b777-86d0139cc56b\",\"w\":21,\"x\":27,\"y\":16},\"panelIndex\":\"b733385b-14f8-4469-b777-86d0139cc56b\",\"title\":\"Most popular file names [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs OTX] Files", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_otx-83b01770-71f3-11ec-9910-d1ceb8a1734b", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "31ea16d1-7591-42a7-b773-6fca00e5db14:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "31ea16d1-7591-42a7-b773-6fca00e5db14:indexpattern-datasource-layer-98786f76-dac4-4fc7-9cad-8bfce17bd00d", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea:indexpattern-datasource-layer-85ad73b3-3b76-49f1-ad20-6256b58918f8", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "5f1d0cf1-c331-4495-99d5-5e80d023c482:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "5f1d0cf1-c331-4495-99d5-5e80d023c482:indexpattern-datasource-layer-222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98:indexpattern-datasource-layer-b83c382d-fab9-4e60-a632-475e221cc20c", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "93e32abe-87e3-469e-b7e9-a7ef7dfa2cce:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "93e32abe-87e3-469e-b7e9-a7ef7dfa2cce:indexpattern-datasource-layer-49b7070a-f1d3-46e1-a980-2f6d6d130167", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6189e979-9121-4247-9942-fa7a3cc3839c:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6189e979-9121-4247-9942-fa7a3cc3839c:indexpattern-datasource-layer-118b51de-bd55-4ed6-b916-c939ad73b2c3", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b733385b-14f8-4469-b777-86d0139cc56b:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b733385b-14f8-4469-b777-86d0139cc56b:indexpattern-datasource-layer-06d9ac79-2055-437e-892c-de9ee07fe674", + "type": "index-pattern" + }, + { + "id": "ti_otx-6bc35230-71fd-11ec-9910-d1ceb8a1734b", + "name": "tag-ti_otx-6bc35230-71fd-11ec-9910-d1ceb8a1734b", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_otx/1.2.2/kibana/dashboard/ti_otx-8957ff80-71f3-11ec-9910-d1ceb8a1734b.json b/packages/ti_otx/1.2.2/kibana/dashboard/ti_otx-8957ff80-71f3-11ec-9910-d1ceb8a1734b.json new file mode 100755 index 0000000000..d6094d2b40 --- /dev/null +++ b/packages/ti_otx/1.2.2/kibana/dashboard/ti_otx-8957ff80-71f3-11ec-9910-d1ceb8a1734b.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about URL type indicators from the Alienvault OTX integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"threat.indicator.type\",\"negate\":false,\"params\":{\"query\":\"url\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"threat.indicator.type\":\"url\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"ti_otx.threat\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"ti_otx.threat\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n[OTX Overview](/app/dashboards#/view/ti_otx-7da241a0-71f3-11ec-9910-d1ceb8a1734b) \\n[OTX Files](/app/dashboards#/view/ti_otx-83b01770-71f3-11ec-9910-d1ceb8a1734b) \\n**[OTX URLs (This Page)](/app/dashboards#/view/ti_otx-8957ff80-71f3-11ec-9910-d1ceb8a1734b)** \\n\\n[Integrations Page](/app/integrations/detail/ti_otx/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is an overview of the different threat intelligence indicators with a **threat.indicator.type: url**. \\n\\nThe dashboard is made to provide general statistics and show the health of your indicators like popular domains, file extensions, statistics about how many unique indicators are ingested and other relevant information.\",\"openLinksInNewTab\":false},\"title\":\"\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":39,\"i\":\"4c3ed6e1-8b4e-4eab-8d84-70ed4f506216\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"4c3ed6e1-8b4e-4eab-8d84-70ed4f506216\",\"title\":\"Files Navigation Textbox [Logs OTX]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-88a112e1-6da1-49d3-9177-19f98280c200\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"88a112e1-6da1-49d3-9177-19f98280c200\":{\"columnOrder\":[\"604f1693-15a6-437d-af69-03588db8e471\"],\"columns\":{\"604f1693-15a6-437d-af69-03588db8e471\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Ports\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.port\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"604f1693-15a6-437d-af69-03588db8e471\",\"layerId\":\"88a112e1-6da1-49d3-9177-19f98280c200\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"c7c6e8dc-b649-434c-9650-8a1564d4d676\",\"w\":6,\"x\":7,\"y\":0},\"panelIndex\":\"c7c6e8dc-b649-434c-9650-8a1564d4d676\",\"title\":\"Unique Ports [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-a6fa56f8-32fa-405d-8771-dade4fe75d62\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"a6fa56f8-32fa-405d-8771-dade4fe75d62\":{\"columnOrder\":[\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\"],\"columns\":{\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Extensions\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.extension\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\",\"layerId\":\"a6fa56f8-32fa-405d-8771-dade4fe75d62\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"73a752f9-bde5-4396-8ede-e9e77a37182d\",\"w\":6,\"x\":13,\"y\":0},\"panelIndex\":\"73a752f9-bde5-4396-8ede-e9e77a37182d\",\"title\":\"Unique File Extensions [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-c94400ee-a135-4a99-9693-5879d29f7aad\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"c94400ee-a135-4a99-9693-5879d29f7aad\":{\"columnOrder\":[\"2934249f-fce5-4637-87ff-d2596d1b6ec5\"],\"columns\":{\"2934249f-fce5-4637-87ff-d2596d1b6ec5\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Domains\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.domain\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"2934249f-fce5-4637-87ff-d2596d1b6ec5\",\"layerId\":\"c94400ee-a135-4a99-9693-5879d29f7aad\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"02f1732b-a981-4fba-8b27-b944f2f3c98c\",\"w\":6,\"x\":19,\"y\":0},\"panelIndex\":\"02f1732b-a981-4fba-8b27-b944f2f3c98c\",\"title\":\"Unique Domains [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-9fa49c4c-5544-472d-afce-e51d6a5687fe\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"9fa49c4c-5544-472d-afce-e51d6a5687fe\":{\"columnOrder\":[\"15e2b5ad-2040-4253-89a6-60f085c66f86\",\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\"],\"columns\":{\"15e2b5ad-2040-4253-89a6-60f085c66f86\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.url.extension\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.extension\"},\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"15e2b5ad-2040-4253-89a6-60f085c66f86\",\"15e2b5ad-2040-4253-89a6-60f085c66f86\"],\"layerId\":\"9fa49c4c-5544-472d-afce-e51d6a5687fe\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"treemap\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":31,\"i\":\"fda93ed1-72f0-4489-80b7-9e69d14f30aa\",\"w\":23,\"x\":25,\"y\":0},\"panelIndex\":\"fda93ed1-72f0-4489-80b7-9e69d14f30aa\",\"title\":\"Most Popular File Extensions [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-0f63318a-a857-4d83-89ce-a94e2242b79e\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"0f63318a-a857-4d83-89ce-a94e2242b79e\":{\"columnOrder\":[\"df0791a6-247c-4434-a43a-fdea7577ca34\",\"77a48096-02aa-4b7a-8a7b-131fc38988bd\"],\"columns\":{\"77a48096-02aa-4b7a-8a7b-131fc38988bd\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"df0791a6-247c-4434-a43a-fdea7577ca34\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.url.scheme\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"77a48096-02aa-4b7a-8a7b-131fc38988bd\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.scheme\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"df0791a6-247c-4434-a43a-fdea7577ca34\"],\"layerId\":\"0f63318a-a857-4d83-89ce-a94e2242b79e\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"metric\":\"77a48096-02aa-4b7a-8a7b-131fc38988bd\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"ab7ab31c-e76f-4613-b17d-fdd909f17e0d\",\"w\":18,\"x\":7,\"y\":8},\"panelIndex\":\"ab7ab31c-e76f-4613-b17d-fdd909f17e0d\",\"title\":\"Percentage of URL Schema used [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-db89074c-e1fe-4091-bdb1-e42a36e82bac\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"db89074c-e1fe-4091-bdb1-e42a36e82bac\":{\"columnOrder\":[\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\",\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\"],\"columns\":{\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Domains\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.domain\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"columnId\":\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\",\"isTransposed\":false},{\"columnId\":\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\",\"isTransposed\":false}],\"layerId\":\"db89074c-e1fe-4091-bdb1-e42a36e82bac\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"8994501a-1550-4cf2-857f-d6b6491ffb62\",\"w\":18,\"x\":7,\"y\":23},\"panelIndex\":\"8994501a-1550-4cf2-857f-d6b6491ffb62\",\"title\":\"Most Popular Domains [Logs OTX]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs OTX] URLs", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_otx-8957ff80-71f3-11ec-9910-d1ceb8a1734b", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c7c6e8dc-b649-434c-9650-8a1564d4d676:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c7c6e8dc-b649-434c-9650-8a1564d4d676:indexpattern-datasource-layer-88a112e1-6da1-49d3-9177-19f98280c200", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "73a752f9-bde5-4396-8ede-e9e77a37182d:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "73a752f9-bde5-4396-8ede-e9e77a37182d:indexpattern-datasource-layer-a6fa56f8-32fa-405d-8771-dade4fe75d62", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "02f1732b-a981-4fba-8b27-b944f2f3c98c:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "02f1732b-a981-4fba-8b27-b944f2f3c98c:indexpattern-datasource-layer-c94400ee-a135-4a99-9693-5879d29f7aad", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "fda93ed1-72f0-4489-80b7-9e69d14f30aa:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "fda93ed1-72f0-4489-80b7-9e69d14f30aa:indexpattern-datasource-layer-9fa49c4c-5544-472d-afce-e51d6a5687fe", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ab7ab31c-e76f-4613-b17d-fdd909f17e0d:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ab7ab31c-e76f-4613-b17d-fdd909f17e0d:indexpattern-datasource-layer-0f63318a-a857-4d83-89ce-a94e2242b79e", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8994501a-1550-4cf2-857f-d6b6491ffb62:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8994501a-1550-4cf2-857f-d6b6491ffb62:indexpattern-datasource-layer-db89074c-e1fe-4091-bdb1-e42a36e82bac", + "type": "index-pattern" + }, + { + "id": "ti_otx-6bc35230-71fd-11ec-9910-d1ceb8a1734b", + "name": "tag-ti_otx-6bc35230-71fd-11ec-9910-d1ceb8a1734b", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_otx/1.2.2/kibana/tag/ti_otx-6bc35230-71fd-11ec-9910-d1ceb8a1734b.json b/packages/ti_otx/1.2.2/kibana/tag/ti_otx-6bc35230-71fd-11ec-9910-d1ceb8a1734b.json new file mode 100755 index 0000000000..31f9238c67 --- /dev/null +++ b/packages/ti_otx/1.2.2/kibana/tag/ti_otx-6bc35230-71fd-11ec-9910-d1ceb8a1734b.json @@ -0,0 +1,14 @@ +{ + "attributes": { + "color": "#6092C0", + "description": "", + "name": "OTX" + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_otx-6bc35230-71fd-11ec-9910-d1ceb8a1734b", + "migrationVersion": { + "tag": "8.0.0" + }, + "references": [], + "type": "tag" +} \ No newline at end of file diff --git a/packages/ti_otx/1.2.2/manifest.yml b/packages/ti_otx/1.2.2/manifest.yml new file mode 100755 index 0000000000..0abe4dc6bd --- /dev/null +++ b/packages/ti_otx/1.2.2/manifest.yml @@ -0,0 +1,26 @@ +name: ti_otx +title: AlienVault OTX +version: 1.2.2 +release: ga +description: Collect threat intelligence from AlienVault OTX with Elastic Agent. +type: integration +format_version: 1.0.0 +license: basic +categories: [security] +conditions: + kibana.version: ^8.0.0 +icons: + - src: /img/otx.svg + title: Alienvault OTX + size: 216x216 + type: image/svg+xml +policy_templates: + - name: ti_otx + title: Alienvault OTX + description: Collect threat intelligence from the Alienvault OTX + inputs: + - type: httpjson + title: "Collect ALienvault OTX logs via API" + description: "Collect Alienvault OTX logs via API" +owner: + github: elastic/security-external-integrations diff --git a/packages/ti_recordedfuture/0.1.2/changelog.yml b/packages/ti_recordedfuture/0.1.2/changelog.yml new file mode 100755 index 0000000000..a4bcae0216 --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/changelog.yml @@ -0,0 +1,16 @@ +# newer versions go on top +- version: "0.1.2" + changes: + - description: Add field mapping for event.created + type: enhancement + link: https://github.com/elastic/integrations/pull/3042 +- version: "0.1.1" + changes: + - description: Add documentation for multi-fields + type: enhancement + link: https://github.com/elastic/integrations/pull/2916 +- version: "0.1.0" + changes: + - description: Initial release + type: enhancement + link: https://github.com/elastic/integrations/pull/2757 diff --git a/packages/ti_recordedfuture/0.1.2/data_stream/threat/agent/stream/httpjson.yml.hbs b/packages/ti_recordedfuture/0.1.2/data_stream/threat/agent/stream/httpjson.yml.hbs new file mode 100755 index 0000000000..1e7156ac8c --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/data_stream/threat/agent/stream/httpjson.yml.hbs @@ -0,0 +1,33 @@ +config_version: "2" +interval: {{interval}} +request.method: "GET" + +{{#if custom_url}} +request.url: "{{ custom_url }}" +{{else}} +request.url: "{{ endpoint }}/{{ entity }}/risklist?format=csv/splunk&gzip=false&list={{ list }}" +{{/if}} +{{#if proxy_url }} +request.proxy_url: {{proxy_url}} +{{/if}} +request.transforms: +{{#if api_token}} +- set: + target: header.X-RFToken + value: {{ api_token }} +{{/if}} +response.decode_as: text/csv +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/ti_recordedfuture/0.1.2/data_stream/threat/agent/stream/logfile.yml.hbs b/packages/ti_recordedfuture/0.1.2/data_stream/threat/agent/stream/logfile.yml.hbs new file mode 100755 index 0000000000..f2c693bdde --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/data_stream/threat/agent/stream/logfile.yml.hbs @@ -0,0 +1,20 @@ +paths: +{{#each paths as |path i|}} + - {{path}} +{{/each}} +exclude_files: [".gz$"] +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +processors: +{{#if processors}} +{{processors}} +{{/if}} + - add_locale: ~ \ No newline at end of file diff --git a/packages/ti_recordedfuture/0.1.2/data_stream/threat/elasticsearch/ingest_pipeline/decode_csv.yml b/packages/ti_recordedfuture/0.1.2/data_stream/threat/elasticsearch/ingest_pipeline/decode_csv.yml new file mode 100755 index 0000000000..86c06b7a1d --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/data_stream/threat/elasticsearch/ingest_pipeline/decode_csv.yml @@ -0,0 +1,43 @@ +--- +description: Pipeline to decode CSV risklists from Recorded Future threat intel. +processors: + - csv: + field: event.original + target_fields: + - _tmp_.col0 + - _tmp_.col1 + - _tmp_.col2 + - _tmp_.col3 + - _tmp_.col4 + - drop: + description: 'Drops the CSV header line.' + if: 'ctx._tmp_.col0 == "Name"' + +# This supports the default CSV risklists: +# 4-column for url, domain and IPs. +# 5-column for hash. + - script: + description: Maps the CSV entries to fields. + lang: painless + params: + default: + col0: Name + col1: Risk + col2: RiskString + col3: EvidenceDetails + hash: + col0: Name + col1: Algorithm + col2: Risk + col3: RiskString + col4: EvidenceDetails + source: > + def cols = params[ ctx._tmp_.col4 == null? "default" : "hash" ]; + def src = ctx._tmp_; + def dst = new HashMap(); + for (entry in cols.entrySet()) { + dst[entry.getValue()] = src[entry.getKey()]; + } + ctx['json'] = dst; + - remove: + field: _tmp_ diff --git a/packages/ti_recordedfuture/0.1.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml b/packages/ti_recordedfuture/0.1.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..2c2ec01047 --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,212 @@ +--- +description: Pipeline for parsing Recorded Future threat intel. +processors: +# +# Set basic ECS fields. +# + - set: + field: ecs.version + value: "8.0" + - set: + field: event.dataset + value: "ti_recordedfuture.threat" + - set: + field: event.kind + value: enrichment + - set: + field: event.category + value: threat + - set: + field: event.type + value: indicator + - set: + field: threat.feed.name + value: "Recorded Future" +# +# TODO: Add dashboard +# +# - set: +# field: threat.feed.dashboard_id +# value: "recordedfuture-96fe1e60-4261-11ec-b7be-d3026acdf1cf" + + - rename: + field: message + target_field: event.original + ignore_missing: true + +# +# Decode event.original as JSON if it starts with the "{" character. +# This is the common case when events are ingested from the API, as httpjson +# transforms the CSV to a JSON message. +# + - json: + field: event.original + target_field: json + if: 'ctx.event?.original != null && ctx.event.original.startsWith("{")' + on_failure: + - fail: + message: "Failed decoding message field as JSON: {{{ _ingest.on_failure_message }}}" + +# +# Decode event.original as CSV when the above processor didn't execute. +# This is used when ingesting CSV lines from a file. +# + - pipeline: + name: '{{ IngestPipeline "decode_csv" }}' + if: 'ctx.json == null' + on_failure: + - fail: + message: "Failed decoding message field as CSV: {{{ _ingest.on_failure_message }}}" + +# +# Decode EvidenceDetails column as JSON. +# + - json: + field: json.EvidenceDetails + target_field: _temp_.EvidenceDetails + ignore_failure: true + + - rename: + field: _temp_.EvidenceDetails.EvidenceDetails + target_field: json.evidence_details + ignore_missing: true + +# +# Hash indicators (threat.indicator.type=file) +# As risklist indicators don't have a "type" field, it's necessary +# to detect the kind of indicator in the Name field. +# +# An indicator is of type `hash` when the Algorithm field is present. +# + - set: + field: threat.indicator.type + value: file + if: 'ctx.json.Algorithm != null' + - script: + lang: painless + description: > + Map file hashes. + if: "ctx.json.Algorithm != null" + params: + MD5: md5 + SHA-1: sha1 + SHA-256: sha256 + SHA-384: sha384 + SHA-512: sha512 + source: >- + def key = params[ctx.json.Algorithm]; + if (key == null) { + throw new Exception("Unsupported hash algorithm '" + ctx.json.Algorithm + "'"); + } + def hashes = [key:ctx.json.Name]; + ctx["_hashes"] = hashes; + on_failure: + - append: + field: error.message + value: "Failed to map fileHashes field: {{{ _ingest.on_failure_message }}}" + - rename: + field: _hashes + target_field: threat.indicator.file.hash + ignore_missing: true + +# +# IP indicators (threat.indicator.type=ipvN-addr) +# +# An indicator is of type `ip` if Name is a valid IP address. +# + - convert: + field: json.Name + target_field: threat.indicator.ip + type: ip + ignore_failure: true + if: 'ctx.threat?.indicator?.type == null' + - set: + field: threat.indicator.type + value: ipv4-addr + if: 'ctx.threat?.indicator?.ip != null && !ctx.threat.indicator.ip.contains(":")' + - set: + field: threat.indicator.type + value: ipv6-addr + if: 'ctx.threat?.indicator?.ip != null && ctx.threat.indicator.ip.contains(":")' + +# +# URL indicators (threat.indicator.type=url) +# An indicator is of type `url` if Name contains a slash character. +# + - set: + field: threat.indicator.type + value: url + if: 'ctx.threat?.indicator?.type == null && ctx.json.Name.contains("/")' + - uri_parts: + field: json.Name + target_field: threat.indicator.url + keep_original: true + if: 'ctx.threat?.indicator?.type == "url"' +# +# Domain indicators (threat.indicator.type=domain) +# This is a catch-all type. +# + - set: + field: threat.indicator.type + value: domain-name + if: 'ctx.threat?.indicator?.type == null' + - set: + field: threat.indicator.url.domain + value: '{{{ json.Name }}}' + ignore_empty_value: true + if: 'ctx.threat?.indicator?.type == "domain-name" && ctx.threat?.indicator?.url?.domain == null' + +# +# Normalize Risk +# + - convert: + field: json.Risk + target_field: event.risk_score + ignore_missing: true + type: float + on_failure: + - append: + field: error.message + value: "Risk score `{{{ json.Risk }}}` cannot be converted to float: {{{ _ingest.on_failure_message }}}" + +# +# Fingerprint event: _id = hash(dataset + indicator type + indicator value) +# + - fingerprint: + fields: + - event.dataset + - threat.indicator.type + - json.Name + target_field: "_id" + +# +# Save fields without an ECS mapping under `recordedfuture`. +# + - rename: + field: json.RiskString + target_field: json.risk_string + ignore_missing: true + - rename: + field: json + target_field: recordedfuture + +# +# Cleanup +# + - remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_failure: true + ignore_missing: true + - remove: + field: + - recordedfuture.Algorithm + - recordedfuture.EvidenceDetails + - recordedfuture.Name + - recordedfuture.Risk + - _temp_ + ignore_missing: true +on_failure: + - append: + field: error.message + value: "{{{ _ingest.on_failure_message }}}" diff --git a/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/agent.yml b/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/agent.yml new file mode 100755 index 0000000000..da4e652c53 --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/agent.yml @@ -0,0 +1,198 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + diff --git a/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/base-fields.yml b/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/base-fields.yml new file mode 100755 index 0000000000..1fbc652b8a --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/base-fields.yml @@ -0,0 +1,31 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset name. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module + value: ti_recordedfuture +- name: event.dataset + type: constant_keyword + description: Event dataset + value: ti_recordedfuture.threat +- name: threat.feed.name + type: constant_keyword + description: Display friendly feed name + value: Recorded Future +# +# TODO: Add dashboard +# +#- name: threat.feed.dashboard_id +# type: constant_keyword +# description: Dashboard ID used for Kibana CTI UI +# value: recordedfuture-96fe1e60-4261-11ec-b7be-d3026acdf1cf +- name: "@timestamp" + type: date + description: Event timestamp. diff --git a/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/beats.yml b/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/beats.yml new file mode 100755 index 0000000000..cb44bb2944 --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/beats.yml @@ -0,0 +1,12 @@ +- name: input.type + type: keyword + description: Type of Filebeat input. +- name: log.flags + type: keyword + description: Flags for the log file. +- name: log.offset + type: long + description: Offset of the entry in the log file. +- name: log.file.path + type: keyword + description: Path to the log file. diff --git a/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/ecs.yml b/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/ecs.yml new file mode 100755 index 0000000000..1a807ca505 --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/ecs.yml @@ -0,0 +1,191 @@ +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: |- + For log events the message field contains the log message, optimized for viewing in a log viewer. + For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. + If multiple messages exist, they can be combined into one message. + name: message + type: match_only_text +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: Error message. + name: error.message + type: match_only_text +- description: |- + The numeric severity of the event according to your event source. + What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. + The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. + name: event.severity + type: long +- description: |- + This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. + `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. + This field is an array. This will allow proper categorization of some events that fall in multiple categories. + name: event.category + type: keyword +- description: |- + Timestamp when an event arrived in the central data store. + This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. + In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`. + name: event.ingested + type: date +- description: |- + event.created contains the date/time when the event was first read by an agent, or by your pipeline. + This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. + In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. + In case the two timestamps are identical, @timestamp should be used. + name: event.created + type: date +- description: |- + This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. + `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. + The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. + name: event.kind + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. + `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. + This field is an array. This will allow proper categorization of some events that fall in multiple event types. + name: event.type + type: keyword +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- description: The date and time when intelligence source first reported sighting this indicator. + name: threat.indicator.first_seen + type: date +- description: The date and time when intelligence source last reported sighting this indicator. + name: threat.indicator.last_seen + type: date +- description: |- + Type of indicator as represented by Cyber Observable in STIX 2.0. + Recommended values: + * autonomous-system + * artifact + * directory + * domain-name + * email-addr + * file + * ipv4-addr + * ipv6-addr + * mac-addr + * mutex + * port + * process + * software + * url + * user-account + * windows-registry-key + * x509-certificate + name: threat.indicator.type + type: keyword +- description: Identifies a threat indicator as an IP address (irrespective of direction). + name: threat.indicator.ip + type: ip +- description: |- + Domain of the url, such as "www.elastic.co". + In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. + If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. + name: threat.indicator.url.domain + type: keyword +- description: If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.full + type: wildcard +- description: |- + The field contains the file extension from the original request url, excluding the leading dot. + The file extension is only set if it exists, as not every url has a file extension. + The leading period must not be included. For example, the value must be "png", not ".png". + Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). + name: threat.indicator.url.extension + type: keyword +- description: |- + Unmodified original url as seen in the event source. + Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. + This field is meant to represent the URL as it was observed, complete or not. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.original + type: wildcard +- description: Path of the request, such as "/search". + name: threat.indicator.url.path + type: wildcard +- description: Port of the request, such as 443. + name: threat.indicator.url.port + type: long +- description: |- + Scheme of the request, such as "https". + Note: The `:` is not part of the scheme. + name: threat.indicator.url.scheme + type: keyword +- description: |- + The query field describes the query string of the request, such as "q=elasticsearch". + The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. + name: threat.indicator.url.query + type: keyword +- description: MD5 hash. + name: threat.indicator.file.hash.md5 + type: keyword +- description: SHA1 hash. + name: threat.indicator.file.hash.sha1 + type: keyword +- description: SHA256 hash. + name: threat.indicator.file.hash.sha256 + type: keyword +- description: SHA512 hash. + name: threat.indicator.file.hash.sha512 + type: keyword +- description: Identifies a threat indicator as an email address (irrespective of direction). + name: threat.indicator.email.address + type: keyword +- description: The name of the indicator's provider. + name: threat.indicator.provider + type: keyword +- description: |- + Traffic Light Protocol sharing markings. + Recommended values are: + * WHITE + * GREEN + * AMBER + * RED + name: threat.indicator.marking.tlp + type: keyword +- description: |- + Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. + Expected values are: + * Not Specified + * None + * Low + * Medium + * High + name: threat.indicator.confidence + type: keyword +- description: Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. + name: threat.indicator.as.number + type: long +- description: Organization name. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.as.organization.name + type: keyword +- description: Longitude and latitude. + name: threat.indicator.geo.location.lat + type: geo_point +- description: Longitude and latitude. + name: threat.indicator.geo.location.lon + type: geo_point +- description: Country ISO code. + name: threat.indicator.geo.country_iso_code + type: keyword diff --git a/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/fields.yml b/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/fields.yml new file mode 100755 index 0000000000..a81fd75d00 --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/data_stream/threat/fields/fields.yml @@ -0,0 +1,21 @@ +- name: recordedfuture + type: group + description: > + Fields for Recorded Future Threat Intel + + fields: + - name: evidence_details + type: flattened + description: > + List of sightings used as evidence for this indicator. + + - name: name + type: keyword + description: > + Indicator value. + + - name: risk_string + type: keyword + description: > + Details of risk rules observed. + diff --git a/packages/ti_recordedfuture/0.1.2/data_stream/threat/manifest.yml b/packages/ti_recordedfuture/0.1.2/data_stream/threat/manifest.yml new file mode 100755 index 0000000000..dfc711d668 --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/data_stream/threat/manifest.yml @@ -0,0 +1,125 @@ +type: logs +title: Recorded Future +streams: + - input: logfile + enabled: false + template_path: logfile.yml.hbs + title: Recorded Future CSV file + description: Reads indicators from a Recorded Future CSV file. + vars: + - name: paths + type: text + title: Paths + multi: true + required: true + show_user: true + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - recordedfuture + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + - input: httpjson + template_path: httpjson.yml.hbs + title: Recorded Future risklist + description: Receives indicators from Recorded Future risklist endpoints. + vars: + - name: entity + type: text + title: Entity + description: The type of entity to fetch. One of domain, hash, ip or url. + multi: false + required: true + show_user: true + default: domain + - name: list + type: text + title: List + description: List to fetch for the given entity. + default: default + multi: false + required: true + show_user: true + - name: interval + type: text + title: Interval between risklist downloads. + description: Use Go Duration syntax (eg. 1h) + default: "1h" + multi: false + required: true + show_user: true + - name: api_token + type: text + title: API Token + description: Recorded Future API Token (RF_TOKEN). + multi: false + required: true + show_user: true + - name: custom_url + type: url + title: Custom URL + description: URL to download a custom Fusion File. + multi: false + required: false + show_user: false + - name: endpoint + type: url + title: API Endpoint + description: Base API URL. + multi: false + required: true + show_user: false + default: https://api.recordedfuture.com/v2 + - name: proxy_url + type: url + title: Proxy URL + description: Optional proxy server to use. + multi: false + required: false + show_user: false + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - recordedfuture + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + diff --git a/packages/ti_recordedfuture/0.1.2/data_stream/threat/sample_event.json b/packages/ti_recordedfuture/0.1.2/data_stream/threat/sample_event.json new file mode 100755 index 0000000000..b26841f9b8 --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/data_stream/threat/sample_event.json @@ -0,0 +1,110 @@ +{ + "@timestamp": "2022-04-11T09:21:48.260Z", + "agent": { + "ephemeral_id": "b69c55be-abc6-4a16-900f-986a2cc693a0", + "id": "967e40bc-86fa-4632-b571-afd40cfbcb8a", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "data_stream": { + "dataset": "ti_recordedfuture.threat", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0" + }, + "elastic_agent": { + "id": "967e40bc-86fa-4632-b571-afd40cfbcb8a", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "dataset": "ti_recordedfuture.threat", + "ingested": "2022-04-11T09:21:49Z", + "kind": "enrichment", + "risk_score": 87, + "timezone": "+00:00", + "type": "indicator" + }, + "input": { + "type": "log" + }, + "log": { + "file": { + "path": "/tmp/service_logs/rf_url_default.csv" + }, + "offset": 45 + }, + "recordedfuture": { + "evidence_details": [ + { + "Criticality": 1, + "CriticalityLabel": "Unusual", + "EvidenceString": "66 sightings on 22 sources including: Ars Technica, fook.news, urdupresss.com, HackDig Posts, apple.news. Most recent link (Jul 20, 2021): https://techsecuritenews.com/solarwinds-pirates-utilisent-nouvelle-faille-zero-day-attaques/", + "MitigationString": "", + "Name": "defangedURL", + "Rule": "Historically Reported as a Defanged URL", + "Sources": [ + "Ctq", + "idn:fook.news", + "idn:urdupresss.com", + "POs2u-", + "idn:apple.news", + "idn:cryptoinfoos.com.ng", + "g9rk5F", + "idn:thewindowsupdate.com", + "idn:nationalcybersecuritynews.today", + "gBDK5G", + "idn:microsoft.com", + "idn:techsecuritenews.com", + "idn:mblogs.info", + "J6UzbO", + "idn:viralamo.com", + "idn:sellorbuyhomefast.com", + "idn:crazyboy.tech", + "idn:times24h.com", + "idn:buzzfeeg.com", + "idn:dsmenders.com", + "WroSbs", + "idn:vzonetvgh.com" + ], + "Timestamp": "2021-07-20T00:00:00.000Z" + }, + { + "Criticality": 3, + "CriticalityLabel": "Malicious", + "EvidenceString": "1 sighting on 1 source: Insikt Group. 1 report: SolarWinds Fixes Critical Vulnerability in Serv-U Managed File Transfer and Secure FTP Products. Most recent link (Jul 10, 2021): https://app.recordedfuture.com/live/sc/1GnDrn8zigTd", + "MitigationString": "", + "Name": "recentAnalystNote", + "Rule": "Recently Reported by Insikt Group", + "Sources": [ + "VKz42X" + ], + "Timestamp": "2021-07-10T00:00:00.000Z" + } + ], + "risk_string": "2/24" + }, + "tags": [ + "forwarded", + "recordedfuture" + ], + "threat": { + "feed": { + "name": "Recorded Future" + }, + "indicator": { + "type": "url", + "url": { + "domain": "144.34.179.162", + "original": "http://144.34.179.162/a", + "path": "/a", + "scheme": "http" + } + } + } +} \ No newline at end of file diff --git a/packages/ti_recordedfuture/0.1.2/docs/README.md b/packages/ti_recordedfuture/0.1.2/docs/README.md new file mode 100755 index 0000000000..b6d3fb5301 --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/docs/README.md @@ -0,0 +1,215 @@ +# Recorded Future Integration + +The Recorded Future integration fetches _risklists_ from the Recorded Future API. +It supports `domain`, `hash`, `ip` and `url` entities. + +In order to use it you need to define the `entity` and `list` to fetch. Check with +Recorded Future for the available lists for each entity. To fetch indicators +from multiple entities, it's necessary to define one integration for each. + +Alternatively, it's also possible to use the integration to fetch custom Fusion files +by supplying the URL to the CSV file as the _Custom_ _URL_ configuration option. + +An example event for `threat` looks as following: + +```json +{ + "@timestamp": "2022-04-11T09:21:48.260Z", + "agent": { + "ephemeral_id": "b69c55be-abc6-4a16-900f-986a2cc693a0", + "id": "967e40bc-86fa-4632-b571-afd40cfbcb8a", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "data_stream": { + "dataset": "ti_recordedfuture.threat", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0" + }, + "elastic_agent": { + "id": "967e40bc-86fa-4632-b571-afd40cfbcb8a", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "dataset": "ti_recordedfuture.threat", + "ingested": "2022-04-11T09:21:49Z", + "kind": "enrichment", + "risk_score": 87, + "timezone": "+00:00", + "type": "indicator" + }, + "input": { + "type": "log" + }, + "log": { + "file": { + "path": "/tmp/service_logs/rf_url_default.csv" + }, + "offset": 45 + }, + "recordedfuture": { + "evidence_details": [ + { + "Criticality": 1, + "CriticalityLabel": "Unusual", + "EvidenceString": "66 sightings on 22 sources including: Ars Technica, fook.news, urdupresss.com, HackDig Posts, apple.news. Most recent link (Jul 20, 2021): https://techsecuritenews.com/solarwinds-pirates-utilisent-nouvelle-faille-zero-day-attaques/", + "MitigationString": "", + "Name": "defangedURL", + "Rule": "Historically Reported as a Defanged URL", + "Sources": [ + "Ctq", + "idn:fook.news", + "idn:urdupresss.com", + "POs2u-", + "idn:apple.news", + "idn:cryptoinfoos.com.ng", + "g9rk5F", + "idn:thewindowsupdate.com", + "idn:nationalcybersecuritynews.today", + "gBDK5G", + "idn:microsoft.com", + "idn:techsecuritenews.com", + "idn:mblogs.info", + "J6UzbO", + "idn:viralamo.com", + "idn:sellorbuyhomefast.com", + "idn:crazyboy.tech", + "idn:times24h.com", + "idn:buzzfeeg.com", + "idn:dsmenders.com", + "WroSbs", + "idn:vzonetvgh.com" + ], + "Timestamp": "2021-07-20T00:00:00.000Z" + }, + { + "Criticality": 3, + "CriticalityLabel": "Malicious", + "EvidenceString": "1 sighting on 1 source: Insikt Group. 1 report: SolarWinds Fixes Critical Vulnerability in Serv-U Managed File Transfer and Secure FTP Products. Most recent link (Jul 10, 2021): https://app.recordedfuture.com/live/sc/1GnDrn8zigTd", + "MitigationString": "", + "Name": "recentAnalystNote", + "Rule": "Recently Reported by Insikt Group", + "Sources": [ + "VKz42X" + ], + "Timestamp": "2021-07-10T00:00:00.000Z" + } + ], + "risk_string": "2/24" + }, + "tags": [ + "forwarded", + "recordedfuture" + ], + "threat": { + "feed": { + "name": "Recorded Future" + }, + "indicator": { + "type": "url", + "url": { + "domain": "144.34.179.162", + "original": "http://144.34.179.162/a", + "path": "/a", + "scheme": "http" + } + } + } +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset name. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| error.message | Error message. | match_only_text | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset | constant_keyword | +| event.ingested | Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` \< `event.created` \< `event.ingested`. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.severity | The numeric severity of the event according to your event source. What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. | long | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Type of Filebeat input. | keyword | +| log.file.path | Path to the log file. | keyword | +| log.flags | Flags for the log file. | keyword | +| log.offset | Offset of the entry in the log file. | long | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| recordedfuture.evidence_details | List of sightings used as evidence for this indicator. | flattened | +| recordedfuture.name | Indicator value. | keyword | +| recordedfuture.risk_string | Details of risk rules observed. | keyword | +| tags | List of keywords used to tag each event. | keyword | +| threat.feed.name | Display friendly feed name | constant_keyword | +| threat.indicator.as.number | Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. | long | +| threat.indicator.as.organization.name | Organization name. | keyword | +| threat.indicator.as.organization.name.text | Multi-field of `threat.indicator.as.organization.name`. | match_only_text | +| threat.indicator.confidence | Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. Expected values are: \* Not Specified \* None \* Low \* Medium \* High | keyword | +| threat.indicator.email.address | Identifies a threat indicator as an email address (irrespective of direction). | keyword | +| threat.indicator.file.hash.md5 | MD5 hash. | keyword | +| threat.indicator.file.hash.sha1 | SHA1 hash. | keyword | +| threat.indicator.file.hash.sha256 | SHA256 hash. | keyword | +| threat.indicator.file.hash.sha512 | SHA512 hash. | keyword | +| threat.indicator.first_seen | The date and time when intelligence source first reported sighting this indicator. | date | +| threat.indicator.geo.country_iso_code | Country ISO code. | keyword | +| threat.indicator.geo.location.lat | Longitude and latitude. | geo_point | +| threat.indicator.geo.location.lon | Longitude and latitude. | geo_point | +| threat.indicator.ip | Identifies a threat indicator as an IP address (irrespective of direction). | ip | +| threat.indicator.last_seen | The date and time when intelligence source last reported sighting this indicator. | date | +| threat.indicator.marking.tlp | Traffic Light Protocol sharing markings. Recommended values are: \* WHITE \* GREEN \* AMBER \* RED | keyword | +| threat.indicator.provider | The name of the indicator's provider. | keyword | +| threat.indicator.type | Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: \* autonomous-system \* artifact \* directory \* domain-name \* email-addr \* file \* ipv4-addr \* ipv6-addr \* mac-addr \* mutex \* port \* process \* software \* url \* user-account \* windows-registry-key \* x509-certificate | keyword | +| threat.indicator.url.domain | Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. | keyword | +| threat.indicator.url.extension | The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). | keyword | +| threat.indicator.url.full | If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. | wildcard | +| threat.indicator.url.full.text | Multi-field of `threat.indicator.url.full`. | match_only_text | +| threat.indicator.url.original | Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not. | wildcard | +| threat.indicator.url.original.text | Multi-field of `threat.indicator.url.original`. | match_only_text | +| threat.indicator.url.path | Path of the request, such as "/search". | wildcard | +| threat.indicator.url.port | Port of the request, such as 443. | long | +| threat.indicator.url.query | The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. | keyword | +| threat.indicator.url.scheme | Scheme of the request, such as "https". Note: The `:` is not part of the scheme. | keyword | + diff --git a/packages/ti_recordedfuture/0.1.2/img/logo.svg b/packages/ti_recordedfuture/0.1.2/img/logo.svg new file mode 100755 index 0000000000..9bb0517562 --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/img/logo.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/packages/ti_recordedfuture/0.1.2/manifest.yml b/packages/ti_recordedfuture/0.1.2/manifest.yml new file mode 100755 index 0000000000..c97fd6fcd6 --- /dev/null +++ b/packages/ti_recordedfuture/0.1.2/manifest.yml @@ -0,0 +1,29 @@ +name: ti_recordedfuture +title: Recorded Future +version: 0.1.2 +release: beta +description: Collect threat intelligence from Recorded Future with Elastic Agent. +type: integration +format_version: 1.0.0 +license: basic +categories: [security] +conditions: + kibana.version: ^8.0.0 +icons: + - src: /img/logo.svg + title: Recorded Future + size: 216x216 + type: image/svg+xml +policy_templates: + - name: ti_recordedfuture + title: Recorded Future + description: Collect threat intelligence from Recorded Future. + inputs: + - type: httpjson + title: "Collect threat intelligence from Recorded Future risklists API." + description: "Use RecordedFuture API to fetch a risklist" + - type: logfile + title: "Collect threat intelligence from CSV file." + description: "Load indicators from a CSV file" +owner: + github: elastic/security-external-integrations diff --git a/packages/ti_threatq/1.2.2/changelog.yml b/packages/ti_threatq/1.2.2/changelog.yml new file mode 100755 index 0000000000..c22007ca9e --- /dev/null +++ b/packages/ti_threatq/1.2.2/changelog.yml @@ -0,0 +1,36 @@ +# newer versions go on top +- version: "1.2.2" + changes: + - description: Add event.created field mapping + type: enhancement + link: https://github.com/elastic/integrations/pull/3042 +- version: "1.2.1" + changes: + - description: Add documentation for multi-fields + type: enhancement + link: https://github.com/elastic/integrations/pull/2916 +- version: "1.2.0" + changes: + - description: Update to ECS 8.0 + type: enhancement + link: https://github.com/elastic/integrations/pull/2450 +- version: "1.1.0" + changes: + - description: Add threat.feed ECS fields and dashboard + type: enhancement + link: https://github.com/elastic/integrations/pull/2543 +- version: "1.0.2" + changes: + - description: Change test public IPs to the supported subset + type: bugfix + link: https://github.com/elastic/integrations/pull/2327 +- version: "1.0.1" + changes: + - description: Bumping minimum version + type: enhancement + link: https://github.com/elastic/integrations/pull/2063 +- version: "1.0.0" + changes: + - description: Initial release + type: enhancement + link: https://github.com/elastic/integrations/pull/1946 diff --git a/packages/ti_threatq/1.2.2/data_stream/threat/agent/stream/httpjson.yml.hbs b/packages/ti_threatq/1.2.2/data_stream/threat/agent/stream/httpjson.yml.hbs new file mode 100755 index 0000000000..f03799a9c9 --- /dev/null +++ b/packages/ti_threatq/1.2.2/data_stream/threat/agent/stream/httpjson.yml.hbs @@ -0,0 +1,56 @@ +config_version: "2" +interval: {{interval}} +request.method: "GET" + +auth.oauth2: + client.id: {{client_id}} + client.secret: {{client_secret}} + token_url: {{token_url}} + +request.url: {{host}}/api/indicators/query/hash/{{data_collection_id}} + +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} +{{#if http_client_timeout}} +request.timeout: {{http_client_timeout}} +{{/if}} +{{#if proxy_url}} +request.proxy_url: {{proxy_url}} +{{/if}} + +request.transforms: +- set: + target: url.params.sort + value: updated_at +- set: + target: url.params.limit + value: 100 +- set: + target: url.params.cursorMark + value: '[[.cursor.cursor_mark]]' + default: "*" +cursor: + cursor_mark: + ignore_empty_value: true + value: '[[.last_response.body.nextCursorMark]]' +response.request_body_on_pagination: true + +response.split: + target: body.data + fail_on_template_error: true + +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/ti_threatq/1.2.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml b/packages/ti_threatq/1.2.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml new file mode 100755 index 0000000000..be43fea36b --- /dev/null +++ b/packages/ti_threatq/1.2.2/data_stream/threat/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,344 @@ +--- +description: Pipeline for parsing ThreatQ Threat Intel +processors: + #################### + # Event ECS fields # + #################### + - set: + field: event.ingested + value: "{{_ingest.timestamp}}" + - set: + field: ecs.version + value: "8.0.0" + - set: + field: event.kind + value: enrichment + - set: + field: event.category + value: threat + - set: + field: event.type + value: indicator + + ############### + # Parse dates # + ############### + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: json + - fingerprint: + fields: + - json.id + - json.indicator_id + target_field: "_id" + ignore_missing: true + - date: + target_field: "@timestamp" + field: "json.updated_at" + formats: + - "yyyy-MM-dd HH:mm:ss" + if: "ctx.json.updated_at != null" + ignore_failure: true + - date: + target_field: "threatq.created_at" + field: "json.created_at" + formats: + - "yyyy-MM-dd HH:mm:ss" + if: "ctx.json.created_at != null" + ignore_failure: true + - date: + target_field: "threatq.expires_at" + field: "json.expires_at" + formats: + - "yyyy-MM-dd HH:mm:ss" + if: "ctx.json.expires_at != null" + ignore_failure: true + - date: + target_field: "threatq.expires_calculated_at" + field: "json.expires_calculated_at" + formats: + - "yyyy-MM-dd HH:mm:ss" + if: "ctx.json.expires_calculated_at != null" + ignore_failure: true + - date: + target_field: "threatq.published_at" + field: "json.published_at" + formats: + - "yyyy-MM-dd HH:mm:ss" + if: "ctx.json.published_at != null" + ignore_failure: true + + ##################### + # Threat ECS Fields # + ##################### + - rename: + field: json.type.name + target_field: threat.indicator.type + ignore_missing: true + - rename: + field: json.description + target_field: threat.indicator.description + ignore_missing: true + - script: + lang: painless + if: ctx.json?.score != null + description: > + Normalize confidence level. + source: > + def value = ctx.json.score; + if (value <= 0.0 || value > 100.0) { + ctx.threat.indicator.confidence = "None"; + return; + } + if (value >= 1.0 && value <= 29.0) { + ctx.threat.indicator.confidence = "Low"; + return; + } + if (value >= 30.0 && value <= 69.0) { + ctx.threat.indicator.confidence = "Med"; + return; + } + if (value >= 70 && value <= 100) { + ctx.threat.indicator.confidence = "High"; + return; + } + - rename: + field: json.status.name + target_field: threatq.status + ignore_missing: true + - rename: + field: json.value + target_field: threatq.indicator_value + ignore_missing: true + + ######################################### + # Map indicator types and values to ECS # + ######################################### + + # Indicator type: Email Address + - set: + field: threat.indicator.email.address + copy_from: threatq.indicator_value + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'Email Address'" + ignore_empty_value: true + - set: + field: threat.indicator.type + value: email-addr + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'Email Address'" + + # Indicator type: FQDN + - set: + field: threat.indicator.domain + copy_from: threatq.indicator_value + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'FQDN'" + ignore_empty_value: true + - set: + field: threat.indicator.type + value: domain-name + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'FQDN'" + + # Indicator type: IP Address + - set: + field: threat.indicator.ip + copy_from: threatq.indicator_value + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'IP Address'" + ignore_empty_value: true + + - set: + field: threat.indicator.type + value: ipv4-addr + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'IP Address'" + + # Indicator type: IPv6 Address + - set: + field: threat.indicator.domain + copy_from: threatq.indicator_value + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'IPv6 Address'" + ignore_empty_value: true + - set: + field: threat.indicator.type + value: ipv6-addr + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'IPv6 Address'" + + # Indicator type: MD5 + - set: + field: threat.indicator.file.hash.md5 + copy_from: threatq.indicator_value + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'MD5'" + ignore_empty_value: true + - set: + field: threat.indicator.type + value: file + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'MD5'" + + # Indicator type: SHA-1 + - set: + field: threat.indicator.file.hash.sha1 + copy_from: threatq.indicator_value + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'SHA-1'" + ignore_empty_value: true + - set: + field: threat.indicator.type + value: file + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'SHA-1'" + + # Indicator type: SHA-256 + - set: + field: threat.indicator.file.hash.sha256 + copy_from: threatq.indicator_value + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'SHA-256'" + ignore_empty_value: true + - set: + field: threat.indicator.type + value: file + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'SHA-256'" + + # Indicator type: SHA-512 + - set: + field: threat.indicator.file.hash.sha512 + copy_from: threatq.indicator_value + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'SHA-512'" + ignore_empty_value: true + - set: + field: threat.indicator.type + value: file + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'SHA-512'" + + # Indicator type: URL + - uri_parts: + field: threatq.indicator_value + target_field: threat.indicator.url + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'URL' && ctx.threatq?.indicator_value != null" + remove_if_successful: true + - set: + field: threat.indicator.type + value: url + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'URL'" + + # Indicator type: x509 Serial + - set: + field: threat.indicator.x509.serial_number + copy_from: threatq.indicator_value + if: "ctx.threat?.indicator?.type != null && ctx.threat?.indicator?.type == 'x509 Serial'" + ignore_empty_value: true + + ################################### + # Map indicator providers and TLP # + ################################### + - script: + if: "ctx.json?.sources != null && ctx.json?.sources instanceof List && ctx.json?.sources.size() > 0" + lang: painless + description: "Extract TLP and providers from source" + source: |- + def providers = new ArrayList(); + def tlps = new ArrayList(); + for (source in ctx.json.sources) { + if (source == null) { + return; + } + if (source.containsKey("provider") && source["provider"] != null) { + providers.add(source["provider"]); + } + if (source.containsKey("tlp_name") && source["tlp_name"] != null) { + tlps.add(source["tlp_name"]); + } + } + if (tlps.size() > 0) { + if (ctx.threat.indicator.marking == null) { + ctx.threat.indicator.marking = new HashMap(); + } + ctx.threat.indicator.marking.tlp = tlps; + } + if (providers.size() > 0) { + if (ctx.threat.indicator.provider == null) { + ctx.threat.indicator.provider = new HashMap(); + } + ctx.threat.indicator.provider = providers; + } + + ############################ + # Map indicator attributes # + ############################ + - foreach: + description: Change attribute names to lowercase + field: json.attributes + ignore_missing: true + processor: + lowercase: + field: "_ingest._value.name" + - foreach: + description: Replaces spaces with underscore in attribute names + field: json.attributes + ignore_missing: true + processor: + gsub: + field: "_ingest._value.name" + pattern: " " + replacement: "_" + - foreach: + description: Append attributes + field: json.attributes + ignore_missing: true + processor: + append: + field: threatq.attributes.{{{ _ingest._value.name }}} + value: "{{{ _ingest._value.value }}}" + + ############################# + # Map indicator adversaries # + ############################# + - foreach: + field: json.adversaries + ignore_missing: true + processor: + append: + field: threatq.adversaries + value: "{{{ _ingest._value.name }}}" + + ###################### + # Cleanup processors # + ###################### + # Setting indicator type to unknown if it does not match anything + - set: + field: threat.indicator.type + value: unknown + if: ctx.threat?.indicator?.type == null + - script: + lang: painless + if: ctx.threat != null + source: | + void handleMap(Map map) { + for (def x : map.values()) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + map.values().removeIf(v -> v == null); + } + void handleList(List list) { + for (def x : list) { + if (x instanceof Map) { + handleMap(x); + } else if (x instanceof List) { + handleList(x); + } + } + } + handleMap(ctx); + + # Removing fields not needed anymore, either because its copied somewhere else, or is not relevant to this event + - remove: + field: + - json + - message + ignore_missing: true +on_failure: + - set: + field: error.message + value: "{{ _ingest.on_failure_message }}" diff --git a/packages/ti_threatq/1.2.2/data_stream/threat/fields/agent.yml b/packages/ti_threatq/1.2.2/data_stream/threat/fields/agent.yml new file mode 100755 index 0000000000..da4e652c53 --- /dev/null +++ b/packages/ti_threatq/1.2.2/data_stream/threat/fields/agent.yml @@ -0,0 +1,198 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + diff --git a/packages/ti_threatq/1.2.2/data_stream/threat/fields/base-fields.yml b/packages/ti_threatq/1.2.2/data_stream/threat/fields/base-fields.yml new file mode 100755 index 0000000000..701a58f151 --- /dev/null +++ b/packages/ti_threatq/1.2.2/data_stream/threat/fields/base-fields.yml @@ -0,0 +1,28 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset name. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module + value: ti_threatq +- name: threat.feed.name + type: constant_keyword + description: Display friendly feed name + value: ThreatQuotient +- name: threat.feed.dashboard_id + type: constant_keyword + description: Dashboard ID used for Kibana CTI UI + value: ti_threatq-a05fd810-78f1-11ec-a97c-7db1518ab848 +- name: event.dataset + type: constant_keyword + description: Event dataset + value: ti_threatq.threat +- name: "@timestamp" + type: date + description: Event timestamp. diff --git a/packages/ti_threatq/1.2.2/data_stream/threat/fields/beats.yml b/packages/ti_threatq/1.2.2/data_stream/threat/fields/beats.yml new file mode 100755 index 0000000000..cb44bb2944 --- /dev/null +++ b/packages/ti_threatq/1.2.2/data_stream/threat/fields/beats.yml @@ -0,0 +1,12 @@ +- name: input.type + type: keyword + description: Type of Filebeat input. +- name: log.flags + type: keyword + description: Flags for the log file. +- name: log.offset + type: long + description: Offset of the entry in the log file. +- name: log.file.path + type: keyword + description: Path to the log file. diff --git a/packages/ti_threatq/1.2.2/data_stream/threat/fields/ecs.yml b/packages/ti_threatq/1.2.2/data_stream/threat/fields/ecs.yml new file mode 100755 index 0000000000..fc1ccd5f4a --- /dev/null +++ b/packages/ti_threatq/1.2.2/data_stream/threat/fields/ecs.yml @@ -0,0 +1,172 @@ +- description: |- + ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. + When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. + name: ecs.version + type: keyword +- description: |- + For log events the message field contains the log message, optimized for viewing in a log viewer. + For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. + If multiple messages exist, they can be combined into one message. + name: message + type: match_only_text +- description: List of keywords used to tag each event. + name: tags + type: keyword +- description: Error message. + name: error.message + type: match_only_text +- description: |- + This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. + `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. + This field is an array. This will allow proper categorization of some events that fall in multiple categories. + name: event.category + type: keyword +- description: |- + Timestamp when an event arrived in the central data store. + This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. + In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`. + name: event.ingested + type: date +- description: |- + This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. + `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. + The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. + name: event.kind + type: keyword +- description: |- + This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. + `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. + This field is an array. This will allow proper categorization of some events that fall in multiple event types. + name: event.type + type: keyword +- description: |- + event.created contains the date/time when the event was first read by an agent, or by your pipeline. + This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. + In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. + In case the two timestamps are identical, @timestamp should be used. + name: event.created + type: date +- description: |- + Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. + This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. + doc_values: false + index: false + name: event.original + type: keyword +- name: threat.feed.name + type: keyword +- description: The date and time when intelligence source first reported sighting this indicator. + name: threat.indicator.first_seen + type: date +- description: The date and time when intelligence source last reported sighting this indicator. + name: threat.indicator.last_seen + type: date +- description: |- + Type of indicator as represented by Cyber Observable in STIX 2.0. + Recommended values: + * autonomous-system + * artifact + * directory + * domain-name + * email-addr + * file + * ipv4-addr + * ipv6-addr + * mac-addr + * mutex + * port + * process + * software + * url + * user-account + * windows-registry-key + * x509-certificate + name: threat.indicator.type + type: keyword +- description: Describes the type of action conducted by the threat. + name: threat.indicator.description + type: keyword +- description: |- + Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. + Expected values are: + * Not Specified + * None + * Low + * Medium + * High + name: threat.indicator.confidence + type: keyword +- description: Identifies a threat indicator as an IP address (irrespective of direction). + name: threat.indicator.ip + type: ip +- description: |- + Domain of the url, such as "www.elastic.co". + In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. + If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. + name: threat.indicator.url.domain + type: keyword +- description: If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.full + type: wildcard +- description: |- + The field contains the file extension from the original request url, excluding the leading dot. + The file extension is only set if it exists, as not every url has a file extension. + The leading period must not be included. For example, the value must be "png", not ".png". + Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). + name: threat.indicator.url.extension + type: keyword +- description: |- + Unmodified original url as seen in the event source. + Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. + This field is meant to represent the URL as it was observed, complete or not. + multi_fields: + - name: text + type: match_only_text + name: threat.indicator.url.original + type: wildcard +- description: Path of the request, such as "/search". + name: threat.indicator.url.path + type: wildcard +- description: Port of the request, such as 443. + name: threat.indicator.url.port + type: long +- description: |- + Scheme of the request, such as "https". + Note: The `:` is not part of the scheme. + name: threat.indicator.url.scheme + type: keyword +- description: |- + The query field describes the query string of the request, such as "q=elasticsearch". + The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. + name: threat.indicator.url.query + type: keyword +- description: Identifies a threat indicator as an email address (irrespective of direction). + name: threat.indicator.email.address + type: keyword +- description: The name of the indicator's provider. + name: threat.indicator.provider + type: keyword +- description: MD5 hash. + name: threat.indicator.file.hash.md5 + type: keyword +- description: SHA1 hash. + name: threat.indicator.file.hash.sha1 + type: keyword +- description: SHA256 hash. + name: threat.indicator.file.hash.sha256 + type: keyword +- description: SHA512 hash. + name: threat.indicator.file.hash.sha512 + type: keyword +- description: |- + Traffic Light Protocol sharing markings. + Recommended values are: + * WHITE + * GREEN + * AMBER + * RED + name: threat.indicator.marking.tlp + type: keyword diff --git a/packages/ti_threatq/1.2.2/data_stream/threat/fields/fields.yml b/packages/ti_threatq/1.2.2/data_stream/threat/fields/fields.yml new file mode 100755 index 0000000000..d22e23df8b --- /dev/null +++ b/packages/ti_threatq/1.2.2/data_stream/threat/fields/fields.yml @@ -0,0 +1,51 @@ +- name: threatq + type: group + description: > + Fields for ThreatQ indicators + + fields: + - name: updated_at + type: date + description: > + Last modification time + + - name: created_at + type: date + description: > + Object creation time + + - name: expires_at + type: date + description: > + Expiration time + + - name: expires_calculated_at + type: date + description: > + Expiration calculation time + + - name: published_at + type: date + description: > + Object publication time + + - name: status + type: keyword + description: > + Object status within the Threat Library + + - name: indicator_value + type: keyword + description: > + Original indicator value + + - name: adversaries + type: keyword + description: > + Adversaries that are linked to the object + + - name: attributes + type: flattened + description: > + These provide additional context about an object + diff --git a/packages/ti_threatq/1.2.2/data_stream/threat/manifest.yml b/packages/ti_threatq/1.2.2/data_stream/threat/manifest.yml new file mode 100755 index 0000000000..060ab47162 --- /dev/null +++ b/packages/ti_threatq/1.2.2/data_stream/threat/manifest.yml @@ -0,0 +1,100 @@ +type: logs +title: ThreatQ +streams: + - input: httpjson + vars: + - name: host + type: text + title: ThreatQ hostname + multi: false + required: true + show_user: true + default: https://threatqexample.com + description: The hostname of the ThreatQ instance. + - name: client_id + type: text + title: ThreatQ Oauth2 Client ID + multi: false + required: true + show_user: true + description: The Client ID used to access the ThreatQ instance. + - name: client_secret + type: password + title: ThreatQ Oauth2 Client Secret + multi: false + required: true + show_user: true + description: The Client ID used to access the ThreatQ instance. + - name: token_url + type: text + title: ThreatQ Oauth2 Token URL + multi: false + required: true + show_user: true + description: The Token URL used for Oauth2 Authentication. + default: https://threatqexample.com/api/token + - name: data_collection_id + type: text + title: ThreatQ Collection ID + multi: false + required: true + show_user: true + description: The ID of the collection to retrieve data from. + - name: http_client_timeout + type: text + title: HTTP Client Timeout + multi: false + required: false + show_user: false + default: 30s + - name: proxy_url + type: text + title: Proxy URL + multi: false + required: false + show_user: false + description: URL to proxy connections in the form of http[s]://:@: + - name: interval + type: text + title: Interval + multi: false + required: true + show_user: true + default: 10m + - name: ssl + type: yaml + title: SSL + multi: false + required: false + show_user: false + default: | + #verification_mode: none + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - threatq-threat + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + template_path: httpjson.yml.hbs + title: ThreatQuotient + description: Collect indicators from the ThreatQuotient API diff --git a/packages/ti_threatq/1.2.2/data_stream/threat/sample_event.json b/packages/ti_threatq/1.2.2/data_stream/threat/sample_event.json new file mode 100755 index 0000000000..297ddb6dd4 --- /dev/null +++ b/packages/ti_threatq/1.2.2/data_stream/threat/sample_event.json @@ -0,0 +1,66 @@ +{ + "@timestamp": "2021-10-01T18:36:03.000Z", + "agent": { + "ephemeral_id": "12c946b4-2bf4-4d07-8aec-d28310ed16c8", + "id": "394964aa-5974-455c-bea7-5c0b89b470bd", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "data_stream": { + "dataset": "ti_threatq.threat", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "394964aa-5974-455c-bea7-5c0b89b470bd", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "created": "2022-04-11T09:27:35.244Z", + "dataset": "ti_threatq.threat", + "ingested": "2022-04-11T09:27:36Z", + "kind": "enrichment", + "original": "{\"adversaries\":[],\"attributes\":[{\"attribute_id\":5,\"created_at\":\"2021-10-01 18:36:06\",\"id\":4893068,\"indicator_id\":106767,\"name\":\"Contact\",\"touched_at\":\"2021-10-24 18:36:10\",\"updated_at\":\"2021-10-24 18:36:10\",\"value\":\"email:Quetzalcoatl_relays[]protonmail.com url:https://quetzalcoatl-relays.org proof:uri-rsa hoster:frantech.ca\"},{\"attribute_id\":9,\"created_at\":\"2021-10-01 18:36:06\",\"id\":4893069,\"indicator_id\":106767,\"name\":\"Router Port\",\"touched_at\":\"2021-10-24 18:36:10\",\"updated_at\":\"2021-10-24 18:36:10\",\"value\":\"9000\"},{\"attribute_id\":6,\"created_at\":\"2021-10-01 18:36:06\",\"id\":4893070,\"indicator_id\":106767,\"name\":\"Flags\",\"touched_at\":\"2021-10-02 18:36:08\",\"updated_at\":\"2021-10-02 18:36:08\",\"value\":\"ERDV\"}],\"class\":\"network\",\"created_at\":\"2021-10-01 18:36:03\",\"expires_calculated_at\":\"2021-10-23 18:40:17\",\"hash\":\"69beef49fdbd1f54eef3cab324c7b6cf\",\"id\":106767,\"published_at\":\"2021-10-01 18:36:03\",\"score\":0,\"sources\":[{\"created_at\":\"2021-10-01 18:36:06\",\"creator_source_id\":12,\"id\":3699669,\"indicator_id\":106767,\"indicator_status_id\":1,\"indicator_type_id\":15,\"name\":\"www.dan.me.uk Tor Node List\",\"published_at\":\"2021-10-01 18:36:06\",\"reference_id\":37,\"source_id\":12,\"source_type\":\"connectors\",\"updated_at\":\"2021-10-24 18:36:10\"}],\"status\":{\"description\":\"Poses a threat and is being exported to detection tools.\",\"id\":1,\"name\":\"Active\"},\"status_id\":1,\"touched_at\":\"2021-10-24 18:36:10\",\"type\":{\"class\":\"network\",\"id\":15,\"name\":\"IP Address\"},\"type_id\":15,\"updated_at\":\"2021-10-01 18:36:03\",\"value\":\"107.189.1.90\"}", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "preserve_original_event", + "forwarded", + "threatq-threat" + ], + "threat": { + "indicator": { + "confidence": "None", + "ip": "107.189.1.90", + "type": "ipv4-addr" + } + }, + "threatq": { + "attributes": { + "contact": [ + "email:Quetzalcoatl_relays[]protonmail.com url:https://quetzalcoatl-relays.org proof:uri-rsa hoster:frantech.ca" + ], + "flags": [ + "ERDV" + ], + "router_port": [ + "9000" + ] + }, + "created_at": "2021-10-01T18:36:03.000Z", + "expires_calculated_at": "2021-10-23T18:40:17.000Z", + "indicator_value": "107.189.1.90", + "published_at": "2021-10-01T18:36:03.000Z", + "status": "Active" + } +} \ No newline at end of file diff --git a/packages/ti_threatq/1.2.2/docs/README.md b/packages/ti_threatq/1.2.2/docs/README.md new file mode 100755 index 0000000000..822712d08a --- /dev/null +++ b/packages/ti_threatq/1.2.2/docs/README.md @@ -0,0 +1,172 @@ +# ThreatQuotient Integration + +The ThreatQuotient integration uses the available REST API to retrieve indicators and Threat Intelligence. + +## Logs + +### Threat + +The ThreatQ integration requires you to set a valid URL, combination of Oauth2 credentials and the ID of the collection to retrieve +indicators from. +By default the indicators will be collected every 1 minute, and deduplication is handled by the API itself. + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset name. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| error.message | Error message. | match_only_text | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset | constant_keyword | +| event.ingested | Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` \< `event.created` \< `event.ingested`. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Type of Filebeat input. | keyword | +| log.file.path | Path to the log file. | keyword | +| log.flags | Flags for the log file. | keyword | +| log.offset | Offset of the entry in the log file. | long | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| tags | List of keywords used to tag each event. | keyword | +| threat.feed.dashboard_id | Dashboard ID used for Kibana CTI UI | constant_keyword | +| threat.feed.name | | keyword | +| threat.indicator.confidence | Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. Expected values are: \* Not Specified \* None \* Low \* Medium \* High | keyword | +| threat.indicator.description | Describes the type of action conducted by the threat. | keyword | +| threat.indicator.email.address | Identifies a threat indicator as an email address (irrespective of direction). | keyword | +| threat.indicator.file.hash.md5 | MD5 hash. | keyword | +| threat.indicator.file.hash.sha1 | SHA1 hash. | keyword | +| threat.indicator.file.hash.sha256 | SHA256 hash. | keyword | +| threat.indicator.file.hash.sha512 | SHA512 hash. | keyword | +| threat.indicator.first_seen | The date and time when intelligence source first reported sighting this indicator. | date | +| threat.indicator.ip | Identifies a threat indicator as an IP address (irrespective of direction). | ip | +| threat.indicator.last_seen | The date and time when intelligence source last reported sighting this indicator. | date | +| threat.indicator.marking.tlp | Traffic Light Protocol sharing markings. Recommended values are: \* WHITE \* GREEN \* AMBER \* RED | keyword | +| threat.indicator.provider | The name of the indicator's provider. | keyword | +| threat.indicator.type | Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: \* autonomous-system \* artifact \* directory \* domain-name \* email-addr \* file \* ipv4-addr \* ipv6-addr \* mac-addr \* mutex \* port \* process \* software \* url \* user-account \* windows-registry-key \* x509-certificate | keyword | +| threat.indicator.url.domain | Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. | keyword | +| threat.indicator.url.extension | The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). | keyword | +| threat.indicator.url.full | If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. | wildcard | +| threat.indicator.url.full.text | Multi-field of `threat.indicator.url.full`. | match_only_text | +| threat.indicator.url.original | Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not. | wildcard | +| threat.indicator.url.original.text | Multi-field of `threat.indicator.url.original`. | match_only_text | +| threat.indicator.url.path | Path of the request, such as "/search". | wildcard | +| threat.indicator.url.port | Port of the request, such as 443. | long | +| threat.indicator.url.query | The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. | keyword | +| threat.indicator.url.scheme | Scheme of the request, such as "https". Note: The `:` is not part of the scheme. | keyword | +| threatq.adversaries | Adversaries that are linked to the object | keyword | +| threatq.attributes | These provide additional context about an object | flattened | +| threatq.created_at | Object creation time | date | +| threatq.expires_at | Expiration time | date | +| threatq.expires_calculated_at | Expiration calculation time | date | +| threatq.indicator_value | Original indicator value | keyword | +| threatq.published_at | Object publication time | date | +| threatq.status | Object status within the Threat Library | keyword | +| threatq.updated_at | Last modification time | date | + + +An example event for `threat` looks as following: + +```json +{ + "@timestamp": "2021-10-01T18:36:03.000Z", + "agent": { + "ephemeral_id": "12c946b4-2bf4-4d07-8aec-d28310ed16c8", + "id": "394964aa-5974-455c-bea7-5c0b89b470bd", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.0.0" + }, + "data_stream": { + "dataset": "ti_threatq.threat", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "394964aa-5974-455c-bea7-5c0b89b470bd", + "snapshot": false, + "version": "8.0.0" + }, + "event": { + "agent_id_status": "verified", + "category": "threat", + "created": "2022-04-11T09:27:35.244Z", + "dataset": "ti_threatq.threat", + "ingested": "2022-04-11T09:27:36Z", + "kind": "enrichment", + "original": "{\"adversaries\":[],\"attributes\":[{\"attribute_id\":5,\"created_at\":\"2021-10-01 18:36:06\",\"id\":4893068,\"indicator_id\":106767,\"name\":\"Contact\",\"touched_at\":\"2021-10-24 18:36:10\",\"updated_at\":\"2021-10-24 18:36:10\",\"value\":\"email:Quetzalcoatl_relays[]protonmail.com url:https://quetzalcoatl-relays.org proof:uri-rsa hoster:frantech.ca\"},{\"attribute_id\":9,\"created_at\":\"2021-10-01 18:36:06\",\"id\":4893069,\"indicator_id\":106767,\"name\":\"Router Port\",\"touched_at\":\"2021-10-24 18:36:10\",\"updated_at\":\"2021-10-24 18:36:10\",\"value\":\"9000\"},{\"attribute_id\":6,\"created_at\":\"2021-10-01 18:36:06\",\"id\":4893070,\"indicator_id\":106767,\"name\":\"Flags\",\"touched_at\":\"2021-10-02 18:36:08\",\"updated_at\":\"2021-10-02 18:36:08\",\"value\":\"ERDV\"}],\"class\":\"network\",\"created_at\":\"2021-10-01 18:36:03\",\"expires_calculated_at\":\"2021-10-23 18:40:17\",\"hash\":\"69beef49fdbd1f54eef3cab324c7b6cf\",\"id\":106767,\"published_at\":\"2021-10-01 18:36:03\",\"score\":0,\"sources\":[{\"created_at\":\"2021-10-01 18:36:06\",\"creator_source_id\":12,\"id\":3699669,\"indicator_id\":106767,\"indicator_status_id\":1,\"indicator_type_id\":15,\"name\":\"www.dan.me.uk Tor Node List\",\"published_at\":\"2021-10-01 18:36:06\",\"reference_id\":37,\"source_id\":12,\"source_type\":\"connectors\",\"updated_at\":\"2021-10-24 18:36:10\"}],\"status\":{\"description\":\"Poses a threat and is being exported to detection tools.\",\"id\":1,\"name\":\"Active\"},\"status_id\":1,\"touched_at\":\"2021-10-24 18:36:10\",\"type\":{\"class\":\"network\",\"id\":15,\"name\":\"IP Address\"},\"type_id\":15,\"updated_at\":\"2021-10-01 18:36:03\",\"value\":\"107.189.1.90\"}", + "type": "indicator" + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "preserve_original_event", + "forwarded", + "threatq-threat" + ], + "threat": { + "indicator": { + "confidence": "None", + "ip": "107.189.1.90", + "type": "ipv4-addr" + } + }, + "threatq": { + "attributes": { + "contact": [ + "email:Quetzalcoatl_relays[]protonmail.com url:https://quetzalcoatl-relays.org proof:uri-rsa hoster:frantech.ca" + ], + "flags": [ + "ERDV" + ], + "router_port": [ + "9000" + ] + }, + "created_at": "2021-10-01T18:36:03.000Z", + "expires_calculated_at": "2021-10-23T18:40:17.000Z", + "indicator_value": "107.189.1.90", + "published_at": "2021-10-01T18:36:03.000Z", + "status": "Active" + } +} +``` \ No newline at end of file diff --git a/packages/ti_threatq/1.2.2/img/threatq.svg b/packages/ti_threatq/1.2.2/img/threatq.svg new file mode 100755 index 0000000000..0da7d32522 --- /dev/null +++ b/packages/ti_threatq/1.2.2/img/threatq.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/packages/ti_threatq/1.2.2/kibana/dashboard/ti_threatq-a05fd810-78f1-11ec-a97c-7db1518ab848.json b/packages/ti_threatq/1.2.2/kibana/dashboard/ti_threatq-a05fd810-78f1-11ec-a97c-7db1518ab848.json new file mode 100755 index 0000000000..f4adcae2b5 --- /dev/null +++ b/packages/ti_threatq/1.2.2/kibana/dashboard/ti_threatq-a05fd810-78f1-11ec-a97c-7db1518ab848.json @@ -0,0 +1,112 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about indicators ingested from the ThreatQ integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"ti_threatq.threat\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"ti_threatq.threat\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n**[ThreatQ Overview (This Page)](/app/dashboards#/view/ti_threatq-a05fd810-78f1-11ec-a97c-7db1518ab848)** \\n[ThreatQ Files](/app/dashboards#/view/ti_threatq-ab289de0-78f1-11ec-a97c-7db1518ab848) \\n[ThreatQ URLs](/app/dashboards#/view/ti_threatq-b45b0c40-78f1-11ec-a97c-7db1518ab848) \\n\\n[Integrations Page](/app/integrations/detail/ti_threatq/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is a health overview related to the ThreatQ integration.\\n\\nThe dashboard is made to provide general statistics and show the health of the ingestion of indicators from ThreatQ. \\n\\nIt shows the ingestion rates (by default it fetches new updates every 10 minutes) and provides a few filters for drilling down to specific indicator types retrieved from ThreatQ.\",\"openLinksInNewTab\":false},\"title\":\"Overview Textbox [Logs AbuseCH]\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":39,\"i\":\"555e9e6c-04e9-4022-b6df-bda07dde30c4\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"555e9e6c-04e9-4022-b6df-bda07dde30c4\",\"title\":\"Overview Textbox [Logs ThreatQ]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":false,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"logs-*\",\"key\":\"event.dataset\",\"negate\":false,\"params\":[\"ti_abusech.malware\",\"ti_abusech.malwarebazaar\",\"ti_abusech.url\"],\"type\":\"phrases\"},\"query\":{\"bool\":{\"minimum_should_match\":1,\"should\":[{\"match_phrase\":{\"event.dataset\":\"ti_abusech.malware\"}},{\"match_phrase\":{\"event.dataset\":\"ti_abusech.malwarebazaar\"}},{\"match_phrase\":{\"event.dataset\":\"ti_abusech.url\"}}]}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"index\":\"logs-*\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"controls\":[{\"fieldName\":\"data_stream.dataset\",\"id\":\"1635779550157\",\"indexPatternRefName\":\"control_e971fedd-6afd-4d03-93ac-d0c751acc254_0_index_pattern\",\"label\":\"Feed Name\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"},{\"fieldName\":\"threat.indicator.provider\",\"id\":\"1635779603363\",\"indexPatternRefName\":\"control_e971fedd-6afd-4d03-93ac-d0c751acc254_1_index_pattern\",\"label\":\"Indicator Provider\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"},{\"fieldName\":\"threat.indicator.type\",\"id\":\"1635779625911\",\"indexPatternRefName\":\"control_e971fedd-6afd-4d03-93ac-d0c751acc254_2_index_pattern\",\"label\":\"Indicator Type\",\"options\":{\"dynamicOptions\":true,\"multiselect\":true,\"order\":\"desc\",\"size\":5,\"type\":\"terms\"},\"parent\":\"\",\"type\":\"list\"}],\"pinFilters\":false,\"updateFiltersOnChange\":false,\"useTimeFilter\":false},\"title\":\"Feed and Indicator Selector [Logs AbuseCH]\",\"type\":\"input_control_vis\",\"uiState\":{}}},\"gridData\":{\"h\":7,\"i\":\"e971fedd-6afd-4d03-93ac-d0c751acc254\",\"w\":41,\"x\":7,\"y\":0},\"panelIndex\":\"e971fedd-6afd-4d03-93ac-d0c751acc254\",\"title\":\"Feed and Indicator Selector [Logs ThreatQ]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"description\":\"\",\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-070f5dbc-7687-4e97-9a57-5542b401c13f\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-1d376820-3b22-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"070f5dbc-7687-4e97-9a57-5542b401c13f\":{\"columnOrder\":[\"1e352b49-3b83-44a6-98fe-8703d30f2517\"],\"columns\":{\"1e352b49-3b83-44a6-98fe-8703d30f2517\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Total Indicators\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"1e352b49-3b83-44a6-98fe-8703d30f2517\",\"layerId\":\"070f5dbc-7687-4e97-9a57-5542b401c13f\",\"layerType\":\"data\"}},\"title\":\"Total Indicators [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"d37eb797-f273-43c2-9004-b947891cce55\",\"w\":6,\"x\":7,\"y\":7},\"panelIndex\":\"d37eb797-f273-43c2-9004-b947891cce55\",\"title\":\"Total Indicators [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-df8e3a91-700b-428a-a763-525076e4d3c8\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-49830790-3b27-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"df8e3a91-700b-428a-a763-525076e4d3c8\":{\"columnOrder\":[\"e4f78e2f-f0a7-4cc6-96d0-af607ffbf326\"],\"columns\":{\"e4f78e2f-f0a7-4cc6-96d0-af607ffbf326\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Total Datastreams\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"event.dataset\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"e4f78e2f-f0a7-4cc6-96d0-af607ffbf326\",\"layerId\":\"df8e3a91-700b-428a-a763-525076e4d3c8\",\"layerType\":\"data\"}},\"title\":\"Total Datastreams [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"6509dcc9-bb9c-4c1f-80e9-612f67ada340\",\"w\":6,\"x\":7,\"y\":15},\"panelIndex\":\"6509dcc9-bb9c-4c1f-80e9-612f67ada340\",\"title\":\"Total Datastreams [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-1e757dc0-2e6d-4bd2-aa38-7da9133ca960\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-ec1a2c50-3b30-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"1e757dc0-2e6d-4bd2-aa38-7da9133ca960\":{\"columnOrder\":[\"66779b74-d127-4249-93e4-b8cd9c39b91f\",\"2bbd31c6-4a58-43e5-bab9-de9e7c2d2242\"],\"columns\":{\"2bbd31c6-4a58-43e5-bab9-de9e7c2d2242\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"66779b74-d127-4249-93e4-b8cd9c39b91f\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.provider\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"2bbd31c6-4a58-43e5-bab9-de9e7c2d2242\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.provider\"}}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"2bbd31c6-4a58-43e5-bab9-de9e7c2d2242\"],\"layerId\":\"1e757dc0-2e6d-4bd2-aa38-7da9133ca960\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"bar_horizontal\",\"showGridlines\":false,\"splitAccessor\":\"66779b74-d127-4249-93e4-b8cd9c39b91f\"}],\"legend\":{\"isVisible\":true,\"position\":\"right\",\"showSingleSeries\":false},\"preferredSeriesType\":\"bar_horizontal\",\"title\":\"Empty XY chart\",\"valueLabels\":\"inside\",\"xTitle\":\"Providers\",\"yLeftExtent\":{\"mode\":\"full\"},\"yRightExtent\":{\"mode\":\"full\"},\"yTitle\":\"Count\"}},\"title\":\"Total Indicators per Provider [Logs AbuseCH]\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"86d83606-4176-44b1-b3f3-011d5b5b4b58\",\"w\":23,\"x\":13,\"y\":7},\"panelIndex\":\"86d83606-4176-44b1-b3f3-011d5b5b4b58\",\"title\":\"Total Indicators per Provider [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-682732d8-8691-4c5a-bf89-de8e30d71dfb\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-62801870-3b2a-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"682732d8-8691-4c5a-bf89-de8e30d71dfb\":{\"columnOrder\":[\"dd629c44-e7db-438e-8656-340b94fd30d8\",\"bad802d8-b23f-4ef4-8dcf-4e92170595a7\"],\"columns\":{\"bad802d8-b23f-4ef4-8dcf-4e92170595a7\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"dd629c44-e7db-438e-8656-340b94fd30d8\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Indicators\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"bad802d8-b23f-4ef4-8dcf-4e92170595a7\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":3},\"scale\":\"ordinal\",\"sourceField\":\"event.dataset\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"dd629c44-e7db-438e-8656-340b94fd30d8\"],\"layerId\":\"682732d8-8691-4c5a-bf89-de8e30d71dfb\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"legendPosition\":\"right\",\"metric\":\"bad802d8-b23f-4ef4-8dcf-4e92170595a7\",\"nestedLegend\":false,\"numberDisplay\":\"percent\",\"percentDecimals\":2,\"truncateLegend\":true}],\"shape\":\"donut\"}},\"title\":\"Total Indicators per Datastream [Logs AbuseCH]\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"f654c447-12d2-41a4-9091-06169af11ba5\",\"w\":12,\"x\":36,\"y\":7},\"panelIndex\":\"f654c447-12d2-41a4-9091-06169af11ba5\",\"title\":\"Total Indicators per Datastream [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-8c0613c0-3b25-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\":{\"columnOrder\":[\"4d7ca99c-8a53-4a7f-96db-409251c0e391\",\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\",\"0726d151-9edf-41cb-ab52-473ab27cf8b7\"],\"columns\":{\"0726d151-9edf-41cb-ab52-473ab27cf8b7\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"4d7ca99c-8a53-4a7f-96db-409251c0e391\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of event.dataset\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"0726d151-9edf-41cb-ab52-473ab27cf8b7\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":3},\"scale\":\"ordinal\",\"sourceField\":\"event.dataset\"},\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\":{\"dataType\":\"date\",\"isBucketed\":true,\"label\":\"@timestamp\",\"operationType\":\"date_histogram\",\"params\":{\"interval\":\"30s\"},\"scale\":\"interval\",\"sourceField\":\"@timestamp\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"curveType\":\"CURVE_MONOTONE_X\",\"fittingFunction\":\"Zero\",\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"layers\":[{\"accessors\":[\"0726d151-9edf-41cb-ab52-473ab27cf8b7\"],\"layerId\":\"c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7\",\"layerType\":\"data\",\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"splitAccessor\":\"4d7ca99c-8a53-4a7f-96db-409251c0e391\",\"xAccessor\":\"b7f07f7c-1477-4f83-95f5-ad5cdc3a314b\"}],\"legend\":{\"isInside\":false,\"isVisible\":true,\"position\":\"bottom\",\"shouldTruncate\":false,\"showSingleSeries\":true},\"preferredSeriesType\":\"line\",\"title\":\"Empty XY chart\",\"valueLabels\":\"hide\",\"valuesInLegend\":false,\"xTitle\":\"Date\",\"yLeftExtent\":{\"mode\":\"full\"},\"yRightExtent\":{\"mode\":\"full\"},\"yTitle\":\"Total Indicators\"}},\"title\":\"Indicators ingested per Datastream [Logs AbuseCH]\",\"visualizationType\":\"lnsXY\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"aab4fac0-d39c-4521-aa9b-0a49d5938e9e\",\"w\":41,\"x\":7,\"y\":23},\"panelIndex\":\"aab4fac0-d39c-4521-aa9b-0a49d5938e9e\",\"title\":\"Indicators ingested per Datastream [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs ThreatQ] Overview", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_threatq-a05fd810-78f1-11ec-a97c-7db1518ab848", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:control_e971fedd-6afd-4d03-93ac-d0c751acc254_0_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:control_e971fedd-6afd-4d03-93ac-d0c751acc254_1_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:control_e971fedd-6afd-4d03-93ac-d0c751acc254_2_index_pattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d37eb797-f273-43c2-9004-b947891cce55:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d37eb797-f273-43c2-9004-b947891cce55:indexpattern-datasource-layer-070f5dbc-7687-4e97-9a57-5542b401c13f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6509dcc9-bb9c-4c1f-80e9-612f67ada340:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6509dcc9-bb9c-4c1f-80e9-612f67ada340:indexpattern-datasource-layer-df8e3a91-700b-428a-a763-525076e4d3c8", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "86d83606-4176-44b1-b3f3-011d5b5b4b58:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "86d83606-4176-44b1-b3f3-011d5b5b4b58:indexpattern-datasource-layer-1e757dc0-2e6d-4bd2-aa38-7da9133ca960", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f654c447-12d2-41a4-9091-06169af11ba5:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f654c447-12d2-41a4-9091-06169af11ba5:indexpattern-datasource-layer-682732d8-8691-4c5a-bf89-de8e30d71dfb", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "aab4fac0-d39c-4521-aa9b-0a49d5938e9e:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "aab4fac0-d39c-4521-aa9b-0a49d5938e9e:indexpattern-datasource-layer-c1cee622-e3dd-4d6b-a28a-0fb19dc2c7b7", + "type": "index-pattern" + }, + { + "id": "ti_threatq-c0cca010-78f1-11ec-a97c-7db1518ab848", + "name": "tag-ti_threatq-c0cca010-78f1-11ec-a97c-7db1518ab848", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_threatq/1.2.2/kibana/dashboard/ti_threatq-ab289de0-78f1-11ec-a97c-7db1518ab848.json b/packages/ti_threatq/1.2.2/kibana/dashboard/ti_threatq-ab289de0-78f1-11ec-a97c-7db1518ab848.json new file mode 100755 index 0000000000..0fa3fc0ee3 --- /dev/null +++ b/packages/ti_threatq/1.2.2/kibana/dashboard/ti_threatq-ab289de0-78f1-11ec-a97c-7db1518ab848.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about file type indicators from the ThreatQ integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"event.kind\",\"negate\":false,\"params\":{\"query\":\"enrichment\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"event.kind\":\"enrichment\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"threat.indicator.type\",\"negate\":false,\"params\":{\"query\":\"file\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"threat.indicator.type\":\"file\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"ti_threatq.threat\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"ti_threatq.threat\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n[ThreatQ Overview](/app/dashboards#/view/ti_threatq-a05fd810-78f1-11ec-a97c-7db1518ab848) \\n**[ThreatQ Files (This Page)](/app/dashboards#/view/ti_threatq-ab289de0-78f1-11ec-a97c-7db1518ab848)** \\n[ThreatQ URLs](/app/dashboards#/view/ti_threatq-b45b0c40-78f1-11ec-a97c-7db1518ab848) \\n\\n[Integrations Page](/app/integrations/detail/ti_threatq/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is an overview of the different threat intelligence indicators with a **threat.indicator.type: file**.\\n\\nThe dashboard is made to provide general statistics and show the health of your indicators like hash type counters, popular domains, statistics about how many unique indicators are ingested and other relevant information.\",\"openLinksInNewTab\":false},\"title\":\"Files Navigation Textbox [Logs AbuseCH]\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":27,\"i\":\"09ba3dc0-e2e2-4799-b47f-bb919bf290a1\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"09ba3dc0-e2e2-4799-b47f-bb919bf290a1\",\"title\":\"Files Navigation Textbox [Logs ThreatQ]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-98786f76-dac4-4fc7-9cad-8bfce17bd00d\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-2e2257a0-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"98786f76-dac4-4fc7-9cad-8bfce17bd00d\":{\"columnOrder\":[\"8622e147-406f-4711-8f68-e2425614106e\"],\"columns\":{\"8622e147-406f-4711-8f68-e2425614106e\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique File types\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.type\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"8622e147-406f-4711-8f68-e2425614106e\",\"layerId\":\"98786f76-dac4-4fc7-9cad-8bfce17bd00d\",\"layerType\":\"data\"}},\"title\":\"Unique File Types [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"31ea16d1-7591-42a7-b773-6fca00e5db14\",\"w\":6,\"x\":7,\"y\":0},\"panelIndex\":\"31ea16d1-7591-42a7-b773-6fca00e5db14\",\"title\":\"Unique File Types [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-b83c382d-fab9-4e60-a632-475e221cc20c\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-d888e3e0-3b38-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"b83c382d-fab9-4e60-a632-475e221cc20c\":{\"columnOrder\":[\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\"],\"columns\":{\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique MD5\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.md5\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"eda3c6d9-dacb-4e5e-b977-50104f76e91a\",\"layerId\":\"b83c382d-fab9-4e60-a632-475e221cc20c\",\"layerType\":\"data\"}},\"title\":\"Unique MD5 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98\",\"w\":6,\"x\":13,\"y\":0},\"panelIndex\":\"4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98\",\"title\":\"Unique MD5 [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-85ad73b3-3b76-49f1-ad20-6256b58918f8\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-28549810-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"85ad73b3-3b76-49f1-ad20-6256b58918f8\":{\"columnOrder\":[\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\"],\"columns\":{\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SHA1\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.sha1\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"289bd005-bdd2-4f3b-83b9-ad6ae52a9ed3\",\"layerId\":\"85ad73b3-3b76-49f1-ad20-6256b58918f8\",\"layerType\":\"data\"}},\"title\":\"Unique SHA1 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea\",\"w\":6,\"x\":26,\"y\":0},\"panelIndex\":\"e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea\",\"title\":\"Unique SHA1 [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-49b7070a-f1d3-46e1-a980-2f6d6d130167\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-5d6111a0-3b39-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"49b7070a-f1d3-46e1-a980-2f6d6d130167\":{\"columnOrder\":[\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\"],\"columns\":{\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique SHA256\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.file.hash.sha256\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"b6c5e221-88ff-490e-bd3e-188b3e0dd1f4\",\"layerId\":\"49b7070a-f1d3-46e1-a980-2f6d6d130167\",\"layerType\":\"data\"}},\"title\":\"Unique SHA256 [Logs AbuseCH]\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"93e32abe-87e3-469e-b7e9-a7ef7dfa2cce\",\"w\":6,\"x\":32,\"y\":0},\"panelIndex\":\"93e32abe-87e3-469e-b7e9-a7ef7dfa2cce\",\"title\":\"Unique SHA256 [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"ti_abusech-4ee4a490-3b37-11ec-ae50-2fdf1e96c6a6\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8\":{\"columnOrder\":[\"06b603cb-c9fb-493a-9ca4-e6502ca12054\",\"de0e531b-dda7-461f-9783-3ab9267d202e\"],\"columns\":{\"06b603cb-c9fb-493a-9ca4-e6502ca12054\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.file.type\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"de0e531b-dda7-461f-9783-3ab9267d202e\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.file.type\"},\"de0e531b-dda7-461f-9783-3ab9267d202e\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"06b603cb-c9fb-493a-9ca4-e6502ca12054\"],\"layerId\":\"222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"de0e531b-dda7-461f-9783-3ab9267d202e\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"treemap\"}},\"title\":\"File Types [Logs AbuseCH]\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":19,\"i\":\"5f1d0cf1-c331-4495-99d5-5e80d023c482\",\"w\":19,\"x\":7,\"y\":8},\"panelIndex\":\"5f1d0cf1-c331-4495-99d5-5e80d023c482\",\"title\":\"File Types [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-06d9ac79-2055-437e-892c-de9ee07fe674\",\"type\":\"index-pattern\"}],\"sharingSavedObjectProps\":{\"outcome\":\"exactMatch\",\"sourceId\":\"2d0c0ec0-3bbf-11ec-ae8c-7d00429ad420\"},\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"06d9ac79-2055-437e-892c-de9ee07fe674\":{\"columnOrder\":[\"35f5321a-27f4-4076-9d1d-d326187f4689\",\"df062557-78a5-4a78-93f1-34583c809bc3\"],\"columns\":{\"35f5321a-27f4-4076-9d1d-d326187f4689\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"File Names\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"df062557-78a5-4a78-93f1-34583c809bc3\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.file.name\"},\"df062557-78a5-4a78-93f1-34583c809bc3\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"columnId\":\"35f5321a-27f4-4076-9d1d-d326187f4689\",\"isTransposed\":false},{\"columnId\":\"df062557-78a5-4a78-93f1-34583c809bc3\",\"isTransposed\":false}],\"layerId\":\"06d9ac79-2055-437e-892c-de9ee07fe674\",\"layerType\":\"data\"}},\"title\":\"Most popular file names [Logs AbuseCH]\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":19,\"i\":\"b733385b-14f8-4469-b777-86d0139cc56b\",\"w\":21,\"x\":26,\"y\":8},\"panelIndex\":\"b733385b-14f8-4469-b777-86d0139cc56b\",\"title\":\"Most popular file names [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs ThreatQ] Files", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_threatq-ab289de0-78f1-11ec-a97c-7db1518ab848", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "31ea16d1-7591-42a7-b773-6fca00e5db14:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "31ea16d1-7591-42a7-b773-6fca00e5db14:indexpattern-datasource-layer-98786f76-dac4-4fc7-9cad-8bfce17bd00d", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98:indexpattern-datasource-layer-b83c382d-fab9-4e60-a632-475e221cc20c", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea:indexpattern-datasource-layer-85ad73b3-3b76-49f1-ad20-6256b58918f8", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "93e32abe-87e3-469e-b7e9-a7ef7dfa2cce:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "93e32abe-87e3-469e-b7e9-a7ef7dfa2cce:indexpattern-datasource-layer-49b7070a-f1d3-46e1-a980-2f6d6d130167", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "5f1d0cf1-c331-4495-99d5-5e80d023c482:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "5f1d0cf1-c331-4495-99d5-5e80d023c482:indexpattern-datasource-layer-222b3ad0-2e5d-46a0-ae3d-f6a0b15ac2c8", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b733385b-14f8-4469-b777-86d0139cc56b:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b733385b-14f8-4469-b777-86d0139cc56b:indexpattern-datasource-layer-06d9ac79-2055-437e-892c-de9ee07fe674", + "type": "index-pattern" + }, + { + "id": "ti_threatq-c0cca010-78f1-11ec-a97c-7db1518ab848", + "name": "tag-ti_threatq-c0cca010-78f1-11ec-a97c-7db1518ab848", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_threatq/1.2.2/kibana/dashboard/ti_threatq-b45b0c40-78f1-11ec-a97c-7db1518ab848.json b/packages/ti_threatq/1.2.2/kibana/dashboard/ti_threatq-b45b0c40-78f1-11ec-a97c-7db1518ab848.json new file mode 100755 index 0000000000..1b50c92265 --- /dev/null +++ b/packages/ti_threatq/1.2.2/kibana/dashboard/ti_threatq-b45b0c40-78f1-11ec-a97c-7db1518ab848.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "description": "Dashboard providing statistics about URL type indicators from the ThreatQ integration", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\",\"key\":\"threat.indicator.type\",\"negate\":false,\"params\":{\"query\":\"url\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"threat.indicator.type\":\"url\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"ti_threatq.threat\"},\"type\":\"phrase\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"ti_threatq.threat\"}}}],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}" + }, + "optionsJSON": "{\"hidePanelTitles\":false,\"syncColors\":false,\"useMargins\":true}", + "panelsJSON": "[{\"embeddableConfig\":{\"enhancements\":{},\"hidePanelTitles\":true,\"savedVis\":{\"data\":{\"aggs\":[],\"searchSource\":{\"filter\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"}}},\"description\":\"\",\"id\":\"\",\"params\":{\"fontSize\":12,\"markdown\":\"**Navigation**\\n\\n[ThreatQ Overview ](/app/dashboards#/view/ti_threatq-a05fd810-78f1-11ec-a97c-7db1518ab848) \\n[ThreatQ Files](/app/dashboards#/view/ti_threatq-ab289de0-78f1-11ec-a97c-7db1518ab848) \\n**[ThreatQ URLs (This Page)](/app/dashboards#/view/ti_threatq-b45b0c40-78f1-11ec-a97c-7db1518ab848)** \\n\\n[Integrations Page](/app/integrations/detail/ti_threatq/overview)\\n\\n\\n**Overview**\\n\\nThis dashboard is an overview of the different threat intelligence indicators with a **threat.indicator.type: url**. \\n\\nThe dashboard is made to provide general statistics and show the health of your indicators like popular domains, file extensions, statistics about how many unique indicators are ingested and other relevant information.\",\"openLinksInNewTab\":false},\"title\":\"\",\"type\":\"markdown\",\"uiState\":{}}},\"gridData\":{\"h\":39,\"i\":\"4c3ed6e1-8b4e-4eab-8d84-70ed4f506216\",\"w\":7,\"x\":0,\"y\":0},\"panelIndex\":\"4c3ed6e1-8b4e-4eab-8d84-70ed4f506216\",\"title\":\"Files Navigation Textbox [Logs ThreatQ]\",\"type\":\"visualization\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-88a112e1-6da1-49d3-9177-19f98280c200\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"88a112e1-6da1-49d3-9177-19f98280c200\":{\"columnOrder\":[\"604f1693-15a6-437d-af69-03588db8e471\"],\"columns\":{\"604f1693-15a6-437d-af69-03588db8e471\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Ports\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.port\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"604f1693-15a6-437d-af69-03588db8e471\",\"layerId\":\"88a112e1-6da1-49d3-9177-19f98280c200\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"c7c6e8dc-b649-434c-9650-8a1564d4d676\",\"w\":6,\"x\":7,\"y\":0},\"panelIndex\":\"c7c6e8dc-b649-434c-9650-8a1564d4d676\",\"title\":\"Unique Ports [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-a6fa56f8-32fa-405d-8771-dade4fe75d62\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"a6fa56f8-32fa-405d-8771-dade4fe75d62\":{\"columnOrder\":[\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\"],\"columns\":{\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Extensions\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.extension\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"848c463b-bbc1-4b6a-af3e-76d844eb3cc5\",\"layerId\":\"a6fa56f8-32fa-405d-8771-dade4fe75d62\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"73a752f9-bde5-4396-8ede-e9e77a37182d\",\"w\":6,\"x\":13,\"y\":0},\"panelIndex\":\"73a752f9-bde5-4396-8ede-e9e77a37182d\",\"title\":\"Unique File Extensions [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-9fa49c4c-5544-472d-afce-e51d6a5687fe\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"9fa49c4c-5544-472d-afce-e51d6a5687fe\":{\"columnOrder\":[\"15e2b5ad-2040-4253-89a6-60f085c66f86\",\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\"],\"columns\":{\"15e2b5ad-2040-4253-89a6-60f085c66f86\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.url.extension\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.extension\"},\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"15e2b5ad-2040-4253-89a6-60f085c66f86\",\"15e2b5ad-2040-4253-89a6-60f085c66f86\"],\"layerId\":\"9fa49c4c-5544-472d-afce-e51d6a5687fe\",\"layerType\":\"data\",\"legendDisplay\":\"default\",\"metric\":\"b9a631fe-5f49-4db2-a076-bcbf5410aec9\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"treemap\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":31,\"i\":\"fda93ed1-72f0-4489-80b7-9e69d14f30aa\",\"w\":23,\"x\":25,\"y\":0},\"panelIndex\":\"fda93ed1-72f0-4489-80b7-9e69d14f30aa\",\"title\":\"Most Popular File Extensions [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-c94400ee-a135-4a99-9693-5879d29f7aad\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"c94400ee-a135-4a99-9693-5879d29f7aad\":{\"columnOrder\":[\"2934249f-fce5-4637-87ff-d2596d1b6ec5\"],\"columns\":{\"2934249f-fce5-4637-87ff-d2596d1b6ec5\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Unique Domains\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"threat.indicator.url.domain\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"accessor\":\"2934249f-fce5-4637-87ff-d2596d1b6ec5\",\"layerId\":\"c94400ee-a135-4a99-9693-5879d29f7aad\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsMetric\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"02f1732b-a981-4fba-8b27-b944f2f3c98c\",\"w\":6,\"x\":19,\"y\":0},\"panelIndex\":\"02f1732b-a981-4fba-8b27-b944f2f3c98c\",\"title\":\"Unique Domains [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-0f63318a-a857-4d83-89ce-a94e2242b79e\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"0f63318a-a857-4d83-89ce-a94e2242b79e\":{\"columnOrder\":[\"df0791a6-247c-4434-a43a-fdea7577ca34\",\"77a48096-02aa-4b7a-8a7b-131fc38988bd\"],\"columns\":{\"77a48096-02aa-4b7a-8a7b-131fc38988bd\":{\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count of records\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"df0791a6-247c-4434-a43a-fdea7577ca34\":{\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Top values of threat.indicator.url.scheme\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"77a48096-02aa-4b7a-8a7b-131fc38988bd\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"size\":5},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.scheme\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"layers\":[{\"categoryDisplay\":\"default\",\"groups\":[\"df0791a6-247c-4434-a43a-fdea7577ca34\"],\"layerId\":\"0f63318a-a857-4d83-89ce-a94e2242b79e\",\"layerType\":\"data\",\"legendDisplay\":\"show\",\"metric\":\"77a48096-02aa-4b7a-8a7b-131fc38988bd\",\"nestedLegend\":false,\"numberDisplay\":\"percent\"}],\"shape\":\"donut\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsPie\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"ab7ab31c-e76f-4613-b17d-fdd909f17e0d\",\"w\":18,\"x\":7,\"y\":8},\"panelIndex\":\"ab7ab31c-e76f-4613-b17d-fdd909f17e0d\",\"title\":\"Percentage of URL Schema used [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"},{\"embeddableConfig\":{\"attributes\":{\"references\":[{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"logs-*\",\"name\":\"indexpattern-datasource-layer-db89074c-e1fe-4091-bdb1-e42a36e82bac\",\"type\":\"index-pattern\"}],\"state\":{\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"db89074c-e1fe-4091-bdb1-e42a36e82bac\":{\"columnOrder\":[\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\",\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\"],\"columns\":{\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\":{\"customLabel\":true,\"dataType\":\"number\",\"isBucketed\":false,\"label\":\"Count\",\"operationType\":\"count\",\"scale\":\"ratio\",\"sourceField\":\"Records\"},\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\":{\"customLabel\":true,\"dataType\":\"string\",\"isBucketed\":true,\"label\":\"Domains\",\"operationType\":\"terms\",\"params\":{\"missingBucket\":false,\"orderBy\":{\"columnId\":\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\",\"type\":\"column\"},\"orderDirection\":\"desc\",\"otherBucket\":false,\"size\":10},\"scale\":\"ordinal\",\"sourceField\":\"threat.indicator.url.domain\"}},\"incompleteColumns\":{}}}}},\"filters\":[],\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"visualization\":{\"columns\":[{\"columnId\":\"7ca1ac0b-2060-4431-a4b9-ec470af4448c\",\"isTransposed\":false},{\"columnId\":\"b284ea2a-a2cd-4d08-bf44-fc73c08b5694\",\"isTransposed\":false}],\"layerId\":\"db89074c-e1fe-4091-bdb1-e42a36e82bac\",\"layerType\":\"data\"}},\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsDatatable\"},\"enhancements\":{},\"hidePanelTitles\":false},\"gridData\":{\"h\":16,\"i\":\"8994501a-1550-4cf2-857f-d6b6491ffb62\",\"w\":18,\"x\":7,\"y\":23},\"panelIndex\":\"8994501a-1550-4cf2-857f-d6b6491ffb62\",\"title\":\"Most Popular Domains [Logs ThreatQ]\",\"type\":\"lens\",\"version\":\"8.0.0-SNAPSHOT\"}]", + "timeRestore": false, + "title": "[Logs ThreatQ] URLs", + "version": 1 + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_threatq-b45b0c40-78f1-11ec-a97c-7db1518ab848", + "migrationVersion": { + "dashboard": "8.0.0" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c7c6e8dc-b649-434c-9650-8a1564d4d676:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c7c6e8dc-b649-434c-9650-8a1564d4d676:indexpattern-datasource-layer-88a112e1-6da1-49d3-9177-19f98280c200", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "73a752f9-bde5-4396-8ede-e9e77a37182d:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "73a752f9-bde5-4396-8ede-e9e77a37182d:indexpattern-datasource-layer-a6fa56f8-32fa-405d-8771-dade4fe75d62", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "fda93ed1-72f0-4489-80b7-9e69d14f30aa:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "fda93ed1-72f0-4489-80b7-9e69d14f30aa:indexpattern-datasource-layer-9fa49c4c-5544-472d-afce-e51d6a5687fe", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "02f1732b-a981-4fba-8b27-b944f2f3c98c:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "02f1732b-a981-4fba-8b27-b944f2f3c98c:indexpattern-datasource-layer-c94400ee-a135-4a99-9693-5879d29f7aad", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ab7ab31c-e76f-4613-b17d-fdd909f17e0d:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ab7ab31c-e76f-4613-b17d-fdd909f17e0d:indexpattern-datasource-layer-0f63318a-a857-4d83-89ce-a94e2242b79e", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8994501a-1550-4cf2-857f-d6b6491ffb62:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8994501a-1550-4cf2-857f-d6b6491ffb62:indexpattern-datasource-layer-db89074c-e1fe-4091-bdb1-e42a36e82bac", + "type": "index-pattern" + }, + { + "id": "ti_threatq-c0cca010-78f1-11ec-a97c-7db1518ab848", + "name": "tag-ti_threatq-c0cca010-78f1-11ec-a97c-7db1518ab848", + "type": "tag" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/ti_threatq/1.2.2/kibana/tag/ti_threatq-c0cca010-78f1-11ec-a97c-7db1518ab848.json b/packages/ti_threatq/1.2.2/kibana/tag/ti_threatq-c0cca010-78f1-11ec-a97c-7db1518ab848.json new file mode 100755 index 0000000000..be8a15d6e9 --- /dev/null +++ b/packages/ti_threatq/1.2.2/kibana/tag/ti_threatq-c0cca010-78f1-11ec-a97c-7db1518ab848.json @@ -0,0 +1,14 @@ +{ + "attributes": { + "color": "#6092C0", + "description": "", + "name": "ThreatQ" + }, + "coreMigrationVersion": "8.0.0", + "id": "ti_threatq-c0cca010-78f1-11ec-a97c-7db1518ab848", + "migrationVersion": { + "tag": "8.0.0" + }, + "references": [], + "type": "tag" +} \ No newline at end of file diff --git a/packages/ti_threatq/1.2.2/manifest.yml b/packages/ti_threatq/1.2.2/manifest.yml new file mode 100755 index 0000000000..5001710993 --- /dev/null +++ b/packages/ti_threatq/1.2.2/manifest.yml @@ -0,0 +1,26 @@ +name: ti_threatq +title: ThreatQuotient +version: 1.2.2 +release: ga +description: This Elastic integration collects threat intelligence from ThreatQuotient +type: integration +format_version: 1.0.0 +license: basic +categories: [security] +conditions: + kibana.version: ^8.0.0 +icons: + - src: /img/threatq.svg + title: ThreatQuotient + size: 600x600 + type: image/svg+xml +policy_templates: + - name: ti_threatq + title: ThreatQuotient + description: Collect threat intelligence from the ThreatQuotient API. + inputs: + - type: httpjson + title: "Collect threat intelligence from the ThreatQuotient API." + description: "Collect threat intelligence from the ThreatQuotient API." +owner: + github: elastic/security-external-integrations