Усиление Wazuh с помощью Ollama: Повышение кибербезопасности (Часть 3)

Wazuh и Ollama: Часть 3. Создание интеграции вашего кластера Wazuh с Ollama

Wazuh предоставляет огромные и почти бесконечные возможноности по интеграции с различными система, даже если какого-то функционала не хватает вы всегда можете написать свой.

Интеграции с внешними системами могут быть двух видов:

  • External API integrations: Этот метод позволяет взаимодействовать с внешними системами через API для автоматизации задач. Полученные данные могут использоваться для создания событий в Wazuh или выполнения других автоматизированных действий, повышая эффективность мониторинга и реагирования на угрозы.
  • Command: Этот метод позволяет запускать команды или скрипты по расписанию для автоматического создания событий в Wazuh. Я часто использую этот подход, когда необходимо получать данные из источников, которые не поддерживаются по умолчанию. Это помогает расширить возможности мониторинга и интеграции с нестандартными системами.

Для интеграции с Ollama мы используем метод External API integrations. Мы разработаем интегратор, который будет взаимодействовать с Ollama через API, автоматизируя обработку данных. Полученная информация позволит создавать события в Wazuh и выполнять другие автоматизированные действия.

External API integrations

В Wazuh предусмотрен удобный механизм для интеграции с внешними API.

Процесс настройки включает несколько простых шагов:

  • Создаём скрипт в /var/ossec/integrations/.
  • Имя скрипта должно начинаться с custom-.
  • Добавляем новую интеграцию в ossec.conf.
  • Настраиваем правила и декодеры для обработки данных.
  • Перезапускаем Wazuh для применения изменений.

Этот процесс позволяет легко расширять функциональность Wazuh, подключая его к сторонним сервисам для автоматизированного мониторинга и анализа событий.

Разработка интеграции между Ollama и Wazuh

Чтобы упростить процесс разработки, я буду использовать Python — гибкий и удобный язык, идеально подходящий для работы с API и автоматизации процессов в Wazuh.

1. Работа с API Ollama

Для работы с Ollama мы будем использовать официальную библиотеку ollama. Перед началом убедитесь, что у вас установлены Python и pip, затем установите библиотеку с помощью команды:

pip install ollama

Библиотека Ollama очень проста в использовании. Давайте начнем с создания базовой функции, которая будет взаимодействовать с Ollama и отправлять запросы:

from ollama import chat

response = chat(model='llama3.2', messages=[
  {
    'role': 'user',
    'content': 'what is it Wazuh"?',
  },
])
print(response['message']['content'])
  • model='llama3.2' - имя модели для использования.
  • messages - список сообщений, которые будут отправлены в Ollama.
  • response - результат выполнения запроса.
  • response['message']['content'] - содержимое ответа.

В данном примере мы отправляем запрос к модели llama3.2, которая является одной из наиболее популярных моделей для работы с текстом. В качестве контента мы передаем строку “what is it Wazuh”?. После выполнения запроса, мы получаем ответ, который содержит информацию о Wazuh. По-умолчанию библиотека отправляет запросы использую в качестве host localhost и порт 11434. Однако, если ваш сервер Ollama находится на другом хосте или порту, вам нужно указать соответствующие значения в параметре host и port. Для этого необходимо использовать Client например:

from ollama import Client

client = Client(
  host='http://123.123.123.1:11434',
)
response = client.chat(model='llama3.2', messages=[
  {
    'role': 'user',
    'content': 'what is it Wazuh"?',
  },
],)
print(response['message']['content'])

2. Как можно работать с Wazuh в Python?

Для интеграции с Wazuh через Python существует несколько эффективных подходов, и одним из самых простых и быстрых является использование прямого взаимодействия через unix-socket. Этот метод позволяет подключаться к Wazuh без сложной настройки сетевых соединений, что ускоряет процесс и делает его более стабильным.

Для упрощения процесса интеграции с Wazuh и автоматизации задач, мы будем использовать встроенный Python-интерпретатор, который поставляется с Wazuh. Это исключает необходимость в установке внешних библиотек или создании дополнительной среды, позволяя быстро и эффективно настроить систему для обработки событий и автоматизации процессов в Wazuh.

Получаем путь до Wazuh:

wazuh_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))

Тогда unix-socker будет находиться по пути:

socket_addr = "{0}/queue/sockets/queue".format(wazuh_path)

Теперь мы можем попробовать создать функцию по отправки событий в unix-socket:

def send_event(msg):
    string = "1:somename:{0}".format(json.dumps(msg))
    sock = socket(AF_UNIX, SOCK_DGRAM)
    sock.connect(socket_addr)
    sock.send(string.encode())
    sock.close()

Структура string такова:

  • 1: - Это идентификатор и соответствует Wazuh manager
  • somename: - уникальное имя
  • {0}: - JSON-строка с сообщением

Когда в Wazuh создается событие согласно заданным правилам, оно передается через Unix-сокет для дальнейшей обработки. Этот процесс начинается с того, что Wazuh manager вызывает функцию send_event и передает ей JSON-строку.

Строка, содержащая данные события, затем отправляется в Unix-сокет, что позволяет взаимодействовать с другими сервисами или интеграциями, такими как Ollama.

Как работает процесс создания и отправки события
  1. Создание события: Когда срабатывает правило в Wazuh, создается событие в формате JSON. Это событие включает важные данные, такие как тип инцидента, источник, описание и дополнительные параметры.

  2. Вызов функции send_event: В ответ на сработавшее правило, Wazuh manager вызывает функцию send_event, в которой передается сформированная JSON-строка.

  3. Передача через Unix-сокет: Эта JSON-строка затем отправляется через Unix-сокет.

Продолжение интеграции будет представлено в следующих постах. Следите за обновлениями!


Смотрите также