Использование Claude Haiku в дешборде Wazuh

Большая языковая модель (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. Возможно, придется обратиться в службу поддержки, чтобы включить эту модель.

claude-3-5-haiku-model
claude-3-5-haiku

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

model access
edit-model-access

Создание пользователя IAM и ключей доступа

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

1. Выполнить поиск «IAM».

create-iam-user

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

create-user

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

user-details
set-permissions
review-and-create

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

choose-users

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

claude-haiku-security-credentials

Стоит сохранить учетные данные надежно, они будут использованы позже при создании коннектора к модели Claude Haiku из дешборда Wazuh.

6. Выбрать опцию Application running outside AWS и нажать кнопку Next.

claude-haiku-application-running-outside-aws

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

claude-haiku-create-access-key

8. Сохранить ключ доступа и секретный ключ доступа.

Примечание: Если не скопировать учетные данные до нажатия Done, восстановить их позже не удастся. Однако можно создать новый секретный ключ доступа.

Настройка политик Amazon Bedrock

Необходимо выполнить следующие шаги в консоли AWS, чтобы настроить политики, необходимые для интеграции.

1. Выполнить поиск «IAM».

configure-amazon-bedrock-policies

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.

assign-policy-name

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

entities-attached-tab
claude-haiku-attach-permissions

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

attached-successfully

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

claude-haiku-policies

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

aws-iam-user

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

policy-successfully-added

Сервер дешборда 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, как показано на изображении ниже.

opensearch-assistant

Дешборд 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": {}
}
claude-haiku-devtools-tab

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

Сохранить 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.

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-group-id-and-connector-id

Сохранить 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-haiku-inference-results

Примечание: Если будет получен ответ, приведенный ниже, необходимо изменить текущий регион. Это означает, что в регионе не было доступа к модели 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

Сохранить 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": {}
          }
        }
      ]
    }
  ]
}
dataasmap

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
}
plugins-ml-config

9. Обновить дешборд Wazuh.

Использование Claude Haiku LLM в дешборде Wazuh

В разделе ниже показано, как можно проверить знания модели о Wazuh и ее ответы.

Примечание:

  • Следует всегда просматривать все ответы, которые генерирует Claude 3.5 Haiku LLM, поскольку иногда она может давать неточные или неправильные ответы. LLM может генерировать разные ответы на один и тот же вопрос.
  • Для получения ответов на вопросы, связанные с Wazuh, сначала нужно просмотреть документацию к Wazuh, спросить в сообществе Wazuh или воспользоваться поисковой системой, чтобы проверить ответы, предоставленные LLM.

1. «Как установить агент Wazuh на конечную точку Windows?» Хороший ответ от LLM приведен на картинке ниже.

claude-haiku-llm

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

wazuh-vulnerability-alert

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

mitre-id-for-obfuscation

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

multiple-failed-ssh-authentication-attempts

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-decoder
claude-haiku-llm-generates-an-incorrect-response

Вывод

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

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