Интеграция Cisco Secure Endpoint с Wazuh

Wazuh – унифицированная XDR и SIEM платформа.

Cisco Secure Endpoint предоставляет облачную консоль для обнаружения и реагирования на события конечной точки.

Для оптимизации сбора, анализа и оповещений необходимо настроить отправку журналов Cisco Secure Endpoint в Wazuh.

Нужно начать с создания учетных данных API в Cisco Secure Endpoint, закладывая основу для связи с платформой.

Затем необходимо создать поток событий – канал для данных безопасности в режиме реального времени. Он образует «мост» между Cisco Secure Endpoint и Wazuh, обеспечивая непрерывную передачу важных данных журнала.

Также нужно создать скрипт Python для подключения к потоку событий и сбора журналов из Cisco Secure Endpoint. Он собирает и отправляет данные на сервер Wazuh для анализа и своевременных оповещений.

Что нужно перед началом:

  • Предварительно установленная и готовая к использованию виртуальная машина Wazuh OVA 4.6.0, включающая основные компоненты решения (сервер, indexer, дешборд).

  • Подписка на Cisco Secure Endpoint и права администратора пользователя для создания учетных данных API.

  • Установленный агент Cisco Secure Endpoint на тестовой точке Windows 11 для проверки интеграции.

Создание учетных данных API на дешборде Cisco Secure Endpoint

1) Перейти в Admin > API Credentials на дешборде Cisco Secure Endpoint.

2) Выбрать New API Credential для создания новых учетных данных API.

3) Ввести «wazuh-integration» в Application name, ниже выбрать Read & Write и нажать Create.

4) Следующие действия необходимы для создания потока событий, сбора и анализа журналов.

Настройка сервера Wazuh для интеграции

Следующие действия необходимы для создания потока событий, сбора и анализа журналов.

1) Выполнить следующую команду для создания потока событий в Cisco Secure Endpoint. Заменить <API_CLIEND_ID> и <API_KEY> учетные данные API, сгенерированные на дешборде. Это нужно для подключения к потоку событий.

curl -u <API_CLIENT_ID>:<API_KEY> -H "Content-Type: application/json" -d '{"name": "WAZUH_EVENT_STREAM"}' <URL>

Также необходимо заменить <URL> в зависимости от имени хоста региона.

Возможные варианты:

Северная Америка: https://api.amp.cisco.com/v1/event_streams
Европа: https://api.eu.amp.cisco.com/v1/event_streams
Азиатско-Тихоокеанский регион: https://api.apjc.amp.cisco.com/v1/event_streams

Далее нужно безопасно сохранить результат.

Пример:

{"version":"v1.2.0","metadata":{"links":{"self":"https://api.amp.cisco.com/v1/event_streams"}},"data":{"id":3440,"name":"WAZUH_EVENT_STREAM","amqp_credentials":{"user_name":"3440-b1fcf7259811656da5b2","queue_name":"event_stream_3440","password":"58a9dfbf585997710ea88ca43b595018abed8d84","host":"export-streaming.amp.cisco.com","port":"443","proto":"amqps"}}}

Из него можно получить следующие значения:

{
  "version": "v1.2.0",
  "metadata": {
    "links": {
      "self": "https://api.amp.cisco.com/v1/event_streams"
    }
  },
  "data": {
    "id": 3440,
    "name": "WAZUH_EVENT_STREAM",
    "amqp_credentials": {
      "user_name": "<STREAM_USERNAME>",
      "queue_name": "<STREAM_QUEUE_NAME>",
      "password": "<STREAM_PASSWORD>",
      "host": "<STREAM_HOSTNAME>",
      "port": "<STREAM_PORT>",
      "proto": "amqps"
    }
  }
}

2) Создать скрипт Python в /var/ossec/integrations/cisco_secure_endpoint.py для подключения к потоку событий и получения данных журналов Cisco. Заменить значения переменных user_name, queue_name, password, host, port на соответствующие учетные данные с первого шага:

#!/var/ossec/framework/python/bin/python3

import pika
import ssl
from socket import socket, AF_UNIX, SOCK_DGRAM

user_name = "<STREAM_USERNAME>"
queue_name = "<STREAM_QUEUE_NAME>"
password = "<STREAM_PASSWORD>"
host = "<STREAM_HOSTNAME>"
port = "<STREAM_PORT>"

socket_addr = '/var/ossec/queue/sockets/queue'

def send_event(msg):
    string = '1:ciscoendpoint:{"ciscoendpoint":' + msg.decode('utf-8') + '}'
    sock = socket(AF_UNIX, SOCK_DGRAM)
    sock.connect(socket_addr)
    sock.send(string.encode())
    sock.close()
    return True

def callback(channel, method, properties, body):
    try:
        send_event(body)
        channel.basic_ack(delivery_tag=method.delivery_tag)
        print("Cisco Secure Endpoint log sent to Wazuh")
    except Exception as e:
        print("Failed to send Cisco Secure Endpoint log to Wazuh")

amqp_url = f"amqps://{user_name}:{password}@{host}:{port}"

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
amqp_ssl = pika.SSLOptions(context)

params = pika.URLParameters(amqp_url)
params.ssl_options = amqp_ssl

connection = pika.BlockingConnection(params)
channel = connection.channel()

channel.basic_consume(
    queue_name,
    callback,
    auto_ack = False
)

channel.start_consuming()

Примечание: рекомендуется использовать решения для управления секретами, чтобы сохранить там значения переменных user_name, queue_name, password вместо их жесткого кодирования в скрипте, который можно применять только для тестирования. Его можно изменить таким образом, чтобы извлечь учетные данные из решения для управления секретами при его использовании в продакшне.

3) Добавить права собственности и разрешения для файла /var/ossec/integrations/cisco_secure_endpoint.py:

chown root:wazuh /var/ossec/integrations/cisco_secure_endpoint.py
chmod 750 /var/ossec/integrations/cisco_secure_endpoint.py

4) Установить модуль Python pika, необходимый для запуска скрипта cisco_secure_endpoint.py:

/var/ossec/framework/python/bin/pip3 install pika

5) Создать новый файл правил /var/ossec/etc/rules/cisco_endpoint_rules.xml и добавить следующие правила для оповещения про все события, полученные от Cisco Secure Endpoint:

<group name="ciscoendpoint,">

  <rule id="110010" level="3">
    <location>ciscoendpoint</location>
    <description>Cisco Secure Endpoint: $(ciscoendpoint.event_type).</description>
  </rule>

  <rule id="110011" level="6">
    <if_sid>110010</if_sid>
    <field name="ciscoendpoint.severity">Low</field>
    <description>Cisco Secure Endpoint: $(ciscoendpoint.event_type).</description>
  </rule>

  <rule id="110012" level="9">
    <if_sid>110010</if_sid>
    <field name="ciscoendpoint.severity">Medium</field>
    <description>Cisco Secure Endpoint: $(ciscoendpoint.event_type).</description>
  </rule>

  <rule id="110013" level="12">
    <if_sid>110010</if_sid>
    <field name="ciscoendpoint.severity">High</field>
    <description>Cisco Secure Endpoint: $(ciscoendpoint.event_type).</description>
  </rule>

  <rule id="110014" level="15">
    <if_sid>110010</if_sid>
    <field name="ciscoendpoint.severity">Critical</field>
    <description>Cisco Secure Endpoint: $(ciscoendpoint.event_type).</description>
  </rule>

</group>

110010 – правило для оповещения о событиях, полученных от Cisco Secure Endpoint.

Эти правила сообщают о событиях, отмеченных Cisco Secure Endpoint определенным уровнем серьезности:

110011 – «Низкий»
110012 – «Средний»
110013 – «Высокий»
110014 – «Критический»

