Большая языковая модель (LLM – Large Language Model) – это программа искусственного интеллекта (ИИ), которая распознает, обрабатывает и генерирует тексты, похожие на человеческую речь. Claude Haiku – это LLM-модель, разработанная компанией Antropic, которая может выполнять задачи завершения кода, интерактивных чат-ботов и модерации контента.
Модель Claude Haiku может быть интегрирована как функция чата в дешборд Wazuh. Выполнение этой интеграции обеспечивает интерфейс в пределах дешборда Wazuh, где пользователи могут вводить вопросы, связанные с безопасностью, и спрашивать модель Claude Haiku.
В этой статье описано, как интегрировать модель Claude 3.5 Haiku в дешборд Wazuh.
Требования
Для демонстрации интеграции Claude 3.5 Haiku с Wazuh использовалась следующая инфраструктура:
- Конечная точка Ubuntu 24.04 с центральными компонентами Wazuh (сервер Wazuh, индексатор Wazuh и дешборд Wazuh), инсталлированными с помощью руководства по установке Wazuh. Необходимо обновлять дешборд Wazuh после каждого запроса, если эта интеграция выполняется на Wazuh OVA, который работает под управлением Amazon Linux 2.
- Среда AWS, которая может получить доступ к модели Claude 3.5 Haiku.
Конфигурация
AWS
Следует придерживаться следующих шагов:
- Включить модель Claude 3.5 Haiku
- Создать пользователя IAM и ключи доступа
- Настроить политики Amazon Bedrock
Включение модели Claude 3.5 Haiku
Чтобы включить модель Claude 3.5 Haiku, нужно выполнить следующие действия на консоли AWS.
1. Войти в консоль управления AWS и выполнить поиск «Amazon Bedrock».
2. Выбрать Model access на левой навигационной панели.
3. Нажать Enable specific models и включить модель Claude 3.5 Haiku. Возможно, придется обратиться в службу поддержки, чтобы включить эту модель.


4. После включения модели должен появиться интерфейс, подобный изображенному ниже.


Создание пользователя IAM и ключей доступа
Нужно выполнить следующие шаги на консоли AWS, чтобы создать пользователя IAM и получить ключи доступа.
1. Выполнить поиск «IAM».

2. Выбрать Users на левой навигационной панели и нажать Create user.

3. Назначить имя новому пользователю и завершить процесс создания пользователя.



4. Выбрать Users на левой навигационной панели и нажать на только что созданного пользователя.

5. Перейти на вкладку Security credentials и нажать Create access key.

Стоит сохранить учетные данные надежно, они будут использованы позже при создании коннектора к модели Claude Haiku из дешборда Wazuh.
6. Выбрать опцию Application running outside AWS и нажать кнопку Next.

7. Добавить тег описания для секретных ключей и нажать кнопку Create access key.

8. Сохранить ключ доступа и секретный ключ доступа.
Примечание: Если не скопировать учетные данные до нажатия Done, восстановить их позже не удастся. Однако можно создать новый секретный ключ доступа.
Настройка политик Amazon Bedrock
Необходимо выполнить следующие шаги в консоли AWS, чтобы настроить политики, необходимые для интеграции.
1. Выполнить поиск «IAM».

2. Выбрать Policies на левой панели навигации, нажать Create policy и вставить политику, приведенную ниже. Политика предоставляет доступ к моделям Amazon Bedrock и позволяет пользователю IAM взять на себя ранее созданную роль для Amazon Bedrock.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MarketplaceBedrock",
"Effect": "Allow",
"Action": [
"aws-marketplace:ViewSubscriptions",
"aws-marketplace:Unsubscribe",
"aws-marketplace:Subscribe"
],
"Resource": "*"
}
]
}
3. Дать политике имя и нажать кнопку Create policy.

4. Выбрать только что созданную политику, перейти на вкладку Entities attached и нажать Attach. Найти ранее созданного пользователя IAM и присоединить политику к нему.


5. Убедиться, что политика была успешно прикреплена.

6. Нажать Policies на левой панели навигации и найти политику «AmazonBedrockFullAccess», управляемую AWS. Выбрать политику, нажать Actions и Attach.

7. Найти ранее созданного пользователя AWS IAM и прикрепить политику.

8. Убедиться, что политика была успешно добавлена.

