CohesityHelios
Integrate with Cohesity Helios services to fetch alerts and take remedial action.
Vulnerability Management · Cohesity Helios
Details
| ID | CohesityHelios |
|---|---|
| Provider | Cohesity |
| Category | Vulnerability Management |
| From Version | 6.0.0 |
| Docker Image | demisto/python3:3.12.13.10116658 |
| Supported Modules | Agentix XSIAM |
README
Integrate with Cohesity Helios services to fetch alerts and take remedial action.
This integration was integrated and tested with version 08.01 of CohesityHelios.
Configure CohesityHelios in Cortex
| Parameter | Description | Required |
|---|---|---|
| Your server URL | True | |
| API Key | The API Key to use for connection | True |
| Trust any certificate (not secure) | Trust any certificate (not secure). | False |
| Use system proxy settings | Use system proxy settings. | False |
| Incident type | False | |
| Maximum number of incidents to fetch every time | True | |
| First fetch timestamp | False | |
| Fetch incidents | False | |
| Incidents Fetch Interval | False |
Commands
You can execute these commands from the CLI, as part of an automation, or in a playbook.
After you successfully execute a command, a DBot message appears in the War Room with the command details.
cohesity-helios-get-ransomware-alerts
Get Cohesity Helios ransomware alerts.
Base Command
cohesity-helios-get-ransomware-alerts
Input
| Argument Name | Description | Required |
|---|---|---|
| created_after | Returns only alerts created after the provided timestamp (ISO8601 format YYYY-MM-DDTHH:MM:SSZ). | Optional |
| created_before | Returns only alerts created before the provided timestamp (ISO8601 format YYYY-MM-DDTHH:MM:SSZ). | Optional |
| limit | Limits the number of alerts to return. Default is 200. | Optional |
| alert_id_list | List of comma-separated alert identifiers to filter alerts. | Optional |
| cluster_id_list | List of comma-separated cluster identifiers to filter alerts. | Optional |
| region_id_list | List of comma-separated region identifiers to filter alerts. | Optional |
| alert_state_list | One or more state values. Possible values are: kOpen, kSuppressed, kResolved, kNote. Default is kOpen. | Optional |
| alert_severity_list | One or more severity levels. Possible values are: kCritical, kWarning, kInfo. Default is kCritical,kWarning. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| CohesityHelios.RansomwareAlert.alert_id | String | The identifier for the ransomware alert. |
| CohesityHelios.RansomwareAlert.occurrence_time | Date | The timestamp when the alert occurred (for example, 2020-01-01T00:11:22Z). |
| CohesityHelios.RansomwareAlert.severity | String | The severity of the ransomware alert. |
| CohesityHelios.RansomwareAlert.alert_description | String | The description for the ransomware alert. |
| CohesityHelios.RansomwareAlert.alert_cause | String | The cause for the ransomware alert. |
| CohesityHelios.RansomwareAlert.cluster_id | Number | The cluster ID where the alert originated. |
| CohesityHelios.RansomwareAlert.cluster_name | String | The cluster name where the alert originated. |
| CohesityHelios.RansomwareAlert.entity_id | String | The entity ID (object ID) from the alert propertyList. |
| CohesityHelios.RansomwareAlert.job_id | String | The job ID from the alert propertyList. |
cohesity-helios-ignore-anomalous-object
Ignore detected anomalous object by suppressing the alert.
Base Command
cohesity-helios-ignore-anomalous-object
Input
| Argument Name | Description | Required |
|---|---|---|
| alert_id | The alert ID to suppress. | Required |
Context Output
There is no context output for this command.
Command Example
!cohesity-helios-ignore-anomalous-object alert_id=9346668452014081:1632849269030240
Human Readable Output
Ignored alert 9346668452014081:1632849269030240.
cohesity-helios-restore-latest-clean-snapshot
Restore the latest clean snapshot for the given object using incidence details.
Base Command
cohesity-helios-restore-latest-clean-snapshot
Input
| Argument Name | Description | Required |
|---|---|---|
| alert_id | The alert ID to restore the latest clean snapshot for. | Required |
Context Output
There is no context output for this command.
Command Example
!cohesity-helios-restore-latest-clean-snapshot alert_id=2122491972847952:1632848348897740
Human Readable Output
Restored vm-ubuntu-05 (id=object-1002) from latest clean snapshot.
Configuration parameters
url— Your server URL (required)apikey— API Key (required)insecure— Trust any certificate (not secure)proxy— Use system proxy settingsincidentType— Incident typemax_fetch— Maximum number of incidents to fetch every time (required)first_fetch— First fetch timestampisFetch— Fetch incidentsincidentFetchInterval— Incidents Fetch Interval
Commands (3)
-
cohesity-helios-get-ransomware-alertsGet Cohesity Helios ransomware alerts.
-
cohesity-helios-ignore-anomalous-objectIgnore detected anomalous object by suppressing the alert.
-
cohesity-helios-restore-latest-clean-snapshotRestore the latest clean snapshot for the given object using incidence details.
"""Cohesity Helios Cortex XSOAR - Unit Tests file""" import json BASE_URL = "https://helios.cohesity.com/" ALERTS_V2_URL = BASE_URL + "v2/mcm/alerts" ALERT_PATCH_URL = BASE_URL + "mcm/alerts/" INCIDENCES_URL = BASE_URL + "mcm/argus/api/v1/public/incidences" RECOVERIES_URL = BASE_URL + "v2/data-protect/recoveries" MOCK_ALERT_ID = "6595940238747379:1630539139046817" MOCK_ALERTS_RESP_FILE = "test_data/get_ransomware_alerts_resp.json" MOCK_ALERT_DETAIL_RESP_FILE = "test_data/get_ransomware_alert_detail_resp.json" MOCK_INCIDENCE_RESP_FILE = "test_data/get_incidence_details_resp.json" def util_load_json(path): with open(path, encoding="utf-8") as f: return json.loads(f.read()) def test_test_module(requests_mock): """Tests test-module command function.""" from CohesityHelios import Client, test_module # Given: A Cohesity client with a valid alerts endpoint response. client = Client(base_url=BASE_URL, verify=False) mock_response = {"alertsList": []} requests_mock.get(ALERTS_V2_URL, json=mock_response) # When: The test-module command is executed. response = test_module(client) # Then: The integration returns an "ok" connectivity result. assert response == "ok" def test_fetch_incidents_command(requests_mock): """Tests fetch incidents command with v2 API response format.""" from CohesityHelios import Client, fetch_incidents_command # Given: A Cohesity client and a mocked v2 alerts response payload. client = Client(base_url=BASE_URL, verify=False) mock_response = util_load_json(MOCK_ALERTS_RESP_FILE) requests_mock.get(ALERTS_V2_URL, json=mock_response) # When: fetch-incidents runs against the mocked data. response = fetch_incidents_command(client) # Then: One incident is created with expected mapped custom fields. assert len(response) == 1 incident = response[0] assert incident["name"] == "DataIngestAnomalyAlert" assert incident["CustomFields"]["cohesityheliosalertid"] == MOCK_ALERT_ID assert incident["CustomFields"]["cohesityheliosobjectid"] == "2294" assert incident["CustomFields"]["cohesityheliosclustername"] == "sac01-pm-haswell2-p1" assert incident["CustomFields"]["cohesityheliosclusterid"] == 6573823962906680 def test_get_ransomware_alerts_command(requests_mock): """Tests get_ransomware_alerts_command with v2 API response format.""" from CohesityHelios import Client, get_ransomware_alerts_command # Given: A Cohesity client and one ransomware alert in the API response. client = Client(base_url=BASE_URL, verify=False) mock_response = util_load_json(MOCK_ALERTS_RESP_FILE) requests_mock.get(ALERTS_V2_URL, json=mock_response) # When: The get-ransomware-alerts command is called. args = {"limit": "10"} result = get_ransomware_alerts_command(client, args) # Then: Command outputs contain expected context fields from the alert. assert result.outputs_prefix == "CohesityHelios.RansomwareAlert" assert len(result.outputs) == 1 assert result.outputs[0]["alert_id"] == MOCK_ALERT_ID assert result.outputs[0]["entity_id"] == "2294" assert result.outputs[0]["job_id"] == "245242" assert result.outputs[0]["cluster_name"] == "sac01-pm-haswell2-p1" def test_ignore_ransomware_anomaly_command(requests_mock): """Tests ignore_ransomware_anomaly_command with alert_id argument.""" from CohesityHelios import Client, ignore_ransomware_anomaly_command # Given: A Cohesity client and a successful suppress alert API response. client = Client(base_url=BASE_URL, verify=False) requests_mock.patch(ALERT_PATCH_URL + MOCK_ALERT_ID, status_code=200, text="") # When: ignore-anomalous-object is called with alert_id. args = {"alert_id": MOCK_ALERT_ID} response = ignore_ransomware_anomaly_command(client, args) # Then: A success message references the same alert_id. assert response == f"Ignored alert {MOCK_ALERT_ID}." def test_restore_latest_clean_snapshot(requests_mock): """Tests restore_latest_clean_snapshot with incidences and recoveries APIs.""" from CohesityHelios import Client, restore_latest_clean_snapshot # Given: Incidence details, recovery API, and resolve alert API are mocked. client = Client(base_url=BASE_URL, verify=False) mock_incidence_resp = util_load_json(MOCK_INCIDENCE_RESP_FILE) requests_mock.get(INCIDENCES_URL, json=mock_incidence_resp) requests_mock.post(RECOVERIES_URL, json={}) requests_mock.patch(ALERT_PATCH_URL + MOCK_ALERT_ID, status_code=200, text="") # When: restore-latest-clean-snapshot is called with alert_id. args = {"alert_id": MOCK_ALERT_ID} response = restore_latest_clean_snapshot(client, args) # Then: The command reports successful recovery of the expected entity. assert response == "Restored mock-testing03 (id=2294) from latest clean snapshot."