Інтеграція 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) Скопіювати облікові дані API.

Налаштування сервера 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"
}

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