Сервер дешборда Wazuh
Чтобы установить необходимые плагины OpenSearch, следует выполнить следующие действия на сервере, на котором размещен дешборд Wazuh.
1. Загрузить файл плагинов OpenSearch Dashboard:
$ curl https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.13.0/opensearch-dashboards-2.13.0-linux-x64.tar.gz -o opensearch-dashboards.tar.gz
2. Распаковать файл плагина:
$ tar -xvzf opensearch-dashboards.tar.gz
3. Скопировать следующие плагины в папку плагинов дешборда Wazuh. В примере используются плагины observabilityDashboards, mlCommonsDashboards и assistantDashboards:
# cp -r opensearch-dashboards-2.13.0/plugins/observabilityDashboards/ /usr/share/wazuh-dashboard/plugins/
# cp -r opensearch-dashboards-2.13.0/plugins/mlCommonsDashboards/ /usr/share/wazuh-dashboard/plugins/
# cp -r opensearch-dashboards-2.13.0/plugins/assistantDashboards/ /usr/share/wazuh-dashboard/plugins/
4. Установить разрешения и права собственности для плагинов, чтобы дешборд Wazuh мог их использовать:
# chown -R wazuh-dashboard:wazuh-dashboard /usr/share/wazuh-dashboard/plugins/observabilityDashboards/
# chown -R wazuh-dashboard:wazuh-dashboard /usr/share/wazuh-dashboard/plugins/mlCommonsDashboards/
# chown -R wazuh-dashboard:wazuh-dashboard /usr/share/wazuh-dashboard/plugins/assistantDashboards/
# chmod -R 750 /usr/share/wazuh-dashboard/plugins/observabilityDashboards/
# chmod -R 750 /usr/share/wazuh-dashboard/plugins/mlCommonsDashboards/
# chmod -R 750 /usr/share/wazuh-dashboard/plugins/assistantDashboards/
5. Добавить следующие настройки в файл /etc/wazuh-dashboard/opensearch_dashboards.yml. Это добавит и включит OpenSearch Assistant на дешборде Wazuh. OpenSearch Assistant – это пользовательский интерфейс на основе искусственного интеллекта.
assistant.chat.enabled: true
observability.query_assist.enabled: true
6. Перейти в каталог /usr/share/wazuh-indexer/:
# cd /usr/share/wazuh-indexer/
7. Установить плагины opensearch-flow-framework и opensearch-skills. Плагины позволяют использовать приложения искусственного интеллекта и функции машинного обучения на дешборде Wazuh.
# ./bin/opensearch-plugin install org.opensearch.plugin:opensearch-flow-framework:2.13.0.0
# ./bin/opensearch-plugin install org.opensearch.plugin:opensearch-skills:2.13.0.0
8. Перезапустить службу дешборда Wazuh:
# systemctl restart wazuh-dashboard
OpenSearch Assistant отображается после перезапуска службы дешборда Wazuh, как показано на изображении ниже.

Дешборд Wazuh
Нужно выполнить следующие шаги на дешборде Wazuh. Перейти на Indexer management > DevTools. Нажать кнопку воспроизведения после ввода каждого запроса, чтобы отправить API-запросы.
1. Настроить задачу машинного обучения на запуск на любом узле кластера:
PUT /_cluster/settings
{
"persistent" : {
"plugins.ml_commons.only_run_on_ml_node":"false"
}
}
Результат:
{
"acknowledged": true,
"persistent": {
"plugins": {
"ml_commons": {
"only_run_on_ml_node": "false"
}
}
},
"transient": {}
}

