|
| 1 | +# OpenCTI ArcSight Incidents Connector |
| 2 | + |
| 3 | +The ArcSight Incidents connector is an **external-import** connector that pulls |
| 4 | +cases and their security events from ArcSight ESM into OpenCTI. It is the import |
| 5 | +side of a bidirectional integration: pair it with the `stream/arcsight` connector |
| 6 | +(which pushes IOCs to ESM Active Lists) to send IOCs out and bring cases in. |
| 7 | + |
| 8 | +ArcSight exposes two distinct concepts that map to two STIX entities: |
| 9 | + |
| 10 | +- **Security events** (detections/alerts) referenced by a case are modeled as |
| 11 | + STIX **Incidents**. |
| 12 | +- The **case** itself (a case-management artifact) is modeled as a STIX |
| 13 | + **Case-Incident** that references the event Incidents it groups through its |
| 14 | + `object_refs`. |
| 15 | + |
| 16 | +Table of Contents |
| 17 | + |
| 18 | +- [OpenCTI ArcSight Incidents Connector](#opencti-arcsight-incidents-connector) |
| 19 | + - [Introduction](#introduction) |
| 20 | + - [Requirements](#requirements) |
| 21 | + - [Configuration variables](#configuration-variables) |
| 22 | + - [OpenCTI environment variables](#opencti-environment-variables) |
| 23 | + - [Base connector environment variables](#base-connector-environment-variables) |
| 24 | + - [Connector extra parameters environment variables](#connector-extra-parameters-environment-variables) |
| 25 | + - [Deployment](#deployment) |
| 26 | + - [Docker Deployment](#docker-deployment) |
| 27 | + - [Manual Deployment](#manual-deployment) |
| 28 | + - [Behavior](#behavior) |
| 29 | + |
| 30 | +## Introduction |
| 31 | + |
| 32 | +ArcSight ESM (OpenText) is a SIEM platform. This connector periodically queries |
| 33 | +the ESM Service Layer REST API (`CaseService` and `SecurityEventService`) for |
| 34 | +cases and the events they reference, then imports them into OpenCTI as STIX 2.1 |
| 35 | +Case-Incidents (the cases) and Incidents (the events), attributed to an ArcSight |
| 36 | +author identity and marked with a configurable TLP. |
| 37 | + |
| 38 | +## Requirements |
| 39 | + |
| 40 | +- OpenCTI Platform >= 7.260701.0 |
| 41 | +- A reachable ArcSight ESM Manager (Service Layer REST API enabled) |
| 42 | +- An ESM account allowed to read cases |
| 43 | + |
| 44 | +## Configuration variables |
| 45 | + |
| 46 | +Configuration parameters can be provided in either `config.yml` (see |
| 47 | +`config.yml.sample`), `docker-compose.yml` (environment variables) or directly as |
| 48 | +environment variables. |
| 49 | + |
| 50 | +### OpenCTI environment variables |
| 51 | + |
| 52 | +| Parameter | config.yml | Docker environment variable | Mandatory | Description | |
| 53 | +| ------------- | ---------- | --------------------------- | --------- | ---------------------------------------------------- | |
| 54 | +| OpenCTI URL | `url` | `OPENCTI_URL` | Yes | The URL of the OpenCTI platform. | |
| 55 | +| OpenCTI Token | `token` | `OPENCTI_TOKEN` | Yes | The default admin token set in the OpenCTI platform. | |
| 56 | + |
| 57 | +### Base connector environment variables |
| 58 | + |
| 59 | +| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | |
| 60 | +| --------------- | ----------------- | ---------------------------- | -------------------- | --------- | --------------------------------------------------- | |
| 61 | +| Connector ID | `id` | `CONNECTOR_ID` | / | Yes | A unique `UUIDv4` identifier for this connector. | |
| 62 | +| Connector Name | `name` | `CONNECTOR_NAME` | `ArcSight Incidents` | No | Name of the connector. | |
| 63 | +| Connector Scope | `scope` | `CONNECTOR_SCOPE` | / | Yes | The scope of the connector. | |
| 64 | +| Log Level | `log_level` | `CONNECTOR_LOG_LEVEL` | `error` | No | Logs verbosity (`debug`, `info`, `warn`, `warning`, `error`). | |
| 65 | +| Duration Period | `duration_period` | `CONNECTOR_DURATION_PERIOD` | `PT15M` | No | ISO-8601 period between two runs. | |
| 66 | + |
| 67 | +### Connector extra parameters environment variables |
| 68 | + |
| 69 | +| Parameter | config.yml | Docker environment variable | Default | Mandatory | Description | |
| 70 | +| ------------ | -------------- | ---------------------------------- | ------- | --------- | ------------------------------------------------- | |
| 71 | +| API base URL | `api_base_url` | `ARCSIGHT_INCIDENTS_API_BASE_URL` | / | Yes | Base URL of the ArcSight ESM Manager. | |
| 72 | +| Username | `username` | `ARCSIGHT_INCIDENTS_USERNAME` | / | Yes | ESM user name. | |
| 73 | +| Password | `password` | `ARCSIGHT_INCIDENTS_PASSWORD` | / | Yes | ESM user password. | |
| 74 | +| Max cases | `max_cases` | `ARCSIGHT_INCIDENTS_MAX_CASES` | `200` | No | Maximum number of cases to fetch per run. | |
| 75 | +| TLP level | `tlp_level` | `ARCSIGHT_INCIDENTS_TLP_LEVEL` | `amber` | No | TLP marking applied to imported incidents. | |
| 76 | +| SSL verify | `ssl_verify` | `ARCSIGHT_INCIDENTS_SSL_VERIFY` | `true` | No | Whether to verify the SSL certificate. | |
| 77 | + |
| 78 | +## Deployment |
| 79 | + |
| 80 | +### Docker Deployment |
| 81 | + |
| 82 | +Build a Docker image using the provided `Dockerfile`: |
| 83 | + |
| 84 | +```shell |
| 85 | +docker build . -t opencti/connector-arcsight-incidents:latest |
| 86 | +``` |
| 87 | + |
| 88 | +Make sure to replace the environment variables in `docker-compose.yml` with the |
| 89 | +appropriate configurations, then start the connector: |
| 90 | + |
| 91 | +```shell |
| 92 | +docker compose up -d |
| 93 | +``` |
| 94 | + |
| 95 | +### Manual Deployment |
| 96 | + |
| 97 | +Copy `config.yml.sample` to `src/config.yml` and fill in the values, then: |
| 98 | + |
| 99 | +```shell |
| 100 | +cd src |
| 101 | +pip install -r requirements.txt |
| 102 | +python main.py |
| 103 | +``` |
| 104 | + |
| 105 | +## Behavior |
| 106 | + |
| 107 | +On each run the connector authenticates against the ESM `LoginService`, lists case |
| 108 | +ids via `CaseService` (capped at `max_cases`) and fetches each case. For every case |
| 109 | +it also resolves the referenced security events via `SecurityEventService`, converts |
| 110 | +each event to a STIX Incident, and converts the case to a STIX Case-Incident that |
| 111 | +references those Incidents through its `object_refs`. The resulting bundle is sent |
| 112 | +to OpenCTI, which deduplicates both entity types by their deterministic id across |
| 113 | +runs. |
0 commit comments