6) Перезапустить службу диспетчера Wazuh для применения изменений:

systemctl restart wazuh-manager

7) Создать службу systemd в /lib/systemd/system/wazuh-ciscoendpoint.service для управления скриптом интеграции и обеспечения стойкости в случае сбоя:

[Unit]
Description=Wazuh Cisco Secure Endpoint integration
Wants=network-online.target
After=network.target network-online.target

[Service]
ExecStart=/var/ossec/framework/python/bin/python3 /var/ossec/integrations/cisco_secure_endpoint.py
Restart=on-failure

[Install]
WantedBy=multi-user.target

8) Перезагрузить systemd, включить и запустить службу wazuh-ciscoendpoint:

systemctl daemon-reload
systemctl enable wazuh-ciscoendpoint.service
systemctl start wazuh-ciscoendpoint.service

9) Проверить статус службы wazuh-ciscoendpoint:

systemctl status wazuh-ciscoendpoint.service

Проверка интеграции

Необходимо загрузить тестовый (зараженный) файл для проверки защиты от вредоносного ПО на конечной точке, где работает агент Cisco Secure Endpoint. Это должно сразу инициировать оповещения на дешборде Wazuh. Интеграция выполнена на его сервере, поэтому соответствующее название агента (wazuh-server) и его ID (000) отображаются в данных оповещений.

Ниже наведены все данные оповещения об одном из событий, полученном от Cisco Secure Endpoint:

{
  "agent": {
    "name": "wazuh-server",
    "id": "000"
  },
  "manager": {
    "name": "wazuh-server"
  },
  "data": {
    "ciscoendpoint": {
      "date": "2023-10-16T10:31:18+00:00",
      "severity": "Medium",
      "detection": "ZIP.INV.2546DCFF.CAE.Talos",
      "group_guids": [
        "45160b2d-65f9-42d0-aa0a-b7be190ce757"
      ],
      "event_type_id": "1090519054",
      "timestamp_nanoseconds": "633000000",
      "computer": {
        "hostname": "Windows11",
        "network_addresses": [
          {
            "ip": "192.168.132.141",
            "mac": "00:0c:29:dd:5a:c2"
          },
          {
            "ip": "192.168.223.128",
            "mac": "00:0c:29:dd:5a:b8"
          }
        ],
        "connector_guid": "81eeab44-2c4b-4146-aab6-5fe03cfbdc40",
        "active": "true",
        "links": {
          "computer": "https://api.amp.cisco.com/v1/computers/81eeab44-2c4b-4146-aab6-5fe03cfbdc40",
          "trajectory": "https://api.amp.cisco.com/v1/computers/81eeab44-2c4b-4146-aab6-5fe03cfbdc40/trajectory",
          "group": "https://api.amp.cisco.com/v1/groups/45160b2d-65f9-42d0-aa0a-b7be190ce757"
        },
        "user": "User@WINDOWS11",
        "external_ip": "xx.xx.xx.xx"
      },
      "event_type": "Threat Detected",
      "file": {
        "file_path": "\\\\?\\C:\\Users\\User\\Downloads\\cf1dfa49-0f1a-4549-baaa-c71dc8789d63.tmp",
        "parent": {
          "process_id": "3656",
          "disposition": "Unknown",
          "file_name": "msedge.exe",
          "identity": {
            "sha1": "ec2e76bf2047ef629a98d4ea4775016b79fe66ee",
            "sha256": "b99374fb71f72fb3fdd32f93c73b0d29321cf529c1589e69b9dff62a45b76b8d",
            "md5": "25ac5fb4f45f573b8d8679e11efb1f70"
          }
        },
        "disposition": "Malicious",
        "file_name": "cf1dfa49-0f1a-4549-baaa-c71dc8789d63.tmp",
        "identity": {
          "sha1": "d27265074c9eac2e2122ed69294dbc4d7cce9141",
          "sha256": "2546dcffc5ad854d4ddc64fbf056871cd5a00f2471cb7a5bfd4ac23b6e9eedad",
          "md5": "6ce6f415d8475545be5ba114f208b0ff"
        }
      },
      "connector_guid": "81eeab44-2c4b-4146-aab6-5fe03cfbdc40",
      "id": "7290502020530700288.000000",
      "detection_id": "7290502020530700312",
      "timestamp": "1697452278"
    }
  },
  "rule": {
    "firedtimes": 3,
    "mail": false,
    "level": 9,
    "description": "Cisco Secure Endpoint: Threat Detected.",
    "groups": [
      "ciscoendpoint"
    ],
    "id": "110012"
  },
  "decoder": {
    "name": "json"
  },
  "full_log": "{\"ciscoendpoint\":{\"id\":7290502020530700345,\"timestamp\":1697452278,\"timestamp_nanoseconds\":633000000,\"date\":\"2023-10-16T10:31:18+00:00\",\"event_type\":\"Threat Detected\",\"event_type_id\":1090519054,\"detection\":\"ZIP.INV.2546DCFF.CAE.Talos\",\"detection_id\":\"7290502020530700312\",\"connector_guid\":\"81eeab44-2c4b-4146-aab6-5fe03cfbdc40\",\"group_guids\":[\"45160b2d-65f9-42d0-aa0a-b7be190ce757\"],\"severity\":\"Medium\",\"computer\":{\"connector_guid\":\"81eeab44-2c4b-4146-aab6-5fe03cfbdc40\",\"hostname\":\"Windows11\",\"external_ip\":\"xx.xx.xx.xx\",\"user\":\"User@WINDOWS11\",\"active\":true,\"network_addresses\":[{\"ip\":\"192.168.132.141\",\"mac\":\"00:0c:29:dd:5a:c2\"},{\"ip\":\"192.168.223.128\",\"mac\":\"00:0c:29:dd:5a:b8\"}],\"links\":{\"computer\":\"https://api.amp.cisco.com/v1/computers/81eeab44-2c4b-4146-aab6-5fe03cfbdc40\",\"trajectory\":\"https://api.amp.cisco.com/v1/computers/81eeab44-2c4b-4146-aab6-5fe03cfbdc40/trajectory\",\"group\":\"https://api.amp.cisco.com/v1/groups/45160b2d-65f9-42d0-aa0a-b7be190ce757\"}},\"file\":{\"disposition\":\"Malicious\",\"file_name\":\"cf1dfa49-0f1a-4549-baaa-c71dc8789d63.tmp\",\"file_path\":\"\\\\\\\\?\\\\C:\\\\Users\\\\User\\\\Downloads\\\\cf1dfa49-0f1a-4549-baaa-c71dc8789d63.tmp\",\"identity\":{\"sha256\":\"2546dcffc5ad854d4ddc64fbf056871cd5a00f2471cb7a5bfd4ac23b6e9eedad\",\"sha1\":\"d27265074c9eac2e2122ed69294dbc4d7cce9141\",\"md5\":\"6ce6f415d8475545be5ba114f208b0ff\"},\"parent\":{\"process_id\":3656,\"disposition\":\"Unknown\",\"file_name\":\"msedge.exe\",\"identity\":{\"sha256\":\"b99374fb71f72fb3fdd32f93c73b0d29321cf529c1589e69b9dff62a45b76b8d\",\"sha1\":\"ec2e76bf2047ef629a98d4ea4775016b79fe66ee\",\"md5\":\"25ac5fb4f45f573b8d8679e11efb1f70\"}}}}}",
  "input": {
    "type": "log"
  },
  "@timestamp": "2023-10-16T10:31:20.938Z",
  "location": "ciscoendpoint",
  "id": "1697452280.433862",
  "timestamp": "2023-10-16T13:31:20.938+0300",
  "_id": "qTkKOIsByUthJ9hfXuOc"
}

Подписаться на новости