2. Создать API-коннектор для доступа к модели Claude 3.5 Haiku, размещенной на AWS:
POST /_plugins/_ml/connectors/_create
{
"name": "Amazon Bedrock Claude Haiku",
"description": "Connector for Amazon Bedrock Claude Haiku",
"version": 1,
"protocol": "aws_sigv4",
"credential": {
"access_key": "<ACCESS_KEY>",
"secret_key": "<SECRET_KEY>"
},
"parameters": {
"region": "<REGION>",
"service_name": "bedrock",
"auth": "Sig_V4",
"response_filter": "$.content[0].text",
"max_tokens_to_sample": "8000",
"anthropic_version": "<ANTHROPIC_VERSION>",
"model": "<MODEL>"
},
"actions": [
{
"action_type": "predict",
"method": "POST",
"headers": {
"content-type": "application/json"
},
"url": "https://bedrock-runtime.<REGION>.amazonaws.com/model/${parameters.model}/invoke"
,
"request_body": "{\"messages\":[{\"role\":\"user\",\"content\":[{\"type\":\"text\",\"text\":\"${parameters.prompt}\"}]}],\"anthropic_version\":\"${parameters.anthropic_version}\",\"max_tokens\":${parameters.max_tokens_to_sample}}"
}
]
}
Необходимые параметры выделены ниже.
- access_key и secret_key: Это пары ключей доступа, которые используются для аутентификации созданного здесь пользователя IAM. Следует заменить <ACCESS_KEY> и <SECRET_KEY> их значениями.
- region: Это регион AWS, в котором размещена модель. Модель Claude Haiku доступна в регионе us-west-2. Нужно заменить <REGION> на необходимый регион.
- service_name: Название сервиса AWS.
- auth: это протокол подписи AWS для добавления информации об аутентификации к запросам AWS API.
- anthropic_version и model:
- На вкладке Amazon Bedrock в консоли AWS нажмите на левой панели Providers.
- Нажать на Anthropic и выбрать Claude 3.5 Haiku.
- Прокрутить вниз до запроса API. Использовать значения anthropic_version и modelid для <ANTHROPIC_VERSION> и <MODEL>. В рассматриваемом случае это bedrock-2023-05-31 и anthropic.claude-3-5-haiku-20241022-v1:0 соответственно.
Результат:
{
"connector_id": "5KWlh5MB9UAfvOK_Onx6"
}

Сохранить connector_id, поскольку он понадобится в другом запросе API.
3. Зарегистрировать группу моделей. Группа моделей необходима для создания новой модели.
POST /_plugins/_ml/model_groups/_register
{
"name": "AWS Bedrock",
"description": "This is a public model group"
}
Результат:
{
"model_group_id": "3qWeh5MB9UAfvOK_xnyI",
"status": "CREATED"
}
Сохранить model_group_id.

4. Зарегистрировать и развернуть модель в созданной ранее группе моделей:
POST /_plugins/_ml/models/_register?deploy=true
{
"name": "Bedrock Claude model",
"function_name": "remote",
"model_group_id": "<MODEL_GROUP_ID>",
"description": "Test Model",
"connector_id": "<CONNECTOR_ID>"
}
Заменить <MODEL_GROUP_ID> и <CONNECTOR_ID> значениями model_group_id и connector_id.
Результат:
{
"task_id": "5aWmh5MB9UAfvOK_oXxk",
"status": "CREATED",
"model_id": "5qWmh5MB9UAfvOK_oXyQ"
}

Сохранить model_id.
5. Следует использовать следующий запрос для тестирования модели:
POST /_plugins/_ml/models/<MODEL_ID>/_predict
{
"parameters": {
"prompt": "\n\nHuman:hello\n\nAssistant:"
}
}
Заменить <MODEL_ID> на значение model_id.
Результат:
{
"inference_results": [
{
"output": [
{
"name": "response",
"dataAsMap": {
"response": "Hi there! How are you doing today? I'm happy to help you with any questions or tasks you may have. What would you like to chat about?"
}
}
],
"status_code": 200
}
]
}

Примечание: Если будет получен ответ, приведенный ниже, необходимо изменить текущий регион. Это означает, что в регионе не было доступа к модели Claude 3.5 Haiku. Модель доступна в регионе us-west-2.
{
"error": {
"root_cause": [
{
"type": "status_exception",
"reason": "Error from remote service: {\"message\":\"Invocation of model ID anthropic.claude-3-5-haiku-20241022-v1:0 with on-demand throughput isn't supported. Retry your request with the ID or ARN of an inference profile that contains this model.\"}"
}
],
"type": "status_exception",
"reason": "Error from remote service: {\"message\":\"Invocation of model ID anthropic.claude-3-5-haiku-20241022-v1:0 with on-demand throughput isn't supported. Retry your request with the ID or ARN of an inference profile that contains this model.\"}"
},
"status": 400
}
6. Зарегистрировать агента на модель Claude 3.5 Haiku:
POST /_plugins/_ml/agents/_register
{
"name": "Haiku_3.5_Claude_agent",
"type": "conversational",
"description": " This is a Haiku 3.5 Claude agent",
"llm": {
"model_id": "<MODEL_ID>",
"parameters": {
"max_iteration": 5,
"stop_when_no_tool_found": true
}
},
"memory": {
"type": "conversation_index"
},
"tools": [
{
"type": "MLModelTool",
"name": "bedrock_claude_model",
"description": "A general tool to answer any question",
"parameters": {
"model_id": "<MODEL_ID>",
"prompt": "Human: You're an Artificial intelligence analyst and you're going to help me with cybersecurity related tasks.\n\n${parameters.chat_history:-}\n\nHuman: ${parameters.question}\n\nAssistant:"
}
}
]
}
Результат:
{
"agent_id": "UZjEh5MBBzF0ul56sFFZ"
}

Сохранить agent_id.
7. Протестировать агента:
POST _plugins/_ml/agents/<AGENT_ID>/_execute
{
"parameters": {
"question": "Who are you?",
"verbose": false
}
}
Заменить <AGENT_ID> на значение agent_id.
Результат:
{
"inference_results": [
{
"output": [
{
"name": "memory_id",
"result": "V5jIh5MBBzF0ul56RFEB"
},
{
"name": "parent_interaction_id",
"result": "WJjIh5MBBzF0ul56RFEQ"
},
{
"name": "response",
"dataAsMap": {
"response": "I am an AI assistant designed to help with a wide range of tasks, with deep expertise in areas like OpenSearch, logs, traces, and metrics. I can understand and process large amounts of text, engage in natural conversations, and provide informative and accurate responses to various questions while always prioritizing helpful and ethical interactions.",
"additional_info": {}
}
}
]
}
]
}

8. Подсоединить агента к OpenSearch Assistant:
PUT .plugins-ml-config/_doc/os_chat
{
"type":"os_chat_root_agent",
"configuration":{
"agent_id": "<AGENT_ID>"
}
}
Заменить <AGENT_ID> на значение agent_id.
Результат:
{
"_index": ".plugins-ml-config",
"_id": "os_chat",
"_version": 2,
"result": "updated",
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"_seq_no": 2,
"_primary_term": 2
}

9. Обновить дешборд Wazuh.
Использование Claude Haiku LLM в дешборде Wazuh
В разделе ниже показано, как можно проверить знания модели о Wazuh и ее ответы.
Примечание:
- Следует всегда просматривать все ответы, которые генерирует Claude 3.5 Haiku LLM, поскольку иногда она может давать неточные или неправильные ответы. LLM может генерировать разные ответы на один и тот же вопрос.
- Для получения ответов на вопросы, связанные с Wazuh, сначала нужно просмотреть документацию к Wazuh, спросить в сообществе Wazuh или воспользоваться поисковой системой, чтобы проверить ответы, предоставленные LLM.
1. «Как установить агент Wazuh на конечную точку Windows?» Хороший ответ от LLM приведен на картинке ниже.

2. «Что делать, когда я вижу уведомление об уязвимости Wazuh?» LLM генерирует правильный ответ, который показан на изображении ниже.

3. «Что такое MITRE ID для обфускации?» LLM генерирует хороший ответ, как показано на изображении ниже.

4. «Как настроить модуль активного ответа Wazuh на блокировку IP-адреса после нескольких неудачных попыток аутентификации по SSH?» LLM генерирует частично правильный ответ, как показано на изображении ниже.

5. Написать Wazuh-декодер для сэмпла журнала «Nov 11 15:19:38 TrendDeepSecurity CEF:0|Trend Micro|Deep Security Manager|20.0.605|1556|Anti-Malware scan exclusion setting update|3|src=10.70.20.236 suser=System target=V-PRD-0014.example.com (V-PRD-0014) msg=The Anti-Malware scan exclusion setting contains the following errors:\n\nAn item specified in an Anti-Malware exclusion list cannot be modified by users.\nC:\windows\system32\spoolsv.exe\n\n TrendMicroDsTenant=Primary TrendMicroDsTenantId=0», извлекая поля product, version и severity. LLM генерирует неправильный ответ, как показано на рисунках ниже.


Вывод
Wazuh – это платформа мониторинга безопасности с открытым исходным кодом, которая объединяет возможности SIEM и XDR. Интеграция LLMs, таких, как Claude Haiku, представляет интерфейс, выполненный в формате чата на дешборде Wazuh, где пользователи могут вводить вопросы, связанные с безопасностью, и делать запросы к модели.







